xref: /sqlite-3.40.0/src/parse.y (revision 42829635)
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 not;         /* 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(Y). {
159   sqlite3EndTable(pParse,&X,&Y,0);
160 }
161 create_table_args ::= AS select(S). {
162   sqlite3EndTable(pParse,0,0,S);
163   sqlite3SelectDelete(pParse->db, S);
164 }
165 columnlist ::= columnlist COMMA column.
166 columnlist ::= column.
167 
168 // A "column" is a complete description of a single column in a
169 // CREATE TABLE statement.  This includes the column name, its
170 // datatype, and other keywords such as PRIMARY KEY, UNIQUE, REFERENCES,
171 // NOT NULL and so forth.
172 //
173 column(A) ::= columnid(X) type carglist. {
174   A.z = X.z;
175   A.n = (int)(pParse->sLastToken.z-X.z) + pParse->sLastToken.n;
176 }
177 columnid(A) ::= nm(X). {
178   sqlite3AddColumn(pParse,&X);
179   A = X;
180 }
181 
182 
183 // An IDENTIFIER can be a generic identifier, or one of several
184 // keywords.  Any non-standard keyword can also be an identifier.
185 //
186 %type id {Token}
187 id(A) ::= ID(X).         {A = X;}
188 id(A) ::= INDEXED(X).    {A = X;}
189 
190 // The following directive causes tokens ABORT, AFTER, ASC, etc. to
191 // fallback to ID if they will not parse as their original value.
192 // This obviates the need for the "id" nonterminal.
193 //
194 %fallback ID
195   ABORT ACTION AFTER ANALYZE ASC ATTACH BEFORE BEGIN BY CASCADE CAST COLUMNKW
196   CONFLICT DATABASE DEFERRED DESC DETACH EACH END EXCLUSIVE EXPLAIN FAIL FOR
197   IGNORE IMMEDIATE INITIALLY INSTEAD LIKE_KW MATCH NO PLAN
198   QUERY KEY OF OFFSET PRAGMA RAISE RELEASE REPLACE RESTRICT ROW ROLLBACK
199   SAVEPOINT TEMP TRIGGER VACUUM VIEW VIRTUAL
200 %ifdef SQLITE_OMIT_COMPOUND_SELECT
201   EXCEPT INTERSECT UNION
202 %endif SQLITE_OMIT_COMPOUND_SELECT
203   REINDEX RENAME CTIME_KW IF
204   .
205 %wildcard ANY.
206 
207 // Define operator precedence early so that this is the first occurance
208 // of the operator tokens in the grammer.  Keeping the operators together
209 // causes them to be assigned integer values that are close together,
210 // which keeps parser tables smaller.
211 //
212 // The token values assigned to these symbols is determined by the order
213 // in which lemon first sees them.  It must be the case that ISNULL/NOTNULL,
214 // NE/EQ, GT/LE, and GE/LT are separated by only a single value.  See
215 // the sqlite3ExprIfFalse() routine for additional information on this
216 // constraint.
217 //
218 %left OR.
219 %left AND.
220 %right NOT.
221 %left IS MATCH LIKE_KW BETWEEN IN ISNULL NOTNULL NE EQ.
222 %left GT LE LT GE.
223 %right ESCAPE.
224 %left BITAND BITOR LSHIFT RSHIFT.
225 %left PLUS MINUS.
226 %left STAR SLASH REM.
227 %left CONCAT.
228 %left COLLATE.
229 %right BITNOT.
230 
231 // And "ids" is an identifer-or-string.
232 //
233 %type ids {Token}
234 ids(A) ::= ID|STRING(X).   {A = X;}
235 
236 // The name of a column or table can be any of the following:
237 //
238 %type nm {Token}
239 nm(A) ::= id(X).         {A = X;}
240 nm(A) ::= STRING(X).     {A = X;}
241 nm(A) ::= JOIN_KW(X).    {A = X;}
242 
243 // A typetoken is really one or more tokens that form a type name such
244 // as can be found after the column name in a CREATE TABLE statement.
245 // Multiple tokens are concatenated to form the value of the typetoken.
246 //
247 %type typetoken {Token}
248 type ::= .
249 type ::= typetoken(X).                   {sqlite3AddColumnType(pParse,&X);}
250 typetoken(A) ::= typename(X).   {A = X;}
251 typetoken(A) ::= typename(X) LP signed RP(Y). {
252   A.z = X.z;
253   A.n = (int)(&Y.z[Y.n] - X.z);
254 }
255 typetoken(A) ::= typename(X) LP signed COMMA signed RP(Y). {
256   A.z = X.z;
257   A.n = (int)(&Y.z[Y.n] - X.z);
258 }
259 %type typename {Token}
260 typename(A) ::= ids(X).             {A = X;}
261 typename(A) ::= typename(X) ids(Y). {A.z=X.z; A.n=Y.n+(int)(Y.z-X.z);}
262 signed ::= plus_num.
263 signed ::= minus_num.
264 
265 // "carglist" is a list of additional constraints that come after the
266 // column name and column type in a CREATE TABLE statement.
267 //
268 carglist ::= carglist carg.
269 carglist ::= .
270 carg ::= CONSTRAINT nm ccons.
271 carg ::= ccons.
272 ccons ::= DEFAULT term(X).            {sqlite3AddDefaultValue(pParse,&X);}
273 ccons ::= DEFAULT LP expr(X) RP.      {sqlite3AddDefaultValue(pParse,&X);}
274 ccons ::= DEFAULT PLUS term(X).       {sqlite3AddDefaultValue(pParse,&X);}
275 ccons ::= DEFAULT MINUS(A) term(X).      {
276   ExprSpan v;
277   v.pExpr = sqlite3PExpr(pParse, TK_UMINUS, X.pExpr, 0, 0);
278   v.zStart = A.z;
279   v.zEnd = X.zEnd;
280   sqlite3AddDefaultValue(pParse,&v);
281 }
282 ccons ::= DEFAULT id(X).              {
283   ExprSpan v;
284   spanExpr(&v, pParse, TK_STRING, &X);
285   sqlite3AddDefaultValue(pParse,&v);
286 }
287 
288 // In addition to the type name, we also care about the primary key and
289 // UNIQUE constraints.
290 //
291 ccons ::= NULL onconf.
292 ccons ::= NOT NULL onconf(R).    {sqlite3AddNotNull(pParse, R);}
293 ccons ::= PRIMARY KEY sortorder(Z) onconf(R) autoinc(I).
294                                  {sqlite3AddPrimaryKey(pParse,0,R,I,Z);}
295 ccons ::= UNIQUE onconf(R).      {sqlite3CreateIndex(pParse,0,0,0,0,R,0,0,0,0);}
296 ccons ::= CHECK LP expr(X) RP.   {sqlite3AddCheckConstraint(pParse,X.pExpr);}
297 ccons ::= REFERENCES nm(T) idxlist_opt(TA) refargs(R).
298                                  {sqlite3CreateForeignKey(pParse,0,&T,TA,R);}
299 ccons ::= defer_subclause(D).    {sqlite3DeferForeignKey(pParse,D);}
300 ccons ::= COLLATE ids(C).        {sqlite3AddCollateType(pParse, &C);}
301 
302 // The optional AUTOINCREMENT keyword
303 %type autoinc {int}
304 autoinc(X) ::= .          {X = 0;}
305 autoinc(X) ::= AUTOINCR.  {X = 1;}
306 
307 // The next group of rules parses the arguments to a REFERENCES clause
308 // that determine if the referential integrity checking is deferred or
309 // or immediate and which determine what action to take if a ref-integ
310 // check fails.
311 //
312 %type refargs {int}
313 refargs(A) ::= .                  { A = OE_None*0x0101; /* EV: R-19803-45884 */}
314 refargs(A) ::= refargs(X) refarg(Y). { A = (X & ~Y.mask) | Y.value; }
315 %type refarg {struct {int value; int mask;}}
316 refarg(A) ::= MATCH nm.              { A.value = 0;     A.mask = 0x000000; }
317 refarg(A) ::= ON INSERT refact.      { A.value = 0;     A.mask = 0x000000; }
318 refarg(A) ::= ON DELETE refact(X).   { A.value = X;     A.mask = 0x0000ff; }
319 refarg(A) ::= ON UPDATE refact(X).   { A.value = X<<8;  A.mask = 0x00ff00; }
320 %type refact {int}
321 refact(A) ::= SET NULL.              { A = OE_SetNull;  /* EV: R-33326-45252 */}
322 refact(A) ::= SET DEFAULT.           { A = OE_SetDflt;  /* EV: R-33326-45252 */}
323 refact(A) ::= CASCADE.               { A = OE_Cascade;  /* EV: R-33326-45252 */}
324 refact(A) ::= RESTRICT.              { A = OE_Restrict; /* EV: R-33326-45252 */}
325 refact(A) ::= NO ACTION.             { A = OE_None;     /* EV: R-33326-45252 */}
326 %type defer_subclause {int}
327 defer_subclause(A) ::= NOT DEFERRABLE init_deferred_pred_opt.     {A = 0;}
328 defer_subclause(A) ::= DEFERRABLE init_deferred_pred_opt(X).      {A = X;}
329 %type init_deferred_pred_opt {int}
330 init_deferred_pred_opt(A) ::= .                       {A = 0;}
331 init_deferred_pred_opt(A) ::= INITIALLY DEFERRED.     {A = 1;}
332 init_deferred_pred_opt(A) ::= INITIALLY IMMEDIATE.    {A = 0;}
333 
334 // For the time being, the only constraint we care about is the primary
335 // key and UNIQUE.  Both create indices.
336 //
337 conslist_opt(A) ::= .                   {A.n = 0; A.z = 0;}
338 conslist_opt(A) ::= COMMA(X) conslist.  {A = X;}
339 conslist ::= conslist COMMA tcons.
340 conslist ::= conslist tcons.
341 conslist ::= tcons.
342 tcons ::= CONSTRAINT nm.
343 tcons ::= PRIMARY KEY LP idxlist(X) autoinc(I) RP onconf(R).
344                                  {sqlite3AddPrimaryKey(pParse,X,R,I,0);}
345 tcons ::= UNIQUE LP idxlist(X) RP onconf(R).
346                                  {sqlite3CreateIndex(pParse,0,0,0,X,R,0,0,0,0);}
347 tcons ::= CHECK LP expr(E) RP onconf.
348                                  {sqlite3AddCheckConstraint(pParse,E.pExpr);}
349 tcons ::= FOREIGN KEY LP idxlist(FA) RP
350           REFERENCES nm(T) idxlist_opt(TA) refargs(R) defer_subclause_opt(D). {
351     sqlite3CreateForeignKey(pParse, FA, &T, TA, R);
352     sqlite3DeferForeignKey(pParse, D);
353 }
354 %type defer_subclause_opt {int}
355 defer_subclause_opt(A) ::= .                    {A = 0;}
356 defer_subclause_opt(A) ::= defer_subclause(X).  {A = X;}
357 
358 // The following is a non-standard extension that allows us to declare the
359 // default behavior when there is a constraint conflict.
360 //
361 %type onconf {int}
362 %type orconf {u8}
363 %type resolvetype {int}
364 onconf(A) ::= .                              {A = OE_Default;}
365 onconf(A) ::= ON CONFLICT resolvetype(X).    {A = X;}
366 orconf(A) ::= .                              {A = OE_Default;}
367 orconf(A) ::= OR resolvetype(X).             {A = (u8)X;}
368 resolvetype(A) ::= raisetype(X).             {A = X;}
369 resolvetype(A) ::= IGNORE.                   {A = OE_Ignore;}
370 resolvetype(A) ::= REPLACE.                  {A = OE_Replace;}
371 
372 ////////////////////////// The DROP TABLE /////////////////////////////////////
373 //
374 cmd ::= DROP TABLE ifexists(E) fullname(X). {
375   sqlite3DropTable(pParse, X, 0, E);
376 }
377 %type ifexists {int}
378 ifexists(A) ::= IF EXISTS.   {A = 1;}
379 ifexists(A) ::= .            {A = 0;}
380 
381 ///////////////////// The CREATE VIEW statement /////////////////////////////
382 //
383 %ifndef SQLITE_OMIT_VIEW
384 cmd ::= createkw(X) temp(T) VIEW ifnotexists(E) nm(Y) dbnm(Z) AS select(S). {
385   sqlite3CreateView(pParse, &X, &Y, &Z, S, T, E);
386 }
387 cmd ::= DROP VIEW ifexists(E) fullname(X). {
388   sqlite3DropTable(pParse, X, 1, E);
389 }
390 %endif  SQLITE_OMIT_VIEW
391 
392 //////////////////////// The SELECT statement /////////////////////////////////
393 //
394 cmd ::= select(X).  {
395   SelectDest dest = {SRT_Output, 0, 0, 0, 0};
396   sqlite3Select(pParse, X, &dest);
397   sqlite3ExplainBegin(pParse->pVdbe);
398   sqlite3ExplainSelect(pParse->pVdbe, X);
399   sqlite3ExplainFinish(pParse->pVdbe);
400   sqlite3SelectDelete(pParse->db, X);
401 }
402 
403 %type select {Select*}
404 %destructor select {sqlite3SelectDelete(pParse->db, $$);}
405 %type oneselect {Select*}
406 %destructor oneselect {sqlite3SelectDelete(pParse->db, $$);}
407 
408 select(A) ::= oneselect(X).                      {A = X;}
409 %ifndef SQLITE_OMIT_COMPOUND_SELECT
410 select(A) ::= select(X) multiselect_op(Y) oneselect(Z).  {
411   if( Z ){
412     Z->op = (u8)Y;
413     Z->pPrior = X;
414   }else{
415     sqlite3SelectDelete(pParse->db, X);
416   }
417   A = Z;
418 }
419 %type multiselect_op {int}
420 multiselect_op(A) ::= UNION(OP).             {A = @OP;}
421 multiselect_op(A) ::= UNION ALL.             {A = TK_ALL;}
422 multiselect_op(A) ::= EXCEPT|INTERSECT(OP).  {A = @OP;}
423 %endif SQLITE_OMIT_COMPOUND_SELECT
424 oneselect(A) ::= SELECT distinct(D) selcollist(W) from(X) where_opt(Y)
425                  groupby_opt(P) having_opt(Q) orderby_opt(Z) limit_opt(L). {
426   A = sqlite3SelectNew(pParse,W,X,Y,P,Q,Z,D,L.pLimit,L.pOffset);
427 }
428 
429 // The "distinct" nonterminal is true (1) if the DISTINCT keyword is
430 // present and false (0) if it is not.
431 //
432 %type distinct {int}
433 distinct(A) ::= DISTINCT.   {A = 1;}
434 distinct(A) ::= ALL.        {A = 0;}
435 distinct(A) ::= .           {A = 0;}
436 
437 // selcollist is a list of expressions that are to become the return
438 // values of the SELECT statement.  The "*" in statements like
439 // "SELECT * FROM ..." is encoded as a special expression with an
440 // opcode of TK_ALL.
441 //
442 %type selcollist {ExprList*}
443 %destructor selcollist {sqlite3ExprListDelete(pParse->db, $$);}
444 %type sclp {ExprList*}
445 %destructor sclp {sqlite3ExprListDelete(pParse->db, $$);}
446 sclp(A) ::= selcollist(X) COMMA.             {A = X;}
447 sclp(A) ::= .                                {A = 0;}
448 selcollist(A) ::= sclp(P) expr(X) as(Y).     {
449    A = sqlite3ExprListAppend(pParse, P, X.pExpr);
450    if( Y.n>0 ) sqlite3ExprListSetName(pParse, A, &Y, 1);
451    sqlite3ExprListSetSpan(pParse,A,&X);
452 }
453 selcollist(A) ::= sclp(P) STAR. {
454   Expr *p = sqlite3Expr(pParse->db, TK_ALL, 0);
455   A = sqlite3ExprListAppend(pParse, P, p);
456 }
457 selcollist(A) ::= sclp(P) nm(X) DOT STAR(Y). {
458   Expr *pRight = sqlite3PExpr(pParse, TK_ALL, 0, 0, &Y);
459   Expr *pLeft = sqlite3PExpr(pParse, TK_ID, 0, 0, &X);
460   Expr *pDot = sqlite3PExpr(pParse, TK_DOT, pLeft, pRight, 0);
461   A = sqlite3ExprListAppend(pParse,P, pDot);
462 }
463 
464 // An option "AS <id>" phrase that can follow one of the expressions that
465 // define the result set, or one of the tables in the FROM clause.
466 //
467 %type as {Token}
468 as(X) ::= AS nm(Y).    {X = Y;}
469 as(X) ::= ids(Y).      {X = Y;}
470 as(X) ::= .            {X.n = 0;}
471 
472 
473 %type seltablist {SrcList*}
474 %destructor seltablist {sqlite3SrcListDelete(pParse->db, $$);}
475 %type stl_prefix {SrcList*}
476 %destructor stl_prefix {sqlite3SrcListDelete(pParse->db, $$);}
477 %type from {SrcList*}
478 %destructor from {sqlite3SrcListDelete(pParse->db, $$);}
479 
480 // A complete FROM clause.
481 //
482 from(A) ::= .                {A = sqlite3DbMallocZero(pParse->db, sizeof(*A));}
483 from(A) ::= FROM seltablist(X). {
484   A = X;
485   sqlite3SrcListShiftJoinType(A);
486 }
487 
488 // "seltablist" is a "Select Table List" - the content of the FROM clause
489 // in a SELECT statement.  "stl_prefix" is a prefix of this list.
490 //
491 stl_prefix(A) ::= seltablist(X) joinop(Y).    {
492    A = X;
493    if( ALWAYS(A && A->nSrc>0) ) A->a[A->nSrc-1].jointype = (u8)Y;
494 }
495 stl_prefix(A) ::= .                           {A = 0;}
496 seltablist(A) ::= stl_prefix(X) nm(Y) dbnm(D) as(Z) indexed_opt(I) on_opt(N) using_opt(U). {
497   A = sqlite3SrcListAppendFromTerm(pParse,X,&Y,&D,&Z,0,N,U);
498   sqlite3SrcListIndexedBy(pParse, A, &I);
499 }
500 %ifndef SQLITE_OMIT_SUBQUERY
501   seltablist(A) ::= stl_prefix(X) LP select(S) RP
502                     as(Z) on_opt(N) using_opt(U). {
503     A = sqlite3SrcListAppendFromTerm(pParse,X,0,0,&Z,S,N,U);
504   }
505   seltablist(A) ::= stl_prefix(X) LP seltablist(F) RP
506                     as(Z) on_opt(N) using_opt(U). {
507     if( X==0 && Z.n==0 && N==0 && U==0 ){
508       A = F;
509     }else{
510       Select *pSubquery;
511       sqlite3SrcListShiftJoinType(F);
512       pSubquery = sqlite3SelectNew(pParse,0,F,0,0,0,0,0,0,0);
513       A = sqlite3SrcListAppendFromTerm(pParse,X,0,0,&Z,pSubquery,N,U);
514     }
515   }
516 
517   // A seltablist_paren nonterminal represents anything in a FROM that
518   // is contained inside parentheses.  This can be either a subquery or
519   // a grouping of table and subqueries.
520   //
521 //  %type seltablist_paren {Select*}
522 //  %destructor seltablist_paren {sqlite3SelectDelete(pParse->db, $$);}
523 //  seltablist_paren(A) ::= select(S).      {A = S;}
524 //  seltablist_paren(A) ::= seltablist(F).  {
525 //     sqlite3SrcListShiftJoinType(F);
526 //     A = sqlite3SelectNew(pParse,0,F,0,0,0,0,0,0,0);
527 //  }
528 %endif  SQLITE_OMIT_SUBQUERY
529 
530 %type dbnm {Token}
531 dbnm(A) ::= .          {A.z=0; A.n=0;}
532 dbnm(A) ::= DOT nm(X). {A = X;}
533 
534 %type fullname {SrcList*}
535 %destructor fullname {sqlite3SrcListDelete(pParse->db, $$);}
536 fullname(A) ::= nm(X) dbnm(Y).  {A = sqlite3SrcListAppend(pParse->db,0,&X,&Y);}
537 
538 %type joinop {int}
539 %type joinop2 {int}
540 joinop(X) ::= COMMA|JOIN.              { X = JT_INNER; }
541 joinop(X) ::= JOIN_KW(A) JOIN.         { X = sqlite3JoinType(pParse,&A,0,0); }
542 joinop(X) ::= JOIN_KW(A) nm(B) JOIN.   { X = sqlite3JoinType(pParse,&A,&B,0); }
543 joinop(X) ::= JOIN_KW(A) nm(B) nm(C) JOIN.
544                                        { X = sqlite3JoinType(pParse,&A,&B,&C); }
545 
546 %type on_opt {Expr*}
547 %destructor on_opt {sqlite3ExprDelete(pParse->db, $$);}
548 on_opt(N) ::= ON expr(E).   {N = E.pExpr;}
549 on_opt(N) ::= .             {N = 0;}
550 
551 // Note that this block abuses the Token type just a little. If there is
552 // no "INDEXED BY" clause, the returned token is empty (z==0 && n==0). If
553 // there is an INDEXED BY clause, then the token is populated as per normal,
554 // with z pointing to the token data and n containing the number of bytes
555 // in the token.
556 //
557 // If there is a "NOT INDEXED" clause, then (z==0 && n==1), which is
558 // normally illegal. The sqlite3SrcListIndexedBy() function
559 // recognizes and interprets this as a special case.
560 //
561 %type indexed_opt {Token}
562 indexed_opt(A) ::= .                 {A.z=0; A.n=0;}
563 indexed_opt(A) ::= INDEXED BY nm(X). {A = X;}
564 indexed_opt(A) ::= NOT INDEXED.      {A.z=0; A.n=1;}
565 
566 %type using_opt {IdList*}
567 %destructor using_opt {sqlite3IdListDelete(pParse->db, $$);}
568 using_opt(U) ::= USING LP inscollist(L) RP.  {U = L;}
569 using_opt(U) ::= .                        {U = 0;}
570 
571 
572 %type orderby_opt {ExprList*}
573 %destructor orderby_opt {sqlite3ExprListDelete(pParse->db, $$);}
574 %type sortlist {ExprList*}
575 %destructor sortlist {sqlite3ExprListDelete(pParse->db, $$);}
576 %type sortitem {Expr*}
577 %destructor sortitem {sqlite3ExprDelete(pParse->db, $$);}
578 
579 orderby_opt(A) ::= .                          {A = 0;}
580 orderby_opt(A) ::= ORDER BY sortlist(X).      {A = X;}
581 sortlist(A) ::= sortlist(X) COMMA sortitem(Y) sortorder(Z). {
582   A = sqlite3ExprListAppend(pParse,X,Y);
583   if( A ) A->a[A->nExpr-1].sortOrder = (u8)Z;
584 }
585 sortlist(A) ::= sortitem(Y) sortorder(Z). {
586   A = sqlite3ExprListAppend(pParse,0,Y);
587   if( A && ALWAYS(A->a) ) A->a[0].sortOrder = (u8)Z;
588 }
589 sortitem(A) ::= expr(X).   {A = X.pExpr;}
590 
591 %type sortorder {int}
592 
593 sortorder(A) ::= ASC.           {A = SQLITE_SO_ASC;}
594 sortorder(A) ::= DESC.          {A = SQLITE_SO_DESC;}
595 sortorder(A) ::= .              {A = SQLITE_SO_ASC;}
596 
597 %type groupby_opt {ExprList*}
598 %destructor groupby_opt {sqlite3ExprListDelete(pParse->db, $$);}
599 groupby_opt(A) ::= .                      {A = 0;}
600 groupby_opt(A) ::= GROUP BY nexprlist(X). {A = X;}
601 
602 %type having_opt {Expr*}
603 %destructor having_opt {sqlite3ExprDelete(pParse->db, $$);}
604 having_opt(A) ::= .                {A = 0;}
605 having_opt(A) ::= HAVING expr(X).  {A = X.pExpr;}
606 
607 %type limit_opt {struct LimitVal}
608 
609 // The destructor for limit_opt will never fire in the current grammar.
610 // The limit_opt non-terminal only occurs at the end of a single production
611 // rule for SELECT statements.  As soon as the rule that create the
612 // limit_opt non-terminal reduces, the SELECT statement rule will also
613 // reduce.  So there is never a limit_opt non-terminal on the stack
614 // except as a transient.  So there is never anything to destroy.
615 //
616 //%destructor limit_opt {
617 //  sqlite3ExprDelete(pParse->db, $$.pLimit);
618 //  sqlite3ExprDelete(pParse->db, $$.pOffset);
619 //}
620 limit_opt(A) ::= .                    {A.pLimit = 0; A.pOffset = 0;}
621 limit_opt(A) ::= LIMIT expr(X).       {A.pLimit = X.pExpr; A.pOffset = 0;}
622 limit_opt(A) ::= LIMIT expr(X) OFFSET expr(Y).
623                                       {A.pLimit = X.pExpr; A.pOffset = Y.pExpr;}
624 limit_opt(A) ::= LIMIT expr(X) COMMA expr(Y).
625                                       {A.pOffset = X.pExpr; A.pLimit = Y.pExpr;}
626 
627 /////////////////////////// The DELETE statement /////////////////////////////
628 //
629 %ifdef SQLITE_ENABLE_UPDATE_DELETE_LIMIT
630 cmd ::= DELETE FROM fullname(X) indexed_opt(I) where_opt(W)
631         orderby_opt(O) limit_opt(L). {
632   sqlite3SrcListIndexedBy(pParse, X, &I);
633   W = sqlite3LimitWhere(pParse, X, W, O, L.pLimit, L.pOffset, "DELETE");
634   sqlite3DeleteFrom(pParse,X,W);
635 }
636 %endif
637 %ifndef SQLITE_ENABLE_UPDATE_DELETE_LIMIT
638 cmd ::= DELETE FROM fullname(X) indexed_opt(I) where_opt(W). {
639   sqlite3SrcListIndexedBy(pParse, X, &I);
640   sqlite3DeleteFrom(pParse,X,W);
641 }
642 %endif
643 
644 %type where_opt {Expr*}
645 %destructor where_opt {sqlite3ExprDelete(pParse->db, $$);}
646 
647 where_opt(A) ::= .                    {A = 0;}
648 where_opt(A) ::= WHERE expr(X).       {A = X.pExpr;}
649 
650 ////////////////////////// The UPDATE command ////////////////////////////////
651 //
652 %ifdef SQLITE_ENABLE_UPDATE_DELETE_LIMIT
653 cmd ::= UPDATE orconf(R) fullname(X) indexed_opt(I) SET setlist(Y) where_opt(W) orderby_opt(O) limit_opt(L).  {
654   sqlite3SrcListIndexedBy(pParse, X, &I);
655   sqlite3ExprListCheckLength(pParse,Y,"set list");
656   W = sqlite3LimitWhere(pParse, X, W, O, L.pLimit, L.pOffset, "UPDATE");
657   sqlite3Update(pParse,X,Y,W,R);
658 }
659 %endif
660 %ifndef SQLITE_ENABLE_UPDATE_DELETE_LIMIT
661 cmd ::= UPDATE orconf(R) fullname(X) indexed_opt(I) SET setlist(Y) where_opt(W).  {
662   sqlite3SrcListIndexedBy(pParse, X, &I);
663   sqlite3ExprListCheckLength(pParse,Y,"set list");
664   sqlite3Update(pParse,X,Y,W,R);
665 }
666 %endif
667 
668 %type setlist {ExprList*}
669 %destructor setlist {sqlite3ExprListDelete(pParse->db, $$);}
670 
671 setlist(A) ::= setlist(Z) COMMA nm(X) EQ expr(Y). {
672   A = sqlite3ExprListAppend(pParse, Z, Y.pExpr);
673   sqlite3ExprListSetName(pParse, A, &X, 1);
674 }
675 setlist(A) ::= nm(X) EQ expr(Y). {
676   A = sqlite3ExprListAppend(pParse, 0, Y.pExpr);
677   sqlite3ExprListSetName(pParse, A, &X, 1);
678 }
679 
680 ////////////////////////// The INSERT command /////////////////////////////////
681 //
682 cmd ::= insert_cmd(R) INTO fullname(X) inscollist_opt(F)
683         VALUES LP itemlist(Y) RP.
684             {sqlite3Insert(pParse, X, Y, 0, F, R);}
685 cmd ::= insert_cmd(R) INTO fullname(X) inscollist_opt(F) select(S).
686             {sqlite3Insert(pParse, X, 0, S, F, R);}
687 cmd ::= insert_cmd(R) INTO fullname(X) inscollist_opt(F) DEFAULT VALUES.
688             {sqlite3Insert(pParse, X, 0, 0, F, R);}
689 
690 %type insert_cmd {u8}
691 insert_cmd(A) ::= INSERT orconf(R).   {A = R;}
692 insert_cmd(A) ::= REPLACE.            {A = OE_Replace;}
693 
694 
695 %type itemlist {ExprList*}
696 %destructor itemlist {sqlite3ExprListDelete(pParse->db, $$);}
697 
698 itemlist(A) ::= itemlist(X) COMMA expr(Y).
699     {A = sqlite3ExprListAppend(pParse,X,Y.pExpr);}
700 itemlist(A) ::= expr(X).
701     {A = sqlite3ExprListAppend(pParse,0,X.pExpr);}
702 
703 %type inscollist_opt {IdList*}
704 %destructor inscollist_opt {sqlite3IdListDelete(pParse->db, $$);}
705 %type inscollist {IdList*}
706 %destructor inscollist {sqlite3IdListDelete(pParse->db, $$);}
707 
708 inscollist_opt(A) ::= .                       {A = 0;}
709 inscollist_opt(A) ::= LP inscollist(X) RP.    {A = X;}
710 inscollist(A) ::= inscollist(X) COMMA nm(Y).
711     {A = sqlite3IdListAppend(pParse->db,X,&Y);}
712 inscollist(A) ::= nm(Y).
713     {A = sqlite3IdListAppend(pParse->db,0,&Y);}
714 
715 /////////////////////////// Expression Processing /////////////////////////////
716 //
717 
718 %type expr {ExprSpan}
719 %destructor expr {sqlite3ExprDelete(pParse->db, $$.pExpr);}
720 %type term {ExprSpan}
721 %destructor term {sqlite3ExprDelete(pParse->db, $$.pExpr);}
722 
723 %include {
724   /* This is a utility routine used to set the ExprSpan.zStart and
725   ** ExprSpan.zEnd values of pOut so that the span covers the complete
726   ** range of text beginning with pStart and going to the end of pEnd.
727   */
728   static void spanSet(ExprSpan *pOut, Token *pStart, Token *pEnd){
729     pOut->zStart = pStart->z;
730     pOut->zEnd = &pEnd->z[pEnd->n];
731   }
732 
733   /* Construct a new Expr object from a single identifier.  Use the
734   ** new Expr to populate pOut.  Set the span of pOut to be the identifier
735   ** that created the expression.
736   */
737   static void spanExpr(ExprSpan *pOut, Parse *pParse, int op, Token *pValue){
738     pOut->pExpr = sqlite3PExpr(pParse, op, 0, 0, pValue);
739     pOut->zStart = pValue->z;
740     pOut->zEnd = &pValue->z[pValue->n];
741   }
742 }
743 
744 expr(A) ::= term(X).             {A = X;}
745 expr(A) ::= LP(B) expr(X) RP(E). {A.pExpr = X.pExpr; spanSet(&A,&B,&E);}
746 term(A) ::= NULL(X).             {spanExpr(&A, pParse, @X, &X);}
747 expr(A) ::= id(X).               {spanExpr(&A, pParse, TK_ID, &X);}
748 expr(A) ::= JOIN_KW(X).          {spanExpr(&A, pParse, TK_ID, &X);}
749 expr(A) ::= nm(X) DOT nm(Y). {
750   Expr *temp1 = sqlite3PExpr(pParse, TK_ID, 0, 0, &X);
751   Expr *temp2 = sqlite3PExpr(pParse, TK_ID, 0, 0, &Y);
752   A.pExpr = sqlite3PExpr(pParse, TK_DOT, temp1, temp2, 0);
753   spanSet(&A,&X,&Y);
754 }
755 expr(A) ::= nm(X) DOT nm(Y) DOT nm(Z). {
756   Expr *temp1 = sqlite3PExpr(pParse, TK_ID, 0, 0, &X);
757   Expr *temp2 = sqlite3PExpr(pParse, TK_ID, 0, 0, &Y);
758   Expr *temp3 = sqlite3PExpr(pParse, TK_ID, 0, 0, &Z);
759   Expr *temp4 = sqlite3PExpr(pParse, TK_DOT, temp2, temp3, 0);
760   A.pExpr = sqlite3PExpr(pParse, TK_DOT, temp1, temp4, 0);
761   spanSet(&A,&X,&Z);
762 }
763 term(A) ::= INTEGER|FLOAT|BLOB(X).  {spanExpr(&A, pParse, @X, &X);}
764 term(A) ::= STRING(X).              {spanExpr(&A, pParse, @X, &X);}
765 expr(A) ::= REGISTER(X).     {
766   /* When doing a nested parse, one can include terms in an expression
767   ** that look like this:   #1 #2 ...  These terms refer to registers
768   ** in the virtual machine.  #N is the N-th register. */
769   if( pParse->nested==0 ){
770     sqlite3ErrorMsg(pParse, "near \"%T\": syntax error", &X);
771     A.pExpr = 0;
772   }else{
773     A.pExpr = sqlite3PExpr(pParse, TK_REGISTER, 0, 0, &X);
774     if( A.pExpr ) sqlite3GetInt32(&X.z[1], &A.pExpr->iTable);
775   }
776   spanSet(&A, &X, &X);
777 }
778 expr(A) ::= VARIABLE(X).     {
779   spanExpr(&A, pParse, TK_VARIABLE, &X);
780   sqlite3ExprAssignVarNumber(pParse, A.pExpr);
781   spanSet(&A, &X, &X);
782 }
783 expr(A) ::= expr(E) COLLATE ids(C). {
784   A.pExpr = sqlite3ExprSetCollByToken(pParse, E.pExpr, &C);
785   A.zStart = E.zStart;
786   A.zEnd = &C.z[C.n];
787 }
788 %ifndef SQLITE_OMIT_CAST
789 expr(A) ::= CAST(X) LP expr(E) AS typetoken(T) RP(Y). {
790   A.pExpr = sqlite3PExpr(pParse, TK_CAST, E.pExpr, 0, &T);
791   spanSet(&A,&X,&Y);
792 }
793 %endif  SQLITE_OMIT_CAST
794 expr(A) ::= ID(X) LP distinct(D) exprlist(Y) RP(E). {
795   if( Y && Y->nExpr>pParse->db->aLimit[SQLITE_LIMIT_FUNCTION_ARG] ){
796     sqlite3ErrorMsg(pParse, "too many arguments on function %T", &X);
797   }
798   A.pExpr = sqlite3ExprFunction(pParse, Y, &X);
799   spanSet(&A,&X,&E);
800   if( D && A.pExpr ){
801     A.pExpr->flags |= EP_Distinct;
802   }
803 }
804 expr(A) ::= ID(X) LP STAR RP(E). {
805   A.pExpr = sqlite3ExprFunction(pParse, 0, &X);
806   spanSet(&A,&X,&E);
807 }
808 term(A) ::= CTIME_KW(OP). {
809   /* The CURRENT_TIME, CURRENT_DATE, and CURRENT_TIMESTAMP values are
810   ** treated as functions that return constants */
811   A.pExpr = sqlite3ExprFunction(pParse, 0,&OP);
812   if( A.pExpr ){
813     A.pExpr->op = TK_CONST_FUNC;
814   }
815   spanSet(&A, &OP, &OP);
816 }
817 
818 %include {
819   /* This routine constructs a binary expression node out of two ExprSpan
820   ** objects and uses the result to populate a new ExprSpan object.
821   */
822   static void spanBinaryExpr(
823     ExprSpan *pOut,     /* Write the result here */
824     Parse *pParse,      /* The parsing context.  Errors accumulate here */
825     int op,             /* The binary operation */
826     ExprSpan *pLeft,    /* The left operand */
827     ExprSpan *pRight    /* The right operand */
828   ){
829     pOut->pExpr = sqlite3PExpr(pParse, op, pLeft->pExpr, pRight->pExpr, 0);
830     pOut->zStart = pLeft->zStart;
831     pOut->zEnd = pRight->zEnd;
832   }
833 }
834 
835 expr(A) ::= expr(X) AND(OP) expr(Y).    {spanBinaryExpr(&A,pParse,@OP,&X,&Y);}
836 expr(A) ::= expr(X) OR(OP) expr(Y).     {spanBinaryExpr(&A,pParse,@OP,&X,&Y);}
837 expr(A) ::= expr(X) LT|GT|GE|LE(OP) expr(Y).
838                                         {spanBinaryExpr(&A,pParse,@OP,&X,&Y);}
839 expr(A) ::= expr(X) EQ|NE(OP) expr(Y).  {spanBinaryExpr(&A,pParse,@OP,&X,&Y);}
840 expr(A) ::= expr(X) BITAND|BITOR|LSHIFT|RSHIFT(OP) expr(Y).
841                                         {spanBinaryExpr(&A,pParse,@OP,&X,&Y);}
842 expr(A) ::= expr(X) PLUS|MINUS(OP) expr(Y).
843                                         {spanBinaryExpr(&A,pParse,@OP,&X,&Y);}
844 expr(A) ::= expr(X) STAR|SLASH|REM(OP) expr(Y).
845                                         {spanBinaryExpr(&A,pParse,@OP,&X,&Y);}
846 expr(A) ::= expr(X) CONCAT(OP) expr(Y). {spanBinaryExpr(&A,pParse,@OP,&X,&Y);}
847 %type likeop {struct LikeOp}
848 likeop(A) ::= LIKE_KW(X).     {A.eOperator = X; A.not = 0;}
849 likeop(A) ::= NOT LIKE_KW(X). {A.eOperator = X; A.not = 1;}
850 likeop(A) ::= MATCH(X).       {A.eOperator = X; A.not = 0;}
851 likeop(A) ::= NOT MATCH(X).   {A.eOperator = X; A.not = 1;}
852 expr(A) ::= expr(X) likeop(OP) expr(Y).  [LIKE_KW]  {
853   ExprList *pList;
854   pList = sqlite3ExprListAppend(pParse,0, Y.pExpr);
855   pList = sqlite3ExprListAppend(pParse,pList, X.pExpr);
856   A.pExpr = sqlite3ExprFunction(pParse, pList, &OP.eOperator);
857   if( OP.not ) A.pExpr = sqlite3PExpr(pParse, TK_NOT, A.pExpr, 0, 0);
858   A.zStart = X.zStart;
859   A.zEnd = Y.zEnd;
860   if( A.pExpr ) A.pExpr->flags |= EP_InfixFunc;
861 }
862 expr(A) ::= expr(X) likeop(OP) expr(Y) ESCAPE expr(E).  [LIKE_KW]  {
863   ExprList *pList;
864   pList = sqlite3ExprListAppend(pParse,0, Y.pExpr);
865   pList = sqlite3ExprListAppend(pParse,pList, X.pExpr);
866   pList = sqlite3ExprListAppend(pParse,pList, E.pExpr);
867   A.pExpr = sqlite3ExprFunction(pParse, pList, &OP.eOperator);
868   if( OP.not ) A.pExpr = sqlite3PExpr(pParse, TK_NOT, A.pExpr, 0, 0);
869   A.zStart = X.zStart;
870   A.zEnd = E.zEnd;
871   if( A.pExpr ) A.pExpr->flags |= EP_InfixFunc;
872 }
873 
874 %include {
875   /* Construct an expression node for a unary postfix operator
876   */
877   static void spanUnaryPostfix(
878     ExprSpan *pOut,        /* Write the new expression node here */
879     Parse *pParse,         /* Parsing context to record errors */
880     int op,                /* The operator */
881     ExprSpan *pOperand,    /* The operand */
882     Token *pPostOp         /* The operand token for setting the span */
883   ){
884     pOut->pExpr = sqlite3PExpr(pParse, op, pOperand->pExpr, 0, 0);
885     pOut->zStart = pOperand->zStart;
886     pOut->zEnd = &pPostOp->z[pPostOp->n];
887   }
888 }
889 
890 expr(A) ::= expr(X) ISNULL|NOTNULL(E).   {spanUnaryPostfix(&A,pParse,@E,&X,&E);}
891 expr(A) ::= expr(X) NOT NULL(E). {spanUnaryPostfix(&A,pParse,TK_NOTNULL,&X,&E);}
892 
893 %include {
894   /* A routine to convert a binary TK_IS or TK_ISNOT expression into a
895   ** unary TK_ISNULL or TK_NOTNULL expression. */
896   static void binaryToUnaryIfNull(Parse *pParse, Expr *pY, Expr *pA, int op){
897     sqlite3 *db = pParse->db;
898     if( db->mallocFailed==0 && pY->op==TK_NULL ){
899       pA->op = (u8)op;
900       sqlite3ExprDelete(db, pA->pRight);
901       pA->pRight = 0;
902     }
903   }
904 }
905 
906 //    expr1 IS expr2
907 //    expr1 IS NOT expr2
908 //
909 // If expr2 is NULL then code as TK_ISNULL or TK_NOTNULL.  If expr2
910 // is any other expression, code as TK_IS or TK_ISNOT.
911 //
912 expr(A) ::= expr(X) IS expr(Y).     {
913   spanBinaryExpr(&A,pParse,TK_IS,&X,&Y);
914   binaryToUnaryIfNull(pParse, Y.pExpr, A.pExpr, TK_ISNULL);
915 }
916 expr(A) ::= expr(X) IS NOT expr(Y). {
917   spanBinaryExpr(&A,pParse,TK_ISNOT,&X,&Y);
918   binaryToUnaryIfNull(pParse, Y.pExpr, A.pExpr, TK_NOTNULL);
919 }
920 
921 %include {
922   /* Construct an expression node for a unary prefix operator
923   */
924   static void spanUnaryPrefix(
925     ExprSpan *pOut,        /* Write the new expression node here */
926     Parse *pParse,         /* Parsing context to record errors */
927     int op,                /* The operator */
928     ExprSpan *pOperand,    /* The operand */
929     Token *pPreOp         /* The operand token for setting the span */
930   ){
931     pOut->pExpr = sqlite3PExpr(pParse, op, pOperand->pExpr, 0, 0);
932     pOut->zStart = pPreOp->z;
933     pOut->zEnd = pOperand->zEnd;
934   }
935 }
936 
937 
938 
939 expr(A) ::= NOT(B) expr(X).    {spanUnaryPrefix(&A,pParse,@B,&X,&B);}
940 expr(A) ::= BITNOT(B) expr(X). {spanUnaryPrefix(&A,pParse,@B,&X,&B);}
941 expr(A) ::= MINUS(B) expr(X). [BITNOT]
942                                {spanUnaryPrefix(&A,pParse,TK_UMINUS,&X,&B);}
943 expr(A) ::= PLUS(B) expr(X). [BITNOT]
944                                {spanUnaryPrefix(&A,pParse,TK_UPLUS,&X,&B);}
945 
946 %type between_op {int}
947 between_op(A) ::= BETWEEN.     {A = 0;}
948 between_op(A) ::= NOT BETWEEN. {A = 1;}
949 expr(A) ::= expr(W) between_op(N) expr(X) AND expr(Y). [BETWEEN] {
950   ExprList *pList = sqlite3ExprListAppend(pParse,0, X.pExpr);
951   pList = sqlite3ExprListAppend(pParse,pList, Y.pExpr);
952   A.pExpr = sqlite3PExpr(pParse, TK_BETWEEN, W.pExpr, 0, 0);
953   if( A.pExpr ){
954     A.pExpr->x.pList = pList;
955   }else{
956     sqlite3ExprListDelete(pParse->db, pList);
957   }
958   if( N ) A.pExpr = sqlite3PExpr(pParse, TK_NOT, A.pExpr, 0, 0);
959   A.zStart = W.zStart;
960   A.zEnd = Y.zEnd;
961 }
962 %ifndef SQLITE_OMIT_SUBQUERY
963   %type in_op {int}
964   in_op(A) ::= IN.      {A = 0;}
965   in_op(A) ::= NOT IN.  {A = 1;}
966   expr(A) ::= expr(X) in_op(N) LP exprlist(Y) RP(E). [IN] {
967     if( Y==0 ){
968       /* Expressions of the form
969       **
970       **      expr1 IN ()
971       **      expr1 NOT IN ()
972       **
973       ** simplify to constants 0 (false) and 1 (true), respectively,
974       ** regardless of the value of expr1.
975       */
976       A.pExpr = sqlite3PExpr(pParse, TK_INTEGER, 0, 0, &sqlite3IntTokens[N]);
977       sqlite3ExprDelete(pParse->db, X.pExpr);
978     }else{
979       A.pExpr = sqlite3PExpr(pParse, TK_IN, X.pExpr, 0, 0);
980       if( A.pExpr ){
981         A.pExpr->x.pList = Y;
982         sqlite3ExprSetHeight(pParse, A.pExpr);
983       }else{
984         sqlite3ExprListDelete(pParse->db, Y);
985       }
986       if( N ) A.pExpr = sqlite3PExpr(pParse, TK_NOT, A.pExpr, 0, 0);
987     }
988     A.zStart = X.zStart;
989     A.zEnd = &E.z[E.n];
990   }
991   expr(A) ::= LP(B) select(X) RP(E). {
992     A.pExpr = sqlite3PExpr(pParse, TK_SELECT, 0, 0, 0);
993     if( A.pExpr ){
994       A.pExpr->x.pSelect = X;
995       ExprSetProperty(A.pExpr, EP_xIsSelect);
996       sqlite3ExprSetHeight(pParse, A.pExpr);
997     }else{
998       sqlite3SelectDelete(pParse->db, X);
999     }
1000     A.zStart = B.z;
1001     A.zEnd = &E.z[E.n];
1002   }
1003   expr(A) ::= expr(X) in_op(N) LP select(Y) RP(E).  [IN] {
1004     A.pExpr = sqlite3PExpr(pParse, TK_IN, X.pExpr, 0, 0);
1005     if( A.pExpr ){
1006       A.pExpr->x.pSelect = Y;
1007       ExprSetProperty(A.pExpr, EP_xIsSelect);
1008       sqlite3ExprSetHeight(pParse, A.pExpr);
1009     }else{
1010       sqlite3SelectDelete(pParse->db, Y);
1011     }
1012     if( N ) A.pExpr = sqlite3PExpr(pParse, TK_NOT, A.pExpr, 0, 0);
1013     A.zStart = X.zStart;
1014     A.zEnd = &E.z[E.n];
1015   }
1016   expr(A) ::= expr(X) in_op(N) nm(Y) dbnm(Z). [IN] {
1017     SrcList *pSrc = sqlite3SrcListAppend(pParse->db, 0,&Y,&Z);
1018     A.pExpr = sqlite3PExpr(pParse, TK_IN, X.pExpr, 0, 0);
1019     if( A.pExpr ){
1020       A.pExpr->x.pSelect = sqlite3SelectNew(pParse, 0,pSrc,0,0,0,0,0,0,0);
1021       ExprSetProperty(A.pExpr, EP_xIsSelect);
1022       sqlite3ExprSetHeight(pParse, A.pExpr);
1023     }else{
1024       sqlite3SrcListDelete(pParse->db, pSrc);
1025     }
1026     if( N ) A.pExpr = sqlite3PExpr(pParse, TK_NOT, A.pExpr, 0, 0);
1027     A.zStart = X.zStart;
1028     A.zEnd = Z.z ? &Z.z[Z.n] : &Y.z[Y.n];
1029   }
1030   expr(A) ::= EXISTS(B) LP select(Y) RP(E). {
1031     Expr *p = A.pExpr = sqlite3PExpr(pParse, TK_EXISTS, 0, 0, 0);
1032     if( p ){
1033       p->x.pSelect = Y;
1034       ExprSetProperty(p, EP_xIsSelect);
1035       sqlite3ExprSetHeight(pParse, p);
1036     }else{
1037       sqlite3SelectDelete(pParse->db, Y);
1038     }
1039     A.zStart = B.z;
1040     A.zEnd = &E.z[E.n];
1041   }
1042 %endif SQLITE_OMIT_SUBQUERY
1043 
1044 /* CASE expressions */
1045 expr(A) ::= CASE(C) case_operand(X) case_exprlist(Y) case_else(Z) END(E). {
1046   A.pExpr = sqlite3PExpr(pParse, TK_CASE, X, Z, 0);
1047   if( A.pExpr ){
1048     A.pExpr->x.pList = Y;
1049     sqlite3ExprSetHeight(pParse, A.pExpr);
1050   }else{
1051     sqlite3ExprListDelete(pParse->db, Y);
1052   }
1053   A.zStart = C.z;
1054   A.zEnd = &E.z[E.n];
1055 }
1056 %type case_exprlist {ExprList*}
1057 %destructor case_exprlist {sqlite3ExprListDelete(pParse->db, $$);}
1058 case_exprlist(A) ::= case_exprlist(X) WHEN expr(Y) THEN expr(Z). {
1059   A = sqlite3ExprListAppend(pParse,X, Y.pExpr);
1060   A = sqlite3ExprListAppend(pParse,A, Z.pExpr);
1061 }
1062 case_exprlist(A) ::= WHEN expr(Y) THEN expr(Z). {
1063   A = sqlite3ExprListAppend(pParse,0, Y.pExpr);
1064   A = sqlite3ExprListAppend(pParse,A, Z.pExpr);
1065 }
1066 %type case_else {Expr*}
1067 %destructor case_else {sqlite3ExprDelete(pParse->db, $$);}
1068 case_else(A) ::=  ELSE expr(X).         {A = X.pExpr;}
1069 case_else(A) ::=  .                     {A = 0;}
1070 %type case_operand {Expr*}
1071 %destructor case_operand {sqlite3ExprDelete(pParse->db, $$);}
1072 case_operand(A) ::= expr(X).            {A = X.pExpr;}
1073 case_operand(A) ::= .                   {A = 0;}
1074 
1075 %type exprlist {ExprList*}
1076 %destructor exprlist {sqlite3ExprListDelete(pParse->db, $$);}
1077 %type nexprlist {ExprList*}
1078 %destructor nexprlist {sqlite3ExprListDelete(pParse->db, $$);}
1079 
1080 exprlist(A) ::= nexprlist(X).                {A = X;}
1081 exprlist(A) ::= .                            {A = 0;}
1082 nexprlist(A) ::= nexprlist(X) COMMA expr(Y).
1083     {A = sqlite3ExprListAppend(pParse,X,Y.pExpr);}
1084 nexprlist(A) ::= expr(Y).
1085     {A = sqlite3ExprListAppend(pParse,0,Y.pExpr);}
1086 
1087 
1088 ///////////////////////////// The CREATE INDEX command ///////////////////////
1089 //
1090 cmd ::= createkw(S) uniqueflag(U) INDEX ifnotexists(NE) nm(X) dbnm(D)
1091         ON nm(Y) LP idxlist(Z) RP(E). {
1092   sqlite3CreateIndex(pParse, &X, &D,
1093                      sqlite3SrcListAppend(pParse->db,0,&Y,0), Z, U,
1094                       &S, &E, SQLITE_SO_ASC, NE);
1095 }
1096 
1097 %type uniqueflag {int}
1098 uniqueflag(A) ::= UNIQUE.  {A = OE_Abort;}
1099 uniqueflag(A) ::= .        {A = OE_None;}
1100 
1101 %type idxlist {ExprList*}
1102 %destructor idxlist {sqlite3ExprListDelete(pParse->db, $$);}
1103 %type idxlist_opt {ExprList*}
1104 %destructor idxlist_opt {sqlite3ExprListDelete(pParse->db, $$);}
1105 
1106 idxlist_opt(A) ::= .                         {A = 0;}
1107 idxlist_opt(A) ::= LP idxlist(X) RP.         {A = X;}
1108 idxlist(A) ::= idxlist(X) COMMA nm(Y) collate(C) sortorder(Z).  {
1109   Expr *p = 0;
1110   if( C.n>0 ){
1111     p = sqlite3Expr(pParse->db, TK_COLUMN, 0);
1112     sqlite3ExprSetCollByToken(pParse, p, &C);
1113   }
1114   A = sqlite3ExprListAppend(pParse,X, p);
1115   sqlite3ExprListSetName(pParse,A,&Y,1);
1116   sqlite3ExprListCheckLength(pParse, A, "index");
1117   if( A ) A->a[A->nExpr-1].sortOrder = (u8)Z;
1118 }
1119 idxlist(A) ::= nm(Y) collate(C) sortorder(Z). {
1120   Expr *p = 0;
1121   if( C.n>0 ){
1122     p = sqlite3PExpr(pParse, TK_COLUMN, 0, 0, 0);
1123     sqlite3ExprSetCollByToken(pParse, p, &C);
1124   }
1125   A = sqlite3ExprListAppend(pParse,0, p);
1126   sqlite3ExprListSetName(pParse, A, &Y, 1);
1127   sqlite3ExprListCheckLength(pParse, A, "index");
1128   if( A ) A->a[A->nExpr-1].sortOrder = (u8)Z;
1129 }
1130 
1131 %type collate {Token}
1132 collate(C) ::= .                 {C.z = 0; C.n = 0;}
1133 collate(C) ::= COLLATE ids(X).   {C = X;}
1134 
1135 
1136 ///////////////////////////// The DROP INDEX command /////////////////////////
1137 //
1138 cmd ::= DROP INDEX ifexists(E) fullname(X).   {sqlite3DropIndex(pParse, X, E);}
1139 
1140 ///////////////////////////// The VACUUM command /////////////////////////////
1141 //
1142 %ifndef SQLITE_OMIT_VACUUM
1143 %ifndef SQLITE_OMIT_ATTACH
1144 cmd ::= VACUUM.                {sqlite3Vacuum(pParse);}
1145 cmd ::= VACUUM nm.             {sqlite3Vacuum(pParse);}
1146 %endif  SQLITE_OMIT_ATTACH
1147 %endif  SQLITE_OMIT_VACUUM
1148 
1149 ///////////////////////////// The PRAGMA command /////////////////////////////
1150 //
1151 %ifndef SQLITE_OMIT_PRAGMA
1152 cmd ::= PRAGMA nm(X) dbnm(Z).                {sqlite3Pragma(pParse,&X,&Z,0,0);}
1153 cmd ::= PRAGMA nm(X) dbnm(Z) EQ nmnum(Y).    {sqlite3Pragma(pParse,&X,&Z,&Y,0);}
1154 cmd ::= PRAGMA nm(X) dbnm(Z) LP nmnum(Y) RP. {sqlite3Pragma(pParse,&X,&Z,&Y,0);}
1155 cmd ::= PRAGMA nm(X) dbnm(Z) EQ minus_num(Y).
1156                                              {sqlite3Pragma(pParse,&X,&Z,&Y,1);}
1157 cmd ::= PRAGMA nm(X) dbnm(Z) LP minus_num(Y) RP.
1158                                              {sqlite3Pragma(pParse,&X,&Z,&Y,1);}
1159 
1160 nmnum(A) ::= plus_num(X).             {A = X;}
1161 nmnum(A) ::= nm(X).                   {A = X;}
1162 nmnum(A) ::= ON(X).                   {A = X;}
1163 nmnum(A) ::= DELETE(X).               {A = X;}
1164 nmnum(A) ::= DEFAULT(X).              {A = X;}
1165 %endif SQLITE_OMIT_PRAGMA
1166 plus_num(A) ::= plus_opt number(X).   {A = X;}
1167 minus_num(A) ::= MINUS number(X).     {A = X;}
1168 number(A) ::= INTEGER|FLOAT(X).       {A = X;}
1169 plus_opt ::= PLUS.
1170 plus_opt ::= .
1171 
1172 //////////////////////////// The CREATE TRIGGER command /////////////////////
1173 
1174 %ifndef SQLITE_OMIT_TRIGGER
1175 
1176 cmd ::= createkw trigger_decl(A) BEGIN trigger_cmd_list(S) END(Z). {
1177   Token all;
1178   all.z = A.z;
1179   all.n = (int)(Z.z - A.z) + Z.n;
1180   sqlite3FinishTrigger(pParse, S, &all);
1181 }
1182 
1183 trigger_decl(A) ::= temp(T) TRIGGER ifnotexists(NOERR) nm(B) dbnm(Z)
1184                     trigger_time(C) trigger_event(D)
1185                     ON fullname(E) foreach_clause when_clause(G). {
1186   sqlite3BeginTrigger(pParse, &B, &Z, C, D.a, D.b, E, G, T, NOERR);
1187   A = (Z.n==0?B:Z);
1188 }
1189 
1190 %type trigger_time {int}
1191 trigger_time(A) ::= BEFORE.      { A = TK_BEFORE; }
1192 trigger_time(A) ::= AFTER.       { A = TK_AFTER;  }
1193 trigger_time(A) ::= INSTEAD OF.  { A = TK_INSTEAD;}
1194 trigger_time(A) ::= .            { A = TK_BEFORE; }
1195 
1196 %type trigger_event {struct TrigEvent}
1197 %destructor trigger_event {sqlite3IdListDelete(pParse->db, $$.b);}
1198 trigger_event(A) ::= DELETE|INSERT(OP).       {A.a = @OP; A.b = 0;}
1199 trigger_event(A) ::= UPDATE(OP).              {A.a = @OP; A.b = 0;}
1200 trigger_event(A) ::= UPDATE OF inscollist(X). {A.a = TK_UPDATE; A.b = X;}
1201 
1202 foreach_clause ::= .
1203 foreach_clause ::= FOR EACH ROW.
1204 
1205 %type when_clause {Expr*}
1206 %destructor when_clause {sqlite3ExprDelete(pParse->db, $$);}
1207 when_clause(A) ::= .             { A = 0; }
1208 when_clause(A) ::= WHEN expr(X). { A = X.pExpr; }
1209 
1210 %type trigger_cmd_list {TriggerStep*}
1211 %destructor trigger_cmd_list {sqlite3DeleteTriggerStep(pParse->db, $$);}
1212 trigger_cmd_list(A) ::= trigger_cmd_list(Y) trigger_cmd(X) SEMI. {
1213   assert( Y!=0 );
1214   Y->pLast->pNext = X;
1215   Y->pLast = X;
1216   A = Y;
1217 }
1218 trigger_cmd_list(A) ::= trigger_cmd(X) SEMI. {
1219   assert( X!=0 );
1220   X->pLast = X;
1221   A = X;
1222 }
1223 
1224 // Disallow qualified table names on INSERT, UPDATE, and DELETE statements
1225 // within a trigger.  The table to INSERT, UPDATE, or DELETE is always in
1226 // the same database as the table that the trigger fires on.
1227 //
1228 %type trnm {Token}
1229 trnm(A) ::= nm(X).   {A = X;}
1230 trnm(A) ::= nm DOT nm(X). {
1231   A = X;
1232   sqlite3ErrorMsg(pParse,
1233         "qualified table names are not allowed on INSERT, UPDATE, and DELETE "
1234         "statements within triggers");
1235 }
1236 
1237 // Disallow the INDEX BY and NOT INDEXED clauses on UPDATE and DELETE
1238 // statements within triggers.  We make a specific error message for this
1239 // since it is an exception to the default grammar rules.
1240 //
1241 tridxby ::= .
1242 tridxby ::= INDEXED BY nm. {
1243   sqlite3ErrorMsg(pParse,
1244         "the INDEXED BY clause is not allowed on UPDATE or DELETE statements "
1245         "within triggers");
1246 }
1247 tridxby ::= NOT INDEXED. {
1248   sqlite3ErrorMsg(pParse,
1249         "the NOT INDEXED clause is not allowed on UPDATE or DELETE statements "
1250         "within triggers");
1251 }
1252 
1253 
1254 
1255 %type trigger_cmd {TriggerStep*}
1256 %destructor trigger_cmd {sqlite3DeleteTriggerStep(pParse->db, $$);}
1257 // UPDATE
1258 trigger_cmd(A) ::=
1259    UPDATE orconf(R) trnm(X) tridxby SET setlist(Y) where_opt(Z).
1260    { A = sqlite3TriggerUpdateStep(pParse->db, &X, Y, Z, R); }
1261 
1262 // INSERT
1263 trigger_cmd(A) ::=
1264    insert_cmd(R) INTO trnm(X) inscollist_opt(F) VALUES LP itemlist(Y) RP.
1265    {A = sqlite3TriggerInsertStep(pParse->db, &X, F, Y, 0, R);}
1266 
1267 trigger_cmd(A) ::= insert_cmd(R) INTO trnm(X) inscollist_opt(F) select(S).
1268                {A = sqlite3TriggerInsertStep(pParse->db, &X, F, 0, S, R);}
1269 
1270 // DELETE
1271 trigger_cmd(A) ::= DELETE FROM trnm(X) tridxby where_opt(Y).
1272                {A = sqlite3TriggerDeleteStep(pParse->db, &X, Y);}
1273 
1274 // SELECT
1275 trigger_cmd(A) ::= select(X).  {A = sqlite3TriggerSelectStep(pParse->db, X); }
1276 
1277 // The special RAISE expression that may occur in trigger programs
1278 expr(A) ::= RAISE(X) LP IGNORE RP(Y).  {
1279   A.pExpr = sqlite3PExpr(pParse, TK_RAISE, 0, 0, 0);
1280   if( A.pExpr ){
1281     A.pExpr->affinity = OE_Ignore;
1282   }
1283   A.zStart = X.z;
1284   A.zEnd = &Y.z[Y.n];
1285 }
1286 expr(A) ::= RAISE(X) LP raisetype(T) COMMA nm(Z) RP(Y).  {
1287   A.pExpr = sqlite3PExpr(pParse, TK_RAISE, 0, 0, &Z);
1288   if( A.pExpr ) {
1289     A.pExpr->affinity = (char)T;
1290   }
1291   A.zStart = X.z;
1292   A.zEnd = &Y.z[Y.n];
1293 }
1294 %endif  !SQLITE_OMIT_TRIGGER
1295 
1296 %type raisetype {int}
1297 raisetype(A) ::= ROLLBACK.  {A = OE_Rollback;}
1298 raisetype(A) ::= ABORT.     {A = OE_Abort;}
1299 raisetype(A) ::= FAIL.      {A = OE_Fail;}
1300 
1301 
1302 ////////////////////////  DROP TRIGGER statement //////////////////////////////
1303 %ifndef SQLITE_OMIT_TRIGGER
1304 cmd ::= DROP TRIGGER ifexists(NOERR) fullname(X). {
1305   sqlite3DropTrigger(pParse,X,NOERR);
1306 }
1307 %endif  !SQLITE_OMIT_TRIGGER
1308 
1309 //////////////////////// ATTACH DATABASE file AS name /////////////////////////
1310 %ifndef SQLITE_OMIT_ATTACH
1311 cmd ::= ATTACH database_kw_opt expr(F) AS expr(D) key_opt(K). {
1312   sqlite3Attach(pParse, F.pExpr, D.pExpr, K);
1313 }
1314 cmd ::= DETACH database_kw_opt expr(D). {
1315   sqlite3Detach(pParse, D.pExpr);
1316 }
1317 
1318 %type key_opt {Expr*}
1319 %destructor key_opt {sqlite3ExprDelete(pParse->db, $$);}
1320 key_opt(A) ::= .                     { A = 0; }
1321 key_opt(A) ::= KEY expr(X).          { A = X.pExpr; }
1322 
1323 database_kw_opt ::= DATABASE.
1324 database_kw_opt ::= .
1325 %endif SQLITE_OMIT_ATTACH
1326 
1327 ////////////////////////// REINDEX collation //////////////////////////////////
1328 %ifndef SQLITE_OMIT_REINDEX
1329 cmd ::= REINDEX.                {sqlite3Reindex(pParse, 0, 0);}
1330 cmd ::= REINDEX nm(X) dbnm(Y).  {sqlite3Reindex(pParse, &X, &Y);}
1331 %endif  SQLITE_OMIT_REINDEX
1332 
1333 /////////////////////////////////// ANALYZE ///////////////////////////////////
1334 %ifndef SQLITE_OMIT_ANALYZE
1335 cmd ::= ANALYZE.                {sqlite3Analyze(pParse, 0, 0);}
1336 cmd ::= ANALYZE nm(X) dbnm(Y).  {sqlite3Analyze(pParse, &X, &Y);}
1337 %endif
1338 
1339 //////////////////////// ALTER TABLE table ... ////////////////////////////////
1340 %ifndef SQLITE_OMIT_ALTERTABLE
1341 cmd ::= ALTER TABLE fullname(X) RENAME TO nm(Z). {
1342   sqlite3AlterRenameTable(pParse,X,&Z);
1343 }
1344 cmd ::= ALTER TABLE add_column_fullname ADD kwcolumn_opt column(Y). {
1345   sqlite3AlterFinishAddColumn(pParse, &Y);
1346 }
1347 add_column_fullname ::= fullname(X). {
1348   pParse->db->lookaside.bEnabled = 0;
1349   sqlite3AlterBeginAddColumn(pParse, X);
1350 }
1351 kwcolumn_opt ::= .
1352 kwcolumn_opt ::= COLUMNKW.
1353 %endif  SQLITE_OMIT_ALTERTABLE
1354 
1355 //////////////////////// CREATE VIRTUAL TABLE ... /////////////////////////////
1356 %ifndef SQLITE_OMIT_VIRTUALTABLE
1357 cmd ::= create_vtab.                       {sqlite3VtabFinishParse(pParse,0);}
1358 cmd ::= create_vtab LP vtabarglist RP(X).  {sqlite3VtabFinishParse(pParse,&X);}
1359 create_vtab ::= createkw VIRTUAL TABLE nm(X) dbnm(Y) USING nm(Z). {
1360     sqlite3VtabBeginParse(pParse, &X, &Y, &Z);
1361 }
1362 vtabarglist ::= vtabarg.
1363 vtabarglist ::= vtabarglist COMMA vtabarg.
1364 vtabarg ::= .                       {sqlite3VtabArgInit(pParse);}
1365 vtabarg ::= vtabarg vtabargtoken.
1366 vtabargtoken ::= ANY(X).            {sqlite3VtabArgExtend(pParse,&X);}
1367 vtabargtoken ::= lp anylist RP(X).  {sqlite3VtabArgExtend(pParse,&X);}
1368 lp ::= LP(X).                       {sqlite3VtabArgExtend(pParse,&X);}
1369 anylist ::= .
1370 anylist ::= anylist LP anylist RP.
1371 anylist ::= anylist ANY.
1372 %endif  SQLITE_OMIT_VIRTUALTABLE
1373