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