1""" 
    2    pygments.lexers._mysql_builtins 
    3    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 
    4 
    5    Self-updating data files for the MySQL lexer. 
    6 
    7    Run with `python -I` to update. 
    8 
    9    :copyright: Copyright 2006-2025 by the Pygments team, see AUTHORS. 
    10    :license: BSD, see LICENSE for details. 
    11""" 
    12 
    13 
    14MYSQL_CONSTANTS = ( 
    15    'false', 
    16    'null', 
    17    'true', 
    18    'unknown', 
    19) 
    20 
    21 
    22# At this time, no easily-parsed, definitive list of data types 
    23# has been found in the MySQL source code or documentation. (The 
    24# `sql/sql_yacc.yy` file is definitive but is difficult to parse.) 
    25# Therefore these types are currently maintained manually. 
    26# 
    27# Some words in this list -- like "long", "national", "precision", 
    28# and "varying" -- appear to only occur in combination with other 
    29# data type keywords. Therefore they are included as separate words 
    30# even though they do not naturally occur in syntax separately. 
    31# 
    32# This list is also used to strip data types out of the list of 
    33# MySQL keywords, which is automatically updated later in the file. 
    34# 
    35MYSQL_DATATYPES = ( 
    36    # Numeric data types 
    37    'bigint', 
    38    'bit', 
    39    'bool', 
    40    'boolean', 
    41    'dec', 
    42    'decimal', 
    43    'double', 
    44    'fixed', 
    45    'float', 
    46    'float4', 
    47    'float8', 
    48    'int', 
    49    'int1', 
    50    'int2', 
    51    'int3', 
    52    'int4', 
    53    'int8', 
    54    'integer', 
    55    'mediumint', 
    56    'middleint', 
    57    'numeric', 
    58    'precision', 
    59    'real', 
    60    'serial', 
    61    'smallint', 
    62    'tinyint', 
    63 
    64    # Date and time data types 
    65    'date', 
    66    'datetime', 
    67    'time', 
    68    'timestamp', 
    69    'year', 
    70 
    71    # String data types 
    72    'binary', 
    73    'blob', 
    74    'char', 
    75    'enum', 
    76    'long', 
    77    'longblob', 
    78    'longtext', 
    79    'mediumblob', 
    80    'mediumtext', 
    81    'national', 
    82    'nchar', 
    83    'nvarchar', 
    84    'set', 
    85    'text', 
    86    'tinyblob', 
    87    'tinytext', 
    88    'varbinary', 
    89    'varchar', 
    90    'varcharacter', 
    91    'varying', 
    92 
    93    # Spatial data types 
    94    'geometry', 
    95    'geometrycollection', 
    96    'linestring', 
    97    'multilinestring', 
    98    'multipoint', 
    99    'multipolygon', 
    100    'point', 
    101    'polygon', 
    102 
    103    # JSON data types 
    104    'json', 
    105) 
    106 
    107# Everything below this line is auto-generated from the MySQL source code. 
    108# Run this file in Python and it will update itself. 
    109# ----------------------------------------------------------------------------- 
    110 
    111MYSQL_FUNCTIONS = ( 
    112    'abs', 
    113    'acos', 
    114    'adddate', 
    115    'addtime', 
    116    'aes_decrypt', 
    117    'aes_encrypt', 
    118    'any_value', 
    119    'asin', 
    120    'atan', 
    121    'atan2', 
    122    'benchmark', 
    123    'bin', 
    124    'bin_to_uuid', 
    125    'bit_and', 
    126    'bit_count', 
    127    'bit_length', 
    128    'bit_or', 
    129    'bit_xor', 
    130    'can_access_column', 
    131    'can_access_database', 
    132    'can_access_event', 
    133    'can_access_resource_group', 
    134    'can_access_routine', 
    135    'can_access_table', 
    136    'can_access_trigger', 
    137    'can_access_user', 
    138    'can_access_view', 
    139    'cast', 
    140    'ceil', 
    141    'ceiling', 
    142    'char_length', 
    143    'character_length', 
    144    'coercibility', 
    145    'compress', 
    146    'concat', 
    147    'concat_ws', 
    148    'connection_id', 
    149    'conv', 
    150    'convert_cpu_id_mask', 
    151    'convert_interval_to_user_interval', 
    152    'convert_tz', 
    153    'cos', 
    154    'cot', 
    155    'count', 
    156    'crc32', 
    157    'curdate', 
    158    'current_role', 
    159    'curtime', 
    160    'date_add', 
    161    'date_format', 
    162    'date_sub', 
    163    'datediff', 
    164    'dayname', 
    165    'dayofmonth', 
    166    'dayofweek', 
    167    'dayofyear', 
    168    'degrees', 
    169    'elt', 
    170    'exp', 
    171    'export_set', 
    172    'extract', 
    173    'extractvalue', 
    174    'field', 
    175    'find_in_set', 
    176    'floor', 
    177    'format_bytes', 
    178    'format_pico_time', 
    179    'found_rows', 
    180    'from_base64', 
    181    'from_days', 
    182    'from_unixtime', 
    183    'get_dd_column_privileges', 
    184    'get_dd_create_options', 
    185    'get_dd_index_private_data', 
    186    'get_dd_index_sub_part_length', 
    187    'get_dd_property_key_value', 
    188    'get_dd_schema_options', 
    189    'get_dd_tablespace_private_data', 
    190    'get_lock', 
    191    'greatest', 
    192    'group_concat', 
    193    'gtid_subset', 
    194    'gtid_subtract', 
    195    'hex', 
    196    'icu_version', 
    197    'ifnull', 
    198    'inet6_aton', 
    199    'inet6_ntoa', 
    200    'inet_aton', 
    201    'inet_ntoa', 
    202    'instr', 
    203    'internal_auto_increment', 
    204    'internal_avg_row_length', 
    205    'internal_check_time', 
    206    'internal_checksum', 
    207    'internal_data_free', 
    208    'internal_data_length', 
    209    'internal_dd_char_length', 
    210    'internal_get_comment_or_error', 
    211    'internal_get_dd_column_extra', 
    212    'internal_get_enabled_role_json', 
    213    'internal_get_hostname', 
    214    'internal_get_mandatory_roles_json', 
    215    'internal_get_partition_nodegroup', 
    216    'internal_get_username', 
    217    'internal_get_view_warning_or_error', 
    218    'internal_index_column_cardinality', 
    219    'internal_index_length', 
    220    'internal_is_enabled_role', 
    221    'internal_is_mandatory_role', 
    222    'internal_keys_disabled', 
    223    'internal_max_data_length', 
    224    'internal_table_rows', 
    225    'internal_tablespace_autoextend_size', 
    226    'internal_tablespace_data_free', 
    227    'internal_tablespace_extent_size', 
    228    'internal_tablespace_extra', 
    229    'internal_tablespace_free_extents', 
    230    'internal_tablespace_id', 
    231    'internal_tablespace_initial_size', 
    232    'internal_tablespace_logfile_group_name', 
    233    'internal_tablespace_logfile_group_number', 
    234    'internal_tablespace_maximum_size', 
    235    'internal_tablespace_row_format', 
    236    'internal_tablespace_status', 
    237    'internal_tablespace_total_extents', 
    238    'internal_tablespace_type', 
    239    'internal_tablespace_version', 
    240    'internal_update_time', 
    241    'is_free_lock', 
    242    'is_ipv4', 
    243    'is_ipv4_compat', 
    244    'is_ipv4_mapped', 
    245    'is_ipv6', 
    246    'is_used_lock', 
    247    'is_uuid', 
    248    'is_visible_dd_object', 
    249    'isnull', 
    250    'json_array', 
    251    'json_array_append', 
    252    'json_array_insert', 
    253    'json_arrayagg', 
    254    'json_contains', 
    255    'json_contains_path', 
    256    'json_depth', 
    257    'json_extract', 
    258    'json_insert', 
    259    'json_keys', 
    260    'json_length', 
    261    'json_merge', 
    262    'json_merge_patch', 
    263    'json_merge_preserve', 
    264    'json_object', 
    265    'json_objectagg', 
    266    'json_overlaps', 
    267    'json_pretty', 
    268    'json_quote', 
    269    'json_remove', 
    270    'json_replace', 
    271    'json_schema_valid', 
    272    'json_schema_validation_report', 
    273    'json_search', 
    274    'json_set', 
    275    'json_storage_free', 
    276    'json_storage_size', 
    277    'json_type', 
    278    'json_unquote', 
    279    'json_valid', 
    280    'last_day', 
    281    'last_insert_id', 
    282    'lcase', 
    283    'least', 
    284    'length', 
    285    'like_range_max', 
    286    'like_range_min', 
    287    'ln', 
    288    'load_file', 
    289    'locate', 
    290    'log', 
    291    'log10', 
    292    'log2', 
    293    'lower', 
    294    'lpad', 
    295    'ltrim', 
    296    'make_set', 
    297    'makedate', 
    298    'maketime', 
    299    'master_pos_wait', 
    300    'max', 
    301    'mbrcontains', 
    302    'mbrcoveredby', 
    303    'mbrcovers', 
    304    'mbrdisjoint', 
    305    'mbrequals', 
    306    'mbrintersects', 
    307    'mbroverlaps', 
    308    'mbrtouches', 
    309    'mbrwithin', 
    310    'md5', 
    311    'mid', 
    312    'min', 
    313    'monthname', 
    314    'name_const', 
    315    'now', 
    316    'nullif', 
    317    'oct', 
    318    'octet_length', 
    319    'ord', 
    320    'period_add', 
    321    'period_diff', 
    322    'pi', 
    323    'position', 
    324    'pow', 
    325    'power', 
    326    'ps_current_thread_id', 
    327    'ps_thread_id', 
    328    'quote', 
    329    'radians', 
    330    'rand', 
    331    'random_bytes', 
    332    'regexp_instr', 
    333    'regexp_like', 
    334    'regexp_replace', 
    335    'regexp_substr', 
    336    'release_all_locks', 
    337    'release_lock', 
    338    'remove_dd_property_key', 
    339    'reverse', 
    340    'roles_graphml', 
    341    'round', 
    342    'rpad', 
    343    'rtrim', 
    344    'sec_to_time', 
    345    'session_user', 
    346    'sha', 
    347    'sha1', 
    348    'sha2', 
    349    'sign', 
    350    'sin', 
    351    'sleep', 
    352    'soundex', 
    353    'source_pos_wait', 
    354    'space', 
    355    'sqrt', 
    356    'st_area', 
    357    'st_asbinary', 
    358    'st_asgeojson', 
    359    'st_astext', 
    360    'st_aswkb', 
    361    'st_aswkt', 
    362    'st_buffer', 
    363    'st_buffer_strategy', 
    364    'st_centroid', 
    365    'st_collect', 
    366    'st_contains', 
    367    'st_convexhull', 
    368    'st_crosses', 
    369    'st_difference', 
    370    'st_dimension', 
    371    'st_disjoint', 
    372    'st_distance', 
    373    'st_distance_sphere', 
    374    'st_endpoint', 
    375    'st_envelope', 
    376    'st_equals', 
    377    'st_exteriorring', 
    378    'st_frechetdistance', 
    379    'st_geohash', 
    380    'st_geomcollfromtext', 
    381    'st_geomcollfromtxt', 
    382    'st_geomcollfromwkb', 
    383    'st_geometrycollectionfromtext', 
    384    'st_geometrycollectionfromwkb', 
    385    'st_geometryfromtext', 
    386    'st_geometryfromwkb', 
    387    'st_geometryn', 
    388    'st_geometrytype', 
    389    'st_geomfromgeojson', 
    390    'st_geomfromtext', 
    391    'st_geomfromwkb', 
    392    'st_hausdorffdistance', 
    393    'st_interiorringn', 
    394    'st_intersection', 
    395    'st_intersects', 
    396    'st_isclosed', 
    397    'st_isempty', 
    398    'st_issimple', 
    399    'st_isvalid', 
    400    'st_latfromgeohash', 
    401    'st_latitude', 
    402    'st_length', 
    403    'st_linefromtext', 
    404    'st_linefromwkb', 
    405    'st_lineinterpolatepoint', 
    406    'st_lineinterpolatepoints', 
    407    'st_linestringfromtext', 
    408    'st_linestringfromwkb', 
    409    'st_longfromgeohash', 
    410    'st_longitude', 
    411    'st_makeenvelope', 
    412    'st_mlinefromtext', 
    413    'st_mlinefromwkb', 
    414    'st_mpointfromtext', 
    415    'st_mpointfromwkb', 
    416    'st_mpolyfromtext', 
    417    'st_mpolyfromwkb', 
    418    'st_multilinestringfromtext', 
    419    'st_multilinestringfromwkb', 
    420    'st_multipointfromtext', 
    421    'st_multipointfromwkb', 
    422    'st_multipolygonfromtext', 
    423    'st_multipolygonfromwkb', 
    424    'st_numgeometries', 
    425    'st_numinteriorring', 
    426    'st_numinteriorrings', 
    427    'st_numpoints', 
    428    'st_overlaps', 
    429    'st_pointatdistance', 
    430    'st_pointfromgeohash', 
    431    'st_pointfromtext', 
    432    'st_pointfromwkb', 
    433    'st_pointn', 
    434    'st_polyfromtext', 
    435    'st_polyfromwkb', 
    436    'st_polygonfromtext', 
    437    'st_polygonfromwkb', 
    438    'st_simplify', 
    439    'st_srid', 
    440    'st_startpoint', 
    441    'st_swapxy', 
    442    'st_symdifference', 
    443    'st_touches', 
    444    'st_transform', 
    445    'st_union', 
    446    'st_validate', 
    447    'st_within', 
    448    'st_x', 
    449    'st_y', 
    450    'statement_digest', 
    451    'statement_digest_text', 
    452    'std', 
    453    'stddev', 
    454    'stddev_pop', 
    455    'stddev_samp', 
    456    'str_to_date', 
    457    'strcmp', 
    458    'subdate', 
    459    'substr', 
    460    'substring', 
    461    'substring_index', 
    462    'subtime', 
    463    'sum', 
    464    'sysdate', 
    465    'system_user', 
    466    'tan', 
    467    'time_format', 
    468    'time_to_sec', 
    469    'timediff', 
    470    'to_base64', 
    471    'to_days', 
    472    'to_seconds', 
    473    'trim', 
    474    'ucase', 
    475    'uncompress', 
    476    'uncompressed_length', 
    477    'unhex', 
    478    'unix_timestamp', 
    479    'updatexml', 
    480    'upper', 
    481    'uuid', 
    482    'uuid_short', 
    483    'uuid_to_bin', 
    484    'validate_password_strength', 
    485    'var_pop', 
    486    'var_samp', 
    487    'variance', 
    488    'version', 
    489    'wait_for_executed_gtid_set', 
    490    'wait_until_sql_thread_after_gtids', 
    491    'weekday', 
    492    'weekofyear', 
    493    'yearweek', 
    494) 
    495 
    496 
    497MYSQL_OPTIMIZER_HINTS = ( 
    498    'bka', 
    499    'bnl', 
    500    'derived_condition_pushdown', 
    501    'dupsweedout', 
    502    'firstmatch', 
    503    'group_index', 
    504    'hash_join', 
    505    'index', 
    506    'index_merge', 
    507    'intoexists', 
    508    'join_fixed_order', 
    509    'join_index', 
    510    'join_order', 
    511    'join_prefix', 
    512    'join_suffix', 
    513    'loosescan', 
    514    'materialization', 
    515    'max_execution_time', 
    516    'merge', 
    517    'mrr', 
    518    'no_bka', 
    519    'no_bnl', 
    520    'no_derived_condition_pushdown', 
    521    'no_group_index', 
    522    'no_hash_join', 
    523    'no_icp', 
    524    'no_index', 
    525    'no_index_merge', 
    526    'no_join_index', 
    527    'no_merge', 
    528    'no_mrr', 
    529    'no_order_index', 
    530    'no_range_optimization', 
    531    'no_semijoin', 
    532    'no_skip_scan', 
    533    'order_index', 
    534    'qb_name', 
    535    'resource_group', 
    536    'semijoin', 
    537    'set_var', 
    538    'skip_scan', 
    539    'subquery', 
    540) 
    541 
    542 
    543MYSQL_KEYWORDS = ( 
    544    'accessible', 
    545    'account', 
    546    'action', 
    547    'active', 
    548    'add', 
    549    'admin', 
    550    'after', 
    551    'against', 
    552    'aggregate', 
    553    'algorithm', 
    554    'all', 
    555    'alter', 
    556    'always', 
    557    'analyze', 
    558    'and', 
    559    'any', 
    560    'array', 
    561    'as', 
    562    'asc', 
    563    'ascii', 
    564    'asensitive', 
    565    'assign_gtids_to_anonymous_transactions', 
    566    'at', 
    567    'attribute', 
    568    'authentication', 
    569    'auto_increment', 
    570    'autoextend_size', 
    571    'avg', 
    572    'avg_row_length', 
    573    'backup', 
    574    'before', 
    575    'begin', 
    576    'between', 
    577    'binlog', 
    578    'block', 
    579    'both', 
    580    'btree', 
    581    'buckets', 
    582    'by', 
    583    'byte', 
    584    'cache', 
    585    'call', 
    586    'cascade', 
    587    'cascaded', 
    588    'case', 
    589    'catalog_name', 
    590    'chain', 
    591    'challenge_response', 
    592    'change', 
    593    'changed', 
    594    'channel', 
    595    'character', 
    596    'charset', 
    597    'check', 
    598    'checksum', 
    599    'cipher', 
    600    'class_origin', 
    601    'client', 
    602    'clone', 
    603    'close', 
    604    'coalesce', 
    605    'code', 
    606    'collate', 
    607    'collation', 
    608    'column', 
    609    'column_format', 
    610    'column_name', 
    611    'columns', 
    612    'comment', 
    613    'commit', 
    614    'committed', 
    615    'compact', 
    616    'completion', 
    617    'component', 
    618    'compressed', 
    619    'compression', 
    620    'concurrent', 
    621    'condition', 
    622    'connection', 
    623    'consistent', 
    624    'constraint', 
    625    'constraint_catalog', 
    626    'constraint_name', 
    627    'constraint_schema', 
    628    'contains', 
    629    'context', 
    630    'continue', 
    631    'convert', 
    632    'cpu', 
    633    'create', 
    634    'cross', 
    635    'cube', 
    636    'cume_dist', 
    637    'current', 
    638    'current_date', 
    639    'current_time', 
    640    'current_timestamp', 
    641    'current_user', 
    642    'cursor', 
    643    'cursor_name', 
    644    'data', 
    645    'database', 
    646    'databases', 
    647    'datafile', 
    648    'day', 
    649    'day_hour', 
    650    'day_microsecond', 
    651    'day_minute', 
    652    'day_second', 
    653    'deallocate', 
    654    'declare', 
    655    'default', 
    656    'default_auth', 
    657    'definer', 
    658    'definition', 
    659    'delay_key_write', 
    660    'delayed', 
    661    'delete', 
    662    'dense_rank', 
    663    'desc', 
    664    'describe', 
    665    'description', 
    666    'deterministic', 
    667    'diagnostics', 
    668    'directory', 
    669    'disable', 
    670    'discard', 
    671    'disk', 
    672    'distinct', 
    673    'distinctrow', 
    674    'div', 
    675    'do', 
    676    'drop', 
    677    'dual', 
    678    'dumpfile', 
    679    'duplicate', 
    680    'dynamic', 
    681    'each', 
    682    'else', 
    683    'elseif', 
    684    'empty', 
    685    'enable', 
    686    'enclosed', 
    687    'encryption', 
    688    'end', 
    689    'ends', 
    690    'enforced', 
    691    'engine', 
    692    'engine_attribute', 
    693    'engines', 
    694    'error', 
    695    'errors', 
    696    'escape', 
    697    'escaped', 
    698    'event', 
    699    'events', 
    700    'every', 
    701    'except', 
    702    'exchange', 
    703    'exclude', 
    704    'execute', 
    705    'exists', 
    706    'exit', 
    707    'expansion', 
    708    'expire', 
    709    'explain', 
    710    'export', 
    711    'extended', 
    712    'extent_size', 
    713    'factor', 
    714    'failed_login_attempts', 
    715    'false', 
    716    'fast', 
    717    'faults', 
    718    'fetch', 
    719    'fields', 
    720    'file', 
    721    'file_block_size', 
    722    'filter', 
    723    'finish', 
    724    'first', 
    725    'first_value', 
    726    'flush', 
    727    'following', 
    728    'follows', 
    729    'for', 
    730    'force', 
    731    'foreign', 
    732    'format', 
    733    'found', 
    734    'from', 
    735    'full', 
    736    'fulltext', 
    737    'function', 
    738    'general', 
    739    'generated', 
    740    'geomcollection', 
    741    'get', 
    742    'get_format', 
    743    'get_master_public_key', 
    744    'get_source_public_key', 
    745    'global', 
    746    'grant', 
    747    'grants', 
    748    'group', 
    749    'group_replication', 
    750    'grouping', 
    751    'groups', 
    752    'gtid_only', 
    753    'handler', 
    754    'hash', 
    755    'having', 
    756    'help', 
    757    'high_priority', 
    758    'histogram', 
    759    'history', 
    760    'host', 
    761    'hosts', 
    762    'hour', 
    763    'hour_microsecond', 
    764    'hour_minute', 
    765    'hour_second', 
    766    'identified', 
    767    'if', 
    768    'ignore', 
    769    'ignore_server_ids', 
    770    'import', 
    771    'in', 
    772    'inactive', 
    773    'index', 
    774    'indexes', 
    775    'infile', 
    776    'initial', 
    777    'initial_size', 
    778    'initiate', 
    779    'inner', 
    780    'inout', 
    781    'insensitive', 
    782    'insert', 
    783    'insert_method', 
    784    'install', 
    785    'instance', 
    786    'interval', 
    787    'into', 
    788    'invisible', 
    789    'invoker', 
    790    'io', 
    791    'io_after_gtids', 
    792    'io_before_gtids', 
    793    'io_thread', 
    794    'ipc', 
    795    'is', 
    796    'isolation', 
    797    'issuer', 
    798    'iterate', 
    799    'join', 
    800    'json_table', 
    801    'json_value', 
    802    'key', 
    803    'key_block_size', 
    804    'keyring', 
    805    'keys', 
    806    'kill', 
    807    'lag', 
    808    'language', 
    809    'last', 
    810    'last_value', 
    811    'lateral', 
    812    'lead', 
    813    'leading', 
    814    'leave', 
    815    'leaves', 
    816    'left', 
    817    'less', 
    818    'level', 
    819    'like', 
    820    'limit', 
    821    'linear', 
    822    'lines', 
    823    'list', 
    824    'load', 
    825    'local', 
    826    'localtime', 
    827    'localtimestamp', 
    828    'lock', 
    829    'locked', 
    830    'locks', 
    831    'logfile', 
    832    'logs', 
    833    'loop', 
    834    'low_priority', 
    835    'master', 
    836    'master_auto_position', 
    837    'master_bind', 
    838    'master_compression_algorithms', 
    839    'master_connect_retry', 
    840    'master_delay', 
    841    'master_heartbeat_period', 
    842    'master_host', 
    843    'master_log_file', 
    844    'master_log_pos', 
    845    'master_password', 
    846    'master_port', 
    847    'master_public_key_path', 
    848    'master_retry_count', 
    849    'master_ssl', 
    850    'master_ssl_ca', 
    851    'master_ssl_capath', 
    852    'master_ssl_cert', 
    853    'master_ssl_cipher', 
    854    'master_ssl_crl', 
    855    'master_ssl_crlpath', 
    856    'master_ssl_key', 
    857    'master_ssl_verify_server_cert', 
    858    'master_tls_ciphersuites', 
    859    'master_tls_version', 
    860    'master_user', 
    861    'master_zstd_compression_level', 
    862    'match', 
    863    'max_connections_per_hour', 
    864    'max_queries_per_hour', 
    865    'max_rows', 
    866    'max_size', 
    867    'max_updates_per_hour', 
    868    'max_user_connections', 
    869    'maxvalue', 
    870    'medium', 
    871    'member', 
    872    'memory', 
    873    'merge', 
    874    'message_text', 
    875    'microsecond', 
    876    'migrate', 
    877    'min_rows', 
    878    'minute', 
    879    'minute_microsecond', 
    880    'minute_second', 
    881    'mod', 
    882    'mode', 
    883    'modifies', 
    884    'modify', 
    885    'month', 
    886    'mutex', 
    887    'mysql_errno', 
    888    'name', 
    889    'names', 
    890    'natural', 
    891    'ndb', 
    892    'ndbcluster', 
    893    'nested', 
    894    'network_namespace', 
    895    'never', 
    896    'new', 
    897    'next', 
    898    'no', 
    899    'no_wait', 
    900    'no_write_to_binlog', 
    901    'nodegroup', 
    902    'none', 
    903    'not', 
    904    'nowait', 
    905    'nth_value', 
    906    'ntile', 
    907    'null', 
    908    'nulls', 
    909    'number', 
    910    'of', 
    911    'off', 
    912    'offset', 
    913    'oj', 
    914    'old', 
    915    'on', 
    916    'one', 
    917    'only', 
    918    'open', 
    919    'optimize', 
    920    'optimizer_costs', 
    921    'option', 
    922    'optional', 
    923    'optionally', 
    924    'options', 
    925    'or', 
    926    'order', 
    927    'ordinality', 
    928    'organization', 
    929    'others', 
    930    'out', 
    931    'outer', 
    932    'outfile', 
    933    'over', 
    934    'owner', 
    935    'pack_keys', 
    936    'page', 
    937    'parser', 
    938    'partial', 
    939    'partition', 
    940    'partitioning', 
    941    'partitions', 
    942    'password', 
    943    'password_lock_time', 
    944    'path', 
    945    'percent_rank', 
    946    'persist', 
    947    'persist_only', 
    948    'phase', 
    949    'plugin', 
    950    'plugin_dir', 
    951    'plugins', 
    952    'port', 
    953    'precedes', 
    954    'preceding', 
    955    'prepare', 
    956    'preserve', 
    957    'prev', 
    958    'primary', 
    959    'privilege_checks_user', 
    960    'privileges', 
    961    'procedure', 
    962    'process', 
    963    'processlist', 
    964    'profile', 
    965    'profiles', 
    966    'proxy', 
    967    'purge', 
    968    'quarter', 
    969    'query', 
    970    'quick', 
    971    'random', 
    972    'range', 
    973    'rank', 
    974    'read', 
    975    'read_only', 
    976    'read_write', 
    977    'reads', 
    978    'rebuild', 
    979    'recover', 
    980    'recursive', 
    981    'redo_buffer_size', 
    982    'redundant', 
    983    'reference', 
    984    'references', 
    985    'regexp', 
    986    'registration', 
    987    'relay', 
    988    'relay_log_file', 
    989    'relay_log_pos', 
    990    'relay_thread', 
    991    'relaylog', 
    992    'release', 
    993    'reload', 
    994    'remove', 
    995    'rename', 
    996    'reorganize', 
    997    'repair', 
    998    'repeat', 
    999    'repeatable', 
    1000    'replace', 
    1001    'replica', 
    1002    'replicas', 
    1003    'replicate_do_db', 
    1004    'replicate_do_table', 
    1005    'replicate_ignore_db', 
    1006    'replicate_ignore_table', 
    1007    'replicate_rewrite_db', 
    1008    'replicate_wild_do_table', 
    1009    'replicate_wild_ignore_table', 
    1010    'replication', 
    1011    'require', 
    1012    'require_row_format', 
    1013    'require_table_primary_key_check', 
    1014    'reset', 
    1015    'resignal', 
    1016    'resource', 
    1017    'respect', 
    1018    'restart', 
    1019    'restore', 
    1020    'restrict', 
    1021    'resume', 
    1022    'retain', 
    1023    'return', 
    1024    'returned_sqlstate', 
    1025    'returning', 
    1026    'returns', 
    1027    'reuse', 
    1028    'reverse', 
    1029    'revoke', 
    1030    'right', 
    1031    'rlike', 
    1032    'role', 
    1033    'rollback', 
    1034    'rollup', 
    1035    'rotate', 
    1036    'routine', 
    1037    'row', 
    1038    'row_count', 
    1039    'row_format', 
    1040    'row_number', 
    1041    'rows', 
    1042    'rtree', 
    1043    'savepoint', 
    1044    'schedule', 
    1045    'schema', 
    1046    'schema_name', 
    1047    'schemas', 
    1048    'second', 
    1049    'second_microsecond', 
    1050    'secondary', 
    1051    'secondary_engine', 
    1052    'secondary_engine_attribute', 
    1053    'secondary_load', 
    1054    'secondary_unload', 
    1055    'security', 
    1056    'select', 
    1057    'sensitive', 
    1058    'separator', 
    1059    'serializable', 
    1060    'server', 
    1061    'session', 
    1062    'share', 
    1063    'show', 
    1064    'shutdown', 
    1065    'signal', 
    1066    'signed', 
    1067    'simple', 
    1068    'skip', 
    1069    'slave', 
    1070    'slow', 
    1071    'snapshot', 
    1072    'socket', 
    1073    'some', 
    1074    'soname', 
    1075    'sounds', 
    1076    'source', 
    1077    'source_auto_position', 
    1078    'source_bind', 
    1079    'source_compression_algorithms', 
    1080    'source_connect_retry', 
    1081    'source_connection_auto_failover', 
    1082    'source_delay', 
    1083    'source_heartbeat_period', 
    1084    'source_host', 
    1085    'source_log_file', 
    1086    'source_log_pos', 
    1087    'source_password', 
    1088    'source_port', 
    1089    'source_public_key_path', 
    1090    'source_retry_count', 
    1091    'source_ssl', 
    1092    'source_ssl_ca', 
    1093    'source_ssl_capath', 
    1094    'source_ssl_cert', 
    1095    'source_ssl_cipher', 
    1096    'source_ssl_crl', 
    1097    'source_ssl_crlpath', 
    1098    'source_ssl_key', 
    1099    'source_ssl_verify_server_cert', 
    1100    'source_tls_ciphersuites', 
    1101    'source_tls_version', 
    1102    'source_user', 
    1103    'source_zstd_compression_level', 
    1104    'spatial', 
    1105    'specific', 
    1106    'sql', 
    1107    'sql_after_gtids', 
    1108    'sql_after_mts_gaps', 
    1109    'sql_before_gtids', 
    1110    'sql_big_result', 
    1111    'sql_buffer_result', 
    1112    'sql_calc_found_rows', 
    1113    'sql_no_cache', 
    1114    'sql_small_result', 
    1115    'sql_thread', 
    1116    'sql_tsi_day', 
    1117    'sql_tsi_hour', 
    1118    'sql_tsi_minute', 
    1119    'sql_tsi_month', 
    1120    'sql_tsi_quarter', 
    1121    'sql_tsi_second', 
    1122    'sql_tsi_week', 
    1123    'sql_tsi_year', 
    1124    'sqlexception', 
    1125    'sqlstate', 
    1126    'sqlwarning', 
    1127    'srid', 
    1128    'ssl', 
    1129    'stacked', 
    1130    'start', 
    1131    'starting', 
    1132    'starts', 
    1133    'stats_auto_recalc', 
    1134    'stats_persistent', 
    1135    'stats_sample_pages', 
    1136    'status', 
    1137    'stop', 
    1138    'storage', 
    1139    'stored', 
    1140    'straight_join', 
    1141    'stream', 
    1142    'string', 
    1143    'subclass_origin', 
    1144    'subject', 
    1145    'subpartition', 
    1146    'subpartitions', 
    1147    'super', 
    1148    'suspend', 
    1149    'swaps', 
    1150    'switches', 
    1151    'system', 
    1152    'table', 
    1153    'table_checksum', 
    1154    'table_name', 
    1155    'tables', 
    1156    'tablespace', 
    1157    'temporary', 
    1158    'temptable', 
    1159    'terminated', 
    1160    'than', 
    1161    'then', 
    1162    'thread_priority', 
    1163    'ties', 
    1164    'timestampadd', 
    1165    'timestampdiff', 
    1166    'tls', 
    1167    'to', 
    1168    'trailing', 
    1169    'transaction', 
    1170    'trigger', 
    1171    'triggers', 
    1172    'true', 
    1173    'truncate', 
    1174    'type', 
    1175    'types', 
    1176    'unbounded', 
    1177    'uncommitted', 
    1178    'undefined', 
    1179    'undo', 
    1180    'undo_buffer_size', 
    1181    'undofile', 
    1182    'unicode', 
    1183    'uninstall', 
    1184    'union', 
    1185    'unique', 
    1186    'unknown', 
    1187    'unlock', 
    1188    'unregister', 
    1189    'unsigned', 
    1190    'until', 
    1191    'update', 
    1192    'upgrade', 
    1193    'usage', 
    1194    'use', 
    1195    'use_frm', 
    1196    'user', 
    1197    'user_resources', 
    1198    'using', 
    1199    'utc_date', 
    1200    'utc_time', 
    1201    'utc_timestamp', 
    1202    'validation', 
    1203    'value', 
    1204    'values', 
    1205    'variables', 
    1206    'vcpu', 
    1207    'view', 
    1208    'virtual', 
    1209    'visible', 
    1210    'wait', 
    1211    'warnings', 
    1212    'week', 
    1213    'weight_string', 
    1214    'when', 
    1215    'where', 
    1216    'while', 
    1217    'window', 
    1218    'with', 
    1219    'without', 
    1220    'work', 
    1221    'wrapper', 
    1222    'write', 
    1223    'x509', 
    1224    'xa', 
    1225    'xid', 
    1226    'xml', 
    1227    'xor', 
    1228    'year_month', 
    1229    'zerofill', 
    1230    'zone', 
    1231) 
    1232 
    1233 
    1234if __name__ == '__main__':  # pragma: no cover 
    1235    import re 
    1236    from urllib.request import urlopen 
    1237 
    1238    from pygments.util import format_lines 
    1239 
    1240    # MySQL source code 
    1241    SOURCE_URL = 'https://github.com/mysql/mysql-server/raw/8.0' 
    1242    LEX_URL = SOURCE_URL + '/sql/lex.h' 
    1243    ITEM_CREATE_URL = SOURCE_URL + '/sql/item_create.cc' 
    1244 
    1245 
    1246    def update_myself(): 
    1247        # Pull content from lex.h. 
    1248        lex_file = urlopen(LEX_URL).read().decode('utf8', errors='ignore') 
    1249        keywords = parse_lex_keywords(lex_file) 
    1250        functions = parse_lex_functions(lex_file) 
    1251        optimizer_hints = parse_lex_optimizer_hints(lex_file) 
    1252 
    1253        # Parse content in item_create.cc. 
    1254        item_create_file = urlopen(ITEM_CREATE_URL).read().decode('utf8', errors='ignore') 
    1255        functions.update(parse_item_create_functions(item_create_file)) 
    1256 
    1257        # Remove data types from the set of keywords. 
    1258        keywords -= set(MYSQL_DATATYPES) 
    1259 
    1260        update_content('MYSQL_FUNCTIONS', tuple(sorted(functions))) 
    1261        update_content('MYSQL_KEYWORDS', tuple(sorted(keywords))) 
    1262        update_content('MYSQL_OPTIMIZER_HINTS', tuple(sorted(optimizer_hints))) 
    1263 
    1264 
    1265    def parse_lex_keywords(f): 
    1266        """Parse keywords in lex.h.""" 
    1267 
    1268        results = set() 
    1269        for m in re.finditer(r'{SYM(?:_HK)?\("(?P<keyword>[a-z0-9_]+)",', f, flags=re.I): 
    1270            results.add(m.group('keyword').lower()) 
    1271 
    1272        if not results: 
    1273            raise ValueError('No keywords found') 
    1274 
    1275        return results 
    1276 
    1277 
    1278    def parse_lex_optimizer_hints(f): 
    1279        """Parse optimizer hints in lex.h.""" 
    1280 
    1281        results = set() 
    1282        for m in re.finditer(r'{SYM_H\("(?P<keyword>[a-z0-9_]+)",', f, flags=re.I): 
    1283            results.add(m.group('keyword').lower()) 
    1284 
    1285        if not results: 
    1286            raise ValueError('No optimizer hints found') 
    1287 
    1288        return results 
    1289 
    1290 
    1291    def parse_lex_functions(f): 
    1292        """Parse MySQL function names from lex.h.""" 
    1293 
    1294        results = set() 
    1295        for m in re.finditer(r'{SYM_FN?\("(?P<function>[a-z0-9_]+)",', f, flags=re.I): 
    1296            results.add(m.group('function').lower()) 
    1297 
    1298        if not results: 
    1299            raise ValueError('No lex functions found') 
    1300 
    1301        return results 
    1302 
    1303 
    1304    def parse_item_create_functions(f): 
    1305        """Parse MySQL function names from item_create.cc.""" 
    1306 
    1307        results = set() 
    1308        for m in re.finditer(r'{"(?P<function>[^"]+?)",\s*SQL_F[^(]+?\(', f, flags=re.I): 
    1309            results.add(m.group('function').lower()) 
    1310 
    1311        if not results: 
    1312            raise ValueError('No item_create functions found') 
    1313 
    1314        return results 
    1315 
    1316 
    1317    def update_content(field_name, content): 
    1318        """Overwrite this file with content parsed from MySQL's source code.""" 
    1319 
    1320        with open(__file__, encoding="utf-8") as f: 
    1321            data = f.read() 
    1322 
    1323        # Line to start/end inserting 
    1324        re_match = re.compile(rf'^{field_name}\s*=\s*\($.*?^\s*\)$', re.M | re.S) 
    1325        m = re_match.search(data) 
    1326        if not m: 
    1327            raise ValueError(f'Could not find an existing definition for {field_name}') 
    1328 
    1329        new_block = format_lines(field_name, content) 
    1330        data = data[:m.start()] + new_block + data[m.end():] 
    1331 
    1332        with open(__file__, 'w', encoding='utf-8', newline='\n') as f: 
    1333            f.write(data) 
    1334 
    1335    update_myself()