codekingpro/portable-devtools
114k
1"""2 pygments.lexers._postgres_builtins3 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~4 5 Self-updating data files for PostgreSQL lexer.6 7 Run with `python -I` to update itself.8 9 :copyright: Copyright 2006-2024 by the Pygments team, see AUTHORS.10 :license: BSD, see LICENSE for details.11"""12 13# Autogenerated: please edit them if you like wasting your time.14 15KEYWORDS = (16 'ABORT',17 'ABSOLUTE',18 'ACCESS',19 'ACTION',20 'ADD',21 'ADMIN',22 'AFTER',23 'AGGREGATE',24 'ALL',25 'ALSO',26 'ALTER',27 'ALWAYS',28 'ANALYSE',29 'ANALYZE',30 'AND',31 'ANY',32 'ARRAY',33 'AS',34 'ASC',35 'ASENSITIVE',36 'ASSERTION',37 'ASSIGNMENT',38 'ASYMMETRIC',39 'AT',40 'ATOMIC',41 'ATTACH',42 'ATTRIBUTE',43 'AUTHORIZATION',44 'BACKWARD',45 'BEFORE',46 'BEGIN',47 'BETWEEN',48 'BIGINT',49 'BINARY',50 'BIT',51 'BOOLEAN',52 'BOTH',53 'BREADTH',54 'BY',55 'CACHE',56 'CALL',57 'CALLED',58 'CASCADE',59 'CASCADED',60 'CASE',61 'CAST',62 'CATALOG',63 'CHAIN',64 'CHAR',65 'CHARACTER',66 'CHARACTERISTICS',67 'CHECK',68 'CHECKPOINT',69 'CLASS',70 'CLOSE',71 'CLUSTER',72 'COALESCE',73 'COLLATE',74 'COLLATION',75 'COLUMN',76 'COLUMNS',77 'COMMENT',78 'COMMENTS',79 'COMMIT',80 'COMMITTED',81 'COMPRESSION',82 'CONCURRENTLY',83 'CONFIGURATION',84 'CONFLICT',85 'CONNECTION',86 'CONSTRAINT',87 'CONSTRAINTS',88 'CONTENT',89 'CONTINUE',90 'CONVERSION',91 'COPY',92 'COST',93 'CREATE',94 'CROSS',95 'CSV',96 'CUBE',97 'CURRENT',98 'CURRENT_CATALOG',99 'CURRENT_DATE',100 'CURRENT_ROLE',101 'CURRENT_SCHEMA',102 'CURRENT_TIME',103 'CURRENT_TIMESTAMP',104 'CURRENT_USER',105 'CURSOR',106 'CYCLE',107 'DATA',108 'DATABASE',109 'DAY',110 'DEALLOCATE',111 'DEC',112 'DECIMAL',113 'DECLARE',114 'DEFAULT',115 'DEFAULTS',116 'DEFERRABLE',117 'DEFERRED',118 'DEFINER',119 'DELETE',120 'DELIMITER',121 'DELIMITERS',122 'DEPENDS',123 'DEPTH',124 'DESC',125 'DETACH',126 'DICTIONARY',127 'DISABLE',128 'DISCARD',129 'DISTINCT',130 'DO',131 'DOCUMENT',132 'DOMAIN',133 'DOUBLE',134 'DROP',135 'EACH',136 'ELSE',137 'ENABLE',138 'ENCODING',139 'ENCRYPTED',140 'END',141 'ENUM',142 'ESCAPE',143 'EVENT',144 'EXCEPT',145 'EXCLUDE',146 'EXCLUDING',147 'EXCLUSIVE',148 'EXECUTE',149 'EXISTS',150 'EXPLAIN',151 'EXPRESSION',152 'EXTENSION',153 'EXTERNAL',154 'EXTRACT',155 'FALSE',156 'FAMILY',157 'FETCH',158 'FILTER',159 'FINALIZE',160 'FIRST',161 'FLOAT',162 'FOLLOWING',163 'FOR',164 'FORCE',165 'FOREIGN',166 'FORWARD',167 'FREEZE',168 'FROM',169 'FULL',170 'FUNCTION',171 'FUNCTIONS',172 'GENERATED',173 'GLOBAL',174 'GRANT',175 'GRANTED',176 'GREATEST',177 'GROUP',178 'GROUPING',179 'GROUPS',180 'HANDLER',181 'HAVING',182 'HEADER',183 'HOLD',184 'HOUR',185 'IDENTITY',186 'IF',187 'ILIKE',188 'IMMEDIATE',189 'IMMUTABLE',190 'IMPLICIT',191 'IMPORT',192 'IN',193 'INCLUDE',194 'INCLUDING',195 'INCREMENT',196 'INDEX',197 'INDEXES',198 'INHERIT',199 'INHERITS',200 'INITIALLY',201 'INLINE',202 'INNER',203 'INOUT',204 'INPUT',205 'INSENSITIVE',206 'INSERT',207 'INSTEAD',208 'INT',209 'INTEGER',210 'INTERSECT',211 'INTERVAL',212 'INTO',213 'INVOKER',214 'IS',215 'ISNULL',216 'ISOLATION',217 'JOIN',218 'KEY',219 'LABEL',220 'LANGUAGE',221 'LARGE',222 'LAST',223 'LATERAL',224 'LEADING',225 'LEAKPROOF',226 'LEAST',227 'LEFT',228 'LEVEL',229 'LIKE',230 'LIMIT',231 'LISTEN',232 'LOAD',233 'LOCAL',234 'LOCALTIME',235 'LOCALTIMESTAMP',236 'LOCATION',237 'LOCK',238 'LOCKED',239 'LOGGED',240 'MAPPING',241 'MATCH',242 'MATERIALIZED',243 'MAXVALUE',244 'METHOD',245 'MINUTE',246 'MINVALUE',247 'MODE',248 'MONTH',249 'MOVE',250 'NAME',251 'NAMES',252 'NATIONAL',253 'NATURAL',254 'NCHAR',255 'NEW',256 'NEXT',257 'NFC',258 'NFD',259 'NFKC',260 'NFKD',261 'NO',262 'NONE',263 'NORMALIZE',264 'NORMALIZED',265 'NOT',266 'NOTHING',267 'NOTIFY',268 'NOTNULL',269 'NOWAIT',270 'NULL',271 'NULLIF',272 'NULLS',273 'NUMERIC',274 'OBJECT',275 'OF',276 'OFF',277 'OFFSET',278 'OIDS',279 'OLD',280 'ON',281 'ONLY',282 'OPERATOR',283 'OPTION',284 'OPTIONS',285 'OR',286 'ORDER',287 'ORDINALITY',288 'OTHERS',289 'OUT',290 'OUTER',291 'OVER',292 'OVERLAPS',293 'OVERLAY',294 'OVERRIDING',295 'OWNED',296 'OWNER',297 'PARALLEL',298 'PARSER',299 'PARTIAL',300 'PARTITION',301 'PASSING',302 'PASSWORD',303 'PLACING',304 'PLANS',305 'POLICY',306 'POSITION',307 'PRECEDING',308 'PRECISION',309 'PREPARE',310 'PREPARED',311 'PRESERVE',312 'PRIMARY',313 'PRIOR',314 'PRIVILEGES',315 'PROCEDURAL',316 'PROCEDURE',317 'PROCEDURES',318 'PROGRAM',319 'PUBLICATION',320 'QUOTE',321 'RANGE',322 'READ',323 'REAL',324 'REASSIGN',325 'RECHECK',326 'RECURSIVE',327 'REF',328 'REFERENCES',329 'REFERENCING',330 'REFRESH',331 'REINDEX',332 'RELATIVE',333 'RELEASE',334 'RENAME',335 'REPEATABLE',336 'REPLACE',337 'REPLICA',338 'RESET',339 'RESTART',340 'RESTRICT',341 'RETURN',342 'RETURNING',343 'RETURNS',344 'REVOKE',345 'RIGHT',346 'ROLE',347 'ROLLBACK',348 'ROLLUP',349 'ROUTINE',350 'ROUTINES',351 'ROW',352 'ROWS',353 'RULE',354 'SAVEPOINT',355 'SCHEMA',356 'SCHEMAS',357 'SCROLL',358 'SEARCH',359 'SECOND',360 'SECURITY',361 'SELECT',362 'SEQUENCE',363 'SEQUENCES',364 'SERIALIZABLE',365 'SERVER',366 'SESSION',367 'SESSION_USER',368 'SET',369 'SETOF',370 'SETS',371 'SHARE',372 'SHOW',373 'SIMILAR',374 'SIMPLE',375 'SKIP',376 'SMALLINT',377 'SNAPSHOT',378 'SOME',379 'SQL',380 'STABLE',381 'STANDALONE',382 'START',383 'STATEMENT',384 'STATISTICS',385 'STDIN',386 'STDOUT',387 'STORAGE',388 'STORED',389 'STRICT',390 'STRIP',391 'SUBSCRIPTION',392 'SUBSTRING',393 'SUPPORT',394 'SYMMETRIC',395 'SYSID',396 'SYSTEM',397 'TABLE',398 'TABLES',399 'TABLESAMPLE',400 'TABLESPACE',401 'TEMP',402 'TEMPLATE',403 'TEMPORARY',404 'TEXT',405 'THEN',406 'TIES',407 'TIME',408 'TIMESTAMP',409 'TO',410 'TRAILING',411 'TRANSACTION',412 'TRANSFORM',413 'TREAT',414 'TRIGGER',415 'TRIM',416 'TRUE',417 'TRUNCATE',418 'TRUSTED',419 'TYPE',420 'TYPES',421 'UESCAPE',422 'UNBOUNDED',423 'UNCOMMITTED',424 'UNENCRYPTED',425 'UNION',426 'UNIQUE',427 'UNKNOWN',428 'UNLISTEN',429 'UNLOGGED',430 'UNTIL',431 'UPDATE',432 'USER',433 'USING',434 'VACUUM',435 'VALID',436 'VALIDATE',437 'VALIDATOR',438 'VALUE',439 'VALUES',440 'VARCHAR',441 'VARIADIC',442 'VARYING',443 'VERBOSE',444 'VERSION',445 'VIEW',446 'VIEWS',447 'VOLATILE',448 'WHEN',449 'WHERE',450 'WHITESPACE',451 'WINDOW',452 'WITH',453 'WITHIN',454 'WITHOUT',455 'WORK',456 'WRAPPER',457 'WRITE',458 'XML',459 'XMLATTRIBUTES',460 'XMLCONCAT',461 'XMLELEMENT',462 'XMLEXISTS',463 'XMLFOREST',464 'XMLNAMESPACES',465 'XMLPARSE',466 'XMLPI',467 'XMLROOT',468 'XMLSERIALIZE',469 'XMLTABLE',470 'YEAR',471 'YES',472 'ZONE',473)474 475DATATYPES = (476 'bigint',477 'bigserial',478 'bit',479 'bit varying',480 'bool',481 'boolean',482 'box',483 'bytea',484 'char',485 'character',486 'character varying',487 'cidr',488 'circle',489 'date',490 'decimal',491 'double precision',492 'float4',493 'float8',494 'inet',495 'int',496 'int2',497 'int4',498 'int8',499 'integer',500 'interval',501 'json',502 'jsonb',503 'line',504 'lseg',505 'macaddr',506 'macaddr8',507 'money',508 'numeric',509 'path',510 'pg_lsn',511 'pg_snapshot',512 'point',513 'polygon',514 'real',515 'serial',516 'serial2',517 'serial4',518 'serial8',519 'smallint',520 'smallserial',521 'text',522 'time',523 'timestamp',524 'timestamptz',525 'timetz',526 'tsquery',527 'tsvector',528 'txid_snapshot',529 'uuid',530 'varbit',531 'varchar',532 'with time zone',533 'without time zone',534 'xml',535)536 537PSEUDO_TYPES = (538 'any',539 'anyarray',540 'anycompatible',541 'anycompatiblearray',542 'anycompatiblemultirange',543 'anycompatiblenonarray',544 'anycompatiblerange',545 'anyelement',546 'anyenum',547 'anymultirange',548 'anynonarray',549 'anyrange',550 'cstring',551 'event_trigger',552 'fdw_handler',553 'index_am_handler',554 'internal',555 'language_handler',556 'pg_ddl_command',557 'record',558 'table_am_handler',559 'trigger',560 'tsm_handler',561 'unknown',562 'void',563)564 565# Remove 'trigger' from types566PSEUDO_TYPES = tuple(sorted(set(PSEUDO_TYPES) - set(map(str.lower, KEYWORDS))))567 568PLPGSQL_KEYWORDS = (569 'ALIAS', 'CONSTANT', 'DIAGNOSTICS', 'ELSIF', 'EXCEPTION', 'EXIT',570 'FOREACH', 'GET', 'LOOP', 'NOTICE', 'OPEN', 'PERFORM', 'QUERY', 'RAISE',571 'RETURN', 'REVERSE', 'SQLSTATE', 'WHILE',572)573 574# Most of these keywords are from ExplainNode function575# in src/backend/commands/explain.c576 577EXPLAIN_KEYWORDS = (578 'Aggregate',579 'Append',580 'Bitmap Heap Scan',581 'Bitmap Index Scan',582 'BitmapAnd',583 'BitmapOr',584 'CTE Scan',585 'Custom Scan',586 'Delete',587 'Foreign Scan',588 'Function Scan',589 'Gather Merge',590 'Gather',591 'Group',592 'GroupAggregate',593 'Hash Join',594 'Hash',595 'HashAggregate',596 'Incremental Sort',597 'Index Only Scan',598 'Index Scan',599 'Insert',600 'Limit',601 'LockRows',602 'Materialize',603 'Memoize',604 'Merge Append',605 'Merge Join',606 'Merge',607 'MixedAggregate',608 'Named Tuplestore Scan',609 'Nested Loop',610 'ProjectSet',611 'Recursive Union',612 'Result',613 'Sample Scan',614 'Seq Scan',615 'SetOp',616 'Sort',617 'SubPlan',618 'Subquery Scan',619 'Table Function Scan',620 'Tid Range Scan',621 'Tid Scan',622 'Unique',623 'Update',624 'Values Scan',625 'WindowAgg',626 'WorkTable Scan',627)628 629 630if __name__ == '__main__': # pragma: no cover631 import re632 from urllib.request import urlopen633 634 from pygments.util import format_lines635 636 # One man's constant is another man's variable.637 SOURCE_URL = 'https://github.com/postgres/postgres/raw/master'638 KEYWORDS_URL = SOURCE_URL + '/src/include/parser/kwlist.h'639 DATATYPES_URL = SOURCE_URL + '/doc/src/sgml/datatype.sgml'640 641 def update_myself():642 content = urlopen(DATATYPES_URL).read().decode('utf-8', errors='ignore')643 data_file = list(content.splitlines())644 datatypes = parse_datatypes(data_file)645 pseudos = parse_pseudos(data_file)646 647 content = urlopen(KEYWORDS_URL).read().decode('utf-8', errors='ignore')648 keywords = parse_keywords(content)649 650 update_consts(__file__, 'DATATYPES', datatypes)651 update_consts(__file__, 'PSEUDO_TYPES', pseudos)652 update_consts(__file__, 'KEYWORDS', keywords)653 654 def parse_keywords(f):655 kw = []656 for m in re.finditer(r'PG_KEYWORD\("(.+?)"', f):657 kw.append(m.group(1).upper())658 659 if not kw:660 raise ValueError('no keyword found')661 662 kw.sort()663 return kw664 665 def parse_datatypes(f):666 dt = set()667 for line in f:668 if '<sect1' in line:669 break670 if '<entry><type>' not in line:671 continue672 673 # Parse a string such as674 # time [ (<replaceable>p</replaceable>) ] [ without time zone ]675 # into types "time" and "without time zone"676 677 # remove all the tags678 line = re.sub("<replaceable>[^<]+</replaceable>", "", line)679 line = re.sub("<[^>]+>", "", line)680 681 # Drop the parts containing braces682 for tmp in [t for tmp in line.split('[')683 for t in tmp.split(']') if "(" not in t]:684 for t in tmp.split(','):685 t = t.strip()686 if not t:687 continue688 dt.add(" ".join(t.split()))689 690 dt = list(dt)691 dt.sort()692 return dt693 694 def parse_pseudos(f):695 dt = []696 re_start = re.compile(r'\s*<table id="datatype-pseudotypes-table">')697 re_entry = re.compile(r'\s*<entry><type>(.+?)</type></entry>')698 re_end = re.compile(r'\s*</table>')699 700 f = iter(f)701 for line in f:702 if re_start.match(line) is not None:703 break704 else:705 raise ValueError('pseudo datatypes table not found')706 707 for line in f:708 m = re_entry.match(line)709 if m is not None:710 dt.append(m.group(1))711 712 if re_end.match(line) is not None:713 break714 else:715 raise ValueError('end of pseudo datatypes table not found')716 717 if not dt:718 raise ValueError('pseudo datatypes not found')719 720 dt.sort()721 return dt722 723 def update_consts(filename, constname, content):724 with open(filename, encoding='utf-8') as f:725 data = f.read()726 727 # Line to start/end inserting728 re_match = re.compile(rf'^{constname}\s*=\s*\($.*?^\s*\)$', re.M | re.S)729 m = re_match.search(data)730 if not m:731 raise ValueError(f'Could not find existing definition for {constname}')732 733 new_block = format_lines(constname, content)734 data = data[:m.start()] + new_block + data[m.end():]735 736 with open(filename, 'w', encoding='utf-8', newline='\n') as f:737 f.write(data)738 739 update_myself()740 