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