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