xref: /sqlite-3.40.0/src/parse.y (revision b80bb6ce)
1 /*
2 ** 2001 September 15
3 **
4 ** The author disclaims copyright to this source code.  In place of
5 ** a legal notice, here is a blessing:
6 **
7 **    May you do good and not evil.
8 **    May you find forgiveness for yourself and forgive others.
9 **    May you share freely, never taking more than you give.
10 **
11 *************************************************************************
12 ** This file contains SQLite's grammar for SQL.  Process this file
13 ** using the lemon parser generator to generate C code that runs
14 ** the parser.  Lemon will also generate a header file containing
15 ** numeric codes for all of the tokens.
16 */
17 
18 // All token codes are small integers with #defines that begin with "TK_"
19 %token_prefix TK_
20 
21 // The type of the data attached to each token is Token.  This is also the
22 // default type for non-terminals.
23 //
24 %token_type {Token}
25 %default_type {Token}
26 
27 // An extra argument to the constructor for the parser, which is available
28 // to all actions.
29 %extra_context {Parse *pParse}
30 
31 // This code runs whenever there is a syntax error
32 //
33 %syntax_error {
34   UNUSED_PARAMETER(yymajor);  /* Silence some compiler warnings */
35   if( TOKEN.z[0] ){
36     sqlite3ErrorMsg(pParse, "near \"%T\": syntax error", &TOKEN);
37   }else{
38     sqlite3ErrorMsg(pParse, "incomplete input");
39   }
40 }
41 %stack_overflow {
42   sqlite3ErrorMsg(pParse, "parser stack overflow");
43 }
44 
45 // The name of the generated procedure that implements the parser
46 // is as follows:
47 %name sqlite3Parser
48 
49 // The following text is included near the beginning of the C source
50 // code file that implements the parser.
51 //
52 %include {
53 #include "sqliteInt.h"
54 
55 /*
56 ** Disable all error recovery processing in the parser push-down
57 ** automaton.
58 */
59 #define YYNOERRORRECOVERY 1
60 
61 /*
62 ** Make yytestcase() the same as testcase()
63 */
64 #define yytestcase(X) testcase(X)
65 
66 /*
67 ** Indicate that sqlite3ParserFree() will never be called with a null
68 ** pointer.
69 */
70 #define YYPARSEFREENEVERNULL 1
71 
72 /*
73 ** In the amalgamation, the parse.c file generated by lemon and the
74 ** tokenize.c file are concatenated.  In that case, sqlite3RunParser()
75 ** has access to the the size of the yyParser object and so the parser
76 ** engine can be allocated from stack.  In that case, only the
77 ** sqlite3ParserInit() and sqlite3ParserFinalize() routines are invoked
78 ** and the sqlite3ParserAlloc() and sqlite3ParserFree() routines can be
79 ** omitted.
80 */
81 #ifdef SQLITE_AMALGAMATION
82 # define sqlite3Parser_ENGINEALWAYSONSTACK 1
83 #endif
84 
85 /*
86 ** Alternative datatype for the argument to the malloc() routine passed
87 ** into sqlite3ParserAlloc().  The default is size_t.
88 */
89 #define YYMALLOCARGTYPE  u64
90 
91 /*
92 ** An instance of the following structure describes the event of a
93 ** TRIGGER.  "a" is the event type, one of TK_UPDATE, TK_INSERT,
94 ** TK_DELETE, or TK_INSTEAD.  If the event is of the form
95 **
96 **      UPDATE ON (a,b,c)
97 **
98 ** Then the "b" IdList records the list "a,b,c".
99 */
100 struct TrigEvent { int a; IdList * b; };
101 
102 struct FrameBound     { int eType; Expr *pExpr; };
103 
104 /*
105 ** Disable lookaside memory allocation for objects that might be
106 ** shared across database connections.
107 */
108 static void disableLookaside(Parse *pParse){
109   pParse->disableLookaside++;
110   pParse->db->lookaside.bDisable++;
111 }
112 
113 } // end %include
114 
115 // Input is a single SQL command
116 input ::= cmdlist.
117 cmdlist ::= cmdlist ecmd.
118 cmdlist ::= ecmd.
119 ecmd ::= SEMI.
120 ecmd ::= cmdx SEMI.
121 %ifndef SQLITE_OMIT_EXPLAIN
122 ecmd ::= explain cmdx.
123 explain ::= EXPLAIN.              { pParse->explain = 1; }
124 explain ::= EXPLAIN QUERY PLAN.   { pParse->explain = 2; }
125 %endif  SQLITE_OMIT_EXPLAIN
126 cmdx ::= cmd.           { sqlite3FinishCoding(pParse); }
127 
128 ///////////////////// Begin and end transactions. ////////////////////////////
129 //
130 
131 cmd ::= BEGIN transtype(Y) trans_opt.  {sqlite3BeginTransaction(pParse, Y);}
132 trans_opt ::= .
133 trans_opt ::= TRANSACTION.
134 trans_opt ::= TRANSACTION nm.
135 %type transtype {int}
136 transtype(A) ::= .             {A = TK_DEFERRED;}
137 transtype(A) ::= DEFERRED(X).  {A = @X; /*A-overwrites-X*/}
138 transtype(A) ::= IMMEDIATE(X). {A = @X; /*A-overwrites-X*/}
139 transtype(A) ::= EXCLUSIVE(X). {A = @X; /*A-overwrites-X*/}
140 cmd ::= COMMIT|END(X) trans_opt.   {sqlite3EndTransaction(pParse,@X);}
141 cmd ::= ROLLBACK(X) trans_opt.     {sqlite3EndTransaction(pParse,@X);}
142 
143 savepoint_opt ::= SAVEPOINT.
144 savepoint_opt ::= .
145 cmd ::= SAVEPOINT nm(X). {
146   sqlite3Savepoint(pParse, SAVEPOINT_BEGIN, &X);
147 }
148 cmd ::= RELEASE savepoint_opt nm(X). {
149   sqlite3Savepoint(pParse, SAVEPOINT_RELEASE, &X);
150 }
151 cmd ::= ROLLBACK trans_opt TO savepoint_opt nm(X). {
152   sqlite3Savepoint(pParse, SAVEPOINT_ROLLBACK, &X);
153 }
154 
155 ///////////////////// The CREATE TABLE statement ////////////////////////////
156 //
157 cmd ::= create_table create_table_args.
158 create_table ::= createkw temp(T) TABLE ifnotexists(E) nm(Y) dbnm(Z). {
159    sqlite3StartTable(pParse,&Y,&Z,T,0,0,E);
160 }
161 createkw(A) ::= CREATE(A).  {disableLookaside(pParse);}
162 
163 %type ifnotexists {int}
164 ifnotexists(A) ::= .              {A = 0;}
165 ifnotexists(A) ::= IF NOT EXISTS. {A = 1;}
166 %type temp {int}
167 %ifndef SQLITE_OMIT_TEMPDB
168 temp(A) ::= TEMP.  {A = 1;}
169 %endif  SQLITE_OMIT_TEMPDB
170 temp(A) ::= .      {A = 0;}
171 create_table_args ::= LP columnlist conslist_opt(X) RP(E) table_options(F). {
172   sqlite3EndTable(pParse,&X,&E,F,0);
173 }
174 create_table_args ::= AS select(S). {
175   sqlite3EndTable(pParse,0,0,0,S);
176   sqlite3SelectDelete(pParse->db, S);
177 }
178 %type table_options {int}
179 table_options(A) ::= .    {A = 0;}
180 table_options(A) ::= WITHOUT nm(X). {
181   if( X.n==5 && sqlite3_strnicmp(X.z,"rowid",5)==0 ){
182     A = TF_WithoutRowid | TF_NoVisibleRowid;
183   }else{
184     A = 0;
185     sqlite3ErrorMsg(pParse, "unknown table option: %.*s", X.n, X.z);
186   }
187 }
188 columnlist ::= columnlist COMMA columnname carglist.
189 columnlist ::= columnname carglist.
190 columnname(A) ::= nm(A) typetoken(Y). {sqlite3AddColumn(pParse,&A,&Y);}
191 
192 // Declare some tokens early in order to influence their values, to
193 // improve performance and reduce the executable size.  The goal here is
194 // to get the "jump" operations in ISNULL through ESCAPE to have numeric
195 // values that are early enough so that all jump operations are clustered
196 // at the beginning, but also so that the comparison tokens NE through GE
197 // are as large as possible so that they are near to FUNCTION, which is a
198 // token synthesized by addopcodes.tcl.
199 //
200 %token ABORT ACTION AFTER ANALYZE ASC ATTACH BEFORE BEGIN BY CASCADE CAST.
201 %token CONFLICT DATABASE DEFERRED DESC DETACH EACH END EXCLUSIVE EXPLAIN FAIL.
202 %token OR AND NOT IS MATCH LIKE_KW BETWEEN IN ISNULL NOTNULL NE EQ.
203 %token GT LE LT GE ESCAPE.
204 
205 // The following directive causes tokens ABORT, AFTER, ASC, etc. to
206 // fallback to ID if they will not parse as their original value.
207 // This obviates the need for the "id" nonterminal.
208 //
209 %fallback ID
210   ABORT ACTION AFTER ANALYZE ASC ATTACH BEFORE BEGIN BY CASCADE CAST COLUMNKW
211   CONFLICT DATABASE DEFERRED DESC DETACH DO
212   EACH END EXCLUSIVE EXPLAIN FAIL FOR
213   IGNORE IMMEDIATE INITIALLY INSTEAD LIKE_KW MATCH NO PLAN
214   QUERY KEY OF OFFSET PRAGMA RAISE RECURSIVE RELEASE REPLACE RESTRICT ROW ROWS
215   ROLLBACK SAVEPOINT TEMP TRIGGER VACUUM VIEW VIRTUAL WITH WITHOUT
216 %ifdef SQLITE_OMIT_COMPOUND_SELECT
217   EXCEPT INTERSECT UNION
218 %endif SQLITE_OMIT_COMPOUND_SELECT
219 %ifndef SQLITE_OMIT_WINDOWFUNC
220   CURRENT FOLLOWING PARTITION PRECEDING RANGE UNBOUNDED
221 %endif SQLITE_OMIT_WINDOWFUNC
222   REINDEX RENAME CTIME_KW IF
223   .
224 %wildcard ANY.
225 
226 // Define operator precedence early so that this is the first occurrence
227 // of the operator tokens in the grammer.  Keeping the operators together
228 // causes them to be assigned integer values that are close together,
229 // which keeps parser tables smaller.
230 //
231 // The token values assigned to these symbols is determined by the order
232 // in which lemon first sees them.  It must be the case that ISNULL/NOTNULL,
233 // NE/EQ, GT/LE, and GE/LT are separated by only a single value.  See
234 // the sqlite3ExprIfFalse() routine for additional information on this
235 // constraint.
236 //
237 %left OR.
238 %left AND.
239 %right NOT.
240 %left IS MATCH LIKE_KW BETWEEN IN ISNULL NOTNULL NE EQ.
241 %left GT LE LT GE.
242 %right ESCAPE.
243 %left BITAND BITOR LSHIFT RSHIFT.
244 %left PLUS MINUS.
245 %left STAR SLASH REM.
246 %left CONCAT.
247 %left COLLATE.
248 %right BITNOT.
249 %nonassoc ON.
250 
251 // An IDENTIFIER can be a generic identifier, or one of several
252 // keywords.  Any non-standard keyword can also be an identifier.
253 //
254 %token_class id  ID|INDEXED.
255 
256 
257 // And "ids" is an identifer-or-string.
258 //
259 %token_class ids  ID|STRING.
260 
261 // The name of a column or table can be any of the following:
262 //
263 %type nm {Token}
264 nm(A) ::= id(A).
265 nm(A) ::= STRING(A).
266 nm(A) ::= JOIN_KW(A).
267 
268 // A typetoken is really zero or more tokens that form a type name such
269 // as can be found after the column name in a CREATE TABLE statement.
270 // Multiple tokens are concatenated to form the value of the typetoken.
271 //
272 %type typetoken {Token}
273 typetoken(A) ::= .   {A.n = 0; A.z = 0;}
274 typetoken(A) ::= typename(A).
275 typetoken(A) ::= typename(A) LP signed RP(Y). {
276   A.n = (int)(&Y.z[Y.n] - A.z);
277 }
278 typetoken(A) ::= typename(A) LP signed COMMA signed RP(Y). {
279   A.n = (int)(&Y.z[Y.n] - A.z);
280 }
281 %type typename {Token}
282 typename(A) ::= ids(A).
283 typename(A) ::= typename(A) ids(Y). {A.n=Y.n+(int)(Y.z-A.z);}
284 signed ::= plus_num.
285 signed ::= minus_num.
286 
287 // The scanpt non-terminal takes a value which is a pointer to the
288 // input text just past the last token that has been shifted into
289 // the parser.  By surrounding some phrase in the grammar with two
290 // scanpt non-terminals, we can capture the input text for that phrase.
291 // For example:
292 //
293 //      something ::= .... scanpt(A) phrase scanpt(Z).
294 //
295 // The text that is parsed as "phrase" is a string starting at A
296 // and containing (int)(Z-A) characters.  There might be some extra
297 // whitespace on either end of the text, but that can be removed in
298 // post-processing, if needed.
299 //
300 %type scanpt {const char*}
301 scanpt(A) ::= . {
302   assert( yyLookahead!=YYNOCODE );
303   A = yyLookaheadToken.z;
304 }
305 
306 // "carglist" is a list of additional constraints that come after the
307 // column name and column type in a CREATE TABLE statement.
308 //
309 carglist ::= carglist ccons.
310 carglist ::= .
311 ccons ::= CONSTRAINT nm(X).           {pParse->constraintName = X;}
312 ccons ::= DEFAULT scanpt(A) term(X) scanpt(Z).
313                             {sqlite3AddDefaultValue(pParse,X,A,Z);}
314 ccons ::= DEFAULT LP(A) expr(X) RP(Z).
315                             {sqlite3AddDefaultValue(pParse,X,A.z+1,Z.z);}
316 ccons ::= DEFAULT PLUS(A) term(X) scanpt(Z).
317                             {sqlite3AddDefaultValue(pParse,X,A.z,Z);}
318 ccons ::= DEFAULT MINUS(A) term(X) scanpt(Z).      {
319   Expr *p = sqlite3PExpr(pParse, TK_UMINUS, X, 0);
320   sqlite3AddDefaultValue(pParse,p,A.z,Z);
321 }
322 ccons ::= DEFAULT scanpt id(X).       {
323   Expr *p = tokenExpr(pParse, TK_STRING, X);
324   if( p ){
325     sqlite3ExprIdToTrueFalse(p);
326     testcase( p->op==TK_TRUEFALSE && sqlite3ExprTruthValue(p) );
327   }
328   sqlite3AddDefaultValue(pParse,p,X.z,X.z+X.n);
329 }
330 
331 // In addition to the type name, we also care about the primary key and
332 // UNIQUE constraints.
333 //
334 ccons ::= NULL onconf.
335 ccons ::= NOT NULL onconf(R).    {sqlite3AddNotNull(pParse, R);}
336 ccons ::= PRIMARY KEY sortorder(Z) onconf(R) autoinc(I).
337                                  {sqlite3AddPrimaryKey(pParse,0,R,I,Z);}
338 ccons ::= UNIQUE onconf(R).      {sqlite3CreateIndex(pParse,0,0,0,0,R,0,0,0,0,
339                                    SQLITE_IDXTYPE_UNIQUE);}
340 ccons ::= CHECK LP expr(X) RP.   {sqlite3AddCheckConstraint(pParse,X);}
341 ccons ::= REFERENCES nm(T) eidlist_opt(TA) refargs(R).
342                                  {sqlite3CreateForeignKey(pParse,0,&T,TA,R);}
343 ccons ::= defer_subclause(D).    {sqlite3DeferForeignKey(pParse,D);}
344 ccons ::= COLLATE ids(C).        {sqlite3AddCollateType(pParse, &C);}
345 
346 // The optional AUTOINCREMENT keyword
347 %type autoinc {int}
348 autoinc(X) ::= .          {X = 0;}
349 autoinc(X) ::= AUTOINCR.  {X = 1;}
350 
351 // The next group of rules parses the arguments to a REFERENCES clause
352 // that determine if the referential integrity checking is deferred or
353 // or immediate and which determine what action to take if a ref-integ
354 // check fails.
355 //
356 %type refargs {int}
357 refargs(A) ::= .                  { A = OE_None*0x0101; /* EV: R-19803-45884 */}
358 refargs(A) ::= refargs(A) refarg(Y). { A = (A & ~Y.mask) | Y.value; }
359 %type refarg {struct {int value; int mask;}}
360 refarg(A) ::= MATCH nm.              { A.value = 0;     A.mask = 0x000000; }
361 refarg(A) ::= ON INSERT refact.      { A.value = 0;     A.mask = 0x000000; }
362 refarg(A) ::= ON DELETE refact(X).   { A.value = X;     A.mask = 0x0000ff; }
363 refarg(A) ::= ON UPDATE refact(X).   { A.value = X<<8;  A.mask = 0x00ff00; }
364 %type refact {int}
365 refact(A) ::= SET NULL.              { A = OE_SetNull;  /* EV: R-33326-45252 */}
366 refact(A) ::= SET DEFAULT.           { A = OE_SetDflt;  /* EV: R-33326-45252 */}
367 refact(A) ::= CASCADE.               { A = OE_Cascade;  /* EV: R-33326-45252 */}
368 refact(A) ::= RESTRICT.              { A = OE_Restrict; /* EV: R-33326-45252 */}
369 refact(A) ::= NO ACTION.             { A = OE_None;     /* EV: R-33326-45252 */}
370 %type defer_subclause {int}
371 defer_subclause(A) ::= NOT DEFERRABLE init_deferred_pred_opt.     {A = 0;}
372 defer_subclause(A) ::= DEFERRABLE init_deferred_pred_opt(X).      {A = X;}
373 %type init_deferred_pred_opt {int}
374 init_deferred_pred_opt(A) ::= .                       {A = 0;}
375 init_deferred_pred_opt(A) ::= INITIALLY DEFERRED.     {A = 1;}
376 init_deferred_pred_opt(A) ::= INITIALLY IMMEDIATE.    {A = 0;}
377 
378 conslist_opt(A) ::= .                         {A.n = 0; A.z = 0;}
379 conslist_opt(A) ::= COMMA(A) conslist.
380 conslist ::= conslist tconscomma tcons.
381 conslist ::= tcons.
382 tconscomma ::= COMMA.            {pParse->constraintName.n = 0;}
383 tconscomma ::= .
384 tcons ::= CONSTRAINT nm(X).      {pParse->constraintName = X;}
385 tcons ::= PRIMARY KEY LP sortlist(X) autoinc(I) RP onconf(R).
386                                  {sqlite3AddPrimaryKey(pParse,X,R,I,0);}
387 tcons ::= UNIQUE LP sortlist(X) RP onconf(R).
388                                  {sqlite3CreateIndex(pParse,0,0,0,X,R,0,0,0,0,
389                                        SQLITE_IDXTYPE_UNIQUE);}
390 tcons ::= CHECK LP expr(E) RP onconf.
391                                  {sqlite3AddCheckConstraint(pParse,E);}
392 tcons ::= FOREIGN KEY LP eidlist(FA) RP
393           REFERENCES nm(T) eidlist_opt(TA) refargs(R) defer_subclause_opt(D). {
394     sqlite3CreateForeignKey(pParse, FA, &T, TA, R);
395     sqlite3DeferForeignKey(pParse, D);
396 }
397 %type defer_subclause_opt {int}
398 defer_subclause_opt(A) ::= .                    {A = 0;}
399 defer_subclause_opt(A) ::= defer_subclause(A).
400 
401 // The following is a non-standard extension that allows us to declare the
402 // default behavior when there is a constraint conflict.
403 //
404 %type onconf {int}
405 %type orconf {int}
406 %type resolvetype {int}
407 onconf(A) ::= .                              {A = OE_Default;}
408 onconf(A) ::= ON CONFLICT resolvetype(X).    {A = X;}
409 orconf(A) ::= .                              {A = OE_Default;}
410 orconf(A) ::= OR resolvetype(X).             {A = X;}
411 resolvetype(A) ::= raisetype(A).
412 resolvetype(A) ::= IGNORE.                   {A = OE_Ignore;}
413 resolvetype(A) ::= REPLACE.                  {A = OE_Replace;}
414 
415 ////////////////////////// The DROP TABLE /////////////////////////////////////
416 //
417 cmd ::= DROP TABLE ifexists(E) fullname(X). {
418   sqlite3DropTable(pParse, X, 0, E);
419 }
420 %type ifexists {int}
421 ifexists(A) ::= IF EXISTS.   {A = 1;}
422 ifexists(A) ::= .            {A = 0;}
423 
424 ///////////////////// The CREATE VIEW statement /////////////////////////////
425 //
426 %ifndef SQLITE_OMIT_VIEW
427 cmd ::= createkw(X) temp(T) VIEW ifnotexists(E) nm(Y) dbnm(Z) eidlist_opt(C)
428           AS select(S). {
429   sqlite3CreateView(pParse, &X, &Y, &Z, C, S, T, E);
430 }
431 cmd ::= DROP VIEW ifexists(E) fullname(X). {
432   sqlite3DropTable(pParse, X, 1, E);
433 }
434 %endif  SQLITE_OMIT_VIEW
435 
436 //////////////////////// The SELECT statement /////////////////////////////////
437 //
438 cmd ::= select(X).  {
439   SelectDest dest = {SRT_Output, 0, 0, 0, 0, 0};
440   sqlite3Select(pParse, X, &dest);
441   sqlite3SelectDelete(pParse->db, X);
442 }
443 
444 %type select {Select*}
445 %destructor select {sqlite3SelectDelete(pParse->db, $$);}
446 %type selectnowith {Select*}
447 %destructor selectnowith {sqlite3SelectDelete(pParse->db, $$);}
448 %type oneselect {Select*}
449 %destructor oneselect {sqlite3SelectDelete(pParse->db, $$);}
450 
451 %include {
452   /*
453   ** For a compound SELECT statement, make sure p->pPrior->pNext==p for
454   ** all elements in the list.  And make sure list length does not exceed
455   ** SQLITE_LIMIT_COMPOUND_SELECT.
456   */
457   static void parserDoubleLinkSelect(Parse *pParse, Select *p){
458     if( p->pPrior ){
459       Select *pNext = 0, *pLoop;
460       int mxSelect, cnt = 0;
461       for(pLoop=p; pLoop; pNext=pLoop, pLoop=pLoop->pPrior, cnt++){
462         pLoop->pNext = pNext;
463         pLoop->selFlags |= SF_Compound;
464       }
465       if( (p->selFlags & SF_MultiValue)==0 &&
466         (mxSelect = pParse->db->aLimit[SQLITE_LIMIT_COMPOUND_SELECT])>0 &&
467         cnt>mxSelect
468       ){
469         sqlite3ErrorMsg(pParse, "too many terms in compound SELECT");
470       }
471     }
472   }
473 }
474 
475 %ifndef SQLITE_OMIT_CTE
476 select(A) ::= WITH wqlist(W) selectnowith(X). {
477   Select *p = X;
478   if( p ){
479     p->pWith = W;
480     parserDoubleLinkSelect(pParse, p);
481   }else{
482     sqlite3WithDelete(pParse->db, W);
483   }
484   A = p;
485 }
486 select(A) ::= WITH RECURSIVE wqlist(W) selectnowith(X). {
487   Select *p = X;
488   if( p ){
489     p->pWith = W;
490     parserDoubleLinkSelect(pParse, p);
491   }else{
492     sqlite3WithDelete(pParse->db, W);
493   }
494   A = p;
495 }
496 %endif /* SQLITE_OMIT_CTE */
497 select(A) ::= selectnowith(X). {
498   Select *p = X;
499   if( p ){
500     parserDoubleLinkSelect(pParse, p);
501   }
502   A = p; /*A-overwrites-X*/
503 }
504 
505 selectnowith(A) ::= oneselect(A).
506 %ifndef SQLITE_OMIT_COMPOUND_SELECT
507 selectnowith(A) ::= selectnowith(A) multiselect_op(Y) oneselect(Z).  {
508   Select *pRhs = Z;
509   Select *pLhs = A;
510   if( pRhs && pRhs->pPrior ){
511     SrcList *pFrom;
512     Token x;
513     x.n = 0;
514     parserDoubleLinkSelect(pParse, pRhs);
515     pFrom = sqlite3SrcListAppendFromTerm(pParse,0,0,0,&x,pRhs,0,0);
516     pRhs = sqlite3SelectNew(pParse,0,pFrom,0,0,0,0,0,0);
517   }
518   if( pRhs ){
519     pRhs->op = (u8)Y;
520     pRhs->pPrior = pLhs;
521     if( ALWAYS(pLhs) ) pLhs->selFlags &= ~SF_MultiValue;
522     pRhs->selFlags &= ~SF_MultiValue;
523     if( Y!=TK_ALL ) pParse->hasCompound = 1;
524   }else{
525     sqlite3SelectDelete(pParse->db, pLhs);
526   }
527   A = pRhs;
528 }
529 %type multiselect_op {int}
530 multiselect_op(A) ::= UNION(OP).             {A = @OP; /*A-overwrites-OP*/}
531 multiselect_op(A) ::= UNION ALL.             {A = TK_ALL;}
532 multiselect_op(A) ::= EXCEPT|INTERSECT(OP).  {A = @OP; /*A-overwrites-OP*/}
533 %endif SQLITE_OMIT_COMPOUND_SELECT
534 oneselect(A) ::= SELECT distinct(D) selcollist(W) from(X) where_opt(Y)
535                  groupby_opt(P) having_opt(Q)
536 %ifndef SQLITE_OMIT_WINDOWFUNC
537                  windowdefn_opt(R)
538 %endif
539                  orderby_opt(Z) limit_opt(L). {
540   A = sqlite3SelectNew(pParse,W,X,Y,P,Q,Z,D,L);
541 #ifndef SQLITE_OMIT_WINDOWFUNC
542   if( A ){
543     A->pWinDefn = R;
544   }else{
545     sqlite3WindowListDelete(pParse->db, R);
546   }
547 #endif /* SQLITE_OMIT_WINDOWFUNC */
548 }
549 oneselect(A) ::= values(A).
550 
551 %type values {Select*}
552 %destructor values {sqlite3SelectDelete(pParse->db, $$);}
553 values(A) ::= VALUES LP nexprlist(X) RP. {
554   A = sqlite3SelectNew(pParse,X,0,0,0,0,0,SF_Values,0);
555 }
556 values(A) ::= values(A) COMMA LP exprlist(Y) RP. {
557   Select *pRight, *pLeft = A;
558   pRight = sqlite3SelectNew(pParse,Y,0,0,0,0,0,SF_Values|SF_MultiValue,0);
559   if( ALWAYS(pLeft) ) pLeft->selFlags &= ~SF_MultiValue;
560   if( pRight ){
561     pRight->op = TK_ALL;
562     pRight->pPrior = pLeft;
563     A = pRight;
564   }else{
565     A = pLeft;
566   }
567 }
568 
569 // The "distinct" nonterminal is true (1) if the DISTINCT keyword is
570 // present and false (0) if it is not.
571 //
572 %type distinct {int}
573 distinct(A) ::= DISTINCT.   {A = SF_Distinct;}
574 distinct(A) ::= ALL.        {A = SF_All;}
575 distinct(A) ::= .           {A = 0;}
576 
577 // selcollist is a list of expressions that are to become the return
578 // values of the SELECT statement.  The "*" in statements like
579 // "SELECT * FROM ..." is encoded as a special expression with an
580 // opcode of TK_ASTERISK.
581 //
582 %type selcollist {ExprList*}
583 %destructor selcollist {sqlite3ExprListDelete(pParse->db, $$);}
584 %type sclp {ExprList*}
585 %destructor sclp {sqlite3ExprListDelete(pParse->db, $$);}
586 sclp(A) ::= selcollist(A) COMMA.
587 sclp(A) ::= .                                {A = 0;}
588 selcollist(A) ::= sclp(A) scanpt(B) expr(X) scanpt(Z) as(Y).     {
589    A = sqlite3ExprListAppend(pParse, A, X);
590    if( Y.n>0 ) sqlite3ExprListSetName(pParse, A, &Y, 1);
591    sqlite3ExprListSetSpan(pParse,A,B,Z);
592 }
593 selcollist(A) ::= sclp(A) scanpt STAR. {
594   Expr *p = sqlite3Expr(pParse->db, TK_ASTERISK, 0);
595   A = sqlite3ExprListAppend(pParse, A, p);
596 }
597 selcollist(A) ::= sclp(A) scanpt nm(X) DOT STAR. {
598   Expr *pRight = sqlite3PExpr(pParse, TK_ASTERISK, 0, 0);
599   Expr *pLeft = sqlite3ExprAlloc(pParse->db, TK_ID, &X, 1);
600   Expr *pDot = sqlite3PExpr(pParse, TK_DOT, pLeft, pRight);
601   A = sqlite3ExprListAppend(pParse,A, pDot);
602 }
603 
604 // An option "AS <id>" phrase that can follow one of the expressions that
605 // define the result set, or one of the tables in the FROM clause.
606 //
607 %type as {Token}
608 as(X) ::= AS nm(Y).    {X = Y;}
609 as(X) ::= ids(X).
610 as(X) ::= .            {X.n = 0; X.z = 0;}
611 
612 
613 %type seltablist {SrcList*}
614 %destructor seltablist {sqlite3SrcListDelete(pParse->db, $$);}
615 %type stl_prefix {SrcList*}
616 %destructor stl_prefix {sqlite3SrcListDelete(pParse->db, $$);}
617 %type from {SrcList*}
618 %destructor from {sqlite3SrcListDelete(pParse->db, $$);}
619 
620 // A complete FROM clause.
621 //
622 from(A) ::= .                {A = sqlite3DbMallocZero(pParse->db, sizeof(*A));}
623 from(A) ::= FROM seltablist(X). {
624   A = X;
625   sqlite3SrcListShiftJoinType(A);
626 }
627 
628 // "seltablist" is a "Select Table List" - the content of the FROM clause
629 // in a SELECT statement.  "stl_prefix" is a prefix of this list.
630 //
631 stl_prefix(A) ::= seltablist(A) joinop(Y).    {
632    if( ALWAYS(A && A->nSrc>0) ) A->a[A->nSrc-1].fg.jointype = (u8)Y;
633 }
634 stl_prefix(A) ::= .                           {A = 0;}
635 seltablist(A) ::= stl_prefix(A) nm(Y) dbnm(D) as(Z) indexed_opt(I)
636                   on_opt(N) using_opt(U). {
637   A = sqlite3SrcListAppendFromTerm(pParse,A,&Y,&D,&Z,0,N,U);
638   sqlite3SrcListIndexedBy(pParse, A, &I);
639 }
640 seltablist(A) ::= stl_prefix(A) nm(Y) dbnm(D) LP exprlist(E) RP as(Z)
641                   on_opt(N) using_opt(U). {
642   A = sqlite3SrcListAppendFromTerm(pParse,A,&Y,&D,&Z,0,N,U);
643   sqlite3SrcListFuncArgs(pParse, A, E);
644 }
645 %ifndef SQLITE_OMIT_SUBQUERY
646   seltablist(A) ::= stl_prefix(A) LP select(S) RP
647                     as(Z) on_opt(N) using_opt(U). {
648     A = sqlite3SrcListAppendFromTerm(pParse,A,0,0,&Z,S,N,U);
649   }
650   seltablist(A) ::= stl_prefix(A) LP seltablist(F) RP
651                     as(Z) on_opt(N) using_opt(U). {
652     if( A==0 && Z.n==0 && N==0 && U==0 ){
653       A = F;
654     }else if( F->nSrc==1 ){
655       A = sqlite3SrcListAppendFromTerm(pParse,A,0,0,&Z,0,N,U);
656       if( A ){
657         struct SrcList_item *pNew = &A->a[A->nSrc-1];
658         struct SrcList_item *pOld = F->a;
659         pNew->zName = pOld->zName;
660         pNew->zDatabase = pOld->zDatabase;
661         pNew->pSelect = pOld->pSelect;
662         pOld->zName = pOld->zDatabase = 0;
663         pOld->pSelect = 0;
664       }
665       sqlite3SrcListDelete(pParse->db, F);
666     }else{
667       Select *pSubquery;
668       sqlite3SrcListShiftJoinType(F);
669       pSubquery = sqlite3SelectNew(pParse,0,F,0,0,0,0,SF_NestedFrom,0);
670       A = sqlite3SrcListAppendFromTerm(pParse,A,0,0,&Z,pSubquery,N,U);
671     }
672   }
673 %endif  SQLITE_OMIT_SUBQUERY
674 
675 %type dbnm {Token}
676 dbnm(A) ::= .          {A.z=0; A.n=0;}
677 dbnm(A) ::= DOT nm(X). {A = X;}
678 
679 %type fullname {SrcList*}
680 %destructor fullname {sqlite3SrcListDelete(pParse->db, $$);}
681 fullname(A) ::= nm(X).
682    {A = sqlite3SrcListAppend(pParse->db,0,&X,0); /*A-overwrites-X*/}
683 fullname(A) ::= nm(X) DOT nm(Y).
684    {A = sqlite3SrcListAppend(pParse->db,0,&X,&Y); /*A-overwrites-X*/}
685 
686 %type xfullname {SrcList*}
687 %destructor xfullname {sqlite3SrcListDelete(pParse->db, $$);}
688 xfullname(A) ::= nm(X).
689    {A = sqlite3SrcListAppend(pParse->db,0,&X,0); /*A-overwrites-X*/}
690 xfullname(A) ::= nm(X) DOT nm(Y).
691    {A = sqlite3SrcListAppend(pParse->db,0,&X,&Y); /*A-overwrites-X*/}
692 xfullname(A) ::= nm(X) DOT nm(Y) AS nm(Z).  {
693    A = sqlite3SrcListAppend(pParse->db,0,&X,&Y); /*A-overwrites-X*/
694    if( A ) A->a[0].zAlias = sqlite3NameFromToken(pParse->db, &Z);
695 }
696 xfullname(A) ::= nm(X) AS nm(Z). {
697    A = sqlite3SrcListAppend(pParse->db,0,&X,0); /*A-overwrites-X*/
698    if( A ) A->a[0].zAlias = sqlite3NameFromToken(pParse->db, &Z);
699 }
700 
701 %type joinop {int}
702 joinop(X) ::= COMMA|JOIN.              { X = JT_INNER; }
703 joinop(X) ::= JOIN_KW(A) JOIN.
704                   {X = sqlite3JoinType(pParse,&A,0,0);  /*X-overwrites-A*/}
705 joinop(X) ::= JOIN_KW(A) nm(B) JOIN.
706                   {X = sqlite3JoinType(pParse,&A,&B,0); /*X-overwrites-A*/}
707 joinop(X) ::= JOIN_KW(A) nm(B) nm(C) JOIN.
708                   {X = sqlite3JoinType(pParse,&A,&B,&C);/*X-overwrites-A*/}
709 
710 // There is a parsing abiguity in an upsert statement that uses a
711 // SELECT on the RHS of a the INSERT:
712 //
713 //      INSERT INTO tab SELECT * FROM aaa JOIN bbb ON CONFLICT ...
714 //                                        here ----^^
715 //
716 // When the ON token is encountered, the parser does not know if it is
717 // the beginning of an ON CONFLICT clause, or the beginning of an ON
718 // clause associated with the JOIN.  The conflict is resolved in favor
719 // of the JOIN.  If an ON CONFLICT clause is intended, insert a dummy
720 // WHERE clause in between, like this:
721 //
722 //      INSERT INTO tab SELECT * FROM aaa JOIN bbb WHERE true ON CONFLICT ...
723 //
724 // The [AND] and [OR] precedence marks in the rules for on_opt cause the
725 // ON in this context to always be interpreted as belonging to the JOIN.
726 //
727 %type on_opt {Expr*}
728 %destructor on_opt {sqlite3ExprDelete(pParse->db, $$);}
729 on_opt(N) ::= ON expr(E).  {N = E;}
730 on_opt(N) ::= .     [OR]   {N = 0;}
731 
732 // Note that this block abuses the Token type just a little. If there is
733 // no "INDEXED BY" clause, the returned token is empty (z==0 && n==0). If
734 // there is an INDEXED BY clause, then the token is populated as per normal,
735 // with z pointing to the token data and n containing the number of bytes
736 // in the token.
737 //
738 // If there is a "NOT INDEXED" clause, then (z==0 && n==1), which is
739 // normally illegal. The sqlite3SrcListIndexedBy() function
740 // recognizes and interprets this as a special case.
741 //
742 %type indexed_opt {Token}
743 indexed_opt(A) ::= .                 {A.z=0; A.n=0;}
744 indexed_opt(A) ::= INDEXED BY nm(X). {A = X;}
745 indexed_opt(A) ::= NOT INDEXED.      {A.z=0; A.n=1;}
746 
747 %type using_opt {IdList*}
748 %destructor using_opt {sqlite3IdListDelete(pParse->db, $$);}
749 using_opt(U) ::= USING LP idlist(L) RP.  {U = L;}
750 using_opt(U) ::= .                        {U = 0;}
751 
752 
753 %type orderby_opt {ExprList*}
754 %destructor orderby_opt {sqlite3ExprListDelete(pParse->db, $$);}
755 
756 // the sortlist non-terminal stores a list of expression where each
757 // expression is optionally followed by ASC or DESC to indicate the
758 // sort order.
759 //
760 %type sortlist {ExprList*}
761 %destructor sortlist {sqlite3ExprListDelete(pParse->db, $$);}
762 
763 orderby_opt(A) ::= .                          {A = 0;}
764 orderby_opt(A) ::= ORDER BY sortlist(X).      {A = X;}
765 sortlist(A) ::= sortlist(A) COMMA expr(Y) sortorder(Z). {
766   A = sqlite3ExprListAppend(pParse,A,Y);
767   sqlite3ExprListSetSortOrder(A,Z);
768 }
769 sortlist(A) ::= expr(Y) sortorder(Z). {
770   A = sqlite3ExprListAppend(pParse,0,Y); /*A-overwrites-Y*/
771   sqlite3ExprListSetSortOrder(A,Z);
772 }
773 
774 %type sortorder {int}
775 
776 sortorder(A) ::= ASC.           {A = SQLITE_SO_ASC;}
777 sortorder(A) ::= DESC.          {A = SQLITE_SO_DESC;}
778 sortorder(A) ::= .              {A = SQLITE_SO_UNDEFINED;}
779 
780 %type groupby_opt {ExprList*}
781 %destructor groupby_opt {sqlite3ExprListDelete(pParse->db, $$);}
782 groupby_opt(A) ::= .                      {A = 0;}
783 groupby_opt(A) ::= GROUP BY nexprlist(X). {A = X;}
784 
785 %type having_opt {Expr*}
786 %destructor having_opt {sqlite3ExprDelete(pParse->db, $$);}
787 having_opt(A) ::= .                {A = 0;}
788 having_opt(A) ::= HAVING expr(X).  {A = X;}
789 
790 %type limit_opt {Expr*}
791 
792 // The destructor for limit_opt will never fire in the current grammar.
793 // The limit_opt non-terminal only occurs at the end of a single production
794 // rule for SELECT statements.  As soon as the rule that create the
795 // limit_opt non-terminal reduces, the SELECT statement rule will also
796 // reduce.  So there is never a limit_opt non-terminal on the stack
797 // except as a transient.  So there is never anything to destroy.
798 //
799 //%destructor limit_opt {sqlite3ExprDelete(pParse->db, $$);}
800 limit_opt(A) ::= .       {A = 0;}
801 limit_opt(A) ::= LIMIT expr(X).
802                          {A = sqlite3PExpr(pParse,TK_LIMIT,X,0);}
803 limit_opt(A) ::= LIMIT expr(X) OFFSET expr(Y).
804                          {A = sqlite3PExpr(pParse,TK_LIMIT,X,Y);}
805 limit_opt(A) ::= LIMIT expr(X) COMMA expr(Y).
806                          {A = sqlite3PExpr(pParse,TK_LIMIT,Y,X);}
807 
808 /////////////////////////// The DELETE statement /////////////////////////////
809 //
810 %ifdef SQLITE_ENABLE_UPDATE_DELETE_LIMIT
811 cmd ::= with DELETE FROM xfullname(X) indexed_opt(I) where_opt(W)
812         orderby_opt(O) limit_opt(L). {
813   sqlite3SrcListIndexedBy(pParse, X, &I);
814   sqlite3DeleteFrom(pParse,X,W,O,L);
815 }
816 %endif
817 %ifndef SQLITE_ENABLE_UPDATE_DELETE_LIMIT
818 cmd ::= with DELETE FROM xfullname(X) indexed_opt(I) where_opt(W). {
819   sqlite3SrcListIndexedBy(pParse, X, &I);
820   sqlite3DeleteFrom(pParse,X,W,0,0);
821 }
822 %endif
823 
824 %type where_opt {Expr*}
825 %destructor where_opt {sqlite3ExprDelete(pParse->db, $$);}
826 
827 where_opt(A) ::= .                    {A = 0;}
828 where_opt(A) ::= WHERE expr(X).       {A = X;}
829 
830 ////////////////////////// The UPDATE command ////////////////////////////////
831 //
832 %ifdef SQLITE_ENABLE_UPDATE_DELETE_LIMIT
833 cmd ::= with UPDATE orconf(R) xfullname(X) indexed_opt(I) SET setlist(Y)
834         where_opt(W) orderby_opt(O) limit_opt(L).  {
835   sqlite3SrcListIndexedBy(pParse, X, &I);
836   sqlite3ExprListCheckLength(pParse,Y,"set list");
837   sqlite3Update(pParse,X,Y,W,R,O,L,0);
838 }
839 %endif
840 %ifndef SQLITE_ENABLE_UPDATE_DELETE_LIMIT
841 cmd ::= with UPDATE orconf(R) xfullname(X) indexed_opt(I) SET setlist(Y)
842         where_opt(W).  {
843   sqlite3SrcListIndexedBy(pParse, X, &I);
844   sqlite3ExprListCheckLength(pParse,Y,"set list");
845   sqlite3Update(pParse,X,Y,W,R,0,0,0);
846 }
847 %endif
848 
849 %type setlist {ExprList*}
850 %destructor setlist {sqlite3ExprListDelete(pParse->db, $$);}
851 
852 setlist(A) ::= setlist(A) COMMA nm(X) EQ expr(Y). {
853   A = sqlite3ExprListAppend(pParse, A, Y);
854   sqlite3ExprListSetName(pParse, A, &X, 1);
855 }
856 setlist(A) ::= setlist(A) COMMA LP idlist(X) RP EQ expr(Y). {
857   A = sqlite3ExprListAppendVector(pParse, A, X, Y);
858 }
859 setlist(A) ::= nm(X) EQ expr(Y). {
860   A = sqlite3ExprListAppend(pParse, 0, Y);
861   sqlite3ExprListSetName(pParse, A, &X, 1);
862 }
863 setlist(A) ::= LP idlist(X) RP EQ expr(Y). {
864   A = sqlite3ExprListAppendVector(pParse, 0, X, Y);
865 }
866 
867 ////////////////////////// The INSERT command /////////////////////////////////
868 //
869 cmd ::= with insert_cmd(R) INTO xfullname(X) idlist_opt(F) select(S)
870         upsert(U). {
871   sqlite3Insert(pParse, X, S, F, R, U);
872 }
873 cmd ::= with insert_cmd(R) INTO xfullname(X) idlist_opt(F) DEFAULT VALUES.
874 {
875   sqlite3Insert(pParse, X, 0, F, R, 0);
876 }
877 
878 %type upsert {Upsert*}
879 
880 // Because upsert only occurs at the tip end of the INSERT rule for cmd,
881 // there is never a case where the value of the upsert pointer will not
882 // be destroyed by the cmd action.  So comment-out the destructor to
883 // avoid unreachable code.
884 //%destructor upsert {sqlite3UpsertDelete(pParse->db,$$);}
885 upsert(A) ::= . { A = 0; }
886 upsert(A) ::= ON CONFLICT LP sortlist(T) RP where_opt(TW)
887               DO UPDATE SET setlist(Z) where_opt(W).
888               { A = sqlite3UpsertNew(pParse->db,T,TW,Z,W);}
889 upsert(A) ::= ON CONFLICT LP sortlist(T) RP where_opt(TW) DO NOTHING.
890               { A = sqlite3UpsertNew(pParse->db,T,TW,0,0); }
891 upsert(A) ::= ON CONFLICT DO NOTHING.
892               { A = sqlite3UpsertNew(pParse->db,0,0,0,0); }
893 
894 %type insert_cmd {int}
895 insert_cmd(A) ::= INSERT orconf(R).   {A = R;}
896 insert_cmd(A) ::= REPLACE.            {A = OE_Replace;}
897 
898 %type idlist_opt {IdList*}
899 %destructor idlist_opt {sqlite3IdListDelete(pParse->db, $$);}
900 %type idlist {IdList*}
901 %destructor idlist {sqlite3IdListDelete(pParse->db, $$);}
902 
903 idlist_opt(A) ::= .                       {A = 0;}
904 idlist_opt(A) ::= LP idlist(X) RP.    {A = X;}
905 idlist(A) ::= idlist(A) COMMA nm(Y).
906     {A = sqlite3IdListAppend(pParse->db,A,&Y);}
907 idlist(A) ::= nm(Y).
908     {A = sqlite3IdListAppend(pParse->db,0,&Y); /*A-overwrites-Y*/}
909 
910 /////////////////////////// Expression Processing /////////////////////////////
911 //
912 
913 %type expr {Expr*}
914 %destructor expr {sqlite3ExprDelete(pParse->db, $$);}
915 %type term {Expr*}
916 %destructor term {sqlite3ExprDelete(pParse->db, $$);}
917 
918 %include {
919 
920   /* Construct a new Expr object from a single identifier.  Use the
921   ** new Expr to populate pOut.  Set the span of pOut to be the identifier
922   ** that created the expression.
923   */
924   static Expr *tokenExpr(Parse *pParse, int op, Token t){
925     Expr *p = sqlite3DbMallocRawNN(pParse->db, sizeof(Expr)+t.n+1);
926     if( p ){
927       memset(p, 0, sizeof(Expr));
928       p->op = (u8)op;
929       p->flags = EP_Leaf;
930       p->iAgg = -1;
931       p->u.zToken = (char*)&p[1];
932       memcpy(p->u.zToken, t.z, t.n);
933       p->u.zToken[t.n] = 0;
934       if( sqlite3Isquote(p->u.zToken[0]) ){
935         if( p->u.zToken[0]=='"' ) p->flags |= EP_DblQuoted;
936         sqlite3Dequote(p->u.zToken);
937       }
938 #if SQLITE_MAX_EXPR_DEPTH>0
939       p->nHeight = 1;
940 #endif
941     }
942     return p;
943   }
944 }
945 
946 expr(A) ::= term(A).
947 expr(A) ::= LP expr(X) RP. {A = X;}
948 expr(A) ::= id(X).          {A=tokenExpr(pParse,TK_ID,X); /*A-overwrites-X*/}
949 expr(A) ::= JOIN_KW(X).     {A=tokenExpr(pParse,TK_ID,X); /*A-overwrites-X*/}
950 expr(A) ::= nm(X) DOT nm(Y). {
951   Expr *temp1 = sqlite3ExprAlloc(pParse->db, TK_ID, &X, 1);
952   Expr *temp2 = sqlite3ExprAlloc(pParse->db, TK_ID, &Y, 1);
953   A = sqlite3PExpr(pParse, TK_DOT, temp1, temp2);
954 }
955 expr(A) ::= nm(X) DOT nm(Y) DOT nm(Z). {
956   Expr *temp1 = sqlite3ExprAlloc(pParse->db, TK_ID, &X, 1);
957   Expr *temp2 = sqlite3ExprAlloc(pParse->db, TK_ID, &Y, 1);
958   Expr *temp3 = sqlite3ExprAlloc(pParse->db, TK_ID, &Z, 1);
959   Expr *temp4 = sqlite3PExpr(pParse, TK_DOT, temp2, temp3);
960   A = sqlite3PExpr(pParse, TK_DOT, temp1, temp4);
961 }
962 term(A) ::= NULL|FLOAT|BLOB(X). {A=tokenExpr(pParse,@X,X); /*A-overwrites-X*/}
963 term(A) ::= STRING(X).          {A=tokenExpr(pParse,@X,X); /*A-overwrites-X*/}
964 term(A) ::= INTEGER(X). {
965   A = sqlite3ExprAlloc(pParse->db, TK_INTEGER, &X, 1);
966 }
967 expr(A) ::= VARIABLE(X).     {
968   if( !(X.z[0]=='#' && sqlite3Isdigit(X.z[1])) ){
969     u32 n = X.n;
970     A = tokenExpr(pParse, TK_VARIABLE, X);
971     sqlite3ExprAssignVarNumber(pParse, A, n);
972   }else{
973     /* When doing a nested parse, one can include terms in an expression
974     ** that look like this:   #1 #2 ...  These terms refer to registers
975     ** in the virtual machine.  #N is the N-th register. */
976     Token t = X; /*A-overwrites-X*/
977     assert( t.n>=2 );
978     if( pParse->nested==0 ){
979       sqlite3ErrorMsg(pParse, "near \"%T\": syntax error", &t);
980       A = 0;
981     }else{
982       A = sqlite3PExpr(pParse, TK_REGISTER, 0, 0);
983       if( A ) sqlite3GetInt32(&t.z[1], &A->iTable);
984     }
985   }
986 }
987 expr(A) ::= expr(A) COLLATE ids(C). {
988   A = sqlite3ExprAddCollateToken(pParse, A, &C, 1);
989 }
990 %ifndef SQLITE_OMIT_CAST
991 expr(A) ::= CAST LP expr(E) AS typetoken(T) RP. {
992   A = sqlite3ExprAlloc(pParse->db, TK_CAST, &T, 1);
993   sqlite3ExprAttachSubtrees(pParse->db, A, E, 0);
994 }
995 %endif  SQLITE_OMIT_CAST
996 expr(A) ::= id(X) LP distinct(D) exprlist(Y) RP
997 %ifndef SQLITE_OMIT_WINDOWFUNC
998   over_opt(Z)
999 %endif
1000 . {
1001   if( Y && Y->nExpr>pParse->db->aLimit[SQLITE_LIMIT_FUNCTION_ARG] ){
1002     sqlite3ErrorMsg(pParse, "too many arguments on function %T", &X);
1003   }
1004   A = sqlite3ExprFunction(pParse, Y, &X);
1005   if( D==SF_Distinct && A ){
1006     A->flags |= EP_Distinct;
1007   }
1008   sqlite3WindowAttach(pParse, A, Z);
1009 }
1010 expr(A) ::= id(X) LP STAR RP
1011 %ifndef SQLITE_OMIT_WINDOWFUNC
1012   over_opt(Z)
1013 %endif
1014 . {
1015   A = sqlite3ExprFunction(pParse, 0, &X);
1016   sqlite3WindowAttach(pParse, A, Z);
1017 }
1018 term(A) ::= CTIME_KW(OP). {
1019   A = sqlite3ExprFunction(pParse, 0, &OP);
1020 }
1021 
1022 expr(A) ::= LP nexprlist(X) COMMA expr(Y) RP. {
1023   ExprList *pList = sqlite3ExprListAppend(pParse, X, Y);
1024   A = sqlite3PExpr(pParse, TK_VECTOR, 0, 0);
1025   if( A ){
1026     A->x.pList = pList;
1027   }else{
1028     sqlite3ExprListDelete(pParse->db, pList);
1029   }
1030 }
1031 
1032 expr(A) ::= expr(A) AND(OP) expr(Y).    {A=sqlite3PExpr(pParse,@OP,A,Y);}
1033 expr(A) ::= expr(A) OR(OP) expr(Y).     {A=sqlite3PExpr(pParse,@OP,A,Y);}
1034 expr(A) ::= expr(A) LT|GT|GE|LE(OP) expr(Y).
1035                                         {A=sqlite3PExpr(pParse,@OP,A,Y);}
1036 expr(A) ::= expr(A) EQ|NE(OP) expr(Y).  {A=sqlite3PExpr(pParse,@OP,A,Y);}
1037 expr(A) ::= expr(A) BITAND|BITOR|LSHIFT|RSHIFT(OP) expr(Y).
1038                                         {A=sqlite3PExpr(pParse,@OP,A,Y);}
1039 expr(A) ::= expr(A) PLUS|MINUS(OP) expr(Y).
1040                                         {A=sqlite3PExpr(pParse,@OP,A,Y);}
1041 expr(A) ::= expr(A) STAR|SLASH|REM(OP) expr(Y).
1042                                         {A=sqlite3PExpr(pParse,@OP,A,Y);}
1043 expr(A) ::= expr(A) CONCAT(OP) expr(Y). {A=sqlite3PExpr(pParse,@OP,A,Y);}
1044 %type likeop {Token}
1045 likeop(A) ::= LIKE_KW|MATCH(A).
1046 likeop(A) ::= NOT LIKE_KW|MATCH(X). {A=X; A.n|=0x80000000; /*A-overwrite-X*/}
1047 expr(A) ::= expr(A) likeop(OP) expr(Y).  [LIKE_KW]  {
1048   ExprList *pList;
1049   int bNot = OP.n & 0x80000000;
1050   OP.n &= 0x7fffffff;
1051   pList = sqlite3ExprListAppend(pParse,0, Y);
1052   pList = sqlite3ExprListAppend(pParse,pList, A);
1053   A = sqlite3ExprFunction(pParse, pList, &OP);
1054   if( bNot ) A = sqlite3PExpr(pParse, TK_NOT, A, 0);
1055   if( A ) A->flags |= EP_InfixFunc;
1056 }
1057 expr(A) ::= expr(A) likeop(OP) expr(Y) ESCAPE expr(E).  [LIKE_KW]  {
1058   ExprList *pList;
1059   int bNot = OP.n & 0x80000000;
1060   OP.n &= 0x7fffffff;
1061   pList = sqlite3ExprListAppend(pParse,0, Y);
1062   pList = sqlite3ExprListAppend(pParse,pList, A);
1063   pList = sqlite3ExprListAppend(pParse,pList, E);
1064   A = sqlite3ExprFunction(pParse, pList, &OP);
1065   if( bNot ) A = sqlite3PExpr(pParse, TK_NOT, A, 0);
1066   if( A ) A->flags |= EP_InfixFunc;
1067 }
1068 
1069 expr(A) ::= expr(A) ISNULL|NOTNULL(E).   {A = sqlite3PExpr(pParse,@E,A,0);}
1070 expr(A) ::= expr(A) NOT NULL.    {A = sqlite3PExpr(pParse,TK_NOTNULL,A,0);}
1071 
1072 %include {
1073   /* A routine to convert a binary TK_IS or TK_ISNOT expression into a
1074   ** unary TK_ISNULL or TK_NOTNULL expression. */
1075   static void binaryToUnaryIfNull(Parse *pParse, Expr *pY, Expr *pA, int op){
1076     sqlite3 *db = pParse->db;
1077     if( pA && pY && pY->op==TK_NULL ){
1078       pA->op = (u8)op;
1079       sqlite3ExprDelete(db, pA->pRight);
1080       pA->pRight = 0;
1081     }
1082   }
1083 }
1084 
1085 //    expr1 IS expr2
1086 //    expr1 IS NOT expr2
1087 //
1088 // If expr2 is NULL then code as TK_ISNULL or TK_NOTNULL.  If expr2
1089 // is any other expression, code as TK_IS or TK_ISNOT.
1090 //
1091 expr(A) ::= expr(A) IS expr(Y).     {
1092   A = sqlite3PExpr(pParse,TK_IS,A,Y);
1093   binaryToUnaryIfNull(pParse, Y, A, TK_ISNULL);
1094 }
1095 expr(A) ::= expr(A) IS NOT expr(Y). {
1096   A = sqlite3PExpr(pParse,TK_ISNOT,A,Y);
1097   binaryToUnaryIfNull(pParse, Y, A, TK_NOTNULL);
1098 }
1099 
1100 expr(A) ::= NOT(B) expr(X).
1101               {A = sqlite3PExpr(pParse, @B, X, 0);/*A-overwrites-B*/}
1102 expr(A) ::= BITNOT(B) expr(X).
1103               {A = sqlite3PExpr(pParse, @B, X, 0);/*A-overwrites-B*/}
1104 expr(A) ::= PLUS|MINUS(B) expr(X). [BITNOT] {
1105   A = sqlite3PExpr(pParse, @B==TK_PLUS ? TK_UPLUS : TK_UMINUS, X, 0);
1106   /*A-overwrites-B*/
1107 }
1108 
1109 %type between_op {int}
1110 between_op(A) ::= BETWEEN.     {A = 0;}
1111 between_op(A) ::= NOT BETWEEN. {A = 1;}
1112 expr(A) ::= expr(A) between_op(N) expr(X) AND expr(Y). [BETWEEN] {
1113   ExprList *pList = sqlite3ExprListAppend(pParse,0, X);
1114   pList = sqlite3ExprListAppend(pParse,pList, Y);
1115   A = sqlite3PExpr(pParse, TK_BETWEEN, A, 0);
1116   if( A ){
1117     A->x.pList = pList;
1118   }else{
1119     sqlite3ExprListDelete(pParse->db, pList);
1120   }
1121   if( N ) A = sqlite3PExpr(pParse, TK_NOT, A, 0);
1122 }
1123 %ifndef SQLITE_OMIT_SUBQUERY
1124   %type in_op {int}
1125   in_op(A) ::= IN.      {A = 0;}
1126   in_op(A) ::= NOT IN.  {A = 1;}
1127   expr(A) ::= expr(A) in_op(N) LP exprlist(Y) RP. [IN] {
1128     if( Y==0 ){
1129       /* Expressions of the form
1130       **
1131       **      expr1 IN ()
1132       **      expr1 NOT IN ()
1133       **
1134       ** simplify to constants 0 (false) and 1 (true), respectively,
1135       ** regardless of the value of expr1.
1136       */
1137       sqlite3ExprDelete(pParse->db, A);
1138       A = sqlite3ExprAlloc(pParse->db, TK_INTEGER,&sqlite3IntTokens[N],1);
1139     }else if( Y->nExpr==1 ){
1140       /* Expressions of the form:
1141       **
1142       **      expr1 IN (?1)
1143       **      expr1 NOT IN (?2)
1144       **
1145       ** with exactly one value on the RHS can be simplified to something
1146       ** like this:
1147       **
1148       **      expr1 == ?1
1149       **      expr1 <> ?2
1150       **
1151       ** But, the RHS of the == or <> is marked with the EP_Generic flag
1152       ** so that it may not contribute to the computation of comparison
1153       ** affinity or the collating sequence to use for comparison.  Otherwise,
1154       ** the semantics would be subtly different from IN or NOT IN.
1155       */
1156       Expr *pRHS = Y->a[0].pExpr;
1157       Y->a[0].pExpr = 0;
1158       sqlite3ExprListDelete(pParse->db, Y);
1159       /* pRHS cannot be NULL because a malloc error would have been detected
1160       ** before now and control would have never reached this point */
1161       if( ALWAYS(pRHS) ){
1162         pRHS->flags &= ~EP_Collate;
1163         pRHS->flags |= EP_Generic;
1164       }
1165       A = sqlite3PExpr(pParse, N ? TK_NE : TK_EQ, A, pRHS);
1166     }else{
1167       A = sqlite3PExpr(pParse, TK_IN, A, 0);
1168       if( A ){
1169         A->x.pList = Y;
1170         sqlite3ExprSetHeightAndFlags(pParse, A);
1171       }else{
1172         sqlite3ExprListDelete(pParse->db, Y);
1173       }
1174       if( N ) A = sqlite3PExpr(pParse, TK_NOT, A, 0);
1175     }
1176   }
1177   expr(A) ::= LP select(X) RP. {
1178     A = sqlite3PExpr(pParse, TK_SELECT, 0, 0);
1179     sqlite3PExprAddSelect(pParse, A, X);
1180   }
1181   expr(A) ::= expr(A) in_op(N) LP select(Y) RP.  [IN] {
1182     A = sqlite3PExpr(pParse, TK_IN, A, 0);
1183     sqlite3PExprAddSelect(pParse, A, Y);
1184     if( N ) A = sqlite3PExpr(pParse, TK_NOT, A, 0);
1185   }
1186   expr(A) ::= expr(A) in_op(N) nm(Y) dbnm(Z) paren_exprlist(E). [IN] {
1187     SrcList *pSrc = sqlite3SrcListAppend(pParse->db, 0,&Y,&Z);
1188     Select *pSelect = sqlite3SelectNew(pParse, 0,pSrc,0,0,0,0,0,0);
1189     if( E )  sqlite3SrcListFuncArgs(pParse, pSelect ? pSrc : 0, E);
1190     A = sqlite3PExpr(pParse, TK_IN, A, 0);
1191     sqlite3PExprAddSelect(pParse, A, pSelect);
1192     if( N ) A = sqlite3PExpr(pParse, TK_NOT, A, 0);
1193   }
1194   expr(A) ::= EXISTS LP select(Y) RP. {
1195     Expr *p;
1196     p = A = sqlite3PExpr(pParse, TK_EXISTS, 0, 0);
1197     sqlite3PExprAddSelect(pParse, p, Y);
1198   }
1199 %endif SQLITE_OMIT_SUBQUERY
1200 
1201 /* CASE expressions */
1202 expr(A) ::= CASE case_operand(X) case_exprlist(Y) case_else(Z) END. {
1203   A = sqlite3PExpr(pParse, TK_CASE, X, 0);
1204   if( A ){
1205     A->x.pList = Z ? sqlite3ExprListAppend(pParse,Y,Z) : Y;
1206     sqlite3ExprSetHeightAndFlags(pParse, A);
1207   }else{
1208     sqlite3ExprListDelete(pParse->db, Y);
1209     sqlite3ExprDelete(pParse->db, Z);
1210   }
1211 }
1212 %type case_exprlist {ExprList*}
1213 %destructor case_exprlist {sqlite3ExprListDelete(pParse->db, $$);}
1214 case_exprlist(A) ::= case_exprlist(A) WHEN expr(Y) THEN expr(Z). {
1215   A = sqlite3ExprListAppend(pParse,A, Y);
1216   A = sqlite3ExprListAppend(pParse,A, Z);
1217 }
1218 case_exprlist(A) ::= WHEN expr(Y) THEN expr(Z). {
1219   A = sqlite3ExprListAppend(pParse,0, Y);
1220   A = sqlite3ExprListAppend(pParse,A, Z);
1221 }
1222 %type case_else {Expr*}
1223 %destructor case_else {sqlite3ExprDelete(pParse->db, $$);}
1224 case_else(A) ::=  ELSE expr(X).         {A = X;}
1225 case_else(A) ::=  .                     {A = 0;}
1226 %type case_operand {Expr*}
1227 %destructor case_operand {sqlite3ExprDelete(pParse->db, $$);}
1228 case_operand(A) ::= expr(X).            {A = X; /*A-overwrites-X*/}
1229 case_operand(A) ::= .                   {A = 0;}
1230 
1231 %type exprlist {ExprList*}
1232 %destructor exprlist {sqlite3ExprListDelete(pParse->db, $$);}
1233 %type nexprlist {ExprList*}
1234 %destructor nexprlist {sqlite3ExprListDelete(pParse->db, $$);}
1235 
1236 exprlist(A) ::= nexprlist(A).
1237 exprlist(A) ::= .                            {A = 0;}
1238 nexprlist(A) ::= nexprlist(A) COMMA expr(Y).
1239     {A = sqlite3ExprListAppend(pParse,A,Y);}
1240 nexprlist(A) ::= expr(Y).
1241     {A = sqlite3ExprListAppend(pParse,0,Y); /*A-overwrites-Y*/}
1242 
1243 %ifndef SQLITE_OMIT_SUBQUERY
1244 /* A paren_exprlist is an optional expression list contained inside
1245 ** of parenthesis */
1246 %type paren_exprlist {ExprList*}
1247 %destructor paren_exprlist {sqlite3ExprListDelete(pParse->db, $$);}
1248 paren_exprlist(A) ::= .   {A = 0;}
1249 paren_exprlist(A) ::= LP exprlist(X) RP.  {A = X;}
1250 %endif SQLITE_OMIT_SUBQUERY
1251 
1252 
1253 ///////////////////////////// The CREATE INDEX command ///////////////////////
1254 //
1255 cmd ::= createkw(S) uniqueflag(U) INDEX ifnotexists(NE) nm(X) dbnm(D)
1256         ON nm(Y) LP sortlist(Z) RP where_opt(W). {
1257   sqlite3CreateIndex(pParse, &X, &D,
1258                      sqlite3SrcListAppend(pParse->db,0,&Y,0), Z, U,
1259                       &S, W, SQLITE_SO_ASC, NE, SQLITE_IDXTYPE_APPDEF);
1260 }
1261 
1262 %type uniqueflag {int}
1263 uniqueflag(A) ::= UNIQUE.  {A = OE_Abort;}
1264 uniqueflag(A) ::= .        {A = OE_None;}
1265 
1266 
1267 // The eidlist non-terminal (Expression Id List) generates an ExprList
1268 // from a list of identifiers.  The identifier names are in ExprList.a[].zName.
1269 // This list is stored in an ExprList rather than an IdList so that it
1270 // can be easily sent to sqlite3ColumnsExprList().
1271 //
1272 // eidlist is grouped with CREATE INDEX because it used to be the non-terminal
1273 // used for the arguments to an index.  That is just an historical accident.
1274 //
1275 // IMPORTANT COMPATIBILITY NOTE:  Some prior versions of SQLite accepted
1276 // COLLATE clauses and ASC or DESC keywords on ID lists in inappropriate
1277 // places - places that might have been stored in the sqlite_master schema.
1278 // Those extra features were ignored.  But because they might be in some
1279 // (busted) old databases, we need to continue parsing them when loading
1280 // historical schemas.
1281 //
1282 %type eidlist {ExprList*}
1283 %destructor eidlist {sqlite3ExprListDelete(pParse->db, $$);}
1284 %type eidlist_opt {ExprList*}
1285 %destructor eidlist_opt {sqlite3ExprListDelete(pParse->db, $$);}
1286 
1287 %include {
1288   /* Add a single new term to an ExprList that is used to store a
1289   ** list of identifiers.  Report an error if the ID list contains
1290   ** a COLLATE clause or an ASC or DESC keyword, except ignore the
1291   ** error while parsing a legacy schema.
1292   */
1293   static ExprList *parserAddExprIdListTerm(
1294     Parse *pParse,
1295     ExprList *pPrior,
1296     Token *pIdToken,
1297     int hasCollate,
1298     int sortOrder
1299   ){
1300     ExprList *p = sqlite3ExprListAppend(pParse, pPrior, 0);
1301     if( (hasCollate || sortOrder!=SQLITE_SO_UNDEFINED)
1302         && pParse->db->init.busy==0
1303     ){
1304       sqlite3ErrorMsg(pParse, "syntax error after column name \"%.*s\"",
1305                          pIdToken->n, pIdToken->z);
1306     }
1307     sqlite3ExprListSetName(pParse, p, pIdToken, 1);
1308     return p;
1309   }
1310 } // end %include
1311 
1312 eidlist_opt(A) ::= .                         {A = 0;}
1313 eidlist_opt(A) ::= LP eidlist(X) RP.         {A = X;}
1314 eidlist(A) ::= eidlist(A) COMMA nm(Y) collate(C) sortorder(Z).  {
1315   A = parserAddExprIdListTerm(pParse, A, &Y, C, Z);
1316 }
1317 eidlist(A) ::= nm(Y) collate(C) sortorder(Z). {
1318   A = parserAddExprIdListTerm(pParse, 0, &Y, C, Z); /*A-overwrites-Y*/
1319 }
1320 
1321 %type collate {int}
1322 collate(C) ::= .              {C = 0;}
1323 collate(C) ::= COLLATE ids.   {C = 1;}
1324 
1325 
1326 ///////////////////////////// The DROP INDEX command /////////////////////////
1327 //
1328 cmd ::= DROP INDEX ifexists(E) fullname(X).   {sqlite3DropIndex(pParse, X, E);}
1329 
1330 ///////////////////////////// The VACUUM command /////////////////////////////
1331 //
1332 %ifndef SQLITE_OMIT_VACUUM
1333 %ifndef SQLITE_OMIT_ATTACH
1334 cmd ::= VACUUM.                {sqlite3Vacuum(pParse,0);}
1335 cmd ::= VACUUM nm(X).          {sqlite3Vacuum(pParse,&X);}
1336 %endif  SQLITE_OMIT_ATTACH
1337 %endif  SQLITE_OMIT_VACUUM
1338 
1339 ///////////////////////////// The PRAGMA command /////////////////////////////
1340 //
1341 %ifndef SQLITE_OMIT_PRAGMA
1342 cmd ::= PRAGMA nm(X) dbnm(Z).                {sqlite3Pragma(pParse,&X,&Z,0,0);}
1343 cmd ::= PRAGMA nm(X) dbnm(Z) EQ nmnum(Y).    {sqlite3Pragma(pParse,&X,&Z,&Y,0);}
1344 cmd ::= PRAGMA nm(X) dbnm(Z) LP nmnum(Y) RP. {sqlite3Pragma(pParse,&X,&Z,&Y,0);}
1345 cmd ::= PRAGMA nm(X) dbnm(Z) EQ minus_num(Y).
1346                                              {sqlite3Pragma(pParse,&X,&Z,&Y,1);}
1347 cmd ::= PRAGMA nm(X) dbnm(Z) LP minus_num(Y) RP.
1348                                              {sqlite3Pragma(pParse,&X,&Z,&Y,1);}
1349 
1350 nmnum(A) ::= plus_num(A).
1351 nmnum(A) ::= nm(A).
1352 nmnum(A) ::= ON(A).
1353 nmnum(A) ::= DELETE(A).
1354 nmnum(A) ::= DEFAULT(A).
1355 %endif SQLITE_OMIT_PRAGMA
1356 %token_class number INTEGER|FLOAT.
1357 plus_num(A) ::= PLUS number(X).       {A = X;}
1358 plus_num(A) ::= number(A).
1359 minus_num(A) ::= MINUS number(X).     {A = X;}
1360 //////////////////////////// The CREATE TRIGGER command /////////////////////
1361 
1362 %ifndef SQLITE_OMIT_TRIGGER
1363 
1364 cmd ::= createkw trigger_decl(A) BEGIN trigger_cmd_list(S) END(Z). {
1365   Token all;
1366   all.z = A.z;
1367   all.n = (int)(Z.z - A.z) + Z.n;
1368   sqlite3FinishTrigger(pParse, S, &all);
1369 }
1370 
1371 trigger_decl(A) ::= temp(T) TRIGGER ifnotexists(NOERR) nm(B) dbnm(Z)
1372                     trigger_time(C) trigger_event(D)
1373                     ON fullname(E) foreach_clause when_clause(G). {
1374   sqlite3BeginTrigger(pParse, &B, &Z, C, D.a, D.b, E, G, T, NOERR);
1375   A = (Z.n==0?B:Z); /*A-overwrites-T*/
1376 }
1377 
1378 %type trigger_time {int}
1379 trigger_time(A) ::= BEFORE|AFTER(X).  { A = @X; /*A-overwrites-X*/ }
1380 trigger_time(A) ::= INSTEAD OF.  { A = TK_INSTEAD;}
1381 trigger_time(A) ::= .            { A = TK_BEFORE; }
1382 
1383 %type trigger_event {struct TrigEvent}
1384 %destructor trigger_event {sqlite3IdListDelete(pParse->db, $$.b);}
1385 trigger_event(A) ::= DELETE|INSERT(X).   {A.a = @X; /*A-overwrites-X*/ A.b = 0;}
1386 trigger_event(A) ::= UPDATE(X).          {A.a = @X; /*A-overwrites-X*/ A.b = 0;}
1387 trigger_event(A) ::= UPDATE OF idlist(X).{A.a = TK_UPDATE; A.b = X;}
1388 
1389 foreach_clause ::= .
1390 foreach_clause ::= FOR EACH ROW.
1391 
1392 %type when_clause {Expr*}
1393 %destructor when_clause {sqlite3ExprDelete(pParse->db, $$);}
1394 when_clause(A) ::= .             { A = 0; }
1395 when_clause(A) ::= WHEN expr(X). { A = X; }
1396 
1397 %type trigger_cmd_list {TriggerStep*}
1398 %destructor trigger_cmd_list {sqlite3DeleteTriggerStep(pParse->db, $$);}
1399 trigger_cmd_list(A) ::= trigger_cmd_list(A) trigger_cmd(X) SEMI. {
1400   assert( A!=0 );
1401   A->pLast->pNext = X;
1402   A->pLast = X;
1403 }
1404 trigger_cmd_list(A) ::= trigger_cmd(A) SEMI. {
1405   assert( A!=0 );
1406   A->pLast = A;
1407 }
1408 
1409 // Disallow qualified table names on INSERT, UPDATE, and DELETE statements
1410 // within a trigger.  The table to INSERT, UPDATE, or DELETE is always in
1411 // the same database as the table that the trigger fires on.
1412 //
1413 %type trnm {Token}
1414 trnm(A) ::= nm(A).
1415 trnm(A) ::= nm DOT nm(X). {
1416   A = X;
1417   sqlite3ErrorMsg(pParse,
1418         "qualified table names are not allowed on INSERT, UPDATE, and DELETE "
1419         "statements within triggers");
1420 }
1421 
1422 // Disallow the INDEX BY and NOT INDEXED clauses on UPDATE and DELETE
1423 // statements within triggers.  We make a specific error message for this
1424 // since it is an exception to the default grammar rules.
1425 //
1426 tridxby ::= .
1427 tridxby ::= INDEXED BY nm. {
1428   sqlite3ErrorMsg(pParse,
1429         "the INDEXED BY clause is not allowed on UPDATE or DELETE statements "
1430         "within triggers");
1431 }
1432 tridxby ::= NOT INDEXED. {
1433   sqlite3ErrorMsg(pParse,
1434         "the NOT INDEXED clause is not allowed on UPDATE or DELETE statements "
1435         "within triggers");
1436 }
1437 
1438 
1439 
1440 %type trigger_cmd {TriggerStep*}
1441 %destructor trigger_cmd {sqlite3DeleteTriggerStep(pParse->db, $$);}
1442 // UPDATE
1443 trigger_cmd(A) ::=
1444    UPDATE(B) orconf(R) trnm(X) tridxby SET setlist(Y) where_opt(Z) scanpt(E).
1445    {A = sqlite3TriggerUpdateStep(pParse->db, &X, Y, Z, R, B.z, E);}
1446 
1447 // INSERT
1448 trigger_cmd(A) ::= scanpt(B) insert_cmd(R) INTO
1449                       trnm(X) idlist_opt(F) select(S) upsert(U) scanpt(Z). {
1450    A = sqlite3TriggerInsertStep(pParse->db,&X,F,S,R,U,B,Z);/*A-overwrites-R*/
1451 }
1452 // DELETE
1453 trigger_cmd(A) ::= DELETE(B) FROM trnm(X) tridxby where_opt(Y) scanpt(E).
1454    {A = sqlite3TriggerDeleteStep(pParse->db, &X, Y, B.z, E);}
1455 
1456 // SELECT
1457 trigger_cmd(A) ::= scanpt(B) select(X) scanpt(E).
1458    {A = sqlite3TriggerSelectStep(pParse->db, X, B, E); /*A-overwrites-X*/}
1459 
1460 // The special RAISE expression that may occur in trigger programs
1461 expr(A) ::= RAISE LP IGNORE RP.  {
1462   A = sqlite3PExpr(pParse, TK_RAISE, 0, 0);
1463   if( A ){
1464     A->affinity = OE_Ignore;
1465   }
1466 }
1467 expr(A) ::= RAISE LP raisetype(T) COMMA nm(Z) RP.  {
1468   A = sqlite3ExprAlloc(pParse->db, TK_RAISE, &Z, 1);
1469   if( A ) {
1470     A->affinity = (char)T;
1471   }
1472 }
1473 %endif  !SQLITE_OMIT_TRIGGER
1474 
1475 %type raisetype {int}
1476 raisetype(A) ::= ROLLBACK.  {A = OE_Rollback;}
1477 raisetype(A) ::= ABORT.     {A = OE_Abort;}
1478 raisetype(A) ::= FAIL.      {A = OE_Fail;}
1479 
1480 
1481 ////////////////////////  DROP TRIGGER statement //////////////////////////////
1482 %ifndef SQLITE_OMIT_TRIGGER
1483 cmd ::= DROP TRIGGER ifexists(NOERR) fullname(X). {
1484   sqlite3DropTrigger(pParse,X,NOERR);
1485 }
1486 %endif  !SQLITE_OMIT_TRIGGER
1487 
1488 //////////////////////// ATTACH DATABASE file AS name /////////////////////////
1489 %ifndef SQLITE_OMIT_ATTACH
1490 cmd ::= ATTACH database_kw_opt expr(F) AS expr(D) key_opt(K). {
1491   sqlite3Attach(pParse, F, D, K);
1492 }
1493 cmd ::= DETACH database_kw_opt expr(D). {
1494   sqlite3Detach(pParse, D);
1495 }
1496 
1497 %type key_opt {Expr*}
1498 %destructor key_opt {sqlite3ExprDelete(pParse->db, $$);}
1499 key_opt(A) ::= .                     { A = 0; }
1500 key_opt(A) ::= KEY expr(X).          { A = X; }
1501 
1502 database_kw_opt ::= DATABASE.
1503 database_kw_opt ::= .
1504 %endif SQLITE_OMIT_ATTACH
1505 
1506 ////////////////////////// REINDEX collation //////////////////////////////////
1507 %ifndef SQLITE_OMIT_REINDEX
1508 cmd ::= REINDEX.                {sqlite3Reindex(pParse, 0, 0);}
1509 cmd ::= REINDEX nm(X) dbnm(Y).  {sqlite3Reindex(pParse, &X, &Y);}
1510 %endif  SQLITE_OMIT_REINDEX
1511 
1512 /////////////////////////////////// ANALYZE ///////////////////////////////////
1513 %ifndef SQLITE_OMIT_ANALYZE
1514 cmd ::= ANALYZE.                {sqlite3Analyze(pParse, 0, 0);}
1515 cmd ::= ANALYZE nm(X) dbnm(Y).  {sqlite3Analyze(pParse, &X, &Y);}
1516 %endif
1517 
1518 //////////////////////// ALTER TABLE table ... ////////////////////////////////
1519 %ifndef SQLITE_OMIT_ALTERTABLE
1520 cmd ::= ALTER TABLE fullname(X) RENAME TO nm(Z). {
1521   sqlite3AlterRenameTable(pParse,X,&Z);
1522 }
1523 cmd ::= ALTER TABLE add_column_fullname
1524         ADD kwcolumn_opt columnname(Y) carglist. {
1525   Y.n = (int)(pParse->sLastToken.z-Y.z) + pParse->sLastToken.n;
1526   sqlite3AlterFinishAddColumn(pParse, &Y);
1527 }
1528 add_column_fullname ::= fullname(X). {
1529   disableLookaside(pParse);
1530   sqlite3AlterBeginAddColumn(pParse, X);
1531 }
1532 kwcolumn_opt ::= .
1533 kwcolumn_opt ::= COLUMNKW.
1534 %endif  SQLITE_OMIT_ALTERTABLE
1535 
1536 //////////////////////// CREATE VIRTUAL TABLE ... /////////////////////////////
1537 %ifndef SQLITE_OMIT_VIRTUALTABLE
1538 cmd ::= create_vtab.                       {sqlite3VtabFinishParse(pParse,0);}
1539 cmd ::= create_vtab LP vtabarglist RP(X).  {sqlite3VtabFinishParse(pParse,&X);}
1540 create_vtab ::= createkw VIRTUAL TABLE ifnotexists(E)
1541                 nm(X) dbnm(Y) USING nm(Z). {
1542     sqlite3VtabBeginParse(pParse, &X, &Y, &Z, E);
1543 }
1544 vtabarglist ::= vtabarg.
1545 vtabarglist ::= vtabarglist COMMA vtabarg.
1546 vtabarg ::= .                       {sqlite3VtabArgInit(pParse);}
1547 vtabarg ::= vtabarg vtabargtoken.
1548 vtabargtoken ::= ANY(X).            {sqlite3VtabArgExtend(pParse,&X);}
1549 vtabargtoken ::= lp anylist RP(X).  {sqlite3VtabArgExtend(pParse,&X);}
1550 lp ::= LP(X).                       {sqlite3VtabArgExtend(pParse,&X);}
1551 anylist ::= .
1552 anylist ::= anylist LP anylist RP.
1553 anylist ::= anylist ANY.
1554 %endif  SQLITE_OMIT_VIRTUALTABLE
1555 
1556 
1557 //////////////////////// COMMON TABLE EXPRESSIONS ////////////////////////////
1558 %type wqlist {With*}
1559 %destructor wqlist {sqlite3WithDelete(pParse->db, $$);}
1560 
1561 with ::= .
1562 %ifndef SQLITE_OMIT_CTE
1563 with ::= WITH wqlist(W).              { sqlite3WithPush(pParse, W, 1); }
1564 with ::= WITH RECURSIVE wqlist(W).    { sqlite3WithPush(pParse, W, 1); }
1565 
1566 wqlist(A) ::= nm(X) eidlist_opt(Y) AS LP select(Z) RP. {
1567   A = sqlite3WithAdd(pParse, 0, &X, Y, Z); /*A-overwrites-X*/
1568 }
1569 wqlist(A) ::= wqlist(A) COMMA nm(X) eidlist_opt(Y) AS LP select(Z) RP. {
1570   A = sqlite3WithAdd(pParse, A, &X, Y, Z);
1571 }
1572 %endif  SQLITE_OMIT_CTE
1573 
1574 //////////////////////// WINDOW FUNCTION EXPRESSIONS /////////////////////////
1575 // These must be at the end of this file. Specifically, the rules that
1576 // introduce tokens WINDOW, OVER and FILTER must appear last. This causes
1577 // the integer values assigned to these tokens to be larger than all other
1578 // tokens that may be output by the tokenizer except TK_SPACE and TK_ILLEGAL.
1579 //
1580 %ifndef SQLITE_OMIT_WINDOWFUNC
1581 %type windowdefn_list {Window*}
1582 %destructor windowdefn_list {sqlite3WindowListDelete(pParse->db, $$);}
1583 windowdefn_list(A) ::= windowdefn(Z). { A = Z; }
1584 windowdefn_list(A) ::= windowdefn_list(Y) COMMA windowdefn(Z). {
1585   assert( Z!=0 );
1586   Z->pNextWin = Y;
1587   A = Z;
1588 }
1589 
1590 %type windowdefn {Window*}
1591 %destructor windowdefn {sqlite3WindowDelete(pParse->db, $$);}
1592 windowdefn(A) ::= nm(X) AS window(Y). {
1593   if( ALWAYS(Y) ){
1594     Y->zName = sqlite3DbStrNDup(pParse->db, X.z, X.n);
1595   }
1596   A = Y;
1597 }
1598 
1599 %type window {Window*}
1600 %destructor window {sqlite3WindowDelete(pParse->db, $$);}
1601 
1602 %type frame_opt {Window*}
1603 %destructor frame_opt {sqlite3WindowDelete(pParse->db, $$);}
1604 
1605 %type part_opt {ExprList*}
1606 %destructor part_opt {sqlite3ExprListDelete(pParse->db, $$);}
1607 
1608 %type filter_opt {Expr*}
1609 %destructor filter_opt {sqlite3ExprDelete(pParse->db, $$);}
1610 
1611 %type range_or_rows {int}
1612 
1613 %type frame_bound {struct FrameBound}
1614 %destructor frame_bound {sqlite3ExprDelete(pParse->db, $$.pExpr);}
1615 %type frame_bound_s {struct FrameBound}
1616 %destructor frame_bound_s {sqlite3ExprDelete(pParse->db, $$.pExpr);}
1617 %type frame_bound_e {struct FrameBound}
1618 %destructor frame_bound_e {sqlite3ExprDelete(pParse->db, $$.pExpr);}
1619 
1620 window(A) ::= LP part_opt(X) orderby_opt(Y) frame_opt(Z) RP. {
1621   A = Z;
1622   if( ALWAYS(A) ){
1623     A->pPartition = X;
1624     A->pOrderBy = Y;
1625   }
1626 }
1627 
1628 part_opt(A) ::= PARTITION BY exprlist(X). { A = X; }
1629 part_opt(A) ::= .                         { A = 0; }
1630 
1631 frame_opt(A) ::= .                             {
1632   A = sqlite3WindowAlloc(pParse, TK_RANGE, TK_UNBOUNDED, 0, TK_CURRENT, 0);
1633 }
1634 frame_opt(A) ::= range_or_rows(X) frame_bound_s(Y). {
1635   A = sqlite3WindowAlloc(pParse, X, Y.eType, Y.pExpr, TK_CURRENT, 0);
1636 }
1637 frame_opt(A) ::= range_or_rows(X) BETWEEN frame_bound_s(Y) AND frame_bound_e(Z). {
1638   A = sqlite3WindowAlloc(pParse, X, Y.eType, Y.pExpr, Z.eType, Z.pExpr);
1639 }
1640 
1641 range_or_rows(A) ::= RANGE.   { A = TK_RANGE; }
1642 range_or_rows(A) ::= ROWS.    { A = TK_ROWS;  }
1643 
1644 
1645 frame_bound_s(A) ::= frame_bound(X). { A = X; }
1646 frame_bound_s(A) ::= UNBOUNDED PRECEDING. {A.eType = TK_UNBOUNDED; A.pExpr = 0;}
1647 frame_bound_e(A) ::= frame_bound(X). { A = X; }
1648 frame_bound_e(A) ::= UNBOUNDED FOLLOWING. {A.eType = TK_UNBOUNDED; A.pExpr = 0;}
1649 
1650 frame_bound(A) ::= expr(X) PRECEDING.   { A.eType = TK_PRECEDING; A.pExpr = X; }
1651 frame_bound(A) ::= CURRENT ROW.         { A.eType = TK_CURRENT  ; A.pExpr = 0; }
1652 frame_bound(A) ::= expr(X) FOLLOWING.   { A.eType = TK_FOLLOWING; A.pExpr = X; }
1653 
1654 %type windowdefn_opt {Window*}
1655 %destructor windowdefn_opt {sqlite3WindowListDelete(pParse->db, $$);}
1656 windowdefn_opt(A) ::= . { A = 0; }
1657 windowdefn_opt(A) ::= WINDOW windowdefn_list(B). { A = B; }
1658 
1659 %type over_opt {Window*}
1660 %destructor over_opt {sqlite3WindowDelete(pParse->db, $$);}
1661 over_opt(A) ::= . { A = 0; }
1662 over_opt(A) ::= filter_opt(W) OVER window(Z). {
1663   A = Z;
1664   assert( A!=0 );
1665   A->pFilter = W;
1666 }
1667 over_opt(A) ::= filter_opt(W) OVER nm(Z). {
1668   A = (Window*)sqlite3DbMallocZero(pParse->db, sizeof(Window));
1669   if( A ){
1670     A->zName = sqlite3DbStrNDup(pParse->db, Z.z, Z.n);
1671     A->pFilter = W;
1672   }else{
1673     sqlite3ExprDelete(pParse->db, W);
1674   }
1675 }
1676 
1677 filter_opt(A) ::= .                            { A = 0; }
1678 filter_opt(A) ::= FILTER LP WHERE expr(X) RP.  { A = X; }
1679 %endif /* SQLITE_OMIT_WINDOWFUNC */
1680