SQLv1Antlr4.g.in 54 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021102210231024102510261027102810291030103110321033103410351036103710381039104010411042104310441045104610471048104910501051105210531054105510561057105810591060106110621063106410651066106710681069107010711072107310741075107610771078107910801081108210831084108510861087108810891090109110921093109410951096109710981099110011011102110311041105110611071108110911101111111211131114111511161117111811191120112111221123112411251126112711281129113011311132113311341135113611371138113911401141114211431144114511461147114811491150115111521153115411551156115711581159116011611162116311641165116611671168116911701171117211731174117511761177117811791180118111821183118411851186118711881189119011911192119311941195119611971198119912001201120212031204120512061207120812091210121112121213121412151216121712181219122012211222122312241225122612271228122912301231123212331234123512361237123812391240124112421243124412451246124712481249125012511252125312541255125612571258125912601261126212631264126512661267126812691270127112721273127412751276127712781279128012811282128312841285128612871288128912901291129212931294129512961297129812991300130113021303130413051306130713081309131013111312131313141315131613171318131913201321132213231324132513261327132813291330133113321333133413351336133713381339134013411342134313441345134613471348134913501351135213531354135513561357135813591360136113621363136413651366136713681369137013711372137313741375137613771378137913801381138213831384138513861387138813891390139113921393139413951396139713981399140014011402140314041405140614071408140914101411141214131414141514161417141814191420142114221423142414251426142714281429143014311432143314341435143614371438143914401441144214431444144514461447144814491450145114521453145414551456145714581459146014611462146314641465146614671468146914701471147214731474147514761477147814791480148114821483148414851486148714881489149014911492149314941495149614971498149915001501150215031504150515061507150815091510151115121513151415151516151715181519152015211522152315241525152615271528152915301531153215331534153515361537153815391540154115421543154415451546154715481549155015511552155315541555155615571558155915601561156215631564156515661567156815691570157115721573157415751576157715781579158015811582158315841585158615871588158915901591159215931594159515961597159815991600160116021603160416051606160716081609161016111612161316141615161616171618161916201621162216231624162516261627162816291630163116321633163416351636163716381639164016411642164316441645164616471648164916501651165216531654165516561657165816591660166116621663166416651666166716681669167016711672167316741675167616771678167916801681168216831684168516861687168816891690169116921693169416951696169716981699170017011702170317041705170617071708170917101711171217131714171517161717171817191720172117221723172417251726172717281729173017311732173317341735173617371738173917401741174217431744174517461747174817491750175117521753175417551756175717581759176017611762176317641765176617671768176917701771177217731774177517761777177817791780178117821783178417851786178717881789179017911792179317941795179617971798179918001801180218031804180518061807180818091810181118121813181418151816181718181819182018211822182318241825182618271828182918301831183218331834183518361837183818391840184118421843184418451846184718481849185018511852185318541855185618571858185918601861186218631864186518661867186818691870187118721873187418751876187718781879188018811882188318841885188618871888188918901891189218931894189518961897189818991900190119021903190419051906190719081909191019111912191319141915191619171918191919201921192219231924192519261927192819291930193119321933193419351936193719381939194019411942194319441945194619471948194919501951195219531954195519561957195819591960196119621963196419651966196719681969197019711972197319741975197619771978197919801981198219831984198519861987198819891990199119921993199419951996199719981999200020012002200320042005200620072008200920102011201220132014201520162017201820192020202120222023202420252026202720282029203020312032203320342035203620372038203920402041204220432044204520462047204820492050205120522053205420552056205720582059206020612062206320642065206620672068206920702071207220732074207520762077207820792080208120822083208420852086208720882089209020912092209320942095209620972098209921002101210221032104210521062107210821092110211121122113211421152116211721182119212021212122212321242125212621272128212921302131213221332134213521362137213821392140214121422143214421452146214721482149215021512152215321542155215621572158215921602161216221632164216521662167216821692170217121722173217421752176217721782179218021812182218321842185
  1. grammar SQLv1Antlr4;
  2. options {
  3. language = Cpp;
  4. }
  5. // Input is a list of statements.
  6. sql_query: sql_stmt_list | PRAGMA ANSI DIGITS ansi_sql_stmt_list;
  7. sql_stmt_list: SEMICOLON* sql_stmt (SEMICOLON+ sql_stmt)* SEMICOLON* EOF;
  8. ansi_sql_stmt_list: SEMICOLON* EOF;
  9. lambda_body: SEMICOLON* (lambda_stmt SEMICOLON+)* RETURN expr SEMICOLON*;
  10. lambda_stmt:
  11. named_nodes_stmt
  12. | import_stmt
  13. ;
  14. sql_stmt: (EXPLAIN (QUERY PLAN)?)? sql_stmt_core;
  15. sql_stmt_core:
  16. pragma_stmt
  17. | select_stmt
  18. | named_nodes_stmt
  19. | create_table_stmt
  20. | drop_table_stmt
  21. | use_stmt
  22. | into_table_stmt
  23. | commit_stmt
  24. | update_stmt
  25. | delete_stmt
  26. | rollback_stmt
  27. | declare_stmt
  28. | import_stmt
  29. | export_stmt
  30. | alter_table_stmt
  31. | alter_external_table_stmt
  32. | do_stmt
  33. | define_action_or_subquery_stmt
  34. | if_stmt
  35. | for_stmt
  36. | values_stmt
  37. | create_user_stmt
  38. | alter_user_stmt
  39. | create_group_stmt
  40. | alter_group_stmt
  41. | drop_role_stmt
  42. | create_object_stmt
  43. | alter_object_stmt
  44. | drop_object_stmt
  45. | create_external_data_source_stmt
  46. | alter_external_data_source_stmt
  47. | drop_external_data_source_stmt
  48. | create_replication_stmt
  49. | drop_replication_stmt
  50. | create_topic_stmt
  51. | alter_topic_stmt
  52. | drop_topic_stmt
  53. | grant_permissions_stmt
  54. | revoke_permissions_stmt
  55. | alter_table_store_stmt
  56. | upsert_object_stmt
  57. | create_view_stmt
  58. | drop_view_stmt
  59. | alter_replication_stmt
  60. | create_resource_pool_stmt
  61. | alter_resource_pool_stmt
  62. | drop_resource_pool_stmt
  63. | create_backup_collection_stmt
  64. | alter_backup_collection_stmt
  65. | drop_backup_collection_stmt
  66. | analyze_stmt
  67. | create_resource_pool_classifier_stmt
  68. | alter_resource_pool_classifier_stmt
  69. | drop_resource_pool_classifier_stmt
  70. | backup_stmt
  71. | restore_stmt
  72. | alter_sequence_stmt
  73. | create_transfer_stmt
  74. | alter_transfer_stmt
  75. | drop_transfer_stmt
  76. ;
  77. expr:
  78. or_subexpr (OR or_subexpr)*
  79. | type_name_composite;
  80. or_subexpr: and_subexpr (AND and_subexpr)*;
  81. and_subexpr: xor_subexpr (XOR xor_subexpr)*;
  82. xor_subexpr: eq_subexpr cond_expr?;
  83. distinct_from_op: IS NOT? DISTINCT FROM;
  84. cond_expr:
  85. NOT? match_op eq_subexpr (ESCAPE eq_subexpr)?
  86. | NOT? IN COMPACT? in_expr
  87. | (ISNULL | NOTNULL | IS NULL | (IS)? NOT NULL)
  88. | NOT? BETWEEN (SYMMETRIC | ASYMMETRIC)? eq_subexpr AND eq_subexpr
  89. | ((EQUALS | EQUALS2 | NOT_EQUALS | NOT_EQUALS2 | distinct_from_op) eq_subexpr)+ /* order of the eq subexpressions is reversed! */
  90. ;
  91. match_op: LIKE | ILIKE | GLOB | REGEXP | RLIKE | MATCH;
  92. eq_subexpr: neq_subexpr ((LESS | LESS_OR_EQ | GREATER | GREATER_OR_EQ) neq_subexpr)*;
  93. // workaround for recursive types, '??' and closing '>>'
  94. shift_right: GREATER GREATER;
  95. rot_right: GREATER GREATER PIPE;
  96. double_question: QUESTION QUESTION;
  97. neq_subexpr: bit_subexpr ((SHIFT_LEFT | shift_right | ROT_LEFT | rot_right | AMPERSAND | PIPE | CARET) bit_subexpr)*
  98. // trailing QUESTIONs are used in optional simple types (String?) and optional lambda args: ($x, $y?) -> ($x)
  99. (double_question neq_subexpr | QUESTION+)?;
  100. bit_subexpr: add_subexpr ((PLUS | MINUS) add_subexpr)*;
  101. add_subexpr: mul_subexpr ((ASTERISK | SLASH | PERCENT) mul_subexpr)*;
  102. mul_subexpr: con_subexpr (DOUBLE_PIPE con_subexpr)*;
  103. con_subexpr: unary_subexpr | unary_op unary_subexpr;
  104. unary_op: PLUS | MINUS | TILDA | NOT;
  105. unary_subexpr_suffix: ((key_expr | invoke_expr | DOT (bind_parameter | DIGITS | an_id_or_type)))* (COLLATE an_id)?;
  106. unary_casual_subexpr: (id_expr | atom_expr) unary_subexpr_suffix;
  107. in_unary_casual_subexpr: (id_expr_in | in_atom_expr) unary_subexpr_suffix;
  108. unary_subexpr: unary_casual_subexpr | json_api_expr;
  109. in_unary_subexpr: in_unary_casual_subexpr | json_api_expr;
  110. list_literal: LBRACE_SQUARE expr_list? COMMA? RBRACE_SQUARE;
  111. expr_dict_list: expr (COLON expr)? (COMMA expr (COLON expr)?)*;
  112. dict_literal: LBRACE_CURLY expr_dict_list? COMMA? RBRACE_CURLY;
  113. expr_struct_list: expr COLON expr (COMMA expr COLON expr)*;
  114. struct_literal: STRUCT_OPEN expr_struct_list? COMMA? STRUCT_CLOSE;
  115. atom_expr:
  116. literal_value
  117. | bind_parameter
  118. | lambda
  119. | cast_expr
  120. | exists_expr
  121. | case_expr
  122. | an_id_or_type NAMESPACE (id_or_type | STRING_VALUE)
  123. | value_constructor
  124. | bitcast_expr
  125. | list_literal
  126. | dict_literal
  127. | struct_literal
  128. ;
  129. in_atom_expr:
  130. literal_value
  131. | bind_parameter
  132. | lambda
  133. | cast_expr
  134. | case_expr
  135. | an_id_or_type NAMESPACE (id_or_type | STRING_VALUE)
  136. | LPAREN select_stmt RPAREN
  137. // TODO: resolve ANTLR error: rule in_atom_expr has non-LL(*) decision due to recursive rule invocations reachable from alts 3,8
  138. // | LPAREN values_stmt RPAREN
  139. | value_constructor
  140. | bitcast_expr
  141. | list_literal
  142. | dict_literal
  143. | struct_literal
  144. ;
  145. cast_expr: CAST LPAREN expr AS type_name_or_bind RPAREN;
  146. bitcast_expr: BITCAST LPAREN expr AS type_name_simple RPAREN;
  147. exists_expr: EXISTS LPAREN (select_stmt | values_stmt) RPAREN;
  148. case_expr: CASE expr? when_expr+ (ELSE expr)? END;
  149. lambda: smart_parenthesis (ARROW (LPAREN expr RPAREN | LBRACE_CURLY lambda_body RBRACE_CURLY) )?;
  150. in_expr: in_unary_subexpr;
  151. // ANSI SQL JSON support
  152. json_api_expr: json_value | json_exists | json_query;
  153. jsonpath_spec: STRING_VALUE;
  154. json_variable_name: id_expr | STRING_VALUE;
  155. json_variable: expr AS json_variable_name;
  156. json_variables: json_variable (COMMA json_variable)*;
  157. json_common_args: expr COMMA jsonpath_spec (PASSING json_variables)?;
  158. json_case_handler: ERROR | NULL | DEFAULT expr;
  159. json_value: JSON_VALUE LPAREN
  160. json_common_args
  161. (RETURNING type_name_simple)?
  162. (json_case_handler ON (EMPTY | ERROR))*
  163. RPAREN;
  164. json_exists_handler: (TRUE | FALSE | UNKNOWN | ERROR) ON ERROR;
  165. json_exists: JSON_EXISTS LPAREN
  166. json_common_args
  167. json_exists_handler?
  168. RPAREN;
  169. json_query_wrapper: WITHOUT ARRAY? | WITH (CONDITIONAL | UNCONDITIONAL)? ARRAY?;
  170. json_query_handler: ERROR | NULL | EMPTY ARRAY | EMPTY OBJECT;
  171. json_query: JSON_QUERY LPAREN
  172. json_common_args
  173. (json_query_wrapper WRAPPER)?
  174. (json_query_handler ON EMPTY)?
  175. (json_query_handler ON ERROR)?
  176. RPAREN;
  177. // struct, tuple or named list
  178. smart_parenthesis: LPAREN named_expr_list? COMMA? RPAREN;
  179. expr_list: expr (COMMA expr)*;
  180. pure_column_list: LPAREN an_id (COMMA an_id)* RPAREN;
  181. pure_column_or_named: bind_parameter | an_id;
  182. pure_column_or_named_list: LPAREN pure_column_or_named (COMMA pure_column_or_named)* RPAREN;
  183. column_name: opt_id_prefix an_id;
  184. without_column_name: an_id DOT an_id | an_id_without;
  185. column_list: column_name (COMMA column_name)* COMMA?;
  186. without_column_list: without_column_name (COMMA without_column_name)* COMMA?;
  187. named_expr: expr (AS an_id_or_type)?;
  188. named_expr_list: named_expr (COMMA named_expr)*;
  189. invoke_expr: LPAREN (opt_set_quantifier named_expr_list COMMA? | ASTERISK)? RPAREN invoke_expr_tail;
  190. // null_treatment can only happen after window functions LAG/LEAD/NTH/FIRST_VALUE/LAST_VALUE
  191. // filter_clause can only happen after aggregation functions
  192. invoke_expr_tail:
  193. (null_treatment | filter_clause)? (OVER window_name_or_specification)?
  194. ;
  195. using_call_expr: (an_id_or_type NAMESPACE an_id_or_type | an_id_expr | bind_parameter | EXTERNAL FUNCTION) invoke_expr;
  196. key_expr: LBRACE_SQUARE expr RBRACE_SQUARE;
  197. when_expr: WHEN expr THEN expr;
  198. literal_value:
  199. integer
  200. | real
  201. | STRING_VALUE
  202. | BLOB // it's unused right now
  203. | NULL
  204. | CURRENT_TIME // it's unused right now
  205. | CURRENT_DATE // it's unused right now
  206. | CURRENT_TIMESTAMP // it's unused right now
  207. | bool_value
  208. | EMPTY_ACTION
  209. ;
  210. bind_parameter: DOLLAR (an_id_or_type | TRUE | FALSE);
  211. opt_bind_parameter: bind_parameter QUESTION?;
  212. bind_parameter_list: bind_parameter (COMMA bind_parameter)*;
  213. named_bind_parameter: bind_parameter (AS bind_parameter)?;
  214. named_bind_parameter_list: named_bind_parameter (COMMA named_bind_parameter)*;
  215. signed_number: (PLUS | MINUS)? (integer | real);
  216. type_name_simple: an_id_pure;
  217. integer_or_bind: integer | bind_parameter;
  218. type_name_tag: id | STRING_VALUE | bind_parameter;
  219. struct_arg: type_name_tag COLON type_name_or_bind;
  220. struct_arg_positional:
  221. type_name_tag type_name_or_bind (NOT? NULL)?
  222. | type_name_or_bind AS type_name_tag; //deprecated
  223. variant_arg: (type_name_tag COLON)? type_name_or_bind;
  224. callable_arg: variant_arg (LBRACE_CURLY AUTOMAP RBRACE_CURLY)?;
  225. callable_arg_list: callable_arg (COMMA callable_arg)*;
  226. type_name_decimal: DECIMAL LPAREN integer_or_bind COMMA integer_or_bind RPAREN;
  227. type_name_optional: OPTIONAL LESS type_name_or_bind GREATER;
  228. type_name_tuple: TUPLE (LESS (type_name_or_bind (COMMA type_name_or_bind)* COMMA?)? GREATER | NOT_EQUALS2);
  229. type_name_struct: STRUCT (LESS (struct_arg (COMMA struct_arg)* COMMA?)? GREATER | NOT_EQUALS2);
  230. type_name_variant: VARIANT LESS variant_arg (COMMA variant_arg)* COMMA? GREATER;
  231. type_name_list: LIST LESS type_name_or_bind GREATER;
  232. type_name_stream: STREAM LESS type_name_or_bind GREATER;
  233. type_name_flow: FLOW LESS type_name_or_bind GREATER;
  234. type_name_dict: DICT LESS type_name_or_bind COMMA type_name_or_bind GREATER;
  235. type_name_set: SET LESS type_name_or_bind GREATER;
  236. type_name_enum: ENUM LESS type_name_tag (COMMA type_name_tag)* COMMA? GREATER;
  237. type_name_resource: RESOURCE LESS type_name_tag GREATER;
  238. type_name_tagged: TAGGED LESS type_name_or_bind COMMA type_name_tag GREATER;
  239. type_name_callable: CALLABLE LESS LPAREN callable_arg_list? COMMA? (LBRACE_SQUARE callable_arg_list RBRACE_SQUARE)? RPAREN ARROW type_name_or_bind GREATER;
  240. type_name_composite:
  241. ( type_name_optional
  242. | type_name_tuple
  243. | type_name_struct
  244. | type_name_variant
  245. | type_name_list
  246. | type_name_stream
  247. | type_name_flow
  248. | type_name_dict
  249. | type_name_set
  250. | type_name_enum
  251. | type_name_resource
  252. | type_name_tagged
  253. | type_name_callable
  254. ) QUESTION*;
  255. type_name:
  256. type_name_composite
  257. | (type_name_decimal | type_name_simple) QUESTION*;
  258. type_name_or_bind: type_name | bind_parameter;
  259. value_constructor_literal: STRING_VALUE;
  260. value_constructor:
  261. VARIANT LPAREN expr COMMA expr COMMA expr RPAREN
  262. | ENUM LPAREN expr COMMA expr RPAREN
  263. | CALLABLE LPAREN expr COMMA expr RPAREN
  264. ;
  265. declare_stmt: DECLARE bind_parameter AS type_name (EQUALS literal_value)?;
  266. module_path: DOT? an_id (DOT an_id)*;
  267. import_stmt: IMPORT module_path SYMBOLS named_bind_parameter_list;
  268. export_stmt: EXPORT bind_parameter_list;
  269. call_action: (bind_parameter | EMPTY_ACTION) LPAREN expr_list? RPAREN;
  270. inline_action: BEGIN define_action_or_subquery_body END DO;
  271. do_stmt: DO (call_action | inline_action);
  272. pragma_stmt: PRAGMA opt_id_prefix_or_type an_id (EQUALS pragma_value | LPAREN pragma_value (COMMA pragma_value)* RPAREN)?;
  273. pragma_value:
  274. signed_number
  275. | id
  276. | STRING_VALUE
  277. | bool_value
  278. | bind_parameter
  279. ;
  280. /// TODO: NULLS FIRST\LAST?
  281. sort_specification: expr (ASC | DESC)?;
  282. sort_specification_list: sort_specification (COMMA sort_specification)*;
  283. select_stmt: select_kind_parenthesis (select_op select_kind_parenthesis)*;
  284. select_unparenthesized_stmt: select_kind_partial (select_op select_kind_parenthesis)*;
  285. select_kind_parenthesis: select_kind_partial | LPAREN select_kind_partial RPAREN;
  286. select_op: UNION (ALL)? | INTERSECT | EXCEPT;
  287. select_kind_partial: select_kind
  288. (LIMIT expr ((OFFSET | COMMA) expr)?)?
  289. ;
  290. select_kind: (DISCARD)? (process_core | reduce_core | select_core) (INTO RESULT pure_column_or_named)?;
  291. process_core:
  292. PROCESS STREAM? named_single_source (COMMA named_single_source)* (USING using_call_expr (AS an_id)?
  293. (WITH external_call_settings)?
  294. (WHERE expr)? (HAVING expr)? (ASSUME order_by_clause)?)?
  295. ;
  296. external_call_param: an_id EQUALS expr;
  297. external_call_settings: external_call_param (COMMA external_call_param)*;
  298. reduce_core:
  299. REDUCE named_single_source (COMMA named_single_source)* (PRESORT sort_specification_list)?
  300. ON column_list USING ALL? using_call_expr (AS an_id)?
  301. (WHERE expr)? (HAVING expr)? (ASSUME order_by_clause)?
  302. ;
  303. opt_set_quantifier: (ALL | DISTINCT)?;
  304. select_core:
  305. (FROM join_source)? SELECT STREAM? opt_set_quantifier result_column (COMMA result_column)* COMMA? (WITHOUT without_column_list)? (FROM join_source)? (WHERE expr)?
  306. group_by_clause? (HAVING expr)? window_clause? ext_order_by_clause?
  307. ;
  308. // ISO/IEC 9075-2:2016(E) 7.7 <row pattern recognition clause>
  309. row_pattern_recognition_clause: MATCH_RECOGNIZE LPAREN
  310. window_partition_clause?
  311. order_by_clause?
  312. row_pattern_measures?
  313. row_pattern_rows_per_match?
  314. row_pattern_common_syntax
  315. RPAREN
  316. ;
  317. row_pattern_rows_per_match:
  318. ONE ROW PER MATCH
  319. | ALL ROWS PER MATCH row_pattern_empty_match_handling?
  320. ;
  321. row_pattern_empty_match_handling: SHOW EMPTY MATCHES | OMIT EMPTY MATCHES | WITH UNMATCHED ROWS;
  322. // ISO/IEC 9075-2:2016(E) 7.8 <row pattern measures>
  323. row_pattern_measures: MEASURES row_pattern_measure_list;
  324. row_pattern_measure_list: row_pattern_measure_definition (COMMA row_pattern_measure_definition)*;
  325. row_pattern_measure_definition: expr AS an_id;
  326. // ISO/IEC 9075-2:2016(E) 7.9 <row pattern common syntax>
  327. row_pattern_common_syntax:
  328. (AFTER MATCH row_pattern_skip_to)?
  329. row_pattern_initial_or_seek?
  330. PATTERN LPAREN row_pattern RPAREN
  331. row_pattern_subset_clause?
  332. DEFINE row_pattern_definition_list
  333. ;
  334. row_pattern_skip_to:
  335. TSKIP TO NEXT ROW
  336. | TSKIP PAST LAST ROW
  337. | TSKIP TO FIRST row_pattern_skip_to_variable_name
  338. | TSKIP TO LAST row_pattern_skip_to_variable_name
  339. | TSKIP TO row_pattern_skip_to_variable_name
  340. ;
  341. row_pattern_skip_to_variable_name: row_pattern_variable_name;
  342. row_pattern_initial_or_seek: INITIAL | SEEK;
  343. row_pattern: row_pattern_term (PIPE row_pattern_term)*;
  344. row_pattern_term: row_pattern_factor+;
  345. row_pattern_factor: row_pattern_primary row_pattern_quantifier?;
  346. row_pattern_quantifier:
  347. ASTERISK QUESTION?
  348. | PLUS QUESTION?
  349. | QUESTION QUESTION?
  350. | LBRACE_CURLY integer? COMMA integer? RBRACE_CURLY QUESTION?
  351. | LBRACE_CURLY integer RBRACE_CURLY
  352. ;
  353. row_pattern_primary:
  354. row_pattern_primary_variable_name
  355. | DOLLAR
  356. | CARET
  357. | LPAREN row_pattern? RPAREN
  358. | LBRACE_CURLY MINUS row_pattern MINUS RBRACE_CURLY
  359. | row_pattern_permute
  360. ;
  361. row_pattern_primary_variable_name: row_pattern_variable_name;
  362. row_pattern_permute: PERMUTE LPAREN
  363. row_pattern (COMMA row_pattern)*
  364. RPAREN
  365. ;
  366. row_pattern_subset_clause: SUBSET row_pattern_subset_list;
  367. row_pattern_subset_list: row_pattern_subset_item (COMMA row_pattern_subset_item)*;
  368. row_pattern_subset_item: row_pattern_subset_item_variable_name EQUALS LPAREN
  369. row_pattern_subset_rhs RPAREN
  370. ;
  371. row_pattern_subset_item_variable_name: row_pattern_variable_name;
  372. row_pattern_subset_rhs: row_pattern_subset_rhs_variable_name (COMMA row_pattern_subset_rhs_variable_name)*;
  373. row_pattern_subset_rhs_variable_name: row_pattern_variable_name;
  374. row_pattern_definition_list: row_pattern_definition (COMMA row_pattern_definition)*;
  375. row_pattern_definition: row_pattern_definition_variable_name AS row_pattern_definition_search_condition;
  376. row_pattern_definition_variable_name: row_pattern_variable_name;
  377. row_pattern_definition_search_condition: search_condition;
  378. search_condition: expr;
  379. //TODO allow use tokens as vars https://st.yandex-team.ru/YQL-16223
  380. row_pattern_variable_name: identifier;
  381. order_by_clause: ORDER BY sort_specification_list;
  382. ext_order_by_clause: ASSUME? order_by_clause;
  383. group_by_clause: GROUP COMPACT? BY opt_set_quantifier grouping_element_list (WITH an_id)?;
  384. grouping_element_list: grouping_element (COMMA grouping_element)*;
  385. grouping_element:
  386. ordinary_grouping_set
  387. | rollup_list
  388. | cube_list
  389. | grouping_sets_specification
  390. //empty_grouping_set inside smart_parenthesis
  391. | hopping_window_specification
  392. ;
  393. /// expect column (named column), or parenthesis list columns, or expression (named expression), or list expression
  394. ordinary_grouping_set: named_expr;
  395. ordinary_grouping_set_list: ordinary_grouping_set (COMMA ordinary_grouping_set)*;
  396. rollup_list: ROLLUP LPAREN ordinary_grouping_set_list RPAREN;
  397. cube_list: CUBE LPAREN ordinary_grouping_set_list RPAREN;
  398. /// SQL2003 grouping_set_list == grouping_element_list
  399. grouping_sets_specification: GROUPING SETS LPAREN grouping_element_list RPAREN;
  400. hopping_window_specification: HOP LPAREN expr COMMA expr COMMA expr COMMA expr RPAREN;
  401. result_column:
  402. opt_id_prefix ASTERISK
  403. | expr (AS an_id_or_type | an_id_as_compat)?
  404. ;
  405. join_source: ANY? flatten_source (join_op ANY? flatten_source join_constraint?)*;
  406. named_column: column_name (AS an_id)?;
  407. flatten_by_arg:
  408. named_column
  409. | LPAREN named_expr_list COMMA? RPAREN
  410. ;
  411. flatten_source: named_single_source (FLATTEN ((OPTIONAL|LIST|DICT)? BY flatten_by_arg | COLUMNS))?;
  412. named_single_source: single_source row_pattern_recognition_clause? ((AS an_id | an_id_as_compat) pure_column_list?)? (sample_clause | tablesample_clause)?;
  413. single_source:
  414. table_ref
  415. | LPAREN select_stmt RPAREN
  416. | LPAREN values_stmt RPAREN
  417. ;
  418. sample_clause: SAMPLE expr;
  419. tablesample_clause: TABLESAMPLE sampling_mode LPAREN expr RPAREN repeatable_clause?;
  420. sampling_mode: (BERNOULLI | SYSTEM);
  421. repeatable_clause: REPEATABLE LPAREN expr RPAREN;
  422. join_op:
  423. COMMA
  424. | (NATURAL)? ((LEFT (ONLY | SEMI)? | RIGHT (ONLY | SEMI)? | EXCLUSION | FULL)? (OUTER)? | INNER | CROSS) JOIN
  425. ;
  426. join_constraint:
  427. ON expr
  428. | USING pure_column_or_named_list
  429. ;
  430. returning_columns_list: RETURNING (ASTERISK | an_id (COMMA an_id)*);
  431. into_table_stmt: (INSERT | INSERT OR ABORT | INSERT OR REVERT | INSERT OR IGNORE | UPSERT | REPLACE) INTO into_simple_table_ref into_values_source returning_columns_list?;
  432. into_values_source:
  433. pure_column_list? values_source
  434. | DEFAULT VALUES
  435. ;
  436. values_stmt: VALUES values_source_row_list;
  437. values_source: values_stmt | select_stmt;
  438. values_source_row_list: values_source_row (COMMA values_source_row)*;
  439. values_source_row: LPAREN expr_list RPAREN;
  440. simple_values_source: expr_list | select_stmt;
  441. create_external_data_source_stmt: CREATE (OR REPLACE)? EXTERNAL DATA SOURCE (IF NOT EXISTS)? object_ref
  442. with_table_settings
  443. ;
  444. alter_external_data_source_stmt: ALTER EXTERNAL DATA SOURCE object_ref
  445. alter_external_data_source_action (COMMA alter_external_data_source_action)*
  446. ;
  447. alter_external_data_source_action:
  448. alter_table_set_table_setting_uncompat
  449. | alter_table_set_table_setting_compat
  450. | alter_table_reset_table_setting
  451. //| alter_table_rename_to // TODO
  452. ;
  453. drop_external_data_source_stmt: DROP EXTERNAL DATA SOURCE (IF EXISTS)? object_ref;
  454. create_view_stmt: CREATE VIEW (IF NOT EXISTS)? object_ref
  455. create_object_features?
  456. AS select_stmt
  457. ;
  458. drop_view_stmt: DROP VIEW (IF EXISTS)? object_ref;
  459. upsert_object_stmt: UPSERT OBJECT object_ref
  460. LPAREN TYPE object_type_ref RPAREN
  461. create_object_features?
  462. ;
  463. create_object_stmt: CREATE OBJECT (IF NOT EXISTS)? object_ref
  464. LPAREN TYPE object_type_ref RPAREN
  465. create_object_features?
  466. ;
  467. create_object_features: WITH object_features;
  468. alter_object_stmt: ALTER OBJECT object_ref
  469. LPAREN TYPE object_type_ref RPAREN
  470. alter_object_features
  471. ;
  472. alter_object_features: SET object_features;
  473. drop_object_stmt: DROP OBJECT (IF EXISTS)? object_ref
  474. LPAREN TYPE object_type_ref RPAREN
  475. drop_object_features?
  476. ;
  477. drop_object_features: WITH object_features;
  478. object_feature_value: id_or_type | bind_parameter | STRING_VALUE | bool_value;
  479. object_feature_kv: an_id_or_type EQUALS object_feature_value;
  480. object_feature_flag: an_id_or_type;
  481. object_feature: object_feature_kv | object_feature_flag;
  482. object_features: object_feature | LPAREN object_feature (COMMA object_feature)* RPAREN;
  483. object_type_ref: an_id_or_type;
  484. create_table_stmt: CREATE (OR REPLACE)? (TABLE | TABLESTORE | EXTERNAL TABLE | TEMP TABLE | TEMPORARY TABLE) (IF NOT EXISTS)? simple_table_ref LPAREN create_table_entry (COMMA create_table_entry)* COMMA? RPAREN
  485. table_inherits?
  486. table_partition_by?
  487. with_table_settings?
  488. table_tablestore?
  489. table_as_source?;
  490. create_table_entry:
  491. column_schema
  492. | table_constraint
  493. | table_index
  494. | family_entry
  495. | changefeed
  496. | an_id_schema
  497. ;
  498. create_backup_collection_stmt: CREATE backup_collection create_backup_collection_entries? WITH LPAREN backup_collection_settings RPAREN;
  499. alter_backup_collection_stmt: ALTER backup_collection (alter_backup_collection_actions | alter_backup_collection_entries);
  500. drop_backup_collection_stmt: DROP backup_collection;
  501. create_backup_collection_entries: DATABASE | create_backup_collection_entries_many;
  502. create_backup_collection_entries_many: LPAREN table_list RPAREN;
  503. table_list: TABLE an_id_table (COMMA TABLE an_id_table)*;
  504. alter_backup_collection_actions: alter_backup_collection_action (COMMA alter_backup_collection_action)*;
  505. alter_backup_collection_action:
  506. alter_table_set_table_setting_compat
  507. | alter_table_reset_table_setting
  508. ;
  509. alter_backup_collection_entries: alter_backup_collection_entry (COMMA alter_backup_collection_entry)*;
  510. alter_backup_collection_entry:
  511. ADD DATABASE
  512. | DROP DATABASE
  513. | ADD TABLE an_id_table
  514. | DROP TABLE an_id_table
  515. ;
  516. backup_collection: BACKUP COLLECTION object_ref;
  517. backup_collection_settings: backup_collection_settings_entry (COMMA backup_collection_settings_entry)*;
  518. backup_collection_settings_entry: an_id EQUALS table_setting_value;
  519. backup_stmt: BACKUP object_ref (INCREMENTAL)?;
  520. restore_stmt: RESTORE object_ref (AT STRING_VALUE)?;
  521. table_inherits: INHERITS LPAREN simple_table_ref_core (COMMA simple_table_ref_core)* RPAREN;
  522. table_partition_by: PARTITION BY HASH pure_column_list;
  523. with_table_settings: WITH LPAREN table_settings_entry (COMMA table_settings_entry)* RPAREN;
  524. table_tablestore: TABLESTORE simple_table_ref_core;
  525. table_settings_entry: an_id EQUALS table_setting_value;
  526. table_as_source: AS values_source;
  527. alter_table_stmt: ALTER TABLE simple_table_ref alter_table_action (COMMA alter_table_action)*;
  528. alter_table_action:
  529. alter_table_add_column
  530. | alter_table_drop_column
  531. | alter_table_alter_column
  532. | alter_table_add_column_family
  533. | alter_table_alter_column_family
  534. | alter_table_set_table_setting_uncompat
  535. | alter_table_set_table_setting_compat
  536. | alter_table_reset_table_setting
  537. | alter_table_add_index
  538. | alter_table_drop_index
  539. | alter_table_rename_to
  540. | alter_table_add_changefeed
  541. | alter_table_alter_changefeed
  542. | alter_table_drop_changefeed
  543. | alter_table_rename_index_to
  544. | alter_table_alter_index
  545. | alter_table_alter_column_drop_not_null
  546. ;
  547. alter_external_table_stmt: ALTER EXTERNAL TABLE simple_table_ref alter_external_table_action (COMMA alter_external_table_action)*;
  548. alter_external_table_action:
  549. alter_table_add_column
  550. | alter_table_drop_column
  551. | alter_table_set_table_setting_uncompat
  552. | alter_table_set_table_setting_compat
  553. | alter_table_reset_table_setting
  554. //| alter_table_rename_to // TODO
  555. ;
  556. alter_table_store_stmt: ALTER TABLESTORE object_ref alter_table_store_action (COMMA alter_table_store_action)*;
  557. alter_table_store_action:
  558. alter_table_add_column
  559. | alter_table_drop_column
  560. ;
  561. alter_table_add_column: ADD COLUMN? column_schema;
  562. alter_table_drop_column: DROP COLUMN? an_id;
  563. alter_table_alter_column: ALTER COLUMN an_id SET family_relation;
  564. alter_table_alter_column_drop_not_null: ALTER COLUMN an_id DROP NOT NULL;
  565. alter_table_add_column_family: ADD family_entry;
  566. alter_table_alter_column_family: ALTER FAMILY an_id SET an_id family_setting_value;
  567. alter_table_set_table_setting_uncompat: SET an_id table_setting_value;
  568. alter_table_set_table_setting_compat: SET LPAREN alter_table_setting_entry (COMMA alter_table_setting_entry)* RPAREN;
  569. alter_table_reset_table_setting: RESET LPAREN an_id (COMMA an_id)* RPAREN;
  570. alter_table_add_index: ADD table_index;
  571. alter_table_drop_index: DROP INDEX an_id;
  572. alter_table_rename_to: RENAME TO an_id_table;
  573. alter_table_rename_index_to: RENAME INDEX an_id TO an_id;
  574. alter_table_add_changefeed: ADD changefeed;
  575. alter_table_alter_changefeed: ALTER CHANGEFEED an_id changefeed_alter_settings;
  576. alter_table_drop_changefeed: DROP CHANGEFEED an_id;
  577. alter_table_alter_index: ALTER INDEX an_id alter_table_alter_index_action;
  578. column_schema: an_id_schema type_name_or_bind family_relation? opt_column_constraints;
  579. family_relation: FAMILY an_id;
  580. opt_column_constraints: (NOT? NULL)? (DEFAULT expr)?;
  581. column_order_by_specification: an_id (ASC | DESC)?;
  582. table_constraint:
  583. PRIMARY KEY LPAREN an_id (COMMA an_id)* RPAREN
  584. | PARTITION BY LPAREN an_id (COMMA an_id)* RPAREN
  585. | ORDER BY LPAREN column_order_by_specification (COMMA column_order_by_specification)* RPAREN
  586. ;
  587. table_index: INDEX an_id table_index_type
  588. ON LPAREN an_id_schema (COMMA an_id_schema)* RPAREN
  589. (COVER LPAREN an_id_schema (COMMA an_id_schema)* RPAREN)?
  590. with_index_settings?
  591. ;
  592. table_index_type: (global_index | local_index) (USING index_subtype)?;
  593. global_index: GLOBAL UNIQUE? (SYNC | ASYNC)?;
  594. local_index: LOCAL;
  595. index_subtype: an_id;
  596. with_index_settings: WITH LPAREN index_setting_entry (COMMA index_setting_entry)* COMMA? RPAREN;
  597. index_setting_entry: an_id EQUALS index_setting_value;
  598. index_setting_value:
  599. id_or_type
  600. | STRING_VALUE
  601. | integer
  602. | bool_value
  603. ;
  604. changefeed: CHANGEFEED an_id WITH LPAREN changefeed_settings RPAREN;
  605. changefeed_settings: changefeed_settings_entry (COMMA changefeed_settings_entry)*;
  606. changefeed_settings_entry: an_id EQUALS changefeed_setting_value;
  607. changefeed_setting_value: expr;
  608. changefeed_alter_settings:
  609. DISABLE
  610. | SET LPAREN changefeed_settings RPAREN
  611. ;
  612. alter_table_setting_entry: an_id EQUALS table_setting_value;
  613. table_setting_value:
  614. id
  615. | STRING_VALUE
  616. | integer
  617. | split_boundaries
  618. | ttl_tier_list ON an_id (AS (SECONDS | MILLISECONDS | MICROSECONDS | NANOSECONDS))?
  619. | bool_value
  620. ;
  621. ttl_tier_list: expr (ttl_tier_action (COMMA expr ttl_tier_action)*)?;
  622. ttl_tier_action:
  623. TO EXTERNAL DATA SOURCE an_id
  624. | DELETE
  625. ;
  626. family_entry: FAMILY an_id family_settings;
  627. family_settings: LPAREN (family_settings_entry (COMMA family_settings_entry)*)? RPAREN;
  628. family_settings_entry: an_id EQUALS family_setting_value;
  629. family_setting_value:
  630. STRING_VALUE
  631. | integer
  632. ;
  633. split_boundaries:
  634. LPAREN literal_value_list (COMMA literal_value_list)* RPAREN
  635. | literal_value_list
  636. ;
  637. literal_value_list: LPAREN literal_value (COMMA literal_value)* RPAREN;
  638. alter_table_alter_index_action:
  639. alter_table_set_table_setting_uncompat
  640. | alter_table_set_table_setting_compat
  641. | alter_table_reset_table_setting
  642. ;
  643. drop_table_stmt: DROP (TABLE | TABLESTORE | EXTERNAL TABLE) (IF EXISTS)? simple_table_ref;
  644. create_user_stmt: CREATE USER role_name create_user_option*;
  645. alter_user_stmt: ALTER USER role_name (WITH? create_user_option+ | RENAME TO role_name);
  646. create_group_stmt: CREATE GROUP role_name (WITH USER role_name (COMMA role_name)* COMMA?)?;
  647. alter_group_stmt: ALTER GROUP role_name ((ADD|DROP) USER role_name (COMMA role_name)* COMMA? | RENAME TO role_name);
  648. drop_role_stmt: DROP (USER|GROUP) (IF EXISTS)? role_name (COMMA role_name)* COMMA?;
  649. role_name: an_id_or_type | bind_parameter;
  650. create_user_option: password_option | login_option;
  651. password_option: ENCRYPTED? PASSWORD expr;
  652. login_option: LOGIN | NOLOGIN;
  653. grant_permissions_stmt: GRANT permission_name_target ON an_id_schema (COMMA an_id_schema)* TO role_name (COMMA role_name)* COMMA? (WITH GRANT OPTION)?;
  654. revoke_permissions_stmt: REVOKE (GRANT OPTION FOR)? permission_name_target ON an_id_schema (COMMA an_id_schema)* FROM role_name (COMMA role_name)*;
  655. permission_id:
  656. CONNECT
  657. | LIST
  658. | INSERT
  659. | MANAGE
  660. | DROP
  661. | GRANT
  662. | MODIFY (TABLES | ATTRIBUTES)
  663. | (UPDATE | ERASE) ROW
  664. | (REMOVE | DESCRIBE | ALTER) SCHEMA
  665. | SELECT (TABLES | ATTRIBUTES | ROW)?
  666. | (USE | FULL) LEGACY?
  667. | CREATE (DIRECTORY | TABLE | QUEUE)?
  668. ;
  669. permission_name: permission_id | STRING_VALUE;
  670. permission_name_target: permission_name (COMMA permission_name)* COMMA? | ALL PRIVILEGES?;
  671. create_resource_pool_stmt: CREATE RESOURCE POOL object_ref
  672. with_table_settings
  673. ;
  674. alter_resource_pool_stmt: ALTER RESOURCE POOL object_ref
  675. alter_resource_pool_action (COMMA alter_resource_pool_action)*
  676. ;
  677. alter_resource_pool_action:
  678. alter_table_set_table_setting_compat
  679. | alter_table_reset_table_setting
  680. ;
  681. drop_resource_pool_stmt: DROP RESOURCE POOL object_ref;
  682. create_resource_pool_classifier_stmt: CREATE RESOURCE POOL CLASSIFIER object_ref
  683. with_table_settings
  684. ;
  685. alter_resource_pool_classifier_stmt: ALTER RESOURCE POOL CLASSIFIER object_ref
  686. alter_resource_pool_classifier_action (COMMA alter_resource_pool_classifier_action)*
  687. ;
  688. alter_resource_pool_classifier_action:
  689. alter_table_set_table_setting_compat
  690. | alter_table_reset_table_setting
  691. ;
  692. drop_resource_pool_classifier_stmt: DROP RESOURCE POOL CLASSIFIER object_ref;
  693. create_replication_stmt: CREATE ASYNC REPLICATION object_ref
  694. FOR replication_target (COMMA replication_target)*
  695. WITH LPAREN replication_settings RPAREN
  696. ;
  697. replication_target: object_ref AS object_ref;
  698. replication_settings: replication_settings_entry (COMMA replication_settings_entry)*;
  699. replication_settings_entry: an_id EQUALS expr;
  700. alter_replication_stmt: ALTER ASYNC REPLICATION object_ref alter_replication_action (COMMA alter_replication_action)*;
  701. alter_replication_action:
  702. alter_replication_set_setting
  703. ;
  704. alter_replication_set_setting: SET LPAREN replication_settings RPAREN;
  705. drop_replication_stmt: DROP ASYNC REPLICATION object_ref CASCADE?;
  706. lambda_or_parameter:
  707. lambda
  708. | bind_parameter
  709. ;
  710. create_transfer_stmt: CREATE TRANSFER object_ref
  711. FROM object_ref TO object_ref (USING lambda_or_parameter)?
  712. WITH LPAREN transfer_settings RPAREN
  713. ;
  714. transfer_settings: transfer_settings_entry (COMMA transfer_settings_entry)*;
  715. transfer_settings_entry: an_id EQUALS expr;
  716. alter_transfer_stmt: ALTER TRANSFER object_ref alter_transfer_action (COMMA alter_transfer_action)*;
  717. alter_transfer_action:
  718. alter_transfer_set_setting
  719. | alter_transfer_set_using
  720. ;
  721. alter_transfer_set_setting: SET LPAREN transfer_settings RPAREN;
  722. alter_transfer_set_using: SET USING lambda_or_parameter;
  723. drop_transfer_stmt: DROP TRANSFER object_ref CASCADE?;
  724. action_or_subquery_args: opt_bind_parameter (COMMA opt_bind_parameter)*;
  725. define_action_or_subquery_stmt: DEFINE (ACTION|SUBQUERY) bind_parameter LPAREN action_or_subquery_args? RPAREN AS define_action_or_subquery_body END DEFINE;
  726. define_action_or_subquery_body: SEMICOLON* (sql_stmt_core (SEMICOLON+ sql_stmt_core)* SEMICOLON*)?;
  727. if_stmt: EVALUATE? IF expr do_stmt (ELSE do_stmt)?;
  728. for_stmt: EVALUATE? PARALLEL? FOR bind_parameter IN expr do_stmt (ELSE do_stmt)?;
  729. table_ref: (cluster_expr DOT)? COMMAT? (table_key | an_id_expr LPAREN (table_arg (COMMA table_arg)* COMMA?)? RPAREN | bind_parameter (LPAREN expr_list? RPAREN)? (VIEW view_name)?) table_hints?;
  730. table_key: id_table_or_type (VIEW view_name)?;
  731. table_arg: COMMAT? named_expr (VIEW view_name)?;
  732. table_hints: WITH (table_hint | LPAREN table_hint (COMMA table_hint)* RPAREN);
  733. table_hint:
  734. an_id_hint (EQUALS (type_name_tag | LPAREN type_name_tag (COMMA type_name_tag)* COMMA? RPAREN))?
  735. | (SCHEMA | COLUMNS) EQUALS? type_name_or_bind
  736. | SCHEMA EQUALS? LPAREN (struct_arg_positional (COMMA struct_arg_positional)*)? COMMA? RPAREN
  737. ;
  738. object_ref: (cluster_expr DOT)? id_or_at;
  739. simple_table_ref_core: object_ref | COMMAT? bind_parameter;
  740. simple_table_ref: simple_table_ref_core table_hints?;
  741. into_simple_table_ref: simple_table_ref (ERASE BY pure_column_list)?;
  742. delete_stmt: BATCH? DELETE FROM simple_table_ref (WHERE expr | ON into_values_source)? returning_columns_list?;
  743. update_stmt: BATCH? UPDATE simple_table_ref (SET set_clause_choice (WHERE expr)? | ON into_values_source) returning_columns_list?;
  744. /// out of 2003 standart
  745. set_clause_choice: set_clause_list | multiple_column_assignment;
  746. set_clause_list: set_clause (COMMA set_clause)*;
  747. set_clause: set_target EQUALS expr;
  748. set_target: column_name;
  749. multiple_column_assignment: set_target_list EQUALS LPAREN simple_values_source RPAREN;
  750. set_target_list: LPAREN set_target (COMMA set_target)* RPAREN;
  751. // topics
  752. create_topic_stmt: CREATE TOPIC (IF NOT EXISTS)? topic_ref create_topic_entries? with_topic_settings?;
  753. create_topic_entries: LPAREN create_topic_entry (COMMA create_topic_entry)* RPAREN;
  754. create_topic_entry:
  755. topic_create_consumer_entry
  756. ;
  757. with_topic_settings: WITH LPAREN topic_settings RPAREN;
  758. alter_topic_stmt: ALTER TOPIC (IF EXISTS)? topic_ref alter_topic_action (COMMA alter_topic_action)*;
  759. alter_topic_action:
  760. alter_topic_add_consumer
  761. | alter_topic_alter_consumer
  762. | alter_topic_drop_consumer
  763. | alter_topic_set_settings
  764. | alter_topic_reset_settings
  765. ;
  766. alter_topic_add_consumer: ADD topic_create_consumer_entry;
  767. topic_create_consumer_entry: CONSUMER an_id topic_consumer_with_settings?;
  768. alter_topic_alter_consumer: ALTER CONSUMER topic_consumer_ref alter_topic_alter_consumer_entry;
  769. alter_topic_alter_consumer_entry:
  770. topic_alter_consumer_set
  771. | topic_alter_consumer_reset
  772. ;
  773. alter_topic_drop_consumer: DROP CONSUMER topic_consumer_ref;
  774. topic_alter_consumer_set: SET LPAREN topic_consumer_settings RPAREN;
  775. topic_alter_consumer_reset: RESET LPAREN an_id (COMMA an_id)* RPAREN;
  776. alter_topic_set_settings: SET LPAREN topic_settings RPAREN;
  777. alter_topic_reset_settings: RESET LPAREN an_id (COMMA an_id_pure)* RPAREN;
  778. drop_topic_stmt: DROP TOPIC (IF EXISTS)? topic_ref;
  779. topic_settings: topic_settings_entry (COMMA topic_settings_entry)*;
  780. topic_settings_entry: an_id EQUALS topic_setting_value;
  781. topic_setting_value:
  782. expr
  783. ;
  784. topic_consumer_with_settings: WITH LPAREN topic_consumer_settings RPAREN;
  785. topic_consumer_settings: topic_consumer_settings_entry (COMMA topic_consumer_settings_entry)*;
  786. topic_consumer_settings_entry: an_id EQUALS topic_consumer_setting_value;
  787. topic_consumer_setting_value:
  788. expr
  789. ;
  790. topic_ref: (cluster_expr DOT)? an_id;
  791. topic_consumer_ref: an_id_pure;
  792. /// window function supp
  793. // differ from 2003 for resolve conflict
  794. null_treatment: RESPECT NULLS | IGNORE NULLS;
  795. filter_clause: FILTER LPAREN WHERE expr RPAREN;
  796. window_name_or_specification: window_name | window_specification;
  797. window_name: an_id_window;
  798. window_clause: WINDOW window_definition_list;
  799. window_definition_list: window_definition (COMMA window_definition)*;
  800. window_definition: new_window_name AS window_specification;
  801. new_window_name: window_name;
  802. window_specification: LPAREN window_specification_details RPAREN;
  803. window_specification_details:
  804. existing_window_name?
  805. window_partition_clause?
  806. window_order_clause?
  807. window_frame_clause?
  808. ;
  809. existing_window_name: window_name;
  810. window_partition_clause: PARTITION COMPACT? BY named_expr_list;
  811. window_order_clause: order_by_clause;
  812. window_frame_clause: window_frame_units window_frame_extent window_frame_exclusion?;
  813. window_frame_units: ROWS | RANGE | GROUPS;
  814. window_frame_extent: window_frame_bound | window_frame_between;
  815. window_frame_between: BETWEEN window_frame_bound AND window_frame_bound;
  816. window_frame_bound:
  817. CURRENT ROW
  818. | (expr | UNBOUNDED) (PRECEDING | FOLLOWING)
  819. ;
  820. window_frame_exclusion: EXCLUDE CURRENT ROW | EXCLUDE GROUP | EXCLUDE TIES | EXCLUDE NO OTHERS;
  821. // EXTRAS
  822. use_stmt: USE cluster_expr;
  823. subselect_stmt: (LPAREN select_stmt RPAREN | select_unparenthesized_stmt);
  824. // TODO: [fatal] rule named_nodes_stmt has non-LL(*) decision due to recursive rule invocations reachable from alts 1,3
  825. // named_nodes_stmt: bind_parameter_list EQUALS (expr | subselect_stmt | values_stmt | LPAREN values_stmt RPAREN);
  826. named_nodes_stmt: bind_parameter_list EQUALS (expr | subselect_stmt);
  827. commit_stmt: COMMIT;
  828. rollback_stmt: ROLLBACK;
  829. analyze_table: simple_table_ref (LPAREN column_list RPAREN)?;
  830. analyze_table_list: analyze_table (COMMA analyze_table)* COMMA?;
  831. analyze_stmt: ANALYZE analyze_table_list;
  832. alter_sequence_stmt: ALTER SEQUENCE (IF EXISTS)? object_ref alter_sequence_action+;
  833. alter_sequence_action:
  834. START WITH? integer
  835. | RESTART WITH? integer
  836. | RESTART
  837. | INCREMENT BY? integer
  838. ;
  839. // Special rules that allow to use certain keywords as identifiers.
  840. identifier: ID_PLAIN | ID_QUOTED;
  841. id: identifier | keyword;
  842. id_schema:
  843. identifier
  844. | keyword_compat
  845. | keyword_expr_uncompat
  846. // | keyword_table_uncompat
  847. | keyword_select_uncompat
  848. // | keyword_alter_uncompat
  849. | keyword_in_uncompat
  850. | keyword_window_uncompat
  851. | keyword_hint_uncompat
  852. ;
  853. id_expr:
  854. identifier
  855. | keyword_compat
  856. // | keyword_expr_uncompat
  857. // | keyword_table_uncompat
  858. // | keyword_select_uncompat
  859. | keyword_alter_uncompat
  860. | keyword_in_uncompat
  861. | keyword_window_uncompat
  862. | keyword_hint_uncompat
  863. ;
  864. id_expr_in:
  865. identifier
  866. | keyword_compat
  867. // | keyword_expr_uncompat
  868. // | keyword_table_uncompat
  869. // | keyword_select_uncompat
  870. | keyword_alter_uncompat
  871. // | keyword_in_uncompat
  872. | keyword_window_uncompat
  873. | keyword_hint_uncompat
  874. ;
  875. id_window:
  876. identifier
  877. | keyword_compat
  878. | keyword_expr_uncompat
  879. | keyword_table_uncompat
  880. | keyword_select_uncompat
  881. | keyword_alter_uncompat
  882. | keyword_in_uncompat
  883. // | keyword_window_uncompat
  884. | keyword_hint_uncompat
  885. ;
  886. id_table:
  887. identifier
  888. | keyword_compat
  889. | keyword_expr_uncompat
  890. // | keyword_table_uncompat
  891. | keyword_select_uncompat
  892. // | keyword_alter_uncompat
  893. | keyword_in_uncompat
  894. | keyword_window_uncompat
  895. | keyword_hint_uncompat
  896. ;
  897. id_without:
  898. identifier
  899. | keyword_compat
  900. // | keyword_expr_uncompat
  901. | keyword_table_uncompat
  902. // | keyword_select_uncompat
  903. | keyword_alter_uncompat
  904. | keyword_in_uncompat
  905. | keyword_window_uncompat
  906. | keyword_hint_uncompat
  907. ;
  908. id_hint:
  909. identifier
  910. | keyword_compat
  911. | keyword_expr_uncompat
  912. | keyword_table_uncompat
  913. | keyword_select_uncompat
  914. | keyword_alter_uncompat
  915. | keyword_in_uncompat
  916. | keyword_window_uncompat
  917. // | keyword_hint_uncompat
  918. ;
  919. id_as_compat: identifier | keyword_as_compat;
  920. // ANSI-aware versions of various identifiers with support double-quoted identifiers when PRAGMA AnsiQuotedIdentifiers; is present
  921. an_id: id | STRING_VALUE;
  922. an_id_or_type: id_or_type | STRING_VALUE;
  923. an_id_schema: id_schema | STRING_VALUE;
  924. an_id_expr: id_expr | STRING_VALUE;
  925. an_id_expr_in: id_expr_in | STRING_VALUE;
  926. an_id_window: id_window | STRING_VALUE;
  927. an_id_table: id_table | STRING_VALUE;
  928. an_id_without: id_without | STRING_VALUE;
  929. an_id_hint: id_hint | STRING_VALUE;
  930. an_id_pure: identifier | STRING_VALUE;
  931. an_id_as_compat: id_as_compat | STRING_VALUE;
  932. view_name: an_id | PRIMARY KEY;
  933. opt_id_prefix: (an_id DOT)?;
  934. cluster_expr: (an_id COLON)? (pure_column_or_named | ASTERISK);
  935. id_or_type: id | type_id;
  936. opt_id_prefix_or_type: (an_id_or_type DOT)?;
  937. id_or_at: COMMAT? an_id_or_type;
  938. id_table_or_type: an_id_table | type_id;
  939. id_table_or_at: COMMAT? id_table_or_type;
  940. keyword:
  941. keyword_compat
  942. | keyword_expr_uncompat
  943. | keyword_table_uncompat
  944. | keyword_select_uncompat
  945. | keyword_alter_uncompat
  946. | keyword_in_uncompat
  947. | keyword_window_uncompat
  948. | keyword_hint_uncompat
  949. ;
  950. keyword_expr_uncompat:
  951. ASYMMETRIC
  952. | BETWEEN
  953. | BITCAST
  954. | CASE
  955. | CAST
  956. | CUBE
  957. | CURRENT_DATE
  958. | CURRENT_TIME
  959. | CURRENT_TIMESTAMP
  960. | EMPTY_ACTION
  961. | EXISTS
  962. | FROM
  963. | FULL
  964. | HOP
  965. | JSON_EXISTS
  966. | JSON_VALUE
  967. | JSON_QUERY
  968. | NOT
  969. | NULL
  970. | PROCESS
  971. | REDUCE
  972. | RETURN
  973. | RETURNING
  974. | ROLLUP
  975. | SELECT
  976. | SYMMETRIC
  977. | UNBOUNDED
  978. | WHEN
  979. | WHERE
  980. ;
  981. keyword_table_uncompat:
  982. ANY
  983. | ERASE
  984. | STREAM
  985. ;
  986. keyword_select_uncompat:
  987. ALL
  988. | AS
  989. | ASSUME
  990. | DISTINCT
  991. | EXCEPT
  992. | HAVING
  993. | INTERSECT
  994. | LIMIT
  995. | UNION
  996. | WINDOW
  997. | WITHOUT
  998. ;
  999. keyword_alter_uncompat:
  1000. COLUMN
  1001. ;
  1002. keyword_in_uncompat:
  1003. COMPACT
  1004. ;
  1005. keyword_window_uncompat:
  1006. GROUPS
  1007. | RANGE
  1008. | ROWS
  1009. ;
  1010. keyword_hint_uncompat:
  1011. SCHEMA
  1012. | COLUMNS
  1013. ;
  1014. keyword_as_compat:
  1015. ABORT
  1016. | ACTION
  1017. | ADD
  1018. | AFTER
  1019. | ALTER
  1020. | ANALYZE
  1021. | AND
  1022. | ANSI
  1023. | ARRAY
  1024. | ASC
  1025. | ASYNC
  1026. | AT
  1027. | ATTACH
  1028. | ATTRIBUTES
  1029. | AUTOINCREMENT
  1030. | BACKUP
  1031. | BATCH
  1032. | BEFORE
  1033. | BEGIN
  1034. | BERNOULLI
  1035. | BY
  1036. | CASCADE
  1037. | CHANGEFEED
  1038. | CHECK
  1039. | CLASSIFIER
  1040. // | COLLATE
  1041. | COLLECTION
  1042. | COMMIT
  1043. | CONDITIONAL
  1044. | CONFLICT
  1045. | CONNECT
  1046. | CONSTRAINT
  1047. | CONSUMER
  1048. | COVER
  1049. | CREATE
  1050. // | CROSS
  1051. | CURRENT
  1052. | DATA
  1053. | DATABASE
  1054. | DECIMAL
  1055. | DECLARE
  1056. | DEFAULT
  1057. | DEFERRABLE
  1058. | DEFERRED
  1059. // | DEFINE
  1060. | DELETE
  1061. | DESC
  1062. | DESCRIBE
  1063. | DETACH
  1064. | DIRECTORY
  1065. | DISABLE
  1066. | DISCARD
  1067. // | DO
  1068. | DROP
  1069. | EACH
  1070. | ELSE
  1071. | EMPTY
  1072. | ENCRYPTED
  1073. | END
  1074. | ERROR
  1075. | ESCAPE
  1076. | EVALUATE
  1077. | EXCLUDE
  1078. // | EXCLUSION
  1079. | EXCLUSIVE
  1080. | EXPLAIN
  1081. | EXPORT
  1082. | EXTERNAL
  1083. | FAIL
  1084. | FAMILY
  1085. | FILTER
  1086. | FIRST
  1087. | FLATTEN
  1088. | FOLLOWING
  1089. | FOR
  1090. | FOREIGN
  1091. | FUNCTION
  1092. | GLOB
  1093. | GLOBAL
  1094. | GRANT
  1095. | GROUP
  1096. | GROUPING
  1097. | HASH
  1098. | IF
  1099. | IGNORE
  1100. | ILIKE
  1101. | IMMEDIATE
  1102. | IMPORT
  1103. | IN
  1104. | INCREMENT
  1105. | INCREMENTAL
  1106. | INDEX
  1107. | INDEXED
  1108. | INHERITS
  1109. | INITIAL
  1110. | INITIALLY
  1111. // | INNER
  1112. | INSERT
  1113. | INSTEAD
  1114. | INTO
  1115. | IS
  1116. // | ISNULL
  1117. // | JOIN
  1118. // | KEY
  1119. | LAST
  1120. // | LEFT
  1121. | LEGACY
  1122. | LIKE
  1123. | LOCAL
  1124. | LOGIN
  1125. | MANAGE
  1126. | MATCH
  1127. | MATCHES
  1128. | MATCH_RECOGNIZE
  1129. | MEASURES
  1130. | MICROSECONDS
  1131. | MILLISECONDS
  1132. | MODIFY
  1133. | NANOSECONDS
  1134. // | NATURAL
  1135. | NEXT
  1136. | NO
  1137. | NOLOGIN
  1138. // | NOTNULL
  1139. | NULLS
  1140. | OBJECT
  1141. | OF
  1142. | OFFSET
  1143. | OMIT
  1144. // | ON
  1145. | ONE
  1146. | ONLY
  1147. | OPTION
  1148. | OR
  1149. | ORDER
  1150. | OTHERS
  1151. // | OUTER
  1152. // | OVER
  1153. | PARALLEL
  1154. | PARTITION
  1155. | PASSING
  1156. | PASSWORD
  1157. | PAST
  1158. | PATTERN
  1159. | PER
  1160. | PERMUTE
  1161. | PLAN
  1162. | POOL
  1163. | PRAGMA
  1164. | PRECEDING
  1165. // | PRESORT
  1166. | PRIMARY
  1167. | PRIVILEGES
  1168. | QUERY
  1169. | QUEUE
  1170. | RAISE
  1171. // | READ
  1172. | REFERENCES
  1173. | REGEXP
  1174. | REINDEX
  1175. | RELEASE
  1176. | REMOVE
  1177. | RENAME
  1178. | REPLACE
  1179. | REPLICATION
  1180. | RESET
  1181. | RESPECT
  1182. | RESTART
  1183. | RESTORE
  1184. | RESTRICT
  1185. // | RESULT
  1186. | REVERT
  1187. | REVOKE
  1188. // | RIGHT
  1189. | RLIKE
  1190. | ROLLBACK
  1191. | ROW
  1192. // | SAMPLE
  1193. | SAVEPOINT
  1194. | SECONDS
  1195. | SEEK
  1196. // | SEMI
  1197. | SETS
  1198. | SHOW
  1199. | TSKIP
  1200. | SEQUENCE
  1201. | SOURCE
  1202. | START
  1203. | SUBQUERY
  1204. | SUBSET
  1205. | SYMBOLS
  1206. | SYNC
  1207. | SYSTEM
  1208. | TABLE
  1209. | TABLES
  1210. | TABLESAMPLE
  1211. | TABLESTORE
  1212. | TEMP
  1213. | TEMPORARY
  1214. | THEN
  1215. | TIES
  1216. | TO
  1217. | TOPIC
  1218. | TRANSACTION
  1219. | TRANSFER
  1220. | TRIGGER
  1221. | TYPE
  1222. | UNCONDITIONAL
  1223. | UNIQUE
  1224. | UNKNOWN
  1225. | UNMATCHED
  1226. | UPDATE
  1227. | UPSERT
  1228. | USE
  1229. | USER
  1230. // | USING
  1231. | VACUUM
  1232. | VALUES
  1233. // | VIEW
  1234. | VIRTUAL
  1235. // | WITH
  1236. | WRAPPER
  1237. // | WRITE
  1238. | XOR
  1239. ;
  1240. // insert new keyword into keyword_as_compat also
  1241. keyword_compat: (
  1242. ABORT
  1243. | ACTION
  1244. | ADD
  1245. | AFTER
  1246. | ALTER
  1247. | ANALYZE
  1248. | AND
  1249. | ANSI
  1250. | ARRAY
  1251. | ASC
  1252. | ASYNC
  1253. | AT
  1254. | ATTACH
  1255. | ATTRIBUTES
  1256. | AUTOINCREMENT
  1257. | BACKUP
  1258. | BATCH
  1259. | BEFORE
  1260. | BEGIN
  1261. | BERNOULLI
  1262. | BY
  1263. | CASCADE
  1264. | CHANGEFEED
  1265. | CHECK
  1266. | CLASSIFIER
  1267. | COLLATE
  1268. | COLLECTION
  1269. | COMMIT
  1270. | CONDITIONAL
  1271. | CONFLICT
  1272. | CONNECT
  1273. | CONSTRAINT
  1274. | CONSUMER
  1275. | COVER
  1276. | CREATE
  1277. | CROSS
  1278. | CURRENT
  1279. | DATA
  1280. | DATABASE
  1281. | DECIMAL
  1282. | DECLARE
  1283. | DEFAULT
  1284. | DEFERRABLE
  1285. | DEFERRED
  1286. | DEFINE
  1287. | DELETE
  1288. | DESC
  1289. | DESCRIBE
  1290. | DETACH
  1291. | DIRECTORY
  1292. | DISABLE
  1293. | DISCARD
  1294. | DO
  1295. | DROP
  1296. | EACH
  1297. | ELSE
  1298. | EMPTY
  1299. | ENCRYPTED
  1300. | END
  1301. | ERROR
  1302. | ESCAPE
  1303. | EVALUATE
  1304. | EXCLUDE
  1305. | EXCLUSION
  1306. | EXCLUSIVE
  1307. | EXPLAIN
  1308. | EXPORT
  1309. | EXTERNAL
  1310. | FAIL
  1311. | FAMILY
  1312. | FILTER
  1313. | FIRST
  1314. | FLATTEN
  1315. | FOLLOWING
  1316. | FOR
  1317. | FOREIGN
  1318. | FUNCTION
  1319. | GLOB
  1320. | GLOBAL
  1321. | GRANT
  1322. | GROUP
  1323. | GROUPING
  1324. | HASH
  1325. | IF
  1326. | IGNORE
  1327. | ILIKE
  1328. | IMMEDIATE
  1329. | IMPORT
  1330. | IN
  1331. | INCREMENT
  1332. | INCREMENTAL
  1333. | INDEX
  1334. | INDEXED
  1335. | INHERITS
  1336. | INITIAL
  1337. | INITIALLY
  1338. | INNER
  1339. | INSERT
  1340. | INSTEAD
  1341. | INTO
  1342. | IS
  1343. | ISNULL
  1344. | JOIN
  1345. | KEY
  1346. | LAST
  1347. | LEFT
  1348. | LEGACY
  1349. | LIKE
  1350. | LOCAL
  1351. | LOGIN
  1352. | MANAGE
  1353. | MATCH
  1354. | MATCHES
  1355. | MATCH_RECOGNIZE
  1356. | MEASURES
  1357. | MICROSECONDS
  1358. | MILLISECONDS
  1359. | MODIFY
  1360. | NANOSECONDS
  1361. | NATURAL
  1362. | NEXT
  1363. | NO
  1364. | NOLOGIN
  1365. | NOTNULL
  1366. | NULLS
  1367. | OBJECT
  1368. | OF
  1369. | OFFSET
  1370. | OMIT
  1371. | ON
  1372. | ONE
  1373. | ONLY
  1374. | OPTION
  1375. | OR
  1376. | ORDER
  1377. | OTHERS
  1378. | OUTER
  1379. | OVER
  1380. | PARALLEL
  1381. | PARTITION
  1382. | PASSING
  1383. | PASSWORD
  1384. | PAST
  1385. | PATTERN
  1386. | PER
  1387. | PERMUTE
  1388. | PLAN
  1389. | POOL
  1390. | PRAGMA
  1391. | PRECEDING
  1392. | PRESORT
  1393. | PRIMARY
  1394. | PRIVILEGES
  1395. | QUERY
  1396. | QUEUE
  1397. | RAISE
  1398. // | READ
  1399. | REFERENCES
  1400. | REGEXP
  1401. | REINDEX
  1402. | RELEASE
  1403. | REMOVE
  1404. | RENAME
  1405. | REPLACE
  1406. | REPLICATION
  1407. | RESET
  1408. | RESPECT
  1409. | RESTART
  1410. | RESTORE
  1411. | RESTRICT
  1412. | RESULT
  1413. | REVERT
  1414. | REVOKE
  1415. | RIGHT
  1416. | RLIKE
  1417. | ROLLBACK
  1418. | ROW
  1419. | SAMPLE
  1420. | SAVEPOINT
  1421. | SECONDS
  1422. | SEEK
  1423. | SEMI
  1424. | SETS
  1425. | SHOW
  1426. | TSKIP
  1427. | SEQUENCE
  1428. | SOURCE
  1429. | START
  1430. | SUBQUERY
  1431. | SUBSET
  1432. | SYMBOLS
  1433. | SYNC
  1434. | SYSTEM
  1435. | TABLE
  1436. | TABLES
  1437. | TABLESAMPLE
  1438. | TABLESTORE
  1439. | TEMP
  1440. | TEMPORARY
  1441. | THEN
  1442. | TIES
  1443. | TO
  1444. | TOPIC
  1445. | TRANSACTION
  1446. | TRANSFER
  1447. | TRIGGER
  1448. | TYPE
  1449. | UNCONDITIONAL
  1450. | UNIQUE
  1451. | UNKNOWN
  1452. | UNMATCHED
  1453. | UPDATE
  1454. | UPSERT
  1455. | USE
  1456. | USER
  1457. | USING
  1458. | VACUUM
  1459. | VALUES
  1460. | VIEW
  1461. | VIRTUAL
  1462. | WITH
  1463. | WRAPPER
  1464. // | WRITE
  1465. | XOR
  1466. );
  1467. type_id:
  1468. OPTIONAL
  1469. | TUPLE
  1470. | STRUCT
  1471. | VARIANT
  1472. | LIST
  1473. // | STREAM
  1474. | FLOW
  1475. | DICT
  1476. | SET
  1477. | ENUM
  1478. | RESOURCE
  1479. | TAGGED
  1480. | CALLABLE
  1481. ;
  1482. bool_value: (TRUE | FALSE);
  1483. real: REAL;
  1484. integer: DIGITS | INTEGER_VALUE;
  1485. //
  1486. // Lexer
  1487. //
  1488. EQUALS: '=';
  1489. EQUALS2: '==';
  1490. NOT_EQUALS: '!=';
  1491. NOT_EQUALS2: '<>';
  1492. LESS: '<';
  1493. LESS_OR_EQ: '<=';
  1494. GREATER: '>';
  1495. GREATER_OR_EQ: '>=';
  1496. SHIFT_LEFT: '<<';
  1497. ROT_LEFT: '|<<';
  1498. AMPERSAND: '&';
  1499. PIPE: '|';
  1500. DOUBLE_PIPE: '||';
  1501. STRUCT_OPEN: '<|';
  1502. STRUCT_CLOSE: '|>';
  1503. PLUS: '+';
  1504. MINUS: '-';
  1505. TILDA: '~';
  1506. ASTERISK: '*';
  1507. SLASH: '/';
  1508. PERCENT: '%';
  1509. SEMICOLON: ';';
  1510. DOT: '.';
  1511. COMMA: ',';
  1512. LPAREN: '(';
  1513. RPAREN: ')';
  1514. QUESTION: '?';
  1515. COLON: ':';
  1516. COMMAT: '@';
  1517. DOLLAR: '$';
  1518. LBRACE_CURLY: '{';
  1519. RBRACE_CURLY: '}';
  1520. CARET: '^';
  1521. NAMESPACE: '::';
  1522. ARROW: '->';
  1523. RBRACE_SQUARE: ']';
  1524. LBRACE_SQUARE: '['; // pair ]
  1525. fragment BACKSLASH: '\\';
  1526. fragment QUOTE_DOUBLE: '"';
  1527. fragment QUOTE_SINGLE: '\'';
  1528. fragment BACKTICK: '`';
  1529. fragment DOUBLE_COMMAT: '@@';
  1530. // http://www.antlr.org/wiki/pages/viewpage.action?pageId=1782
  1531. fragment A:('a'|'A');
  1532. fragment B:('b'|'B');
  1533. fragment C:('c'|'C');
  1534. fragment D:('d'|'D');
  1535. fragment E:('e'|'E');
  1536. fragment F:('f'|'F');
  1537. fragment G:('g'|'G');
  1538. fragment H:('h'|'H');
  1539. fragment I:('i'|'I');
  1540. fragment J:('j'|'J');
  1541. fragment K:('k'|'K');
  1542. fragment L:('l'|'L');
  1543. fragment M:('m'|'M');
  1544. fragment N:('n'|'N');
  1545. fragment O:('o'|'O');
  1546. fragment P:('p'|'P');
  1547. fragment Q:('q'|'Q');
  1548. fragment R:('r'|'R');
  1549. fragment S:('s'|'S');
  1550. fragment T:('t'|'T');
  1551. fragment U:('u'|'U');
  1552. fragment V:('v'|'V');
  1553. fragment W:('w'|'W');
  1554. fragment X:('x'|'X');
  1555. fragment Y:('y'|'Y');
  1556. fragment Z:('z'|'Z');
  1557. ABORT: A B O R T;
  1558. ACTION: A C T I O N;
  1559. ADD: A D D;
  1560. AFTER: A F T E R;
  1561. ALL: A L L;
  1562. ALTER: A L T E R;
  1563. ANALYZE: A N A L Y Z E;
  1564. AND: A N D;
  1565. ANSI: A N S I;
  1566. ANY: A N Y;
  1567. ARRAY: A R R A Y;
  1568. AS: A S;
  1569. ASC: A S C;
  1570. ASSUME: A S S U M E;
  1571. ASYMMETRIC: A S Y M M E T R I C;
  1572. ASYNC: A S Y N C;
  1573. AT: A T;
  1574. ATTACH: A T T A C H;
  1575. ATTRIBUTES: A T T R I B U T E S;
  1576. AUTOINCREMENT: A U T O I N C R E M E N T;
  1577. AUTOMAP: A U T O M A P;
  1578. BACKUP: B A C K U P;
  1579. BATCH: B A T C H;
  1580. COLLECTION: C O L L E C T I O N;
  1581. BEFORE: B E F O R E;
  1582. BEGIN: B E G I N;
  1583. BERNOULLI: B E R N O U L L I;
  1584. BETWEEN: B E T W E E N;
  1585. BITCAST: B I T C A S T;
  1586. BY: B Y;
  1587. CALLABLE: C A L L A B L E;
  1588. CASCADE: C A S C A D E;
  1589. CASE: C A S E;
  1590. CAST: C A S T;
  1591. CHANGEFEED: C H A N G E F E E D;
  1592. CHECK: C H E C K;
  1593. CLASSIFIER: C L A S S I F I E R;
  1594. COLLATE: C O L L A T E;
  1595. COLUMN: C O L U M N;
  1596. COLUMNS: C O L U M N S;
  1597. COMMIT: C O M M I T;
  1598. COMPACT: C O M P A C T;
  1599. CONDITIONAL: C O N D I T I O N A L;
  1600. CONFLICT: C O N F L I C T;
  1601. CONNECT: C O N N E C T;
  1602. CONSTRAINT: C O N S T R A I N T;
  1603. CONSUMER: C O N S U M E R;
  1604. COVER: C O V E R;
  1605. CREATE: C R E A T E;
  1606. CROSS: C R O S S;
  1607. CUBE: C U B E;
  1608. CURRENT: C U R R E N T;
  1609. CURRENT_DATE: C U R R E N T '_' D A T E;
  1610. CURRENT_TIME: C U R R E N T '_' T I M E;
  1611. CURRENT_TIMESTAMP: C U R R E N T '_' T I M E S T A M P;
  1612. DATA: D A T A;
  1613. DATABASE: D A T A B A S E;
  1614. DECIMAL: D E C I M A L;
  1615. DECLARE: D E C L A R E;
  1616. DEFAULT: D E F A U L T;
  1617. DEFERRABLE: D E F E R R A B L E;
  1618. DEFERRED: D E F E R R E D;
  1619. DEFINE: D E F I N E;
  1620. DELETE: D E L E T E;
  1621. DESC: D E S C;
  1622. DESCRIBE: D E S C R I B E;
  1623. DETACH: D E T A C H;
  1624. DICT: D I C T;
  1625. DIRECTORY: D I R E C T O R Y;
  1626. DISABLE: D I S A B L E;
  1627. DISCARD: D I S C A R D;
  1628. DISTINCT: D I S T I N C T;
  1629. DO: D O;
  1630. DROP: D R O P;
  1631. // TODO: fix sql formatter and drop EACH
  1632. EACH: E A C H;
  1633. ELSE: E L S E;
  1634. EMPTY: E M P T Y;
  1635. EMPTY_ACTION: E M P T Y '_' A C T I O N;
  1636. ENCRYPTED: E N C R Y P T E D;
  1637. END: E N D;
  1638. ENUM: E N U M;
  1639. ERASE: E R A S E;
  1640. ERROR: E R R O R;
  1641. ESCAPE: E S C A P E;
  1642. EVALUATE: E V A L U A T E;
  1643. EXCEPT: E X C E P T;
  1644. EXCLUDE: E X C L U D E;
  1645. EXCLUSION: E X C L U S I O N;
  1646. EXCLUSIVE: E X C L U S I V E;
  1647. EXISTS: E X I S T S;
  1648. EXPLAIN: E X P L A I N;
  1649. EXPORT: E X P O R T;
  1650. EXTERNAL: E X T E R N A L;
  1651. FAIL: F A I L;
  1652. FALSE: F A L S E;
  1653. FAMILY: F A M I L Y;
  1654. FILTER: F I L T E R;
  1655. FIRST: F I R S T;
  1656. FLATTEN: F L A T T E N;
  1657. FLOW: F L O W;
  1658. FOLLOWING: F O L L O W I N G;
  1659. FOR: F O R;
  1660. FOREIGN: F O R E I G N;
  1661. FROM: F R O M;
  1662. FULL: F U L L;
  1663. FUNCTION: F U N C T I O N;
  1664. GLOB: G L O B;
  1665. GLOBAL: G L O B A L;
  1666. GRANT: G R A N T;
  1667. GROUP: G R O U P;
  1668. GROUPING: G R O U P I N G;
  1669. GROUPS: G R O U P S;
  1670. HASH: H A S H;
  1671. HAVING: H A V I N G;
  1672. HOP: H O P;
  1673. IF: I F;
  1674. IGNORE: I G N O R E;
  1675. ILIKE: I L I K E;
  1676. IMMEDIATE: I M M E D I A T E;
  1677. IMPORT: I M P O R T;
  1678. IN: I N;
  1679. INCREMENT: I N C R E M E N T;
  1680. INCREMENTAL: I N C R E M E N T A L;
  1681. INDEX: I N D E X;
  1682. INDEXED: I N D E X E D;
  1683. INHERITS: I N H E R I T S;
  1684. INITIAL: I N I T I A L;
  1685. INITIALLY: I N I T I A L L Y;
  1686. INNER: I N N E R;
  1687. INSERT: I N S E R T;
  1688. INSTEAD: I N S T E A D;
  1689. INTERSECT: I N T E R S E C T;
  1690. INTO: I N T O;
  1691. IS: I S;
  1692. ISNULL: I S N U L L;
  1693. JOIN: J O I N;
  1694. JSON_EXISTS: J S O N '_' E X I S T S;
  1695. JSON_QUERY: J S O N '_' Q U E R Y;
  1696. JSON_VALUE: J S O N '_' V A L U E;
  1697. KEY: K E Y;
  1698. LAST: L A S T;
  1699. LEFT: L E F T;
  1700. LEGACY: L E G A C Y;
  1701. LIKE: L I K E;
  1702. LIMIT: L I M I T;
  1703. LIST: L I S T;
  1704. LOCAL: L O C A L;
  1705. LOGIN: L O G I N;
  1706. MANAGE: M A N A G E;
  1707. MATCH: M A T C H;
  1708. MATCHES: M A T C H E S;
  1709. MATCH_RECOGNIZE: M A T C H '_' R E C O G N I Z E;
  1710. MEASURES: M E A S U R E S;
  1711. MICROSECONDS: M I C R O S E C O N D S;
  1712. MILLISECONDS: M I L L I S E C O N D S;
  1713. MODIFY: M O D I F Y;
  1714. NANOSECONDS: N A N O S E C O N D S;
  1715. NATURAL: N A T U R A L;
  1716. NEXT: N E X T;
  1717. NO: N O;
  1718. NOLOGIN: N O L O G I N;
  1719. NOT: N O T;
  1720. NOTNULL: N O T N U L L;
  1721. NULL: N U L L;
  1722. NULLS: N U L L S;
  1723. OBJECT: O B J E C T;
  1724. OF: O F;
  1725. OFFSET: O F F S E T;
  1726. OMIT: O M I T;
  1727. ON: O N;
  1728. ONE: O N E;
  1729. ONLY: O N L Y;
  1730. OPTION: O P T I O N;
  1731. OPTIONAL: O P T I O N A L;
  1732. OR: O R;
  1733. ORDER: O R D E R;
  1734. OTHERS: O T H E R S;
  1735. OUTER: O U T E R;
  1736. OVER: O V E R;
  1737. PARALLEL: P A R A L L E L;
  1738. PARTITION: P A R T I T I O N;
  1739. PASSING: P A S S I N G;
  1740. PASSWORD: P A S S W O R D;
  1741. PAST: P A S T;
  1742. PATTERN: P A T T E R N;
  1743. PER: P E R;
  1744. PERMUTE: P E R M U T E;
  1745. PLAN: P L A N;
  1746. POOL: P O O L;
  1747. PRAGMA: P R A G M A;
  1748. PRECEDING: P R E C E D I N G;
  1749. PRESORT: P R E S O R T;
  1750. PRIMARY: P R I M A R Y;
  1751. PRIVILEGES: P R I V I L E G E S;
  1752. PROCESS: P R O C E S S;
  1753. QUERY: Q U E R Y;
  1754. QUEUE: Q U E U E;
  1755. RAISE: R A I S E;
  1756. RANGE: R A N G E;
  1757. //READ: R E A D;
  1758. REDUCE: R E D U C E;
  1759. REFERENCES: R E F E R E N C E S;
  1760. REGEXP: R E G E X P;
  1761. REINDEX: R E I N D E X;
  1762. RELEASE: R E L E A S E;
  1763. REMOVE: R E M O V E;
  1764. RENAME: R E N A M E;
  1765. REPEATABLE: R E P E A T A B L E;
  1766. REPLACE: R E P L A C E;
  1767. REPLICATION: R E P L I C A T I O N;
  1768. RESET: R E S E T;
  1769. RESOURCE: R E S O U R C E;
  1770. RESPECT: R E S P E C T;
  1771. RESTART: R E S T A R T;
  1772. RESTORE: R E S T O R E;
  1773. RESTRICT: R E S T R I C T;
  1774. RESULT: R E S U L T;
  1775. RETURN: R E T U R N;
  1776. RETURNING: R E T U R N I N G;
  1777. REVERT: R E V E R T;
  1778. REVOKE: R E V O K E;
  1779. RIGHT: R I G H T;
  1780. RLIKE: R L I K E;
  1781. ROLLBACK: R O L L B A C K;
  1782. ROLLUP: R O L L U P;
  1783. ROW: R O W;
  1784. ROWS: R O W S;
  1785. SAMPLE: S A M P L E;
  1786. SAVEPOINT: S A V E P O I N T;
  1787. SCHEMA: S C H E M A;
  1788. SECONDS: S E C O N D S;
  1789. SEEK: S E E K;
  1790. SELECT: S E L E C T;
  1791. SEMI: S E M I;
  1792. SET: S E T;
  1793. SETS: S E T S;
  1794. SHOW: S H O W;
  1795. TSKIP: S K I P;
  1796. SEQUENCE: S E Q U E N C E;
  1797. SOURCE: S O U R C E;
  1798. START: S T A R T;
  1799. STREAM: S T R E A M;
  1800. STRUCT: S T R U C T;
  1801. SUBQUERY: S U B Q U E R Y;
  1802. SUBSET: S U B S E T;
  1803. SYMBOLS: S Y M B O L S;
  1804. SYMMETRIC: S Y M M E T R I C;
  1805. SYNC: S Y N C;
  1806. SYSTEM: S Y S T E M;
  1807. TABLE: T A B L E;
  1808. TABLES: T A B L E S;
  1809. TABLESAMPLE: T A B L E S A M P L E;
  1810. TABLESTORE: T A B L E S T O R E;
  1811. TAGGED: T A G G E D;
  1812. TEMP: T E M P;
  1813. TEMPORARY: T E M P O R A R Y;
  1814. THEN: T H E N;
  1815. TIES: T I E S;
  1816. TO: T O;
  1817. TOPIC: T O P I C;
  1818. TRANSACTION: T R A N S A C T I O N;
  1819. TRANSFER: T R A N S F E R;
  1820. TRIGGER: T R I G G E R;
  1821. TRUE: T R U E;
  1822. TUPLE: T U P L E;
  1823. TYPE: T Y P E;
  1824. UNBOUNDED: U N B O U N D E D;
  1825. UNCONDITIONAL: U N C O N D I T I O N A L;
  1826. UNION: U N I O N;
  1827. UNIQUE: U N I Q U E;
  1828. UNKNOWN: U N K N O W N;
  1829. UNMATCHED: U N M A T C H E D;
  1830. UPDATE: U P D A T E;
  1831. UPSERT: U P S E R T;
  1832. USE: U S E;
  1833. USER: U S E R;
  1834. USING: U S I N G;
  1835. VACUUM: V A C U U M;
  1836. VALUES: V A L U E S;
  1837. VARIANT: V A R I A N T;
  1838. VIEW: V I E W;
  1839. VIRTUAL: V I R T U A L;
  1840. WHEN: W H E N;
  1841. WHERE: W H E R E;
  1842. WINDOW: W I N D O W;
  1843. WITH: W I T H;
  1844. WITHOUT: W I T H O U T;
  1845. WRAPPER: W R A P P E R;
  1846. //WRITE: W R I T E;
  1847. XOR: X O R;
  1848. // YQL Default Lexer:
  1849. // GRAMMAR_STRING_CORE_SINGLE = ~(QUOTE_SINGLE | BACKSLASH) | (BACKSLASH .)
  1850. // GRAMMAR_STRING_CORE_DOUBLE = ~(QUOTE_DOUBLE | BACKSLASH) | (BACKSLASH .)
  1851. // ANSI Lexer:
  1852. // GRAMMAR_STRING_CORE_SINGLE = ~QUOTE_SINGLE | (QUOTE_SINGLE QUOTE_SINGLE)
  1853. // GRAMMAR_STRING_CORE_DOUBLE = ~QUOTE_DOUBLE | (QUOTE_DOUBLE QUOTE_DOUBLE)
  1854. fragment STRING_CORE_SINGLE: @GRAMMAR_STRING_CORE_SINGLE@;
  1855. fragment STRING_CORE_DOUBLE: @GRAMMAR_STRING_CORE_DOUBLE@;
  1856. fragment STRING_SINGLE: (QUOTE_SINGLE STRING_CORE_SINGLE* QUOTE_SINGLE);
  1857. fragment STRING_DOUBLE: (QUOTE_DOUBLE STRING_CORE_DOUBLE* QUOTE_DOUBLE);
  1858. fragment STRING_MULTILINE: (DOUBLE_COMMAT .*? DOUBLE_COMMAT)+ COMMAT?;
  1859. STRING_VALUE: ((STRING_SINGLE | STRING_DOUBLE | STRING_MULTILINE) (S | U | Y | J | P (T | B | V)?)?);
  1860. ID_PLAIN: ('a'..'z' | 'A'..'Z' | '_') ('a'..'z' | 'A'..'Z' | '_' | DIGIT)*;
  1861. fragment ID_QUOTED_CORE: '\\'. | '``' | ~('`' | '\\');
  1862. ID_QUOTED: BACKTICK ID_QUOTED_CORE* BACKTICK;
  1863. fragment DIGIT: '0'..'9';
  1864. fragment HEXDIGIT: '0'..'9' | 'a'..'f' | 'A'..'F';
  1865. fragment HEXDIGITS: '0' X HEXDIGIT+;
  1866. fragment OCTDIGITS: '0' O ('0'..'8')+;
  1867. fragment BINDIGITS: '0' B ('0' | '1')+;
  1868. fragment DECDIGITS: DIGIT+;
  1869. DIGITS: DECDIGITS | HEXDIGITS | OCTDIGITS | BINDIGITS;
  1870. // not all combinations of P/U with L/S/T/I/B/N are actually valid - this is resolved in sql.cpp
  1871. INTEGER_VALUE: DIGITS ((P | U)? (L | S | T | I | B | N)?);
  1872. fragment FLOAT_EXP : E (PLUS | MINUS)? DECDIGITS ;
  1873. REAL:
  1874. (
  1875. DECDIGITS DOT DIGIT* FLOAT_EXP?
  1876. | DECDIGITS FLOAT_EXP
  1877. // | DOT DECDIGITS FLOAT_EXP? // Conflicts with tuple element access through DOT
  1878. ) (F | P (F ('4'|'8') | N)?)?
  1879. ;
  1880. BLOB: X QUOTE_SINGLE HEXDIGIT+ QUOTE_SINGLE;
  1881. // YQL Default Lexer:
  1882. // GRAMMAR_MULTILINE_COMMENT_CORE = .
  1883. // ANSI Lexer:
  1884. // GRAMMAR_MULTILINE_COMMENT_CORE = MULTILINE_COMMENT | .
  1885. fragment MULTILINE_COMMENT: '/*' ( @GRAMMAR_MULTILINE_COMMENT_CORE@ )*? '*/';
  1886. fragment LINE_COMMENT: '--' ~('\n'|'\r')* ('\r' '\n'? | '\n' | EOF);
  1887. WS: (' '|'\r'|'\t'|'\u000C'|'\n')->channel(HIDDEN);
  1888. COMMENT: (MULTILINE_COMMENT|LINE_COMMENT)->channel(HIDDEN);