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