You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
bazarr/libs/pygments/lexers/_mysql_builtins.py

1282 lines
24 KiB

"""
pygments.lexers._mysql_builtins
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Self-updating data files for the MySQL lexer.
:copyright: Copyright 2006-2021 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()