Coverage for /home/martinb/.local/share/virtualenvs/camcops/lib/python3.6/site-packages/pygments/lexers/_mysql_builtins.py : 100%

Hot-keys on this page
r m x p toggle line displays
j k next/prev highlighted chunk
0 (zero) top of page
1 (one) first highlighted chunk
1# -*- coding: utf-8 -*-
2"""
3 pygments.lexers._mysql_builtins
4 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
6 Self-updating data files for the MySQL lexer.
8 :copyright: Copyright 2020 by the Pygments team, see AUTHORS.
9 :license: BSD, see LICENSE for details.
10"""
13MYSQL_CONSTANTS = (
14 'false',
15 'null',
16 'true',
17 'unknown',
18)
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#
34MYSQL_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',
63 # Date and time data types
64 'date',
65 'datetime',
66 'time',
67 'timestamp',
68 'year',
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',
92 # Spatial data types
93 'geometry',
94 'geometrycollection',
95 'linestring',
96 'multilinestring',
97 'multipoint',
98 'multipolygon',
99 'point',
100 'polygon',
102 # JSON data types
103 'json',
104)
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# -----------------------------------------------------------------------------
110MYSQL_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)
487MYSQL_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)
531MYSQL_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)
1181if __name__ == '__main__': # pragma: no cover
1182 import re
1183 from urllib.request import urlopen
1185 from pygments.util import format_lines
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'
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)
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))
1204 # Remove data types from the set of keywords.
1205 keywords -= set(MYSQL_DATATYPES)
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)))
1212 def parse_lex_keywords(f):
1213 """Parse keywords in lex.h."""
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())
1219 if not results:
1220 raise ValueError('No keywords found')
1222 return results
1225 def parse_lex_optimizer_hints(f):
1226 """Parse optimizer hints in lex.h."""
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())
1232 if not results:
1233 raise ValueError('No optimizer hints found')
1235 return results
1238 def parse_lex_functions(f):
1239 """Parse MySQL function names from lex.h."""
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())
1245 if not results:
1246 raise ValueError('No lex functions found')
1248 return results
1251 def parse_item_create_functions(f):
1252 """Parse MySQL function names from item_create.cc."""
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())
1258 if not results:
1259 raise ValueError('No item_create functions found')
1261 return results
1264 def update_content(field_name, content):
1265 """Overwrite this file with content parsed from MySQL's source code."""
1267 with open(__file__) as f:
1268 data = f.read()
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)
1276 new_block = format_lines(field_name, content)
1277 data = data[:m.start()] + new_block + data[m.end():]
1279 with open(__file__, 'w', newline='\n') as f:
1280 f.write(data)
1282 update_myself()