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