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 25KB

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