959 lines
29 KiB
Python
959 lines
29 KiB
Python
#
|
||
# Copyright (C) 2009-2020 the sqlparse authors and contributors
|
||
# <see AUTHORS file>
|
||
#
|
||
# This module is part of python-sqlparse and is released under
|
||
# the BSD License: https://opensource.org/licenses/BSD-3-Clause
|
||
|
||
import re
|
||
|
||
from sqlparse import tokens
|
||
|
||
|
||
def is_keyword(value):
|
||
val = value.upper()
|
||
return (KEYWORDS_COMMON.get(val)
|
||
or KEYWORDS_ORACLE.get(val)
|
||
or KEYWORDS_PLPGSQL.get(val)
|
||
or KEYWORDS_HQL.get(val)
|
||
or KEYWORDS.get(val, tokens.Name)), value
|
||
|
||
|
||
SQL_REGEX = {
|
||
'root': [
|
||
(r'(--|# )\+.*?(\r\n|\r|\n|$)', tokens.Comment.Single.Hint),
|
||
(r'/\*\+[\s\S]*?\*/', tokens.Comment.Multiline.Hint),
|
||
|
||
(r'(--|# ).*?(\r\n|\r|\n|$)', tokens.Comment.Single),
|
||
(r'/\*[\s\S]*?\*/', tokens.Comment.Multiline),
|
||
|
||
(r'(\r\n|\r|\n)', tokens.Newline),
|
||
(r'\s+?', tokens.Whitespace),
|
||
|
||
(r':=', tokens.Assignment),
|
||
(r'::', tokens.Punctuation),
|
||
|
||
(r'\*', tokens.Wildcard),
|
||
|
||
(r"`(``|[^`])*`", tokens.Name),
|
||
(r"´(´´|[^´])*´", tokens.Name),
|
||
(r'((?<!\S)\$(?:[_A-ZÀ-Ü]\w*)?\$)[\s\S]*?\1', tokens.Literal),
|
||
|
||
(r'\?', tokens.Name.Placeholder),
|
||
(r'%(\(\w+\))?s', tokens.Name.Placeholder),
|
||
(r'(?<!\w)[$:?]\w+', tokens.Name.Placeholder),
|
||
|
||
(r'\\\w+', tokens.Command),
|
||
(r'(NOT\s+)?(IN)\b', tokens.Operator.Comparison),
|
||
# FIXME(andi): VALUES shouldn't be listed here
|
||
# see https://github.com/andialbrecht/sqlparse/pull/64
|
||
# AS and IN are special, it may be followed by a parenthesis, but
|
||
# are never functions, see issue183 and issue507
|
||
(r'(CASE|IN|VALUES|USING|FROM|AS)\b', tokens.Keyword),
|
||
|
||
(r'(@|##|#)[A-ZÀ-Ü]\w+', tokens.Name),
|
||
|
||
# see issue #39
|
||
# Spaces around period `schema . name` are valid identifier
|
||
# TODO: Spaces before period not implemented
|
||
(r'[A-ZÀ-Ü]\w*(?=\s*\.)', tokens.Name), # 'Name' .
|
||
# FIXME(atronah): never match,
|
||
# because `re.match` doesn't work with look-behind regexp feature
|
||
(r'(?<=\.)[A-ZÀ-Ü]\w*', tokens.Name), # .'Name'
|
||
(r'[A-ZÀ-Ü]\w*(?=\()', tokens.Name), # side effect: change kw to func
|
||
(r'-?0x[\dA-F]+', tokens.Number.Hexadecimal),
|
||
(r'-?\d+(\.\d+)?E-?\d+', tokens.Number.Float),
|
||
(r'(?![_A-ZÀ-Ü])-?(\d+(\.\d*)|\.\d+)(?![_A-ZÀ-Ü])',
|
||
tokens.Number.Float),
|
||
(r'(?![_A-ZÀ-Ü])-?\d+(?![_A-ZÀ-Ü])', tokens.Number.Integer),
|
||
(r"'(''|\\\\|\\'|[^'])*'", tokens.String.Single),
|
||
# not a real string literal in ANSI SQL:
|
||
(r'"(""|\\\\|\\"|[^"])*"', tokens.String.Symbol),
|
||
(r'(""|".*?[^\\]")', tokens.String.Symbol),
|
||
# sqlite names can be escaped with [square brackets]. left bracket
|
||
# cannot be preceded by word character or a right bracket --
|
||
# otherwise it's probably an array index
|
||
(r'(?<![\w\])])(\[[^\]\[]+\])', tokens.Name),
|
||
(r'((LEFT\s+|RIGHT\s+|FULL\s+)?(INNER\s+|OUTER\s+|STRAIGHT\s+)?'
|
||
r'|(CROSS\s+|NATURAL\s+)?)?JOIN\b', tokens.Keyword),
|
||
(r'END(\s+IF|\s+LOOP|\s+WHILE)?\b', tokens.Keyword),
|
||
(r'NOT\s+NULL\b', tokens.Keyword),
|
||
(r'NULLS\s+(FIRST|LAST)\b', tokens.Keyword),
|
||
(r'UNION\s+ALL\b', tokens.Keyword),
|
||
(r'CREATE(\s+OR\s+REPLACE)?\b', tokens.Keyword.DDL),
|
||
(r'DOUBLE\s+PRECISION\b', tokens.Name.Builtin),
|
||
(r'GROUP\s+BY\b', tokens.Keyword),
|
||
(r'ORDER\s+BY\b', tokens.Keyword),
|
||
(r'HANDLER\s+FOR\b', tokens.Keyword),
|
||
(r'(LATERAL\s+VIEW\s+)'
|
||
r'(EXPLODE|INLINE|PARSE_URL_TUPLE|POSEXPLODE|STACK)\b',
|
||
tokens.Keyword),
|
||
(r"(AT|WITH')\s+TIME\s+ZONE\s+'[^']+'", tokens.Keyword.TZCast),
|
||
(r'(NOT\s+)?(LIKE|ILIKE|RLIKE)\b', tokens.Operator.Comparison),
|
||
(r'[0-9_A-ZÀ-Ü][_$#\w]*', is_keyword),
|
||
(r'[;:()\[\],\.]', tokens.Punctuation),
|
||
(r'[<>=~!]+', tokens.Operator.Comparison),
|
||
(r'[+/@#%^&|^-]+', tokens.Operator),
|
||
]}
|
||
|
||
FLAGS = re.IGNORECASE | re.UNICODE
|
||
SQL_REGEX = [(re.compile(rx, FLAGS).match, tt) for rx, tt in SQL_REGEX['root']]
|
||
|
||
KEYWORDS = {
|
||
'ABORT': tokens.Keyword,
|
||
'ABS': tokens.Keyword,
|
||
'ABSOLUTE': tokens.Keyword,
|
||
'ACCESS': tokens.Keyword,
|
||
'ADA': tokens.Keyword,
|
||
'ADD': tokens.Keyword,
|
||
'ADMIN': tokens.Keyword,
|
||
'AFTER': tokens.Keyword,
|
||
'AGGREGATE': tokens.Keyword,
|
||
'ALIAS': tokens.Keyword,
|
||
'ALL': tokens.Keyword,
|
||
'ALLOCATE': tokens.Keyword,
|
||
'ANALYSE': tokens.Keyword,
|
||
'ANALYZE': tokens.Keyword,
|
||
'ANY': tokens.Keyword,
|
||
'ARRAYLEN': tokens.Keyword,
|
||
'ARE': tokens.Keyword,
|
||
'ASC': tokens.Keyword.Order,
|
||
'ASENSITIVE': tokens.Keyword,
|
||
'ASSERTION': tokens.Keyword,
|
||
'ASSIGNMENT': tokens.Keyword,
|
||
'ASYMMETRIC': tokens.Keyword,
|
||
'AT': tokens.Keyword,
|
||
'ATOMIC': tokens.Keyword,
|
||
'AUDIT': tokens.Keyword,
|
||
'AUTHORIZATION': tokens.Keyword,
|
||
'AUTO_INCREMENT': tokens.Keyword,
|
||
'AVG': tokens.Keyword,
|
||
|
||
'BACKWARD': tokens.Keyword,
|
||
'BEFORE': tokens.Keyword,
|
||
'BEGIN': tokens.Keyword,
|
||
'BETWEEN': tokens.Keyword,
|
||
'BITVAR': tokens.Keyword,
|
||
'BIT_LENGTH': tokens.Keyword,
|
||
'BOTH': tokens.Keyword,
|
||
'BREADTH': tokens.Keyword,
|
||
|
||
# 'C': tokens.Keyword, # most likely this is an alias
|
||
'CACHE': tokens.Keyword,
|
||
'CALL': tokens.Keyword,
|
||
'CALLED': tokens.Keyword,
|
||
'CARDINALITY': tokens.Keyword,
|
||
'CASCADE': tokens.Keyword,
|
||
'CASCADED': tokens.Keyword,
|
||
'CAST': tokens.Keyword,
|
||
'CATALOG': tokens.Keyword,
|
||
'CATALOG_NAME': tokens.Keyword,
|
||
'CHAIN': tokens.Keyword,
|
||
'CHARACTERISTICS': tokens.Keyword,
|
||
'CHARACTER_LENGTH': tokens.Keyword,
|
||
'CHARACTER_SET_CATALOG': tokens.Keyword,
|
||
'CHARACTER_SET_NAME': tokens.Keyword,
|
||
'CHARACTER_SET_SCHEMA': tokens.Keyword,
|
||
'CHAR_LENGTH': tokens.Keyword,
|
||
'CHARSET': tokens.Keyword,
|
||
'CHECK': tokens.Keyword,
|
||
'CHECKED': tokens.Keyword,
|
||
'CHECKPOINT': tokens.Keyword,
|
||
'CLASS': tokens.Keyword,
|
||
'CLASS_ORIGIN': tokens.Keyword,
|
||
'CLOB': tokens.Keyword,
|
||
'CLOSE': tokens.Keyword,
|
||
'CLUSTER': tokens.Keyword,
|
||
'COALESCE': tokens.Keyword,
|
||
'COBOL': tokens.Keyword,
|
||
'COLLATE': tokens.Keyword,
|
||
'COLLATION': tokens.Keyword,
|
||
'COLLATION_CATALOG': tokens.Keyword,
|
||
'COLLATION_NAME': tokens.Keyword,
|
||
'COLLATION_SCHEMA': tokens.Keyword,
|
||
'COLLECT': tokens.Keyword,
|
||
'COLUMN': tokens.Keyword,
|
||
'COLUMN_NAME': tokens.Keyword,
|
||
'COMPRESS': tokens.Keyword,
|
||
'COMMAND_FUNCTION': tokens.Keyword,
|
||
'COMMAND_FUNCTION_CODE': tokens.Keyword,
|
||
'COMMENT': tokens.Keyword,
|
||
'COMMIT': tokens.Keyword.DML,
|
||
'COMMITTED': tokens.Keyword,
|
||
'COMPLETION': tokens.Keyword,
|
||
'CONCURRENTLY': tokens.Keyword,
|
||
'CONDITION_NUMBER': tokens.Keyword,
|
||
'CONNECT': tokens.Keyword,
|
||
'CONNECTION': tokens.Keyword,
|
||
'CONNECTION_NAME': tokens.Keyword,
|
||
'CONSTRAINT': tokens.Keyword,
|
||
'CONSTRAINTS': tokens.Keyword,
|
||
'CONSTRAINT_CATALOG': tokens.Keyword,
|
||
'CONSTRAINT_NAME': tokens.Keyword,
|
||
'CONSTRAINT_SCHEMA': tokens.Keyword,
|
||
'CONSTRUCTOR': tokens.Keyword,
|
||
'CONTAINS': tokens.Keyword,
|
||
'CONTINUE': tokens.Keyword,
|
||
'CONVERSION': tokens.Keyword,
|
||
'CONVERT': tokens.Keyword,
|
||
'COPY': tokens.Keyword,
|
||
'CORRESPONDING': tokens.Keyword,
|
||
'COUNT': tokens.Keyword,
|
||
'CREATEDB': tokens.Keyword,
|
||
'CREATEUSER': tokens.Keyword,
|
||
'CROSS': tokens.Keyword,
|
||
'CUBE': tokens.Keyword,
|
||
'CURRENT': tokens.Keyword,
|
||
'CURRENT_DATE': tokens.Keyword,
|
||
'CURRENT_PATH': tokens.Keyword,
|
||
'CURRENT_ROLE': tokens.Keyword,
|
||
'CURRENT_TIME': tokens.Keyword,
|
||
'CURRENT_TIMESTAMP': tokens.Keyword,
|
||
'CURRENT_USER': tokens.Keyword,
|
||
'CURSOR': tokens.Keyword,
|
||
'CURSOR_NAME': tokens.Keyword,
|
||
'CYCLE': tokens.Keyword,
|
||
|
||
'DATA': tokens.Keyword,
|
||
'DATABASE': tokens.Keyword,
|
||
'DATETIME_INTERVAL_CODE': tokens.Keyword,
|
||
'DATETIME_INTERVAL_PRECISION': tokens.Keyword,
|
||
'DAY': tokens.Keyword,
|
||
'DEALLOCATE': tokens.Keyword,
|
||
'DECLARE': tokens.Keyword,
|
||
'DEFAULT': tokens.Keyword,
|
||
'DEFAULTS': tokens.Keyword,
|
||
'DEFERRABLE': tokens.Keyword,
|
||
'DEFERRED': tokens.Keyword,
|
||
'DEFINED': tokens.Keyword,
|
||
'DEFINER': tokens.Keyword,
|
||
'DELIMITER': tokens.Keyword,
|
||
'DELIMITERS': tokens.Keyword,
|
||
'DEREF': tokens.Keyword,
|
||
'DESC': tokens.Keyword.Order,
|
||
'DESCRIBE': tokens.Keyword,
|
||
'DESCRIPTOR': tokens.Keyword,
|
||
'DESTROY': tokens.Keyword,
|
||
'DESTRUCTOR': tokens.Keyword,
|
||
'DETERMINISTIC': tokens.Keyword,
|
||
'DIAGNOSTICS': tokens.Keyword,
|
||
'DICTIONARY': tokens.Keyword,
|
||
'DISABLE': tokens.Keyword,
|
||
'DISCONNECT': tokens.Keyword,
|
||
'DISPATCH': tokens.Keyword,
|
||
'DO': tokens.Keyword,
|
||
'DOMAIN': tokens.Keyword,
|
||
'DYNAMIC': tokens.Keyword,
|
||
'DYNAMIC_FUNCTION': tokens.Keyword,
|
||
'DYNAMIC_FUNCTION_CODE': tokens.Keyword,
|
||
|
||
'EACH': tokens.Keyword,
|
||
'ENABLE': tokens.Keyword,
|
||
'ENCODING': tokens.Keyword,
|
||
'ENCRYPTED': tokens.Keyword,
|
||
'END-EXEC': tokens.Keyword,
|
||
'ENGINE': tokens.Keyword,
|
||
'EQUALS': tokens.Keyword,
|
||
'ESCAPE': tokens.Keyword,
|
||
'EVERY': tokens.Keyword,
|
||
'EXCEPT': tokens.Keyword,
|
||
'EXCEPTION': tokens.Keyword,
|
||
'EXCLUDING': tokens.Keyword,
|
||
'EXCLUSIVE': tokens.Keyword,
|
||
'EXEC': tokens.Keyword,
|
||
'EXECUTE': tokens.Keyword,
|
||
'EXISTING': tokens.Keyword,
|
||
'EXISTS': tokens.Keyword,
|
||
'EXPLAIN': tokens.Keyword,
|
||
'EXTERNAL': tokens.Keyword,
|
||
'EXTRACT': tokens.Keyword,
|
||
|
||
'FALSE': tokens.Keyword,
|
||
'FETCH': tokens.Keyword,
|
||
'FILE': tokens.Keyword,
|
||
'FINAL': tokens.Keyword,
|
||
'FIRST': tokens.Keyword,
|
||
'FORCE': tokens.Keyword,
|
||
'FOREACH': tokens.Keyword,
|
||
'FOREIGN': tokens.Keyword,
|
||
'FORTRAN': tokens.Keyword,
|
||
'FORWARD': tokens.Keyword,
|
||
'FOUND': tokens.Keyword,
|
||
'FREE': tokens.Keyword,
|
||
'FREEZE': tokens.Keyword,
|
||
'FULL': tokens.Keyword,
|
||
'FUNCTION': tokens.Keyword,
|
||
|
||
# 'G': tokens.Keyword,
|
||
'GENERAL': tokens.Keyword,
|
||
'GENERATED': tokens.Keyword,
|
||
'GET': tokens.Keyword,
|
||
'GLOBAL': tokens.Keyword,
|
||
'GO': tokens.Keyword,
|
||
'GOTO': tokens.Keyword,
|
||
'GRANT': tokens.Keyword,
|
||
'GRANTED': tokens.Keyword,
|
||
'GROUPING': tokens.Keyword,
|
||
|
||
'HAVING': tokens.Keyword,
|
||
'HIERARCHY': tokens.Keyword,
|
||
'HOLD': tokens.Keyword,
|
||
'HOUR': tokens.Keyword,
|
||
'HOST': tokens.Keyword,
|
||
|
||
'IDENTIFIED': tokens.Keyword,
|
||
'IDENTITY': tokens.Keyword,
|
||
'IGNORE': tokens.Keyword,
|
||
'ILIKE': tokens.Keyword,
|
||
'IMMEDIATE': tokens.Keyword,
|
||
'IMMUTABLE': tokens.Keyword,
|
||
|
||
'IMPLEMENTATION': tokens.Keyword,
|
||
'IMPLICIT': tokens.Keyword,
|
||
'INCLUDING': tokens.Keyword,
|
||
'INCREMENT': tokens.Keyword,
|
||
'INDEX': tokens.Keyword,
|
||
|
||
'INDITCATOR': tokens.Keyword,
|
||
'INFIX': tokens.Keyword,
|
||
'INHERITS': tokens.Keyword,
|
||
'INITIAL': tokens.Keyword,
|
||
'INITIALIZE': tokens.Keyword,
|
||
'INITIALLY': tokens.Keyword,
|
||
'INOUT': tokens.Keyword,
|
||
'INPUT': tokens.Keyword,
|
||
'INSENSITIVE': tokens.Keyword,
|
||
'INSTANTIABLE': tokens.Keyword,
|
||
'INSTEAD': tokens.Keyword,
|
||
'INTERSECT': tokens.Keyword,
|
||
'INTO': tokens.Keyword,
|
||
'INVOKER': tokens.Keyword,
|
||
'IS': tokens.Keyword,
|
||
'ISNULL': tokens.Keyword,
|
||
'ISOLATION': tokens.Keyword,
|
||
'ITERATE': tokens.Keyword,
|
||
|
||
# 'K': tokens.Keyword,
|
||
'KEY': tokens.Keyword,
|
||
'KEY_MEMBER': tokens.Keyword,
|
||
'KEY_TYPE': tokens.Keyword,
|
||
|
||
'LANCOMPILER': tokens.Keyword,
|
||
'LANGUAGE': tokens.Keyword,
|
||
'LARGE': tokens.Keyword,
|
||
'LAST': tokens.Keyword,
|
||
'LATERAL': tokens.Keyword,
|
||
'LEADING': tokens.Keyword,
|
||
'LENGTH': tokens.Keyword,
|
||
'LESS': tokens.Keyword,
|
||
'LEVEL': tokens.Keyword,
|
||
'LIMIT': tokens.Keyword,
|
||
'LISTEN': tokens.Keyword,
|
||
'LOAD': tokens.Keyword,
|
||
'LOCAL': tokens.Keyword,
|
||
'LOCALTIME': tokens.Keyword,
|
||
'LOCALTIMESTAMP': tokens.Keyword,
|
||
'LOCATION': tokens.Keyword,
|
||
'LOCATOR': tokens.Keyword,
|
||
'LOCK': tokens.Keyword,
|
||
'LOWER': tokens.Keyword,
|
||
|
||
# 'M': tokens.Keyword,
|
||
'MAP': tokens.Keyword,
|
||
'MATCH': tokens.Keyword,
|
||
'MAXEXTENTS': tokens.Keyword,
|
||
'MAXVALUE': tokens.Keyword,
|
||
'MESSAGE_LENGTH': tokens.Keyword,
|
||
'MESSAGE_OCTET_LENGTH': tokens.Keyword,
|
||
'MESSAGE_TEXT': tokens.Keyword,
|
||
'METHOD': tokens.Keyword,
|
||
'MINUTE': tokens.Keyword,
|
||
'MINUS': tokens.Keyword,
|
||
'MINVALUE': tokens.Keyword,
|
||
'MOD': tokens.Keyword,
|
||
'MODE': tokens.Keyword,
|
||
'MODIFIES': tokens.Keyword,
|
||
'MODIFY': tokens.Keyword,
|
||
'MONTH': tokens.Keyword,
|
||
'MORE': tokens.Keyword,
|
||
'MOVE': tokens.Keyword,
|
||
'MUMPS': tokens.Keyword,
|
||
|
||
'NAMES': tokens.Keyword,
|
||
'NATIONAL': tokens.Keyword,
|
||
'NATURAL': tokens.Keyword,
|
||
'NCHAR': tokens.Keyword,
|
||
'NCLOB': tokens.Keyword,
|
||
'NEW': tokens.Keyword,
|
||
'NEXT': tokens.Keyword,
|
||
'NO': tokens.Keyword,
|
||
'NOAUDIT': tokens.Keyword,
|
||
'NOCOMPRESS': tokens.Keyword,
|
||
'NOCREATEDB': tokens.Keyword,
|
||
'NOCREATEUSER': tokens.Keyword,
|
||
'NONE': tokens.Keyword,
|
||
'NOT': tokens.Keyword,
|
||
'NOTFOUND': tokens.Keyword,
|
||
'NOTHING': tokens.Keyword,
|
||
'NOTIFY': tokens.Keyword,
|
||
'NOTNULL': tokens.Keyword,
|
||
'NOWAIT': tokens.Keyword,
|
||
'NULL': tokens.Keyword,
|
||
'NULLABLE': tokens.Keyword,
|
||
'NULLIF': tokens.Keyword,
|
||
|
||
'OBJECT': tokens.Keyword,
|
||
'OCTET_LENGTH': tokens.Keyword,
|
||
'OF': tokens.Keyword,
|
||
'OFF': tokens.Keyword,
|
||
'OFFLINE': tokens.Keyword,
|
||
'OFFSET': tokens.Keyword,
|
||
'OIDS': tokens.Keyword,
|
||
'OLD': tokens.Keyword,
|
||
'ONLINE': tokens.Keyword,
|
||
'ONLY': tokens.Keyword,
|
||
'OPEN': tokens.Keyword,
|
||
'OPERATION': tokens.Keyword,
|
||
'OPERATOR': tokens.Keyword,
|
||
'OPTION': tokens.Keyword,
|
||
'OPTIONS': tokens.Keyword,
|
||
'ORDINALITY': tokens.Keyword,
|
||
'OUT': tokens.Keyword,
|
||
'OUTPUT': tokens.Keyword,
|
||
'OVERLAPS': tokens.Keyword,
|
||
'OVERLAY': tokens.Keyword,
|
||
'OVERRIDING': tokens.Keyword,
|
||
'OWNER': tokens.Keyword,
|
||
|
||
'QUARTER': tokens.Keyword,
|
||
|
||
'PAD': tokens.Keyword,
|
||
'PARAMETER': tokens.Keyword,
|
||
'PARAMETERS': tokens.Keyword,
|
||
'PARAMETER_MODE': tokens.Keyword,
|
||
'PARAMETER_NAME': tokens.Keyword,
|
||
'PARAMETER_ORDINAL_POSITION': tokens.Keyword,
|
||
'PARAMETER_SPECIFIC_CATALOG': tokens.Keyword,
|
||
'PARAMETER_SPECIFIC_NAME': tokens.Keyword,
|
||
'PARAMETER_SPECIFIC_SCHEMA': tokens.Keyword,
|
||
'PARTIAL': tokens.Keyword,
|
||
'PASCAL': tokens.Keyword,
|
||
'PCTFREE': tokens.Keyword,
|
||
'PENDANT': tokens.Keyword,
|
||
'PLACING': tokens.Keyword,
|
||
'PLI': tokens.Keyword,
|
||
'POSITION': tokens.Keyword,
|
||
'POSTFIX': tokens.Keyword,
|
||
'PRECISION': tokens.Keyword,
|
||
'PREFIX': tokens.Keyword,
|
||
'PREORDER': tokens.Keyword,
|
||
'PREPARE': tokens.Keyword,
|
||
'PRESERVE': tokens.Keyword,
|
||
'PRIMARY': tokens.Keyword,
|
||
'PRIOR': tokens.Keyword,
|
||
'PRIVILEGES': tokens.Keyword,
|
||
'PROCEDURAL': tokens.Keyword,
|
||
'PROCEDURE': tokens.Keyword,
|
||
'PUBLIC': tokens.Keyword,
|
||
|
||
'RAISE': tokens.Keyword,
|
||
'RAW': tokens.Keyword,
|
||
'READ': tokens.Keyword,
|
||
'READS': tokens.Keyword,
|
||
'RECHECK': tokens.Keyword,
|
||
'RECURSIVE': tokens.Keyword,
|
||
'REF': tokens.Keyword,
|
||
'REFERENCES': tokens.Keyword,
|
||
'REFERENCING': tokens.Keyword,
|
||
'REINDEX': tokens.Keyword,
|
||
'RELATIVE': tokens.Keyword,
|
||
'RENAME': tokens.Keyword,
|
||
'REPEATABLE': tokens.Keyword,
|
||
'RESET': tokens.Keyword,
|
||
'RESOURCE': tokens.Keyword,
|
||
'RESTART': tokens.Keyword,
|
||
'RESTRICT': tokens.Keyword,
|
||
'RESULT': tokens.Keyword,
|
||
'RETURN': tokens.Keyword,
|
||
'RETURNED_LENGTH': tokens.Keyword,
|
||
'RETURNED_OCTET_LENGTH': tokens.Keyword,
|
||
'RETURNED_SQLSTATE': tokens.Keyword,
|
||
'RETURNING': tokens.Keyword,
|
||
'RETURNS': tokens.Keyword,
|
||
'REVOKE': tokens.Keyword,
|
||
'RIGHT': tokens.Keyword,
|
||
'ROLE': tokens.Keyword,
|
||
'ROLLBACK': tokens.Keyword.DML,
|
||
'ROLLUP': tokens.Keyword,
|
||
'ROUTINE': tokens.Keyword,
|
||
'ROUTINE_CATALOG': tokens.Keyword,
|
||
'ROUTINE_NAME': tokens.Keyword,
|
||
'ROUTINE_SCHEMA': tokens.Keyword,
|
||
'ROW': tokens.Keyword,
|
||
'ROWS': tokens.Keyword,
|
||
'ROW_COUNT': tokens.Keyword,
|
||
'RULE': tokens.Keyword,
|
||
|
||
'SAVE_POINT': tokens.Keyword,
|
||
'SCALE': tokens.Keyword,
|
||
'SCHEMA': tokens.Keyword,
|
||
'SCHEMA_NAME': tokens.Keyword,
|
||
'SCOPE': tokens.Keyword,
|
||
'SCROLL': tokens.Keyword,
|
||
'SEARCH': tokens.Keyword,
|
||
'SECOND': tokens.Keyword,
|
||
'SECURITY': tokens.Keyword,
|
||
'SELF': tokens.Keyword,
|
||
'SENSITIVE': tokens.Keyword,
|
||
'SEQUENCE': tokens.Keyword,
|
||
'SERIALIZABLE': tokens.Keyword,
|
||
'SERVER_NAME': tokens.Keyword,
|
||
'SESSION': tokens.Keyword,
|
||
'SESSION_USER': tokens.Keyword,
|
||
'SETOF': tokens.Keyword,
|
||
'SETS': tokens.Keyword,
|
||
'SHARE': tokens.Keyword,
|
||
'SHOW': tokens.Keyword,
|
||
'SIMILAR': tokens.Keyword,
|
||
'SIMPLE': tokens.Keyword,
|
||
'SIZE': tokens.Keyword,
|
||
'SOME': tokens.Keyword,
|
||
'SOURCE': tokens.Keyword,
|
||
'SPACE': tokens.Keyword,
|
||
'SPECIFIC': tokens.Keyword,
|
||
'SPECIFICTYPE': tokens.Keyword,
|
||
'SPECIFIC_NAME': tokens.Keyword,
|
||
'SQL': tokens.Keyword,
|
||
'SQLBUF': tokens.Keyword,
|
||
'SQLCODE': tokens.Keyword,
|
||
'SQLERROR': tokens.Keyword,
|
||
'SQLEXCEPTION': tokens.Keyword,
|
||
'SQLSTATE': tokens.Keyword,
|
||
'SQLWARNING': tokens.Keyword,
|
||
'STABLE': tokens.Keyword,
|
||
'START': tokens.Keyword.DML,
|
||
# 'STATE': tokens.Keyword,
|
||
'STATEMENT': tokens.Keyword,
|
||
'STATIC': tokens.Keyword,
|
||
'STATISTICS': tokens.Keyword,
|
||
'STDIN': tokens.Keyword,
|
||
'STDOUT': tokens.Keyword,
|
||
'STORAGE': tokens.Keyword,
|
||
'STRICT': tokens.Keyword,
|
||
'STRUCTURE': tokens.Keyword,
|
||
'STYPE': tokens.Keyword,
|
||
'SUBCLASS_ORIGIN': tokens.Keyword,
|
||
'SUBLIST': tokens.Keyword,
|
||
'SUBSTRING': tokens.Keyword,
|
||
'SUCCESSFUL': tokens.Keyword,
|
||
'SUM': tokens.Keyword,
|
||
'SYMMETRIC': tokens.Keyword,
|
||
'SYNONYM': tokens.Keyword,
|
||
'SYSID': tokens.Keyword,
|
||
'SYSTEM': tokens.Keyword,
|
||
'SYSTEM_USER': tokens.Keyword,
|
||
|
||
'TABLE': tokens.Keyword,
|
||
'TABLE_NAME': tokens.Keyword,
|
||
'TEMP': tokens.Keyword,
|
||
'TEMPLATE': tokens.Keyword,
|
||
'TEMPORARY': tokens.Keyword,
|
||
'TERMINATE': tokens.Keyword,
|
||
'THAN': tokens.Keyword,
|
||
'TIMESTAMP': tokens.Keyword,
|
||
'TIMEZONE_HOUR': tokens.Keyword,
|
||
'TIMEZONE_MINUTE': tokens.Keyword,
|
||
'TO': tokens.Keyword,
|
||
'TOAST': tokens.Keyword,
|
||
'TRAILING': tokens.Keyword,
|
||
'TRANSATION': tokens.Keyword,
|
||
'TRANSACTIONS_COMMITTED': tokens.Keyword,
|
||
'TRANSACTIONS_ROLLED_BACK': tokens.Keyword,
|
||
'TRANSATION_ACTIVE': tokens.Keyword,
|
||
'TRANSFORM': tokens.Keyword,
|
||
'TRANSFORMS': tokens.Keyword,
|
||
'TRANSLATE': tokens.Keyword,
|
||
'TRANSLATION': tokens.Keyword,
|
||
'TREAT': tokens.Keyword,
|
||
'TRIGGER': tokens.Keyword,
|
||
'TRIGGER_CATALOG': tokens.Keyword,
|
||
'TRIGGER_NAME': tokens.Keyword,
|
||
'TRIGGER_SCHEMA': tokens.Keyword,
|
||
'TRIM': tokens.Keyword,
|
||
'TRUE': tokens.Keyword,
|
||
'TRUNCATE': tokens.Keyword,
|
||
'TRUSTED': tokens.Keyword,
|
||
'TYPE': tokens.Keyword,
|
||
|
||
'UID': tokens.Keyword,
|
||
'UNCOMMITTED': tokens.Keyword,
|
||
'UNDER': tokens.Keyword,
|
||
'UNENCRYPTED': tokens.Keyword,
|
||
'UNION': tokens.Keyword,
|
||
'UNIQUE': tokens.Keyword,
|
||
'UNKNOWN': tokens.Keyword,
|
||
'UNLISTEN': tokens.Keyword,
|
||
'UNNAMED': tokens.Keyword,
|
||
'UNNEST': tokens.Keyword,
|
||
'UNTIL': tokens.Keyword,
|
||
'UPPER': tokens.Keyword,
|
||
'USAGE': tokens.Keyword,
|
||
'USE': tokens.Keyword,
|
||
'USER': tokens.Keyword,
|
||
'USER_DEFINED_TYPE_CATALOG': tokens.Keyword,
|
||
'USER_DEFINED_TYPE_NAME': tokens.Keyword,
|
||
'USER_DEFINED_TYPE_SCHEMA': tokens.Keyword,
|
||
'USING': tokens.Keyword,
|
||
|
||
'VACUUM': tokens.Keyword,
|
||
'VALID': tokens.Keyword,
|
||
'VALIDATE': tokens.Keyword,
|
||
'VALIDATOR': tokens.Keyword,
|
||
'VALUES': tokens.Keyword,
|
||
'VARIABLE': tokens.Keyword,
|
||
'VERBOSE': tokens.Keyword,
|
||
'VERSION': tokens.Keyword,
|
||
'VIEW': tokens.Keyword,
|
||
'VOLATILE': tokens.Keyword,
|
||
|
||
'WEEK': tokens.Keyword,
|
||
'WHENEVER': tokens.Keyword,
|
||
'WITH': tokens.Keyword.CTE,
|
||
'WITHOUT': tokens.Keyword,
|
||
'WORK': tokens.Keyword,
|
||
'WRITE': tokens.Keyword,
|
||
|
||
'YEAR': tokens.Keyword,
|
||
|
||
'ZONE': tokens.Keyword,
|
||
|
||
# Name.Builtin
|
||
'ARRAY': tokens.Name.Builtin,
|
||
'BIGINT': tokens.Name.Builtin,
|
||
'BINARY': tokens.Name.Builtin,
|
||
'BIT': tokens.Name.Builtin,
|
||
'BLOB': tokens.Name.Builtin,
|
||
'BOOLEAN': tokens.Name.Builtin,
|
||
'CHAR': tokens.Name.Builtin,
|
||
'CHARACTER': tokens.Name.Builtin,
|
||
'DATE': tokens.Name.Builtin,
|
||
'DEC': tokens.Name.Builtin,
|
||
'DECIMAL': tokens.Name.Builtin,
|
||
'FILE_TYPE': tokens.Name.Builtin,
|
||
'FLOAT': tokens.Name.Builtin,
|
||
'INT': tokens.Name.Builtin,
|
||
'INT8': tokens.Name.Builtin,
|
||
'INTEGER': tokens.Name.Builtin,
|
||
'INTERVAL': tokens.Name.Builtin,
|
||
'LONG': tokens.Name.Builtin,
|
||
'NATURALN': tokens.Name.Builtin,
|
||
'NVARCHAR': tokens.Name.Builtin,
|
||
'NUMBER': tokens.Name.Builtin,
|
||
'NUMERIC': tokens.Name.Builtin,
|
||
'PLS_INTEGER': tokens.Name.Builtin,
|
||
'POSITIVE': tokens.Name.Builtin,
|
||
'POSITIVEN': tokens.Name.Builtin,
|
||
'REAL': tokens.Name.Builtin,
|
||
'ROWID': tokens.Name.Builtin,
|
||
'ROWLABEL': tokens.Name.Builtin,
|
||
'ROWNUM': tokens.Name.Builtin,
|
||
'SERIAL': tokens.Name.Builtin,
|
||
'SERIAL8': tokens.Name.Builtin,
|
||
'SIGNED': tokens.Name.Builtin,
|
||
'SIGNTYPE': tokens.Name.Builtin,
|
||
'SIMPLE_DOUBLE': tokens.Name.Builtin,
|
||
'SIMPLE_FLOAT': tokens.Name.Builtin,
|
||
'SIMPLE_INTEGER': tokens.Name.Builtin,
|
||
'SMALLINT': tokens.Name.Builtin,
|
||
'SYS_REFCURSOR': tokens.Name.Builtin,
|
||
'SYSDATE': tokens.Name,
|
||
'TEXT': tokens.Name.Builtin,
|
||
'TINYINT': tokens.Name.Builtin,
|
||
'UNSIGNED': tokens.Name.Builtin,
|
||
'UROWID': tokens.Name.Builtin,
|
||
'UTL_FILE': tokens.Name.Builtin,
|
||
'VARCHAR': tokens.Name.Builtin,
|
||
'VARCHAR2': tokens.Name.Builtin,
|
||
'VARYING': tokens.Name.Builtin,
|
||
}
|
||
|
||
KEYWORDS_COMMON = {
|
||
'SELECT': tokens.Keyword.DML,
|
||
'INSERT': tokens.Keyword.DML,
|
||
'DELETE': tokens.Keyword.DML,
|
||
'UPDATE': tokens.Keyword.DML,
|
||
'UPSERT': tokens.Keyword.DML,
|
||
'REPLACE': tokens.Keyword.DML,
|
||
'MERGE': tokens.Keyword.DML,
|
||
'DROP': tokens.Keyword.DDL,
|
||
'CREATE': tokens.Keyword.DDL,
|
||
'ALTER': tokens.Keyword.DDL,
|
||
|
||
'WHERE': tokens.Keyword,
|
||
'FROM': tokens.Keyword,
|
||
'INNER': tokens.Keyword,
|
||
'JOIN': tokens.Keyword,
|
||
'STRAIGHT_JOIN': tokens.Keyword,
|
||
'AND': tokens.Keyword,
|
||
'OR': tokens.Keyword,
|
||
'LIKE': tokens.Keyword,
|
||
'ON': tokens.Keyword,
|
||
'IN': tokens.Keyword,
|
||
'SET': tokens.Keyword,
|
||
|
||
'BY': tokens.Keyword,
|
||
'GROUP': tokens.Keyword,
|
||
'ORDER': tokens.Keyword,
|
||
'LEFT': tokens.Keyword,
|
||
'OUTER': tokens.Keyword,
|
||
'FULL': tokens.Keyword,
|
||
|
||
'IF': tokens.Keyword,
|
||
'END': tokens.Keyword,
|
||
'THEN': tokens.Keyword,
|
||
'LOOP': tokens.Keyword,
|
||
'AS': tokens.Keyword,
|
||
'ELSE': tokens.Keyword,
|
||
'FOR': tokens.Keyword,
|
||
'WHILE': tokens.Keyword,
|
||
|
||
'CASE': tokens.Keyword,
|
||
'WHEN': tokens.Keyword,
|
||
'MIN': tokens.Keyword,
|
||
'MAX': tokens.Keyword,
|
||
'DISTINCT': tokens.Keyword,
|
||
}
|
||
|
||
KEYWORDS_ORACLE = {
|
||
'ARCHIVE': tokens.Keyword,
|
||
'ARCHIVELOG': tokens.Keyword,
|
||
|
||
'BACKUP': tokens.Keyword,
|
||
'BECOME': tokens.Keyword,
|
||
'BLOCK': tokens.Keyword,
|
||
'BODY': tokens.Keyword,
|
||
|
||
'CANCEL': tokens.Keyword,
|
||
'CHANGE': tokens.Keyword,
|
||
'COMPILE': tokens.Keyword,
|
||
'CONTENTS': tokens.Keyword,
|
||
'CONTROLFILE': tokens.Keyword,
|
||
|
||
'DATAFILE': tokens.Keyword,
|
||
'DBA': tokens.Keyword,
|
||
'DISMOUNT': tokens.Keyword,
|
||
'DOUBLE': tokens.Keyword,
|
||
'DUMP': tokens.Keyword,
|
||
|
||
'ELSIF': tokens.Keyword,
|
||
'EVENTS': tokens.Keyword,
|
||
'EXCEPTIONS': tokens.Keyword,
|
||
'EXPLAIN': tokens.Keyword,
|
||
'EXTENT': tokens.Keyword,
|
||
'EXTERNALLY': tokens.Keyword,
|
||
|
||
'FLUSH': tokens.Keyword,
|
||
'FREELIST': tokens.Keyword,
|
||
'FREELISTS': tokens.Keyword,
|
||
|
||
# groups seems too common as table name
|
||
# 'GROUPS': tokens.Keyword,
|
||
|
||
'INDICATOR': tokens.Keyword,
|
||
'INITRANS': tokens.Keyword,
|
||
'INSTANCE': tokens.Keyword,
|
||
|
||
'LAYER': tokens.Keyword,
|
||
'LINK': tokens.Keyword,
|
||
'LISTS': tokens.Keyword,
|
||
'LOGFILE': tokens.Keyword,
|
||
|
||
'MANAGE': tokens.Keyword,
|
||
'MANUAL': tokens.Keyword,
|
||
'MAXDATAFILES': tokens.Keyword,
|
||
'MAXINSTANCES': tokens.Keyword,
|
||
'MAXLOGFILES': tokens.Keyword,
|
||
'MAXLOGHISTORY': tokens.Keyword,
|
||
'MAXLOGMEMBERS': tokens.Keyword,
|
||
'MAXTRANS': tokens.Keyword,
|
||
'MINEXTENTS': tokens.Keyword,
|
||
'MODULE': tokens.Keyword,
|
||
'MOUNT': tokens.Keyword,
|
||
|
||
'NOARCHIVELOG': tokens.Keyword,
|
||
'NOCACHE': tokens.Keyword,
|
||
'NOCYCLE': tokens.Keyword,
|
||
'NOMAXVALUE': tokens.Keyword,
|
||
'NOMINVALUE': tokens.Keyword,
|
||
'NOORDER': tokens.Keyword,
|
||
'NORESETLOGS': tokens.Keyword,
|
||
'NORMAL': tokens.Keyword,
|
||
'NOSORT': tokens.Keyword,
|
||
|
||
'OPTIMAL': tokens.Keyword,
|
||
'OWN': tokens.Keyword,
|
||
|
||
'PACKAGE': tokens.Keyword,
|
||
'PARALLEL': tokens.Keyword,
|
||
'PCTINCREASE': tokens.Keyword,
|
||
'PCTUSED': tokens.Keyword,
|
||
'PLAN': tokens.Keyword,
|
||
'PRIVATE': tokens.Keyword,
|
||
'PROFILE': tokens.Keyword,
|
||
|
||
'QUOTA': tokens.Keyword,
|
||
|
||
'RECOVER': tokens.Keyword,
|
||
'RESETLOGS': tokens.Keyword,
|
||
'RESTRICTED': tokens.Keyword,
|
||
'REUSE': tokens.Keyword,
|
||
'ROLES': tokens.Keyword,
|
||
|
||
'SAVEPOINT': tokens.Keyword,
|
||
'SCN': tokens.Keyword,
|
||
'SECTION': tokens.Keyword,
|
||
'SEGMENT': tokens.Keyword,
|
||
'SHARED': tokens.Keyword,
|
||
'SNAPSHOT': tokens.Keyword,
|
||
'SORT': tokens.Keyword,
|
||
'STATEMENT_ID': tokens.Keyword,
|
||
'STOP': tokens.Keyword,
|
||
'SWITCH': tokens.Keyword,
|
||
|
||
'TABLES': tokens.Keyword,
|
||
'TABLESPACE': tokens.Keyword,
|
||
'THREAD': tokens.Keyword,
|
||
'TIME': tokens.Keyword,
|
||
'TRACING': tokens.Keyword,
|
||
'TRANSACTION': tokens.Keyword,
|
||
'TRIGGERS': tokens.Keyword,
|
||
|
||
'UNLIMITED': tokens.Keyword,
|
||
'UNLOCK': tokens.Keyword,
|
||
}
|
||
|
||
# PostgreSQL Syntax
|
||
KEYWORDS_PLPGSQL = {
|
||
'CONFLICT': tokens.Keyword,
|
||
'WINDOW': tokens.Keyword,
|
||
'PARTITION': tokens.Keyword,
|
||
'OVER': tokens.Keyword,
|
||
'PERFORM': tokens.Keyword,
|
||
'NOTICE': tokens.Keyword,
|
||
'PLPGSQL': tokens.Keyword,
|
||
'INHERIT': tokens.Keyword,
|
||
'INDEXES': tokens.Keyword,
|
||
'ON_ERROR_STOP': tokens.Keyword,
|
||
|
||
'BYTEA': tokens.Keyword,
|
||
'BIGSERIAL': tokens.Keyword,
|
||
'BIT VARYING': tokens.Keyword,
|
||
'BOX': tokens.Keyword,
|
||
'CHARACTER': tokens.Keyword,
|
||
'CHARACTER VARYING': tokens.Keyword,
|
||
'CIDR': tokens.Keyword,
|
||
'CIRCLE': tokens.Keyword,
|
||
'DOUBLE PRECISION': tokens.Keyword,
|
||
'INET': tokens.Keyword,
|
||
'JSON': tokens.Keyword,
|
||
'JSONB': tokens.Keyword,
|
||
'LINE': tokens.Keyword,
|
||
'LSEG': tokens.Keyword,
|
||
'MACADDR': tokens.Keyword,
|
||
'MONEY': tokens.Keyword,
|
||
'PATH': tokens.Keyword,
|
||
'PG_LSN': tokens.Keyword,
|
||
'POINT': tokens.Keyword,
|
||
'POLYGON': tokens.Keyword,
|
||
'SMALLSERIAL': tokens.Keyword,
|
||
'TSQUERY': tokens.Keyword,
|
||
'TSVECTOR': tokens.Keyword,
|
||
'TXID_SNAPSHOT': tokens.Keyword,
|
||
'UUID': tokens.Keyword,
|
||
'XML': tokens.Keyword,
|
||
|
||
'FOR': tokens.Keyword,
|
||
'IN': tokens.Keyword,
|
||
'LOOP': tokens.Keyword,
|
||
}
|
||
|
||
# Hive Syntax
|
||
KEYWORDS_HQL = {
|
||
'EXPLODE': tokens.Keyword,
|
||
'DIRECTORY': tokens.Keyword,
|
||
'DISTRIBUTE': tokens.Keyword,
|
||
'INCLUDE': tokens.Keyword,
|
||
'LOCATE': tokens.Keyword,
|
||
'OVERWRITE': tokens.Keyword,
|
||
'POSEXPLODE': tokens.Keyword,
|
||
|
||
'ARRAY_CONTAINS': tokens.Keyword,
|
||
'CMP': tokens.Keyword,
|
||
'COLLECT_LIST': tokens.Keyword,
|
||
'CONCAT': tokens.Keyword,
|
||
'CONDITION': tokens.Keyword,
|
||
'DATE_ADD': tokens.Keyword,
|
||
'DATE_SUB': tokens.Keyword,
|
||
'DECODE': tokens.Keyword,
|
||
'DBMS_OUTPUT': tokens.Keyword,
|
||
'ELEMENTS': tokens.Keyword,
|
||
'EXCHANGE': tokens.Keyword,
|
||
'EXTENDED': tokens.Keyword,
|
||
'FLOOR': tokens.Keyword,
|
||
'FOLLOWING': tokens.Keyword,
|
||
'FROM_UNIXTIME': tokens.Keyword,
|
||
'FTP': tokens.Keyword,
|
||
'HOUR': tokens.Keyword,
|
||
'INLINE': tokens.Keyword,
|
||
'INSTR': tokens.Keyword,
|
||
'LEN': tokens.Keyword,
|
||
'MAXELEMENT': tokens.Keyword,
|
||
'MAXINDEX': tokens.Keyword,
|
||
'MAX_PART_DATE': tokens.Keyword,
|
||
'MAX_PART_INT': tokens.Keyword,
|
||
'MAX_PART_STRING': tokens.Keyword,
|
||
'MINELEMENT': tokens.Keyword,
|
||
'MININDEX': tokens.Keyword,
|
||
'MIN_PART_DATE': tokens.Keyword,
|
||
'MIN_PART_INT': tokens.Keyword,
|
||
'MIN_PART_STRING': tokens.Keyword,
|
||
'NOW': tokens.Keyword,
|
||
'NVL': tokens.Keyword,
|
||
'NVL2': tokens.Keyword,
|
||
'PARSE_URL_TUPLE': tokens.Keyword,
|
||
'PART_LOC': tokens.Keyword,
|
||
'PART_COUNT': tokens.Keyword,
|
||
'PART_COUNT_BY': tokens.Keyword,
|
||
'PRINT': tokens.Keyword,
|
||
'PUT_LINE': tokens.Keyword,
|
||
'RANGE': tokens.Keyword,
|
||
'REDUCE': tokens.Keyword,
|
||
'REGEXP_REPLACE': tokens.Keyword,
|
||
'RESIGNAL': tokens.Keyword,
|
||
'RTRIM': tokens.Keyword,
|
||
'SIGN': tokens.Keyword,
|
||
'SIGNAL': tokens.Keyword,
|
||
'SIN': tokens.Keyword,
|
||
'SPLIT': tokens.Keyword,
|
||
'SQRT': tokens.Keyword,
|
||
'STACK': tokens.Keyword,
|
||
'STR': tokens.Keyword,
|
||
'SUBSTR': tokens.Keyword,
|
||
'SUMMARY': tokens.Keyword,
|
||
'TBLPROPERTIES': tokens.Keyword,
|
||
'TIMESTAMP_ISO': tokens.Keyword,
|
||
'TO_CHAR': tokens.Keyword,
|
||
'TO_DATE': tokens.Keyword,
|
||
'TO_TIMESTAMP': tokens.Keyword,
|
||
'TRUNC': tokens.Keyword,
|
||
'UNBOUNDED': tokens.Keyword,
|
||
'UNIQUEJOIN': tokens.Keyword,
|
||
'UNIX_TIMESTAMP': tokens.Keyword,
|
||
'UTC_TIMESTAMP': tokens.Keyword,
|
||
'VIEWS': tokens.Keyword,
|
||
|
||
'EXIT': tokens.Keyword,
|
||
'BREAK': tokens.Keyword,
|
||
'LEAVE': tokens.Keyword,
|
||
}
|