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

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

eric ide

mercurial