xref: /aosp_15_r20/external/perfetto/src/trace_processor/perfetto_sql/grammar/perfettosql_grammar.y (revision 6dbdd20afdafa5e3ca9b8809fa73465d530080dc)
1 %name PerfettoSqlParser
2 %token_prefix TK_
3 %start_symbol input
4 
5 %include {
6 #include <stddef.h>
7 
8 #define YYNOERRORRECOVERY 1
9 }
10 
11 %token CREATE REPLACE PERFETTO MACRO INCLUDE MODULE RETURNS FUNCTION.
12 
13 %left OR.
14 %left AND.
15 %right NOT.
16 %left IS MATCH LIKE_KW BETWEEN IN ISNULL NOTNULL NE EQ.
17 %left GT LE LT GE.
18 %right ESCAPE.
19 %left BITAND BITOR LSHIFT RSHIFT.
20 %left PLUS MINUS.
21 %left STAR SLASH REM.
22 %left CONCAT PTR.
23 %left COLLATE.
24 %right BITNOT.
25 %nonassoc ON.
26 
27 %fallback ID
28   ABORT ACTION AFTER ANALYZE ASC ATTACH BEFORE BEGIN BY CASCADE CAST COLUMNKW
29   CONFLICT DATABASE DEFERRED DESC DETACH DO
30   EACH END EXCLUSIVE EXPLAIN FAIL FOR
31   IGNORE IMMEDIATE INITIALLY INSTEAD LIKE_KW MATCH NO PLAN
32   QUERY KEY OF OFFSET PRAGMA RAISE RECURSIVE RELEASE REPLACE RESTRICT ROW ROWS
33   ROLLBACK SAVEPOINT TEMP TRIGGER VACUUM VIEW VIRTUAL WITH WITHOUT
34   NULLS FIRST LAST
35   EXCEPT INTERSECT UNION
36   CURRENT FOLLOWING PARTITION PRECEDING RANGE UNBOUNDED
37   EXCLUDE GROUPS OTHERS TIES
38   WITHIN
39   GENERATED ALWAYS
40   MATERIALIZED
41   REINDEX RENAME CTIME_KW IF
42   .
43 %wildcard ANY.
44 
45 // Reprint of input file "buildtools/sqlite_src/src/parse.y".
46 // Symbols:
47 //   0 $                      160 ELSE
48 //   1 SEMI                   161 INDEX
49 //   2 EXPLAIN                162 ALTER
50 //   3 QUERY                  163 ADD
51 //   4 PLAN                   164 WINDOW
52 //   5 BEGIN                  165 OVER
53 //   6 TRANSACTION            166 FILTER
54 //   7 DEFERRED               167 COLUMN
55 //   8 IMMEDIATE              168 AGG_FUNCTION
56 //   9 EXCLUSIVE              169 AGG_COLUMN
57 //  10 COMMIT                 170 TRUEFALSE
58 //  11 END                    171 ISNOT
59 //  12 ROLLBACK               172 FUNCTION
60 //  13 SAVEPOINT              173 UMINUS
61 //  14 RELEASE                174 UPLUS
62 //  15 TO                     175 TRUTH
63 //  16 TABLE                  176 REGISTER
64 //  17 CREATE                 177 VECTOR
65 //  18 IF                     178 SELECT_COLUMN
66 //  19 NOT                    179 IF_NULL_ROW
67 //  20 EXISTS                 180 ASTERISK
68 //  21 TEMP                   181 SPAN
69 //  22 LP                     182 ERROR
70 //  23 RP                     183 SPACE
71 //  24 AS                     184 ILLEGAL
72 //  25 COMMA                  185 input
73 //  26 WITHOUT                186 cmdlist
74 //  27 ABORT                  187 ecmd
75 //  28 ACTION                 188 cmdx
76 //  29 AFTER                  189 explain
77 //  30 ANALYZE                190 cmd
78 //  31 ASC                    191 transtype
79 //  32 ATTACH                 192 trans_opt
80 //  33 BEFORE                 193 nm
81 //  34 BY                     194 savepoint_opt
82 //  35 CASCADE                195 create_table
83 //  36 CAST                   196 create_table_args
84 //  37 CONFLICT               197 createkw
85 //  38 DATABASE               198 temp
86 //  39 DESC                   199 ifnotexists
87 //  40 DETACH                 200 dbnm
88 //  41 EACH                   201 columnlist
89 //  42 FAIL                   202 conslist_opt
90 //  43 OR                     203 table_option_set
91 //  44 AND                    204 select
92 //  45 IS                     205 table_option
93 //  46 MATCH                  206 columnname
94 //  47 LIKE_KW                207 carglist
95 //  48 BETWEEN                208 typetoken
96 //  49 IN                     209 typename
97 //  50 ISNULL                 210 signed
98 //  51 NOTNULL                211 plus_num
99 //  52 NE                     212 minus_num
100 //  53 EQ                     213 scanpt
101 //  54 GT                     214 scantok
102 //  55 LE                     215 ccons
103 //  56 LT                     216 term
104 //  57 GE                     217 expr
105 //  58 ESCAPE                 218 onconf
106 //  59 ID                     219 sortorder
107 //  60 COLUMNKW               220 autoinc
108 //  61 DO                     221 eidlist_opt
109 //  62 FOR                    222 refargs
110 //  63 IGNORE                 223 defer_subclause
111 //  64 INITIALLY              224 generated
112 //  65 INSTEAD                225 refarg
113 //  66 NO                     226 refact
114 //  67 KEY                    227 init_deferred_pred_opt
115 //  68 OF                     228 conslist
116 //  69 OFFSET                 229 tconscomma
117 //  70 PRAGMA                 230 tcons
118 //  71 RAISE                  231 sortlist
119 //  72 RECURSIVE              232 eidlist
120 //  73 REPLACE                233 defer_subclause_opt
121 //  74 RESTRICT               234 orconf
122 //  75 ROW                    235 resolvetype
123 //  76 ROWS                   236 raisetype
124 //  77 TRIGGER                237 ifexists
125 //  78 VACUUM                 238 fullname
126 //  79 VIEW                   239 selectnowith
127 //  80 VIRTUAL                240 oneselect
128 //  81 WITH                   241 wqlist
129 //  82 NULLS                  242 multiselect_op
130 //  83 FIRST                  243 distinct
131 //  84 LAST                   244 selcollist
132 //  85 CURRENT                245 from
133 //  86 FOLLOWING              246 where_opt
134 //  87 PARTITION              247 groupby_opt
135 //  88 PRECEDING              248 having_opt
136 //  89 RANGE                  249 orderby_opt
137 //  90 UNBOUNDED              250 limit_opt
138 //  91 EXCLUDE                251 window_clause
139 //  92 GROUPS                 252 values
140 //  93 OTHERS                 253 nexprlist
141 //  94 TIES                   254 sclp
142 //  95 GENERATED              255 as
143 //  96 ALWAYS                 256 seltablist
144 //  97 MATERIALIZED           257 stl_prefix
145 //  98 REINDEX                258 joinop
146 //  99 RENAME                 259 on_using
147 // 100 CTIME_KW               260 indexed_by
148 // 101 ANY                    261 exprlist
149 // 102 BITAND                 262 xfullname
150 // 103 BITOR                  263 idlist
151 // 104 LSHIFT                 264 indexed_opt
152 // 105 RSHIFT                 265 nulls
153 // 106 PLUS                   266 with
154 // 107 MINUS                  267 where_opt_ret
155 // 108 STAR                   268 setlist
156 // 109 SLASH                  269 insert_cmd
157 // 110 REM                    270 idlist_opt
158 // 111 CONCAT                 271 upsert
159 // 112 PTR                    272 returning
160 // 113 COLLATE                273 filter_over
161 // 114 BITNOT                 274 likeop
162 // 115 ON                     275 between_op
163 // 116 INDEXED                276 in_op
164 // 117 STRING                 277 paren_exprlist
165 // 118 JOIN_KW                278 case_operand
166 // 119 CONSTRAINT             279 case_exprlist
167 // 120 DEFAULT                280 case_else
168 // 121 NULL                   281 uniqueflag
169 // 122 PRIMARY                282 collate
170 // 123 UNIQUE                 283 vinto
171 // 124 CHECK                  284 nmnum
172 // 125 REFERENCES             285 trigger_decl
173 // 126 AUTOINCR               286 trigger_cmd_list
174 // 127 INSERT                 287 trigger_time
175 // 128 DELETE                 288 trigger_event
176 // 129 UPDATE                 289 foreach_clause
177 // 130 SET                    290 when_clause
178 // 131 DEFERRABLE             291 trigger_cmd
179 // 132 FOREIGN                292 trnm
180 // 133 DROP                   293 tridxby
181 // 134 UNION                  294 database_kw_opt
182 // 135 ALL                    295 key_opt
183 // 136 EXCEPT                 296 add_column_fullname
184 // 137 INTERSECT              297 kwcolumn_opt
185 // 138 SELECT                 298 create_vtab
186 // 139 VALUES                 299 vtabarglist
187 // 140 DISTINCT               300 vtabarg
188 // 141 DOT                    301 vtabargtoken
189 // 142 FROM                   302 lp
190 // 143 JOIN                   303 anylist
191 // 144 USING                  304 wqitem
192 // 145 ORDER                  305 wqas
193 // 146 GROUP                  306 windowdefn_list
194 // 147 HAVING                 307 windowdefn
195 // 148 LIMIT                  308 window
196 // 149 WHERE                  309 frame_opt
197 // 150 RETURNING              310 part_opt
198 // 151 INTO                   311 filter_clause
199 // 152 NOTHING                312 over_clause
200 // 153 FLOAT                  313 range_or_rows
201 // 154 BLOB                   314 frame_bound
202 // 155 INTEGER                315 frame_bound_s
203 // 156 VARIABLE               316 frame_bound_e
204 // 157 CASE                   317 frame_exclude_opt
205 // 158 WHEN                   318 frame_exclude
206 // 159 THEN
207 explain ::= EXPLAIN.
208 explain ::= EXPLAIN QUERY PLAN.
209 cmdx ::= cmd.
210 cmd ::= BEGIN transtype trans_opt.
211 transtype ::=.
212 transtype ::= DEFERRED.
213 transtype ::= IMMEDIATE.
214 transtype ::= EXCLUSIVE.
215 cmd ::= COMMIT|END trans_opt.
216 cmd ::= ROLLBACK trans_opt.
217 cmd ::= SAVEPOINT nm.
218 cmd ::= RELEASE savepoint_opt nm.
219 cmd ::= ROLLBACK trans_opt TO savepoint_opt nm.
220 create_table ::= createkw temp TABLE ifnotexists nm dbnm.
221 createkw ::= CREATE.
222 ifnotexists ::=.
223 ifnotexists ::= IF NOT EXISTS.
224 temp ::= TEMP.
225 temp ::=.
226 create_table_args ::= LP columnlist conslist_opt RP table_option_set.
227 create_table_args ::= AS select.
228 table_option_set ::=.
229 table_option_set ::= table_option_set COMMA table_option.
230 table_option ::= WITHOUT nm.
231 table_option ::= nm.
232 columnname ::= nm typetoken.
233 typetoken ::=.
234 typetoken ::= typename LP signed RP.
235 typetoken ::= typename LP signed COMMA signed RP.
236 typename ::= typename ID|STRING.
237 scanpt ::=.
238 scantok ::=.
239 ccons ::= CONSTRAINT nm.
240 ccons ::= DEFAULT scantok term.
241 ccons ::= DEFAULT LP expr RP.
242 ccons ::= DEFAULT PLUS scantok term.
243 ccons ::= DEFAULT MINUS scantok term.
244 ccons ::= DEFAULT scantok ID|INDEXED.
245 ccons ::= NOT NULL onconf.
246 ccons ::= PRIMARY KEY sortorder onconf autoinc.
247 ccons ::= UNIQUE onconf.
248 ccons ::= CHECK LP expr RP.
249 ccons ::= REFERENCES nm eidlist_opt refargs.
250 ccons ::= defer_subclause.
251 ccons ::= COLLATE ID|STRING.
252 generated ::= LP expr RP.
253 generated ::= LP expr RP ID.
254 autoinc ::=.
255 autoinc ::= AUTOINCR.
256 refargs ::=.
257 refargs ::= refargs refarg.
258 refarg ::= MATCH nm.
259 refarg ::= ON INSERT refact.
260 refarg ::= ON DELETE refact.
261 refarg ::= ON UPDATE refact.
262 refact ::= SET NULL.
263 refact ::= SET DEFAULT.
264 refact ::= CASCADE.
265 refact ::= RESTRICT.
266 refact ::= NO ACTION.
267 defer_subclause ::= NOT DEFERRABLE init_deferred_pred_opt.
268 defer_subclause ::= DEFERRABLE init_deferred_pred_opt.
269 init_deferred_pred_opt ::=.
270 init_deferred_pred_opt ::= INITIALLY DEFERRED.
271 init_deferred_pred_opt ::= INITIALLY IMMEDIATE.
272 conslist_opt ::=.
273 tconscomma ::= COMMA.
274 tcons ::= CONSTRAINT nm.
275 tcons ::= PRIMARY KEY LP sortlist autoinc RP onconf.
276 tcons ::= UNIQUE LP sortlist RP onconf.
277 tcons ::= CHECK LP expr RP onconf.
278 tcons ::= FOREIGN KEY LP eidlist RP REFERENCES nm eidlist_opt refargs defer_subclause_opt.
279 defer_subclause_opt ::=.
280 onconf ::=.
281 onconf ::= ON CONFLICT resolvetype.
282 orconf ::=.
283 orconf ::= OR resolvetype.
284 resolvetype ::= IGNORE.
285 resolvetype ::= REPLACE.
286 cmd ::= DROP TABLE ifexists fullname.
287 ifexists ::= IF EXISTS.
288 ifexists ::=.
289 cmd ::= createkw temp VIEW ifnotexists nm dbnm eidlist_opt AS select.
290 cmd ::= DROP VIEW ifexists fullname.
291 cmd ::= select.
292 select ::= WITH wqlist selectnowith.
293 select ::= WITH RECURSIVE wqlist selectnowith.
294 select ::= selectnowith.
295 selectnowith ::= selectnowith multiselect_op oneselect.
296 multiselect_op ::= UNION.
297 multiselect_op ::= UNION ALL.
298 multiselect_op ::= EXCEPT|INTERSECT.
299 oneselect ::= SELECT distinct selcollist from where_opt groupby_opt having_opt orderby_opt limit_opt.
300 oneselect ::= SELECT distinct selcollist from where_opt groupby_opt having_opt window_clause orderby_opt limit_opt.
301 values ::= VALUES LP nexprlist RP.
302 values ::= values COMMA LP nexprlist RP.
303 distinct ::= DISTINCT.
304 distinct ::= ALL.
305 distinct ::=.
306 sclp ::=.
307 selcollist ::= sclp scanpt expr scanpt as.
308 selcollist ::= sclp scanpt STAR.
309 selcollist ::= sclp scanpt nm DOT STAR.
310 as ::= AS nm.
311 as ::=.
312 from ::=.
313 from ::= FROM seltablist.
314 stl_prefix ::= seltablist joinop.
315 stl_prefix ::=.
316 seltablist ::= stl_prefix nm dbnm as on_using.
317 seltablist ::= stl_prefix nm dbnm as indexed_by on_using.
318 seltablist ::= stl_prefix nm dbnm LP exprlist RP as on_using.
319 seltablist ::= stl_prefix LP select RP as on_using.
320 seltablist ::= stl_prefix LP seltablist RP as on_using.
321 dbnm ::=.
322 dbnm ::= DOT nm.
323 fullname ::= nm.
324 fullname ::= nm DOT nm.
325 xfullname ::= nm.
326 xfullname ::= nm DOT nm.
327 xfullname ::= nm DOT nm AS nm.
328 xfullname ::= nm AS nm.
329 joinop ::= COMMA|JOIN.
330 joinop ::= JOIN_KW JOIN.
331 joinop ::= JOIN_KW nm JOIN.
332 joinop ::= JOIN_KW nm nm JOIN.
333 on_using ::= ON expr.
334 on_using ::= USING LP idlist RP.
335 on_using ::=. [OR]
336 indexed_opt ::=.
337 indexed_by ::= INDEXED BY nm.
338 indexed_by ::= NOT INDEXED.
339 orderby_opt ::=.
340 orderby_opt ::= ORDER BY sortlist.
341 sortlist ::= sortlist COMMA expr sortorder nulls.
342 sortlist ::= expr sortorder nulls.
343 sortorder ::= ASC.
344 sortorder ::= DESC.
345 sortorder ::=.
346 nulls ::= NULLS FIRST.
347 nulls ::= NULLS LAST.
348 nulls ::=.
349 groupby_opt ::=.
350 groupby_opt ::= GROUP BY nexprlist.
351 having_opt ::=.
352 having_opt ::= HAVING expr.
353 limit_opt ::=.
354 limit_opt ::= LIMIT expr.
355 limit_opt ::= LIMIT expr OFFSET expr.
356 limit_opt ::= LIMIT expr COMMA expr.
357 cmd ::= with DELETE FROM xfullname indexed_opt where_opt_ret.
358 where_opt ::=.
359 where_opt ::= WHERE expr.
360 where_opt_ret ::=.
361 where_opt_ret ::= WHERE expr.
362 where_opt_ret ::= RETURNING selcollist.
363 where_opt_ret ::= WHERE expr RETURNING selcollist.
364 cmd ::= with UPDATE orconf xfullname indexed_opt SET setlist from where_opt_ret.
365 setlist ::= setlist COMMA nm EQ expr.
366 setlist ::= setlist COMMA LP idlist RP EQ expr.
367 setlist ::= nm EQ expr.
368 setlist ::= LP idlist RP EQ expr.
369 cmd ::= with insert_cmd INTO xfullname idlist_opt select upsert.
370 cmd ::= with insert_cmd INTO xfullname idlist_opt DEFAULT VALUES returning.
371 upsert ::=.
372 upsert ::= RETURNING selcollist.
373 upsert ::= ON CONFLICT LP sortlist RP where_opt DO UPDATE SET setlist where_opt upsert.
374 upsert ::= ON CONFLICT LP sortlist RP where_opt DO NOTHING upsert.
375 upsert ::= ON CONFLICT DO NOTHING returning.
376 upsert ::= ON CONFLICT DO UPDATE SET setlist where_opt returning.
377 returning ::= RETURNING selcollist.
378 insert_cmd ::= INSERT orconf.
379 insert_cmd ::= REPLACE.
380 idlist_opt ::=.
381 idlist_opt ::= LP idlist RP.
382 idlist ::= idlist COMMA nm.
383 idlist ::= nm.
384 expr ::= LP expr RP.
385 expr ::= ID|INDEXED|JOIN_KW.
386 expr ::= nm DOT nm.
387 expr ::= nm DOT nm DOT nm.
388 term ::= NULL|FLOAT|BLOB.
389 term ::= STRING.
390 term ::= INTEGER.
391 expr ::= VARIABLE.
392 expr ::= expr COLLATE ID|STRING.
393 expr ::= CAST LP expr AS typetoken RP.
394 expr ::= ID|INDEXED|JOIN_KW LP distinct exprlist RP.
395 expr ::= ID|INDEXED|JOIN_KW LP distinct exprlist ORDER BY sortlist RP.
396 expr ::= ID|INDEXED|JOIN_KW LP STAR RP.
397 expr ::= ID|INDEXED|JOIN_KW LP distinct exprlist RP filter_over.
398 expr ::= ID|INDEXED|JOIN_KW LP distinct exprlist ORDER BY sortlist RP filter_over.
399 expr ::= ID|INDEXED|JOIN_KW LP STAR RP filter_over.
400 term ::= CTIME_KW.
401 expr ::= LP nexprlist COMMA expr RP.
402 expr ::= expr AND expr.
403 expr ::= expr OR expr.
404 expr ::= expr LT|GT|GE|LE expr.
405 expr ::= expr EQ|NE expr.
406 expr ::= expr BITAND|BITOR|LSHIFT|RSHIFT expr.
407 expr ::= expr PLUS|MINUS expr.
408 expr ::= expr STAR|SLASH|REM expr.
409 expr ::= expr CONCAT expr.
410 likeop ::= NOT LIKE_KW|MATCH.
411 expr ::= expr likeop expr. [LIKE_KW]
412 expr ::= expr likeop expr ESCAPE expr. [LIKE_KW]
413 expr ::= expr ISNULL|NOTNULL.
414 expr ::= expr NOT NULL.
415 expr ::= expr IS expr.
416 expr ::= expr IS NOT expr.
417 expr ::= expr IS NOT DISTINCT FROM expr.
418 expr ::= expr IS DISTINCT FROM expr.
419 expr ::= NOT expr.
420 expr ::= BITNOT expr.
421 expr ::= PLUS|MINUS expr. [BITNOT]
422 expr ::= expr PTR expr.
423 between_op ::= BETWEEN.
424 between_op ::= NOT BETWEEN.
425 expr ::= expr between_op expr AND expr. [BETWEEN]
426 in_op ::= IN.
427 in_op ::= NOT IN.
428 expr ::= expr in_op LP exprlist RP. [IN]
429 expr ::= LP select RP.
430 expr ::= expr in_op LP select RP. [IN]
431 expr ::= expr in_op nm dbnm paren_exprlist. [IN]
432 expr ::= EXISTS LP select RP.
433 expr ::= CASE case_operand case_exprlist case_else END.
434 case_exprlist ::= case_exprlist WHEN expr THEN expr.
435 case_exprlist ::= WHEN expr THEN expr.
436 case_else ::= ELSE expr.
437 case_else ::=.
438 case_operand ::=.
439 exprlist ::=.
440 nexprlist ::= nexprlist COMMA expr.
441 nexprlist ::= expr.
442 paren_exprlist ::=.
443 paren_exprlist ::= LP exprlist RP.
444 cmd ::= createkw uniqueflag INDEX ifnotexists nm dbnm ON nm LP sortlist RP where_opt.
445 uniqueflag ::= UNIQUE.
446 uniqueflag ::=.
447 eidlist_opt ::=.
448 eidlist_opt ::= LP eidlist RP.
449 eidlist ::= eidlist COMMA nm collate sortorder.
450 eidlist ::= nm collate sortorder.
451 collate ::=.
452 collate ::= COLLATE ID|STRING.
453 cmd ::= DROP INDEX ifexists fullname.
454 cmd ::= VACUUM vinto.
455 cmd ::= VACUUM nm vinto.
456 vinto ::= INTO expr.
457 vinto ::=.
458 cmd ::= PRAGMA nm dbnm.
459 cmd ::= PRAGMA nm dbnm EQ nmnum.
460 cmd ::= PRAGMA nm dbnm LP nmnum RP.
461 cmd ::= PRAGMA nm dbnm EQ minus_num.
462 cmd ::= PRAGMA nm dbnm LP minus_num RP.
463 plus_num ::= PLUS INTEGER|FLOAT.
464 minus_num ::= MINUS INTEGER|FLOAT.
465 cmd ::= createkw trigger_decl BEGIN trigger_cmd_list END.
466 trigger_decl ::= temp TRIGGER ifnotexists nm dbnm trigger_time trigger_event ON fullname foreach_clause when_clause.
467 trigger_time ::= BEFORE|AFTER.
468 trigger_time ::= INSTEAD OF.
469 trigger_time ::=.
470 trigger_event ::= DELETE|INSERT.
471 trigger_event ::= UPDATE.
472 trigger_event ::= UPDATE OF idlist.
473 when_clause ::=.
474 when_clause ::= WHEN expr.
475 trigger_cmd_list ::= trigger_cmd_list trigger_cmd SEMI.
476 trigger_cmd_list ::= trigger_cmd SEMI.
477 trnm ::= nm DOT nm.
478 tridxby ::= INDEXED BY nm.
479 tridxby ::= NOT INDEXED.
480 trigger_cmd ::= UPDATE orconf trnm tridxby SET setlist from where_opt scanpt.
481 trigger_cmd ::= scanpt insert_cmd INTO trnm idlist_opt select upsert scanpt.
482 trigger_cmd ::= DELETE FROM trnm tridxby where_opt scanpt.
483 trigger_cmd ::= scanpt select scanpt.
484 expr ::= RAISE LP IGNORE RP.
485 expr ::= RAISE LP raisetype COMMA nm RP.
486 raisetype ::= ROLLBACK.
487 raisetype ::= ABORT.
488 raisetype ::= FAIL.
489 cmd ::= DROP TRIGGER ifexists fullname.
490 cmd ::= ATTACH database_kw_opt expr AS expr key_opt.
491 cmd ::= DETACH database_kw_opt expr.
492 key_opt ::=.
493 key_opt ::= KEY expr.
494 cmd ::= REINDEX.
495 cmd ::= REINDEX nm dbnm.
496 cmd ::= ANALYZE.
497 cmd ::= ANALYZE nm dbnm.
498 cmd ::= ALTER TABLE fullname RENAME TO nm.
499 cmd ::= ALTER TABLE add_column_fullname ADD kwcolumn_opt columnname carglist.
500 cmd ::= ALTER TABLE fullname DROP kwcolumn_opt nm.
501 add_column_fullname ::= fullname.
502 cmd ::= ALTER TABLE fullname RENAME kwcolumn_opt nm TO nm.
503 cmd ::= create_vtab.
504 cmd ::= create_vtab LP vtabarglist RP.
505 create_vtab ::= createkw VIRTUAL TABLE ifnotexists nm dbnm USING nm.
506 vtabarg ::=.
507 vtabargtoken ::= ANY.
508 vtabargtoken ::= lp anylist RP.
509 lp ::= LP.
510 with ::= WITH wqlist.
511 with ::= WITH RECURSIVE wqlist.
512 wqas ::= AS.
513 wqas ::= AS MATERIALIZED.
514 wqas ::= AS NOT MATERIALIZED.
515 wqitem ::= nm eidlist_opt wqas LP select RP.
516 wqlist ::= wqitem.
517 wqlist ::= wqlist COMMA wqitem.
518 windowdefn_list ::= windowdefn_list COMMA windowdefn.
519 windowdefn ::= nm AS LP window RP.
520 window ::= PARTITION BY nexprlist orderby_opt frame_opt.
521 window ::= nm PARTITION BY nexprlist orderby_opt frame_opt.
522 window ::= ORDER BY sortlist frame_opt.
523 window ::= nm ORDER BY sortlist frame_opt.
524 window ::= nm frame_opt.
525 frame_opt ::=.
526 frame_opt ::= range_or_rows frame_bound_s frame_exclude_opt.
527 frame_opt ::= range_or_rows BETWEEN frame_bound_s AND frame_bound_e frame_exclude_opt.
528 range_or_rows ::= RANGE|ROWS|GROUPS.
529 frame_bound_s ::= frame_bound.
530 frame_bound_s ::= UNBOUNDED PRECEDING.
531 frame_bound_e ::= frame_bound.
532 frame_bound_e ::= UNBOUNDED FOLLOWING.
533 frame_bound ::= expr PRECEDING|FOLLOWING.
534 frame_bound ::= CURRENT ROW.
535 frame_exclude_opt ::=.
536 frame_exclude_opt ::= EXCLUDE frame_exclude.
537 frame_exclude ::= NO OTHERS.
538 frame_exclude ::= CURRENT ROW.
539 frame_exclude ::= GROUP|TIES.
540 window_clause ::= WINDOW windowdefn_list.
541 filter_over ::= filter_clause over_clause.
542 filter_over ::= over_clause.
543 filter_over ::= filter_clause.
544 over_clause ::= OVER LP window RP.
545 over_clause ::= OVER nm.
546 filter_clause ::= FILTER LP WHERE expr RP.
547 input ::= cmdlist.
548 cmdlist ::= cmdlist ecmd.
549 cmdlist ::= ecmd.
550 ecmd ::= SEMI.
551 ecmd ::= cmdx SEMI.
552 ecmd ::= explain cmdx SEMI.
553 trans_opt ::=.
554 trans_opt ::= TRANSACTION.
555 trans_opt ::= TRANSACTION nm.
556 savepoint_opt ::= SAVEPOINT.
557 savepoint_opt ::=.
558 cmd ::= create_table create_table_args.
559 table_option_set ::= table_option.
560 columnlist ::= columnlist COMMA columnname carglist.
561 columnlist ::= columnname carglist.
562 nm ::= ID|INDEXED|JOIN_KW.
563 nm ::= STRING.
564 typetoken ::= typename.
565 typename ::= ID|STRING.
566 signed ::= plus_num.
567 signed ::= minus_num.
568 carglist ::= carglist ccons.
569 carglist ::=.
570 ccons ::= NULL onconf.
571 ccons ::= GENERATED ALWAYS AS generated.
572 ccons ::= AS generated.
573 conslist_opt ::= COMMA conslist.
574 conslist ::= conslist tconscomma tcons.
575 conslist ::= tcons.
576 tconscomma ::=.
577 defer_subclause_opt ::= defer_subclause.
578 resolvetype ::= raisetype.
579 selectnowith ::= oneselect.
580 oneselect ::= values.
581 sclp ::= selcollist COMMA.
582 as ::= ID|STRING.
583 indexed_opt ::= indexed_by.
584 returning ::=.
585 expr ::= term.
586 likeop ::= LIKE_KW|MATCH.
587 case_operand ::= expr.
588 exprlist ::= nexprlist.
589 nmnum ::= plus_num.
590 nmnum ::= nm.
591 nmnum ::= ON.
592 nmnum ::= DELETE.
593 nmnum ::= DEFAULT.
594 plus_num ::= INTEGER|FLOAT.
595 foreach_clause ::=.
596 foreach_clause ::= FOR EACH ROW.
597 trnm ::= nm.
598 tridxby ::=.
599 database_kw_opt ::= DATABASE.
600 database_kw_opt ::=.
601 kwcolumn_opt ::=.
602 kwcolumn_opt ::= COLUMNKW.
603 vtabarglist ::= vtabarg.
604 vtabarglist ::= vtabarglist COMMA vtabarg.
605 vtabarg ::= vtabarg vtabargtoken.
606 anylist ::=.
607 anylist ::= anylist LP anylist RP.
608 anylist ::= anylist ANY.
609 with ::=.
610 windowdefn_list ::= windowdefn.
611 window ::= frame_opt.
612 
613 %token SPACE ILLEGAL.
614