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