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()