Team Ai
Datasetpublic

codekingpro/portable-devtools

sourceHugging Faceupdated 5mo agoView on Hugging Face
1likes14kdownloads
_postgres_builtins.py740 linesDownload Raw Back to lexers
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 
codekingpro/portable-devtools · Team Ai