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