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