xref: /sqlite-3.40.0/src/parse.y (revision 8c53b4e7)
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 
535 oneselect(A) ::= SELECT distinct(D) selcollist(W) from(X) where_opt(Y)
536                  groupby_opt(P) having_opt(Q)
537                  orderby_opt(Z) limit_opt(L). {
538   A = sqlite3SelectNew(pParse,W,X,Y,P,Q,Z,D,L);
539 }
540 %ifndef SQLITE_OMIT_WINDOWFUNC
541 oneselect(A) ::= SELECT distinct(D) selcollist(W) from(X) where_opt(Y)
542                  groupby_opt(P) having_opt(Q) window_clause(R)
543                  orderby_opt(Z) limit_opt(L). {
544   A = sqlite3SelectNew(pParse,W,X,Y,P,Q,Z,D,L);
545   if( A ){
546     A->pWinDefn = R;
547   }else{
548     sqlite3WindowListDelete(pParse->db, R);
549   }
550 }
551 %endif
552 
553 
554 oneselect(A) ::= values(A).
555 
556 %type values {Select*}
557 %destructor values {sqlite3SelectDelete(pParse->db, $$);}
558 values(A) ::= VALUES LP nexprlist(X) RP. {
559   A = sqlite3SelectNew(pParse,X,0,0,0,0,0,SF_Values,0);
560 }
561 values(A) ::= values(A) COMMA LP nexprlist(Y) RP. {
562   Select *pRight, *pLeft = A;
563   pRight = sqlite3SelectNew(pParse,Y,0,0,0,0,0,SF_Values|SF_MultiValue,0);
564   if( ALWAYS(pLeft) ) pLeft->selFlags &= ~SF_MultiValue;
565   if( pRight ){
566     pRight->op = TK_ALL;
567     pRight->pPrior = pLeft;
568     A = pRight;
569   }else{
570     A = pLeft;
571   }
572 }
573 
574 // The "distinct" nonterminal is true (1) if the DISTINCT keyword is
575 // present and false (0) if it is not.
576 //
577 %type distinct {int}
578 distinct(A) ::= DISTINCT.   {A = SF_Distinct;}
579 distinct(A) ::= ALL.        {A = SF_All;}
580 distinct(A) ::= .           {A = 0;}
581 
582 // selcollist is a list of expressions that are to become the return
583 // values of the SELECT statement.  The "*" in statements like
584 // "SELECT * FROM ..." is encoded as a special expression with an
585 // opcode of TK_ASTERISK.
586 //
587 %type selcollist {ExprList*}
588 %destructor selcollist {sqlite3ExprListDelete(pParse->db, $$);}
589 %type sclp {ExprList*}
590 %destructor sclp {sqlite3ExprListDelete(pParse->db, $$);}
591 sclp(A) ::= selcollist(A) COMMA.
592 sclp(A) ::= .                                {A = 0;}
593 selcollist(A) ::= sclp(A) scanpt(B) expr(X) scanpt(Z) as(Y).     {
594    A = sqlite3ExprListAppend(pParse, A, X);
595    if( Y.n>0 ) sqlite3ExprListSetName(pParse, A, &Y, 1);
596    sqlite3ExprListSetSpan(pParse,A,B,Z);
597 }
598 selcollist(A) ::= sclp(A) scanpt STAR. {
599   Expr *p = sqlite3Expr(pParse->db, TK_ASTERISK, 0);
600   A = sqlite3ExprListAppend(pParse, A, p);
601 }
602 selcollist(A) ::= sclp(A) scanpt nm(X) DOT STAR. {
603   Expr *pRight = sqlite3PExpr(pParse, TK_ASTERISK, 0, 0);
604   Expr *pLeft = sqlite3ExprAlloc(pParse->db, TK_ID, &X, 1);
605   Expr *pDot = sqlite3PExpr(pParse, TK_DOT, pLeft, pRight);
606   A = sqlite3ExprListAppend(pParse,A, pDot);
607 }
608 
609 // An option "AS <id>" phrase that can follow one of the expressions that
610 // define the result set, or one of the tables in the FROM clause.
611 //
612 %type as {Token}
613 as(X) ::= AS nm(Y).    {X = Y;}
614 as(X) ::= ids(X).
615 as(X) ::= .            {X.n = 0; X.z = 0;}
616 
617 
618 %type seltablist {SrcList*}
619 %destructor seltablist {sqlite3SrcListDelete(pParse->db, $$);}
620 %type stl_prefix {SrcList*}
621 %destructor stl_prefix {sqlite3SrcListDelete(pParse->db, $$);}
622 %type from {SrcList*}
623 %destructor from {sqlite3SrcListDelete(pParse->db, $$);}
624 
625 // A complete FROM clause.
626 //
627 from(A) ::= .                {A = sqlite3DbMallocZero(pParse->db, sizeof(*A));}
628 from(A) ::= FROM seltablist(X). {
629   A = X;
630   sqlite3SrcListShiftJoinType(A);
631 }
632 
633 // "seltablist" is a "Select Table List" - the content of the FROM clause
634 // in a SELECT statement.  "stl_prefix" is a prefix of this list.
635 //
636 stl_prefix(A) ::= seltablist(A) joinop(Y).    {
637    if( ALWAYS(A && A->nSrc>0) ) A->a[A->nSrc-1].fg.jointype = (u8)Y;
638 }
639 stl_prefix(A) ::= .                           {A = 0;}
640 seltablist(A) ::= stl_prefix(A) nm(Y) dbnm(D) as(Z) indexed_opt(I)
641                   on_opt(N) using_opt(U). {
642   A = sqlite3SrcListAppendFromTerm(pParse,A,&Y,&D,&Z,0,N,U);
643   sqlite3SrcListIndexedBy(pParse, A, &I);
644 }
645 seltablist(A) ::= stl_prefix(A) nm(Y) dbnm(D) LP exprlist(E) RP as(Z)
646                   on_opt(N) using_opt(U). {
647   A = sqlite3SrcListAppendFromTerm(pParse,A,&Y,&D,&Z,0,N,U);
648   sqlite3SrcListFuncArgs(pParse, A, E);
649 }
650 %ifndef SQLITE_OMIT_SUBQUERY
651   seltablist(A) ::= stl_prefix(A) LP select(S) RP
652                     as(Z) on_opt(N) using_opt(U). {
653     A = sqlite3SrcListAppendFromTerm(pParse,A,0,0,&Z,S,N,U);
654   }
655   seltablist(A) ::= stl_prefix(A) LP seltablist(F) RP
656                     as(Z) on_opt(N) using_opt(U). {
657     if( A==0 && Z.n==0 && N==0 && U==0 ){
658       A = F;
659     }else if( F->nSrc==1 ){
660       A = sqlite3SrcListAppendFromTerm(pParse,A,0,0,&Z,0,N,U);
661       if( A ){
662         struct SrcList_item *pNew = &A->a[A->nSrc-1];
663         struct SrcList_item *pOld = F->a;
664         pNew->zName = pOld->zName;
665         pNew->zDatabase = pOld->zDatabase;
666         pNew->pSelect = pOld->pSelect;
667         if( pOld->fg.isTabFunc ){
668           pNew->u1.pFuncArg = pOld->u1.pFuncArg;
669           pOld->u1.pFuncArg = 0;
670           pOld->fg.isTabFunc = 0;
671           pNew->fg.isTabFunc = 1;
672         }
673         pOld->zName = pOld->zDatabase = 0;
674         pOld->pSelect = 0;
675       }
676       sqlite3SrcListDelete(pParse->db, F);
677     }else{
678       Select *pSubquery;
679       sqlite3SrcListShiftJoinType(F);
680       pSubquery = sqlite3SelectNew(pParse,0,F,0,0,0,0,SF_NestedFrom,0);
681       A = sqlite3SrcListAppendFromTerm(pParse,A,0,0,&Z,pSubquery,N,U);
682     }
683   }
684 %endif  SQLITE_OMIT_SUBQUERY
685 
686 %type dbnm {Token}
687 dbnm(A) ::= .          {A.z=0; A.n=0;}
688 dbnm(A) ::= DOT nm(X). {A = X;}
689 
690 %type fullname {SrcList*}
691 %destructor fullname {sqlite3SrcListDelete(pParse->db, $$);}
692 fullname(A) ::= nm(X).  {
693   A = sqlite3SrcListAppend(pParse->db,0,&X,0);
694   if( IN_RENAME_OBJECT && A ) sqlite3RenameTokenMap(pParse, A->a[0].zName, &X);
695 }
696 fullname(A) ::= nm(X) DOT nm(Y). {
697   A = sqlite3SrcListAppend(pParse->db,0,&X,&Y);
698   if( IN_RENAME_OBJECT && A ) sqlite3RenameTokenMap(pParse, A->a[0].zName, &Y);
699 }
700 
701 %type xfullname {SrcList*}
702 %destructor xfullname {sqlite3SrcListDelete(pParse->db, $$);}
703 xfullname(A) ::= nm(X).
704    {A = sqlite3SrcListAppend(pParse->db,0,&X,0); /*A-overwrites-X*/}
705 xfullname(A) ::= nm(X) DOT nm(Y).
706    {A = sqlite3SrcListAppend(pParse->db,0,&X,&Y); /*A-overwrites-X*/}
707 xfullname(A) ::= nm(X) DOT nm(Y) AS nm(Z).  {
708    A = sqlite3SrcListAppend(pParse->db,0,&X,&Y); /*A-overwrites-X*/
709    if( A ) A->a[0].zAlias = sqlite3NameFromToken(pParse->db, &Z);
710 }
711 xfullname(A) ::= nm(X) AS nm(Z). {
712    A = sqlite3SrcListAppend(pParse->db,0,&X,0); /*A-overwrites-X*/
713    if( A ) A->a[0].zAlias = sqlite3NameFromToken(pParse->db, &Z);
714 }
715 
716 %type joinop {int}
717 joinop(X) ::= COMMA|JOIN.              { X = JT_INNER; }
718 joinop(X) ::= JOIN_KW(A) JOIN.
719                   {X = sqlite3JoinType(pParse,&A,0,0);  /*X-overwrites-A*/}
720 joinop(X) ::= JOIN_KW(A) nm(B) JOIN.
721                   {X = sqlite3JoinType(pParse,&A,&B,0); /*X-overwrites-A*/}
722 joinop(X) ::= JOIN_KW(A) nm(B) nm(C) JOIN.
723                   {X = sqlite3JoinType(pParse,&A,&B,&C);/*X-overwrites-A*/}
724 
725 // There is a parsing abiguity in an upsert statement that uses a
726 // SELECT on the RHS of a the INSERT:
727 //
728 //      INSERT INTO tab SELECT * FROM aaa JOIN bbb ON CONFLICT ...
729 //                                        here ----^^
730 //
731 // When the ON token is encountered, the parser does not know if it is
732 // the beginning of an ON CONFLICT clause, or the beginning of an ON
733 // clause associated with the JOIN.  The conflict is resolved in favor
734 // of the JOIN.  If an ON CONFLICT clause is intended, insert a dummy
735 // WHERE clause in between, like this:
736 //
737 //      INSERT INTO tab SELECT * FROM aaa JOIN bbb WHERE true ON CONFLICT ...
738 //
739 // The [AND] and [OR] precedence marks in the rules for on_opt cause the
740 // ON in this context to always be interpreted as belonging to the JOIN.
741 //
742 %type on_opt {Expr*}
743 %destructor on_opt {sqlite3ExprDelete(pParse->db, $$);}
744 on_opt(N) ::= ON expr(E).  {N = E;}
745 on_opt(N) ::= .     [OR]   {N = 0;}
746 
747 // Note that this block abuses the Token type just a little. If there is
748 // no "INDEXED BY" clause, the returned token is empty (z==0 && n==0). If
749 // there is an INDEXED BY clause, then the token is populated as per normal,
750 // with z pointing to the token data and n containing the number of bytes
751 // in the token.
752 //
753 // If there is a "NOT INDEXED" clause, then (z==0 && n==1), which is
754 // normally illegal. The sqlite3SrcListIndexedBy() function
755 // recognizes and interprets this as a special case.
756 //
757 %type indexed_opt {Token}
758 indexed_opt(A) ::= .                 {A.z=0; A.n=0;}
759 indexed_opt(A) ::= INDEXED BY nm(X). {A = X;}
760 indexed_opt(A) ::= NOT INDEXED.      {A.z=0; A.n=1;}
761 
762 %type using_opt {IdList*}
763 %destructor using_opt {sqlite3IdListDelete(pParse->db, $$);}
764 using_opt(U) ::= USING LP idlist(L) RP.  {U = L;}
765 using_opt(U) ::= .                        {U = 0;}
766 
767 
768 %type orderby_opt {ExprList*}
769 %destructor orderby_opt {sqlite3ExprListDelete(pParse->db, $$);}
770 
771 // the sortlist non-terminal stores a list of expression where each
772 // expression is optionally followed by ASC or DESC to indicate the
773 // sort order.
774 //
775 %type sortlist {ExprList*}
776 %destructor sortlist {sqlite3ExprListDelete(pParse->db, $$);}
777 
778 orderby_opt(A) ::= .                          {A = 0;}
779 orderby_opt(A) ::= ORDER BY sortlist(X).      {A = X;}
780 sortlist(A) ::= sortlist(A) COMMA expr(Y) sortorder(Z). {
781   A = sqlite3ExprListAppend(pParse,A,Y);
782   sqlite3ExprListSetSortOrder(A,Z);
783 }
784 sortlist(A) ::= expr(Y) sortorder(Z). {
785   A = sqlite3ExprListAppend(pParse,0,Y); /*A-overwrites-Y*/
786   sqlite3ExprListSetSortOrder(A,Z);
787 }
788 
789 %type sortorder {int}
790 
791 sortorder(A) ::= ASC.           {A = SQLITE_SO_ASC;}
792 sortorder(A) ::= DESC.          {A = SQLITE_SO_DESC;}
793 sortorder(A) ::= .              {A = SQLITE_SO_UNDEFINED;}
794 
795 %type groupby_opt {ExprList*}
796 %destructor groupby_opt {sqlite3ExprListDelete(pParse->db, $$);}
797 groupby_opt(A) ::= .                      {A = 0;}
798 groupby_opt(A) ::= GROUP BY nexprlist(X). {A = X;}
799 
800 %type having_opt {Expr*}
801 %destructor having_opt {sqlite3ExprDelete(pParse->db, $$);}
802 having_opt(A) ::= .                {A = 0;}
803 having_opt(A) ::= HAVING expr(X).  {A = X;}
804 
805 %type limit_opt {Expr*}
806 
807 // The destructor for limit_opt will never fire in the current grammar.
808 // The limit_opt non-terminal only occurs at the end of a single production
809 // rule for SELECT statements.  As soon as the rule that create the
810 // limit_opt non-terminal reduces, the SELECT statement rule will also
811 // reduce.  So there is never a limit_opt non-terminal on the stack
812 // except as a transient.  So there is never anything to destroy.
813 //
814 //%destructor limit_opt {sqlite3ExprDelete(pParse->db, $$);}
815 limit_opt(A) ::= .       {A = 0;}
816 limit_opt(A) ::= LIMIT expr(X).
817                          {A = sqlite3PExpr(pParse,TK_LIMIT,X,0);}
818 limit_opt(A) ::= LIMIT expr(X) OFFSET expr(Y).
819                          {A = sqlite3PExpr(pParse,TK_LIMIT,X,Y);}
820 limit_opt(A) ::= LIMIT expr(X) COMMA expr(Y).
821                          {A = sqlite3PExpr(pParse,TK_LIMIT,Y,X);}
822 
823 /////////////////////////// The DELETE statement /////////////////////////////
824 //
825 %ifdef SQLITE_ENABLE_UPDATE_DELETE_LIMIT
826 cmd ::= with DELETE FROM xfullname(X) indexed_opt(I) where_opt(W)
827         orderby_opt(O) limit_opt(L). {
828   sqlite3SrcListIndexedBy(pParse, X, &I);
829   sqlite3DeleteFrom(pParse,X,W,O,L);
830 }
831 %endif
832 %ifndef SQLITE_ENABLE_UPDATE_DELETE_LIMIT
833 cmd ::= with DELETE FROM xfullname(X) indexed_opt(I) where_opt(W). {
834   sqlite3SrcListIndexedBy(pParse, X, &I);
835   sqlite3DeleteFrom(pParse,X,W,0,0);
836 }
837 %endif
838 
839 %type where_opt {Expr*}
840 %destructor where_opt {sqlite3ExprDelete(pParse->db, $$);}
841 
842 where_opt(A) ::= .                    {A = 0;}
843 where_opt(A) ::= WHERE expr(X).       {A = X;}
844 
845 ////////////////////////// The UPDATE command ////////////////////////////////
846 //
847 %ifdef SQLITE_ENABLE_UPDATE_DELETE_LIMIT
848 cmd ::= with UPDATE orconf(R) xfullname(X) indexed_opt(I) SET setlist(Y)
849         where_opt(W) orderby_opt(O) limit_opt(L).  {
850   sqlite3SrcListIndexedBy(pParse, X, &I);
851   sqlite3ExprListCheckLength(pParse,Y,"set list");
852   sqlite3Update(pParse,X,Y,W,R,O,L,0);
853 }
854 %endif
855 %ifndef SQLITE_ENABLE_UPDATE_DELETE_LIMIT
856 cmd ::= with UPDATE orconf(R) xfullname(X) indexed_opt(I) SET setlist(Y)
857         where_opt(W).  {
858   sqlite3SrcListIndexedBy(pParse, X, &I);
859   sqlite3ExprListCheckLength(pParse,Y,"set list");
860   sqlite3Update(pParse,X,Y,W,R,0,0,0);
861 }
862 %endif
863 
864 %type setlist {ExprList*}
865 %destructor setlist {sqlite3ExprListDelete(pParse->db, $$);}
866 
867 setlist(A) ::= setlist(A) COMMA nm(X) EQ expr(Y). {
868   A = sqlite3ExprListAppend(pParse, A, Y);
869   sqlite3ExprListSetName(pParse, A, &X, 1);
870 }
871 setlist(A) ::= setlist(A) COMMA LP idlist(X) RP EQ expr(Y). {
872   A = sqlite3ExprListAppendVector(pParse, A, X, Y);
873 }
874 setlist(A) ::= nm(X) EQ expr(Y). {
875   A = sqlite3ExprListAppend(pParse, 0, Y);
876   sqlite3ExprListSetName(pParse, A, &X, 1);
877 }
878 setlist(A) ::= LP idlist(X) RP EQ expr(Y). {
879   A = sqlite3ExprListAppendVector(pParse, 0, X, Y);
880 }
881 
882 ////////////////////////// The INSERT command /////////////////////////////////
883 //
884 cmd ::= with insert_cmd(R) INTO xfullname(X) idlist_opt(F) select(S)
885         upsert(U). {
886   sqlite3Insert(pParse, X, S, F, R, U);
887 }
888 cmd ::= with insert_cmd(R) INTO xfullname(X) idlist_opt(F) DEFAULT VALUES.
889 {
890   sqlite3Insert(pParse, X, 0, F, R, 0);
891 }
892 
893 %type upsert {Upsert*}
894 
895 // Because upsert only occurs at the tip end of the INSERT rule for cmd,
896 // there is never a case where the value of the upsert pointer will not
897 // be destroyed by the cmd action.  So comment-out the destructor to
898 // avoid unreachable code.
899 //%destructor upsert {sqlite3UpsertDelete(pParse->db,$$);}
900 upsert(A) ::= . { A = 0; }
901 upsert(A) ::= ON CONFLICT LP sortlist(T) RP where_opt(TW)
902               DO UPDATE SET setlist(Z) where_opt(W).
903               { A = sqlite3UpsertNew(pParse->db,T,TW,Z,W);}
904 upsert(A) ::= ON CONFLICT LP sortlist(T) RP where_opt(TW) DO NOTHING.
905               { A = sqlite3UpsertNew(pParse->db,T,TW,0,0); }
906 upsert(A) ::= ON CONFLICT DO NOTHING.
907               { A = sqlite3UpsertNew(pParse->db,0,0,0,0); }
908 
909 %type insert_cmd {int}
910 insert_cmd(A) ::= INSERT orconf(R).   {A = R;}
911 insert_cmd(A) ::= REPLACE.            {A = OE_Replace;}
912 
913 %type idlist_opt {IdList*}
914 %destructor idlist_opt {sqlite3IdListDelete(pParse->db, $$);}
915 %type idlist {IdList*}
916 %destructor idlist {sqlite3IdListDelete(pParse->db, $$);}
917 
918 idlist_opt(A) ::= .                       {A = 0;}
919 idlist_opt(A) ::= LP idlist(X) RP.    {A = X;}
920 idlist(A) ::= idlist(A) COMMA nm(Y).
921     {A = sqlite3IdListAppend(pParse,A,&Y);}
922 idlist(A) ::= nm(Y).
923     {A = sqlite3IdListAppend(pParse,0,&Y); /*A-overwrites-Y*/}
924 
925 /////////////////////////// Expression Processing /////////////////////////////
926 //
927 
928 %type expr {Expr*}
929 %destructor expr {sqlite3ExprDelete(pParse->db, $$);}
930 %type term {Expr*}
931 %destructor term {sqlite3ExprDelete(pParse->db, $$);}
932 
933 %include {
934 
935   /* Construct a new Expr object from a single identifier.  Use the
936   ** new Expr to populate pOut.  Set the span of pOut to be the identifier
937   ** that created the expression.
938   */
939   static Expr *tokenExpr(Parse *pParse, int op, Token t){
940     Expr *p = sqlite3DbMallocRawNN(pParse->db, sizeof(Expr)+t.n+1);
941     if( p ){
942       /* memset(p, 0, sizeof(Expr)); */
943       p->op = (u8)op;
944       p->affinity = 0;
945       p->flags = EP_Leaf;
946       p->iAgg = -1;
947       p->pLeft = p->pRight = 0;
948       p->x.pList = 0;
949       p->pAggInfo = 0;
950       p->y.pTab = 0;
951       p->op2 = 0;
952       p->iTable = 0;
953       p->iColumn = 0;
954       p->u.zToken = (char*)&p[1];
955       memcpy(p->u.zToken, t.z, t.n);
956       p->u.zToken[t.n] = 0;
957       if( sqlite3Isquote(p->u.zToken[0]) ){
958         if( p->u.zToken[0]=='"' ) p->flags |= EP_DblQuoted;
959         sqlite3Dequote(p->u.zToken);
960       }
961 #if SQLITE_MAX_EXPR_DEPTH>0
962       p->nHeight = 1;
963 #endif
964       if( IN_RENAME_OBJECT ){
965         return (Expr*)sqlite3RenameTokenMap(pParse, (void*)p, &t);
966       }
967     }
968     return p;
969   }
970 
971 }
972 
973 expr(A) ::= term(A).
974 expr(A) ::= LP expr(X) RP. {A = X;}
975 expr(A) ::= id(X).          {A=tokenExpr(pParse,TK_ID,X); /*A-overwrites-X*/}
976 expr(A) ::= JOIN_KW(X).     {A=tokenExpr(pParse,TK_ID,X); /*A-overwrites-X*/}
977 expr(A) ::= nm(X) DOT nm(Y). {
978   Expr *temp1 = sqlite3ExprAlloc(pParse->db, TK_ID, &X, 1);
979   Expr *temp2 = sqlite3ExprAlloc(pParse->db, TK_ID, &Y, 1);
980   if( IN_RENAME_OBJECT ){
981     sqlite3RenameTokenMap(pParse, (void*)temp2, &Y);
982     sqlite3RenameTokenMap(pParse, (void*)temp1, &X);
983   }
984   A = sqlite3PExpr(pParse, TK_DOT, temp1, temp2);
985 }
986 expr(A) ::= nm(X) DOT nm(Y) DOT nm(Z). {
987   Expr *temp1 = sqlite3ExprAlloc(pParse->db, TK_ID, &X, 1);
988   Expr *temp2 = sqlite3ExprAlloc(pParse->db, TK_ID, &Y, 1);
989   Expr *temp3 = sqlite3ExprAlloc(pParse->db, TK_ID, &Z, 1);
990   Expr *temp4 = sqlite3PExpr(pParse, TK_DOT, temp2, temp3);
991   if( IN_RENAME_OBJECT ){
992     sqlite3RenameTokenMap(pParse, (void*)temp3, &Z);
993     sqlite3RenameTokenMap(pParse, (void*)temp2, &Y);
994   }
995   A = sqlite3PExpr(pParse, TK_DOT, temp1, temp4);
996 }
997 term(A) ::= NULL|FLOAT|BLOB(X). {A=tokenExpr(pParse,@X,X); /*A-overwrites-X*/}
998 term(A) ::= STRING(X).          {A=tokenExpr(pParse,@X,X); /*A-overwrites-X*/}
999 term(A) ::= INTEGER(X). {
1000   A = sqlite3ExprAlloc(pParse->db, TK_INTEGER, &X, 1);
1001 }
1002 expr(A) ::= VARIABLE(X).     {
1003   if( !(X.z[0]=='#' && sqlite3Isdigit(X.z[1])) ){
1004     u32 n = X.n;
1005     A = tokenExpr(pParse, TK_VARIABLE, X);
1006     sqlite3ExprAssignVarNumber(pParse, A, n);
1007   }else{
1008     /* When doing a nested parse, one can include terms in an expression
1009     ** that look like this:   #1 #2 ...  These terms refer to registers
1010     ** in the virtual machine.  #N is the N-th register. */
1011     Token t = X; /*A-overwrites-X*/
1012     assert( t.n>=2 );
1013     if( pParse->nested==0 ){
1014       sqlite3ErrorMsg(pParse, "near \"%T\": syntax error", &t);
1015       A = 0;
1016     }else{
1017       A = sqlite3PExpr(pParse, TK_REGISTER, 0, 0);
1018       if( A ) sqlite3GetInt32(&t.z[1], &A->iTable);
1019     }
1020   }
1021 }
1022 expr(A) ::= expr(A) COLLATE ids(C). {
1023   A = sqlite3ExprAddCollateToken(pParse, A, &C, 1);
1024 }
1025 %ifndef SQLITE_OMIT_CAST
1026 expr(A) ::= CAST LP expr(E) AS typetoken(T) RP. {
1027   A = sqlite3ExprAlloc(pParse->db, TK_CAST, &T, 1);
1028   sqlite3ExprAttachSubtrees(pParse->db, A, E, 0);
1029 }
1030 %endif  SQLITE_OMIT_CAST
1031 
1032 
1033 expr(A) ::= id(X) LP distinct(D) exprlist(Y) RP. {
1034   A = sqlite3ExprFunction(pParse, Y, &X, D);
1035 }
1036 expr(A) ::= id(X) LP STAR RP. {
1037   A = sqlite3ExprFunction(pParse, 0, &X, 0);
1038 }
1039 
1040 %ifndef SQLITE_OMIT_WINDOWFUNC
1041 expr(A) ::= id(X) LP distinct(D) exprlist(Y) RP over_clause(Z). {
1042   A = sqlite3ExprFunction(pParse, Y, &X, D);
1043   sqlite3WindowAttach(pParse, A, Z);
1044 }
1045 expr(A) ::= id(X) LP STAR RP over_clause(Z). {
1046   A = sqlite3ExprFunction(pParse, 0, &X, 0);
1047   sqlite3WindowAttach(pParse, A, Z);
1048 }
1049 %endif
1050 
1051 term(A) ::= CTIME_KW(OP). {
1052   A = sqlite3ExprFunction(pParse, 0, &OP, 0);
1053 }
1054 
1055 expr(A) ::= LP nexprlist(X) COMMA expr(Y) RP. {
1056   ExprList *pList = sqlite3ExprListAppend(pParse, X, Y);
1057   A = sqlite3PExpr(pParse, TK_VECTOR, 0, 0);
1058   if( A ){
1059     A->x.pList = pList;
1060   }else{
1061     sqlite3ExprListDelete(pParse->db, pList);
1062   }
1063 }
1064 
1065 expr(A) ::= expr(A) AND(OP) expr(Y).    {A=sqlite3PExpr(pParse,@OP,A,Y);}
1066 expr(A) ::= expr(A) OR(OP) expr(Y).     {A=sqlite3PExpr(pParse,@OP,A,Y);}
1067 expr(A) ::= expr(A) LT|GT|GE|LE(OP) expr(Y).
1068                                         {A=sqlite3PExpr(pParse,@OP,A,Y);}
1069 expr(A) ::= expr(A) EQ|NE(OP) expr(Y).  {A=sqlite3PExpr(pParse,@OP,A,Y);}
1070 expr(A) ::= expr(A) BITAND|BITOR|LSHIFT|RSHIFT(OP) expr(Y).
1071                                         {A=sqlite3PExpr(pParse,@OP,A,Y);}
1072 expr(A) ::= expr(A) PLUS|MINUS(OP) expr(Y).
1073                                         {A=sqlite3PExpr(pParse,@OP,A,Y);}
1074 expr(A) ::= expr(A) STAR|SLASH|REM(OP) expr(Y).
1075                                         {A=sqlite3PExpr(pParse,@OP,A,Y);}
1076 expr(A) ::= expr(A) CONCAT(OP) expr(Y). {A=sqlite3PExpr(pParse,@OP,A,Y);}
1077 %type likeop {Token}
1078 likeop(A) ::= LIKE_KW|MATCH(A).
1079 likeop(A) ::= NOT LIKE_KW|MATCH(X). {A=X; A.n|=0x80000000; /*A-overwrite-X*/}
1080 expr(A) ::= expr(A) likeop(OP) expr(Y).  [LIKE_KW]  {
1081   ExprList *pList;
1082   int bNot = OP.n & 0x80000000;
1083   OP.n &= 0x7fffffff;
1084   pList = sqlite3ExprListAppend(pParse,0, Y);
1085   pList = sqlite3ExprListAppend(pParse,pList, A);
1086   A = sqlite3ExprFunction(pParse, pList, &OP, 0);
1087   if( bNot ) A = sqlite3PExpr(pParse, TK_NOT, A, 0);
1088   if( A ) A->flags |= EP_InfixFunc;
1089 }
1090 expr(A) ::= expr(A) likeop(OP) expr(Y) ESCAPE expr(E).  [LIKE_KW]  {
1091   ExprList *pList;
1092   int bNot = OP.n & 0x80000000;
1093   OP.n &= 0x7fffffff;
1094   pList = sqlite3ExprListAppend(pParse,0, Y);
1095   pList = sqlite3ExprListAppend(pParse,pList, A);
1096   pList = sqlite3ExprListAppend(pParse,pList, E);
1097   A = sqlite3ExprFunction(pParse, pList, &OP, 0);
1098   if( bNot ) A = sqlite3PExpr(pParse, TK_NOT, A, 0);
1099   if( A ) A->flags |= EP_InfixFunc;
1100 }
1101 
1102 expr(A) ::= expr(A) ISNULL|NOTNULL(E).   {A = sqlite3PExpr(pParse,@E,A,0);}
1103 expr(A) ::= expr(A) NOT NULL.    {A = sqlite3PExpr(pParse,TK_NOTNULL,A,0);}
1104 
1105 %include {
1106   /* A routine to convert a binary TK_IS or TK_ISNOT expression into a
1107   ** unary TK_ISNULL or TK_NOTNULL expression. */
1108   static void binaryToUnaryIfNull(Parse *pParse, Expr *pY, Expr *pA, int op){
1109     sqlite3 *db = pParse->db;
1110     if( pA && pY && pY->op==TK_NULL && !IN_RENAME_OBJECT ){
1111       pA->op = (u8)op;
1112       sqlite3ExprDelete(db, pA->pRight);
1113       pA->pRight = 0;
1114     }
1115   }
1116 }
1117 
1118 //    expr1 IS expr2
1119 //    expr1 IS NOT expr2
1120 //
1121 // If expr2 is NULL then code as TK_ISNULL or TK_NOTNULL.  If expr2
1122 // is any other expression, code as TK_IS or TK_ISNOT.
1123 //
1124 expr(A) ::= expr(A) IS expr(Y).     {
1125   A = sqlite3PExpr(pParse,TK_IS,A,Y);
1126   binaryToUnaryIfNull(pParse, Y, A, TK_ISNULL);
1127 }
1128 expr(A) ::= expr(A) IS NOT expr(Y). {
1129   A = sqlite3PExpr(pParse,TK_ISNOT,A,Y);
1130   binaryToUnaryIfNull(pParse, Y, A, TK_NOTNULL);
1131 }
1132 
1133 expr(A) ::= NOT(B) expr(X).
1134               {A = sqlite3PExpr(pParse, @B, X, 0);/*A-overwrites-B*/}
1135 expr(A) ::= BITNOT(B) expr(X).
1136               {A = sqlite3PExpr(pParse, @B, X, 0);/*A-overwrites-B*/}
1137 expr(A) ::= PLUS|MINUS(B) expr(X). [BITNOT] {
1138   A = sqlite3PExpr(pParse, @B==TK_PLUS ? TK_UPLUS : TK_UMINUS, X, 0);
1139   /*A-overwrites-B*/
1140 }
1141 
1142 %type between_op {int}
1143 between_op(A) ::= BETWEEN.     {A = 0;}
1144 between_op(A) ::= NOT BETWEEN. {A = 1;}
1145 expr(A) ::= expr(A) between_op(N) expr(X) AND expr(Y). [BETWEEN] {
1146   ExprList *pList = sqlite3ExprListAppend(pParse,0, X);
1147   pList = sqlite3ExprListAppend(pParse,pList, Y);
1148   A = sqlite3PExpr(pParse, TK_BETWEEN, A, 0);
1149   if( A ){
1150     A->x.pList = pList;
1151   }else{
1152     sqlite3ExprListDelete(pParse->db, pList);
1153   }
1154   if( N ) A = sqlite3PExpr(pParse, TK_NOT, A, 0);
1155 }
1156 %ifndef SQLITE_OMIT_SUBQUERY
1157   %type in_op {int}
1158   in_op(A) ::= IN.      {A = 0;}
1159   in_op(A) ::= NOT IN.  {A = 1;}
1160   expr(A) ::= expr(A) in_op(N) LP exprlist(Y) RP. [IN] {
1161     if( Y==0 ){
1162       /* Expressions of the form
1163       **
1164       **      expr1 IN ()
1165       **      expr1 NOT IN ()
1166       **
1167       ** simplify to constants 0 (false) and 1 (true), respectively,
1168       ** regardless of the value of expr1.
1169       */
1170       sqlite3ExprDelete(pParse->db, A);
1171       A = sqlite3ExprAlloc(pParse->db, TK_INTEGER,&sqlite3IntTokens[N],1);
1172     }else if( Y->nExpr==1 ){
1173       /* Expressions of the form:
1174       **
1175       **      expr1 IN (?1)
1176       **      expr1 NOT IN (?2)
1177       **
1178       ** with exactly one value on the RHS can be simplified to something
1179       ** like this:
1180       **
1181       **      expr1 == ?1
1182       **      expr1 <> ?2
1183       **
1184       ** But, the RHS of the == or <> is marked with the EP_Generic flag
1185       ** so that it may not contribute to the computation of comparison
1186       ** affinity or the collating sequence to use for comparison.  Otherwise,
1187       ** the semantics would be subtly different from IN or NOT IN.
1188       */
1189       Expr *pRHS = Y->a[0].pExpr;
1190       Y->a[0].pExpr = 0;
1191       sqlite3ExprListDelete(pParse->db, Y);
1192       /* pRHS cannot be NULL because a malloc error would have been detected
1193       ** before now and control would have never reached this point */
1194       if( ALWAYS(pRHS) ){
1195         pRHS->flags &= ~EP_Collate;
1196         pRHS->flags |= EP_Generic;
1197       }
1198       A = sqlite3PExpr(pParse, N ? TK_NE : TK_EQ, A, pRHS);
1199     }else{
1200       A = sqlite3PExpr(pParse, TK_IN, A, 0);
1201       if( A ){
1202         A->x.pList = Y;
1203         sqlite3ExprSetHeightAndFlags(pParse, A);
1204       }else{
1205         sqlite3ExprListDelete(pParse->db, Y);
1206       }
1207       if( N ) A = sqlite3PExpr(pParse, TK_NOT, A, 0);
1208     }
1209   }
1210   expr(A) ::= LP select(X) RP. {
1211     A = sqlite3PExpr(pParse, TK_SELECT, 0, 0);
1212     sqlite3PExprAddSelect(pParse, A, X);
1213   }
1214   expr(A) ::= expr(A) in_op(N) LP select(Y) RP.  [IN] {
1215     A = sqlite3PExpr(pParse, TK_IN, A, 0);
1216     sqlite3PExprAddSelect(pParse, A, Y);
1217     if( N ) A = sqlite3PExpr(pParse, TK_NOT, A, 0);
1218   }
1219   expr(A) ::= expr(A) in_op(N) nm(Y) dbnm(Z) paren_exprlist(E). [IN] {
1220     SrcList *pSrc = sqlite3SrcListAppend(pParse->db, 0,&Y,&Z);
1221     Select *pSelect = sqlite3SelectNew(pParse, 0,pSrc,0,0,0,0,0,0);
1222     if( E )  sqlite3SrcListFuncArgs(pParse, pSelect ? pSrc : 0, E);
1223     A = sqlite3PExpr(pParse, TK_IN, A, 0);
1224     sqlite3PExprAddSelect(pParse, A, pSelect);
1225     if( N ) A = sqlite3PExpr(pParse, TK_NOT, A, 0);
1226   }
1227   expr(A) ::= EXISTS LP select(Y) RP. {
1228     Expr *p;
1229     p = A = sqlite3PExpr(pParse, TK_EXISTS, 0, 0);
1230     sqlite3PExprAddSelect(pParse, p, Y);
1231   }
1232 %endif SQLITE_OMIT_SUBQUERY
1233 
1234 /* CASE expressions */
1235 expr(A) ::= CASE case_operand(X) case_exprlist(Y) case_else(Z) END. {
1236   A = sqlite3PExpr(pParse, TK_CASE, X, 0);
1237   if( A ){
1238     A->x.pList = Z ? sqlite3ExprListAppend(pParse,Y,Z) : Y;
1239     sqlite3ExprSetHeightAndFlags(pParse, A);
1240   }else{
1241     sqlite3ExprListDelete(pParse->db, Y);
1242     sqlite3ExprDelete(pParse->db, Z);
1243   }
1244 }
1245 %type case_exprlist {ExprList*}
1246 %destructor case_exprlist {sqlite3ExprListDelete(pParse->db, $$);}
1247 case_exprlist(A) ::= case_exprlist(A) WHEN expr(Y) THEN expr(Z). {
1248   A = sqlite3ExprListAppend(pParse,A, Y);
1249   A = sqlite3ExprListAppend(pParse,A, Z);
1250 }
1251 case_exprlist(A) ::= WHEN expr(Y) THEN expr(Z). {
1252   A = sqlite3ExprListAppend(pParse,0, Y);
1253   A = sqlite3ExprListAppend(pParse,A, Z);
1254 }
1255 %type case_else {Expr*}
1256 %destructor case_else {sqlite3ExprDelete(pParse->db, $$);}
1257 case_else(A) ::=  ELSE expr(X).         {A = X;}
1258 case_else(A) ::=  .                     {A = 0;}
1259 %type case_operand {Expr*}
1260 %destructor case_operand {sqlite3ExprDelete(pParse->db, $$);}
1261 case_operand(A) ::= expr(X).            {A = X; /*A-overwrites-X*/}
1262 case_operand(A) ::= .                   {A = 0;}
1263 
1264 %type exprlist {ExprList*}
1265 %destructor exprlist {sqlite3ExprListDelete(pParse->db, $$);}
1266 %type nexprlist {ExprList*}
1267 %destructor nexprlist {sqlite3ExprListDelete(pParse->db, $$);}
1268 
1269 exprlist(A) ::= nexprlist(A).
1270 exprlist(A) ::= .                            {A = 0;}
1271 nexprlist(A) ::= nexprlist(A) COMMA expr(Y).
1272     {A = sqlite3ExprListAppend(pParse,A,Y);}
1273 nexprlist(A) ::= expr(Y).
1274     {A = sqlite3ExprListAppend(pParse,0,Y); /*A-overwrites-Y*/}
1275 
1276 %ifndef SQLITE_OMIT_SUBQUERY
1277 /* A paren_exprlist is an optional expression list contained inside
1278 ** of parenthesis */
1279 %type paren_exprlist {ExprList*}
1280 %destructor paren_exprlist {sqlite3ExprListDelete(pParse->db, $$);}
1281 paren_exprlist(A) ::= .   {A = 0;}
1282 paren_exprlist(A) ::= LP exprlist(X) RP.  {A = X;}
1283 %endif SQLITE_OMIT_SUBQUERY
1284 
1285 
1286 ///////////////////////////// The CREATE INDEX command ///////////////////////
1287 //
1288 cmd ::= createkw(S) uniqueflag(U) INDEX ifnotexists(NE) nm(X) dbnm(D)
1289         ON nm(Y) LP sortlist(Z) RP where_opt(W). {
1290   sqlite3CreateIndex(pParse, &X, &D,
1291                      sqlite3SrcListAppend(pParse->db,0,&Y,0), Z, U,
1292                       &S, W, SQLITE_SO_ASC, NE, SQLITE_IDXTYPE_APPDEF);
1293   if( IN_RENAME_OBJECT && pParse->pNewIndex ){
1294     sqlite3RenameTokenMap(pParse, pParse->pNewIndex->zName, &Y);
1295   }
1296 }
1297 
1298 %type uniqueflag {int}
1299 uniqueflag(A) ::= UNIQUE.  {A = OE_Abort;}
1300 uniqueflag(A) ::= .        {A = OE_None;}
1301 
1302 
1303 // The eidlist non-terminal (Expression Id List) generates an ExprList
1304 // from a list of identifiers.  The identifier names are in ExprList.a[].zName.
1305 // This list is stored in an ExprList rather than an IdList so that it
1306 // can be easily sent to sqlite3ColumnsExprList().
1307 //
1308 // eidlist is grouped with CREATE INDEX because it used to be the non-terminal
1309 // used for the arguments to an index.  That is just an historical accident.
1310 //
1311 // IMPORTANT COMPATIBILITY NOTE:  Some prior versions of SQLite accepted
1312 // COLLATE clauses and ASC or DESC keywords on ID lists in inappropriate
1313 // places - places that might have been stored in the sqlite_master schema.
1314 // Those extra features were ignored.  But because they might be in some
1315 // (busted) old databases, we need to continue parsing them when loading
1316 // historical schemas.
1317 //
1318 %type eidlist {ExprList*}
1319 %destructor eidlist {sqlite3ExprListDelete(pParse->db, $$);}
1320 %type eidlist_opt {ExprList*}
1321 %destructor eidlist_opt {sqlite3ExprListDelete(pParse->db, $$);}
1322 
1323 %include {
1324   /* Add a single new term to an ExprList that is used to store a
1325   ** list of identifiers.  Report an error if the ID list contains
1326   ** a COLLATE clause or an ASC or DESC keyword, except ignore the
1327   ** error while parsing a legacy schema.
1328   */
1329   static ExprList *parserAddExprIdListTerm(
1330     Parse *pParse,
1331     ExprList *pPrior,
1332     Token *pIdToken,
1333     int hasCollate,
1334     int sortOrder
1335   ){
1336     ExprList *p = sqlite3ExprListAppend(pParse, pPrior, 0);
1337     if( (hasCollate || sortOrder!=SQLITE_SO_UNDEFINED)
1338         && pParse->db->init.busy==0
1339     ){
1340       sqlite3ErrorMsg(pParse, "syntax error after column name \"%.*s\"",
1341                          pIdToken->n, pIdToken->z);
1342     }
1343     sqlite3ExprListSetName(pParse, p, pIdToken, 1);
1344     return p;
1345   }
1346 } // end %include
1347 
1348 eidlist_opt(A) ::= .                         {A = 0;}
1349 eidlist_opt(A) ::= LP eidlist(X) RP.         {A = X;}
1350 eidlist(A) ::= eidlist(A) COMMA nm(Y) collate(C) sortorder(Z).  {
1351   A = parserAddExprIdListTerm(pParse, A, &Y, C, Z);
1352 }
1353 eidlist(A) ::= nm(Y) collate(C) sortorder(Z). {
1354   A = parserAddExprIdListTerm(pParse, 0, &Y, C, Z); /*A-overwrites-Y*/
1355 }
1356 
1357 %type collate {int}
1358 collate(C) ::= .              {C = 0;}
1359 collate(C) ::= COLLATE ids.   {C = 1;}
1360 
1361 
1362 ///////////////////////////// The DROP INDEX command /////////////////////////
1363 //
1364 cmd ::= DROP INDEX ifexists(E) fullname(X).   {sqlite3DropIndex(pParse, X, E);}
1365 
1366 ///////////////////////////// The VACUUM command /////////////////////////////
1367 //
1368 %ifndef SQLITE_OMIT_VACUUM
1369 %ifndef SQLITE_OMIT_ATTACH
1370 cmd ::= VACUUM.                {sqlite3Vacuum(pParse,0);}
1371 cmd ::= VACUUM nm(X).          {sqlite3Vacuum(pParse,&X);}
1372 %endif  SQLITE_OMIT_ATTACH
1373 %endif  SQLITE_OMIT_VACUUM
1374 
1375 ///////////////////////////// The PRAGMA command /////////////////////////////
1376 //
1377 %ifndef SQLITE_OMIT_PRAGMA
1378 cmd ::= PRAGMA nm(X) dbnm(Z).                {sqlite3Pragma(pParse,&X,&Z,0,0);}
1379 cmd ::= PRAGMA nm(X) dbnm(Z) EQ nmnum(Y).    {sqlite3Pragma(pParse,&X,&Z,&Y,0);}
1380 cmd ::= PRAGMA nm(X) dbnm(Z) LP nmnum(Y) RP. {sqlite3Pragma(pParse,&X,&Z,&Y,0);}
1381 cmd ::= PRAGMA nm(X) dbnm(Z) EQ minus_num(Y).
1382                                              {sqlite3Pragma(pParse,&X,&Z,&Y,1);}
1383 cmd ::= PRAGMA nm(X) dbnm(Z) LP minus_num(Y) RP.
1384                                              {sqlite3Pragma(pParse,&X,&Z,&Y,1);}
1385 
1386 nmnum(A) ::= plus_num(A).
1387 nmnum(A) ::= nm(A).
1388 nmnum(A) ::= ON(A).
1389 nmnum(A) ::= DELETE(A).
1390 nmnum(A) ::= DEFAULT(A).
1391 %endif SQLITE_OMIT_PRAGMA
1392 %token_class number INTEGER|FLOAT.
1393 plus_num(A) ::= PLUS number(X).       {A = X;}
1394 plus_num(A) ::= number(A).
1395 minus_num(A) ::= MINUS number(X).     {A = X;}
1396 //////////////////////////// The CREATE TRIGGER command /////////////////////
1397 
1398 %ifndef SQLITE_OMIT_TRIGGER
1399 
1400 cmd ::= createkw trigger_decl(A) BEGIN trigger_cmd_list(S) END(Z). {
1401   Token all;
1402   all.z = A.z;
1403   all.n = (int)(Z.z - A.z) + Z.n;
1404   sqlite3FinishTrigger(pParse, S, &all);
1405 }
1406 
1407 trigger_decl(A) ::= temp(T) TRIGGER ifnotexists(NOERR) nm(B) dbnm(Z)
1408                     trigger_time(C) trigger_event(D)
1409                     ON fullname(E) foreach_clause when_clause(G). {
1410   sqlite3BeginTrigger(pParse, &B, &Z, C, D.a, D.b, E, G, T, NOERR);
1411   A = (Z.n==0?B:Z); /*A-overwrites-T*/
1412 }
1413 
1414 %type trigger_time {int}
1415 trigger_time(A) ::= BEFORE|AFTER(X).  { A = @X; /*A-overwrites-X*/ }
1416 trigger_time(A) ::= INSTEAD OF.  { A = TK_INSTEAD;}
1417 trigger_time(A) ::= .            { A = TK_BEFORE; }
1418 
1419 %type trigger_event {struct TrigEvent}
1420 %destructor trigger_event {sqlite3IdListDelete(pParse->db, $$.b);}
1421 trigger_event(A) ::= DELETE|INSERT(X).   {A.a = @X; /*A-overwrites-X*/ A.b = 0;}
1422 trigger_event(A) ::= UPDATE(X).          {A.a = @X; /*A-overwrites-X*/ A.b = 0;}
1423 trigger_event(A) ::= UPDATE OF idlist(X).{A.a = TK_UPDATE; A.b = X;}
1424 
1425 foreach_clause ::= .
1426 foreach_clause ::= FOR EACH ROW.
1427 
1428 %type when_clause {Expr*}
1429 %destructor when_clause {sqlite3ExprDelete(pParse->db, $$);}
1430 when_clause(A) ::= .             { A = 0; }
1431 when_clause(A) ::= WHEN expr(X). { A = X; }
1432 
1433 %type trigger_cmd_list {TriggerStep*}
1434 %destructor trigger_cmd_list {sqlite3DeleteTriggerStep(pParse->db, $$);}
1435 trigger_cmd_list(A) ::= trigger_cmd_list(A) trigger_cmd(X) SEMI. {
1436   assert( A!=0 );
1437   A->pLast->pNext = X;
1438   A->pLast = X;
1439 }
1440 trigger_cmd_list(A) ::= trigger_cmd(A) SEMI. {
1441   assert( A!=0 );
1442   A->pLast = A;
1443 }
1444 
1445 // Disallow qualified table names on INSERT, UPDATE, and DELETE statements
1446 // within a trigger.  The table to INSERT, UPDATE, or DELETE is always in
1447 // the same database as the table that the trigger fires on.
1448 //
1449 %type trnm {Token}
1450 trnm(A) ::= nm(A).
1451 trnm(A) ::= nm DOT nm(X). {
1452   A = X;
1453   sqlite3ErrorMsg(pParse,
1454         "qualified table names are not allowed on INSERT, UPDATE, and DELETE "
1455         "statements within triggers");
1456 }
1457 
1458 // Disallow the INDEX BY and NOT INDEXED clauses on UPDATE and DELETE
1459 // statements within triggers.  We make a specific error message for this
1460 // since it is an exception to the default grammar rules.
1461 //
1462 tridxby ::= .
1463 tridxby ::= INDEXED BY nm. {
1464   sqlite3ErrorMsg(pParse,
1465         "the INDEXED BY clause is not allowed on UPDATE or DELETE statements "
1466         "within triggers");
1467 }
1468 tridxby ::= NOT INDEXED. {
1469   sqlite3ErrorMsg(pParse,
1470         "the NOT INDEXED clause is not allowed on UPDATE or DELETE statements "
1471         "within triggers");
1472 }
1473 
1474 
1475 
1476 %type trigger_cmd {TriggerStep*}
1477 %destructor trigger_cmd {sqlite3DeleteTriggerStep(pParse->db, $$);}
1478 // UPDATE
1479 trigger_cmd(A) ::=
1480    UPDATE(B) orconf(R) trnm(X) tridxby SET setlist(Y) where_opt(Z) scanpt(E).
1481    {A = sqlite3TriggerUpdateStep(pParse, &X, Y, Z, R, B.z, E);}
1482 
1483 // INSERT
1484 trigger_cmd(A) ::= scanpt(B) insert_cmd(R) INTO
1485                       trnm(X) idlist_opt(F) select(S) upsert(U) scanpt(Z). {
1486    A = sqlite3TriggerInsertStep(pParse,&X,F,S,R,U,B,Z);/*A-overwrites-R*/
1487 }
1488 // DELETE
1489 trigger_cmd(A) ::= DELETE(B) FROM trnm(X) tridxby where_opt(Y) scanpt(E).
1490    {A = sqlite3TriggerDeleteStep(pParse, &X, Y, B.z, E);}
1491 
1492 // SELECT
1493 trigger_cmd(A) ::= scanpt(B) select(X) scanpt(E).
1494    {A = sqlite3TriggerSelectStep(pParse->db, X, B, E); /*A-overwrites-X*/}
1495 
1496 // The special RAISE expression that may occur in trigger programs
1497 expr(A) ::= RAISE LP IGNORE RP.  {
1498   A = sqlite3PExpr(pParse, TK_RAISE, 0, 0);
1499   if( A ){
1500     A->affinity = OE_Ignore;
1501   }
1502 }
1503 expr(A) ::= RAISE LP raisetype(T) COMMA nm(Z) RP.  {
1504   A = sqlite3ExprAlloc(pParse->db, TK_RAISE, &Z, 1);
1505   if( A ) {
1506     A->affinity = (char)T;
1507   }
1508 }
1509 %endif  !SQLITE_OMIT_TRIGGER
1510 
1511 %type raisetype {int}
1512 raisetype(A) ::= ROLLBACK.  {A = OE_Rollback;}
1513 raisetype(A) ::= ABORT.     {A = OE_Abort;}
1514 raisetype(A) ::= FAIL.      {A = OE_Fail;}
1515 
1516 
1517 ////////////////////////  DROP TRIGGER statement //////////////////////////////
1518 %ifndef SQLITE_OMIT_TRIGGER
1519 cmd ::= DROP TRIGGER ifexists(NOERR) fullname(X). {
1520   sqlite3DropTrigger(pParse,X,NOERR);
1521 }
1522 %endif  !SQLITE_OMIT_TRIGGER
1523 
1524 //////////////////////// ATTACH DATABASE file AS name /////////////////////////
1525 %ifndef SQLITE_OMIT_ATTACH
1526 cmd ::= ATTACH database_kw_opt expr(F) AS expr(D) key_opt(K). {
1527   sqlite3Attach(pParse, F, D, K);
1528 }
1529 cmd ::= DETACH database_kw_opt expr(D). {
1530   sqlite3Detach(pParse, D);
1531 }
1532 
1533 %type key_opt {Expr*}
1534 %destructor key_opt {sqlite3ExprDelete(pParse->db, $$);}
1535 key_opt(A) ::= .                     { A = 0; }
1536 key_opt(A) ::= KEY expr(X).          { A = X; }
1537 
1538 database_kw_opt ::= DATABASE.
1539 database_kw_opt ::= .
1540 %endif SQLITE_OMIT_ATTACH
1541 
1542 ////////////////////////// REINDEX collation //////////////////////////////////
1543 %ifndef SQLITE_OMIT_REINDEX
1544 cmd ::= REINDEX.                {sqlite3Reindex(pParse, 0, 0);}
1545 cmd ::= REINDEX nm(X) dbnm(Y).  {sqlite3Reindex(pParse, &X, &Y);}
1546 %endif  SQLITE_OMIT_REINDEX
1547 
1548 /////////////////////////////////// ANALYZE ///////////////////////////////////
1549 %ifndef SQLITE_OMIT_ANALYZE
1550 cmd ::= ANALYZE.                {sqlite3Analyze(pParse, 0, 0);}
1551 cmd ::= ANALYZE nm(X) dbnm(Y).  {sqlite3Analyze(pParse, &X, &Y);}
1552 %endif
1553 
1554 //////////////////////// ALTER TABLE table ... ////////////////////////////////
1555 %ifndef SQLITE_OMIT_ALTERTABLE
1556 cmd ::= ALTER TABLE fullname(X) RENAME TO nm(Z). {
1557   sqlite3AlterRenameTable(pParse,X,&Z);
1558 }
1559 cmd ::= ALTER TABLE add_column_fullname
1560         ADD kwcolumn_opt columnname(Y) carglist. {
1561   Y.n = (int)(pParse->sLastToken.z-Y.z) + pParse->sLastToken.n;
1562   sqlite3AlterFinishAddColumn(pParse, &Y);
1563 }
1564 add_column_fullname ::= fullname(X). {
1565   disableLookaside(pParse);
1566   sqlite3AlterBeginAddColumn(pParse, X);
1567 }
1568 cmd ::= ALTER TABLE fullname(X) RENAME kwcolumn_opt nm(Y) TO nm(Z). {
1569   sqlite3AlterRenameColumn(pParse, X, &Y, &Z);
1570 }
1571 
1572 kwcolumn_opt ::= .
1573 kwcolumn_opt ::= COLUMNKW.
1574 
1575 %endif  SQLITE_OMIT_ALTERTABLE
1576 
1577 //////////////////////// CREATE VIRTUAL TABLE ... /////////////////////////////
1578 %ifndef SQLITE_OMIT_VIRTUALTABLE
1579 cmd ::= create_vtab.                       {sqlite3VtabFinishParse(pParse,0);}
1580 cmd ::= create_vtab LP vtabarglist RP(X).  {sqlite3VtabFinishParse(pParse,&X);}
1581 create_vtab ::= createkw VIRTUAL TABLE ifnotexists(E)
1582                 nm(X) dbnm(Y) USING nm(Z). {
1583     sqlite3VtabBeginParse(pParse, &X, &Y, &Z, E);
1584 }
1585 vtabarglist ::= vtabarg.
1586 vtabarglist ::= vtabarglist COMMA vtabarg.
1587 vtabarg ::= .                       {sqlite3VtabArgInit(pParse);}
1588 vtabarg ::= vtabarg vtabargtoken.
1589 vtabargtoken ::= ANY(X).            {sqlite3VtabArgExtend(pParse,&X);}
1590 vtabargtoken ::= lp anylist RP(X).  {sqlite3VtabArgExtend(pParse,&X);}
1591 lp ::= LP(X).                       {sqlite3VtabArgExtend(pParse,&X);}
1592 anylist ::= .
1593 anylist ::= anylist LP anylist RP.
1594 anylist ::= anylist ANY.
1595 %endif  SQLITE_OMIT_VIRTUALTABLE
1596 
1597 
1598 //////////////////////// COMMON TABLE EXPRESSIONS ////////////////////////////
1599 %type wqlist {With*}
1600 %destructor wqlist {sqlite3WithDelete(pParse->db, $$);}
1601 
1602 with ::= .
1603 %ifndef SQLITE_OMIT_CTE
1604 with ::= WITH wqlist(W).              { sqlite3WithPush(pParse, W, 1); }
1605 with ::= WITH RECURSIVE wqlist(W).    { sqlite3WithPush(pParse, W, 1); }
1606 
1607 wqlist(A) ::= nm(X) eidlist_opt(Y) AS LP select(Z) RP. {
1608   A = sqlite3WithAdd(pParse, 0, &X, Y, Z); /*A-overwrites-X*/
1609 }
1610 wqlist(A) ::= wqlist(A) COMMA nm(X) eidlist_opt(Y) AS LP select(Z) RP. {
1611   A = sqlite3WithAdd(pParse, A, &X, Y, Z);
1612 }
1613 %endif  SQLITE_OMIT_CTE
1614 
1615 //////////////////////// WINDOW FUNCTION EXPRESSIONS /////////////////////////
1616 // These must be at the end of this file. Specifically, the rules that
1617 // introduce tokens WINDOW, OVER and FILTER must appear last. This causes
1618 // the integer values assigned to these tokens to be larger than all other
1619 // tokens that may be output by the tokenizer except TK_SPACE and TK_ILLEGAL.
1620 //
1621 %ifndef SQLITE_OMIT_WINDOWFUNC
1622 %type windowdefn_list {Window*}
1623 %destructor windowdefn_list {sqlite3WindowListDelete(pParse->db, $$);}
1624 windowdefn_list(A) ::= windowdefn(Z). { A = Z; }
1625 windowdefn_list(A) ::= windowdefn_list(Y) COMMA windowdefn(Z). {
1626   assert( Z!=0 );
1627   Z->pNextWin = Y;
1628   A = Z;
1629 }
1630 
1631 %type windowdefn {Window*}
1632 %destructor windowdefn {sqlite3WindowDelete(pParse->db, $$);}
1633 windowdefn(A) ::= nm(X) AS window(Y). {
1634   if( ALWAYS(Y) ){
1635     Y->zName = sqlite3DbStrNDup(pParse->db, X.z, X.n);
1636   }
1637   A = Y;
1638 }
1639 
1640 %type window {Window*}
1641 %destructor window {sqlite3WindowDelete(pParse->db, $$);}
1642 
1643 %type frame_opt {Window*}
1644 %destructor frame_opt {sqlite3WindowDelete(pParse->db, $$);}
1645 
1646 %type part_opt {ExprList*}
1647 %destructor part_opt {sqlite3ExprListDelete(pParse->db, $$);}
1648 
1649 %type filter_opt {Expr*}
1650 %destructor filter_opt {sqlite3ExprDelete(pParse->db, $$);}
1651 
1652 %type range_or_rows {int}
1653 
1654 %type frame_bound {struct FrameBound}
1655 %destructor frame_bound {sqlite3ExprDelete(pParse->db, $$.pExpr);}
1656 %type frame_bound_s {struct FrameBound}
1657 %destructor frame_bound_s {sqlite3ExprDelete(pParse->db, $$.pExpr);}
1658 %type frame_bound_e {struct FrameBound}
1659 %destructor frame_bound_e {sqlite3ExprDelete(pParse->db, $$.pExpr);}
1660 
1661 window(A) ::= LP part_opt(X) orderby_opt(Y) frame_opt(Z) RP. {
1662   A = Z;
1663   if( ALWAYS(A) ){
1664     A->pPartition = X;
1665     A->pOrderBy = Y;
1666   }
1667 }
1668 
1669 part_opt(A) ::= PARTITION BY nexprlist(X). { A = X; }
1670 part_opt(A) ::= .                          { A = 0; }
1671 
1672 frame_opt(A) ::= .                             {
1673   A = sqlite3WindowAlloc(pParse, TK_RANGE, TK_UNBOUNDED, 0, TK_CURRENT, 0);
1674 }
1675 frame_opt(A) ::= range_or_rows(X) frame_bound_s(Y). {
1676   A = sqlite3WindowAlloc(pParse, X, Y.eType, Y.pExpr, TK_CURRENT, 0);
1677 }
1678 frame_opt(A) ::= range_or_rows(X) BETWEEN frame_bound_s(Y) AND frame_bound_e(Z). {
1679   A = sqlite3WindowAlloc(pParse, X, Y.eType, Y.pExpr, Z.eType, Z.pExpr);
1680 }
1681 
1682 range_or_rows(A) ::= RANGE.   { A = TK_RANGE; }
1683 range_or_rows(A) ::= ROWS.    { A = TK_ROWS;  }
1684 
1685 
1686 frame_bound_s(A) ::= frame_bound(X). { A = X; }
1687 frame_bound_s(A) ::= UNBOUNDED PRECEDING. {A.eType = TK_UNBOUNDED; A.pExpr = 0;}
1688 frame_bound_e(A) ::= frame_bound(X). { A = X; }
1689 frame_bound_e(A) ::= UNBOUNDED FOLLOWING. {A.eType = TK_UNBOUNDED; A.pExpr = 0;}
1690 
1691 frame_bound(A) ::= expr(X) PRECEDING.   { A.eType = TK_PRECEDING; A.pExpr = X; }
1692 frame_bound(A) ::= CURRENT ROW.         { A.eType = TK_CURRENT  ; A.pExpr = 0; }
1693 frame_bound(A) ::= expr(X) FOLLOWING.   { A.eType = TK_FOLLOWING; A.pExpr = X; }
1694 
1695 %type window_clause {Window*}
1696 %destructor window_clause {sqlite3WindowListDelete(pParse->db, $$);}
1697 window_clause(A) ::= WINDOW windowdefn_list(B). { A = B; }
1698 
1699 %type over_clause {Window*}
1700 %destructor over_clause {sqlite3WindowDelete(pParse->db, $$);}
1701 over_clause(A) ::= filter_opt(W) OVER window(Z). {
1702   A = Z;
1703   assert( A!=0 );
1704   A->pFilter = W;
1705 }
1706 over_clause(A) ::= filter_opt(W) OVER nm(Z). {
1707   A = (Window*)sqlite3DbMallocZero(pParse->db, sizeof(Window));
1708   if( A ){
1709     A->zName = sqlite3DbStrNDup(pParse->db, Z.z, Z.n);
1710     A->pFilter = W;
1711   }else{
1712     sqlite3ExprDelete(pParse->db, W);
1713   }
1714 }
1715 
1716 filter_opt(A) ::= .                            { A = 0; }
1717 filter_opt(A) ::= FILTER LP WHERE expr(X) RP.  { A = X; }
1718 %endif /* SQLITE_OMIT_WINDOWFUNC */
1719