SQLv1.g.in 54 KB

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