SQLv1.g.in 53 KB

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