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