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