eric6/ThirdParty/Pygments/pygments/lexers/_mysql_builtins.py

changeset 7701
25f42e208e08
child 7983
54c5cfbb1e29
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/eric6/ThirdParty/Pygments/pygments/lexers/_mysql_builtins.py	Tue Sep 15 19:09:05 2020 +0200
@@ -0,0 +1,1282 @@
+# -*- coding: utf-8 -*-
+"""
+    pygments.lexers._mysql_builtins
+    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+    Self-updating data files for the MySQL lexer.
+
+    :copyright: Copyright 2020 by the Pygments team, see AUTHORS.
+    :license: BSD, see LICENSE for details.
+"""
+
+
+MYSQL_CONSTANTS = (
+    'false',
+    'null',
+    'true',
+    'unknown',
+)
+
+
+# At this time, no easily-parsed, definitive list of data types
+# has been found in the MySQL source code or documentation. (The
+# `sql/sql_yacc.yy` file is definitive but is difficult to parse.)
+# Therefore these types are currently maintained manually.
+#
+# Some words in this list -- like "long", "national", "precision",
+# and "varying" -- appear to only occur in combination with other
+# data type keywords. Therefore they are included as separate words
+# even though they do not naturally occur in syntax separately.
+#
+# This list is also used to strip data types out of the list of
+# MySQL keywords, which is automatically updated later in the file.
+#
+MYSQL_DATATYPES = (
+    # Numeric data types
+    'bigint',
+    'bit',
+    'bool',
+    'boolean',
+    'dec',
+    'decimal',
+    'double',
+    'fixed',
+    'float',
+    'float4',
+    'float8',
+    'int',
+    'int1',
+    'int2',
+    'int3',
+    'int4',
+    'int8',
+    'integer',
+    'mediumint',
+    'middleint',
+    'numeric',
+    'precision',
+    'real',
+    'serial',
+    'smallint',
+    'tinyint',
+
+    # Date and time data types
+    'date',
+    'datetime',
+    'time',
+    'timestamp',
+    'year',
+
+    # String data types
+    'binary',
+    'blob',
+    'char',
+    'enum',
+    'long',
+    'longblob',
+    'longtext',
+    'mediumblob',
+    'mediumtext',
+    'national',
+    'nchar',
+    'nvarchar',
+    'set',
+    'text',
+    'tinyblob',
+    'tinytext',
+    'varbinary',
+    'varchar',
+    'varcharacter',
+    'varying',
+
+    # Spatial data types
+    'geometry',
+    'geometrycollection',
+    'linestring',
+    'multilinestring',
+    'multipoint',
+    'multipolygon',
+    'point',
+    'polygon',
+
+    # JSON data types
+    'json',
+)
+
+# Everything below this line is auto-generated from the MySQL source code.
+# Run this file in Python and it will update itself.
+# -----------------------------------------------------------------------------
+
+MYSQL_FUNCTIONS = (
+    'abs',
+    'acos',
+    'adddate',
+    'addtime',
+    'aes_decrypt',
+    'aes_encrypt',
+    'any_value',
+    'asin',
+    'atan',
+    'atan2',
+    'benchmark',
+    'bin',
+    'bin_to_uuid',
+    'bit_and',
+    'bit_count',
+    'bit_length',
+    'bit_or',
+    'bit_xor',
+    'can_access_column',
+    'can_access_database',
+    'can_access_event',
+    'can_access_resource_group',
+    'can_access_routine',
+    'can_access_table',
+    'can_access_trigger',
+    'can_access_view',
+    'cast',
+    'ceil',
+    'ceiling',
+    'char_length',
+    'character_length',
+    'coercibility',
+    'compress',
+    'concat',
+    'concat_ws',
+    'connection_id',
+    'conv',
+    'convert_cpu_id_mask',
+    'convert_interval_to_user_interval',
+    'convert_tz',
+    'cos',
+    'cot',
+    'count',
+    'crc32',
+    'curdate',
+    'current_role',
+    'curtime',
+    'date_add',
+    'date_format',
+    'date_sub',
+    'datediff',
+    'dayname',
+    'dayofmonth',
+    'dayofweek',
+    'dayofyear',
+    'degrees',
+    'elt',
+    'exp',
+    'export_set',
+    'extract',
+    'extractvalue',
+    'field',
+    'find_in_set',
+    'floor',
+    'format_bytes',
+    'format_pico_time',
+    'found_rows',
+    'from_base64',
+    'from_days',
+    'from_unixtime',
+    'get_dd_column_privileges',
+    'get_dd_create_options',
+    'get_dd_index_private_data',
+    'get_dd_index_sub_part_length',
+    'get_dd_property_key_value',
+    'get_dd_tablespace_private_data',
+    'get_lock',
+    'greatest',
+    'group_concat',
+    'gtid_subset',
+    'gtid_subtract',
+    'hex',
+    'icu_version',
+    'ifnull',
+    'inet6_aton',
+    'inet6_ntoa',
+    'inet_aton',
+    'inet_ntoa',
+    'instr',
+    'internal_auto_increment',
+    'internal_avg_row_length',
+    'internal_check_time',
+    'internal_checksum',
+    'internal_data_free',
+    'internal_data_length',
+    'internal_dd_char_length',
+    'internal_get_comment_or_error',
+    'internal_get_dd_column_extra',
+    'internal_get_enabled_role_json',
+    'internal_get_hostname',
+    'internal_get_mandatory_roles_json',
+    'internal_get_partition_nodegroup',
+    'internal_get_username',
+    'internal_get_view_warning_or_error',
+    'internal_index_column_cardinality',
+    'internal_index_length',
+    'internal_is_enabled_role',
+    'internal_is_mandatory_role',
+    'internal_keys_disabled',
+    'internal_max_data_length',
+    'internal_table_rows',
+    'internal_tablespace_autoextend_size',
+    'internal_tablespace_data_free',
+    'internal_tablespace_extent_size',
+    'internal_tablespace_extra',
+    'internal_tablespace_free_extents',
+    'internal_tablespace_id',
+    'internal_tablespace_initial_size',
+    'internal_tablespace_logfile_group_name',
+    'internal_tablespace_logfile_group_number',
+    'internal_tablespace_maximum_size',
+    'internal_tablespace_row_format',
+    'internal_tablespace_status',
+    'internal_tablespace_total_extents',
+    'internal_tablespace_type',
+    'internal_tablespace_version',
+    'internal_update_time',
+    'is_free_lock',
+    'is_ipv4',
+    'is_ipv4_compat',
+    'is_ipv4_mapped',
+    'is_ipv6',
+    'is_used_lock',
+    'is_uuid',
+    'is_visible_dd_object',
+    'isnull',
+    'json_array',
+    'json_array_append',
+    'json_array_insert',
+    'json_arrayagg',
+    'json_contains',
+    'json_contains_path',
+    'json_depth',
+    'json_extract',
+    'json_insert',
+    'json_keys',
+    'json_length',
+    'json_merge',
+    'json_merge_patch',
+    'json_merge_preserve',
+    'json_object',
+    'json_objectagg',
+    'json_overlaps',
+    'json_pretty',
+    'json_quote',
+    'json_remove',
+    'json_replace',
+    'json_schema_valid',
+    'json_schema_validation_report',
+    'json_search',
+    'json_set',
+    'json_storage_free',
+    'json_storage_size',
+    'json_type',
+    'json_unquote',
+    'json_valid',
+    'last_day',
+    'last_insert_id',
+    'lcase',
+    'least',
+    'length',
+    'like_range_max',
+    'like_range_min',
+    'ln',
+    'load_file',
+    'locate',
+    'log',
+    'log10',
+    'log2',
+    'lower',
+    'lpad',
+    'ltrim',
+    'make_set',
+    'makedate',
+    'maketime',
+    'master_pos_wait',
+    'max',
+    'mbrcontains',
+    'mbrcoveredby',
+    'mbrcovers',
+    'mbrdisjoint',
+    'mbrequals',
+    'mbrintersects',
+    'mbroverlaps',
+    'mbrtouches',
+    'mbrwithin',
+    'md5',
+    'mid',
+    'min',
+    'monthname',
+    'name_const',
+    'now',
+    'nullif',
+    'oct',
+    'octet_length',
+    'ord',
+    'period_add',
+    'period_diff',
+    'pi',
+    'position',
+    'pow',
+    'power',
+    'ps_current_thread_id',
+    'ps_thread_id',
+    'quote',
+    'radians',
+    'rand',
+    'random_bytes',
+    'regexp_instr',
+    'regexp_like',
+    'regexp_replace',
+    'regexp_substr',
+    'release_all_locks',
+    'release_lock',
+    'remove_dd_property_key',
+    'reverse',
+    'roles_graphml',
+    'round',
+    'rpad',
+    'rtrim',
+    'sec_to_time',
+    'session_user',
+    'sha',
+    'sha1',
+    'sha2',
+    'sign',
+    'sin',
+    'sleep',
+    'soundex',
+    'space',
+    'sqrt',
+    'st_area',
+    'st_asbinary',
+    'st_asgeojson',
+    'st_astext',
+    'st_aswkb',
+    'st_aswkt',
+    'st_buffer',
+    'st_buffer_strategy',
+    'st_centroid',
+    'st_contains',
+    'st_convexhull',
+    'st_crosses',
+    'st_difference',
+    'st_dimension',
+    'st_disjoint',
+    'st_distance',
+    'st_distance_sphere',
+    'st_endpoint',
+    'st_envelope',
+    'st_equals',
+    'st_exteriorring',
+    'st_geohash',
+    'st_geomcollfromtext',
+    'st_geomcollfromtxt',
+    'st_geomcollfromwkb',
+    'st_geometrycollectionfromtext',
+    'st_geometrycollectionfromwkb',
+    'st_geometryfromtext',
+    'st_geometryfromwkb',
+    'st_geometryn',
+    'st_geometrytype',
+    'st_geomfromgeojson',
+    'st_geomfromtext',
+    'st_geomfromwkb',
+    'st_interiorringn',
+    'st_intersection',
+    'st_intersects',
+    'st_isclosed',
+    'st_isempty',
+    'st_issimple',
+    'st_isvalid',
+    'st_latfromgeohash',
+    'st_latitude',
+    'st_length',
+    'st_linefromtext',
+    'st_linefromwkb',
+    'st_linestringfromtext',
+    'st_linestringfromwkb',
+    'st_longfromgeohash',
+    'st_longitude',
+    'st_makeenvelope',
+    'st_mlinefromtext',
+    'st_mlinefromwkb',
+    'st_mpointfromtext',
+    'st_mpointfromwkb',
+    'st_mpolyfromtext',
+    'st_mpolyfromwkb',
+    'st_multilinestringfromtext',
+    'st_multilinestringfromwkb',
+    'st_multipointfromtext',
+    'st_multipointfromwkb',
+    'st_multipolygonfromtext',
+    'st_multipolygonfromwkb',
+    'st_numgeometries',
+    'st_numinteriorring',
+    'st_numinteriorrings',
+    'st_numpoints',
+    'st_overlaps',
+    'st_pointfromgeohash',
+    'st_pointfromtext',
+    'st_pointfromwkb',
+    'st_pointn',
+    'st_polyfromtext',
+    'st_polyfromwkb',
+    'st_polygonfromtext',
+    'st_polygonfromwkb',
+    'st_simplify',
+    'st_srid',
+    'st_startpoint',
+    'st_swapxy',
+    'st_symdifference',
+    'st_touches',
+    'st_transform',
+    'st_union',
+    'st_validate',
+    'st_within',
+    'st_x',
+    'st_y',
+    'statement_digest',
+    'statement_digest_text',
+    'std',
+    'stddev',
+    'stddev_pop',
+    'stddev_samp',
+    'str_to_date',
+    'strcmp',
+    'subdate',
+    'substr',
+    'substring',
+    'substring_index',
+    'subtime',
+    'sum',
+    'sysdate',
+    'system_user',
+    'tan',
+    'time_format',
+    'time_to_sec',
+    'timediff',
+    'to_base64',
+    'to_days',
+    'to_seconds',
+    'trim',
+    'ucase',
+    'uncompress',
+    'uncompressed_length',
+    'unhex',
+    'unix_timestamp',
+    'updatexml',
+    'upper',
+    'uuid',
+    'uuid_short',
+    'uuid_to_bin',
+    'validate_password_strength',
+    'var_pop',
+    'var_samp',
+    'variance',
+    'version',
+    'wait_for_executed_gtid_set',
+    'wait_until_sql_thread_after_gtids',
+    'weekday',
+    'weekofyear',
+    'yearweek',
+)
+
+
+MYSQL_OPTIMIZER_HINTS = (
+    'bka',
+    'bnl',
+    'dupsweedout',
+    'firstmatch',
+    'group_index',
+    'hash_join',
+    'index',
+    'index_merge',
+    'intoexists',
+    'join_fixed_order',
+    'join_index',
+    'join_order',
+    'join_prefix',
+    'join_suffix',
+    'loosescan',
+    'materialization',
+    'max_execution_time',
+    'merge',
+    'mrr',
+    'no_bka',
+    'no_bnl',
+    'no_group_index',
+    'no_hash_join',
+    'no_icp',
+    'no_index',
+    'no_index_merge',
+    'no_join_index',
+    'no_merge',
+    'no_mrr',
+    'no_order_index',
+    'no_range_optimization',
+    'no_semijoin',
+    'no_skip_scan',
+    'order_index',
+    'qb_name',
+    'resource_group',
+    'semijoin',
+    'set_var',
+    'skip_scan',
+    'subquery',
+)
+
+
+MYSQL_KEYWORDS = (
+    'accessible',
+    'account',
+    'action',
+    'active',
+    'add',
+    'admin',
+    'after',
+    'against',
+    'aggregate',
+    'algorithm',
+    'all',
+    'alter',
+    'always',
+    'analyze',
+    'and',
+    'any',
+    'array',
+    'as',
+    'asc',
+    'ascii',
+    'asensitive',
+    'at',
+    'attribute',
+    'auto_increment',
+    'autoextend_size',
+    'avg',
+    'avg_row_length',
+    'backup',
+    'before',
+    'begin',
+    'between',
+    'binlog',
+    'block',
+    'both',
+    'btree',
+    'buckets',
+    'by',
+    'byte',
+    'cache',
+    'call',
+    'cascade',
+    'cascaded',
+    'case',
+    'catalog_name',
+    'chain',
+    'change',
+    'changed',
+    'channel',
+    'character',
+    'charset',
+    'check',
+    'checksum',
+    'cipher',
+    'class_origin',
+    'client',
+    'clone',
+    'close',
+    'coalesce',
+    'code',
+    'collate',
+    'collation',
+    'column',
+    'column_format',
+    'column_name',
+    'columns',
+    'comment',
+    'commit',
+    'committed',
+    'compact',
+    'completion',
+    'component',
+    'compressed',
+    'compression',
+    'concurrent',
+    'condition',
+    'connection',
+    'consistent',
+    'constraint',
+    'constraint_catalog',
+    'constraint_name',
+    'constraint_schema',
+    'contains',
+    'context',
+    'continue',
+    'convert',
+    'cpu',
+    'create',
+    'cross',
+    'cube',
+    'cume_dist',
+    'current',
+    'current_date',
+    'current_time',
+    'current_timestamp',
+    'current_user',
+    'cursor',
+    'cursor_name',
+    'data',
+    'database',
+    'databases',
+    'datafile',
+    'day',
+    'day_hour',
+    'day_microsecond',
+    'day_minute',
+    'day_second',
+    'deallocate',
+    'declare',
+    'default',
+    'default_auth',
+    'definer',
+    'definition',
+    'delay_key_write',
+    'delayed',
+    'delete',
+    'dense_rank',
+    'desc',
+    'describe',
+    'description',
+    'deterministic',
+    'diagnostics',
+    'directory',
+    'disable',
+    'discard',
+    'disk',
+    'distinct',
+    'distinctrow',
+    'div',
+    'do',
+    'drop',
+    'dual',
+    'dumpfile',
+    'duplicate',
+    'dynamic',
+    'each',
+    'else',
+    'elseif',
+    'empty',
+    'enable',
+    'enclosed',
+    'encryption',
+    'end',
+    'ends',
+    'enforced',
+    'engine',
+    'engine_attribute',
+    'engines',
+    'error',
+    'errors',
+    'escape',
+    'escaped',
+    'event',
+    'events',
+    'every',
+    'except',
+    'exchange',
+    'exclude',
+    'execute',
+    'exists',
+    'exit',
+    'expansion',
+    'expire',
+    'explain',
+    'export',
+    'extended',
+    'extent_size',
+    'failed_login_attempts',
+    'false',
+    'fast',
+    'faults',
+    'fetch',
+    'fields',
+    'file',
+    'file_block_size',
+    'filter',
+    'first',
+    'first_value',
+    'flush',
+    'following',
+    'follows',
+    'for',
+    'force',
+    'foreign',
+    'format',
+    'found',
+    'from',
+    'full',
+    'fulltext',
+    'function',
+    'general',
+    'generated',
+    'geomcollection',
+    'get',
+    'get_format',
+    'get_master_public_key',
+    'global',
+    'grant',
+    'grants',
+    'group',
+    'group_replication',
+    'grouping',
+    'groups',
+    'handler',
+    'hash',
+    'having',
+    'help',
+    'high_priority',
+    'histogram',
+    'history',
+    'host',
+    'hosts',
+    'hour',
+    'hour_microsecond',
+    'hour_minute',
+    'hour_second',
+    'identified',
+    'if',
+    'ignore',
+    'ignore_server_ids',
+    'import',
+    'in',
+    'inactive',
+    'index',
+    'indexes',
+    'infile',
+    'initial_size',
+    'inner',
+    'inout',
+    'insensitive',
+    'insert',
+    'insert_method',
+    'install',
+    'instance',
+    'interval',
+    'into',
+    'invisible',
+    'invoker',
+    'io',
+    'io_after_gtids',
+    'io_before_gtids',
+    'io_thread',
+    'ipc',
+    'is',
+    'isolation',
+    'issuer',
+    'iterate',
+    'join',
+    'json_table',
+    'json_value',
+    'key',
+    'key_block_size',
+    'keys',
+    'kill',
+    'lag',
+    'language',
+    'last',
+    'last_value',
+    'lateral',
+    'lead',
+    'leading',
+    'leave',
+    'leaves',
+    'left',
+    'less',
+    'level',
+    'like',
+    'limit',
+    'linear',
+    'lines',
+    'list',
+    'load',
+    'local',
+    'localtime',
+    'localtimestamp',
+    'lock',
+    'locked',
+    'locks',
+    'logfile',
+    'logs',
+    'loop',
+    'low_priority',
+    'master',
+    'master_auto_position',
+    'master_bind',
+    'master_compression_algorithms',
+    'master_connect_retry',
+    'master_delay',
+    'master_heartbeat_period',
+    'master_host',
+    'master_log_file',
+    'master_log_pos',
+    'master_password',
+    'master_port',
+    'master_public_key_path',
+    'master_retry_count',
+    'master_server_id',
+    'master_ssl',
+    'master_ssl_ca',
+    'master_ssl_capath',
+    'master_ssl_cert',
+    'master_ssl_cipher',
+    'master_ssl_crl',
+    'master_ssl_crlpath',
+    'master_ssl_key',
+    'master_ssl_verify_server_cert',
+    'master_tls_ciphersuites',
+    'master_tls_version',
+    'master_user',
+    'master_zstd_compression_level',
+    'match',
+    'max_connections_per_hour',
+    'max_queries_per_hour',
+    'max_rows',
+    'max_size',
+    'max_updates_per_hour',
+    'max_user_connections',
+    'maxvalue',
+    'medium',
+    'member',
+    'memory',
+    'merge',
+    'message_text',
+    'microsecond',
+    'migrate',
+    'min_rows',
+    'minute',
+    'minute_microsecond',
+    'minute_second',
+    'mod',
+    'mode',
+    'modifies',
+    'modify',
+    'month',
+    'mutex',
+    'mysql_errno',
+    'name',
+    'names',
+    'natural',
+    'ndb',
+    'ndbcluster',
+    'nested',
+    'network_namespace',
+    'never',
+    'new',
+    'next',
+    'no',
+    'no_wait',
+    'no_write_to_binlog',
+    'nodegroup',
+    'none',
+    'not',
+    'nowait',
+    'nth_value',
+    'ntile',
+    'null',
+    'nulls',
+    'number',
+    'of',
+    'off',
+    'offset',
+    'oj',
+    'old',
+    'on',
+    'one',
+    'only',
+    'open',
+    'optimize',
+    'optimizer_costs',
+    'option',
+    'optional',
+    'optionally',
+    'options',
+    'or',
+    'order',
+    'ordinality',
+    'organization',
+    'others',
+    'out',
+    'outer',
+    'outfile',
+    'over',
+    'owner',
+    'pack_keys',
+    'page',
+    'parser',
+    'partial',
+    'partition',
+    'partitioning',
+    'partitions',
+    'password',
+    'password_lock_time',
+    'path',
+    'percent_rank',
+    'persist',
+    'persist_only',
+    'phase',
+    'plugin',
+    'plugin_dir',
+    'plugins',
+    'port',
+    'precedes',
+    'preceding',
+    'prepare',
+    'preserve',
+    'prev',
+    'primary',
+    'privilege_checks_user',
+    'privileges',
+    'procedure',
+    'process',
+    'processlist',
+    'profile',
+    'profiles',
+    'proxy',
+    'purge',
+    'quarter',
+    'query',
+    'quick',
+    'random',
+    'range',
+    'rank',
+    'read',
+    'read_only',
+    'read_write',
+    'reads',
+    'rebuild',
+    'recover',
+    'recursive',
+    'redo_buffer_size',
+    'redundant',
+    'reference',
+    'references',
+    'regexp',
+    'relay',
+    'relay_log_file',
+    'relay_log_pos',
+    'relay_thread',
+    'relaylog',
+    'release',
+    'reload',
+    'remove',
+    'rename',
+    'reorganize',
+    'repair',
+    'repeat',
+    'repeatable',
+    'replace',
+    'replicate_do_db',
+    'replicate_do_table',
+    'replicate_ignore_db',
+    'replicate_ignore_table',
+    'replicate_rewrite_db',
+    'replicate_wild_do_table',
+    'replicate_wild_ignore_table',
+    'replication',
+    'require',
+    'require_row_format',
+    'require_table_primary_key_check',
+    'reset',
+    'resignal',
+    'resource',
+    'respect',
+    'restart',
+    'restore',
+    'restrict',
+    'resume',
+    'retain',
+    'return',
+    'returned_sqlstate',
+    'returning',
+    'returns',
+    'reuse',
+    'reverse',
+    'revoke',
+    'right',
+    'rlike',
+    'role',
+    'rollback',
+    'rollup',
+    'rotate',
+    'routine',
+    'row',
+    'row_count',
+    'row_format',
+    'row_number',
+    'rows',
+    'rtree',
+    'savepoint',
+    'schedule',
+    'schema',
+    'schema_name',
+    'schemas',
+    'second',
+    'second_microsecond',
+    'secondary',
+    'secondary_engine',
+    'secondary_engine_attribute',
+    'secondary_load',
+    'secondary_unload',
+    'security',
+    'select',
+    'sensitive',
+    'separator',
+    'serializable',
+    'server',
+    'session',
+    'share',
+    'show',
+    'shutdown',
+    'signal',
+    'signed',
+    'simple',
+    'skip',
+    'slave',
+    'slow',
+    'snapshot',
+    'socket',
+    'some',
+    'soname',
+    'sounds',
+    'source',
+    'spatial',
+    'specific',
+    'sql',
+    'sql_after_gtids',
+    'sql_after_mts_gaps',
+    'sql_before_gtids',
+    'sql_big_result',
+    'sql_buffer_result',
+    'sql_calc_found_rows',
+    'sql_no_cache',
+    'sql_small_result',
+    'sql_thread',
+    'sql_tsi_day',
+    'sql_tsi_hour',
+    'sql_tsi_minute',
+    'sql_tsi_month',
+    'sql_tsi_quarter',
+    'sql_tsi_second',
+    'sql_tsi_week',
+    'sql_tsi_year',
+    'sqlexception',
+    'sqlstate',
+    'sqlwarning',
+    'srid',
+    'ssl',
+    'stacked',
+    'start',
+    'starting',
+    'starts',
+    'stats_auto_recalc',
+    'stats_persistent',
+    'stats_sample_pages',
+    'status',
+    'stop',
+    'storage',
+    'stored',
+    'straight_join',
+    'stream',
+    'string',
+    'subclass_origin',
+    'subject',
+    'subpartition',
+    'subpartitions',
+    'super',
+    'suspend',
+    'swaps',
+    'switches',
+    'system',
+    'table',
+    'table_checksum',
+    'table_name',
+    'tables',
+    'tablespace',
+    'temporary',
+    'temptable',
+    'terminated',
+    'than',
+    'then',
+    'thread_priority',
+    'ties',
+    'timestampadd',
+    'timestampdiff',
+    'tls',
+    'to',
+    'trailing',
+    'transaction',
+    'trigger',
+    'triggers',
+    'true',
+    'truncate',
+    'type',
+    'types',
+    'unbounded',
+    'uncommitted',
+    'undefined',
+    'undo',
+    'undo_buffer_size',
+    'undofile',
+    'unicode',
+    'uninstall',
+    'union',
+    'unique',
+    'unknown',
+    'unlock',
+    'unsigned',
+    'until',
+    'update',
+    'upgrade',
+    'usage',
+    'use',
+    'use_frm',
+    'user',
+    'user_resources',
+    'using',
+    'utc_date',
+    'utc_time',
+    'utc_timestamp',
+    'validation',
+    'value',
+    'values',
+    'variables',
+    'vcpu',
+    'view',
+    'virtual',
+    'visible',
+    'wait',
+    'warnings',
+    'week',
+    'weight_string',
+    'when',
+    'where',
+    'while',
+    'window',
+    'with',
+    'without',
+    'work',
+    'wrapper',
+    'write',
+    'x509',
+    'xa',
+    'xid',
+    'xml',
+    'xor',
+    'year_month',
+    'zerofill',
+)
+
+
+if __name__ == '__main__':  # pragma: no cover
+    import re
+    from urllib.request import urlopen
+
+    from pygments.util import format_lines
+
+    # MySQL source code
+    SOURCE_URL = 'https://github.com/mysql/mysql-server/raw/8.0'
+    LEX_URL = SOURCE_URL + '/sql/lex.h'
+    ITEM_CREATE_URL = SOURCE_URL + '/sql/item_create.cc'
+
+
+    def update_myself():
+        # Pull content from lex.h.
+        lex_file = urlopen(LEX_URL).read().decode('utf8', errors='ignore')
+        keywords = parse_lex_keywords(lex_file)
+        functions = parse_lex_functions(lex_file)
+        optimizer_hints = parse_lex_optimizer_hints(lex_file)
+
+        # Parse content in item_create.cc.
+        item_create_file = urlopen(ITEM_CREATE_URL).read().decode('utf8', errors='ignore')
+        functions.update(parse_item_create_functions(item_create_file))
+
+        # Remove data types from the set of keywords.
+        keywords -= set(MYSQL_DATATYPES)
+
+        update_content('MYSQL_FUNCTIONS', tuple(sorted(functions)))
+        update_content('MYSQL_KEYWORDS', tuple(sorted(keywords)))
+        update_content('MYSQL_OPTIMIZER_HINTS', tuple(sorted(optimizer_hints)))
+
+
+    def parse_lex_keywords(f):
+        """Parse keywords in lex.h."""
+
+        results = set()
+        for m in re.finditer(r'{SYM(?:_HK)?\("(?P<keyword>[a-z0-9_]+)",', f, flags=re.I):
+            results.add(m.group('keyword').lower())
+
+        if not results:
+            raise ValueError('No keywords found')
+
+        return results
+
+
+    def parse_lex_optimizer_hints(f):
+        """Parse optimizer hints in lex.h."""
+
+        results = set()
+        for m in re.finditer(r'{SYM_H\("(?P<keyword>[a-z0-9_]+)",', f, flags=re.I):
+            results.add(m.group('keyword').lower())
+
+        if not results:
+            raise ValueError('No optimizer hints found')
+
+        return results
+
+
+    def parse_lex_functions(f):
+        """Parse MySQL function names from lex.h."""
+
+        results = set()
+        for m in re.finditer(r'{SYM_FN?\("(?P<function>[a-z0-9_]+)",', f, flags=re.I):
+            results.add(m.group('function').lower())
+
+        if not results:
+            raise ValueError('No lex functions found')
+
+        return results
+
+
+    def parse_item_create_functions(f):
+        """Parse MySQL function names from item_create.cc."""
+
+        results = set()
+        for m in re.finditer(r'{"(?P<function>[^"]+?)",\s*SQL_F[^(]+?\(', f, flags=re.I):
+            results.add(m.group('function').lower())
+
+        if not results:
+            raise ValueError('No item_create functions found')
+
+        return results
+
+
+    def update_content(field_name, content):
+        """Overwrite this file with content parsed from MySQL's source code."""
+
+        with open(__file__) as f:
+            data = f.read()
+
+        # Line to start/end inserting
+        re_match = re.compile(r'^%s\s*=\s*\($.*?^\s*\)$' % field_name, re.M | re.S)
+        m = re_match.search(data)
+        if not m:
+            raise ValueError('Could not find an existing definition for %s' % field_name)
+
+        new_block = format_lines(field_name, content)
+        data = data[:m.start()] + new_block + data[m.end():]
+
+        with open(__file__, 'w', newline='\n') as f:
+            f.write(data)
+
+    update_myself()

eric ide

mercurial