From 6eb6c4597dcd8d3a365c85533b1cff39731fbb71 Mon Sep 17 00:00:00 2001 From: zhaoge <> Date: Wed, 29 Nov 2023 18:26:18 +0800 Subject: [PATCH 1/6] feat: pgsql update pgsql's keywords --- src/pgsql/pgsql.ts | 2024 ++++++++++++++++++++++++-------------------- 1 file changed, 1119 insertions(+), 905 deletions(-) diff --git a/src/pgsql/pgsql.ts b/src/pgsql/pgsql.ts index a3eafdc1..59d8c8f5 100644 --- a/src/pgsql/pgsql.ts +++ b/src/pgsql/pgsql.ts @@ -4,6 +4,7 @@ *--------------------------------------------------------------------------------------------*/ import type { languages } from '../fillers/monaco-editor-core'; +import { TokenClassConsts } from '../common/constants'; export const conf: languages.LanguageConfiguration = { comments: { @@ -28,7 +29,13 @@ export const conf: languages.LanguageConfiguration = { { open: '(', close: ')' }, { open: '"', close: '"' }, { open: "'", close: "'" } - ] + ], + folding: { + markers: { + start: /(BEGIN\b)/i, + end: /(END\b) | (COMMIT\b)/i + } + } }; export const language = { @@ -37,1079 +44,1286 @@ export const language = { ignoreCase: true, brackets: [ - { open: '[', close: ']', token: 'delimiter.square' }, - { open: '(', close: ')', token: 'delimiter.parenthesis' } + { open: '[', close: ']', token: TokenClassConsts.DELIMITER_SQUARE }, + { open: '(', close: ')', token: TokenClassConsts.DELIMITER_PAREN } ], keywords: [ - 'ACCESSIBLE', - 'ACCOUNT', - 'ACTION', - 'ADD', - 'AFTER', - 'AGAINST', - 'AGGREGATE', - 'ALGORITHM', 'ALL', - 'ALTER', - 'ALWAYS', 'ANALYSE', 'ANALYZE', 'AND', 'ANY', + 'ARRAY', 'AS', 'ASC', - 'ASCII', - 'ASENSITIVE', + 'ASYMMETRIC', + 'BOTH', + 'CASE', + 'CAST', + 'CHECK', + 'COLLATE', + 'COLUMN', + 'CONSTRAINT', + 'CREATE', + 'CURRENT_CATALOG', + 'CURRENT_DATE', + 'CURRENT_ROLE', + 'CURRENT_TIME', + 'CURRENT_TIMESTAMP', + 'CURRENT_USER', + 'DEFAULT', + 'DEFERRABLE', + 'DESC', + 'DISTINCT', + 'DO', + 'ELSE', + 'EXCEPT', + 'FALSE', + 'FETCH', + 'FOR', + 'FOREIGN', + 'FROM', + 'GRANT', + 'GROUP', + 'HAVING', + 'IN', + 'INITIALLY', + 'INTERSECT', + 'INTO', + 'LATERAL', + 'LEADING', + 'LIMIT', + 'LOCALTIME', + 'LOCALTIMESTAMP', + 'NOT', + 'NULL', + 'OFFSET', + 'ON', + 'ONLY', + 'OR', + 'ORDER', + 'PLACING', + 'PRIMARY', + 'REFERENCES', + 'RETURNING', + 'SELECT', + 'SESSION_USER', + 'SOME', + 'SYMMETRIC', + 'TABLE', + 'THEN', + 'TO', + 'TRAILING', + 'TRUE', + 'UNION', + 'UNIQUE', + 'USER', + 'USING', + 'VARIADIC', + 'WHEN', + 'WHERE', + 'WINDOW', + 'WITH', + 'AUTHORIZATION', + 'BINARY', + 'COLLATION', + 'CONCURRENTLY', + 'CROSS', + 'CURRENT_SCHEMA', + 'FREEZE', + 'FULL', + 'ILIKE', + 'INNER', + 'IS', + 'ISNULL', + 'JOIN', + 'LEFT', + 'LIKE', + 'NATURAL', + 'NOTNULL', + 'OUTER', + 'OVER', + 'OVERLAPS', + 'RIGHT', + 'SIMILAR', + 'VERBOSE', + 'ABORT', + 'ABSOLUTE', + 'ACCESS', + 'ACTION', + 'ADD', + 'ADMIN', + 'AFTER', + 'AGGREGATE', + 'ALSO', + 'ALTER', + 'ALWAYS', + 'ASSERTION', + 'ASSIGNMENT', 'AT', - 'AUTOEXTEND_SIZE', - 'AUTO_INCREMENT', - 'AVG', - 'AVG_ROW_LENGTH', - 'BACKUP', + 'ATTRIBUTE', + 'BACKWARD', 'BEFORE', 'BEGIN', - 'BETWEEN', - 'BIGINT', - 'BINARY', - 'BINLOG', - 'BIT', - 'BLOB', - 'BLOCK', - 'BOOL', - 'BOOLEAN', - 'BOTH', - 'BTREE', 'BY', - 'BYTE', 'CACHE', - 'CALL', + 'CALLED', 'CASCADE', 'CASCADED', - 'CASE', - 'CATALOG_NAME', + 'CATALOG', 'CHAIN', - 'CHANGE', - 'CHANGED', - 'CHANNEL', - 'CHAR', - 'CHARACTER', - 'CHARSET', - 'CHECK', - 'CHECKSUM', - 'CIPHER', - 'CLASS_ORIGIN', - 'CLIENT', + 'CHARACTERISTICS', + 'CHECKPOINT', + 'CLASS', 'CLOSE', - 'COALESCE', - 'CODE', - 'COLLATE', - 'COLLATION', - 'COLUMN', - 'COLUMNS', - 'COLUMN_FORMAT', - 'COLUMN_NAME', + 'CLUSTER', 'COMMENT', + 'COMMENTS', 'COMMIT', 'COMMITTED', - 'COMPACT', - 'COMPLETION', - 'COMPRESSED', - 'COMPRESSION', - 'CONCURRENT', - 'CONDITION', + 'CONFIGURATION', 'CONNECTION', - 'CONSISTENT', - 'CONSTRAINT', - 'CONSTRAINT_CATALOG', - 'CONSTRAINT_NAME', - 'CONSTRAINT_SCHEMA', - 'CONTAINS', - 'CONTEXT', + 'CONSTRAINTS', + 'CONTENT', 'CONTINUE', - 'CONVERT', - 'CPU', - 'CREATE', - 'CROSS', - 'CUBE', - 'CURRENT', - 'CURRENT_DATE', - 'CURRENT_TIME', - 'CURRENT_TIMESTAMP', - 'CURRENT_USER', + 'CONVERSION', + 'COPY', + 'COST', + 'CSV', 'CURSOR', - 'CURSOR_NAME', + 'CYCLE', 'DATA', 'DATABASE', - 'DATABASES', - 'DATAFILE', - 'DATE', - 'DATETIME', 'DAY', - 'DAY_HOUR', - 'DAY_MICROSECOND', - 'DAY_MINUTE', - 'DAY_SECOND', 'DEALLOCATE', - 'DEC', - 'DECIMAL', 'DECLARE', - 'DEFAULT', - 'DEFAULT_AUTH', + 'DEFAULTS', + 'DEFERRED', 'DEFINER', - 'DELAYED', - 'DELAY_KEY_WRITE', 'DELETE', - 'DESC', - 'DESCRIBE', - 'DES_KEY_FILE', - 'DETERMINISTIC', - 'DIAGNOSTICS', - 'DIRECTORY', + 'DELIMITER', + 'DELIMITERS', + 'DICTIONARY', 'DISABLE', 'DISCARD', - 'DISK', - 'DISTINCT', - 'DISTINCTROW', - 'DIV', - 'DO', + 'DOCUMENT', + 'DOMAIN', 'DOUBLE', 'DROP', - 'DUAL', - 'DUMPFILE', - 'DUPLICATE', - 'DYNAMIC', 'EACH', - 'ELSE', - 'ELSEIF', 'ENABLE', - 'ENCLOSED', - 'ENCRYPTION', - 'END', - 'ENDS', - 'ENGINE', - 'ENGINES', + 'ENCODING', + 'ENCRYPTED', 'ENUM', - 'ERROR', - 'ERRORS', 'ESCAPE', - 'ESCAPED', 'EVENT', - 'EVENTS', - 'EVERY', - 'EXCHANGE', + 'EXCLUDE', + 'EXCLUDING', + 'EXCLUSIVE', 'EXECUTE', - 'EXISTS', - 'EXIT', - 'EXPANSION', - 'EXPIRE', 'EXPLAIN', - 'EXPORT', - 'EXTENDED', - 'EXTENT_SIZE', - 'FALSE', - 'FAST', - 'FAULTS', - 'FETCH', - 'FIELDS', - 'FILE', - 'FILE_BLOCK_SIZE', - 'FILTER', + 'EXTENSION', + 'EXTERNAL', + 'FAMILY', 'FIRST', - 'FIXED', - 'FLOAT', - 'FLOAT4', - 'FLOAT8', - 'FLUSH', - 'FOLLOWS', - 'FOR', + 'FOLLOWING', 'FORCE', - 'FOREIGN', - 'FORMAT', - 'FOUND', - 'FROM', - 'FULL', - 'FULLTEXT', + 'FORWARD', 'FUNCTION', - 'GENERAL', - 'GENERATED', - 'GEOMETRY', - 'GEOMETRYCOLLECTION', - 'GET', - 'GET_FORMAT', + 'FUNCTIONS', 'GLOBAL', - 'GRANT', - 'GRANTS', - 'GROUP', - 'GROUP_REPLICATION', + 'GRANTED', 'HANDLER', - 'HASH', - 'HAVING', - 'HELP', - 'HIGH_PRIORITY', - 'HOST', - 'HOSTS', + 'HEADER', + 'HOLD', 'HOUR', - 'HOUR_MICROSECOND', - 'HOUR_MINUTE', - 'HOUR_SECOND', - 'IDENTIFIED', + 'IDENTITY', 'IF', - 'IGNORE', - 'IGNORE_SERVER_IDS', - 'IMPORT', + 'IMMEDIATE', + 'IMMUTABLE', + 'IMPLICIT', + 'INCLUDING', + 'INCREMENT', 'INDEX', 'INDEXES', - 'INFILE', - 'INITIAL_SIZE', - 'INNER', - 'INOUT', + 'INHERIT', + 'NOINHERIT', + 'SUPERUSER', + 'NOSUPERUSER', + 'CREATEDB', + 'NOCREATEDB', + 'CREATEROLE', + 'NOCREATEROLE', + 'CREATEUSER', + 'NOCREATEUSER', + 'INHERITS', + 'INLINE', 'INSENSITIVE', 'INSERT', - 'INSERT_METHOD', - 'INSTALL', - 'INSTANCE', - 'INT', - 'INT1', - 'INT2', - 'INT3', - 'INT4', - 'INT8', - 'INTEGER', - 'INTERVAL', - 'INTO', + 'INSTEAD', 'INVOKER', - 'IO', - 'IO_AFTER_GTIDS', - 'IO_BEFORE_GTIDS', - 'IO_THREAD', - 'IPC', 'ISOLATION', - 'ISSUER', - 'ITERATE', - 'JOIN', - 'JSON', 'KEY', - 'KEYS', - 'KEY_BLOCK_SIZE', - 'KILL', + 'LABEL', 'LANGUAGE', + 'LARGE', 'LAST', - 'LEADING', - 'LEAVE', - 'LEAVES', - 'LEFT', - 'LESS', + 'LEAKPROOF', 'LEVEL', - 'LIKE', - 'LIMIT', - 'LINEAR', - 'LINES', - 'LINESTRING', - 'LIST', + 'LISTEN', 'LOAD', 'LOCAL', - 'LOCALTIME', - 'LOCALTIMESTAMP', + 'LOCATION', 'LOCK', - 'LOCKS', - 'LOGFILE', - 'LOGS', - 'LONG', - 'LONGBLOB', - 'LONGTEXT', - 'LOOP', - 'LOW_PRIORITY', - 'MASTER', - 'MASTER_AUTO_POSITION', - 'MASTER_BIND', - 'MASTER_CONNECT_RETRY', - 'MASTER_DELAY', - 'MASTER_HEARTBEAT_PERIOD', - 'MASTER_HOST', - 'MASTER_LOG_FILE', - 'MASTER_LOG_POS', - 'MASTER_PASSWORD', - 'MASTER_PORT', - 'MASTER_RETRY_COUNT', - 'MASTER_SERVER_ID', - 'MASTER_SSL', - 'MASTER_SSL_CA', - 'MASTER_SSL_CAPATH', - 'MASTER_SSL_CERT', - 'MASTER_SSL_CIPHER', - 'MASTER_SSL_CRL', - 'MASTER_SSL_CRLPATH', - 'MASTER_SSL_KEY', - 'MASTER_SSL_VERIFY_SERVER_CERT', - 'MASTER_TLS_VERSION', - 'MASTER_USER', + 'MAPPING', 'MATCH', + 'MATERIALIZED', 'MAXVALUE', - 'MAX_CONNECTIONS_PER_HOUR', - 'MAX_QUERIES_PER_HOUR', - 'MAX_ROWS', - 'MAX_SIZE', - 'MAX_STATEMENT_TIME', - 'MAX_UPDATES_PER_HOUR', - 'MAX_USER_CONNECTIONS', - 'MEDIUM', - 'MEDIUMBLOB', - 'MEDIUMINT', - 'MEDIUMTEXT', - 'MEMORY', - 'MERGE', - 'MESSAGE_TEXT', - 'MICROSECOND', - 'MIDDLEINT', - 'MIGRATE', 'MINUTE', - 'MINUTE_MICROSECOND', - 'MINUTE_SECOND', - 'MIN_ROWS', - 'MOD', + 'MINVALUE', 'MODE', - 'MODIFIES', - 'MODIFY', 'MONTH', - 'MULTILINESTRING', - 'MULTIPOINT', - 'MULTIPOLYGON', - 'MUTEX', - 'MYSQL_ERRNO', + 'MOVE', 'NAME', 'NAMES', - 'NATIONAL', - 'NATURAL', - 'NCHAR', - 'NDB', - 'NDBCLUSTER', - 'NEVER', - 'NEW', 'NEXT', 'NO', - 'NODEGROUP', - 'NONBLOCKING', - 'NONE', - 'NO_WAIT', - 'NO_WRITE_TO_BINLOG', - 'NUMBER', - 'NUMERIC', - 'NVARCHAR', - 'OFFSET', - 'OLD_PASSWORD', - 'ON', - 'ONE', - 'ONLY', - 'OPEN', - 'OPTIMIZE', - 'OPTIMIZER_COSTS', + 'NOTHING', + 'NOTIFY', + 'NOWAIT', + 'NULLS', + 'OBJECT', + 'OF', + 'OFF', + 'OIDS', + 'OPERATOR', 'OPTION', - 'OPTIONALLY', 'OPTIONS', - 'OR', - 'ORDER', - 'OUT', - 'OUTER', - 'OUTFILE', + 'OWNED', 'OWNER', - 'PACK_KEYS', - 'PAGE', 'PARSER', - 'PARSE_GCOL_EXPR', 'PARTIAL', 'PARTITION', - 'PARTITIONING', - 'PARTITIONS', + 'PASSING', 'PASSWORD', - 'PHASE', - 'PLUGIN', - 'PLUGINS', - 'PLUGIN_DIR', - 'POINT', - 'POLYGON', - 'PORT', - 'PRECEDES', - 'PRECISION', + 'PLANS', + 'PRECEDING', 'PREPARE', + 'PREPARED', 'PRESERVE', - 'PREV', - 'PRIMARY', + 'PRIOR', 'PRIVILEGES', + 'PROCEDURAL', 'PROCEDURE', - 'PROCESSLIST', - 'PROFILE', - 'PROFILES', - 'PROXY', - 'PURGE', - 'QUARTER', - 'QUERY', - 'QUICK', + 'PROGRAM', + 'QUOTE', 'RANGE', 'READ', - 'READS', - 'READ_ONLY', - 'READ_WRITE', - 'REAL', - 'REBUILD', - 'RECOVER', - 'REDOFILE', - 'REDO_BUFFER_SIZE', - 'REDUNDANT', - 'REFERENCES', - 'REGEXP', - 'RELAY', - 'RELAYLOG', - 'RELAY_LOG_FILE', - 'RELAY_LOG_POS', - 'RELAY_THREAD', + 'REASSIGN', + 'RECHECK', + 'RECURSIVE', + 'REF', + 'REFRESH', + 'REINDEX', + 'RELATIVE', 'RELEASE', - 'RELOAD', - 'REMOVE', 'RENAME', - 'REORGANIZE', - 'REPAIR', - 'REPEAT', 'REPEATABLE', 'REPLACE', - 'REPLICATE_DO_DB', - 'REPLICATE_DO_TABLE', - 'REPLICATE_IGNORE_DB', - 'REPLICATE_IGNORE_TABLE', - 'REPLICATE_REWRITE_DB', - 'REPLICATE_WILD_DO_TABLE', - 'REPLICATE_WILD_IGNORE_TABLE', - 'REPLICATION', - 'REQUIRE', + 'REPLICA', 'RESET', - 'RESIGNAL', - 'RESTORE', + 'RESTART', 'RESTRICT', - 'RESUME', - 'RETURN', - 'RETURNED_SQLSTATE', 'RETURNS', - 'REVERSE', 'REVOKE', - 'RIGHT', - 'RLIKE', + 'ROLE', 'ROLLBACK', - 'ROLLUP', - 'ROTATE', - 'ROUTINE', - 'ROW', 'ROWS', - 'ROW_COUNT', - 'ROW_FORMAT', - 'RTREE', + 'RULE', 'SAVEPOINT', - 'SCHEDULE', 'SCHEMA', - 'SCHEMAS', - 'SCHEMA_NAME', + 'SCROLL', + 'SEARCH', 'SECOND', - 'SECOND_MICROSECOND', 'SECURITY', - 'SELECT', - 'SENSITIVE', - 'SEPARATOR', - 'SERIAL', + 'SEQUENCE', + 'SEQUENCES', 'SERIALIZABLE', 'SERVER', 'SESSION', 'SET', 'SHARE', 'SHOW', - 'SHUTDOWN', - 'SIGNAL', - 'SIGNED', 'SIMPLE', - 'SLAVE', - 'SLOW', - 'SMALLINT', 'SNAPSHOT', - 'SOCKET', - 'SOME', - 'SONAME', - 'SOUNDS', - 'SOURCE', - 'SPATIAL', - 'SPECIFIC', - 'SQL', - 'SQLEXCEPTION', - 'SQLSTATE', - 'SQLWARNING', - 'SQL_AFTER_GTIDS', - 'SQL_AFTER_MTS_GAPS', - 'SQL_BEFORE_GTIDS', - 'SQL_BIG_RESULT', - 'SQL_BUFFER_RESULT', - 'SQL_CACHE', - 'SQL_CALC_FOUND_ROWS', - 'SQL_NO_CACHE', - 'SQL_SMALL_RESULT', - 'SQL_THREAD', - 'SQL_TSI_DAY', - 'SQL_TSI_HOUR', - 'SQL_TSI_MINUTE', - 'SQL_TSI_MONTH', - 'SQL_TSI_QUARTER', - 'SQL_TSI_SECOND', - 'SQL_TSI_WEEK', - 'SQL_TSI_YEAR', - 'SSL', - 'STACKED', + 'STABLE', + 'STANDALONE', 'START', - 'STARTING', - 'STARTS', - 'STATS_AUTO_RECALC', - 'STATS_PERSISTENT', - 'STATS_SAMPLE_PAGES', - 'STATUS', - 'STOP', + 'STATEMENT', + 'STATISTICS', + 'STDIN', + 'STDOUT', 'STORAGE', - 'STORED', - 'STRAIGHT_JOIN', - 'STRING', - 'SUBCLASS_ORIGIN', - 'SUBJECT', - 'SUBPARTITION', - 'SUBPARTITIONS', - 'SUPER', - 'SUSPEND', - 'SWAPS', - 'SWITCHES', - 'TABLE', + 'STRICT', + 'STRIP', + 'SYSID', + 'SYSTEM', 'TABLES', 'TABLESPACE', - 'TABLE_CHECKSUM', - 'TABLE_NAME', + 'TEMP', + 'TEMPLATE', 'TEMPORARY', - 'TEMPTABLE', - 'TERMINATED', 'TEXT', - 'THAN', - 'THEN', - 'TIME', - 'TIMESTAMP', - 'TIMESTAMPADD', - 'TIMESTAMPDIFF', - 'TINYBLOB', - 'TINYINT', - 'TINYTEXT', - 'TO', - 'TRAILING', 'TRANSACTION', 'TRIGGER', - 'TRIGGERS', - 'TRUE', 'TRUNCATE', + 'TRUSTED', 'TYPE', 'TYPES', + 'UNBOUNDED', 'UNCOMMITTED', - 'UNDEFINED', - 'UNDO', - 'UNDOFILE', - 'UNDO_BUFFER_SIZE', - 'UNICODE', - 'UNINSTALL', - 'UNION', - 'UNIQUE', + 'UNENCRYPTED', 'UNKNOWN', - 'UNLOCK', - 'UNSIGNED', + 'UNLISTEN', + 'UNLOGGED', 'UNTIL', 'UPDATE', - 'UPGRADE', - 'USAGE', - 'USE', - 'USER', - 'USER_RESOURCES', - 'USE_FRM', - 'USING', - 'UTC_DATE', - 'UTC_TIME', - 'UTC_TIMESTAMP', - 'VALIDATION', - 'VALUE', - 'VALUES', - 'VARBINARY', - 'VARCHAR', - 'VARCHARACTER', - 'VARIABLES', + 'VACUUM', + 'VALID', + 'VALIDATE', + 'VALIDATOR', 'VARYING', + 'VERSION', 'VIEW', - 'VIRTUAL', - 'WAIT', - 'WARNINGS', - 'WEEK', - 'WEIGHT_STRING', - 'WHEN', - 'WHERE', - 'WHILE', - 'WITH', + 'VOLATILE', + 'WHITESPACE', 'WITHOUT', 'WORK', 'WRAPPER', 'WRITE', - 'X509', - 'XA', - 'XID', 'XML', - 'XOR', 'YEAR', - 'YEAR_MONTH', - 'ZEROFILL' + 'YES', + 'ZONE', + 'BETWEEN', + 'BIGINT', + 'BIT', + 'BOOLEAN', + 'CHAR', + 'CHARACTER', + 'COALESCE', + 'DEC', + 'DECIMAL', + 'EXISTS', + 'EXTRACT', + 'FLOAT', + 'GREATEST', + 'INOUT', + 'INT', + 'INTEGER', + 'INTERVAL', + 'LEAST', + 'NATIONAL', + 'NCHAR', + 'NONE', + 'NULLIF', + 'NUMERIC', + 'OVERLAY', + 'POSITION', + 'PRECISION', + 'REAL', + 'ROW', + 'SETOF', + 'SMALLINT', + 'SUBSTRING', + 'TIME', + 'TIMESTAMP', + 'TREAT', + 'TRIM', + 'VALUES', + 'VARCHAR', + 'XMLATTRIBUTES', + 'XMLCONCAT', + 'XMLELEMENT', + 'XMLEXISTS', + 'XMLFOREST', + 'XMLPARSE', + 'XMLPI', + 'XMLROOT', + 'XMLSERIALIZE', + 'CALL', + 'CURRENT', + 'ATTACH', + 'DETACH', + 'EXPRESSION', + 'GENERATED', + 'LOGGED', + 'STORED', + 'INCLUDE', + 'ROUTINE', + 'TRANSFORM', + 'IMPORT', + 'POLICY', + 'METHOD', + 'REFERENCING', + 'NEW', + 'OLD', + 'VALUE', + 'SUBSCRIPTION', + 'PUBLICATION', + 'OUT', + 'END', + 'ROUTINES', + 'SCHEMAS', + 'PROCEDURES', + 'INPUT', + 'SUPPORT', + 'PARALLEL', + 'SQL', + 'DEPENDS', + 'OVERRIDING', + 'CONFLICT', + 'SKIP', + 'LOCKED', + 'TIES', + 'ROLLUP', + 'CUBE', + 'GROUPING', + 'SETS', + 'TABLESAMPLE', + 'ORDINALITY', + 'XMLTABLE', + 'COLUMNS', + 'XMLNAMESPACES', + 'ROWTYPE', + 'NORMALIZED', + 'WITHIN', + 'FILTER', + 'GROUPS', + 'OTHERS', + 'NFC', + 'NFD', + 'NFKC', + 'NFKD', + 'UESCAPE', + 'VIEWS', + 'NORMALIZE', + 'DUMP', + 'PRINT_STRICT_PARAMS', + 'VARIABLE_CONFLICT', + 'ERROR', + 'USE_VARIABLE', + 'USE_COLUMN', + 'ALIAS', + 'CONSTANT', + 'PERFORM', + 'GET', + 'DIAGNOSTICS', + 'STACKED', + 'ELSIF', + 'WHILE', + 'REVERSE', + 'FOREACH', + 'SLICE', + 'EXIT', + 'RETURN', + 'QUERY', + 'RAISE', + 'SQLSTATE', + 'DEBUG', + 'LOG', + 'INFO', + 'NOTICE', + 'WARNING', + 'EXCEPTION', + 'ASSERT', + 'LOOP', + 'OPEN', + 'PEFERENCES', + 'USAGE', + 'CONNECT', + 'PUBLIC', + 'MERGE', + 'MATCHED', + 'BREADTH', + 'DEPTH', + 'UNSAFE', + 'RESTRICTED', + 'SAFE', + 'FINALIZE', + 'MODULUS', + 'REMAINDER', + 'LOGIN', + 'NOLOGIN', + 'REPLICATION', + 'NOREPLICATION', + 'BYPASSRLS', + 'NOBYPASSRLS', + 'PERMISSIVE', + 'RESTRICTIVE', + 'COMPRESSION', + 'PLAIN', + 'EXTENDED', + 'MAIN' ], operators: [ + // Logical Operators: https://www.postgresql.org/docs/16/functions-logical.html 'AND', + 'OR', + 'NOT', + // Comparison Predicates: https://www.postgresql.org/docs/16/functions-comparison.html 'BETWEEN', - 'IN', - 'LIKE', 'NOT', - 'OR', 'IS', + 'ISNULL', + 'NOTNULL', 'NULL', - 'INTERSECT', - 'UNION', - 'INNER', - 'JOIN', - 'LEFT', - 'OUTER', - 'RIGHT' + 'TRUE', + 'FALSE', + // Pattern Matching: https://www.postgresql.org/docs/16/functions-matching.html + 'LIKE', + 'SIMILAR', + 'TO', + // https://www.postgresql.org/docs/16/functions-datetime.html + 'OVERLAPS', + // Grouping Operations:https://www.postgresql.org/docs/16/functions-aggregate.html + 'GROUPING', + // Subquery Expressions: https://www.postgresql.org/docs/16/functions-subquery.html + 'EXISTS', + 'IN', + 'ANY', + 'SOME', + 'ALL', + 'DISTINCT' ], builtinFunctions: [ + // Comparison Functions: https://www.postgresql.org/docs/16/functions-comparison.html + 'NUM_NONNULLS', + 'NUM_NULLS', + // Mathematical Functions:https://www.postgresql.org/docs/16/functions-math.html 'ABS', + 'CBRT', + 'CEIL', + 'CEILING', + 'DEGREES', + 'DIV', + 'ERF', + 'ERFC', + 'EXP', + 'FACTORIAL', + 'FLOOR', + 'GCD', + 'LCM', + 'LN', + 'LOG', + 'LOG10', + 'MIN_SCALE', + 'MOD', + 'PI', + 'POWER', + 'RADIANS', + 'ROUND', + 'SCALE', + 'SIGN', + 'SQRT', + 'TRIM_SCALE', + 'TRUNC', + 'WIDTH_BUCKET', + // Random Functions + 'RANDOM', + 'RANDOM_NORMAL', + 'SETSEED', + // Trigonometric Functions 'ACOS', - 'ADDDATE', - 'ADDTIME', - 'AES_DECRYPT', - 'AES_ENCRYPT', - 'ANY_VALUE', - 'Area', - 'AsBinary', - 'AsWKB', - 'ASCII', + 'ACOSD', 'ASIN', - 'AsText', - 'AsWKT', - 'ASYMMETRIC_DECRYPT', - 'ASYMMETRIC_DERIVE', - 'ASYMMETRIC_ENCRYPT', - 'ASYMMETRIC_SIGN', - 'ASYMMETRIC_VERIFY', + 'ASIND', 'ATAN', + 'ATAND', 'ATAN2', - 'ATAN', - 'AVG', - 'BENCHMARK', - 'BIN', - 'BIT_AND', - 'BIT_COUNT', + 'ATAN2D', + 'COS', + 'COSD', + 'COT', + 'COTD', + 'SIN', + 'SIND', + 'TAN', + 'TAND', + // Hyperbolic Functions + 'SINH', + 'COSH', + 'TANH', + 'ASINH', + 'ACOSH', + 'ATANH', + // SQL String Functions: https://www.postgresql.org/docs/16/functions-string.html + 'BTRIM', 'BIT_LENGTH', - 'BIT_OR', - 'BIT_XOR', - 'Buffer', - 'CAST', - 'CEIL', - 'CEILING', - 'Centroid', - 'CHAR', 'CHAR_LENGTH', 'CHARACTER_LENGTH', - 'CHARSET', - 'COALESCE', - 'COERCIBILITY', - 'COLLATION', - 'COMPRESS', + 'LOWER', + 'LPAD', + 'LTRIM', + 'NORMALIZE', + 'OCTET_LENGTH', + 'OVERLAY', + 'POSITION', + 'RPAD', + 'RTRIM', + 'SUBSTRING', + 'TRIM', + 'UPPER', + // Other String Functions + 'ASCII', + 'CHR', 'CONCAT', 'CONCAT_WS', - 'CONNECTION_ID', - 'Contains', - 'CONV', + 'FORMAT', + 'INITCAP', + 'LEFT', + 'LENGTH', + 'MD5', + 'PARSE_IDENT', + 'PG_CLIENT_ENCODING', + 'QUOTE_IDENT', + 'QUOTE_LITERAL', + 'QUOTE_NULLABLE', + 'REGEXP_COUNT', + 'REGEXP_INSTR', + 'REGEXP_LIKE', + 'REGEXP_MATCH', + 'REGEXP_MATCHS', + 'REGEXP_REPLACE', + 'REGEXP_SPLIT_TO_ARRAY', + 'REGEXP_SPLIT_TO_TABLE', + 'REGEXP_SUBSTR', + 'REPEAT', + 'REPLACE', + 'REVERSE', + 'RIGHT', + 'SPLIT_PART', + 'STARTS_WITH', + 'STRING_TO_ARRAY', + 'STRING_TO_TABLE', + 'STRPOS', + 'SUBSTR', + 'TO_ASCII', + 'TO_HEX', + 'TRANSLATE', + 'UNISTR', + // format + 'FORMAT', + // Binary String Functions:https://www.postgresql.org/docs/16/functions-binarystring.html + 'BIT_COUNT', + 'GET_BIT', + 'GET_BYTE', + 'SET_BIT', + 'SET_BYTE', + 'SHA224', + 'SHA256', + 'SHA384', + 'SHA512', + // Text/Binary String Conversion Functions 'CONVERT', - 'CONVERT_TZ', - 'ConvexHull', - 'COS', - 'COT', - 'COUNT', - 'CRC32', - 'CREATE_ASYMMETRIC_PRIV_KEY', - 'CREATE_ASYMMETRIC_PUB_KEY', - 'CREATE_DH_PARAMETERS', - 'CREATE_DIGEST', - 'Crosses', - 'CURDATE', + 'CONVERT_FROM', + 'CONVERT_TO', + 'ENCODE', + 'DECODE', + // Data Type Formatting Functions :https://www.postgresql.org/docs/16/functions-formatting.html + 'TO_CHAR', + 'TO_DATE', + 'TO_NUMBER', + 'TO_TIMESTAMP', + // Date/Time Functions: https://postgresql.org/docs/16/functions-datetime.html + 'AGE', + 'CLOCK_TIMESTAMP', 'CURRENT_DATE', 'CURRENT_TIME', 'CURRENT_TIMESTAMP', - 'CURRENT_USER', - 'CURTIME', - 'DATABASE', - 'DATE', 'DATE_ADD', - 'DATE_FORMAT', - 'DATE_SUB', - 'DATEDIFF', - 'DAY', - 'DAYNAME', - 'DAYOFMONTH', - 'DAYOFWEEK', - 'DAYOFYEAR', - 'DECODE', - 'DEFAULT', - 'DEGREES', - 'DES_DECRYPT', - 'DES_ENCRYPT', - 'Dimension', - 'Disjoint', - 'Distance', - 'ELT', - 'ENCODE', - 'ENCRYPT', - 'EndPoint', - 'Envelope', - 'Equals', - 'EXP', - 'EXPORT_SET', - 'ExteriorRing', + 'DATE_BIN', + 'DATE_PART', + 'DATE_SUBTRACT', + 'DATE_TRUNC', 'EXTRACT', - 'ExtractValue', - 'FIELD', - 'FIND_IN_SET', - 'FLOOR', - 'FORMAT', - 'FOUND_ROWS', - 'FROM_BASE64', - 'FROM_DAYS', - 'FROM_UNIXTIME', - 'GeomCollFromText', - 'GeometryCollectionFromText', - 'GeomCollFromWKB', - 'GeometryCollectionFromWKB', - 'GeometryCollection', - 'GeometryN', - 'GeometryType', - 'GeomFromText', - 'GeometryFromText', - 'GeomFromWKB', - 'GeometryFromWKB', - 'GET_FORMAT', - 'GET_LOCK', - 'GLength', - 'GREATEST', - 'GROUP_CONCAT', - 'GTID_SUBSET', - 'GTID_SUBTRACT', - 'HEX', - 'HOUR', - 'IF', - 'IFNULL', - 'INET_ATON', - 'INET_NTOA', - 'INET6_ATON', - 'INET6_NTOA', - 'INSERT', - 'INSTR', - 'InteriorRingN', - 'Intersects', - 'INTERVAL', - 'IS_FREE_LOCK', - 'IS_IPV4', - 'IS_IPV4_COMPAT', - 'IS_IPV4_MAPPED', - 'IS_IPV6', - 'IS_USED_LOCK', - 'IsClosed', - 'IsEmpty', - 'ISNULL', - 'IsSimple', - 'JSON_APPEND', + 'ISFINITE', + 'JUSTIFY_DAYS', + 'JUSTIFY_HOURS', + 'JUSTIFY_INTERVAL', + 'LOCALTIME', + 'LOCALTIMESTAMP', + 'MAKE_DATE', + 'MAKE_INTERVAL', + 'MAKE_TIME', + 'MAKE_TIMESTAMP', + 'MAKE_TIMESTAMPTZ', + 'NOW', + 'STATEMENT_TIMESTAMP', + 'TIMEOFDAY', + 'TRANSACTION_TIMESTAMP', + 'TO_TIMESTAMP', + // Delaying Execution + 'PG_SLEEP', + 'PG_SLEEP_FOR', + 'PG_SLEEP_UNTIL', + // Enum Support Functions: https://www.postgresql.org/docs/16/functions-enum.html + 'ENUM_FIRST', + 'ENUM_LAST', + 'ENUM_RANGE', + // Geometric Functions: https://www.postgresql.org/docs/16/functions-geometry.html + 'AREA', + 'CENTER', + 'DIAGONAL', + 'DIAMETER', + 'HEIGHT', + 'ISCLOSED', + 'ISOPEN', + 'NPOINTS', + 'PCLOSE', + 'POPEN', + 'RADIUS', + 'SLOPE', + 'WIDTH', + // Geometric Type Conversion Functions + 'BOX', + 'BOUND_BOX', + 'CIRCLE', + 'LINE', + 'LSEG', + 'PATH', + 'POINT', + 'POLYGON', + // IP Address Functions: https://www.postgresql.org/docs/16/functions-net.html + 'ABBREV', + 'BROADCAST', + 'FAMILY', + 'HOST', + 'HOSTMASK', + 'INET_MERGE', + 'INET_SAME_FAMILY', + 'MASKLEN', + 'NETMASK', + 'NETWORK', + 'SET_MASKLEN', + 'TEXT', + // MAC Address Functions + 'MACADDR8_SET7BIT', + // Text Search Functions:https://www.postgresql.org/docs/16/functions-textsearch.html + 'ARRAY_TO_TSVECTOR', + 'GET_CURRENT_TS_CONFIG', + 'NUMNODE', + 'PLAINTO_TSQUERY', + 'PHRASETO_TSQURY', + 'WEBSEARCH_TO_TSQUERY', + 'QUERYTREE', + 'SETWEIGHT', + 'STRIP', + 'TO_TSQUERY', + 'TO_TSVECTOR', + 'JSON_TO_TSVECTOR', + 'TS_DELETE', + 'TS_FILTER', + 'TS_HEADLINE', + 'TS_RANK', + 'TS_RANK_CD', + 'TS_REWRITE', + 'TSQUERY_PHRASE', + 'TSVECTOR_TO_ARRAY', + 'UNNEST', + // Text Search Debugging Functions + 'TS_DEBUG', + 'TS_LEXIZE', + 'TS_PARSE', + 'TS_TOKEN_TYPE', + 'TS_STAT', + // UUID Functions: https://www.postgresql.org/docs/16/functions-uuid.html + 'GEN_RANDOM_UUID', + // XML Functions: https://www.postgresql.org/docs/16/functions-xml.html + 'XMLCOMMENT', + 'XMLCONCAT', + 'XMLELEMENT', + 'XMLFOREST', + 'XMLPI', + 'XMLROOT', + 'XMLAGG', + 'XMLEXISTS', + 'XML_IS_WELL_FORMED', + 'XPATH', + 'XPATH_EXISTS', + 'XMLTABLE', + 'TABLE_TO_XML', + 'QUERY_TO_XML', + 'CURSOR_TO_XML', + 'TABLE_TO_XMLSCHEMA', + 'QUERY_TO_XMLSCHEMA', + 'CURSOR_TO_XMLSCHEMA', + 'TABLE_TO_XML_AND_XMLSCHEMA', + 'QUERY_TO_XML_AND_XMLSCHEMA', + 'CURSOR_TO_XML_AND_XMLSCHEMA', + 'SCHEMA_TO_XML', + 'SCHEMA_TO_XMLSCHEMA', + 'SCHEMA_TO_XML_AND_XMLSCHEMA', + 'DATABSE_TO_XML', + 'DATABSE_TO_XMLSCHEMA', + 'DATABSE_TO_XML_AND_XMLSCHEMA', + 'XMLPARSE', + // JSON Functions and Operators: https://www.postgresql.org/docs/16/functions-json.html + 'TO_JSON', + 'TO_JSONB', + 'ARRAY_TO_JSON', 'JSON_ARRAY', - 'JSON_ARRAY_APPEND', - 'JSON_ARRAY_INSERT', - 'JSON_CONTAINS', - 'JSON_CONTAINS_PATH', - 'JSON_DEPTH', - 'JSON_EXTRACT', - 'JSON_INSERT', - 'JSON_KEYS', - 'JSON_LENGTH', - 'JSON_MERGE', - 'JSON_MERGE_PRESERVE', + 'ROW_TO_JSON', + 'JSON_BUILD_ARRAY', + 'JSONB_BUILD_ARRAY', 'JSON_OBJECT', - 'JSON_QUOTE', - 'JSON_REMOVE', - 'JSON_REPLACE', - 'JSON_SEARCH', - 'JSON_SET', - 'JSON_TYPE', - 'JSON_UNQUOTE', - 'JSON_VALID', - 'LAST_INSERT_ID', - 'LCASE', + 'JSONB_OBJECT', + 'JSON_ARRAY_ELEMENTS', + 'JSONB_ARRAY_ELEMENTS', + 'JSON_ARRAY_ELEMENTS_TEXT', + 'JSONB_ARRAY_ELEMENTS_TEXT', + 'JSON_ARRAY_LENGTH', + 'JSONB_ARRAY_LENGTH', + 'JSON_EACH', + 'JSONB_EACH', + 'JSON_EACH_TEXT', + 'JSONB_EACH_TEXT', + 'JSON_EXTRACT_PATH', + 'JSONB_EXTRACT_PATH', + 'JSON_EXTRACT_PATH_TEXT', + 'JSONB_EXTRACT_PATH_TEXT', + 'JSON_OBJECT_KEYS', + 'JSONB_OBJECT_KEYS', + 'JSON_POPULATE_RECORD', + 'JSONB_POPULATE_RECORD', + 'JSON_POPULATE_RECORDSET', + 'JSONB_POPULATE_RECORDSET', + 'JSON_TO_RECORD', + 'JSONB_TO_RECORD', + 'JSON_TO_RECORDSET', + 'JSONB_TO_RECORDSET', + 'JSONB_SET', + 'JSONB_SET_LAX', + 'JSONB_INSERT', + 'JSON_STRIP_NULLS', + 'JSONB_STRIP_NULLS', + 'JSONB_PATH_EXISTS', + 'JSONB_PATH_MATCH', + 'JSONB_PATH_QUERY', + 'JSONB_PATH_QUERY_ARRAY', + 'JSONB_PATH_QUERY_FIRST', + 'JSONB_PATH_EXISTS_TZ', + 'JSONB_PATH_MATCH_TZ', + 'JSONB_PATH_QUERY_TZ', + 'JSONB_PATH_QUERY_ARRAY_TZ', + 'JSONB_PATH_QUERY_FIRST_TZ', + 'JSONB_PRETTY', + 'JSONB_TYPEOF', + 'JSON_TYPEOF', + 'TYPE', + 'SIZE', + 'DOUBLE', + 'DATETIME', + 'KEYVALUE', + // Sequence Manipulation Functions:https://www.postgresql.org/docs/16/functions-sequence.html + 'NEXTVAL', + 'SETVAL', + 'CURRVAL', + 'LASTVAL', + // https://www.postgresql.org/docs/16/functions-conditional.html + 'COALESCE', + 'NULLIF', + 'GREATEST', 'LEAST', - 'LEFT', - 'LENGTH', - 'LineFromText', - 'LineStringFromText', - 'LineFromWKB', - 'LineStringFromWKB', - 'LineString', - 'LN', - 'LOAD_FILE', - 'LOCALTIME', - 'LOCALTIMESTAMP', - 'LOCATE', - 'LOG', - 'LOG10', - 'LOG2', - 'LOWER', - 'LPAD', - 'LTRIM', - 'MAKE_SET', - 'MAKEDATE', - 'MAKETIME', - 'MASTER_POS_WAIT', + // https://www.postgresql.org/docs/16/functions-array.html + 'ARRAY_APPEND', + 'ARRAY_CAT', + 'ARRAY_DIMS', + 'ARRAY_FILL', + 'ARRAY_LENGTH', + 'ARRAY_LOWER', + 'ARRAY_NDIMS', + 'ARRAY_POSITION', + 'ARRAY_POSITIONS', + 'ARRAY_PREPEND', + 'ARRAY_REMOVE', + 'ARRAY_REPLACE', + 'ARRAY_SAMPLE', + 'ARRAY_SHUFFLE', + 'ARRAY_TO_STRING', + 'ARRAY_UPPER', + 'CARDINALITY', + 'TRIM_ARRAY', + 'UNNEST', + // Range Functions: https://www.postgresql.org/docs/16/functions-range.html + 'ISEMPTY', + 'LOWER_INC', + 'UPPER_INC', + 'LOWER_INF', + 'UPPER_INF', + 'RANGE_MERGE', + 'MULTIRANGE', + // Aggregate Functions: https://www.postgresql.org/docs/16/functions-aggregate.html + 'ANY_VALUE', + 'ARRAY_AGG', + 'AVG', + 'BIT_AND', + 'BIT_OR', + 'BIT_XOR', + 'BOOL_AND', + 'BOOL_OR', + 'EVERY', + 'JSON_AGG', + 'JSONB_AGG', + 'JSON_OBJECT_AGG', + 'JSONB_OBJECT_AGG', + 'JSON_OBJECT_AGG_STRICT', + 'JSONB_OBJECT_AGG_STRICT', + 'JSON_OBJECT_AGG_UNIQUE', + 'JSONB_OBJECT_AGG_UNIQUE', + 'JSON_OBJECT_AGG_UNIQUE_STRICT', + 'JSONB_OBJECT_AGG_UNIQUE_STRICT', 'MAX', - 'MBRContains', - 'MBRCoveredBy', - 'MBRCovers', - 'MBRDisjoint', - 'MBREqual', - 'MBREquals', - 'MBRIntersects', - 'MBROverlaps', - 'MBRTouches', - 'MBRWithin', - 'MD5', - 'MICROSECOND', - 'MID', 'MIN', - 'MINUTE', - 'MLineFromText', - 'MultiLineStringFromText', - 'MLineFromWKB', - 'MultiLineStringFromWKB', - 'MOD', - 'MONTH', - 'MONTHNAME', - 'MPointFromText', - 'MultiPointFromText', - 'MPointFromWKB', - 'MultiPointFromWKB', - 'MPolyFromText', - 'MultiPolygonFromText', - 'MPolyFromWKB', - 'MultiPolygonFromWKB', - 'MultiLineString', - 'MultiPoint', - 'MultiPolygon', - 'NAME_CONST', - 'NOT IN', - 'NOW', - 'NULLIF', - 'NumGeometries', - 'NumInteriorRings', - 'NumPoints', - 'OCT', - 'OCTET_LENGTH', - 'OLD_PASSWORD', - 'ORD', - 'Overlaps', - 'PASSWORD', - 'PERIOD_ADD', - 'PERIOD_DIFF', - 'PI', - 'Point', - 'PointFromText', - 'PointFromWKB', - 'PointN', - 'PolyFromText', - 'PolygonFromText', - 'PolyFromWKB', - 'PolygonFromWKB', - 'Polygon', - 'POSITION', - 'POW', - 'POWER', - 'PROCEDURE ANALYSE', - 'QUARTER', - 'QUOTE', - 'RADIANS', - 'RAND', - 'RANDOM_BYTES', - 'RELEASE_ALL_LOCKS', - 'RELEASE_LOCK', - 'REPEAT', - 'REPLACE', - 'REVERSE', - 'RIGHT', - 'ROUND', - 'ROW_COUNT', - 'RPAD', - 'RTRIM', - 'SCHEMA', - 'SEC_TO_TIME', - 'SECOND', - 'SESSION_USER', - 'SHA1', - 'SHA', - 'SHA2', - 'SIGN', - 'SIN', - 'SLEEP', - 'SOUNDEX', - 'SPACE', - 'SQRT', - 'SRID', - 'ST_Area', - 'ST_AsBinary', - 'ST_AsWKB', - 'ST_AsGeoJSON', - 'ST_AsText', - 'ST_AsWKT', - 'ST_Buffer', - 'ST_Buffer_Strategy', - 'ST_Centroid', - 'ST_Contains', - 'ST_ConvexHull', - 'ST_Crosses', - 'ST_Difference', - 'ST_Dimension', - 'ST_Disjoint', - 'ST_Distance', - 'ST_Distance_Sphere', - 'ST_EndPoint', - 'ST_Envelope', - 'ST_Equals', - 'ST_ExteriorRing', - 'ST_GeoHash', - 'ST_GeomCollFromText', - 'ST_GeometryCollectionFromText', - 'ST_GeomCollFromTxt', - 'ST_GeomCollFromWKB', - 'ST_GeometryCollectionFromWKB', - 'ST_GeometryN', - 'ST_GeometryType', - 'ST_GeomFromGeoJSON', - 'ST_GeomFromText', - 'ST_GeometryFromText', - 'ST_GeomFromWKB', - 'ST_GeometryFromWKB', - 'ST_InteriorRingN', - 'ST_Intersection', - 'ST_Intersects', - 'ST_IsClosed', - 'ST_IsEmpty', - 'ST_IsSimple', - 'ST_IsValid', - 'ST_LatFromGeoHash', - 'ST_Length', - 'ST_LineFromText', - 'ST_LineStringFromText', - 'ST_LineFromWKB', - 'ST_LineStringFromWKB', - 'ST_LongFromGeoHash', - 'ST_MakeEnvelope', - 'ST_MLineFromText', - 'ST_MultiLineStringFromText', - 'ST_MLineFromWKB', - 'ST_MultiLineStringFromWKB', - 'ST_MPointFromText', - 'ST_MultiPointFromText', - 'ST_MPointFromWKB', - 'ST_MultiPointFromWKB', - 'ST_MPolyFromText', - 'ST_MultiPolygonFromText', - 'ST_MPolyFromWKB', - 'ST_MultiPolygonFromWKB', - 'ST_NumGeometries', - 'ST_NumInteriorRing', - 'ST_NumInteriorRings', - 'ST_NumPoints', - 'ST_Overlaps', - 'ST_PointFromGeoHash', - 'ST_PointFromText', - 'ST_PointFromWKB', - 'ST_PointN', - 'ST_PolyFromText', - 'ST_PolygonFromText', - 'ST_PolyFromWKB', - 'ST_PolygonFromWKB', - 'ST_Simplify', - 'ST_SRID', - 'ST_StartPoint', - 'ST_SymDifference', - 'ST_Touches', - 'ST_Union', - 'ST_Validate', - 'ST_Within', - 'ST_X', - 'ST_Y', - 'StartPoint', - 'STD', + 'RANGE_AGG', + 'RANGE_INTERSECT_AGG', + 'JSON_AGG_STRICT', + 'JSONB_AGG_STRICT', + 'STRING_AGG', + 'SUM', + 'XMLAGG', + 'CORR', + 'COVAR_POP', + 'COVAR_SAMP', + 'REGR_AVGX', + 'REGR_AVGY', + 'REGR_COUNT', + 'REGR_INTERCEPT', + 'REGR_R2', + 'REGR_SLOPE', + 'REGR_SXX', + 'REGR_SXY', + 'REGR_SYY', 'STDDEV', 'STDDEV_POP', 'STDDEV_SAMP', - 'STR_TO_DATE', - 'STRCMP', - 'SUBDATE', - 'SUBSTR', - 'SUBSTRING', - 'SUBSTRING_INDEX', - 'SUBTIME', - 'SUM', - 'SYSDATE', - 'SYSTEM_USER', - 'TAN', - 'TIME', - 'TIME_FORMAT', - 'TIME_TO_SEC', - 'TIMEDIFF', - 'TIMESTAMP', - 'TIMESTAMPADD', - 'TIMESTAMPDIFF', - 'TO_BASE64', - 'TO_DAYS', - 'TO_SECONDS', - 'Touches', - 'TRIM', - 'TRUNCATE', - 'UCASE', - 'UNCOMPRESS', - 'UNCOMPRESSED_LENGTH', - 'UNHEX', - 'UNIX_TIMESTAMP', - 'UpdateXML', - 'UPPER', - 'USER', - 'UTC_DATE', - 'UTC_TIME', - 'UTC_TIMESTAMP', - 'UUID', - 'UUID_SHORT', - 'VALIDATE_PASSWORD_STRENGTH', - 'VALUES', + 'VARIANCE', 'VAR_POP', 'VAR_SAMP', - 'VARIANCE', + 'PERCENTILE_CONT', + 'PERCENTILE_DISC', + 'RANK', + 'SENSE_RANK', + 'PERCENT_RANK', + 'CUME_DIST', + // Window Functions: https://www.postgresql.org/docs/16/functions-window.html + 'ROW_NUMBER', + 'DENSE_RANK', + 'NTILE', + 'LAG', + 'LEAD', + 'FIRST_VALUE', + 'LAST_VALUE', + 'NTH_VALUE', + // Set Returning Functions:https://www.postgresql.org/docs/16/functions-srf.html + 'GENERATE_SERIES', + 'GENERATE_SUBSCRIPTS', + // Session Information Functions:https://www.postgresql.org/docs/16/functions-info.html + 'CURRENT_CATALOG', + 'CURRENT_DATABASE', + 'CURRENT_QUERY', + 'CURRENT_ROLE', + 'CURRENT_SCHEMA', + 'CURRENT_SCHEMAS', + 'CURRENT_USER', + 'INET_CLIENT_ADDR', + 'INET_CLIENT_PORT', + 'INET_SERVER_ADDR', + 'INET_SERVER_PORT', + 'PG_BACKEND_PID', + 'PG_BLOCKING_PIDS', + 'PG_CONF_LOAD_TIME', + 'PG_CURRENT_LOGFILE', + 'PG_MY_TEMP_SCHEMA', + 'PG_IS_OTHER_TEMP_SCHEMA', + 'PG_JIT_AVAILABLE', + 'PG_LISTENING_CHANNELS', + 'PG_NOTIFICATION_QUEUE_USAGE', + 'PG_POSTMASTER_START_TIME', + 'PG_SAFE_SNAPSHOT_BLOCKING_PIDS', + 'PG_TRIGGER_DEPTH', + 'SESSION_USER', + 'SYSTEM_USER', + 'USER', 'VERSION', - 'WAIT_FOR_EXECUTED_GTID_SET', - 'WAIT_UNTIL_SQL_THREAD_AFTER_GTIDS', - 'WEEK', - 'WEEKDAY', - 'WEEKOFYEAR', - 'WEIGHT_STRING', - 'Within', - 'X', - 'Y', - 'YEAR', - 'YEARWEEK' + 'HAS_TABLE_PRIVILEGE', + 'HAS_ANY_COLUMN_PRIVILEGE', + 'HAS_COLUMN_PRIVILEGE', + 'HAS_DATABASE_PRIVILEGE', + 'HAS_FOREIGN_DATA_WRAPPER_PRIVILEGE', + 'HAS_FUNCTION_PRIVILEGE', + 'HAS_LANGUAGE_PRIVILEGE', + 'HAS_PARAMETER_PRIVILEGE', + 'HAS_SCHEMA_PRIVILEGE', + 'HAS_SEQUENCE_PRIVILEGE', + 'HAS_SERVER_PRIVILEGE', + 'HAS_TABLE_PRIVILEGE', + 'HAS_TABLESPACE_PRIVILEGE', + 'HAS_TYPE_PRIVILEGE', + 'PG_HAS_ROLE', + 'ROW_SECURITY_ACTIVE', + // aclitem Functions + 'ACLDEFAULT', + 'ACLEXPLODE', + 'MAKEACLITEM', + // Schema Visibility Inquiry Functions + 'PG_COLLACTION_IS_VISIBLE', + 'PG_CONVERSION_IS_VISIBLE', + 'PG_FUNCTION_IS_VISIBLE', + 'PG_OPCLASS_IS_VISIBLE', + 'PG_OPERATOR_IS_VISIBLE', + 'PG_OPFAMILY_IS_VISIBLE', + 'PG_STATISTICS_OBJ_IS_VISIBLE', + 'PG_TABLE_IS_VISIBLE', + 'PG_TS_CONFIG_IS_VISIBLE', + 'PG_TS_DICT_IS_VISIBLE', + 'PG_TS_PARSER_IS_VISIBLE', + 'PG_TS_TEMPLATE_IS_VISIBLE', + 'PG_TYPE_IS_VISIBLE', + 'FORMAT_TYPE', + 'PG_CHAR_TO_ENCODING', + 'PG_ENCODING_TO_CHAR', + 'PG_GET_CATALOG_FOREIGN_KEYS', + 'PG_GET_CONSTRAINTDEF', + 'PG_GET_EXPR', + 'PG_GET_FUNCTIONDEF', + 'PG_GET_FUNCTION_ARGUMENTS', + 'PG_GET_FUNCTION_IDENTIFY_ARGUMENTS', + 'PG_GET_FUNCTION_RESULT', + 'PG_GET_KEYWORDS', + 'PG_GET_PARTKEYDEF', + 'PG_GET_RULEDEF', + 'PG_GET_SERIAL_SEQUENCE', + 'PG_GET_STATISTICSOBJDEF', + 'PG_GET_TRIGGERDEF', + 'PG_GET_USERBYID', + 'PG_GET_VIEWDEF', + 'PG_INDEX_COLUMN_HAS_PROPERTY', + 'PG_INDEX_HAS_PROPERTY', + 'PG_INDEXAM_HAS_PROPERTY', + 'PG_OPTIONS_TO_TABLE', + 'PG_SETTINGS_GET_FLAGS', + 'PG_TABLESPACE_DATABASES', + 'PG_TABLESPACE_LOCATION', + 'PG_TYPEOF', + 'TO_REGCLASS', + 'TO_REGCOLLATION', + 'TO_REGNAMESPACE', + 'TO_REGOPER', + 'TO_REGOPERATOR', + 'TO_REGPROC', + 'TO_REGPROCEDURE', + 'TO_REGROLE', + 'TO_REGTYPE', + // Object Information and Addressing Functions + 'PG_DESCRIBE_OBJECT', + 'PG_IDENTIFY_OBJECT', + 'PG_IDENTIFY_OBJECT_AS_ADDRESS', + 'PG_GET_OBJECT_ADDRESS', + // Comment Information Functions + 'COL_DESCRIPTION', + 'OBJ_DESCRIPTION', + 'SHOBJ_DESCRIPTION', + // Data Validity Checking Functions + 'PG_INPUT_IS_VALID', + 'PG_INPUT_ERROR_INFO', + // Transaction ID and Snapshot Information Functions + 'PG_CURRENT_XACT_ID', + 'PG_CURRENT_XACT_ID_IF_ASSIGNED', + 'PG_XACT_STATUS', + 'PG_SNAPSHOT_XIP', + 'PG_CURRENT_SNAPSHOT', + 'PG_SNAPSHOT_XMAX', + 'PG_SNAPSHOT_XMIN', + 'PG_VISIBLE_IN_SNAPSHOT', + // Deprecated Transaction ID and Snapshot Information Functions + 'TXID_CURRENT', + 'TXID_CURRENT_IF_ASSIGNED', + 'TXID_CURRENT_SNAPSHOT', + 'TXID_SNAPSHOT_XIP', + 'TXID_SNAPSHOT_XMAX', + 'TXID_SNAPSHOT_XMIN', + 'TXID_VISIBLE_IN_SNAPSHOT', + 'TXID_STATUS', + // Committed Transaction Information Functions + 'PG_XACT_COMMIT_TIMESTAMP', + 'PG_XACT_COMMIT_TIMESTAMP_ORIGIN', + 'PG_LAST_COMMITED_XACT', + // Control Data Functions + 'PG_CONTROL_CHECKPOINT', + 'PG_CONTROL_SYSTEM', + 'PG_CONTROL_INIT', + 'PG_CONTROL_RECOVERY', + // System Administration Functions:https://www.postgresql.org/docs/16/functions-admin.html + 'CURRENT_SETTING', + 'SET_CONFIG', + 'PG_CANCEL_BACKEND', + 'PG_LOG_BACKEND_MEMORY_CONTEXTS', + 'PG_RELOAD_CONF', + 'PG_ROTATE_LOGFILE', + 'PG_TERMINATE_BACKEND', + // Backup Control Functions + 'PG_CREATE_RESTORE_POINT', + 'PG_CURRENT_WAL_FLUSH_LSN', + 'PG_CURRENT_WAL_LSN', + 'PG_BACKUP_START', + 'PG_BACKUP_STOP', + 'PG_SWITCH_WAL', + 'PG_WALFILE_NAME', + 'PG_WALFILE_NAME_OFFSET', + 'PG_SPLIT_WALFILE_NAME', + 'PG_WAL_LSN_DIFF', + // Recovery Control Functions + 'PG_IS_IN_RECOVERY', + 'PG_LAST_WAL_REPLAY_LSN', + 'PG_LAST_XACT_REPLAY_TIMESTAMP', + 'PG_GET_WAL_RESOURCE_MANAGERS', + 'PG_IS_WAL_REPLAY_PAUSED', + 'PG_GET_WAL_REPLAY_PAUSE_STATE', + 'PG_PROMOTE', + 'PG_WAL_REPLAY_PAUSE', + 'PG_WAL_REPLAY_RESUME', + // Snapshot Synchronization Functions + 'PG_EXPORT_SNAPSHOT', + 'PG_LOG_STANDBY_SNAPSHOT', + // Replication Management Functions + 'PG_CREATE_PHYSICAL_REPLICATION_SLOT', + 'PG_DROP_REPLICATION_SLOT', + 'PG_CREATE_LOGICAL_REPLICATION_SLOT', + 'PG_COPY_PHYSICAL_REPLICATION_SLOT', + 'PG_COPY_LOGICAL_REPLICATION_SLOT', + 'PG_LOGICAL_SLOT_GET_CHANGES', + 'PG_LOGICAL_SLOT_PEEK_CHANGES', + 'PG_LOGICAL_SLOT_GET_BINARY_CHANGES', + 'PG_LOGICAL_SLOT_PEEK_BINARY_CHANGES', + 'PG_REPLICATION_SLOT_ADVANCE', + 'PG_REPLICATION_ORIGIN_CREATE', + 'PG_REPLICATION_ORIGIN_DROP', + 'PG_REPLICATION_ORIGIN_OID', + 'PG_REPLICATION_ORIGIN_SESSION_SETUP', + 'PG_REPLICATION_ORIGIN_SESSION_RESET', + 'PG_REPLICATION_ORIGIN_SESSION_IS_SETUP', + 'PG_REPLICATION_ORIGIN_SESSION_PROGRESS', + 'PG_REPLICATION_ORIGIN_XACT_SETUP', + 'PG_REPLICATION_ORIGIN_XACT_RESET', + 'PG_REPLICATION_ORIGIN_ADVANCE', + 'PG_REPLICATION_ORIGIN_PROGRESS', + 'PG_LOGICAL_EMIT_MESSAGE', + // Database Object Management Functions + 'PG_COLUMN_SIZE', + 'PG_COLUMN_COMPRESSION', + 'PG_DATABASE_SIZE', + 'PG_INDEXES_SIZE', + 'PG_RELATION_SIZE', + 'PG_SIZE_BYTES', + 'PG_SIZE_PRETTY', + 'PG_TABLE_SIZE', + 'PG_TABLESPACE_SIZE', + 'PG_TOTAL_RELATION_SIZE', + // Database Object Location Functions + 'PG_RELATION_FILENODE', + 'PG_RELATION_FILEPATH', + 'PG_FILENODE_RELATION', + // Collation Management Functions + 'PG_COLLATION_ACTUAL_VERSION', + 'PG_DATABASE_COLLATION_ACTUAL_VERSION', + 'PG_IMPORT_SYSTEM_COLLATIONS', + // Partitioning Information Functions + 'PG_PARTITION_TREE', + 'PG_PARTITION_ANCESTORS', + 'PG_PARTITION_ROOT', + // Index Maintenance Functions + 'BRIN_SUMMARIZE_NEW_VALUES', + 'BRIN_SUMMARIZE_RANGE', + 'BRIN_DESUMMARIZE_RANGE', + 'GIN_CLEAN_PENDING_LIST', + // Generic File Access Functions + 'PG_LS_DIR', + 'PG_LS_LOGDIR', + 'PG_LS_WALDIR', + 'PG_LS_LOGICALSNAPDIR', + 'PG_LS_REPLSLOTDIR', + 'PG_LS_ARCHIVE_STATUSDIR', + 'PG_LS_TMPDIR', + 'PG_READ_FILE', + 'PG_READ_BINARY_FILE', + 'PG_STAT_FILE', + // Advisory Lock Functions + 'PG_ADVISORY_LOCK', + 'PG_ADVISORY_LOCK_SHARED', + 'PG_ADVISORY_UNLOCK', + 'PG_ADVISORY_UNLOCK_SHARED', + 'PG_ADVISORY_UNLOCK_ALL', + 'PG_ADVISORY_XACT_LOCK', + 'PG_ADVISORY_XACT_LOCK_SHARED', + 'PG_TRY_ADVISORY_LOCK', + 'PG_TRY_ADVISORY_LOCK_SHARED', + 'PG_TRY_ADVISORY_XACT_LOCK', + 'PG_TRY_ADVISORY_XACT_LOCK_SHARED', + // Trigger Functions:https://www.postgresql.org/docs/16/functions-trigger.html + 'SUPPRESS_REDUNDANT_UPDATES_TRIGGER', + 'TSVECTOR_UPDATE_TRIGGER', + 'TSVECTOR_UPDATE_TRIGGER_COLUMN', + // Event Trigger Functions:https://www.postgresql.org/docs/16/functions-event-triggers.html + 'PG_EVENT_TRIGGER_DDL_COMMANDS', + 'PG_EVENT_TRIGGER_DROPPED_OBJECTS', + 'PG_EVENT_TRIGGER_TABLE_REWRITE_OID', + 'PG_EVENT_TRIGGER_TABLE_REWRITE_REASON', + // Statistics Information Functions:https://www.postgresql.org/docs/16/functions-statistics.html + 'PG_MCV_LIST_ITEMS' ], builtinVariables: [ // NOT SUPPORTED ], + typeKeywords: [ + // monaco-sql-language 自定义属性 + // https://www.postgresql.org/docs/16/datatype.html + 'SMALLINT', + 'INTEGER', + 'BIGINT', + 'DECIMAL', + 'NUMERIC', + 'REAL', + 'DOUBLE', + 'PRECISION', + 'SMALLSERIAL', + 'SERIAL', + 'BIGSERIAL', + 'CHARACTER', + 'VARYING', + 'VARCHAR', + 'CHARACTER', + 'CAHR', + 'BPCHAR', + 'TEXT', + 'TIMESTAMP', + 'DATE', + 'INTERVAL', + 'TIME', + 'BOOLEAN', + 'ENUM', + 'NONE', + 'INT4RANGE', + 'INT8RANGE', + 'NUMRANGE', + 'TSRANGE', + 'TSTZRANGE', + 'DATERANGE', + 'ANY', + 'INTERNAL', + 'UNKNOWN' + ], tokenizer: { root: [ { include: '@comments' }, @@ -1118,7 +1332,7 @@ export const language = { { include: '@strings' }, { include: '@complexIdentifiers' }, { include: '@scopes' }, - [/[;,.]/, 'delimiter'], + [/[,,.]/, 'delimiter'], [/[()]/, '@brackets'], [ /[\w@]+/, From 1a38cf499a11d0f5ede89ad838a02cb6364cdf8d Mon Sep 17 00:00:00 2001 From: zhaoge <> Date: Tue, 5 Dec 2023 09:48:43 +0800 Subject: [PATCH 2/6] feat(pgsql): update language config --- src/pgsql/PgSQLWorker.ts | 5 ++- src/pgsql/pgsql.contribution.ts | 4 +- src/pgsql/pgsql.ts | 74 ++++++++++++++++++--------------- src/pgsql/pgsql.worker.ts | 3 +- website/src/languages/index.ts | 5 +++ 5 files changed, 52 insertions(+), 39 deletions(-) diff --git a/src/pgsql/PgSQLWorker.ts b/src/pgsql/PgSQLWorker.ts index 36509bb8..cecb9151 100644 --- a/src/pgsql/PgSQLWorker.ts +++ b/src/pgsql/PgSQLWorker.ts @@ -1,8 +1,9 @@ import { worker } from '../fillers/monaco-editor-core'; import PgSQL from 'dt-sql-parser/dist/parser/pgsql'; -import { ICreateData } from '../_.contribution'; import { BaseSQLWorker } from '../baseSQLWorker'; - +export interface ICreateData { + languageId: string; +} export class PgSQLWorker extends BaseSQLWorker { protected _ctx: worker.IWorkerContext; protected parser: PgSQL; diff --git a/src/pgsql/pgsql.contribution.ts b/src/pgsql/pgsql.contribution.ts index 5d371973..3566dc50 100644 --- a/src/pgsql/pgsql.contribution.ts +++ b/src/pgsql/pgsql.contribution.ts @@ -9,7 +9,7 @@ import { LanguageIdEnum } from '../common/constants'; registerLanguage({ id: LanguageIdEnum.PG, - extensions: [], + extensions: ['.pgsql'], aliases: ['PgSQL', 'postgresql', 'PostgreSQL'], loader: () => import('./pgsql') }); @@ -18,6 +18,6 @@ loadLanguage(LanguageIdEnum.PG); setupLanguageFeatures({ languageId: LanguageIdEnum.PG, - completionItems: false, + completionItems: true, diagnostics: true }); diff --git a/src/pgsql/pgsql.ts b/src/pgsql/pgsql.ts index 59d8c8f5..343eeeb8 100644 --- a/src/pgsql/pgsql.ts +++ b/src/pgsql/pgsql.ts @@ -14,6 +14,7 @@ export const conf: languages.LanguageConfiguration = { brackets: [ ['{', '}'], ['[', ']'], + ['(', ')'] ], autoClosingPairs: [ @@ -32,8 +33,8 @@ export const conf: languages.LanguageConfiguration = { ], folding: { markers: { - start: /(BEGIN\b)/i, - end: /(END\b) | (COMMIT\b)/i + start: /(BEGIN\b) | (START TRANSACTION\b)/i, + end: /(ROLLBACK\b) | (COMMIT\b) | (END\b)/i } } }; @@ -1324,68 +1325,75 @@ export const language = { 'INTERNAL', 'UNKNOWN' ], + scopeKeywords: ['COMMIT', 'END', 'ROLLBACK', 'THEN', 'ELSE'], + pseudoColumns: [ + // Not support + ], tokenizer: { root: [ { include: '@comments' }, { include: '@whitespace' }, + // { include: '@pseudoColumns' }, { include: '@numbers' }, { include: '@strings' }, { include: '@complexIdentifiers' }, { include: '@scopes' }, - [/[,,.]/, 'delimiter'], - [/[()]/, '@brackets'], + [/[;,.]/, TokenClassConsts.DELIMITER], + [/[\(\)\[\]]/, '@brackets'], [ /[\w@]+/, { cases: { - '@keywords': 'keyword', - '@operators': 'operator', - '@builtinVariables': 'predefined', - '@builtinFunctions': 'predefined', - '@default': 'identifier' + '@scopeKeywords': TokenClassConsts.KEYWORD_SCOPE, + '@operators': TokenClassConsts.OPERATOR_KEYWORD, + '@typeKeywords': TokenClassConsts.TYPE, + '@builtinVariables': TokenClassConsts.VARIABLE, + '@builtinFunctions': TokenClassConsts.PREDEFINED, + '@keywords': TokenClassConsts.KEYWORD, + '@default': TokenClassConsts.IDENTIFIER } } ], - [/[<>=!%&+\-*/|~^]/, 'operator'] + [/[<>=!%&+\-*/|~^]/, TokenClassConsts.OPERATOR_SYMBOL] ], - whitespace: [[/\s+/, 'white']], + whitespace: [[/\s+/, TokenClassConsts.WHITE]], comments: [ - [/--+.*/, 'comment'], - [/#+.*/, 'comment'], - [/\/\*/, { token: 'comment.quote', next: '@comment' }] + [/--+.*/, TokenClassConsts.COMMENT], + [/\/\*/, { token: TokenClassConsts.COMMENT_QUOTE, next: '@comment' }] ], comment: [ - [/[^*/]+/, 'comment'], + [/[^*/]+/, TokenClassConsts.COMMENT], // Not supporting nested comments, as nested comments seem to not be standard? - // i.e. http://stackoverflow.com/questions/728172/are-there-multiline-comment-delimiters-in-sql-that-are-vendor-agnostic // [/\/\*/, { token: 'comment.quote', next: '@push' }], // nested comment not allowed :-( - [/\*\//, { token: 'comment.quote', next: '@pop' }], - [/./, 'comment'] + [/\*\//, { token: TokenClassConsts.COMMENT_QUOTE, next: '@pop' }], + [/./, TokenClassConsts.COMMENT] ], numbers: [ - [/0[xX][0-9a-fA-F]*/, 'number'], - [/[$][+-]*\d*(\.\d*)?/, 'number'], - [/((\d+(\.\d*)?)|(\.\d+))([eE][\-+]?\d+)?/, 'number'] + [/0[xX][0-9a-fA-F]*/, TokenClassConsts.NUMBER_HEX], + [/[$][+-]*\d*(\.\d*)?/, TokenClassConsts.NUMBER], + [/((\d+(\.\d*)?)|(\.\d+))([eE][\-+]?\d+)?/, TokenClassConsts.NUMBER] ], strings: [ - [/'/, { token: 'string', next: '@string' }], - [/"/, { token: 'string.double', next: '@stringDouble' }] + [/'/, { token: TokenClassConsts.STRING, next: '@string' }], + [/"/, { token: TokenClassConsts.STRING, next: '@stringDouble' }] ], string: [ - [/[^']+/, 'string'], - [/''/, 'string'], - [/'/, { token: 'string', next: '@pop' }] + [/[^']+/, TokenClassConsts.STRING_ESCAPE], + [/''/, TokenClassConsts.STRING], + [/'/, { token: TokenClassConsts.STRING, next: '@pop' }] ], stringDouble: [ - [/[^"]+/, 'string.double'], - [/""/, 'string.double'], - [/"/, { token: 'string.double', next: '@pop' }] + [/[^"]+/, TokenClassConsts.STRING_ESCAPE], + [/""/, TokenClassConsts.STRING], + [/"/, { token: TokenClassConsts.STRING, next: '@pop' }] + ], + complexIdentifiers: [ + [/`/, { token: TokenClassConsts.IDENTIFIER_QUOTE, next: '@quotedIdentifier' }] ], - complexIdentifiers: [[/`/, { token: 'identifier.quote', next: '@quotedIdentifier' }]], quotedIdentifier: [ - [/[^`]+/, 'identifier'], - [/``/, 'identifier'], - [/`/, { token: 'identifier.quote', next: '@pop' }] + [/[^`]+/, TokenClassConsts.IDENTIFIER_QUOTE], + [/``/, TokenClassConsts.IDENTIFIER_QUOTE], + [/`/, { token: TokenClassConsts.IDENTIFIER_QUOTE, next: '@pop' }] ], scopes: [ // NOT SUPPORTED diff --git a/src/pgsql/pgsql.worker.ts b/src/pgsql/pgsql.worker.ts index 5d99d2a5..fb4aada3 100644 --- a/src/pgsql/pgsql.worker.ts +++ b/src/pgsql/pgsql.worker.ts @@ -1,7 +1,6 @@ import { worker } from '../fillers/monaco-editor-core'; import * as EditorWorker from 'monaco-editor/esm/vs/editor/editor.worker.js'; -import { ICreateData } from '../_.contribution'; -import { PgSQLWorker } from './PgSQLWorker'; +import { PgSQLWorker, ICreateData } from './PgSQLWorker'; self.onmessage = (e: any) => { EditorWorker.initialize((ctx: worker.IWorkerContext, createData: ICreateData) => { diff --git a/website/src/languages/index.ts b/website/src/languages/index.ts index f7ef37d5..3642f999 100644 --- a/website/src/languages/index.ts +++ b/website/src/languages/index.ts @@ -24,3 +24,8 @@ setupLanguageFeatures({ languageId: LanguageIdEnum.TRINO, completionService }); + +setupLanguageFeatures({ + languageId: LanguageIdEnum.PG, + completionService +}); From a0a73693bd2d28c5bd17be1f1e48098ac06fe943 Mon Sep 17 00:00:00 2001 From: zhaoge <> Date: Wed, 6 Dec 2023 12:02:53 +0800 Subject: [PATCH 3/6] feat(pgsql): update config of pgsql --- src/pgsql/pgsql.ts | 19 ++++++++++++++----- 1 file changed, 14 insertions(+), 5 deletions(-) diff --git a/src/pgsql/pgsql.ts b/src/pgsql/pgsql.ts index 343eeeb8..71b34845 100644 --- a/src/pgsql/pgsql.ts +++ b/src/pgsql/pgsql.ts @@ -33,8 +33,8 @@ export const conf: languages.LanguageConfiguration = { ], folding: { markers: { - start: /(BEGIN\b) | (START TRANSACTION\b)/i, - end: /(ROLLBACK\b) | (COMMIT\b) | (END\b)/i + start: /((EXECUTE\s+)?BEGIN\s+STATEMENT\b)|((EXECUTE\s+)?STATEMENT\s+BEGIN\b)/i, + end: /(ROLLBACK\b)|(COMMIT\b)|(DEALLOCATE\b)|(END\b)/i } } }; @@ -1333,15 +1333,16 @@ export const language = { root: [ { include: '@comments' }, { include: '@whitespace' }, - // { include: '@pseudoColumns' }, + { include: '@pseudoColumns' }, { include: '@numbers' }, { include: '@strings' }, { include: '@complexIdentifiers' }, { include: '@scopes' }, + { include: '@complexDataTypes' }, [/[;,.]/, TokenClassConsts.DELIMITER], [/[\(\)\[\]]/, '@brackets'], [ - /[\w@]+/, + /[\w@#$]+/, { cases: { '@scopeKeywords': TokenClassConsts.KEYWORD_SCOPE, @@ -1368,6 +1369,9 @@ export const language = { [/\*\//, { token: TokenClassConsts.COMMENT_QUOTE, next: '@pop' }], [/./, TokenClassConsts.COMMENT] ], + pseudoColumns: [ + // Not support + ], numbers: [ [/0[xX][0-9a-fA-F]*/, TokenClassConsts.NUMBER_HEX], [/[$][+-]*\d*(\.\d*)?/, TokenClassConsts.NUMBER], @@ -1396,7 +1400,12 @@ export const language = { [/`/, { token: TokenClassConsts.IDENTIFIER_QUOTE, next: '@pop' }] ], scopes: [ - // NOT SUPPORTED + [/(EXECUTE\s+)?BEGIN\s+STATEMENT/i, TokenClassConsts.KEYWORD_SCOPE], + [/(EXECUTE\s+)?STATEMENT\s+BEGIN/i, TokenClassConsts.KEYWORD_SCOPE] + ], + complexDataTypes: [ + [/DOUBLE\s+PRECISION\b/i, { token: TokenClassConsts.TYPE }], + [/REFERENCES\b/i, { token: TokenClassConsts.TYPE }] ] } }; From 803862718f4c4e210db5def7f14d4bd1c2c0a643 Mon Sep 17 00:00:00 2001 From: zhaoge <> Date: Wed, 6 Dec 2023 17:11:21 +0800 Subject: [PATCH 4/6] feat(pgsql): update config and complete unit test --- src/pgsql/pgsql.test.ts | 370 +++++++++++++++++++++------------------- src/pgsql/pgsql.ts | 15 +- 2 files changed, 193 insertions(+), 192 deletions(-) diff --git a/src/pgsql/pgsql.test.ts b/src/pgsql/pgsql.test.ts index 3d823086..518f6960 100644 --- a/src/pgsql/pgsql.test.ts +++ b/src/pgsql/pgsql.test.ts @@ -4,20 +4,21 @@ *--------------------------------------------------------------------------------------------*/ import { testTokenization } from '../test/testRunner'; +import { TokenClassConsts, postfixTokenClass } from '../common/constants'; testTokenization('pgsql', [ // Comments [ { line: '-- a comment', - tokens: [{ startIndex: 0, type: 'comment.sql' }] + tokens: [{ startIndex: 0, type: postfixTokenClass(TokenClassConsts.COMMENT) }] } ], [ { line: '---sticky -- comment', - tokens: [{ startIndex: 0, type: 'comment.sql' }] + tokens: [{ startIndex: 0, type: postfixTokenClass(TokenClassConsts.COMMENT) }] } ], @@ -25,12 +26,12 @@ testTokenization('pgsql', [ { line: '-almost a comment', tokens: [ - { startIndex: 0, type: 'operator.sql' }, - { startIndex: 1, type: 'identifier.sql' }, - { startIndex: 7, type: 'white.sql' }, - { startIndex: 8, type: 'identifier.sql' }, - { startIndex: 9, type: 'white.sql' }, - { startIndex: 10, type: 'keyword.sql' } + { startIndex: 0, type: postfixTokenClass(TokenClassConsts.OPERATOR_SYMBOL) }, + { startIndex: 1, type: postfixTokenClass(TokenClassConsts.IDENTIFIER) }, + { startIndex: 7, type: postfixTokenClass(TokenClassConsts.WHITE) }, + { startIndex: 8, type: postfixTokenClass(TokenClassConsts.IDENTIFIER) }, + { startIndex: 9, type: postfixTokenClass(TokenClassConsts.WHITE) }, + { startIndex: 10, type: postfixTokenClass(TokenClassConsts.KEYWORD) } ] } ], @@ -39,9 +40,9 @@ testTokenization('pgsql', [ { line: '/* a full line comment */', tokens: [ - { startIndex: 0, type: 'comment.quote.sql' }, - { startIndex: 2, type: 'comment.sql' }, - { startIndex: 23, type: 'comment.quote.sql' } + { startIndex: 0, type: postfixTokenClass(TokenClassConsts.COMMENT_QUOTE) }, + { startIndex: 2, type: postfixTokenClass(TokenClassConsts.COMMENT) }, + { startIndex: 23, type: postfixTokenClass(TokenClassConsts.COMMENT_QUOTE) } ] } ], @@ -50,38 +51,31 @@ testTokenization('pgsql', [ { line: '/* /// *** /// */', tokens: [ - { startIndex: 0, type: 'comment.quote.sql' }, - { startIndex: 2, type: 'comment.sql' }, - { startIndex: 15, type: 'comment.quote.sql' } + { startIndex: 0, type: postfixTokenClass(TokenClassConsts.COMMENT_QUOTE) }, + { startIndex: 2, type: postfixTokenClass(TokenClassConsts.COMMENT) }, + { startIndex: 15, type: postfixTokenClass(TokenClassConsts.COMMENT_QUOTE) } ] } ], - [ - { - line: '# comment', - tokens: [{ startIndex: 0, type: 'comment.sql' }] - } - ], - [ { line: 'declare @x int = /* a simple comment */ 1;', tokens: [ - { startIndex: 0, type: 'keyword.sql' }, - { startIndex: 7, type: 'white.sql' }, - { startIndex: 8, type: 'identifier.sql' }, - { startIndex: 10, type: 'white.sql' }, - { startIndex: 11, type: 'keyword.sql' }, - { startIndex: 14, type: 'white.sql' }, - { startIndex: 15, type: 'operator.sql' }, - { startIndex: 16, type: 'white.sql' }, - { startIndex: 17, type: 'comment.quote.sql' }, - { startIndex: 19, type: 'comment.sql' }, - { startIndex: 37, type: 'comment.quote.sql' }, - { startIndex: 39, type: 'white.sql' }, - { startIndex: 40, type: 'number.sql' }, - { startIndex: 41, type: 'delimiter.sql' } + { startIndex: 0, type: postfixTokenClass(TokenClassConsts.KEYWORD_SCOPE) }, + { startIndex: 7, type: postfixTokenClass(TokenClassConsts.WHITE) }, + { startIndex: 8, type: postfixTokenClass(TokenClassConsts.IDENTIFIER) }, + { startIndex: 10, type: postfixTokenClass(TokenClassConsts.WHITE) }, + { startIndex: 11, type: postfixTokenClass(TokenClassConsts.KEYWORD) }, + { startIndex: 14, type: postfixTokenClass(TokenClassConsts.WHITE) }, + { startIndex: 15, type: postfixTokenClass(TokenClassConsts.OPERATOR_SYMBOL) }, + { startIndex: 16, type: postfixTokenClass(TokenClassConsts.WHITE) }, + { startIndex: 17, type: postfixTokenClass(TokenClassConsts.COMMENT_QUOTE) }, + { startIndex: 19, type: postfixTokenClass(TokenClassConsts.COMMENT) }, + { startIndex: 37, type: postfixTokenClass(TokenClassConsts.COMMENT_QUOTE) }, + { startIndex: 39, type: postfixTokenClass(TokenClassConsts.WHITE) }, + { startIndex: 40, type: postfixTokenClass(TokenClassConsts.NUMBER) }, + { startIndex: 41, type: postfixTokenClass(TokenClassConsts.DELIMITER) } ] } ], @@ -92,12 +86,12 @@ testTokenization('pgsql', [ { line: '@x=/* a /* nested comment 1*/;', tokens: [ - { startIndex: 0, type: 'identifier.sql' }, - { startIndex: 2, type: 'operator.sql' }, - { startIndex: 3, type: 'comment.quote.sql' }, - { startIndex: 5, type: 'comment.sql' }, - { startIndex: 28, type: 'comment.quote.sql' }, - { startIndex: 30, type: 'delimiter.sql' } + { startIndex: 0, type: postfixTokenClass(TokenClassConsts.IDENTIFIER) }, + { startIndex: 2, type: postfixTokenClass(TokenClassConsts.OPERATOR_SYMBOL) }, + { startIndex: 3, type: postfixTokenClass(TokenClassConsts.COMMENT_QUOTE) }, + { startIndex: 5, type: postfixTokenClass(TokenClassConsts.COMMENT) }, + { startIndex: 28, type: postfixTokenClass(TokenClassConsts.COMMENT_QUOTE) }, + { startIndex: 30, type: postfixTokenClass(TokenClassConsts.DELIMITER) } ] } ], @@ -106,15 +100,15 @@ testTokenization('pgsql', [ { line: '@x=/* another comment */ 1*/;', tokens: [ - { startIndex: 0, type: 'identifier.sql' }, - { startIndex: 2, type: 'operator.sql' }, - { startIndex: 3, type: 'comment.quote.sql' }, - { startIndex: 5, type: 'comment.sql' }, - { startIndex: 22, type: 'comment.quote.sql' }, - { startIndex: 24, type: 'white.sql' }, - { startIndex: 25, type: 'number.sql' }, - { startIndex: 26, type: 'operator.sql' }, - { startIndex: 28, type: 'delimiter.sql' } + { startIndex: 0, type: postfixTokenClass(TokenClassConsts.IDENTIFIER) }, + { startIndex: 2, type: postfixTokenClass(TokenClassConsts.OPERATOR_SYMBOL) }, + { startIndex: 3, type: postfixTokenClass(TokenClassConsts.COMMENT_QUOTE) }, + { startIndex: 5, type: postfixTokenClass(TokenClassConsts.COMMENT) }, + { startIndex: 22, type: postfixTokenClass(TokenClassConsts.COMMENT_QUOTE) }, + { startIndex: 24, type: postfixTokenClass(TokenClassConsts.WHITE) }, + { startIndex: 25, type: postfixTokenClass(TokenClassConsts.NUMBER) }, + { startIndex: 26, type: postfixTokenClass(TokenClassConsts.OPERATOR_SYMBOL) }, + { startIndex: 28, type: postfixTokenClass(TokenClassConsts.DELIMITER) } ] } ], @@ -123,10 +117,10 @@ testTokenization('pgsql', [ { line: '@x=/*/;', tokens: [ - { startIndex: 0, type: 'identifier.sql' }, - { startIndex: 2, type: 'operator.sql' }, - { startIndex: 3, type: 'comment.quote.sql' }, - { startIndex: 5, type: 'comment.sql' } + { startIndex: 0, type: postfixTokenClass(TokenClassConsts.IDENTIFIER) }, + { startIndex: 2, type: postfixTokenClass(TokenClassConsts.OPERATOR_SYMBOL) }, + { startIndex: 3, type: postfixTokenClass(TokenClassConsts.COMMENT_QUOTE) }, + { startIndex: 5, type: postfixTokenClass(TokenClassConsts.COMMENT) } ] } ], @@ -135,7 +129,7 @@ testTokenization('pgsql', [ [ { line: '123', - tokens: [{ startIndex: 0, type: 'number.sql' }] + tokens: [{ startIndex: 0, type: postfixTokenClass(TokenClassConsts.NUMBER) }] } ], @@ -143,8 +137,8 @@ testTokenization('pgsql', [ { line: '-123', tokens: [ - { startIndex: 0, type: 'operator.sql' }, - { startIndex: 1, type: 'number.sql' } + { startIndex: 0, type: postfixTokenClass(TokenClassConsts.OPERATOR_SYMBOL) }, + { startIndex: 1, type: postfixTokenClass(TokenClassConsts.NUMBER) } ] } ], @@ -152,28 +146,28 @@ testTokenization('pgsql', [ [ { line: '0xaBc123', - tokens: [{ startIndex: 0, type: 'number.sql' }] + tokens: [{ startIndex: 0, type: postfixTokenClass(TokenClassConsts.NUMBER_HEX) }] } ], [ { line: '0XaBc123', - tokens: [{ startIndex: 0, type: 'number.sql' }] + tokens: [{ startIndex: 0, type: postfixTokenClass(TokenClassConsts.NUMBER_HEX) }] } ], [ { line: '0x', - tokens: [{ startIndex: 0, type: 'number.sql' }] + tokens: [{ startIndex: 0, type: postfixTokenClass(TokenClassConsts.NUMBER_HEX) }] } ], [ { line: '0x0', - tokens: [{ startIndex: 0, type: 'number.sql' }] + tokens: [{ startIndex: 0, type: postfixTokenClass(TokenClassConsts.NUMBER_HEX) }] } ], @@ -181,8 +175,8 @@ testTokenization('pgsql', [ { line: '0xAB_CD', tokens: [ - { startIndex: 0, type: 'number.sql' }, - { startIndex: 4, type: 'identifier.sql' } + { startIndex: 0, type: postfixTokenClass(TokenClassConsts.NUMBER_HEX) }, + { startIndex: 4, type: postfixTokenClass(TokenClassConsts.IDENTIFIER) } ] } ], @@ -190,161 +184,161 @@ testTokenization('pgsql', [ [ { line: '$', - tokens: [{ startIndex: 0, type: 'number.sql' }] + tokens: [{ startIndex: 0, type: postfixTokenClass(TokenClassConsts.NUMBER) }] } ], [ { line: '$-123', - tokens: [{ startIndex: 0, type: 'number.sql' }] + tokens: [{ startIndex: 0, type: postfixTokenClass(TokenClassConsts.NUMBER) }] } ], [ { line: '$-+-123', - tokens: [{ startIndex: 0, type: 'number.sql' }] + tokens: [{ startIndex: 0, type: postfixTokenClass(TokenClassConsts.NUMBER) }] } ], [ { line: '$123.5678', - tokens: [{ startIndex: 0, type: 'number.sql' }] + tokens: [{ startIndex: 0, type: postfixTokenClass(TokenClassConsts.NUMBER) }] } ], [ { line: '$0.99', - tokens: [{ startIndex: 0, type: 'number.sql' }] + tokens: [{ startIndex: 0, type: postfixTokenClass(TokenClassConsts.NUMBER) }] } ], [ { line: '$.99', - tokens: [{ startIndex: 0, type: 'number.sql' }] + tokens: [{ startIndex: 0, type: postfixTokenClass(TokenClassConsts.NUMBER) }] } ], [ { line: '$99.', - tokens: [{ startIndex: 0, type: 'number.sql' }] + tokens: [{ startIndex: 0, type: postfixTokenClass(TokenClassConsts.NUMBER) }] } ], [ { line: '$0.', - tokens: [{ startIndex: 0, type: 'number.sql' }] + tokens: [{ startIndex: 0, type: postfixTokenClass(TokenClassConsts.NUMBER) }] } ], [ { line: '$.0', - tokens: [{ startIndex: 0, type: 'number.sql' }] + tokens: [{ startIndex: 0, type: postfixTokenClass(TokenClassConsts.NUMBER) }] } ], [ { line: '.', - tokens: [{ startIndex: 0, type: 'delimiter.sql' }] + tokens: [{ startIndex: 0, type: postfixTokenClass(TokenClassConsts.DELIMITER) }] } ], [ { line: '123', - tokens: [{ startIndex: 0, type: 'number.sql' }] + tokens: [{ startIndex: 0, type: postfixTokenClass(TokenClassConsts.NUMBER) }] } ], [ { line: '123.5678', - tokens: [{ startIndex: 0, type: 'number.sql' }] + tokens: [{ startIndex: 0, type: postfixTokenClass(TokenClassConsts.NUMBER) }] } ], [ { line: '0.99', - tokens: [{ startIndex: 0, type: 'number.sql' }] + tokens: [{ startIndex: 0, type: postfixTokenClass(TokenClassConsts.NUMBER) }] } ], [ { line: '.99', - tokens: [{ startIndex: 0, type: 'number.sql' }] + tokens: [{ startIndex: 0, type: postfixTokenClass(TokenClassConsts.NUMBER) }] } ], [ { line: '99.', - tokens: [{ startIndex: 0, type: 'number.sql' }] + tokens: [{ startIndex: 0, type: postfixTokenClass(TokenClassConsts.NUMBER) }] } ], [ { line: '0.', - tokens: [{ startIndex: 0, type: 'number.sql' }] + tokens: [{ startIndex: 0, type: postfixTokenClass(TokenClassConsts.NUMBER) }] } ], [ { line: '.0', - tokens: [{ startIndex: 0, type: 'number.sql' }] + tokens: [{ startIndex: 0, type: postfixTokenClass(TokenClassConsts.NUMBER) }] } ], [ { line: '1E-2', - tokens: [{ startIndex: 0, type: 'number.sql' }] + tokens: [{ startIndex: 0, type: postfixTokenClass(TokenClassConsts.NUMBER) }] } ], [ { line: '1E+2', - tokens: [{ startIndex: 0, type: 'number.sql' }] + tokens: [{ startIndex: 0, type: postfixTokenClass(TokenClassConsts.NUMBER) }] } ], [ { line: '1E2', - tokens: [{ startIndex: 0, type: 'number.sql' }] + tokens: [{ startIndex: 0, type: postfixTokenClass(TokenClassConsts.NUMBER) }] } ], [ { line: '0.1E2', - tokens: [{ startIndex: 0, type: 'number.sql' }] + tokens: [{ startIndex: 0, type: postfixTokenClass(TokenClassConsts.NUMBER) }] } ], [ { line: '1.E2', - tokens: [{ startIndex: 0, type: 'number.sql' }] + tokens: [{ startIndex: 0, type: postfixTokenClass(TokenClassConsts.NUMBER) }] } ], [ { line: '.1E2', - tokens: [{ startIndex: 0, type: 'number.sql' }] + tokens: [{ startIndex: 0, type: postfixTokenClass(TokenClassConsts.NUMBER) }] } ], @@ -354,12 +348,10 @@ testTokenization('pgsql', [ { line: 'declare `abc 321`;', tokens: [ - { startIndex: 0, type: 'keyword.sql' }, - { startIndex: 7, type: 'white.sql' }, - { startIndex: 8, type: 'identifier.quote.sql' }, - { startIndex: 9, type: 'identifier.sql' }, - { startIndex: 16, type: 'identifier.quote.sql' }, - { startIndex: 17, type: 'delimiter.sql' } + { startIndex: 0, type: postfixTokenClass(TokenClassConsts.KEYWORD_SCOPE) }, + { startIndex: 7, type: postfixTokenClass(TokenClassConsts.WHITE) }, + { startIndex: 8, type: postfixTokenClass(TokenClassConsts.IDENTIFIER_QUOTE) }, + { startIndex: 17, type: postfixTokenClass(TokenClassConsts.DELIMITER) } ] } ], @@ -367,21 +359,14 @@ testTokenization('pgsql', [ [ { line: '`abc`` 321 `` xyz`', - tokens: [ - { startIndex: 0, type: 'identifier.quote.sql' }, - { startIndex: 1, type: 'identifier.sql' }, - { startIndex: 17, type: 'identifier.quote.sql' } - ] + tokens: [{ startIndex: 0, type: postfixTokenClass(TokenClassConsts.IDENTIFIER_QUOTE) }] } ], [ { line: '`abc', - tokens: [ - { startIndex: 0, type: 'identifier.quote.sql' }, - { startIndex: 1, type: 'identifier.sql' } - ] + tokens: [{ startIndex: 0, type: postfixTokenClass(TokenClassConsts.IDENTIFIER_QUOTE) }] } ], @@ -389,12 +374,10 @@ testTokenization('pgsql', [ { line: 'declare `abc 321`;', tokens: [ - { startIndex: 0, type: 'keyword.sql' }, - { startIndex: 7, type: 'white.sql' }, - { startIndex: 8, type: 'identifier.quote.sql' }, - { startIndex: 9, type: 'identifier.sql' }, - { startIndex: 16, type: 'identifier.quote.sql' }, - { startIndex: 17, type: 'delimiter.sql' } + { startIndex: 0, type: postfixTokenClass(TokenClassConsts.KEYWORD_SCOPE) }, + { startIndex: 7, type: postfixTokenClass(TokenClassConsts.WHITE) }, + { startIndex: 8, type: postfixTokenClass(TokenClassConsts.IDENTIFIER_QUOTE) }, + { startIndex: 17, type: postfixTokenClass(TokenClassConsts.DELIMITER) } ] } ], @@ -402,39 +385,28 @@ testTokenization('pgsql', [ [ { line: '`abc`` 321 `` xyz`', - tokens: [ - { startIndex: 0, type: 'identifier.quote.sql' }, - { startIndex: 1, type: 'identifier.sql' }, - { startIndex: 17, type: 'identifier.quote.sql' } - ] + tokens: [{ startIndex: 0, type: postfixTokenClass(TokenClassConsts.IDENTIFIER_QUOTE) }] } ], [ { line: '`abc', - tokens: [ - { startIndex: 0, type: 'identifier.quote.sql' }, - { startIndex: 1, type: 'identifier.sql' } - ] + tokens: [{ startIndex: 0, type: postfixTokenClass(TokenClassConsts.IDENTIFIER_QUOTE) }] } ], [ { line: 'int', - tokens: [{ startIndex: 0, type: 'keyword.sql' }] + tokens: [{ startIndex: 0, type: postfixTokenClass(TokenClassConsts.KEYWORD) }] } ], [ { line: '`int`', - tokens: [ - { startIndex: 0, type: 'identifier.quote.sql' }, - { startIndex: 1, type: 'identifier.sql' }, - { startIndex: 4, type: 'identifier.quote.sql' } - ] + tokens: [{ startIndex: 0, type: postfixTokenClass(TokenClassConsts.IDENTIFIER_QUOTE) }] } ], @@ -443,12 +415,14 @@ testTokenization('pgsql', [ { line: "declare @x='a string';", tokens: [ - { startIndex: 0, type: 'keyword.sql' }, - { startIndex: 7, type: 'white.sql' }, - { startIndex: 8, type: 'identifier.sql' }, - { startIndex: 10, type: 'operator.sql' }, - { startIndex: 11, type: 'string.sql' }, - { startIndex: 21, type: 'delimiter.sql' } + { startIndex: 0, type: postfixTokenClass(TokenClassConsts.KEYWORD_SCOPE) }, + { startIndex: 7, type: postfixTokenClass(TokenClassConsts.WHITE) }, + { startIndex: 8, type: postfixTokenClass(TokenClassConsts.IDENTIFIER) }, + { startIndex: 10, type: postfixTokenClass(TokenClassConsts.OPERATOR_SYMBOL) }, + { startIndex: 11, type: postfixTokenClass(TokenClassConsts.STRING) }, + { startIndex: 12, type: postfixTokenClass(TokenClassConsts.STRING_ESCAPE) }, + { startIndex: 20, type: postfixTokenClass(TokenClassConsts.STRING) }, + { startIndex: 21, type: postfixTokenClass(TokenClassConsts.DELIMITER) } ] } ], @@ -457,12 +431,14 @@ testTokenization('pgsql', [ { line: 'declare @x="a string";', tokens: [ - { startIndex: 0, type: 'keyword.sql' }, - { startIndex: 7, type: 'white.sql' }, - { startIndex: 8, type: 'identifier.sql' }, - { startIndex: 10, type: 'operator.sql' }, - { startIndex: 11, type: 'string.double.sql' }, - { startIndex: 21, type: 'delimiter.sql' } + { startIndex: 0, type: postfixTokenClass(TokenClassConsts.KEYWORD_SCOPE) }, + { startIndex: 7, type: postfixTokenClass(TokenClassConsts.WHITE) }, + { startIndex: 8, type: postfixTokenClass(TokenClassConsts.IDENTIFIER) }, + { startIndex: 10, type: postfixTokenClass(TokenClassConsts.OPERATOR_SYMBOL) }, + { startIndex: 11, type: postfixTokenClass(TokenClassConsts.STRING) }, + { startIndex: 12, type: postfixTokenClass(TokenClassConsts.STRING_ESCAPE) }, + { startIndex: 20, type: postfixTokenClass(TokenClassConsts.STRING) }, + { startIndex: 21, type: postfixTokenClass(TokenClassConsts.DELIMITER) } ] } ], @@ -470,56 +446,90 @@ testTokenization('pgsql', [ [ { line: "'a '' string with quotes'", - tokens: [{ startIndex: 0, type: 'string.sql' }] + tokens: [ + { startIndex: 0, type: postfixTokenClass(TokenClassConsts.STRING) }, + { startIndex: 1, type: postfixTokenClass(TokenClassConsts.STRING_ESCAPE) }, + { startIndex: 3, type: postfixTokenClass(TokenClassConsts.STRING) }, + { startIndex: 5, type: postfixTokenClass(TokenClassConsts.STRING_ESCAPE) }, + { startIndex: 24, type: postfixTokenClass(TokenClassConsts.STRING) } + ] } ], [ { line: '"a "" string with quotes"', - tokens: [{ startIndex: 0, type: 'string.double.sql' }] + tokens: [ + { startIndex: 0, type: postfixTokenClass(TokenClassConsts.STRING) }, + { startIndex: 1, type: postfixTokenClass(TokenClassConsts.STRING_ESCAPE) }, + { startIndex: 3, type: postfixTokenClass(TokenClassConsts.STRING) }, + { startIndex: 5, type: postfixTokenClass(TokenClassConsts.STRING_ESCAPE) }, + { startIndex: 24, type: postfixTokenClass(TokenClassConsts.STRING) } + ] } ], [ { line: "'a \" string with quotes'", - tokens: [{ startIndex: 0, type: 'string.sql' }] + tokens: [ + { startIndex: 0, type: postfixTokenClass(TokenClassConsts.STRING) }, + { startIndex: 1, type: postfixTokenClass(TokenClassConsts.STRING_ESCAPE) }, + { startIndex: 23, type: postfixTokenClass(TokenClassConsts.STRING) } + ] } ], [ { line: '"a ` string with quotes"', - tokens: [{ startIndex: 0, type: 'string.double.sql' }] + tokens: [ + { startIndex: 0, type: postfixTokenClass(TokenClassConsts.STRING) }, + { startIndex: 1, type: postfixTokenClass(TokenClassConsts.STRING_ESCAPE) }, + { startIndex: 23, type: postfixTokenClass(TokenClassConsts.STRING) } + ] } ], [ { line: "'a -- string with comment'", - tokens: [{ startIndex: 0, type: 'string.sql' }] + tokens: [ + { startIndex: 0, type: postfixTokenClass(TokenClassConsts.STRING) }, + { startIndex: 1, type: postfixTokenClass(TokenClassConsts.STRING_ESCAPE) }, + { startIndex: 25, type: postfixTokenClass(TokenClassConsts.STRING) } + ] } ], [ { line: '"a -- string with comment"', - tokens: [{ startIndex: 0, type: 'string.double.sql' }] + tokens: [ + { startIndex: 0, type: postfixTokenClass(TokenClassConsts.STRING) }, + { startIndex: 1, type: postfixTokenClass(TokenClassConsts.STRING_ESCAPE) }, + { startIndex: 25, type: postfixTokenClass(TokenClassConsts.STRING) } + ] } ], [ { line: "'a endless string", - tokens: [{ startIndex: 0, type: 'string.sql' }] + tokens: [ + { startIndex: 0, type: postfixTokenClass(TokenClassConsts.STRING) }, + { startIndex: 1, type: postfixTokenClass(TokenClassConsts.STRING_ESCAPE) } + ] } ], [ { line: '"a endless string', - tokens: [{ startIndex: 0, type: 'string.double.sql' }] + tokens: [ + { startIndex: 0, type: postfixTokenClass(TokenClassConsts.STRING) }, + { startIndex: 1, type: postfixTokenClass(TokenClassConsts.STRING_ESCAPE) } + ] } ], @@ -528,13 +538,13 @@ testTokenization('pgsql', [ { line: 'SET @x=@x+1', tokens: [ - { startIndex: 0, type: 'keyword.sql' }, - { startIndex: 3, type: 'white.sql' }, - { startIndex: 4, type: 'identifier.sql' }, - { startIndex: 6, type: 'operator.sql' }, - { startIndex: 7, type: 'identifier.sql' }, - { startIndex: 9, type: 'operator.sql' }, - { startIndex: 10, type: 'number.sql' } + { startIndex: 0, type: postfixTokenClass(TokenClassConsts.KEYWORD) }, + { startIndex: 3, type: postfixTokenClass(TokenClassConsts.WHITE) }, + { startIndex: 4, type: postfixTokenClass(TokenClassConsts.IDENTIFIER) }, + { startIndex: 6, type: postfixTokenClass(TokenClassConsts.OPERATOR_SYMBOL) }, + { startIndex: 7, type: postfixTokenClass(TokenClassConsts.IDENTIFIER) }, + { startIndex: 9, type: postfixTokenClass(TokenClassConsts.OPERATOR_SYMBOL) }, + { startIndex: 10, type: postfixTokenClass(TokenClassConsts.NUMBER) } ] } ], @@ -543,9 +553,9 @@ testTokenization('pgsql', [ { line: '@x^=@x', tokens: [ - { startIndex: 0, type: 'identifier.sql' }, - { startIndex: 2, type: 'operator.sql' }, - { startIndex: 4, type: 'identifier.sql' } + { startIndex: 0, type: postfixTokenClass(TokenClassConsts.IDENTIFIER) }, + { startIndex: 2, type: postfixTokenClass(TokenClassConsts.OPERATOR_SYMBOL) }, + { startIndex: 4, type: postfixTokenClass(TokenClassConsts.IDENTIFIER) } ] } ], @@ -554,15 +564,15 @@ testTokenization('pgsql', [ { line: 'WHERE myfield IS NOT NULL', tokens: [ - { startIndex: 0, type: 'keyword.sql' }, - { startIndex: 5, type: 'white.sql' }, - { startIndex: 6, type: 'identifier.sql' }, - { startIndex: 13, type: 'white.sql' }, - { startIndex: 14, type: 'operator.sql' }, - { startIndex: 16, type: 'white.sql' }, - { startIndex: 17, type: 'operator.sql' }, - { startIndex: 20, type: 'white.sql' }, - { startIndex: 21, type: 'operator.sql' } + { startIndex: 0, type: postfixTokenClass(TokenClassConsts.KEYWORD) }, + { startIndex: 5, type: postfixTokenClass(TokenClassConsts.WHITE) }, + { startIndex: 6, type: postfixTokenClass(TokenClassConsts.IDENTIFIER) }, + { startIndex: 13, type: postfixTokenClass(TokenClassConsts.WHITE) }, + { startIndex: 14, type: postfixTokenClass(TokenClassConsts.OPERATOR_KEYWORD) }, + { startIndex: 16, type: postfixTokenClass(TokenClassConsts.WHITE) }, + { startIndex: 17, type: postfixTokenClass(TokenClassConsts.OPERATOR_KEYWORD) }, + { startIndex: 20, type: postfixTokenClass(TokenClassConsts.WHITE) }, + { startIndex: 21, type: postfixTokenClass(TokenClassConsts.OPERATOR_KEYWORD) } ] } ], @@ -571,25 +581,25 @@ testTokenization('pgsql', [ { line: 'SELECT * FROM tbl WHERE MyColumn IN (1,2)', tokens: [ - { startIndex: 0, type: 'keyword.sql' }, - { startIndex: 6, type: 'white.sql' }, - { startIndex: 7, type: 'operator.sql' }, - { startIndex: 8, type: 'white.sql' }, - { startIndex: 9, type: 'keyword.sql' }, - { startIndex: 13, type: 'white.sql' }, - { startIndex: 14, type: 'identifier.sql' }, - { startIndex: 17, type: 'white.sql' }, - { startIndex: 18, type: 'keyword.sql' }, - { startIndex: 23, type: 'white.sql' }, - { startIndex: 24, type: 'identifier.sql' }, - { startIndex: 32, type: 'white.sql' }, - { startIndex: 33, type: 'operator.sql' }, - { startIndex: 35, type: 'white.sql' }, - { startIndex: 36, type: 'delimiter.parenthesis.sql' }, - { startIndex: 37, type: 'number.sql' }, - { startIndex: 38, type: 'delimiter.sql' }, - { startIndex: 39, type: 'number.sql' }, - { startIndex: 40, type: 'delimiter.parenthesis.sql' } + { startIndex: 0, type: postfixTokenClass(TokenClassConsts.KEYWORD) }, + { startIndex: 6, type: postfixTokenClass(TokenClassConsts.WHITE) }, + { startIndex: 7, type: postfixTokenClass(TokenClassConsts.OPERATOR_SYMBOL) }, + { startIndex: 8, type: postfixTokenClass(TokenClassConsts.WHITE) }, + { startIndex: 9, type: postfixTokenClass(TokenClassConsts.KEYWORD) }, + { startIndex: 13, type: postfixTokenClass(TokenClassConsts.WHITE) }, + { startIndex: 14, type: postfixTokenClass(TokenClassConsts.IDENTIFIER) }, + { startIndex: 17, type: postfixTokenClass(TokenClassConsts.WHITE) }, + { startIndex: 18, type: postfixTokenClass(TokenClassConsts.KEYWORD) }, + { startIndex: 23, type: postfixTokenClass(TokenClassConsts.WHITE) }, + { startIndex: 24, type: postfixTokenClass(TokenClassConsts.IDENTIFIER) }, + { startIndex: 32, type: postfixTokenClass(TokenClassConsts.WHITE) }, + { startIndex: 33, type: postfixTokenClass(TokenClassConsts.OPERATOR_KEYWORD) }, + { startIndex: 35, type: postfixTokenClass(TokenClassConsts.WHITE) }, + { startIndex: 36, type: postfixTokenClass(TokenClassConsts.DELIMITER_PAREN) }, + { startIndex: 37, type: postfixTokenClass(TokenClassConsts.NUMBER) }, + { startIndex: 38, type: postfixTokenClass(TokenClassConsts.DELIMITER) }, + { startIndex: 39, type: postfixTokenClass(TokenClassConsts.NUMBER) }, + { startIndex: 40, type: postfixTokenClass(TokenClassConsts.DELIMITER_PAREN) } ] } ] diff --git a/src/pgsql/pgsql.ts b/src/pgsql/pgsql.ts index 71b34845..456676e7 100644 --- a/src/pgsql/pgsql.ts +++ b/src/pgsql/pgsql.ts @@ -30,13 +30,7 @@ export const conf: languages.LanguageConfiguration = { { open: '(', close: ')' }, { open: '"', close: '"' }, { open: "'", close: "'" } - ], - folding: { - markers: { - start: /((EXECUTE\s+)?BEGIN\s+STATEMENT\b)|((EXECUTE\s+)?STATEMENT\s+BEGIN\b)/i, - end: /(ROLLBACK\b)|(COMMIT\b)|(DEALLOCATE\b)|(END\b)/i - } - } + ] }; export const language = { @@ -575,7 +569,6 @@ export const language = { 'NOT', // Comparison Predicates: https://www.postgresql.org/docs/16/functions-comparison.html 'BETWEEN', - 'NOT', 'IS', 'ISNULL', 'NOTNULL', @@ -593,7 +586,6 @@ export const language = { // Subquery Expressions: https://www.postgresql.org/docs/16/functions-subquery.html 'EXISTS', 'IN', - 'ANY', 'SOME', 'ALL', 'DISTINCT' @@ -1325,7 +1317,7 @@ export const language = { 'INTERNAL', 'UNKNOWN' ], - scopeKeywords: ['COMMIT', 'END', 'ROLLBACK', 'THEN', 'ELSE'], + scopeKeywords: ['PREPARE', 'END', 'DECLARE', 'CASE', 'WHEN', 'THEN', 'ELSE'], pseudoColumns: [ // Not support ], @@ -1400,8 +1392,7 @@ export const language = { [/`/, { token: TokenClassConsts.IDENTIFIER_QUOTE, next: '@pop' }] ], scopes: [ - [/(EXECUTE\s+)?BEGIN\s+STATEMENT/i, TokenClassConsts.KEYWORD_SCOPE], - [/(EXECUTE\s+)?STATEMENT\s+BEGIN/i, TokenClassConsts.KEYWORD_SCOPE] + // Not support ], complexDataTypes: [ [/DOUBLE\s+PRECISION\b/i, { token: TokenClassConsts.TYPE }], From 9accad64c9dcce9f9fd47ea54c0460edaa58d875 Mon Sep 17 00:00:00 2001 From: zhaoge <> Date: Thu, 7 Dec 2023 13:47:14 +0800 Subject: [PATCH 5/6] feat(pgsql): delete non-reserved keywords and update unit test --- src/pgsql/pgsql.test.ts | 8 +- src/pgsql/pgsql.ts | 467 +++------------------------------------- 2 files changed, 29 insertions(+), 446 deletions(-) diff --git a/src/pgsql/pgsql.test.ts b/src/pgsql/pgsql.test.ts index 518f6960..00376502 100644 --- a/src/pgsql/pgsql.test.ts +++ b/src/pgsql/pgsql.test.ts @@ -31,7 +31,7 @@ testTokenization('pgsql', [ { startIndex: 7, type: postfixTokenClass(TokenClassConsts.WHITE) }, { startIndex: 8, type: postfixTokenClass(TokenClassConsts.IDENTIFIER) }, { startIndex: 9, type: postfixTokenClass(TokenClassConsts.WHITE) }, - { startIndex: 10, type: postfixTokenClass(TokenClassConsts.KEYWORD) } + { startIndex: 10, type: postfixTokenClass(TokenClassConsts.IDENTIFIER) } ] } ], @@ -66,7 +66,7 @@ testTokenization('pgsql', [ { startIndex: 7, type: postfixTokenClass(TokenClassConsts.WHITE) }, { startIndex: 8, type: postfixTokenClass(TokenClassConsts.IDENTIFIER) }, { startIndex: 10, type: postfixTokenClass(TokenClassConsts.WHITE) }, - { startIndex: 11, type: postfixTokenClass(TokenClassConsts.KEYWORD) }, + { startIndex: 11, type: postfixTokenClass(TokenClassConsts.IDENTIFIER) }, { startIndex: 14, type: postfixTokenClass(TokenClassConsts.WHITE) }, { startIndex: 15, type: postfixTokenClass(TokenClassConsts.OPERATOR_SYMBOL) }, { startIndex: 16, type: postfixTokenClass(TokenClassConsts.WHITE) }, @@ -399,7 +399,7 @@ testTokenization('pgsql', [ [ { line: 'int', - tokens: [{ startIndex: 0, type: postfixTokenClass(TokenClassConsts.KEYWORD) }] + tokens: [{ startIndex: 0, type: postfixTokenClass(TokenClassConsts.IDENTIFIER) }] } ], @@ -538,7 +538,7 @@ testTokenization('pgsql', [ { line: 'SET @x=@x+1', tokens: [ - { startIndex: 0, type: postfixTokenClass(TokenClassConsts.KEYWORD) }, + { startIndex: 0, type: postfixTokenClass(TokenClassConsts.IDENTIFIER) }, { startIndex: 3, type: postfixTokenClass(TokenClassConsts.WHITE) }, { startIndex: 4, type: postfixTokenClass(TokenClassConsts.IDENTIFIER) }, { startIndex: 6, type: postfixTokenClass(TokenClassConsts.OPERATOR_SYMBOL) }, diff --git a/src/pgsql/pgsql.ts b/src/pgsql/pgsql.ts index 456676e7..952e8689 100644 --- a/src/pgsql/pgsql.ts +++ b/src/pgsql/pgsql.ts @@ -53,17 +53,23 @@ export const language = { 'AS', 'ASC', 'ASYMMETRIC', + 'AUTHORIZATION', + 'BINARY', 'BOTH', 'CASE', 'CAST', 'CHECK', 'COLLATE', + 'COLLATION', 'COLUMN', + 'CONCURRENTLY', 'CONSTRAINT', 'CREATE', + 'CROSS', 'CURRENT_CATALOG', 'CURRENT_DATE', 'CURRENT_ROLE', + 'CURRENT_SCHEMA', 'CURRENT_TIME', 'CURRENT_TIMESTAMP', 'CURRENT_USER', @@ -73,40 +79,57 @@ export const language = { 'DISTINCT', 'DO', 'ELSE', + 'END', 'EXCEPT', 'FALSE', 'FETCH', 'FOR', 'FOREIGN', + 'FREEZE', 'FROM', + 'FULL', 'GRANT', 'GROUP', 'HAVING', + 'ILIKE', 'IN', 'INITIALLY', + 'INNER', 'INTERSECT', 'INTO', + 'IS', + 'ISNULL', + 'JOIN', 'LATERAL', 'LEADING', + 'LEFT', + 'LIKE', 'LIMIT', 'LOCALTIME', 'LOCALTIMESTAMP', + 'NATURAL', 'NOT', + 'NOTNULL', 'NULL', 'OFFSET', 'ON', 'ONLY', 'OR', 'ORDER', + 'OUTER', + 'OVERLAPS', 'PLACING', 'PRIMARY', 'REFERENCES', 'RETURNING', + 'RIGHT', 'SELECT', 'SESSION_USER', + 'SIMILAR', 'SOME', 'SYMMETRIC', 'TABLE', + 'TABLESAMPLE', 'THEN', 'TO', 'TRAILING', @@ -116,451 +139,11 @@ export const language = { 'USER', 'USING', 'VARIADIC', + 'VERBOSE', 'WHEN', 'WHERE', 'WINDOW', - 'WITH', - 'AUTHORIZATION', - 'BINARY', - 'COLLATION', - 'CONCURRENTLY', - 'CROSS', - 'CURRENT_SCHEMA', - 'FREEZE', - 'FULL', - 'ILIKE', - 'INNER', - 'IS', - 'ISNULL', - 'JOIN', - 'LEFT', - 'LIKE', - 'NATURAL', - 'NOTNULL', - 'OUTER', - 'OVER', - 'OVERLAPS', - 'RIGHT', - 'SIMILAR', - 'VERBOSE', - 'ABORT', - 'ABSOLUTE', - 'ACCESS', - 'ACTION', - 'ADD', - 'ADMIN', - 'AFTER', - 'AGGREGATE', - 'ALSO', - 'ALTER', - 'ALWAYS', - 'ASSERTION', - 'ASSIGNMENT', - 'AT', - 'ATTRIBUTE', - 'BACKWARD', - 'BEFORE', - 'BEGIN', - 'BY', - 'CACHE', - 'CALLED', - 'CASCADE', - 'CASCADED', - 'CATALOG', - 'CHAIN', - 'CHARACTERISTICS', - 'CHECKPOINT', - 'CLASS', - 'CLOSE', - 'CLUSTER', - 'COMMENT', - 'COMMENTS', - 'COMMIT', - 'COMMITTED', - 'CONFIGURATION', - 'CONNECTION', - 'CONSTRAINTS', - 'CONTENT', - 'CONTINUE', - 'CONVERSION', - 'COPY', - 'COST', - 'CSV', - 'CURSOR', - 'CYCLE', - 'DATA', - 'DATABASE', - 'DAY', - 'DEALLOCATE', - 'DECLARE', - 'DEFAULTS', - 'DEFERRED', - 'DEFINER', - 'DELETE', - 'DELIMITER', - 'DELIMITERS', - 'DICTIONARY', - 'DISABLE', - 'DISCARD', - 'DOCUMENT', - 'DOMAIN', - 'DOUBLE', - 'DROP', - 'EACH', - 'ENABLE', - 'ENCODING', - 'ENCRYPTED', - 'ENUM', - 'ESCAPE', - 'EVENT', - 'EXCLUDE', - 'EXCLUDING', - 'EXCLUSIVE', - 'EXECUTE', - 'EXPLAIN', - 'EXTENSION', - 'EXTERNAL', - 'FAMILY', - 'FIRST', - 'FOLLOWING', - 'FORCE', - 'FORWARD', - 'FUNCTION', - 'FUNCTIONS', - 'GLOBAL', - 'GRANTED', - 'HANDLER', - 'HEADER', - 'HOLD', - 'HOUR', - 'IDENTITY', - 'IF', - 'IMMEDIATE', - 'IMMUTABLE', - 'IMPLICIT', - 'INCLUDING', - 'INCREMENT', - 'INDEX', - 'INDEXES', - 'INHERIT', - 'NOINHERIT', - 'SUPERUSER', - 'NOSUPERUSER', - 'CREATEDB', - 'NOCREATEDB', - 'CREATEROLE', - 'NOCREATEROLE', - 'CREATEUSER', - 'NOCREATEUSER', - 'INHERITS', - 'INLINE', - 'INSENSITIVE', - 'INSERT', - 'INSTEAD', - 'INVOKER', - 'ISOLATION', - 'KEY', - 'LABEL', - 'LANGUAGE', - 'LARGE', - 'LAST', - 'LEAKPROOF', - 'LEVEL', - 'LISTEN', - 'LOAD', - 'LOCAL', - 'LOCATION', - 'LOCK', - 'MAPPING', - 'MATCH', - 'MATERIALIZED', - 'MAXVALUE', - 'MINUTE', - 'MINVALUE', - 'MODE', - 'MONTH', - 'MOVE', - 'NAME', - 'NAMES', - 'NEXT', - 'NO', - 'NOTHING', - 'NOTIFY', - 'NOWAIT', - 'NULLS', - 'OBJECT', - 'OF', - 'OFF', - 'OIDS', - 'OPERATOR', - 'OPTION', - 'OPTIONS', - 'OWNED', - 'OWNER', - 'PARSER', - 'PARTIAL', - 'PARTITION', - 'PASSING', - 'PASSWORD', - 'PLANS', - 'PRECEDING', - 'PREPARE', - 'PREPARED', - 'PRESERVE', - 'PRIOR', - 'PRIVILEGES', - 'PROCEDURAL', - 'PROCEDURE', - 'PROGRAM', - 'QUOTE', - 'RANGE', - 'READ', - 'REASSIGN', - 'RECHECK', - 'RECURSIVE', - 'REF', - 'REFRESH', - 'REINDEX', - 'RELATIVE', - 'RELEASE', - 'RENAME', - 'REPEATABLE', - 'REPLACE', - 'REPLICA', - 'RESET', - 'RESTART', - 'RESTRICT', - 'RETURNS', - 'REVOKE', - 'ROLE', - 'ROLLBACK', - 'ROWS', - 'RULE', - 'SAVEPOINT', - 'SCHEMA', - 'SCROLL', - 'SEARCH', - 'SECOND', - 'SECURITY', - 'SEQUENCE', - 'SEQUENCES', - 'SERIALIZABLE', - 'SERVER', - 'SESSION', - 'SET', - 'SHARE', - 'SHOW', - 'SIMPLE', - 'SNAPSHOT', - 'STABLE', - 'STANDALONE', - 'START', - 'STATEMENT', - 'STATISTICS', - 'STDIN', - 'STDOUT', - 'STORAGE', - 'STRICT', - 'STRIP', - 'SYSID', - 'SYSTEM', - 'TABLES', - 'TABLESPACE', - 'TEMP', - 'TEMPLATE', - 'TEMPORARY', - 'TEXT', - 'TRANSACTION', - 'TRIGGER', - 'TRUNCATE', - 'TRUSTED', - 'TYPE', - 'TYPES', - 'UNBOUNDED', - 'UNCOMMITTED', - 'UNENCRYPTED', - 'UNKNOWN', - 'UNLISTEN', - 'UNLOGGED', - 'UNTIL', - 'UPDATE', - 'VACUUM', - 'VALID', - 'VALIDATE', - 'VALIDATOR', - 'VARYING', - 'VERSION', - 'VIEW', - 'VOLATILE', - 'WHITESPACE', - 'WITHOUT', - 'WORK', - 'WRAPPER', - 'WRITE', - 'XML', - 'YEAR', - 'YES', - 'ZONE', - 'BETWEEN', - 'BIGINT', - 'BIT', - 'BOOLEAN', - 'CHAR', - 'CHARACTER', - 'COALESCE', - 'DEC', - 'DECIMAL', - 'EXISTS', - 'EXTRACT', - 'FLOAT', - 'GREATEST', - 'INOUT', - 'INT', - 'INTEGER', - 'INTERVAL', - 'LEAST', - 'NATIONAL', - 'NCHAR', - 'NONE', - 'NULLIF', - 'NUMERIC', - 'OVERLAY', - 'POSITION', - 'PRECISION', - 'REAL', - 'ROW', - 'SETOF', - 'SMALLINT', - 'SUBSTRING', - 'TIME', - 'TIMESTAMP', - 'TREAT', - 'TRIM', - 'VALUES', - 'VARCHAR', - 'XMLATTRIBUTES', - 'XMLCONCAT', - 'XMLELEMENT', - 'XMLEXISTS', - 'XMLFOREST', - 'XMLPARSE', - 'XMLPI', - 'XMLROOT', - 'XMLSERIALIZE', - 'CALL', - 'CURRENT', - 'ATTACH', - 'DETACH', - 'EXPRESSION', - 'GENERATED', - 'LOGGED', - 'STORED', - 'INCLUDE', - 'ROUTINE', - 'TRANSFORM', - 'IMPORT', - 'POLICY', - 'METHOD', - 'REFERENCING', - 'NEW', - 'OLD', - 'VALUE', - 'SUBSCRIPTION', - 'PUBLICATION', - 'OUT', - 'END', - 'ROUTINES', - 'SCHEMAS', - 'PROCEDURES', - 'INPUT', - 'SUPPORT', - 'PARALLEL', - 'SQL', - 'DEPENDS', - 'OVERRIDING', - 'CONFLICT', - 'SKIP', - 'LOCKED', - 'TIES', - 'ROLLUP', - 'CUBE', - 'GROUPING', - 'SETS', - 'TABLESAMPLE', - 'ORDINALITY', - 'XMLTABLE', - 'COLUMNS', - 'XMLNAMESPACES', - 'ROWTYPE', - 'NORMALIZED', - 'WITHIN', - 'FILTER', - 'GROUPS', - 'OTHERS', - 'NFC', - 'NFD', - 'NFKC', - 'NFKD', - 'UESCAPE', - 'VIEWS', - 'NORMALIZE', - 'DUMP', - 'PRINT_STRICT_PARAMS', - 'VARIABLE_CONFLICT', - 'ERROR', - 'USE_VARIABLE', - 'USE_COLUMN', - 'ALIAS', - 'CONSTANT', - 'PERFORM', - 'GET', - 'DIAGNOSTICS', - 'STACKED', - 'ELSIF', - 'WHILE', - 'REVERSE', - 'FOREACH', - 'SLICE', - 'EXIT', - 'RETURN', - 'QUERY', - 'RAISE', - 'SQLSTATE', - 'DEBUG', - 'LOG', - 'INFO', - 'NOTICE', - 'WARNING', - 'EXCEPTION', - 'ASSERT', - 'LOOP', - 'OPEN', - 'PEFERENCES', - 'USAGE', - 'CONNECT', - 'PUBLIC', - 'MERGE', - 'MATCHED', - 'BREADTH', - 'DEPTH', - 'UNSAFE', - 'RESTRICTED', - 'SAFE', - 'FINALIZE', - 'MODULUS', - 'REMAINDER', - 'LOGIN', - 'NOLOGIN', - 'REPLICATION', - 'NOREPLICATION', - 'BYPASSRLS', - 'NOBYPASSRLS', - 'PERMISSIVE', - 'RESTRICTIVE', - 'COMPRESSION', - 'PLAIN', - 'EXTENDED', - 'MAIN' + 'WITH' ], operators: [ // Logical Operators: https://www.postgresql.org/docs/16/functions-logical.html From 570197b3055efe5588044f1d0d9937dfa589cf7f Mon Sep 17 00:00:00 2001 From: zhaoge <> Date: Fri, 8 Dec 2023 11:47:44 +0800 Subject: [PATCH 6/6] feat(pgsql): update ICreateData's resource --- src/pgsql/PgSQLWorker.ts | 4 +--- src/pgsql/pgsql.worker.ts | 3 ++- 2 files changed, 3 insertions(+), 4 deletions(-) diff --git a/src/pgsql/PgSQLWorker.ts b/src/pgsql/PgSQLWorker.ts index cecb9151..6c5df6d0 100644 --- a/src/pgsql/PgSQLWorker.ts +++ b/src/pgsql/PgSQLWorker.ts @@ -1,9 +1,7 @@ import { worker } from '../fillers/monaco-editor-core'; import PgSQL from 'dt-sql-parser/dist/parser/pgsql'; +import { ICreateData } from '../_.contribution'; import { BaseSQLWorker } from '../baseSQLWorker'; -export interface ICreateData { - languageId: string; -} export class PgSQLWorker extends BaseSQLWorker { protected _ctx: worker.IWorkerContext; protected parser: PgSQL; diff --git a/src/pgsql/pgsql.worker.ts b/src/pgsql/pgsql.worker.ts index fb4aada3..5d99d2a5 100644 --- a/src/pgsql/pgsql.worker.ts +++ b/src/pgsql/pgsql.worker.ts @@ -1,6 +1,7 @@ import { worker } from '../fillers/monaco-editor-core'; import * as EditorWorker from 'monaco-editor/esm/vs/editor/editor.worker.js'; -import { PgSQLWorker, ICreateData } from './PgSQLWorker'; +import { ICreateData } from '../_.contribution'; +import { PgSQLWorker } from './PgSQLWorker'; self.onmessage = (e: any) => { EditorWorker.initialize((ctx: worker.IWorkerContext, createData: ICreateData) => {