xref: /sqlite-3.40.0/src/parse.y (revision 9edb5ceb)
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 | TF_NoVisibleRowid;
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   Select *pLhs = X;
452   if( pRhs && pRhs->pPrior ){
453     SrcList *pFrom;
454     Token x;
455     x.n = 0;
456     parserDoubleLinkSelect(pParse, pRhs);
457     pFrom = sqlite3SrcListAppendFromTerm(pParse,0,0,0,&x,pRhs,0,0);
458     pRhs = sqlite3SelectNew(pParse,0,pFrom,0,0,0,0,0,0,0);
459   }
460   if( pRhs ){
461     pRhs->op = (u8)Y;
462     pRhs->pPrior = pLhs;
463     if( ALWAYS(pLhs) ) pLhs->selFlags &= ~SF_MultiValue;
464     pRhs->selFlags &= ~SF_MultiValue;
465     if( Y!=TK_ALL ) pParse->hasCompound = 1;
466   }else{
467     sqlite3SelectDelete(pParse->db, pLhs);
468   }
469   A = pRhs;
470 }
471 %type multiselect_op {int}
472 multiselect_op(A) ::= UNION(OP).             {A = @OP;}
473 multiselect_op(A) ::= UNION ALL.             {A = TK_ALL;}
474 multiselect_op(A) ::= EXCEPT|INTERSECT(OP).  {A = @OP;}
475 %endif SQLITE_OMIT_COMPOUND_SELECT
476 oneselect(A) ::= SELECT(S) distinct(D) selcollist(W) from(X) where_opt(Y)
477                  groupby_opt(P) having_opt(Q) orderby_opt(Z) limit_opt(L). {
478   A = sqlite3SelectNew(pParse,W,X,Y,P,Q,Z,D,L.pLimit,L.pOffset);
479 #if SELECTTRACE_ENABLED
480   /* Populate the Select.zSelName[] string that is used to help with
481   ** query planner debugging, to differentiate between multiple Select
482   ** objects in a complex query.
483   **
484   ** If the SELECT keyword is immediately followed by a C-style comment
485   ** then extract the first few alphanumeric characters from within that
486   ** comment to be the zSelName value.  Otherwise, the label is #N where
487   ** is an integer that is incremented with each SELECT statement seen.
488   */
489   if( A!=0 ){
490     const char *z = S.z+6;
491     int i;
492     sqlite3_snprintf(sizeof(A->zSelName), A->zSelName, "#%d",
493                      ++pParse->nSelect);
494     while( z[0]==' ' ) z++;
495     if( z[0]=='/' && z[1]=='*' ){
496       z += 2;
497       while( z[0]==' ' ) z++;
498       for(i=0; sqlite3Isalnum(z[i]); i++){}
499       sqlite3_snprintf(sizeof(A->zSelName), A->zSelName, "%.*s", i, z);
500     }
501   }
502 #endif /* SELECTRACE_ENABLED */
503 }
504 oneselect(A) ::= values(X).    {A = X;}
505 
506 %type values {Select*}
507 %destructor values {sqlite3SelectDelete(pParse->db, $$);}
508 values(A) ::= VALUES LP nexprlist(X) RP. {
509   A = sqlite3SelectNew(pParse,X,0,0,0,0,0,SF_Values,0,0);
510 }
511 values(A) ::= values(X) COMMA LP exprlist(Y) RP. {
512   Select *pRight, *pLeft = X;
513   pRight = sqlite3SelectNew(pParse,Y,0,0,0,0,0,SF_Values|SF_MultiValue,0,0);
514   if( ALWAYS(pLeft) ) pLeft->selFlags &= ~SF_MultiValue;
515   if( pRight ){
516     pRight->op = TK_ALL;
517     pLeft = X;
518     pRight->pPrior = pLeft;
519     A = pRight;
520   }else{
521     A = pLeft;
522   }
523 }
524 
525 // The "distinct" nonterminal is true (1) if the DISTINCT keyword is
526 // present and false (0) if it is not.
527 //
528 %type distinct {u16}
529 distinct(A) ::= DISTINCT.   {A = SF_Distinct;}
530 distinct(A) ::= ALL.        {A = SF_All;}
531 distinct(A) ::= .           {A = 0;}
532 
533 // selcollist is a list of expressions that are to become the return
534 // values of the SELECT statement.  The "*" in statements like
535 // "SELECT * FROM ..." is encoded as a special expression with an
536 // opcode of TK_ALL.
537 //
538 %type selcollist {ExprList*}
539 %destructor selcollist {sqlite3ExprListDelete(pParse->db, $$);}
540 %type sclp {ExprList*}
541 %destructor sclp {sqlite3ExprListDelete(pParse->db, $$);}
542 sclp(A) ::= selcollist(X) COMMA.             {A = X;}
543 sclp(A) ::= .                                {A = 0;}
544 selcollist(A) ::= sclp(P) expr(X) as(Y).     {
545    A = sqlite3ExprListAppend(pParse, P, X.pExpr);
546    if( Y.n>0 ) sqlite3ExprListSetName(pParse, A, &Y, 1);
547    sqlite3ExprListSetSpan(pParse,A,&X);
548 }
549 selcollist(A) ::= sclp(P) STAR. {
550   Expr *p = sqlite3Expr(pParse->db, TK_ALL, 0);
551   A = sqlite3ExprListAppend(pParse, P, p);
552 }
553 selcollist(A) ::= sclp(P) nm(X) DOT STAR(Y). {
554   Expr *pRight = sqlite3PExpr(pParse, TK_ALL, 0, 0, &Y);
555   Expr *pLeft = sqlite3PExpr(pParse, TK_ID, 0, 0, &X);
556   Expr *pDot = sqlite3PExpr(pParse, TK_DOT, pLeft, pRight, 0);
557   A = sqlite3ExprListAppend(pParse,P, pDot);
558 }
559 
560 // An option "AS <id>" phrase that can follow one of the expressions that
561 // define the result set, or one of the tables in the FROM clause.
562 //
563 %type as {Token}
564 as(X) ::= AS nm(Y).    {X = Y;}
565 as(X) ::= ids(Y).      {X = Y;}
566 as(X) ::= .            {X.n = 0;}
567 
568 
569 %type seltablist {SrcList*}
570 %destructor seltablist {sqlite3SrcListDelete(pParse->db, $$);}
571 %type stl_prefix {SrcList*}
572 %destructor stl_prefix {sqlite3SrcListDelete(pParse->db, $$);}
573 %type from {SrcList*}
574 %destructor from {sqlite3SrcListDelete(pParse->db, $$);}
575 
576 // A complete FROM clause.
577 //
578 from(A) ::= .                {A = sqlite3DbMallocZero(pParse->db, sizeof(*A));}
579 from(A) ::= FROM seltablist(X). {
580   A = X;
581   sqlite3SrcListShiftJoinType(A);
582 }
583 
584 // "seltablist" is a "Select Table List" - the content of the FROM clause
585 // in a SELECT statement.  "stl_prefix" is a prefix of this list.
586 //
587 stl_prefix(A) ::= seltablist(X) joinop(Y).    {
588    A = X;
589    if( ALWAYS(A && A->nSrc>0) ) A->a[A->nSrc-1].jointype = (u8)Y;
590 }
591 stl_prefix(A) ::= .                           {A = 0;}
592 seltablist(A) ::= stl_prefix(X) nm(Y) dbnm(D) as(Z) indexed_opt(I)
593                   on_opt(N) using_opt(U). {
594   A = sqlite3SrcListAppendFromTerm(pParse,X,&Y,&D,&Z,0,N,U);
595   sqlite3SrcListIndexedBy(pParse, A, &I);
596 }
597 %ifndef SQLITE_OMIT_SUBQUERY
598   seltablist(A) ::= stl_prefix(X) LP select(S) RP
599                     as(Z) on_opt(N) using_opt(U). {
600     A = sqlite3SrcListAppendFromTerm(pParse,X,0,0,&Z,S,N,U);
601   }
602   seltablist(A) ::= stl_prefix(X) LP seltablist(F) RP
603                     as(Z) on_opt(N) using_opt(U). {
604     if( X==0 && Z.n==0 && N==0 && U==0 ){
605       A = F;
606     }else if( F->nSrc==1 ){
607       A = sqlite3SrcListAppendFromTerm(pParse,X,0,0,&Z,0,N,U);
608       if( A ){
609         struct SrcList_item *pNew = &A->a[A->nSrc-1];
610         struct SrcList_item *pOld = F->a;
611         pNew->zName = pOld->zName;
612         pNew->zDatabase = pOld->zDatabase;
613         pNew->pSelect = pOld->pSelect;
614         pOld->zName = pOld->zDatabase = 0;
615         pOld->pSelect = 0;
616       }
617       sqlite3SrcListDelete(pParse->db, F);
618     }else{
619       Select *pSubquery;
620       sqlite3SrcListShiftJoinType(F);
621       pSubquery = sqlite3SelectNew(pParse,0,F,0,0,0,0,SF_NestedFrom,0,0);
622       A = sqlite3SrcListAppendFromTerm(pParse,X,0,0,&Z,pSubquery,N,U);
623     }
624   }
625 %endif  SQLITE_OMIT_SUBQUERY
626 
627 %type dbnm {Token}
628 dbnm(A) ::= .          {A.z=0; A.n=0;}
629 dbnm(A) ::= DOT nm(X). {A = X;}
630 
631 %type fullname {SrcList*}
632 %destructor fullname {sqlite3SrcListDelete(pParse->db, $$);}
633 fullname(A) ::= nm(X) dbnm(Y).  {A = sqlite3SrcListAppend(pParse->db,0,&X,&Y);}
634 
635 %type joinop {int}
636 %type joinop2 {int}
637 joinop(X) ::= COMMA|JOIN.              { X = JT_INNER; }
638 joinop(X) ::= JOIN_KW(A) JOIN.         { X = sqlite3JoinType(pParse,&A,0,0); }
639 joinop(X) ::= JOIN_KW(A) nm(B) JOIN.   { X = sqlite3JoinType(pParse,&A,&B,0); }
640 joinop(X) ::= JOIN_KW(A) nm(B) nm(C) JOIN.
641                                        { X = sqlite3JoinType(pParse,&A,&B,&C); }
642 
643 %type on_opt {Expr*}
644 %destructor on_opt {sqlite3ExprDelete(pParse->db, $$);}
645 on_opt(N) ::= ON expr(E).   {N = E.pExpr;}
646 on_opt(N) ::= .             {N = 0;}
647 
648 // Note that this block abuses the Token type just a little. If there is
649 // no "INDEXED BY" clause, the returned token is empty (z==0 && n==0). If
650 // there is an INDEXED BY clause, then the token is populated as per normal,
651 // with z pointing to the token data and n containing the number of bytes
652 // in the token.
653 //
654 // If there is a "NOT INDEXED" clause, then (z==0 && n==1), which is
655 // normally illegal. The sqlite3SrcListIndexedBy() function
656 // recognizes and interprets this as a special case.
657 //
658 %type indexed_opt {Token}
659 indexed_opt(A) ::= .                 {A.z=0; A.n=0;}
660 indexed_opt(A) ::= INDEXED BY nm(X). {A = X;}
661 indexed_opt(A) ::= NOT INDEXED.      {A.z=0; A.n=1;}
662 
663 %type using_opt {IdList*}
664 %destructor using_opt {sqlite3IdListDelete(pParse->db, $$);}
665 using_opt(U) ::= USING LP idlist(L) RP.  {U = L;}
666 using_opt(U) ::= .                        {U = 0;}
667 
668 
669 %type orderby_opt {ExprList*}
670 %destructor orderby_opt {sqlite3ExprListDelete(pParse->db, $$);}
671 %type sortlist {ExprList*}
672 %destructor sortlist {sqlite3ExprListDelete(pParse->db, $$);}
673 
674 orderby_opt(A) ::= .                          {A = 0;}
675 orderby_opt(A) ::= ORDER BY sortlist(X).      {A = X;}
676 sortlist(A) ::= sortlist(X) COMMA expr(Y) sortorder(Z). {
677   A = sqlite3ExprListAppend(pParse,X,Y.pExpr);
678   if( A ) A->a[A->nExpr-1].sortOrder = (u8)Z;
679 }
680 sortlist(A) ::= expr(Y) sortorder(Z). {
681   A = sqlite3ExprListAppend(pParse,0,Y.pExpr);
682   if( A && ALWAYS(A->a) ) A->a[0].sortOrder = (u8)Z;
683 }
684 
685 %type sortorder {int}
686 
687 sortorder(A) ::= ASC.           {A = SQLITE_SO_ASC;}
688 sortorder(A) ::= DESC.          {A = SQLITE_SO_DESC;}
689 sortorder(A) ::= .              {A = SQLITE_SO_ASC;}
690 
691 %type groupby_opt {ExprList*}
692 %destructor groupby_opt {sqlite3ExprListDelete(pParse->db, $$);}
693 groupby_opt(A) ::= .                      {A = 0;}
694 groupby_opt(A) ::= GROUP BY nexprlist(X). {A = X;}
695 
696 %type having_opt {Expr*}
697 %destructor having_opt {sqlite3ExprDelete(pParse->db, $$);}
698 having_opt(A) ::= .                {A = 0;}
699 having_opt(A) ::= HAVING expr(X).  {A = X.pExpr;}
700 
701 %type limit_opt {struct LimitVal}
702 
703 // The destructor for limit_opt will never fire in the current grammar.
704 // The limit_opt non-terminal only occurs at the end of a single production
705 // rule for SELECT statements.  As soon as the rule that create the
706 // limit_opt non-terminal reduces, the SELECT statement rule will also
707 // reduce.  So there is never a limit_opt non-terminal on the stack
708 // except as a transient.  So there is never anything to destroy.
709 //
710 //%destructor limit_opt {
711 //  sqlite3ExprDelete(pParse->db, $$.pLimit);
712 //  sqlite3ExprDelete(pParse->db, $$.pOffset);
713 //}
714 limit_opt(A) ::= .                    {A.pLimit = 0; A.pOffset = 0;}
715 limit_opt(A) ::= LIMIT expr(X).       {A.pLimit = X.pExpr; A.pOffset = 0;}
716 limit_opt(A) ::= LIMIT expr(X) OFFSET expr(Y).
717                                       {A.pLimit = X.pExpr; A.pOffset = Y.pExpr;}
718 limit_opt(A) ::= LIMIT expr(X) COMMA expr(Y).
719                                       {A.pOffset = X.pExpr; A.pLimit = Y.pExpr;}
720 
721 /////////////////////////// The DELETE statement /////////////////////////////
722 //
723 %ifdef SQLITE_ENABLE_UPDATE_DELETE_LIMIT
724 cmd ::= with(C) DELETE FROM fullname(X) indexed_opt(I) where_opt(W)
725         orderby_opt(O) limit_opt(L). {
726   sqlite3WithPush(pParse, C, 1);
727   sqlite3SrcListIndexedBy(pParse, X, &I);
728   W = sqlite3LimitWhere(pParse, X, W, O, L.pLimit, L.pOffset, "DELETE");
729   sqlite3DeleteFrom(pParse,X,W);
730 }
731 %endif
732 %ifndef SQLITE_ENABLE_UPDATE_DELETE_LIMIT
733 cmd ::= with(C) DELETE FROM fullname(X) indexed_opt(I) where_opt(W). {
734   sqlite3WithPush(pParse, C, 1);
735   sqlite3SrcListIndexedBy(pParse, X, &I);
736   sqlite3DeleteFrom(pParse,X,W);
737 }
738 %endif
739 
740 %type where_opt {Expr*}
741 %destructor where_opt {sqlite3ExprDelete(pParse->db, $$);}
742 
743 where_opt(A) ::= .                    {A = 0;}
744 where_opt(A) ::= WHERE expr(X).       {A = X.pExpr;}
745 
746 ////////////////////////// The UPDATE command ////////////////////////////////
747 //
748 %ifdef SQLITE_ENABLE_UPDATE_DELETE_LIMIT
749 cmd ::= with(C) UPDATE orconf(R) fullname(X) indexed_opt(I) SET setlist(Y)
750         where_opt(W) orderby_opt(O) limit_opt(L).  {
751   sqlite3WithPush(pParse, C, 1);
752   sqlite3SrcListIndexedBy(pParse, X, &I);
753   sqlite3ExprListCheckLength(pParse,Y,"set list");
754   W = sqlite3LimitWhere(pParse, X, W, O, L.pLimit, L.pOffset, "UPDATE");
755   sqlite3Update(pParse,X,Y,W,R);
756 }
757 %endif
758 %ifndef SQLITE_ENABLE_UPDATE_DELETE_LIMIT
759 cmd ::= with(C) UPDATE orconf(R) fullname(X) indexed_opt(I) SET setlist(Y)
760         where_opt(W).  {
761   sqlite3WithPush(pParse, C, 1);
762   sqlite3SrcListIndexedBy(pParse, X, &I);
763   sqlite3ExprListCheckLength(pParse,Y,"set list");
764   sqlite3Update(pParse,X,Y,W,R);
765 }
766 %endif
767 
768 %type setlist {ExprList*}
769 %destructor setlist {sqlite3ExprListDelete(pParse->db, $$);}
770 
771 setlist(A) ::= setlist(Z) COMMA nm(X) EQ expr(Y). {
772   A = sqlite3ExprListAppend(pParse, Z, Y.pExpr);
773   sqlite3ExprListSetName(pParse, A, &X, 1);
774 }
775 setlist(A) ::= nm(X) EQ expr(Y). {
776   A = sqlite3ExprListAppend(pParse, 0, Y.pExpr);
777   sqlite3ExprListSetName(pParse, A, &X, 1);
778 }
779 
780 ////////////////////////// The INSERT command /////////////////////////////////
781 //
782 cmd ::= with(W) insert_cmd(R) INTO fullname(X) inscollist_opt(F) select(S). {
783   sqlite3WithPush(pParse, W, 1);
784   sqlite3Insert(pParse, X, S, F, R);
785 }
786 cmd ::= with(W) insert_cmd(R) INTO fullname(X) inscollist_opt(F) DEFAULT VALUES.
787 {
788   sqlite3WithPush(pParse, W, 1);
789   sqlite3Insert(pParse, X, 0, F, R);
790 }
791 
792 %type insert_cmd {u8}
793 insert_cmd(A) ::= INSERT orconf(R).   {A = R;}
794 insert_cmd(A) ::= REPLACE.            {A = OE_Replace;}
795 
796 %type inscollist_opt {IdList*}
797 %destructor inscollist_opt {sqlite3IdListDelete(pParse->db, $$);}
798 %type idlist {IdList*}
799 %destructor idlist {sqlite3IdListDelete(pParse->db, $$);}
800 
801 inscollist_opt(A) ::= .                       {A = 0;}
802 inscollist_opt(A) ::= LP idlist(X) RP.    {A = X;}
803 idlist(A) ::= idlist(X) COMMA nm(Y).
804     {A = sqlite3IdListAppend(pParse->db,X,&Y);}
805 idlist(A) ::= nm(Y).
806     {A = sqlite3IdListAppend(pParse->db,0,&Y);}
807 
808 /////////////////////////// Expression Processing /////////////////////////////
809 //
810 
811 %type expr {ExprSpan}
812 %destructor expr {sqlite3ExprDelete(pParse->db, $$.pExpr);}
813 %type term {ExprSpan}
814 %destructor term {sqlite3ExprDelete(pParse->db, $$.pExpr);}
815 
816 %include {
817   /* This is a utility routine used to set the ExprSpan.zStart and
818   ** ExprSpan.zEnd values of pOut so that the span covers the complete
819   ** range of text beginning with pStart and going to the end of pEnd.
820   */
821   static void spanSet(ExprSpan *pOut, Token *pStart, Token *pEnd){
822     pOut->zStart = pStart->z;
823     pOut->zEnd = &pEnd->z[pEnd->n];
824   }
825 
826   /* Construct a new Expr object from a single identifier.  Use the
827   ** new Expr to populate pOut.  Set the span of pOut to be the identifier
828   ** that created the expression.
829   */
830   static void spanExpr(ExprSpan *pOut, Parse *pParse, int op, Token *pValue){
831     pOut->pExpr = sqlite3PExpr(pParse, op, 0, 0, pValue);
832     pOut->zStart = pValue->z;
833     pOut->zEnd = &pValue->z[pValue->n];
834   }
835 }
836 
837 expr(A) ::= term(X).             {A = X;}
838 expr(A) ::= LP(B) expr(X) RP(E). {A.pExpr = X.pExpr; spanSet(&A,&B,&E);}
839 term(A) ::= NULL(X).             {spanExpr(&A, pParse, @X, &X);}
840 expr(A) ::= id(X).               {spanExpr(&A, pParse, TK_ID, &X);}
841 expr(A) ::= JOIN_KW(X).          {spanExpr(&A, pParse, TK_ID, &X);}
842 expr(A) ::= nm(X) DOT nm(Y). {
843   Expr *temp1 = sqlite3PExpr(pParse, TK_ID, 0, 0, &X);
844   Expr *temp2 = sqlite3PExpr(pParse, TK_ID, 0, 0, &Y);
845   A.pExpr = sqlite3PExpr(pParse, TK_DOT, temp1, temp2, 0);
846   spanSet(&A,&X,&Y);
847 }
848 expr(A) ::= nm(X) DOT nm(Y) DOT nm(Z). {
849   Expr *temp1 = sqlite3PExpr(pParse, TK_ID, 0, 0, &X);
850   Expr *temp2 = sqlite3PExpr(pParse, TK_ID, 0, 0, &Y);
851   Expr *temp3 = sqlite3PExpr(pParse, TK_ID, 0, 0, &Z);
852   Expr *temp4 = sqlite3PExpr(pParse, TK_DOT, temp2, temp3, 0);
853   A.pExpr = sqlite3PExpr(pParse, TK_DOT, temp1, temp4, 0);
854   spanSet(&A,&X,&Z);
855 }
856 term(A) ::= INTEGER|FLOAT|BLOB(X).  {spanExpr(&A, pParse, @X, &X);}
857 term(A) ::= STRING(X).              {spanExpr(&A, pParse, @X, &X);}
858 expr(A) ::= VARIABLE(X).     {
859   if( X.n>=2 && X.z[0]=='#' && sqlite3Isdigit(X.z[1]) ){
860     /* When doing a nested parse, one can include terms in an expression
861     ** that look like this:   #1 #2 ...  These terms refer to registers
862     ** in the virtual machine.  #N is the N-th register. */
863     if( pParse->nested==0 ){
864       sqlite3ErrorMsg(pParse, "near \"%T\": syntax error", &X);
865       A.pExpr = 0;
866     }else{
867       A.pExpr = sqlite3PExpr(pParse, TK_REGISTER, 0, 0, &X);
868       if( A.pExpr ) sqlite3GetInt32(&X.z[1], &A.pExpr->iTable);
869     }
870   }else{
871     spanExpr(&A, pParse, TK_VARIABLE, &X);
872     sqlite3ExprAssignVarNumber(pParse, A.pExpr);
873   }
874   spanSet(&A, &X, &X);
875 }
876 expr(A) ::= expr(E) COLLATE ids(C). {
877   A.pExpr = sqlite3ExprAddCollateToken(pParse, E.pExpr, &C, 1);
878   A.zStart = E.zStart;
879   A.zEnd = &C.z[C.n];
880 }
881 %ifndef SQLITE_OMIT_CAST
882 expr(A) ::= CAST(X) LP expr(E) AS typetoken(T) RP(Y). {
883   A.pExpr = sqlite3PExpr(pParse, TK_CAST, E.pExpr, 0, &T);
884   spanSet(&A,&X,&Y);
885 }
886 %endif  SQLITE_OMIT_CAST
887 expr(A) ::= id(X) LP distinct(D) exprlist(Y) RP(E). {
888   if( Y && Y->nExpr>pParse->db->aLimit[SQLITE_LIMIT_FUNCTION_ARG] ){
889     sqlite3ErrorMsg(pParse, "too many arguments on function %T", &X);
890   }
891   A.pExpr = sqlite3ExprFunction(pParse, Y, &X);
892   spanSet(&A,&X,&E);
893   if( D==SF_Distinct && A.pExpr ){
894     A.pExpr->flags |= EP_Distinct;
895   }
896 }
897 expr(A) ::= id(X) LP STAR RP(E). {
898   A.pExpr = sqlite3ExprFunction(pParse, 0, &X);
899   spanSet(&A,&X,&E);
900 }
901 term(A) ::= CTIME_KW(OP). {
902   A.pExpr = sqlite3ExprFunction(pParse, 0, &OP);
903   spanSet(&A, &OP, &OP);
904 }
905 
906 %include {
907   /* This routine constructs a binary expression node out of two ExprSpan
908   ** objects and uses the result to populate a new ExprSpan object.
909   */
910   static void spanBinaryExpr(
911     ExprSpan *pOut,     /* Write the result here */
912     Parse *pParse,      /* The parsing context.  Errors accumulate here */
913     int op,             /* The binary operation */
914     ExprSpan *pLeft,    /* The left operand */
915     ExprSpan *pRight    /* The right operand */
916   ){
917     pOut->pExpr = sqlite3PExpr(pParse, op, pLeft->pExpr, pRight->pExpr, 0);
918     pOut->zStart = pLeft->zStart;
919     pOut->zEnd = pRight->zEnd;
920   }
921 }
922 
923 expr(A) ::= expr(X) AND(OP) expr(Y).    {spanBinaryExpr(&A,pParse,@OP,&X,&Y);}
924 expr(A) ::= expr(X) OR(OP) expr(Y).     {spanBinaryExpr(&A,pParse,@OP,&X,&Y);}
925 expr(A) ::= expr(X) LT|GT|GE|LE(OP) expr(Y).
926                                         {spanBinaryExpr(&A,pParse,@OP,&X,&Y);}
927 expr(A) ::= expr(X) EQ|NE(OP) expr(Y).  {spanBinaryExpr(&A,pParse,@OP,&X,&Y);}
928 expr(A) ::= expr(X) BITAND|BITOR|LSHIFT|RSHIFT(OP) expr(Y).
929                                         {spanBinaryExpr(&A,pParse,@OP,&X,&Y);}
930 expr(A) ::= expr(X) PLUS|MINUS(OP) expr(Y).
931                                         {spanBinaryExpr(&A,pParse,@OP,&X,&Y);}
932 expr(A) ::= expr(X) STAR|SLASH|REM(OP) expr(Y).
933                                         {spanBinaryExpr(&A,pParse,@OP,&X,&Y);}
934 expr(A) ::= expr(X) CONCAT(OP) expr(Y). {spanBinaryExpr(&A,pParse,@OP,&X,&Y);}
935 %type likeop {struct LikeOp}
936 likeop(A) ::= LIKE_KW|MATCH(X).     {A.eOperator = X; A.bNot = 0;}
937 likeop(A) ::= NOT LIKE_KW|MATCH(X). {A.eOperator = X; A.bNot = 1;}
938 expr(A) ::= expr(X) likeop(OP) expr(Y).  [LIKE_KW]  {
939   ExprList *pList;
940   pList = sqlite3ExprListAppend(pParse,0, Y.pExpr);
941   pList = sqlite3ExprListAppend(pParse,pList, X.pExpr);
942   A.pExpr = sqlite3ExprFunction(pParse, pList, &OP.eOperator);
943   if( OP.bNot ) A.pExpr = sqlite3PExpr(pParse, TK_NOT, A.pExpr, 0, 0);
944   A.zStart = X.zStart;
945   A.zEnd = Y.zEnd;
946   if( A.pExpr ) A.pExpr->flags |= EP_InfixFunc;
947 }
948 expr(A) ::= expr(X) likeop(OP) expr(Y) ESCAPE expr(E).  [LIKE_KW]  {
949   ExprList *pList;
950   pList = sqlite3ExprListAppend(pParse,0, Y.pExpr);
951   pList = sqlite3ExprListAppend(pParse,pList, X.pExpr);
952   pList = sqlite3ExprListAppend(pParse,pList, E.pExpr);
953   A.pExpr = sqlite3ExprFunction(pParse, pList, &OP.eOperator);
954   if( OP.bNot ) A.pExpr = sqlite3PExpr(pParse, TK_NOT, A.pExpr, 0, 0);
955   A.zStart = X.zStart;
956   A.zEnd = E.zEnd;
957   if( A.pExpr ) A.pExpr->flags |= EP_InfixFunc;
958 }
959 
960 %include {
961   /* Construct an expression node for a unary postfix operator
962   */
963   static void spanUnaryPostfix(
964     ExprSpan *pOut,        /* Write the new expression node here */
965     Parse *pParse,         /* Parsing context to record errors */
966     int op,                /* The operator */
967     ExprSpan *pOperand,    /* The operand */
968     Token *pPostOp         /* The operand token for setting the span */
969   ){
970     pOut->pExpr = sqlite3PExpr(pParse, op, pOperand->pExpr, 0, 0);
971     pOut->zStart = pOperand->zStart;
972     pOut->zEnd = &pPostOp->z[pPostOp->n];
973   }
974 }
975 
976 expr(A) ::= expr(X) ISNULL|NOTNULL(E).   {spanUnaryPostfix(&A,pParse,@E,&X,&E);}
977 expr(A) ::= expr(X) NOT NULL(E). {spanUnaryPostfix(&A,pParse,TK_NOTNULL,&X,&E);}
978 
979 %include {
980   /* A routine to convert a binary TK_IS or TK_ISNOT expression into a
981   ** unary TK_ISNULL or TK_NOTNULL expression. */
982   static void binaryToUnaryIfNull(Parse *pParse, Expr *pY, Expr *pA, int op){
983     sqlite3 *db = pParse->db;
984     if( pY && pA && pY->op==TK_NULL ){
985       pA->op = (u8)op;
986       sqlite3ExprDelete(db, pA->pRight);
987       pA->pRight = 0;
988     }
989   }
990 }
991 
992 //    expr1 IS expr2
993 //    expr1 IS NOT expr2
994 //
995 // If expr2 is NULL then code as TK_ISNULL or TK_NOTNULL.  If expr2
996 // is any other expression, code as TK_IS or TK_ISNOT.
997 //
998 expr(A) ::= expr(X) IS expr(Y).     {
999   spanBinaryExpr(&A,pParse,TK_IS,&X,&Y);
1000   binaryToUnaryIfNull(pParse, Y.pExpr, A.pExpr, TK_ISNULL);
1001 }
1002 expr(A) ::= expr(X) IS NOT expr(Y). {
1003   spanBinaryExpr(&A,pParse,TK_ISNOT,&X,&Y);
1004   binaryToUnaryIfNull(pParse, Y.pExpr, A.pExpr, TK_NOTNULL);
1005 }
1006 
1007 %include {
1008   /* Construct an expression node for a unary prefix operator
1009   */
1010   static void spanUnaryPrefix(
1011     ExprSpan *pOut,        /* Write the new expression node here */
1012     Parse *pParse,         /* Parsing context to record errors */
1013     int op,                /* The operator */
1014     ExprSpan *pOperand,    /* The operand */
1015     Token *pPreOp         /* The operand token for setting the span */
1016   ){
1017     pOut->pExpr = sqlite3PExpr(pParse, op, pOperand->pExpr, 0, 0);
1018     pOut->zStart = pPreOp->z;
1019     pOut->zEnd = pOperand->zEnd;
1020   }
1021 }
1022 
1023 
1024 
1025 expr(A) ::= NOT(B) expr(X).    {spanUnaryPrefix(&A,pParse,@B,&X,&B);}
1026 expr(A) ::= BITNOT(B) expr(X). {spanUnaryPrefix(&A,pParse,@B,&X,&B);}
1027 expr(A) ::= MINUS(B) expr(X). [BITNOT]
1028                                {spanUnaryPrefix(&A,pParse,TK_UMINUS,&X,&B);}
1029 expr(A) ::= PLUS(B) expr(X). [BITNOT]
1030                                {spanUnaryPrefix(&A,pParse,TK_UPLUS,&X,&B);}
1031 
1032 %type between_op {int}
1033 between_op(A) ::= BETWEEN.     {A = 0;}
1034 between_op(A) ::= NOT BETWEEN. {A = 1;}
1035 expr(A) ::= expr(W) between_op(N) expr(X) AND expr(Y). [BETWEEN] {
1036   ExprList *pList = sqlite3ExprListAppend(pParse,0, X.pExpr);
1037   pList = sqlite3ExprListAppend(pParse,pList, Y.pExpr);
1038   A.pExpr = sqlite3PExpr(pParse, TK_BETWEEN, W.pExpr, 0, 0);
1039   if( A.pExpr ){
1040     A.pExpr->x.pList = pList;
1041   }else{
1042     sqlite3ExprListDelete(pParse->db, pList);
1043   }
1044   if( N ) A.pExpr = sqlite3PExpr(pParse, TK_NOT, A.pExpr, 0, 0);
1045   A.zStart = W.zStart;
1046   A.zEnd = Y.zEnd;
1047 }
1048 %ifndef SQLITE_OMIT_SUBQUERY
1049   %type in_op {int}
1050   in_op(A) ::= IN.      {A = 0;}
1051   in_op(A) ::= NOT IN.  {A = 1;}
1052   expr(A) ::= expr(X) in_op(N) LP exprlist(Y) RP(E). [IN] {
1053     if( Y==0 ){
1054       /* Expressions of the form
1055       **
1056       **      expr1 IN ()
1057       **      expr1 NOT IN ()
1058       **
1059       ** simplify to constants 0 (false) and 1 (true), respectively,
1060       ** regardless of the value of expr1.
1061       */
1062       A.pExpr = sqlite3PExpr(pParse, TK_INTEGER, 0, 0, &sqlite3IntTokens[N]);
1063       sqlite3ExprDelete(pParse->db, X.pExpr);
1064     }else if( Y->nExpr==1 ){
1065       /* Expressions of the form:
1066       **
1067       **      expr1 IN (?1)
1068       **      expr1 NOT IN (?2)
1069       **
1070       ** with exactly one value on the RHS can be simplified to something
1071       ** like this:
1072       **
1073       **      expr1 == ?1
1074       **      expr1 <> ?2
1075       **
1076       ** But, the RHS of the == or <> is marked with the EP_Generic flag
1077       ** so that it may not contribute to the computation of comparison
1078       ** affinity or the collating sequence to use for comparison.  Otherwise,
1079       ** the semantics would be subtly different from IN or NOT IN.
1080       */
1081       Expr *pRHS = Y->a[0].pExpr;
1082       Y->a[0].pExpr = 0;
1083       sqlite3ExprListDelete(pParse->db, Y);
1084       /* pRHS cannot be NULL because a malloc error would have been detected
1085       ** before now and control would have never reached this point */
1086       if( ALWAYS(pRHS) ){
1087         pRHS->flags &= ~EP_Collate;
1088         pRHS->flags |= EP_Generic;
1089       }
1090       A.pExpr = sqlite3PExpr(pParse, N ? TK_NE : TK_EQ, X.pExpr, pRHS, 0);
1091     }else{
1092       A.pExpr = sqlite3PExpr(pParse, TK_IN, X.pExpr, 0, 0);
1093       if( A.pExpr ){
1094         A.pExpr->x.pList = Y;
1095         sqlite3ExprSetHeightAndFlags(pParse, A.pExpr);
1096       }else{
1097         sqlite3ExprListDelete(pParse->db, Y);
1098       }
1099       if( N ) A.pExpr = sqlite3PExpr(pParse, TK_NOT, A.pExpr, 0, 0);
1100     }
1101     A.zStart = X.zStart;
1102     A.zEnd = &E.z[E.n];
1103   }
1104   expr(A) ::= LP(B) select(X) RP(E). {
1105     A.pExpr = sqlite3PExpr(pParse, TK_SELECT, 0, 0, 0);
1106     if( A.pExpr ){
1107       A.pExpr->x.pSelect = X;
1108       ExprSetProperty(A.pExpr, EP_xIsSelect|EP_Subquery);
1109       sqlite3ExprSetHeightAndFlags(pParse, A.pExpr);
1110     }else{
1111       sqlite3SelectDelete(pParse->db, X);
1112     }
1113     A.zStart = B.z;
1114     A.zEnd = &E.z[E.n];
1115   }
1116   expr(A) ::= expr(X) in_op(N) LP select(Y) RP(E).  [IN] {
1117     A.pExpr = sqlite3PExpr(pParse, TK_IN, X.pExpr, 0, 0);
1118     if( A.pExpr ){
1119       A.pExpr->x.pSelect = Y;
1120       ExprSetProperty(A.pExpr, EP_xIsSelect|EP_Subquery);
1121       sqlite3ExprSetHeightAndFlags(pParse, A.pExpr);
1122     }else{
1123       sqlite3SelectDelete(pParse->db, Y);
1124     }
1125     if( N ) A.pExpr = sqlite3PExpr(pParse, TK_NOT, A.pExpr, 0, 0);
1126     A.zStart = X.zStart;
1127     A.zEnd = &E.z[E.n];
1128   }
1129   expr(A) ::= expr(X) in_op(N) nm(Y) dbnm(Z). [IN] {
1130     SrcList *pSrc = sqlite3SrcListAppend(pParse->db, 0,&Y,&Z);
1131     A.pExpr = sqlite3PExpr(pParse, TK_IN, X.pExpr, 0, 0);
1132     if( A.pExpr ){
1133       A.pExpr->x.pSelect = sqlite3SelectNew(pParse, 0,pSrc,0,0,0,0,0,0,0);
1134       ExprSetProperty(A.pExpr, EP_xIsSelect|EP_Subquery);
1135       sqlite3ExprSetHeightAndFlags(pParse, A.pExpr);
1136     }else{
1137       sqlite3SrcListDelete(pParse->db, pSrc);
1138     }
1139     if( N ) A.pExpr = sqlite3PExpr(pParse, TK_NOT, A.pExpr, 0, 0);
1140     A.zStart = X.zStart;
1141     A.zEnd = Z.z ? &Z.z[Z.n] : &Y.z[Y.n];
1142   }
1143   expr(A) ::= EXISTS(B) LP select(Y) RP(E). {
1144     Expr *p = A.pExpr = sqlite3PExpr(pParse, TK_EXISTS, 0, 0, 0);
1145     if( p ){
1146       p->x.pSelect = Y;
1147       ExprSetProperty(p, EP_xIsSelect|EP_Subquery);
1148       sqlite3ExprSetHeightAndFlags(pParse, p);
1149     }else{
1150       sqlite3SelectDelete(pParse->db, Y);
1151     }
1152     A.zStart = B.z;
1153     A.zEnd = &E.z[E.n];
1154   }
1155 %endif SQLITE_OMIT_SUBQUERY
1156 
1157 /* CASE expressions */
1158 expr(A) ::= CASE(C) case_operand(X) case_exprlist(Y) case_else(Z) END(E). {
1159   A.pExpr = sqlite3PExpr(pParse, TK_CASE, X, 0, 0);
1160   if( A.pExpr ){
1161     A.pExpr->x.pList = Z ? sqlite3ExprListAppend(pParse,Y,Z) : Y;
1162     sqlite3ExprSetHeightAndFlags(pParse, A.pExpr);
1163   }else{
1164     sqlite3ExprListDelete(pParse->db, Y);
1165     sqlite3ExprDelete(pParse->db, Z);
1166   }
1167   A.zStart = C.z;
1168   A.zEnd = &E.z[E.n];
1169 }
1170 %type case_exprlist {ExprList*}
1171 %destructor case_exprlist {sqlite3ExprListDelete(pParse->db, $$);}
1172 case_exprlist(A) ::= case_exprlist(X) WHEN expr(Y) THEN expr(Z). {
1173   A = sqlite3ExprListAppend(pParse,X, Y.pExpr);
1174   A = sqlite3ExprListAppend(pParse,A, Z.pExpr);
1175 }
1176 case_exprlist(A) ::= WHEN expr(Y) THEN expr(Z). {
1177   A = sqlite3ExprListAppend(pParse,0, Y.pExpr);
1178   A = sqlite3ExprListAppend(pParse,A, Z.pExpr);
1179 }
1180 %type case_else {Expr*}
1181 %destructor case_else {sqlite3ExprDelete(pParse->db, $$);}
1182 case_else(A) ::=  ELSE expr(X).         {A = X.pExpr;}
1183 case_else(A) ::=  .                     {A = 0;}
1184 %type case_operand {Expr*}
1185 %destructor case_operand {sqlite3ExprDelete(pParse->db, $$);}
1186 case_operand(A) ::= expr(X).            {A = X.pExpr;}
1187 case_operand(A) ::= .                   {A = 0;}
1188 
1189 %type exprlist {ExprList*}
1190 %destructor exprlist {sqlite3ExprListDelete(pParse->db, $$);}
1191 %type nexprlist {ExprList*}
1192 %destructor nexprlist {sqlite3ExprListDelete(pParse->db, $$);}
1193 
1194 exprlist(A) ::= nexprlist(X).                {A = X;}
1195 exprlist(A) ::= .                            {A = 0;}
1196 nexprlist(A) ::= nexprlist(X) COMMA expr(Y).
1197     {A = sqlite3ExprListAppend(pParse,X,Y.pExpr);}
1198 nexprlist(A) ::= expr(Y).
1199     {A = sqlite3ExprListAppend(pParse,0,Y.pExpr);}
1200 
1201 
1202 ///////////////////////////// The CREATE INDEX command ///////////////////////
1203 //
1204 cmd ::= createkw(S) uniqueflag(U) INDEX ifnotexists(NE) nm(X) dbnm(D)
1205         ON nm(Y) LP idxlist(Z) RP where_opt(W). {
1206   sqlite3CreateIndex(pParse, &X, &D,
1207                      sqlite3SrcListAppend(pParse->db,0,&Y,0), Z, U,
1208                       &S, W, SQLITE_SO_ASC, NE);
1209 }
1210 
1211 %type uniqueflag {int}
1212 uniqueflag(A) ::= UNIQUE.  {A = OE_Abort;}
1213 uniqueflag(A) ::= .        {A = OE_None;}
1214 
1215 %type idxlist {ExprList*}
1216 %destructor idxlist {sqlite3ExprListDelete(pParse->db, $$);}
1217 %type idxlist_opt {ExprList*}
1218 %destructor idxlist_opt {sqlite3ExprListDelete(pParse->db, $$);}
1219 
1220 idxlist_opt(A) ::= .                         {A = 0;}
1221 idxlist_opt(A) ::= LP idxlist(X) RP.         {A = X;}
1222 idxlist(A) ::= idxlist(X) COMMA nm(Y) collate(C) sortorder(Z).  {
1223   Expr *p = sqlite3ExprAddCollateToken(pParse, 0, &C, 1);
1224   A = sqlite3ExprListAppend(pParse,X, p);
1225   sqlite3ExprListSetName(pParse,A,&Y,1);
1226   sqlite3ExprListCheckLength(pParse, A, "index");
1227   if( A ) A->a[A->nExpr-1].sortOrder = (u8)Z;
1228 }
1229 idxlist(A) ::= nm(Y) collate(C) sortorder(Z). {
1230   Expr *p = sqlite3ExprAddCollateToken(pParse, 0, &C, 1);
1231   A = sqlite3ExprListAppend(pParse,0, p);
1232   sqlite3ExprListSetName(pParse, A, &Y, 1);
1233   sqlite3ExprListCheckLength(pParse, A, "index");
1234   if( A ) A->a[A->nExpr-1].sortOrder = (u8)Z;
1235 }
1236 
1237 %type collate {Token}
1238 collate(C) ::= .                 {C.z = 0; C.n = 0;}
1239 collate(C) ::= COLLATE ids(X).   {C = X;}
1240 
1241 
1242 ///////////////////////////// The DROP INDEX command /////////////////////////
1243 //
1244 cmd ::= DROP INDEX ifexists(E) fullname(X).   {sqlite3DropIndex(pParse, X, E);}
1245 
1246 ///////////////////////////// The VACUUM command /////////////////////////////
1247 //
1248 %ifndef SQLITE_OMIT_VACUUM
1249 %ifndef SQLITE_OMIT_ATTACH
1250 cmd ::= VACUUM.                {sqlite3Vacuum(pParse);}
1251 cmd ::= VACUUM nm.             {sqlite3Vacuum(pParse);}
1252 %endif  SQLITE_OMIT_ATTACH
1253 %endif  SQLITE_OMIT_VACUUM
1254 
1255 ///////////////////////////// The PRAGMA command /////////////////////////////
1256 //
1257 %ifndef SQLITE_OMIT_PRAGMA
1258 cmd ::= PRAGMA nm(X) dbnm(Z).                {sqlite3Pragma(pParse,&X,&Z,0,0);}
1259 cmd ::= PRAGMA nm(X) dbnm(Z) EQ nmnum(Y).    {sqlite3Pragma(pParse,&X,&Z,&Y,0);}
1260 cmd ::= PRAGMA nm(X) dbnm(Z) LP nmnum(Y) RP. {sqlite3Pragma(pParse,&X,&Z,&Y,0);}
1261 cmd ::= PRAGMA nm(X) dbnm(Z) EQ minus_num(Y).
1262                                              {sqlite3Pragma(pParse,&X,&Z,&Y,1);}
1263 cmd ::= PRAGMA nm(X) dbnm(Z) LP minus_num(Y) RP.
1264                                              {sqlite3Pragma(pParse,&X,&Z,&Y,1);}
1265 
1266 nmnum(A) ::= plus_num(X).             {A = X;}
1267 nmnum(A) ::= nm(X).                   {A = X;}
1268 nmnum(A) ::= ON(X).                   {A = X;}
1269 nmnum(A) ::= DELETE(X).               {A = X;}
1270 nmnum(A) ::= DEFAULT(X).              {A = X;}
1271 %endif SQLITE_OMIT_PRAGMA
1272 %token_class number INTEGER|FLOAT.
1273 plus_num(A) ::= PLUS number(X).       {A = X;}
1274 plus_num(A) ::= number(X).            {A = X;}
1275 minus_num(A) ::= MINUS number(X).     {A = X;}
1276 //////////////////////////// The CREATE TRIGGER command /////////////////////
1277 
1278 %ifndef SQLITE_OMIT_TRIGGER
1279 
1280 cmd ::= createkw trigger_decl(A) BEGIN trigger_cmd_list(S) END(Z). {
1281   Token all;
1282   all.z = A.z;
1283   all.n = (int)(Z.z - A.z) + Z.n;
1284   sqlite3FinishTrigger(pParse, S, &all);
1285 }
1286 
1287 trigger_decl(A) ::= temp(T) TRIGGER ifnotexists(NOERR) nm(B) dbnm(Z)
1288                     trigger_time(C) trigger_event(D)
1289                     ON fullname(E) foreach_clause when_clause(G). {
1290   sqlite3BeginTrigger(pParse, &B, &Z, C, D.a, D.b, E, G, T, NOERR);
1291   A = (Z.n==0?B:Z);
1292 }
1293 
1294 %type trigger_time {int}
1295 trigger_time(A) ::= BEFORE.      { A = TK_BEFORE; }
1296 trigger_time(A) ::= AFTER.       { A = TK_AFTER;  }
1297 trigger_time(A) ::= INSTEAD OF.  { A = TK_INSTEAD;}
1298 trigger_time(A) ::= .            { A = TK_BEFORE; }
1299 
1300 %type trigger_event {struct TrigEvent}
1301 %destructor trigger_event {sqlite3IdListDelete(pParse->db, $$.b);}
1302 trigger_event(A) ::= DELETE|INSERT(OP).       {A.a = @OP; A.b = 0;}
1303 trigger_event(A) ::= UPDATE(OP).              {A.a = @OP; A.b = 0;}
1304 trigger_event(A) ::= UPDATE OF idlist(X). {A.a = TK_UPDATE; A.b = X;}
1305 
1306 foreach_clause ::= .
1307 foreach_clause ::= FOR EACH ROW.
1308 
1309 %type when_clause {Expr*}
1310 %destructor when_clause {sqlite3ExprDelete(pParse->db, $$);}
1311 when_clause(A) ::= .             { A = 0; }
1312 when_clause(A) ::= WHEN expr(X). { A = X.pExpr; }
1313 
1314 %type trigger_cmd_list {TriggerStep*}
1315 %destructor trigger_cmd_list {sqlite3DeleteTriggerStep(pParse->db, $$);}
1316 trigger_cmd_list(A) ::= trigger_cmd_list(Y) trigger_cmd(X) SEMI. {
1317   assert( Y!=0 );
1318   Y->pLast->pNext = X;
1319   Y->pLast = X;
1320   A = Y;
1321 }
1322 trigger_cmd_list(A) ::= trigger_cmd(X) SEMI. {
1323   assert( X!=0 );
1324   X->pLast = X;
1325   A = X;
1326 }
1327 
1328 // Disallow qualified table names on INSERT, UPDATE, and DELETE statements
1329 // within a trigger.  The table to INSERT, UPDATE, or DELETE is always in
1330 // the same database as the table that the trigger fires on.
1331 //
1332 %type trnm {Token}
1333 trnm(A) ::= nm(X).   {A = X;}
1334 trnm(A) ::= nm DOT nm(X). {
1335   A = X;
1336   sqlite3ErrorMsg(pParse,
1337         "qualified table names are not allowed on INSERT, UPDATE, and DELETE "
1338         "statements within triggers");
1339 }
1340 
1341 // Disallow the INDEX BY and NOT INDEXED clauses on UPDATE and DELETE
1342 // statements within triggers.  We make a specific error message for this
1343 // since it is an exception to the default grammar rules.
1344 //
1345 tridxby ::= .
1346 tridxby ::= INDEXED BY nm. {
1347   sqlite3ErrorMsg(pParse,
1348         "the INDEXED BY clause is not allowed on UPDATE or DELETE statements "
1349         "within triggers");
1350 }
1351 tridxby ::= NOT INDEXED. {
1352   sqlite3ErrorMsg(pParse,
1353         "the NOT INDEXED clause is not allowed on UPDATE or DELETE statements "
1354         "within triggers");
1355 }
1356 
1357 
1358 
1359 %type trigger_cmd {TriggerStep*}
1360 %destructor trigger_cmd {sqlite3DeleteTriggerStep(pParse->db, $$);}
1361 // UPDATE
1362 trigger_cmd(A) ::=
1363    UPDATE orconf(R) trnm(X) tridxby SET setlist(Y) where_opt(Z).
1364    { A = sqlite3TriggerUpdateStep(pParse->db, &X, Y, Z, R); }
1365 
1366 // INSERT
1367 trigger_cmd(A) ::= insert_cmd(R) INTO trnm(X) inscollist_opt(F) select(S).
1368                {A = sqlite3TriggerInsertStep(pParse->db, &X, F, S, R);}
1369 
1370 // DELETE
1371 trigger_cmd(A) ::= DELETE FROM trnm(X) tridxby where_opt(Y).
1372                {A = sqlite3TriggerDeleteStep(pParse->db, &X, Y);}
1373 
1374 // SELECT
1375 trigger_cmd(A) ::= select(X).  {A = sqlite3TriggerSelectStep(pParse->db, X); }
1376 
1377 // The special RAISE expression that may occur in trigger programs
1378 expr(A) ::= RAISE(X) LP IGNORE RP(Y).  {
1379   A.pExpr = sqlite3PExpr(pParse, TK_RAISE, 0, 0, 0);
1380   if( A.pExpr ){
1381     A.pExpr->affinity = OE_Ignore;
1382   }
1383   A.zStart = X.z;
1384   A.zEnd = &Y.z[Y.n];
1385 }
1386 expr(A) ::= RAISE(X) LP raisetype(T) COMMA nm(Z) RP(Y).  {
1387   A.pExpr = sqlite3PExpr(pParse, TK_RAISE, 0, 0, &Z);
1388   if( A.pExpr ) {
1389     A.pExpr->affinity = (char)T;
1390   }
1391   A.zStart = X.z;
1392   A.zEnd = &Y.z[Y.n];
1393 }
1394 %endif  !SQLITE_OMIT_TRIGGER
1395 
1396 %type raisetype {int}
1397 raisetype(A) ::= ROLLBACK.  {A = OE_Rollback;}
1398 raisetype(A) ::= ABORT.     {A = OE_Abort;}
1399 raisetype(A) ::= FAIL.      {A = OE_Fail;}
1400 
1401 
1402 ////////////////////////  DROP TRIGGER statement //////////////////////////////
1403 %ifndef SQLITE_OMIT_TRIGGER
1404 cmd ::= DROP TRIGGER ifexists(NOERR) fullname(X). {
1405   sqlite3DropTrigger(pParse,X,NOERR);
1406 }
1407 %endif  !SQLITE_OMIT_TRIGGER
1408 
1409 //////////////////////// ATTACH DATABASE file AS name /////////////////////////
1410 %ifndef SQLITE_OMIT_ATTACH
1411 cmd ::= ATTACH database_kw_opt expr(F) AS expr(D) key_opt(K). {
1412   sqlite3Attach(pParse, F.pExpr, D.pExpr, K);
1413 }
1414 cmd ::= DETACH database_kw_opt expr(D). {
1415   sqlite3Detach(pParse, D.pExpr);
1416 }
1417 
1418 %type key_opt {Expr*}
1419 %destructor key_opt {sqlite3ExprDelete(pParse->db, $$);}
1420 key_opt(A) ::= .                     { A = 0; }
1421 key_opt(A) ::= KEY expr(X).          { A = X.pExpr; }
1422 
1423 database_kw_opt ::= DATABASE.
1424 database_kw_opt ::= .
1425 %endif SQLITE_OMIT_ATTACH
1426 
1427 ////////////////////////// REINDEX collation //////////////////////////////////
1428 %ifndef SQLITE_OMIT_REINDEX
1429 cmd ::= REINDEX.                {sqlite3Reindex(pParse, 0, 0);}
1430 cmd ::= REINDEX nm(X) dbnm(Y).  {sqlite3Reindex(pParse, &X, &Y);}
1431 %endif  SQLITE_OMIT_REINDEX
1432 
1433 /////////////////////////////////// ANALYZE ///////////////////////////////////
1434 %ifndef SQLITE_OMIT_ANALYZE
1435 cmd ::= ANALYZE.                {sqlite3Analyze(pParse, 0, 0);}
1436 cmd ::= ANALYZE nm(X) dbnm(Y).  {sqlite3Analyze(pParse, &X, &Y);}
1437 %endif
1438 
1439 //////////////////////// ALTER TABLE table ... ////////////////////////////////
1440 %ifndef SQLITE_OMIT_ALTERTABLE
1441 cmd ::= ALTER TABLE fullname(X) RENAME TO nm(Z). {
1442   sqlite3AlterRenameTable(pParse,X,&Z);
1443 }
1444 cmd ::= ALTER TABLE add_column_fullname ADD kwcolumn_opt column(Y). {
1445   sqlite3AlterFinishAddColumn(pParse, &Y);
1446 }
1447 add_column_fullname ::= fullname(X). {
1448   pParse->db->lookaside.bEnabled = 0;
1449   sqlite3AlterBeginAddColumn(pParse, X);
1450 }
1451 kwcolumn_opt ::= .
1452 kwcolumn_opt ::= COLUMNKW.
1453 %endif  SQLITE_OMIT_ALTERTABLE
1454 
1455 //////////////////////// CREATE VIRTUAL TABLE ... /////////////////////////////
1456 %ifndef SQLITE_OMIT_VIRTUALTABLE
1457 cmd ::= create_vtab.                       {sqlite3VtabFinishParse(pParse,0);}
1458 cmd ::= create_vtab LP vtabarglist RP(X).  {sqlite3VtabFinishParse(pParse,&X);}
1459 create_vtab ::= createkw VIRTUAL TABLE ifnotexists(E)
1460                 nm(X) dbnm(Y) USING nm(Z). {
1461     sqlite3VtabBeginParse(pParse, &X, &Y, &Z, E);
1462 }
1463 vtabarglist ::= vtabarg.
1464 vtabarglist ::= vtabarglist COMMA vtabarg.
1465 vtabarg ::= .                       {sqlite3VtabArgInit(pParse);}
1466 vtabarg ::= vtabarg vtabargtoken.
1467 vtabargtoken ::= ANY(X).            {sqlite3VtabArgExtend(pParse,&X);}
1468 vtabargtoken ::= lp anylist RP(X).  {sqlite3VtabArgExtend(pParse,&X);}
1469 lp ::= LP(X).                       {sqlite3VtabArgExtend(pParse,&X);}
1470 anylist ::= .
1471 anylist ::= anylist LP anylist RP.
1472 anylist ::= anylist ANY.
1473 %endif  SQLITE_OMIT_VIRTUALTABLE
1474 
1475 
1476 //////////////////////// COMMON TABLE EXPRESSIONS ////////////////////////////
1477 %type with {With*}
1478 %type wqlist {With*}
1479 %destructor with {sqlite3WithDelete(pParse->db, $$);}
1480 %destructor wqlist {sqlite3WithDelete(pParse->db, $$);}
1481 
1482 with(A) ::= . {A = 0;}
1483 %ifndef SQLITE_OMIT_CTE
1484 with(A) ::= WITH wqlist(W).              { A = W; }
1485 with(A) ::= WITH RECURSIVE wqlist(W).    { A = W; }
1486 
1487 wqlist(A) ::= nm(X) idxlist_opt(Y) AS LP select(Z) RP. {
1488   A = sqlite3WithAdd(pParse, 0, &X, Y, Z);
1489 }
1490 wqlist(A) ::= wqlist(W) COMMA nm(X) idxlist_opt(Y) AS LP select(Z) RP. {
1491   A = sqlite3WithAdd(pParse, W, &X, Y, Z);
1492 }
1493 %endif  SQLITE_OMIT_CTE
1494