Funktionierender Prototyp des Serious Games zur Vermittlung von Wissen zu Software-Engineering-Arbeitsmodellen.
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

keywords.py 29KB

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