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