keywords.py 29 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958
  1. #
  2. # Copyright (C) 2009-2020 the sqlparse authors and contributors
  3. # <see AUTHORS file>
  4. #
  5. # This module is part of python-sqlparse and is released under
  6. # the BSD License: https://opensource.org/licenses/BSD-3-Clause
  7. import re
  8. from sqlparse import tokens
  9. def is_keyword(value):
  10. val = value.upper()
  11. return (KEYWORDS_COMMON.get(val)
  12. or KEYWORDS_ORACLE.get(val)
  13. or KEYWORDS_PLPGSQL.get(val)
  14. or KEYWORDS_HQL.get(val)
  15. or KEYWORDS.get(val, tokens.Name)), value
  16. SQL_REGEX = {
  17. 'root': [
  18. (r'(--|# )\+.*?(\r\n|\r|\n|$)', tokens.Comment.Single.Hint),
  19. (r'/\*\+[\s\S]*?\*/', tokens.Comment.Multiline.Hint),
  20. (r'(--|# ).*?(\r\n|\r|\n|$)', tokens.Comment.Single),
  21. (r'/\*[\s\S]*?\*/', tokens.Comment.Multiline),
  22. (r'(\r\n|\r|\n)', tokens.Newline),
  23. (r'\s+?', tokens.Whitespace),
  24. (r':=', tokens.Assignment),
  25. (r'::', tokens.Punctuation),
  26. (r'\*', tokens.Wildcard),
  27. (r"`(``|[^`])*`", tokens.Name),
  28. (r"´(´´|[^´])*´", tokens.Name),
  29. (r'((?<!\S)\$(?:[_A-ZÀ-Ü]\w*)?\$)[\s\S]*?\1', tokens.Literal),
  30. (r'\?', tokens.Name.Placeholder),
  31. (r'%(\(\w+\))?s', tokens.Name.Placeholder),
  32. (r'(?<!\w)[$:?]\w+', tokens.Name.Placeholder),
  33. (r'\\\w+', tokens.Command),
  34. (r'(NOT\s+)?(IN)\b', tokens.Operator.Comparison),
  35. # FIXME(andi): VALUES shouldn't be listed here
  36. # see https://github.com/andialbrecht/sqlparse/pull/64
  37. # AS and IN are special, it may be followed by a parenthesis, but
  38. # are never functions, see issue183 and issue507
  39. (r'(CASE|IN|VALUES|USING|FROM|AS)\b', tokens.Keyword),
  40. (r'(@|##|#)[A-ZÀ-Ü]\w+', tokens.Name),
  41. # see issue #39
  42. # Spaces around period `schema . name` are valid identifier
  43. # TODO: Spaces before period not implemented
  44. (r'[A-ZÀ-Ü]\w*(?=\s*\.)', tokens.Name), # 'Name' .
  45. # FIXME(atronah): never match,
  46. # because `re.match` doesn't work with look-behind regexp feature
  47. (r'(?<=\.)[A-ZÀ-Ü]\w*', tokens.Name), # .'Name'
  48. (r'[A-ZÀ-Ü]\w*(?=\()', tokens.Name), # side effect: change kw to func
  49. (r'-?0x[\dA-F]+', tokens.Number.Hexadecimal),
  50. (r'-?\d+(\.\d+)?E-?\d+', tokens.Number.Float),
  51. (r'(?![_A-ZÀ-Ü])-?(\d+(\.\d*)|\.\d+)(?![_A-ZÀ-Ü])',
  52. tokens.Number.Float),
  53. (r'(?![_A-ZÀ-Ü])-?\d+(?![_A-ZÀ-Ü])', tokens.Number.Integer),
  54. (r"'(''|\\\\|\\'|[^'])*'", tokens.String.Single),
  55. # not a real string literal in ANSI SQL:
  56. (r'"(""|\\\\|\\"|[^"])*"', tokens.String.Symbol),
  57. (r'(""|".*?[^\\]")', tokens.String.Symbol),
  58. # sqlite names can be escaped with [square brackets]. left bracket
  59. # cannot be preceded by word character or a right bracket --
  60. # otherwise it's probably an array index
  61. (r'(?<![\w\])])(\[[^\]\[]+\])', tokens.Name),
  62. (r'((LEFT\s+|RIGHT\s+|FULL\s+)?(INNER\s+|OUTER\s+|STRAIGHT\s+)?'
  63. r'|(CROSS\s+|NATURAL\s+)?)?JOIN\b', tokens.Keyword),
  64. (r'END(\s+IF|\s+LOOP|\s+WHILE)?\b', tokens.Keyword),
  65. (r'NOT\s+NULL\b', tokens.Keyword),
  66. (r'NULLS\s+(FIRST|LAST)\b', tokens.Keyword),
  67. (r'UNION\s+ALL\b', tokens.Keyword),
  68. (r'CREATE(\s+OR\s+REPLACE)?\b', tokens.Keyword.DDL),
  69. (r'DOUBLE\s+PRECISION\b', tokens.Name.Builtin),
  70. (r'GROUP\s+BY\b', tokens.Keyword),
  71. (r'ORDER\s+BY\b', tokens.Keyword),
  72. (r'HANDLER\s+FOR\b', tokens.Keyword),
  73. (r'(LATERAL\s+VIEW\s+)'
  74. r'(EXPLODE|INLINE|PARSE_URL_TUPLE|POSEXPLODE|STACK)\b',
  75. tokens.Keyword),
  76. (r"(AT|WITH')\s+TIME\s+ZONE\s+'[^']+'", tokens.Keyword.TZCast),
  77. (r'(NOT\s+)?(LIKE|ILIKE|RLIKE)\b', tokens.Operator.Comparison),
  78. (r'[0-9_A-ZÀ-Ü][_$#\w]*', is_keyword),
  79. (r'[;:()\[\],\.]', tokens.Punctuation),
  80. (r'[<>=~!]+', tokens.Operator.Comparison),
  81. (r'[+/@#%^&|^-]+', tokens.Operator),
  82. ]}
  83. FLAGS = re.IGNORECASE | re.UNICODE
  84. SQL_REGEX = [(re.compile(rx, FLAGS).match, tt) for rx, tt in SQL_REGEX['root']]
  85. KEYWORDS = {
  86. 'ABORT': tokens.Keyword,
  87. 'ABS': tokens.Keyword,
  88. 'ABSOLUTE': tokens.Keyword,
  89. 'ACCESS': tokens.Keyword,
  90. 'ADA': tokens.Keyword,
  91. 'ADD': tokens.Keyword,
  92. 'ADMIN': tokens.Keyword,
  93. 'AFTER': tokens.Keyword,
  94. 'AGGREGATE': tokens.Keyword,
  95. 'ALIAS': tokens.Keyword,
  96. 'ALL': tokens.Keyword,
  97. 'ALLOCATE': tokens.Keyword,
  98. 'ANALYSE': tokens.Keyword,
  99. 'ANALYZE': tokens.Keyword,
  100. 'ANY': tokens.Keyword,
  101. 'ARRAYLEN': tokens.Keyword,
  102. 'ARE': tokens.Keyword,
  103. 'ASC': tokens.Keyword.Order,
  104. 'ASENSITIVE': tokens.Keyword,
  105. 'ASSERTION': tokens.Keyword,
  106. 'ASSIGNMENT': tokens.Keyword,
  107. 'ASYMMETRIC': tokens.Keyword,
  108. 'AT': tokens.Keyword,
  109. 'ATOMIC': tokens.Keyword,
  110. 'AUDIT': tokens.Keyword,
  111. 'AUTHORIZATION': tokens.Keyword,
  112. 'AUTO_INCREMENT': tokens.Keyword,
  113. 'AVG': tokens.Keyword,
  114. 'BACKWARD': tokens.Keyword,
  115. 'BEFORE': tokens.Keyword,
  116. 'BEGIN': tokens.Keyword,
  117. 'BETWEEN': tokens.Keyword,
  118. 'BITVAR': tokens.Keyword,
  119. 'BIT_LENGTH': tokens.Keyword,
  120. 'BOTH': tokens.Keyword,
  121. 'BREADTH': tokens.Keyword,
  122. # 'C': tokens.Keyword, # most likely this is an alias
  123. 'CACHE': tokens.Keyword,
  124. 'CALL': tokens.Keyword,
  125. 'CALLED': tokens.Keyword,
  126. 'CARDINALITY': tokens.Keyword,
  127. 'CASCADE': tokens.Keyword,
  128. 'CASCADED': tokens.Keyword,
  129. 'CAST': tokens.Keyword,
  130. 'CATALOG': tokens.Keyword,
  131. 'CATALOG_NAME': tokens.Keyword,
  132. 'CHAIN': tokens.Keyword,
  133. 'CHARACTERISTICS': tokens.Keyword,
  134. 'CHARACTER_LENGTH': tokens.Keyword,
  135. 'CHARACTER_SET_CATALOG': tokens.Keyword,
  136. 'CHARACTER_SET_NAME': tokens.Keyword,
  137. 'CHARACTER_SET_SCHEMA': tokens.Keyword,
  138. 'CHAR_LENGTH': tokens.Keyword,
  139. 'CHARSET': tokens.Keyword,
  140. 'CHECK': tokens.Keyword,
  141. 'CHECKED': tokens.Keyword,
  142. 'CHECKPOINT': tokens.Keyword,
  143. 'CLASS': tokens.Keyword,
  144. 'CLASS_ORIGIN': tokens.Keyword,
  145. 'CLOB': tokens.Keyword,
  146. 'CLOSE': tokens.Keyword,
  147. 'CLUSTER': tokens.Keyword,
  148. 'COALESCE': tokens.Keyword,
  149. 'COBOL': tokens.Keyword,
  150. 'COLLATE': tokens.Keyword,
  151. 'COLLATION': tokens.Keyword,
  152. 'COLLATION_CATALOG': tokens.Keyword,
  153. 'COLLATION_NAME': tokens.Keyword,
  154. 'COLLATION_SCHEMA': tokens.Keyword,
  155. 'COLLECT': tokens.Keyword,
  156. 'COLUMN': tokens.Keyword,
  157. 'COLUMN_NAME': tokens.Keyword,
  158. 'COMPRESS': tokens.Keyword,
  159. 'COMMAND_FUNCTION': tokens.Keyword,
  160. 'COMMAND_FUNCTION_CODE': tokens.Keyword,
  161. 'COMMENT': tokens.Keyword,
  162. 'COMMIT': tokens.Keyword.DML,
  163. 'COMMITTED': tokens.Keyword,
  164. 'COMPLETION': tokens.Keyword,
  165. 'CONCURRENTLY': tokens.Keyword,
  166. 'CONDITION_NUMBER': tokens.Keyword,
  167. 'CONNECT': tokens.Keyword,
  168. 'CONNECTION': tokens.Keyword,
  169. 'CONNECTION_NAME': tokens.Keyword,
  170. 'CONSTRAINT': tokens.Keyword,
  171. 'CONSTRAINTS': tokens.Keyword,
  172. 'CONSTRAINT_CATALOG': tokens.Keyword,
  173. 'CONSTRAINT_NAME': tokens.Keyword,
  174. 'CONSTRAINT_SCHEMA': tokens.Keyword,
  175. 'CONSTRUCTOR': tokens.Keyword,
  176. 'CONTAINS': tokens.Keyword,
  177. 'CONTINUE': tokens.Keyword,
  178. 'CONVERSION': tokens.Keyword,
  179. 'CONVERT': tokens.Keyword,
  180. 'COPY': tokens.Keyword,
  181. 'CORRESPONDING': tokens.Keyword,
  182. 'COUNT': tokens.Keyword,
  183. 'CREATEDB': tokens.Keyword,
  184. 'CREATEUSER': tokens.Keyword,
  185. 'CROSS': tokens.Keyword,
  186. 'CUBE': tokens.Keyword,
  187. 'CURRENT': tokens.Keyword,
  188. 'CURRENT_DATE': tokens.Keyword,
  189. 'CURRENT_PATH': tokens.Keyword,
  190. 'CURRENT_ROLE': tokens.Keyword,
  191. 'CURRENT_TIME': tokens.Keyword,
  192. 'CURRENT_TIMESTAMP': tokens.Keyword,
  193. 'CURRENT_USER': tokens.Keyword,
  194. 'CURSOR': tokens.Keyword,
  195. 'CURSOR_NAME': tokens.Keyword,
  196. 'CYCLE': tokens.Keyword,
  197. 'DATA': tokens.Keyword,
  198. 'DATABASE': tokens.Keyword,
  199. 'DATETIME_INTERVAL_CODE': tokens.Keyword,
  200. 'DATETIME_INTERVAL_PRECISION': tokens.Keyword,
  201. 'DAY': tokens.Keyword,
  202. 'DEALLOCATE': tokens.Keyword,
  203. 'DECLARE': tokens.Keyword,
  204. 'DEFAULT': tokens.Keyword,
  205. 'DEFAULTS': tokens.Keyword,
  206. 'DEFERRABLE': tokens.Keyword,
  207. 'DEFERRED': tokens.Keyword,
  208. 'DEFINED': tokens.Keyword,
  209. 'DEFINER': tokens.Keyword,
  210. 'DELIMITER': tokens.Keyword,
  211. 'DELIMITERS': tokens.Keyword,
  212. 'DEREF': tokens.Keyword,
  213. 'DESC': tokens.Keyword.Order,
  214. 'DESCRIBE': tokens.Keyword,
  215. 'DESCRIPTOR': tokens.Keyword,
  216. 'DESTROY': tokens.Keyword,
  217. 'DESTRUCTOR': tokens.Keyword,
  218. 'DETERMINISTIC': tokens.Keyword,
  219. 'DIAGNOSTICS': tokens.Keyword,
  220. 'DICTIONARY': tokens.Keyword,
  221. 'DISABLE': tokens.Keyword,
  222. 'DISCONNECT': tokens.Keyword,
  223. 'DISPATCH': tokens.Keyword,
  224. 'DO': tokens.Keyword,
  225. 'DOMAIN': tokens.Keyword,
  226. 'DYNAMIC': tokens.Keyword,
  227. 'DYNAMIC_FUNCTION': tokens.Keyword,
  228. 'DYNAMIC_FUNCTION_CODE': tokens.Keyword,
  229. 'EACH': tokens.Keyword,
  230. 'ENABLE': tokens.Keyword,
  231. 'ENCODING': tokens.Keyword,
  232. 'ENCRYPTED': tokens.Keyword,
  233. 'END-EXEC': tokens.Keyword,
  234. 'ENGINE': tokens.Keyword,
  235. 'EQUALS': tokens.Keyword,
  236. 'ESCAPE': tokens.Keyword,
  237. 'EVERY': tokens.Keyword,
  238. 'EXCEPT': tokens.Keyword,
  239. 'EXCEPTION': tokens.Keyword,
  240. 'EXCLUDING': tokens.Keyword,
  241. 'EXCLUSIVE': tokens.Keyword,
  242. 'EXEC': tokens.Keyword,
  243. 'EXECUTE': tokens.Keyword,
  244. 'EXISTING': tokens.Keyword,
  245. 'EXISTS': tokens.Keyword,
  246. 'EXPLAIN': tokens.Keyword,
  247. 'EXTERNAL': tokens.Keyword,
  248. 'EXTRACT': tokens.Keyword,
  249. 'FALSE': tokens.Keyword,
  250. 'FETCH': tokens.Keyword,
  251. 'FILE': tokens.Keyword,
  252. 'FINAL': tokens.Keyword,
  253. 'FIRST': tokens.Keyword,
  254. 'FORCE': tokens.Keyword,
  255. 'FOREACH': tokens.Keyword,
  256. 'FOREIGN': tokens.Keyword,
  257. 'FORTRAN': tokens.Keyword,
  258. 'FORWARD': tokens.Keyword,
  259. 'FOUND': tokens.Keyword,
  260. 'FREE': tokens.Keyword,
  261. 'FREEZE': tokens.Keyword,
  262. 'FULL': tokens.Keyword,
  263. 'FUNCTION': tokens.Keyword,
  264. # 'G': tokens.Keyword,
  265. 'GENERAL': tokens.Keyword,
  266. 'GENERATED': tokens.Keyword,
  267. 'GET': tokens.Keyword,
  268. 'GLOBAL': tokens.Keyword,
  269. 'GO': tokens.Keyword,
  270. 'GOTO': tokens.Keyword,
  271. 'GRANT': tokens.Keyword,
  272. 'GRANTED': tokens.Keyword,
  273. 'GROUPING': tokens.Keyword,
  274. 'HAVING': tokens.Keyword,
  275. 'HIERARCHY': tokens.Keyword,
  276. 'HOLD': tokens.Keyword,
  277. 'HOUR': tokens.Keyword,
  278. 'HOST': tokens.Keyword,
  279. 'IDENTIFIED': tokens.Keyword,
  280. 'IDENTITY': tokens.Keyword,
  281. 'IGNORE': tokens.Keyword,
  282. 'ILIKE': tokens.Keyword,
  283. 'IMMEDIATE': tokens.Keyword,
  284. 'IMMUTABLE': tokens.Keyword,
  285. 'IMPLEMENTATION': tokens.Keyword,
  286. 'IMPLICIT': tokens.Keyword,
  287. 'INCLUDING': tokens.Keyword,
  288. 'INCREMENT': tokens.Keyword,
  289. 'INDEX': tokens.Keyword,
  290. 'INDITCATOR': tokens.Keyword,
  291. 'INFIX': tokens.Keyword,
  292. 'INHERITS': tokens.Keyword,
  293. 'INITIAL': tokens.Keyword,
  294. 'INITIALIZE': tokens.Keyword,
  295. 'INITIALLY': tokens.Keyword,
  296. 'INOUT': tokens.Keyword,
  297. 'INPUT': tokens.Keyword,
  298. 'INSENSITIVE': tokens.Keyword,
  299. 'INSTANTIABLE': tokens.Keyword,
  300. 'INSTEAD': tokens.Keyword,
  301. 'INTERSECT': tokens.Keyword,
  302. 'INTO': tokens.Keyword,
  303. 'INVOKER': tokens.Keyword,
  304. 'IS': tokens.Keyword,
  305. 'ISNULL': tokens.Keyword,
  306. 'ISOLATION': tokens.Keyword,
  307. 'ITERATE': tokens.Keyword,
  308. # 'K': tokens.Keyword,
  309. 'KEY': tokens.Keyword,
  310. 'KEY_MEMBER': tokens.Keyword,
  311. 'KEY_TYPE': tokens.Keyword,
  312. 'LANCOMPILER': tokens.Keyword,
  313. 'LANGUAGE': tokens.Keyword,
  314. 'LARGE': tokens.Keyword,
  315. 'LAST': tokens.Keyword,
  316. 'LATERAL': tokens.Keyword,
  317. 'LEADING': tokens.Keyword,
  318. 'LENGTH': tokens.Keyword,
  319. 'LESS': tokens.Keyword,
  320. 'LEVEL': tokens.Keyword,
  321. 'LIMIT': tokens.Keyword,
  322. 'LISTEN': tokens.Keyword,
  323. 'LOAD': tokens.Keyword,
  324. 'LOCAL': tokens.Keyword,
  325. 'LOCALTIME': tokens.Keyword,
  326. 'LOCALTIMESTAMP': tokens.Keyword,
  327. 'LOCATION': tokens.Keyword,
  328. 'LOCATOR': tokens.Keyword,
  329. 'LOCK': tokens.Keyword,
  330. 'LOWER': tokens.Keyword,
  331. # 'M': tokens.Keyword,
  332. 'MAP': tokens.Keyword,
  333. 'MATCH': tokens.Keyword,
  334. 'MAXEXTENTS': tokens.Keyword,
  335. 'MAXVALUE': tokens.Keyword,
  336. 'MESSAGE_LENGTH': tokens.Keyword,
  337. 'MESSAGE_OCTET_LENGTH': tokens.Keyword,
  338. 'MESSAGE_TEXT': tokens.Keyword,
  339. 'METHOD': tokens.Keyword,
  340. 'MINUTE': tokens.Keyword,
  341. 'MINUS': tokens.Keyword,
  342. 'MINVALUE': tokens.Keyword,
  343. 'MOD': tokens.Keyword,
  344. 'MODE': tokens.Keyword,
  345. 'MODIFIES': tokens.Keyword,
  346. 'MODIFY': tokens.Keyword,
  347. 'MONTH': tokens.Keyword,
  348. 'MORE': tokens.Keyword,
  349. 'MOVE': tokens.Keyword,
  350. 'MUMPS': tokens.Keyword,
  351. 'NAMES': tokens.Keyword,
  352. 'NATIONAL': tokens.Keyword,
  353. 'NATURAL': tokens.Keyword,
  354. 'NCHAR': tokens.Keyword,
  355. 'NCLOB': tokens.Keyword,
  356. 'NEW': tokens.Keyword,
  357. 'NEXT': tokens.Keyword,
  358. 'NO': tokens.Keyword,
  359. 'NOAUDIT': tokens.Keyword,
  360. 'NOCOMPRESS': tokens.Keyword,
  361. 'NOCREATEDB': tokens.Keyword,
  362. 'NOCREATEUSER': tokens.Keyword,
  363. 'NONE': tokens.Keyword,
  364. 'NOT': tokens.Keyword,
  365. 'NOTFOUND': tokens.Keyword,
  366. 'NOTHING': tokens.Keyword,
  367. 'NOTIFY': tokens.Keyword,
  368. 'NOTNULL': tokens.Keyword,
  369. 'NOWAIT': tokens.Keyword,
  370. 'NULL': tokens.Keyword,
  371. 'NULLABLE': tokens.Keyword,
  372. 'NULLIF': tokens.Keyword,
  373. 'OBJECT': tokens.Keyword,
  374. 'OCTET_LENGTH': tokens.Keyword,
  375. 'OF': tokens.Keyword,
  376. 'OFF': tokens.Keyword,
  377. 'OFFLINE': tokens.Keyword,
  378. 'OFFSET': tokens.Keyword,
  379. 'OIDS': tokens.Keyword,
  380. 'OLD': tokens.Keyword,
  381. 'ONLINE': tokens.Keyword,
  382. 'ONLY': tokens.Keyword,
  383. 'OPEN': tokens.Keyword,
  384. 'OPERATION': tokens.Keyword,
  385. 'OPERATOR': tokens.Keyword,
  386. 'OPTION': tokens.Keyword,
  387. 'OPTIONS': tokens.Keyword,
  388. 'ORDINALITY': tokens.Keyword,
  389. 'OUT': tokens.Keyword,
  390. 'OUTPUT': tokens.Keyword,
  391. 'OVERLAPS': tokens.Keyword,
  392. 'OVERLAY': tokens.Keyword,
  393. 'OVERRIDING': tokens.Keyword,
  394. 'OWNER': tokens.Keyword,
  395. 'QUARTER': tokens.Keyword,
  396. 'PAD': tokens.Keyword,
  397. 'PARAMETER': tokens.Keyword,
  398. 'PARAMETERS': tokens.Keyword,
  399. 'PARAMETER_MODE': tokens.Keyword,
  400. 'PARAMETER_NAME': tokens.Keyword,
  401. 'PARAMETER_ORDINAL_POSITION': tokens.Keyword,
  402. 'PARAMETER_SPECIFIC_CATALOG': tokens.Keyword,
  403. 'PARAMETER_SPECIFIC_NAME': tokens.Keyword,
  404. 'PARAMETER_SPECIFIC_SCHEMA': tokens.Keyword,
  405. 'PARTIAL': tokens.Keyword,
  406. 'PASCAL': tokens.Keyword,
  407. 'PCTFREE': tokens.Keyword,
  408. 'PENDANT': tokens.Keyword,
  409. 'PLACING': tokens.Keyword,
  410. 'PLI': tokens.Keyword,
  411. 'POSITION': tokens.Keyword,
  412. 'POSTFIX': tokens.Keyword,
  413. 'PRECISION': tokens.Keyword,
  414. 'PREFIX': tokens.Keyword,
  415. 'PREORDER': tokens.Keyword,
  416. 'PREPARE': tokens.Keyword,
  417. 'PRESERVE': tokens.Keyword,
  418. 'PRIMARY': tokens.Keyword,
  419. 'PRIOR': tokens.Keyword,
  420. 'PRIVILEGES': tokens.Keyword,
  421. 'PROCEDURAL': tokens.Keyword,
  422. 'PROCEDURE': tokens.Keyword,
  423. 'PUBLIC': tokens.Keyword,
  424. 'RAISE': tokens.Keyword,
  425. 'RAW': tokens.Keyword,
  426. 'READ': tokens.Keyword,
  427. 'READS': tokens.Keyword,
  428. 'RECHECK': tokens.Keyword,
  429. 'RECURSIVE': tokens.Keyword,
  430. 'REF': tokens.Keyword,
  431. 'REFERENCES': tokens.Keyword,
  432. 'REFERENCING': tokens.Keyword,
  433. 'REINDEX': tokens.Keyword,
  434. 'RELATIVE': tokens.Keyword,
  435. 'RENAME': tokens.Keyword,
  436. 'REPEATABLE': tokens.Keyword,
  437. 'RESET': tokens.Keyword,
  438. 'RESOURCE': tokens.Keyword,
  439. 'RESTART': tokens.Keyword,
  440. 'RESTRICT': tokens.Keyword,
  441. 'RESULT': tokens.Keyword,
  442. 'RETURN': tokens.Keyword,
  443. 'RETURNED_LENGTH': tokens.Keyword,
  444. 'RETURNED_OCTET_LENGTH': tokens.Keyword,
  445. 'RETURNED_SQLSTATE': tokens.Keyword,
  446. 'RETURNING': tokens.Keyword,
  447. 'RETURNS': tokens.Keyword,
  448. 'REVOKE': tokens.Keyword,
  449. 'RIGHT': tokens.Keyword,
  450. 'ROLE': tokens.Keyword,
  451. 'ROLLBACK': tokens.Keyword.DML,
  452. 'ROLLUP': tokens.Keyword,
  453. 'ROUTINE': tokens.Keyword,
  454. 'ROUTINE_CATALOG': tokens.Keyword,
  455. 'ROUTINE_NAME': tokens.Keyword,
  456. 'ROUTINE_SCHEMA': tokens.Keyword,
  457. 'ROW': tokens.Keyword,
  458. 'ROWS': tokens.Keyword,
  459. 'ROW_COUNT': tokens.Keyword,
  460. 'RULE': tokens.Keyword,
  461. 'SAVE_POINT': tokens.Keyword,
  462. 'SCALE': tokens.Keyword,
  463. 'SCHEMA': tokens.Keyword,
  464. 'SCHEMA_NAME': tokens.Keyword,
  465. 'SCOPE': tokens.Keyword,
  466. 'SCROLL': tokens.Keyword,
  467. 'SEARCH': tokens.Keyword,
  468. 'SECOND': tokens.Keyword,
  469. 'SECURITY': tokens.Keyword,
  470. 'SELF': tokens.Keyword,
  471. 'SENSITIVE': tokens.Keyword,
  472. 'SEQUENCE': tokens.Keyword,
  473. 'SERIALIZABLE': tokens.Keyword,
  474. 'SERVER_NAME': tokens.Keyword,
  475. 'SESSION': tokens.Keyword,
  476. 'SESSION_USER': tokens.Keyword,
  477. 'SETOF': tokens.Keyword,
  478. 'SETS': tokens.Keyword,
  479. 'SHARE': tokens.Keyword,
  480. 'SHOW': tokens.Keyword,
  481. 'SIMILAR': tokens.Keyword,
  482. 'SIMPLE': tokens.Keyword,
  483. 'SIZE': tokens.Keyword,
  484. 'SOME': tokens.Keyword,
  485. 'SOURCE': tokens.Keyword,
  486. 'SPACE': tokens.Keyword,
  487. 'SPECIFIC': tokens.Keyword,
  488. 'SPECIFICTYPE': tokens.Keyword,
  489. 'SPECIFIC_NAME': tokens.Keyword,
  490. 'SQL': tokens.Keyword,
  491. 'SQLBUF': tokens.Keyword,
  492. 'SQLCODE': tokens.Keyword,
  493. 'SQLERROR': tokens.Keyword,
  494. 'SQLEXCEPTION': tokens.Keyword,
  495. 'SQLSTATE': tokens.Keyword,
  496. 'SQLWARNING': tokens.Keyword,
  497. 'STABLE': tokens.Keyword,
  498. 'START': tokens.Keyword.DML,
  499. # 'STATE': tokens.Keyword,
  500. 'STATEMENT': tokens.Keyword,
  501. 'STATIC': tokens.Keyword,
  502. 'STATISTICS': tokens.Keyword,
  503. 'STDIN': tokens.Keyword,
  504. 'STDOUT': tokens.Keyword,
  505. 'STORAGE': tokens.Keyword,
  506. 'STRICT': tokens.Keyword,
  507. 'STRUCTURE': tokens.Keyword,
  508. 'STYPE': tokens.Keyword,
  509. 'SUBCLASS_ORIGIN': tokens.Keyword,
  510. 'SUBLIST': tokens.Keyword,
  511. 'SUBSTRING': tokens.Keyword,
  512. 'SUCCESSFUL': tokens.Keyword,
  513. 'SUM': tokens.Keyword,
  514. 'SYMMETRIC': tokens.Keyword,
  515. 'SYNONYM': tokens.Keyword,
  516. 'SYSID': tokens.Keyword,
  517. 'SYSTEM': tokens.Keyword,
  518. 'SYSTEM_USER': tokens.Keyword,
  519. 'TABLE': tokens.Keyword,
  520. 'TABLE_NAME': tokens.Keyword,
  521. 'TEMP': tokens.Keyword,
  522. 'TEMPLATE': tokens.Keyword,
  523. 'TEMPORARY': tokens.Keyword,
  524. 'TERMINATE': tokens.Keyword,
  525. 'THAN': tokens.Keyword,
  526. 'TIMESTAMP': tokens.Keyword,
  527. 'TIMEZONE_HOUR': tokens.Keyword,
  528. 'TIMEZONE_MINUTE': tokens.Keyword,
  529. 'TO': tokens.Keyword,
  530. 'TOAST': tokens.Keyword,
  531. 'TRAILING': tokens.Keyword,
  532. 'TRANSATION': tokens.Keyword,
  533. 'TRANSACTIONS_COMMITTED': tokens.Keyword,
  534. 'TRANSACTIONS_ROLLED_BACK': tokens.Keyword,
  535. 'TRANSATION_ACTIVE': tokens.Keyword,
  536. 'TRANSFORM': tokens.Keyword,
  537. 'TRANSFORMS': tokens.Keyword,
  538. 'TRANSLATE': tokens.Keyword,
  539. 'TRANSLATION': tokens.Keyword,
  540. 'TREAT': tokens.Keyword,
  541. 'TRIGGER': tokens.Keyword,
  542. 'TRIGGER_CATALOG': tokens.Keyword,
  543. 'TRIGGER_NAME': tokens.Keyword,
  544. 'TRIGGER_SCHEMA': tokens.Keyword,
  545. 'TRIM': tokens.Keyword,
  546. 'TRUE': tokens.Keyword,
  547. 'TRUNCATE': tokens.Keyword,
  548. 'TRUSTED': tokens.Keyword,
  549. 'TYPE': tokens.Keyword,
  550. 'UID': tokens.Keyword,
  551. 'UNCOMMITTED': tokens.Keyword,
  552. 'UNDER': tokens.Keyword,
  553. 'UNENCRYPTED': tokens.Keyword,
  554. 'UNION': tokens.Keyword,
  555. 'UNIQUE': tokens.Keyword,
  556. 'UNKNOWN': tokens.Keyword,
  557. 'UNLISTEN': tokens.Keyword,
  558. 'UNNAMED': tokens.Keyword,
  559. 'UNNEST': tokens.Keyword,
  560. 'UNTIL': tokens.Keyword,
  561. 'UPPER': tokens.Keyword,
  562. 'USAGE': tokens.Keyword,
  563. 'USE': tokens.Keyword,
  564. 'USER': tokens.Keyword,
  565. 'USER_DEFINED_TYPE_CATALOG': tokens.Keyword,
  566. 'USER_DEFINED_TYPE_NAME': tokens.Keyword,
  567. 'USER_DEFINED_TYPE_SCHEMA': tokens.Keyword,
  568. 'USING': tokens.Keyword,
  569. 'VACUUM': tokens.Keyword,
  570. 'VALID': tokens.Keyword,
  571. 'VALIDATE': tokens.Keyword,
  572. 'VALIDATOR': tokens.Keyword,
  573. 'VALUES': tokens.Keyword,
  574. 'VARIABLE': tokens.Keyword,
  575. 'VERBOSE': tokens.Keyword,
  576. 'VERSION': tokens.Keyword,
  577. 'VIEW': tokens.Keyword,
  578. 'VOLATILE': tokens.Keyword,
  579. 'WEEK': tokens.Keyword,
  580. 'WHENEVER': tokens.Keyword,
  581. 'WITH': tokens.Keyword.CTE,
  582. 'WITHOUT': tokens.Keyword,
  583. 'WORK': tokens.Keyword,
  584. 'WRITE': tokens.Keyword,
  585. 'YEAR': tokens.Keyword,
  586. 'ZONE': tokens.Keyword,
  587. # Name.Builtin
  588. 'ARRAY': tokens.Name.Builtin,
  589. 'BIGINT': tokens.Name.Builtin,
  590. 'BINARY': tokens.Name.Builtin,
  591. 'BIT': tokens.Name.Builtin,
  592. 'BLOB': tokens.Name.Builtin,
  593. 'BOOLEAN': tokens.Name.Builtin,
  594. 'CHAR': tokens.Name.Builtin,
  595. 'CHARACTER': tokens.Name.Builtin,
  596. 'DATE': tokens.Name.Builtin,
  597. 'DEC': tokens.Name.Builtin,
  598. 'DECIMAL': tokens.Name.Builtin,
  599. 'FILE_TYPE': tokens.Name.Builtin,
  600. 'FLOAT': tokens.Name.Builtin,
  601. 'INT': tokens.Name.Builtin,
  602. 'INT8': tokens.Name.Builtin,
  603. 'INTEGER': tokens.Name.Builtin,
  604. 'INTERVAL': tokens.Name.Builtin,
  605. 'LONG': tokens.Name.Builtin,
  606. 'NATURALN': tokens.Name.Builtin,
  607. 'NVARCHAR': tokens.Name.Builtin,
  608. 'NUMBER': tokens.Name.Builtin,
  609. 'NUMERIC': tokens.Name.Builtin,
  610. 'PLS_INTEGER': tokens.Name.Builtin,
  611. 'POSITIVE': tokens.Name.Builtin,
  612. 'POSITIVEN': tokens.Name.Builtin,
  613. 'REAL': tokens.Name.Builtin,
  614. 'ROWID': tokens.Name.Builtin,
  615. 'ROWLABEL': tokens.Name.Builtin,
  616. 'ROWNUM': tokens.Name.Builtin,
  617. 'SERIAL': tokens.Name.Builtin,
  618. 'SERIAL8': tokens.Name.Builtin,
  619. 'SIGNED': tokens.Name.Builtin,
  620. 'SIGNTYPE': tokens.Name.Builtin,
  621. 'SIMPLE_DOUBLE': tokens.Name.Builtin,
  622. 'SIMPLE_FLOAT': tokens.Name.Builtin,
  623. 'SIMPLE_INTEGER': tokens.Name.Builtin,
  624. 'SMALLINT': tokens.Name.Builtin,
  625. 'SYS_REFCURSOR': tokens.Name.Builtin,
  626. 'SYSDATE': tokens.Name,
  627. 'TEXT': tokens.Name.Builtin,
  628. 'TINYINT': tokens.Name.Builtin,
  629. 'UNSIGNED': tokens.Name.Builtin,
  630. 'UROWID': tokens.Name.Builtin,
  631. 'UTL_FILE': tokens.Name.Builtin,
  632. 'VARCHAR': tokens.Name.Builtin,
  633. 'VARCHAR2': tokens.Name.Builtin,
  634. 'VARYING': tokens.Name.Builtin,
  635. }
  636. KEYWORDS_COMMON = {
  637. 'SELECT': tokens.Keyword.DML,
  638. 'INSERT': tokens.Keyword.DML,
  639. 'DELETE': tokens.Keyword.DML,
  640. 'UPDATE': tokens.Keyword.DML,
  641. 'UPSERT': tokens.Keyword.DML,
  642. 'REPLACE': tokens.Keyword.DML,
  643. 'MERGE': tokens.Keyword.DML,
  644. 'DROP': tokens.Keyword.DDL,
  645. 'CREATE': tokens.Keyword.DDL,
  646. 'ALTER': tokens.Keyword.DDL,
  647. 'WHERE': tokens.Keyword,
  648. 'FROM': tokens.Keyword,
  649. 'INNER': tokens.Keyword,
  650. 'JOIN': tokens.Keyword,
  651. 'STRAIGHT_JOIN': tokens.Keyword,
  652. 'AND': tokens.Keyword,
  653. 'OR': tokens.Keyword,
  654. 'LIKE': tokens.Keyword,
  655. 'ON': tokens.Keyword,
  656. 'IN': tokens.Keyword,
  657. 'SET': tokens.Keyword,
  658. 'BY': tokens.Keyword,
  659. 'GROUP': tokens.Keyword,
  660. 'ORDER': tokens.Keyword,
  661. 'LEFT': tokens.Keyword,
  662. 'OUTER': tokens.Keyword,
  663. 'FULL': tokens.Keyword,
  664. 'IF': tokens.Keyword,
  665. 'END': tokens.Keyword,
  666. 'THEN': tokens.Keyword,
  667. 'LOOP': tokens.Keyword,
  668. 'AS': tokens.Keyword,
  669. 'ELSE': tokens.Keyword,
  670. 'FOR': tokens.Keyword,
  671. 'WHILE': tokens.Keyword,
  672. 'CASE': tokens.Keyword,
  673. 'WHEN': tokens.Keyword,
  674. 'MIN': tokens.Keyword,
  675. 'MAX': tokens.Keyword,
  676. 'DISTINCT': tokens.Keyword,
  677. }
  678. KEYWORDS_ORACLE = {
  679. 'ARCHIVE': tokens.Keyword,
  680. 'ARCHIVELOG': tokens.Keyword,
  681. 'BACKUP': tokens.Keyword,
  682. 'BECOME': tokens.Keyword,
  683. 'BLOCK': tokens.Keyword,
  684. 'BODY': tokens.Keyword,
  685. 'CANCEL': tokens.Keyword,
  686. 'CHANGE': tokens.Keyword,
  687. 'COMPILE': tokens.Keyword,
  688. 'CONTENTS': tokens.Keyword,
  689. 'CONTROLFILE': tokens.Keyword,
  690. 'DATAFILE': tokens.Keyword,
  691. 'DBA': tokens.Keyword,
  692. 'DISMOUNT': tokens.Keyword,
  693. 'DOUBLE': tokens.Keyword,
  694. 'DUMP': tokens.Keyword,
  695. 'ELSIF': tokens.Keyword,
  696. 'EVENTS': tokens.Keyword,
  697. 'EXCEPTIONS': tokens.Keyword,
  698. 'EXPLAIN': tokens.Keyword,
  699. 'EXTENT': tokens.Keyword,
  700. 'EXTERNALLY': tokens.Keyword,
  701. 'FLUSH': tokens.Keyword,
  702. 'FREELIST': tokens.Keyword,
  703. 'FREELISTS': tokens.Keyword,
  704. # groups seems too common as table name
  705. # 'GROUPS': tokens.Keyword,
  706. 'INDICATOR': tokens.Keyword,
  707. 'INITRANS': tokens.Keyword,
  708. 'INSTANCE': tokens.Keyword,
  709. 'LAYER': tokens.Keyword,
  710. 'LINK': tokens.Keyword,
  711. 'LISTS': tokens.Keyword,
  712. 'LOGFILE': tokens.Keyword,
  713. 'MANAGE': tokens.Keyword,
  714. 'MANUAL': tokens.Keyword,
  715. 'MAXDATAFILES': tokens.Keyword,
  716. 'MAXINSTANCES': tokens.Keyword,
  717. 'MAXLOGFILES': tokens.Keyword,
  718. 'MAXLOGHISTORY': tokens.Keyword,
  719. 'MAXLOGMEMBERS': tokens.Keyword,
  720. 'MAXTRANS': tokens.Keyword,
  721. 'MINEXTENTS': tokens.Keyword,
  722. 'MODULE': tokens.Keyword,
  723. 'MOUNT': tokens.Keyword,
  724. 'NOARCHIVELOG': tokens.Keyword,
  725. 'NOCACHE': tokens.Keyword,
  726. 'NOCYCLE': tokens.Keyword,
  727. 'NOMAXVALUE': tokens.Keyword,
  728. 'NOMINVALUE': tokens.Keyword,
  729. 'NOORDER': tokens.Keyword,
  730. 'NORESETLOGS': tokens.Keyword,
  731. 'NORMAL': tokens.Keyword,
  732. 'NOSORT': tokens.Keyword,
  733. 'OPTIMAL': tokens.Keyword,
  734. 'OWN': tokens.Keyword,
  735. 'PACKAGE': tokens.Keyword,
  736. 'PARALLEL': tokens.Keyword,
  737. 'PCTINCREASE': tokens.Keyword,
  738. 'PCTUSED': tokens.Keyword,
  739. 'PLAN': tokens.Keyword,
  740. 'PRIVATE': tokens.Keyword,
  741. 'PROFILE': tokens.Keyword,
  742. 'QUOTA': tokens.Keyword,
  743. 'RECOVER': tokens.Keyword,
  744. 'RESETLOGS': tokens.Keyword,
  745. 'RESTRICTED': tokens.Keyword,
  746. 'REUSE': tokens.Keyword,
  747. 'ROLES': tokens.Keyword,
  748. 'SAVEPOINT': tokens.Keyword,
  749. 'SCN': tokens.Keyword,
  750. 'SECTION': tokens.Keyword,
  751. 'SEGMENT': tokens.Keyword,
  752. 'SHARED': tokens.Keyword,
  753. 'SNAPSHOT': tokens.Keyword,
  754. 'SORT': tokens.Keyword,
  755. 'STATEMENT_ID': tokens.Keyword,
  756. 'STOP': tokens.Keyword,
  757. 'SWITCH': tokens.Keyword,
  758. 'TABLES': tokens.Keyword,
  759. 'TABLESPACE': tokens.Keyword,
  760. 'THREAD': tokens.Keyword,
  761. 'TIME': tokens.Keyword,
  762. 'TRACING': tokens.Keyword,
  763. 'TRANSACTION': tokens.Keyword,
  764. 'TRIGGERS': tokens.Keyword,
  765. 'UNLIMITED': tokens.Keyword,
  766. 'UNLOCK': tokens.Keyword,
  767. }
  768. # PostgreSQL Syntax
  769. KEYWORDS_PLPGSQL = {
  770. 'CONFLICT': tokens.Keyword,
  771. 'WINDOW': tokens.Keyword,
  772. 'PARTITION': tokens.Keyword,
  773. 'OVER': tokens.Keyword,
  774. 'PERFORM': tokens.Keyword,
  775. 'NOTICE': tokens.Keyword,
  776. 'PLPGSQL': tokens.Keyword,
  777. 'INHERIT': tokens.Keyword,
  778. 'INDEXES': tokens.Keyword,
  779. 'ON_ERROR_STOP': tokens.Keyword,
  780. 'BYTEA': tokens.Keyword,
  781. 'BIGSERIAL': tokens.Keyword,
  782. 'BIT VARYING': tokens.Keyword,
  783. 'BOX': tokens.Keyword,
  784. 'CHARACTER': tokens.Keyword,
  785. 'CHARACTER VARYING': tokens.Keyword,
  786. 'CIDR': tokens.Keyword,
  787. 'CIRCLE': tokens.Keyword,
  788. 'DOUBLE PRECISION': tokens.Keyword,
  789. 'INET': tokens.Keyword,
  790. 'JSON': tokens.Keyword,
  791. 'JSONB': tokens.Keyword,
  792. 'LINE': tokens.Keyword,
  793. 'LSEG': tokens.Keyword,
  794. 'MACADDR': tokens.Keyword,
  795. 'MONEY': tokens.Keyword,
  796. 'PATH': tokens.Keyword,
  797. 'PG_LSN': tokens.Keyword,
  798. 'POINT': tokens.Keyword,
  799. 'POLYGON': tokens.Keyword,
  800. 'SMALLSERIAL': tokens.Keyword,
  801. 'TSQUERY': tokens.Keyword,
  802. 'TSVECTOR': tokens.Keyword,
  803. 'TXID_SNAPSHOT': tokens.Keyword,
  804. 'UUID': tokens.Keyword,
  805. 'XML': tokens.Keyword,
  806. 'FOR': tokens.Keyword,
  807. 'IN': tokens.Keyword,
  808. 'LOOP': tokens.Keyword,
  809. }
  810. # Hive Syntax
  811. KEYWORDS_HQL = {
  812. 'EXPLODE': tokens.Keyword,
  813. 'DIRECTORY': tokens.Keyword,
  814. 'DISTRIBUTE': tokens.Keyword,
  815. 'INCLUDE': tokens.Keyword,
  816. 'LOCATE': tokens.Keyword,
  817. 'OVERWRITE': tokens.Keyword,
  818. 'POSEXPLODE': tokens.Keyword,
  819. 'ARRAY_CONTAINS': tokens.Keyword,
  820. 'CMP': tokens.Keyword,
  821. 'COLLECT_LIST': tokens.Keyword,
  822. 'CONCAT': tokens.Keyword,
  823. 'CONDITION': tokens.Keyword,
  824. 'DATE_ADD': tokens.Keyword,
  825. 'DATE_SUB': tokens.Keyword,
  826. 'DECODE': tokens.Keyword,
  827. 'DBMS_OUTPUT': tokens.Keyword,
  828. 'ELEMENTS': tokens.Keyword,
  829. 'EXCHANGE': tokens.Keyword,
  830. 'EXTENDED': tokens.Keyword,
  831. 'FLOOR': tokens.Keyword,
  832. 'FOLLOWING': tokens.Keyword,
  833. 'FROM_UNIXTIME': tokens.Keyword,
  834. 'FTP': tokens.Keyword,
  835. 'HOUR': tokens.Keyword,
  836. 'INLINE': tokens.Keyword,
  837. 'INSTR': tokens.Keyword,
  838. 'LEN': tokens.Keyword,
  839. 'MAXELEMENT': tokens.Keyword,
  840. 'MAXINDEX': tokens.Keyword,
  841. 'MAX_PART_DATE': tokens.Keyword,
  842. 'MAX_PART_INT': tokens.Keyword,
  843. 'MAX_PART_STRING': tokens.Keyword,
  844. 'MINELEMENT': tokens.Keyword,
  845. 'MININDEX': tokens.Keyword,
  846. 'MIN_PART_DATE': tokens.Keyword,
  847. 'MIN_PART_INT': tokens.Keyword,
  848. 'MIN_PART_STRING': tokens.Keyword,
  849. 'NOW': tokens.Keyword,
  850. 'NVL': tokens.Keyword,
  851. 'NVL2': tokens.Keyword,
  852. 'PARSE_URL_TUPLE': tokens.Keyword,
  853. 'PART_LOC': tokens.Keyword,
  854. 'PART_COUNT': tokens.Keyword,
  855. 'PART_COUNT_BY': tokens.Keyword,
  856. 'PRINT': tokens.Keyword,
  857. 'PUT_LINE': tokens.Keyword,
  858. 'RANGE': tokens.Keyword,
  859. 'REDUCE': tokens.Keyword,
  860. 'REGEXP_REPLACE': tokens.Keyword,
  861. 'RESIGNAL': tokens.Keyword,
  862. 'RTRIM': tokens.Keyword,
  863. 'SIGN': tokens.Keyword,
  864. 'SIGNAL': tokens.Keyword,
  865. 'SIN': tokens.Keyword,
  866. 'SPLIT': tokens.Keyword,
  867. 'SQRT': tokens.Keyword,
  868. 'STACK': tokens.Keyword,
  869. 'STR': tokens.Keyword,
  870. 'SUBSTR': tokens.Keyword,
  871. 'SUMMARY': tokens.Keyword,
  872. 'TBLPROPERTIES': tokens.Keyword,
  873. 'TIMESTAMP_ISO': tokens.Keyword,
  874. 'TO_CHAR': tokens.Keyword,
  875. 'TO_DATE': tokens.Keyword,
  876. 'TO_TIMESTAMP': tokens.Keyword,
  877. 'TRUNC': tokens.Keyword,
  878. 'UNBOUNDED': tokens.Keyword,
  879. 'UNIQUEJOIN': tokens.Keyword,
  880. 'UNIX_TIMESTAMP': tokens.Keyword,
  881. 'UTC_TIMESTAMP': tokens.Keyword,
  882. 'VIEWS': tokens.Keyword,
  883. 'EXIT': tokens.Keyword,
  884. 'BREAK': tokens.Keyword,
  885. 'LEAVE': tokens.Keyword,
  886. }