xref: /sqlite-3.40.0/src/parse.y (revision 8ccdef6b)
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 ** Indicate that sqlite3ParserFree() will never be called with a null
65 ** pointer.
66 */
67 #define YYPARSEFREENEVERNULL 1
68 
69 /*
70 ** Alternative datatype for the argument to the malloc() routine passed
71 ** into sqlite3ParserAlloc().  The default is size_t.
72 */
73 #define YYMALLOCARGTYPE  u64
74 
75 /*
76 ** An instance of this structure holds information about the
77 ** LIMIT clause of a SELECT statement.
78 */
79 struct LimitVal {
80   Expr *pLimit;    /* The LIMIT expression.  NULL if there is no limit */
81   Expr *pOffset;   /* The OFFSET expression.  NULL if there is none */
82 };
83 
84 /*
85 ** An instance of this structure is used to store the LIKE,
86 ** GLOB, NOT LIKE, and NOT GLOB operators.
87 */
88 struct LikeOp {
89   Token eOperator;  /* "like" or "glob" or "regexp" */
90   int bNot;         /* True if the NOT keyword is present */
91 };
92 
93 /*
94 ** An instance of the following structure describes the event of a
95 ** TRIGGER.  "a" is the event type, one of TK_UPDATE, TK_INSERT,
96 ** TK_DELETE, or TK_INSTEAD.  If the event is of the form
97 **
98 **      UPDATE ON (a,b,c)
99 **
100 ** Then the "b" IdList records the list "a,b,c".
101 */
102 struct TrigEvent { int a; IdList * b; };
103 
104 /*
105 ** An instance of this structure holds the ATTACH key and the key type.
106 */
107 struct AttachKey { int type;  Token key; };
108 
109 } // end %include
110 
111 // Input is a single SQL command
112 input ::= cmdlist.
113 cmdlist ::= cmdlist ecmd.
114 cmdlist ::= ecmd.
115 ecmd ::= SEMI.
116 ecmd ::= explain cmdx SEMI.
117 explain ::= .           { sqlite3BeginParse(pParse, 0); }
118 %ifndef SQLITE_OMIT_EXPLAIN
119 explain ::= EXPLAIN.              { sqlite3BeginParse(pParse, 1); }
120 explain ::= EXPLAIN QUERY PLAN.   { sqlite3BeginParse(pParse, 2); }
121 %endif  SQLITE_OMIT_EXPLAIN
122 cmdx ::= cmd.           { sqlite3FinishCoding(pParse); }
123 
124 ///////////////////// Begin and end transactions. ////////////////////////////
125 //
126 
127 cmd ::= BEGIN transtype(Y) trans_opt.  {sqlite3BeginTransaction(pParse, Y);}
128 trans_opt ::= .
129 trans_opt ::= TRANSACTION.
130 trans_opt ::= TRANSACTION nm.
131 %type transtype {int}
132 transtype(A) ::= .             {A = TK_DEFERRED;}
133 transtype(A) ::= DEFERRED(X).  {A = @X;}
134 transtype(A) ::= IMMEDIATE(X). {A = @X;}
135 transtype(A) ::= EXCLUSIVE(X). {A = @X;}
136 cmd ::= COMMIT trans_opt.      {sqlite3CommitTransaction(pParse);}
137 cmd ::= END trans_opt.         {sqlite3CommitTransaction(pParse);}
138 cmd ::= ROLLBACK trans_opt.    {sqlite3RollbackTransaction(pParse);}
139 
140 savepoint_opt ::= SAVEPOINT.
141 savepoint_opt ::= .
142 cmd ::= SAVEPOINT nm(X). {
143   sqlite3Savepoint(pParse, SAVEPOINT_BEGIN, &X);
144 }
145 cmd ::= RELEASE savepoint_opt nm(X). {
146   sqlite3Savepoint(pParse, SAVEPOINT_RELEASE, &X);
147 }
148 cmd ::= ROLLBACK trans_opt TO savepoint_opt nm(X). {
149   sqlite3Savepoint(pParse, SAVEPOINT_ROLLBACK, &X);
150 }
151 
152 ///////////////////// The CREATE TABLE statement ////////////////////////////
153 //
154 cmd ::= create_table create_table_args.
155 create_table ::= createkw temp(T) TABLE ifnotexists(E) nm(Y) dbnm(Z). {
156    sqlite3StartTable(pParse,&Y,&Z,T,0,0,E);
157 }
158 createkw(A) ::= CREATE(X).  {
159   pParse->db->lookaside.bEnabled = 0;
160   A = X;
161 }
162 %type ifnotexists {int}
163 ifnotexists(A) ::= .              {A = 0;}
164 ifnotexists(A) ::= IF NOT EXISTS. {A = 1;}
165 %type temp {int}
166 %ifndef SQLITE_OMIT_TEMPDB
167 temp(A) ::= TEMP.  {A = 1;}
168 %endif  SQLITE_OMIT_TEMPDB
169 temp(A) ::= .      {A = 0;}
170 create_table_args ::= LP columnlist conslist_opt(X) RP(E) table_options(F). {
171   sqlite3EndTable(pParse,&X,&E,F,0);
172 }
173 create_table_args ::= AS select(S). {
174   sqlite3EndTable(pParse,0,0,0,S);
175   sqlite3SelectDelete(pParse->db, S);
176 }
177 %type table_options {int}
178 table_options(A) ::= .    {A = 0;}
179 table_options(A) ::= WITHOUT nm(X). {
180   if( X.n==5 && sqlite3_strnicmp(X.z,"rowid",5)==0 ){
181     A = TF_WithoutRowid | TF_NoVisibleRowid;
182   }else{
183     A = 0;
184     sqlite3ErrorMsg(pParse, "unknown table option: %.*s", X.n, X.z);
185   }
186 }
187 columnlist ::= columnlist COMMA column.
188 columnlist ::= column.
189 
190 // A "column" is a complete description of a single column in a
191 // CREATE TABLE statement.  This includes the column name, its
192 // datatype, and other keywords such as PRIMARY KEY, UNIQUE, REFERENCES,
193 // NOT NULL and so forth.
194 //
195 column(A) ::= columnid(X) type carglist. {
196   A.z = X.z;
197   A.n = (int)(pParse->sLastToken.z-X.z) + pParse->sLastToken.n;
198 }
199 columnid(A) ::= nm(X). {
200   sqlite3AddColumn(pParse,&X);
201   A = X;
202   pParse->constraintName.n = 0;
203 }
204 
205 
206 // An IDENTIFIER can be a generic identifier, or one of several
207 // keywords.  Any non-standard keyword can also be an identifier.
208 //
209 %token_class id  ID|INDEXED.
210 
211 // The following directive causes tokens ABORT, AFTER, ASC, etc. to
212 // fallback to ID if they will not parse as their original value.
213 // This obviates the need for the "id" nonterminal.
214 //
215 %fallback ID
216   ABORT ACTION AFTER ANALYZE ASC ATTACH BEFORE BEGIN BY CASCADE CAST COLUMNKW
217   CONFLICT DATABASE DEFERRED DESC DETACH EACH END EXCLUSIVE EXPLAIN FAIL FOR
218   IGNORE IMMEDIATE INITIALLY INSTEAD LIKE_KW MATCH NO PLAN
219   QUERY KEY OF OFFSET PRAGMA RAISE RECURSIVE RELEASE REPLACE RESTRICT ROW
220   ROLLBACK SAVEPOINT TEMP TRIGGER VACUUM VIEW VIRTUAL WITH WITHOUT
221 %ifdef SQLITE_OMIT_COMPOUND_SELECT
222   EXCEPT INTERSECT UNION
223 %endif SQLITE_OMIT_COMPOUND_SELECT
224   REINDEX RENAME CTIME_KW IF
225   .
226 %wildcard ANY.
227 
228 // Define operator precedence early so that this is the first occurrence
229 // of the operator tokens in the grammer.  Keeping the operators together
230 // causes them to be assigned integer values that are close together,
231 // which keeps parser tables smaller.
232 //
233 // The token values assigned to these symbols is determined by the order
234 // in which lemon first sees them.  It must be the case that ISNULL/NOTNULL,
235 // NE/EQ, GT/LE, and GE/LT are separated by only a single value.  See
236 // the sqlite3ExprIfFalse() routine for additional information on this
237 // constraint.
238 //
239 %left OR.
240 %left AND.
241 %right NOT.
242 %left IS MATCH LIKE_KW BETWEEN IN ISNULL NOTNULL NE EQ.
243 %left GT LE LT GE.
244 %right ESCAPE.
245 %left BITAND BITOR LSHIFT RSHIFT.
246 %left PLUS MINUS.
247 %left STAR SLASH REM.
248 %left CONCAT.
249 %left COLLATE.
250 %right BITNOT.
251 
252 // And "ids" is an identifer-or-string.
253 //
254 %token_class ids  ID|STRING.
255 
256 // The name of a column or table can be any of the following:
257 //
258 %type nm {Token}
259 nm(A) ::= id(X).         {A = X;}
260 nm(A) ::= STRING(X).     {A = X;}
261 nm(A) ::= JOIN_KW(X).    {A = X;}
262 
263 // A typetoken is really one or more tokens that form a type name such
264 // as can be found after the column name in a CREATE TABLE statement.
265 // Multiple tokens are concatenated to form the value of the typetoken.
266 //
267 %type typetoken {Token}
268 type ::= .
269 type ::= typetoken(X).                   {sqlite3AddColumnType(pParse,&X);}
270 typetoken(A) ::= typename(X).   {A = X;}
271 typetoken(A) ::= typename(X) LP signed RP(Y). {
272   A.z = X.z;
273   A.n = (int)(&Y.z[Y.n] - X.z);
274 }
275 typetoken(A) ::= typename(X) LP signed COMMA signed RP(Y). {
276   A.z = X.z;
277   A.n = (int)(&Y.z[Y.n] - X.z);
278 }
279 %type typename {Token}
280 typename(A) ::= ids(X).             {A = X;}
281 typename(A) ::= typename(X) ids(Y). {A.z=X.z; A.n=Y.n+(int)(Y.z-X.z);}
282 signed ::= plus_num.
283 signed ::= minus_num.
284 
285 // "carglist" is a list of additional constraints that come after the
286 // column name and column type in a CREATE TABLE statement.
287 //
288 carglist ::= carglist ccons.
289 carglist ::= .
290 ccons ::= CONSTRAINT nm(X).           {pParse->constraintName = X;}
291 ccons ::= DEFAULT term(X).            {sqlite3AddDefaultValue(pParse,&X);}
292 ccons ::= DEFAULT LP expr(X) RP.      {sqlite3AddDefaultValue(pParse,&X);}
293 ccons ::= DEFAULT PLUS term(X).       {sqlite3AddDefaultValue(pParse,&X);}
294 ccons ::= DEFAULT MINUS(A) term(X).      {
295   ExprSpan v;
296   v.pExpr = sqlite3PExpr(pParse, TK_UMINUS, X.pExpr, 0, 0);
297   v.zStart = A.z;
298   v.zEnd = X.zEnd;
299   sqlite3AddDefaultValue(pParse,&v);
300 }
301 ccons ::= DEFAULT id(X).              {
302   ExprSpan v;
303   spanExpr(&v, pParse, TK_STRING, &X);
304   sqlite3AddDefaultValue(pParse,&v);
305 }
306 
307 // In addition to the type name, we also care about the primary key and
308 // UNIQUE constraints.
309 //
310 ccons ::= NULL onconf.
311 ccons ::= NOT NULL onconf(R).    {sqlite3AddNotNull(pParse, R);}
312 ccons ::= PRIMARY KEY sortorder(Z) onconf(R) autoinc(I).
313                                  {sqlite3AddPrimaryKey(pParse,0,R,I,Z);}
314 ccons ::= UNIQUE onconf(R).      {sqlite3CreateIndex(pParse,0,0,0,0,R,0,0,0,0);}
315 ccons ::= CHECK LP expr(X) RP.   {sqlite3AddCheckConstraint(pParse,X.pExpr);}
316 ccons ::= REFERENCES nm(T) eidlist_opt(TA) refargs(R).
317                                  {sqlite3CreateForeignKey(pParse,0,&T,TA,R);}
318 ccons ::= defer_subclause(D).    {sqlite3DeferForeignKey(pParse,D);}
319 ccons ::= COLLATE ids(C).        {sqlite3AddCollateType(pParse, &C);}
320 
321 // The optional AUTOINCREMENT keyword
322 %type autoinc {int}
323 autoinc(X) ::= .          {X = 0;}
324 autoinc(X) ::= AUTOINCR.  {X = 1;}
325 
326 // The next group of rules parses the arguments to a REFERENCES clause
327 // that determine if the referential integrity checking is deferred or
328 // or immediate and which determine what action to take if a ref-integ
329 // check fails.
330 //
331 %type refargs {int}
332 refargs(A) ::= .                  { A = OE_None*0x0101; /* EV: R-19803-45884 */}
333 refargs(A) ::= refargs(X) refarg(Y). { A = (X & ~Y.mask) | Y.value; }
334 %type refarg {struct {int value; int mask;}}
335 refarg(A) ::= MATCH nm.              { A.value = 0;     A.mask = 0x000000; }
336 refarg(A) ::= ON INSERT refact.      { A.value = 0;     A.mask = 0x000000; }
337 refarg(A) ::= ON DELETE refact(X).   { A.value = X;     A.mask = 0x0000ff; }
338 refarg(A) ::= ON UPDATE refact(X).   { A.value = X<<8;  A.mask = 0x00ff00; }
339 %type refact {int}
340 refact(A) ::= SET NULL.              { A = OE_SetNull;  /* EV: R-33326-45252 */}
341 refact(A) ::= SET DEFAULT.           { A = OE_SetDflt;  /* EV: R-33326-45252 */}
342 refact(A) ::= CASCADE.               { A = OE_Cascade;  /* EV: R-33326-45252 */}
343 refact(A) ::= RESTRICT.              { A = OE_Restrict; /* EV: R-33326-45252 */}
344 refact(A) ::= NO ACTION.             { A = OE_None;     /* EV: R-33326-45252 */}
345 %type defer_subclause {int}
346 defer_subclause(A) ::= NOT DEFERRABLE init_deferred_pred_opt.     {A = 0;}
347 defer_subclause(A) ::= DEFERRABLE init_deferred_pred_opt(X).      {A = X;}
348 %type init_deferred_pred_opt {int}
349 init_deferred_pred_opt(A) ::= .                       {A = 0;}
350 init_deferred_pred_opt(A) ::= INITIALLY DEFERRED.     {A = 1;}
351 init_deferred_pred_opt(A) ::= INITIALLY IMMEDIATE.    {A = 0;}
352 
353 conslist_opt(A) ::= .                         {A.n = 0; A.z = 0;}
354 conslist_opt(A) ::= COMMA(X) conslist.        {A = X;}
355 conslist ::= conslist tconscomma tcons.
356 conslist ::= tcons.
357 tconscomma ::= COMMA.            {pParse->constraintName.n = 0;}
358 tconscomma ::= .
359 tcons ::= CONSTRAINT nm(X).      {pParse->constraintName = X;}
360 tcons ::= PRIMARY KEY LP sortlist(X) autoinc(I) RP onconf(R).
361                                  {sqlite3AddPrimaryKey(pParse,X,R,I,0);}
362 tcons ::= UNIQUE LP sortlist(X) RP onconf(R).
363                                  {sqlite3CreateIndex(pParse,0,0,0,X,R,0,0,0,0);}
364 tcons ::= CHECK LP expr(E) RP onconf.
365                                  {sqlite3AddCheckConstraint(pParse,E.pExpr);}
366 tcons ::= FOREIGN KEY LP eidlist(FA) RP
367           REFERENCES nm(T) eidlist_opt(TA) refargs(R) defer_subclause_opt(D). {
368     sqlite3CreateForeignKey(pParse, FA, &T, TA, R);
369     sqlite3DeferForeignKey(pParse, D);
370 }
371 %type defer_subclause_opt {int}
372 defer_subclause_opt(A) ::= .                    {A = 0;}
373 defer_subclause_opt(A) ::= defer_subclause(X).  {A = X;}
374 
375 // The following is a non-standard extension that allows us to declare the
376 // default behavior when there is a constraint conflict.
377 //
378 %type onconf {int}
379 %type orconf {int}
380 %type resolvetype {int}
381 onconf(A) ::= .                              {A = OE_Default;}
382 onconf(A) ::= ON CONFLICT resolvetype(X).    {A = X;}
383 orconf(A) ::= .                              {A = OE_Default;}
384 orconf(A) ::= OR resolvetype(X).             {A = X;}
385 resolvetype(A) ::= raisetype(X).             {A = X;}
386 resolvetype(A) ::= IGNORE.                   {A = OE_Ignore;}
387 resolvetype(A) ::= REPLACE.                  {A = OE_Replace;}
388 
389 ////////////////////////// The DROP TABLE /////////////////////////////////////
390 //
391 cmd ::= DROP TABLE ifexists(E) fullname(X). {
392   sqlite3DropTable(pParse, X, 0, E);
393 }
394 %type ifexists {int}
395 ifexists(A) ::= IF EXISTS.   {A = 1;}
396 ifexists(A) ::= .            {A = 0;}
397 
398 ///////////////////// The CREATE VIEW statement /////////////////////////////
399 //
400 %ifndef SQLITE_OMIT_VIEW
401 cmd ::= createkw(X) temp(T) VIEW ifnotexists(E) nm(Y) dbnm(Z) eidlist_opt(C)
402           AS select(S). {
403   sqlite3CreateView(pParse, &X, &Y, &Z, C, S, T, E);
404 }
405 cmd ::= DROP VIEW ifexists(E) fullname(X). {
406   sqlite3DropTable(pParse, X, 1, E);
407 }
408 %endif  SQLITE_OMIT_VIEW
409 
410 //////////////////////// The SELECT statement /////////////////////////////////
411 //
412 cmd ::= select(X).  {
413   SelectDest dest = {SRT_Output, 0, 0, 0, 0, 0};
414   sqlite3Select(pParse, X, &dest);
415   sqlite3SelectDelete(pParse->db, X);
416 }
417 
418 %type select {Select*}
419 %destructor select {sqlite3SelectDelete(pParse->db, $$);}
420 %type selectnowith {Select*}
421 %destructor selectnowith {sqlite3SelectDelete(pParse->db, $$);}
422 %type oneselect {Select*}
423 %destructor oneselect {sqlite3SelectDelete(pParse->db, $$);}
424 
425 %include {
426   /*
427   ** For a compound SELECT statement, make sure p->pPrior->pNext==p for
428   ** all elements in the list.  And make sure list length does not exceed
429   ** SQLITE_LIMIT_COMPOUND_SELECT.
430   */
431   static void parserDoubleLinkSelect(Parse *pParse, Select *p){
432     if( p->pPrior ){
433       Select *pNext = 0, *pLoop;
434       int mxSelect, cnt = 0;
435       for(pLoop=p; pLoop; pNext=pLoop, pLoop=pLoop->pPrior, cnt++){
436         pLoop->pNext = pNext;
437         pLoop->selFlags |= SF_Compound;
438       }
439       if( (p->selFlags & SF_MultiValue)==0 &&
440         (mxSelect = pParse->db->aLimit[SQLITE_LIMIT_COMPOUND_SELECT])>0 &&
441         cnt>mxSelect
442       ){
443         sqlite3ErrorMsg(pParse, "too many terms in compound SELECT");
444       }
445     }
446   }
447 }
448 
449 select(A) ::= with(W) selectnowith(X). {
450   Select *p = X;
451   if( p ){
452     p->pWith = W;
453     parserDoubleLinkSelect(pParse, p);
454   }else{
455     sqlite3WithDelete(pParse->db, W);
456   }
457   A = p;
458 }
459 
460 selectnowith(A) ::= oneselect(X).                      {A = X;}
461 %ifndef SQLITE_OMIT_COMPOUND_SELECT
462 selectnowith(A) ::= selectnowith(X) multiselect_op(Y) oneselect(Z).  {
463   Select *pRhs = Z;
464   Select *pLhs = X;
465   if( pRhs && pRhs->pPrior ){
466     SrcList *pFrom;
467     Token x;
468     x.n = 0;
469     parserDoubleLinkSelect(pParse, pRhs);
470     pFrom = sqlite3SrcListAppendFromTerm(pParse,0,0,0,&x,pRhs,0,0);
471     pRhs = sqlite3SelectNew(pParse,0,pFrom,0,0,0,0,0,0,0);
472   }
473   if( pRhs ){
474     pRhs->op = (u8)Y;
475     pRhs->pPrior = pLhs;
476     if( ALWAYS(pLhs) ) pLhs->selFlags &= ~SF_MultiValue;
477     pRhs->selFlags &= ~SF_MultiValue;
478     if( Y!=TK_ALL ) pParse->hasCompound = 1;
479   }else{
480     sqlite3SelectDelete(pParse->db, pLhs);
481   }
482   A = pRhs;
483 }
484 %type multiselect_op {int}
485 multiselect_op(A) ::= UNION(OP).             {A = @OP;}
486 multiselect_op(A) ::= UNION ALL.             {A = TK_ALL;}
487 multiselect_op(A) ::= EXCEPT|INTERSECT(OP).  {A = @OP;}
488 %endif SQLITE_OMIT_COMPOUND_SELECT
489 oneselect(A) ::= SELECT(S) distinct(D) selcollist(W) from(X) where_opt(Y)
490                  groupby_opt(P) having_opt(Q) orderby_opt(Z) limit_opt(L). {
491   A = sqlite3SelectNew(pParse,W,X,Y,P,Q,Z,D,L.pLimit,L.pOffset);
492 #if SELECTTRACE_ENABLED
493   /* Populate the Select.zSelName[] string that is used to help with
494   ** query planner debugging, to differentiate between multiple Select
495   ** objects in a complex query.
496   **
497   ** If the SELECT keyword is immediately followed by a C-style comment
498   ** then extract the first few alphanumeric characters from within that
499   ** comment to be the zSelName value.  Otherwise, the label is #N where
500   ** is an integer that is incremented with each SELECT statement seen.
501   */
502   if( A!=0 ){
503     const char *z = S.z+6;
504     int i;
505     sqlite3_snprintf(sizeof(A->zSelName), A->zSelName, "#%d",
506                      ++pParse->nSelect);
507     while( z[0]==' ' ) z++;
508     if( z[0]=='/' && z[1]=='*' ){
509       z += 2;
510       while( z[0]==' ' ) z++;
511       for(i=0; sqlite3Isalnum(z[i]); i++){}
512       sqlite3_snprintf(sizeof(A->zSelName), A->zSelName, "%.*s", i, z);
513     }
514   }
515 #endif /* SELECTRACE_ENABLED */
516 }
517 oneselect(A) ::= values(X).    {A = X;}
518 
519 %type values {Select*}
520 %destructor values {sqlite3SelectDelete(pParse->db, $$);}
521 values(A) ::= VALUES LP nexprlist(X) RP. {
522   A = sqlite3SelectNew(pParse,X,0,0,0,0,0,SF_Values,0,0);
523 }
524 values(A) ::= values(X) COMMA LP exprlist(Y) RP. {
525   Select *pRight, *pLeft = X;
526   pRight = sqlite3SelectNew(pParse,Y,0,0,0,0,0,SF_Values|SF_MultiValue,0,0);
527   if( ALWAYS(pLeft) ) pLeft->selFlags &= ~SF_MultiValue;
528   if( pRight ){
529     pRight->op = TK_ALL;
530     pLeft = X;
531     pRight->pPrior = pLeft;
532     A = pRight;
533   }else{
534     A = pLeft;
535   }
536 }
537 
538 // The "distinct" nonterminal is true (1) if the DISTINCT keyword is
539 // present and false (0) if it is not.
540 //
541 %type distinct {int}
542 distinct(A) ::= DISTINCT.   {A = SF_Distinct;}
543 distinct(A) ::= ALL.        {A = SF_All;}
544 distinct(A) ::= .           {A = 0;}
545 
546 // selcollist is a list of expressions that are to become the return
547 // values of the SELECT statement.  The "*" in statements like
548 // "SELECT * FROM ..." is encoded as a special expression with an
549 // opcode of TK_ASTERISK.
550 //
551 %type selcollist {ExprList*}
552 %destructor selcollist {sqlite3ExprListDelete(pParse->db, $$);}
553 %type sclp {ExprList*}
554 %destructor sclp {sqlite3ExprListDelete(pParse->db, $$);}
555 sclp(A) ::= selcollist(X) COMMA.             {A = X;}
556 sclp(A) ::= .                                {A = 0;}
557 selcollist(A) ::= sclp(P) expr(X) as(Y).     {
558    A = sqlite3ExprListAppend(pParse, P, X.pExpr);
559    if( Y.n>0 ) sqlite3ExprListSetName(pParse, A, &Y, 1);
560    sqlite3ExprListSetSpan(pParse,A,&X);
561 }
562 selcollist(A) ::= sclp(P) STAR. {
563   Expr *p = sqlite3Expr(pParse->db, TK_ASTERISK, 0);
564   A = sqlite3ExprListAppend(pParse, P, p);
565 }
566 selcollist(A) ::= sclp(P) nm(X) DOT STAR(Y). {
567   Expr *pRight = sqlite3PExpr(pParse, TK_ASTERISK, 0, 0, &Y);
568   Expr *pLeft = sqlite3PExpr(pParse, TK_ID, 0, 0, &X);
569   Expr *pDot = sqlite3PExpr(pParse, TK_DOT, pLeft, pRight, 0);
570   A = sqlite3ExprListAppend(pParse,P, pDot);
571 }
572 
573 // An option "AS <id>" phrase that can follow one of the expressions that
574 // define the result set, or one of the tables in the FROM clause.
575 //
576 %type as {Token}
577 as(X) ::= AS nm(Y).    {X = Y;}
578 as(X) ::= ids(Y).      {X = Y;}
579 as(X) ::= .            {X.n = 0;}
580 
581 
582 %type seltablist {SrcList*}
583 %destructor seltablist {sqlite3SrcListDelete(pParse->db, $$);}
584 %type stl_prefix {SrcList*}
585 %destructor stl_prefix {sqlite3SrcListDelete(pParse->db, $$);}
586 %type from {SrcList*}
587 %destructor from {sqlite3SrcListDelete(pParse->db, $$);}
588 
589 // A complete FROM clause.
590 //
591 from(A) ::= .                {A = sqlite3DbMallocZero(pParse->db, sizeof(*A));}
592 from(A) ::= FROM seltablist(X). {
593   A = X;
594   sqlite3SrcListShiftJoinType(A);
595 }
596 
597 // "seltablist" is a "Select Table List" - the content of the FROM clause
598 // in a SELECT statement.  "stl_prefix" is a prefix of this list.
599 //
600 stl_prefix(A) ::= seltablist(X) joinop(Y).    {
601    A = X;
602    if( ALWAYS(A && A->nSrc>0) ) A->a[A->nSrc-1].fg.jointype = (u8)Y;
603 }
604 stl_prefix(A) ::= .                           {A = 0;}
605 seltablist(A) ::= stl_prefix(X) nm(Y) dbnm(D) as(Z) indexed_opt(I)
606                   on_opt(N) using_opt(U). {
607   A = sqlite3SrcListAppendFromTerm(pParse,X,&Y,&D,&Z,0,N,U);
608   sqlite3SrcListIndexedBy(pParse, A, &I);
609 }
610 seltablist(A) ::= stl_prefix(X) nm(Y) dbnm(D) LP exprlist(E) RP as(Z)
611                   on_opt(N) using_opt(U). {
612   A = sqlite3SrcListAppendFromTerm(pParse,X,&Y,&D,&Z,0,N,U);
613   sqlite3SrcListFuncArgs(pParse, A, E);
614 }
615 %ifndef SQLITE_OMIT_SUBQUERY
616   seltablist(A) ::= stl_prefix(X) LP select(S) RP
617                     as(Z) on_opt(N) using_opt(U). {
618     A = sqlite3SrcListAppendFromTerm(pParse,X,0,0,&Z,S,N,U);
619   }
620   seltablist(A) ::= stl_prefix(X) LP seltablist(F) RP
621                     as(Z) on_opt(N) using_opt(U). {
622     if( X==0 && Z.n==0 && N==0 && U==0 ){
623       A = F;
624     }else if( F->nSrc==1 ){
625       A = sqlite3SrcListAppendFromTerm(pParse,X,0,0,&Z,0,N,U);
626       if( A ){
627         struct SrcList_item *pNew = &A->a[A->nSrc-1];
628         struct SrcList_item *pOld = F->a;
629         pNew->zName = pOld->zName;
630         pNew->zDatabase = pOld->zDatabase;
631         pNew->pSelect = pOld->pSelect;
632         pOld->zName = pOld->zDatabase = 0;
633         pOld->pSelect = 0;
634       }
635       sqlite3SrcListDelete(pParse->db, F);
636     }else{
637       Select *pSubquery;
638       sqlite3SrcListShiftJoinType(F);
639       pSubquery = sqlite3SelectNew(pParse,0,F,0,0,0,0,SF_NestedFrom,0,0);
640       A = sqlite3SrcListAppendFromTerm(pParse,X,0,0,&Z,pSubquery,N,U);
641     }
642   }
643 %endif  SQLITE_OMIT_SUBQUERY
644 
645 %type dbnm {Token}
646 dbnm(A) ::= .          {A.z=0; A.n=0;}
647 dbnm(A) ::= DOT nm(X). {A = X;}
648 
649 %type fullname {SrcList*}
650 %destructor fullname {sqlite3SrcListDelete(pParse->db, $$);}
651 fullname(A) ::= nm(X) dbnm(Y).  {A = sqlite3SrcListAppend(pParse->db,0,&X,&Y);}
652 
653 %type joinop {int}
654 joinop(X) ::= COMMA|JOIN.              { X = JT_INNER; }
655 joinop(X) ::= JOIN_KW(A) JOIN.         { X = sqlite3JoinType(pParse,&A,0,0); }
656 joinop(X) ::= JOIN_KW(A) nm(B) JOIN.   { X = sqlite3JoinType(pParse,&A,&B,0); }
657 joinop(X) ::= JOIN_KW(A) nm(B) nm(C) JOIN.
658                                        { X = sqlite3JoinType(pParse,&A,&B,&C); }
659 
660 %type on_opt {Expr*}
661 %destructor on_opt {sqlite3ExprDelete(pParse->db, $$);}
662 on_opt(N) ::= ON expr(E).   {N = E.pExpr;}
663 on_opt(N) ::= .             {N = 0;}
664 
665 // Note that this block abuses the Token type just a little. If there is
666 // no "INDEXED BY" clause, the returned token is empty (z==0 && n==0). If
667 // there is an INDEXED BY clause, then the token is populated as per normal,
668 // with z pointing to the token data and n containing the number of bytes
669 // in the token.
670 //
671 // If there is a "NOT INDEXED" clause, then (z==0 && n==1), which is
672 // normally illegal. The sqlite3SrcListIndexedBy() function
673 // recognizes and interprets this as a special case.
674 //
675 %type indexed_opt {Token}
676 indexed_opt(A) ::= .                 {A.z=0; A.n=0;}
677 indexed_opt(A) ::= INDEXED BY nm(X). {A = X;}
678 indexed_opt(A) ::= NOT INDEXED.      {A.z=0; A.n=1;}
679 
680 %type using_opt {IdList*}
681 %destructor using_opt {sqlite3IdListDelete(pParse->db, $$);}
682 using_opt(U) ::= USING LP idlist(L) RP.  {U = L;}
683 using_opt(U) ::= .                        {U = 0;}
684 
685 
686 %type orderby_opt {ExprList*}
687 %destructor orderby_opt {sqlite3ExprListDelete(pParse->db, $$);}
688 
689 // the sortlist non-terminal stores a list of expression where each
690 // expression is optionally followed by ASC or DESC to indicate the
691 // sort order.
692 //
693 %type sortlist {ExprList*}
694 %destructor sortlist {sqlite3ExprListDelete(pParse->db, $$);}
695 
696 orderby_opt(A) ::= .                          {A = 0;}
697 orderby_opt(A) ::= ORDER BY sortlist(X).      {A = X;}
698 sortlist(A) ::= sortlist(X) COMMA expr(Y) sortorder(Z). {
699   A = sqlite3ExprListAppend(pParse,X,Y.pExpr);
700   sqlite3ExprListSetSortOrder(A,Z);
701 }
702 sortlist(A) ::= expr(Y) sortorder(Z). {
703   A = sqlite3ExprListAppend(pParse,0,Y.pExpr);
704   sqlite3ExprListSetSortOrder(A,Z);
705 }
706 
707 %type sortorder {int}
708 
709 sortorder(A) ::= ASC.           {A = SQLITE_SO_ASC;}
710 sortorder(A) ::= DESC.          {A = SQLITE_SO_DESC;}
711 sortorder(A) ::= .              {A = SQLITE_SO_UNDEFINED;}
712 
713 %type groupby_opt {ExprList*}
714 %destructor groupby_opt {sqlite3ExprListDelete(pParse->db, $$);}
715 groupby_opt(A) ::= .                      {A = 0;}
716 groupby_opt(A) ::= GROUP BY nexprlist(X). {A = X;}
717 
718 %type having_opt {Expr*}
719 %destructor having_opt {sqlite3ExprDelete(pParse->db, $$);}
720 having_opt(A) ::= .                {A = 0;}
721 having_opt(A) ::= HAVING expr(X).  {A = X.pExpr;}
722 
723 %type limit_opt {struct LimitVal}
724 
725 // The destructor for limit_opt will never fire in the current grammar.
726 // The limit_opt non-terminal only occurs at the end of a single production
727 // rule for SELECT statements.  As soon as the rule that create the
728 // limit_opt non-terminal reduces, the SELECT statement rule will also
729 // reduce.  So there is never a limit_opt non-terminal on the stack
730 // except as a transient.  So there is never anything to destroy.
731 //
732 //%destructor limit_opt {
733 //  sqlite3ExprDelete(pParse->db, $$.pLimit);
734 //  sqlite3ExprDelete(pParse->db, $$.pOffset);
735 //}
736 limit_opt(A) ::= .                    {A.pLimit = 0; A.pOffset = 0;}
737 limit_opt(A) ::= LIMIT expr(X).       {A.pLimit = X.pExpr; A.pOffset = 0;}
738 limit_opt(A) ::= LIMIT expr(X) OFFSET expr(Y).
739                                       {A.pLimit = X.pExpr; A.pOffset = Y.pExpr;}
740 limit_opt(A) ::= LIMIT expr(X) COMMA expr(Y).
741                                       {A.pOffset = X.pExpr; A.pLimit = Y.pExpr;}
742 
743 /////////////////////////// The DELETE statement /////////////////////////////
744 //
745 %ifdef SQLITE_ENABLE_UPDATE_DELETE_LIMIT
746 cmd ::= with(C) DELETE FROM fullname(X) indexed_opt(I) where_opt(W)
747         orderby_opt(O) limit_opt(L). {
748   sqlite3WithPush(pParse, C, 1);
749   sqlite3SrcListIndexedBy(pParse, X, &I);
750   W = sqlite3LimitWhere(pParse, X, W, O, L.pLimit, L.pOffset, "DELETE");
751   sqlite3DeleteFrom(pParse,X,W);
752 }
753 %endif
754 %ifndef SQLITE_ENABLE_UPDATE_DELETE_LIMIT
755 cmd ::= with(C) DELETE FROM fullname(X) indexed_opt(I) where_opt(W). {
756   sqlite3WithPush(pParse, C, 1);
757   sqlite3SrcListIndexedBy(pParse, X, &I);
758   sqlite3DeleteFrom(pParse,X,W);
759 }
760 %endif
761 
762 %type where_opt {Expr*}
763 %destructor where_opt {sqlite3ExprDelete(pParse->db, $$);}
764 
765 where_opt(A) ::= .                    {A = 0;}
766 where_opt(A) ::= WHERE expr(X).       {A = X.pExpr;}
767 
768 ////////////////////////// The UPDATE command ////////////////////////////////
769 //
770 %ifdef SQLITE_ENABLE_UPDATE_DELETE_LIMIT
771 cmd ::= with(C) UPDATE orconf(R) fullname(X) indexed_opt(I) SET setlist(Y)
772         where_opt(W) orderby_opt(O) limit_opt(L).  {
773   sqlite3WithPush(pParse, C, 1);
774   sqlite3SrcListIndexedBy(pParse, X, &I);
775   sqlite3ExprListCheckLength(pParse,Y,"set list");
776   W = sqlite3LimitWhere(pParse, X, W, O, L.pLimit, L.pOffset, "UPDATE");
777   sqlite3Update(pParse,X,Y,W,R);
778 }
779 %endif
780 %ifndef SQLITE_ENABLE_UPDATE_DELETE_LIMIT
781 cmd ::= with(C) UPDATE orconf(R) fullname(X) indexed_opt(I) SET setlist(Y)
782         where_opt(W).  {
783   sqlite3WithPush(pParse, C, 1);
784   sqlite3SrcListIndexedBy(pParse, X, &I);
785   sqlite3ExprListCheckLength(pParse,Y,"set list");
786   sqlite3Update(pParse,X,Y,W,R);
787 }
788 %endif
789 
790 %type setlist {ExprList*}
791 %destructor setlist {sqlite3ExprListDelete(pParse->db, $$);}
792 
793 setlist(A) ::= setlist(Z) COMMA nm(X) EQ expr(Y). {
794   A = sqlite3ExprListAppend(pParse, Z, Y.pExpr);
795   sqlite3ExprListSetName(pParse, A, &X, 1);
796 }
797 setlist(A) ::= nm(X) EQ expr(Y). {
798   A = sqlite3ExprListAppend(pParse, 0, Y.pExpr);
799   sqlite3ExprListSetName(pParse, A, &X, 1);
800 }
801 
802 ////////////////////////// The INSERT command /////////////////////////////////
803 //
804 cmd ::= with(W) insert_cmd(R) INTO fullname(X) idlist_opt(F) select(S). {
805   sqlite3WithPush(pParse, W, 1);
806   sqlite3Insert(pParse, X, S, F, R);
807 }
808 cmd ::= with(W) insert_cmd(R) INTO fullname(X) idlist_opt(F) DEFAULT VALUES.
809 {
810   sqlite3WithPush(pParse, W, 1);
811   sqlite3Insert(pParse, X, 0, F, R);
812 }
813 
814 %type insert_cmd {int}
815 insert_cmd(A) ::= INSERT orconf(R).   {A = R;}
816 insert_cmd(A) ::= REPLACE.            {A = OE_Replace;}
817 
818 %type idlist_opt {IdList*}
819 %destructor idlist_opt {sqlite3IdListDelete(pParse->db, $$);}
820 %type idlist {IdList*}
821 %destructor idlist {sqlite3IdListDelete(pParse->db, $$);}
822 
823 idlist_opt(A) ::= .                       {A = 0;}
824 idlist_opt(A) ::= LP idlist(X) RP.    {A = X;}
825 idlist(A) ::= idlist(X) COMMA nm(Y).
826     {A = sqlite3IdListAppend(pParse->db,X,&Y);}
827 idlist(A) ::= nm(Y).
828     {A = sqlite3IdListAppend(pParse->db,0,&Y);}
829 
830 /////////////////////////// Expression Processing /////////////////////////////
831 //
832 
833 %type expr {ExprSpan}
834 %destructor expr {sqlite3ExprDelete(pParse->db, $$.pExpr);}
835 %type term {ExprSpan}
836 %destructor term {sqlite3ExprDelete(pParse->db, $$.pExpr);}
837 
838 %include {
839   /* This is a utility routine used to set the ExprSpan.zStart and
840   ** ExprSpan.zEnd values of pOut so that the span covers the complete
841   ** range of text beginning with pStart and going to the end of pEnd.
842   */
843   static void spanSet(ExprSpan *pOut, Token *pStart, Token *pEnd){
844     pOut->zStart = pStart->z;
845     pOut->zEnd = &pEnd->z[pEnd->n];
846   }
847 
848   /* Construct a new Expr object from a single identifier.  Use the
849   ** new Expr to populate pOut.  Set the span of pOut to be the identifier
850   ** that created the expression.
851   */
852   static void spanExpr(ExprSpan *pOut, Parse *pParse, int op, Token *pValue){
853     pOut->pExpr = sqlite3PExpr(pParse, op, 0, 0, pValue);
854     pOut->zStart = pValue->z;
855     pOut->zEnd = &pValue->z[pValue->n];
856   }
857 }
858 
859 expr(A) ::= term(X).             {A = X;}
860 expr(A) ::= LP(B) expr(X) RP(E). {A.pExpr = X.pExpr; spanSet(&A,&B,&E);}
861 term(A) ::= NULL(X).             {spanExpr(&A, pParse, @X, &X);}
862 expr(A) ::= id(X).               {spanExpr(&A, pParse, TK_ID, &X);}
863 expr(A) ::= JOIN_KW(X).          {spanExpr(&A, pParse, TK_ID, &X);}
864 expr(A) ::= nm(X) DOT nm(Y). {
865   Expr *temp1 = sqlite3PExpr(pParse, TK_ID, 0, 0, &X);
866   Expr *temp2 = sqlite3PExpr(pParse, TK_ID, 0, 0, &Y);
867   A.pExpr = sqlite3PExpr(pParse, TK_DOT, temp1, temp2, 0);
868   spanSet(&A,&X,&Y);
869 }
870 expr(A) ::= nm(X) DOT nm(Y) DOT nm(Z). {
871   Expr *temp1 = sqlite3PExpr(pParse, TK_ID, 0, 0, &X);
872   Expr *temp2 = sqlite3PExpr(pParse, TK_ID, 0, 0, &Y);
873   Expr *temp3 = sqlite3PExpr(pParse, TK_ID, 0, 0, &Z);
874   Expr *temp4 = sqlite3PExpr(pParse, TK_DOT, temp2, temp3, 0);
875   A.pExpr = sqlite3PExpr(pParse, TK_DOT, temp1, temp4, 0);
876   spanSet(&A,&X,&Z);
877 }
878 term(A) ::= INTEGER|FLOAT|BLOB(X).  {spanExpr(&A, pParse, @X, &X);}
879 term(A) ::= STRING(X).              {spanExpr(&A, pParse, @X, &X);}
880 expr(A) ::= VARIABLE(X).     {
881   if( X.n>=2 && X.z[0]=='#' && sqlite3Isdigit(X.z[1]) ){
882     /* When doing a nested parse, one can include terms in an expression
883     ** that look like this:   #1 #2 ...  These terms refer to registers
884     ** in the virtual machine.  #N is the N-th register. */
885     if( pParse->nested==0 ){
886       sqlite3ErrorMsg(pParse, "near \"%T\": syntax error", &X);
887       A.pExpr = 0;
888     }else{
889       A.pExpr = sqlite3PExpr(pParse, TK_REGISTER, 0, 0, &X);
890       if( A.pExpr ) sqlite3GetInt32(&X.z[1], &A.pExpr->iTable);
891     }
892   }else{
893     spanExpr(&A, pParse, TK_VARIABLE, &X);
894     sqlite3ExprAssignVarNumber(pParse, A.pExpr);
895   }
896   spanSet(&A, &X, &X);
897 }
898 expr(A) ::= expr(E) COLLATE ids(C). {
899   A.pExpr = sqlite3ExprAddCollateToken(pParse, E.pExpr, &C, 1);
900   A.zStart = E.zStart;
901   A.zEnd = &C.z[C.n];
902 }
903 %ifndef SQLITE_OMIT_CAST
904 expr(A) ::= CAST(X) LP expr(E) AS typetoken(T) RP(Y). {
905   A.pExpr = sqlite3PExpr(pParse, TK_CAST, E.pExpr, 0, &T);
906   spanSet(&A,&X,&Y);
907 }
908 %endif  SQLITE_OMIT_CAST
909 expr(A) ::= id(X) LP distinct(D) exprlist(Y) RP(E). {
910   if( Y && Y->nExpr>pParse->db->aLimit[SQLITE_LIMIT_FUNCTION_ARG] ){
911     sqlite3ErrorMsg(pParse, "too many arguments on function %T", &X);
912   }
913   A.pExpr = sqlite3ExprFunction(pParse, Y, &X);
914   spanSet(&A,&X,&E);
915   if( D==SF_Distinct && A.pExpr ){
916     A.pExpr->flags |= EP_Distinct;
917   }
918 }
919 expr(A) ::= id(X) LP STAR RP(E). {
920   A.pExpr = sqlite3ExprFunction(pParse, 0, &X);
921   spanSet(&A,&X,&E);
922 }
923 term(A) ::= CTIME_KW(OP). {
924   A.pExpr = sqlite3ExprFunction(pParse, 0, &OP);
925   spanSet(&A, &OP, &OP);
926 }
927 
928 %include {
929   /* This routine constructs a binary expression node out of two ExprSpan
930   ** objects and uses the result to populate a new ExprSpan object.
931   */
932   static void spanBinaryExpr(
933     ExprSpan *pOut,     /* Write the result here */
934     Parse *pParse,      /* The parsing context.  Errors accumulate here */
935     int op,             /* The binary operation */
936     ExprSpan *pLeft,    /* The left operand */
937     ExprSpan *pRight    /* The right operand */
938   ){
939     pOut->pExpr = sqlite3PExpr(pParse, op, pLeft->pExpr, pRight->pExpr, 0);
940     pOut->zStart = pLeft->zStart;
941     pOut->zEnd = pRight->zEnd;
942   }
943 
944   /* If doNot is true, then add a TK_NOT Expr-node wrapper around the
945   ** outside of *ppExpr.
946   */
947   static void exprNot(Parse *pParse, int doNot, Expr **ppExpr){
948     if( doNot ) *ppExpr = sqlite3PExpr(pParse, TK_NOT, *ppExpr, 0, 0);
949   }
950 }
951 
952 expr(A) ::= expr(X) AND(OP) expr(Y).    {spanBinaryExpr(&A,pParse,@OP,&X,&Y);}
953 expr(A) ::= expr(X) OR(OP) expr(Y).     {spanBinaryExpr(&A,pParse,@OP,&X,&Y);}
954 expr(A) ::= expr(X) LT|GT|GE|LE(OP) expr(Y).
955                                         {spanBinaryExpr(&A,pParse,@OP,&X,&Y);}
956 expr(A) ::= expr(X) EQ|NE(OP) expr(Y).  {spanBinaryExpr(&A,pParse,@OP,&X,&Y);}
957 expr(A) ::= expr(X) BITAND|BITOR|LSHIFT|RSHIFT(OP) expr(Y).
958                                         {spanBinaryExpr(&A,pParse,@OP,&X,&Y);}
959 expr(A) ::= expr(X) PLUS|MINUS(OP) expr(Y).
960                                         {spanBinaryExpr(&A,pParse,@OP,&X,&Y);}
961 expr(A) ::= expr(X) STAR|SLASH|REM(OP) expr(Y).
962                                         {spanBinaryExpr(&A,pParse,@OP,&X,&Y);}
963 expr(A) ::= expr(X) CONCAT(OP) expr(Y). {spanBinaryExpr(&A,pParse,@OP,&X,&Y);}
964 %type likeop {struct LikeOp}
965 likeop(A) ::= LIKE_KW|MATCH(X).     {A.eOperator = X; A.bNot = 0;}
966 likeop(A) ::= NOT LIKE_KW|MATCH(X). {A.eOperator = X; A.bNot = 1;}
967 expr(A) ::= expr(X) likeop(OP) expr(Y).  [LIKE_KW]  {
968   ExprList *pList;
969   pList = sqlite3ExprListAppend(pParse,0, Y.pExpr);
970   pList = sqlite3ExprListAppend(pParse,pList, X.pExpr);
971   A.pExpr = sqlite3ExprFunction(pParse, pList, &OP.eOperator);
972   exprNot(pParse, OP.bNot, &A.pExpr);
973   A.zStart = X.zStart;
974   A.zEnd = Y.zEnd;
975   if( A.pExpr ) A.pExpr->flags |= EP_InfixFunc;
976 }
977 expr(A) ::= expr(X) likeop(OP) expr(Y) ESCAPE expr(E).  [LIKE_KW]  {
978   ExprList *pList;
979   pList = sqlite3ExprListAppend(pParse,0, Y.pExpr);
980   pList = sqlite3ExprListAppend(pParse,pList, X.pExpr);
981   pList = sqlite3ExprListAppend(pParse,pList, E.pExpr);
982   A.pExpr = sqlite3ExprFunction(pParse, pList, &OP.eOperator);
983   exprNot(pParse, OP.bNot, &A.pExpr);
984   A.zStart = X.zStart;
985   A.zEnd = E.zEnd;
986   if( A.pExpr ) A.pExpr->flags |= EP_InfixFunc;
987 }
988 
989 %include {
990   /* Construct an expression node for a unary postfix operator
991   */
992   static void spanUnaryPostfix(
993     ExprSpan *pOut,        /* Write the new expression node here */
994     Parse *pParse,         /* Parsing context to record errors */
995     int op,                /* The operator */
996     ExprSpan *pOperand,    /* The operand */
997     Token *pPostOp         /* The operand token for setting the span */
998   ){
999     pOut->pExpr = sqlite3PExpr(pParse, op, pOperand->pExpr, 0, 0);
1000     pOut->zStart = pOperand->zStart;
1001     pOut->zEnd = &pPostOp->z[pPostOp->n];
1002   }
1003 }
1004 
1005 expr(A) ::= expr(X) ISNULL|NOTNULL(E).   {spanUnaryPostfix(&A,pParse,@E,&X,&E);}
1006 expr(A) ::= expr(X) NOT NULL(E). {spanUnaryPostfix(&A,pParse,TK_NOTNULL,&X,&E);}
1007 
1008 %include {
1009   /* A routine to convert a binary TK_IS or TK_ISNOT expression into a
1010   ** unary TK_ISNULL or TK_NOTNULL expression. */
1011   static void binaryToUnaryIfNull(Parse *pParse, Expr *pY, Expr *pA, int op){
1012     sqlite3 *db = pParse->db;
1013     if( pY && pA && pY->op==TK_NULL ){
1014       pA->op = (u8)op;
1015       sqlite3ExprDelete(db, pA->pRight);
1016       pA->pRight = 0;
1017     }
1018   }
1019 }
1020 
1021 //    expr1 IS expr2
1022 //    expr1 IS NOT expr2
1023 //
1024 // If expr2 is NULL then code as TK_ISNULL or TK_NOTNULL.  If expr2
1025 // is any other expression, code as TK_IS or TK_ISNOT.
1026 //
1027 expr(A) ::= expr(X) IS expr(Y).     {
1028   spanBinaryExpr(&A,pParse,TK_IS,&X,&Y);
1029   binaryToUnaryIfNull(pParse, Y.pExpr, A.pExpr, TK_ISNULL);
1030 }
1031 expr(A) ::= expr(X) IS NOT expr(Y). {
1032   spanBinaryExpr(&A,pParse,TK_ISNOT,&X,&Y);
1033   binaryToUnaryIfNull(pParse, Y.pExpr, A.pExpr, TK_NOTNULL);
1034 }
1035 
1036 %include {
1037   /* Construct an expression node for a unary prefix operator
1038   */
1039   static void spanUnaryPrefix(
1040     ExprSpan *pOut,        /* Write the new expression node here */
1041     Parse *pParse,         /* Parsing context to record errors */
1042     int op,                /* The operator */
1043     ExprSpan *pOperand,    /* The operand */
1044     Token *pPreOp         /* The operand token for setting the span */
1045   ){
1046     pOut->pExpr = sqlite3PExpr(pParse, op, pOperand->pExpr, 0, 0);
1047     pOut->zStart = pPreOp->z;
1048     pOut->zEnd = pOperand->zEnd;
1049   }
1050 }
1051 
1052 
1053 
1054 expr(A) ::= NOT(B) expr(X).    {spanUnaryPrefix(&A,pParse,@B,&X,&B);}
1055 expr(A) ::= BITNOT(B) expr(X). {spanUnaryPrefix(&A,pParse,@B,&X,&B);}
1056 expr(A) ::= MINUS(B) expr(X). [BITNOT]
1057                                {spanUnaryPrefix(&A,pParse,TK_UMINUS,&X,&B);}
1058 expr(A) ::= PLUS(B) expr(X). [BITNOT]
1059                                {spanUnaryPrefix(&A,pParse,TK_UPLUS,&X,&B);}
1060 
1061 %type between_op {int}
1062 between_op(A) ::= BETWEEN.     {A = 0;}
1063 between_op(A) ::= NOT BETWEEN. {A = 1;}
1064 expr(A) ::= expr(W) between_op(N) expr(X) AND expr(Y). [BETWEEN] {
1065   ExprList *pList = sqlite3ExprListAppend(pParse,0, X.pExpr);
1066   pList = sqlite3ExprListAppend(pParse,pList, Y.pExpr);
1067   A.pExpr = sqlite3PExpr(pParse, TK_BETWEEN, W.pExpr, 0, 0);
1068   if( A.pExpr ){
1069     A.pExpr->x.pList = pList;
1070   }else{
1071     sqlite3ExprListDelete(pParse->db, pList);
1072   }
1073   exprNot(pParse, N, &A.pExpr);
1074   A.zStart = W.zStart;
1075   A.zEnd = Y.zEnd;
1076 }
1077 %ifndef SQLITE_OMIT_SUBQUERY
1078   %type in_op {int}
1079   in_op(A) ::= IN.      {A = 0;}
1080   in_op(A) ::= NOT IN.  {A = 1;}
1081   expr(A) ::= expr(X) in_op(N) LP exprlist(Y) RP(E). [IN] {
1082     if( Y==0 ){
1083       /* Expressions of the form
1084       **
1085       **      expr1 IN ()
1086       **      expr1 NOT IN ()
1087       **
1088       ** simplify to constants 0 (false) and 1 (true), respectively,
1089       ** regardless of the value of expr1.
1090       */
1091       A.pExpr = sqlite3PExpr(pParse, TK_INTEGER, 0, 0, &sqlite3IntTokens[N]);
1092       sqlite3ExprDelete(pParse->db, X.pExpr);
1093     }else if( Y->nExpr==1 ){
1094       /* Expressions of the form:
1095       **
1096       **      expr1 IN (?1)
1097       **      expr1 NOT IN (?2)
1098       **
1099       ** with exactly one value on the RHS can be simplified to something
1100       ** like this:
1101       **
1102       **      expr1 == ?1
1103       **      expr1 <> ?2
1104       **
1105       ** But, the RHS of the == or <> is marked with the EP_Generic flag
1106       ** so that it may not contribute to the computation of comparison
1107       ** affinity or the collating sequence to use for comparison.  Otherwise,
1108       ** the semantics would be subtly different from IN or NOT IN.
1109       */
1110       Expr *pRHS = Y->a[0].pExpr;
1111       Y->a[0].pExpr = 0;
1112       sqlite3ExprListDelete(pParse->db, Y);
1113       /* pRHS cannot be NULL because a malloc error would have been detected
1114       ** before now and control would have never reached this point */
1115       if( ALWAYS(pRHS) ){
1116         pRHS->flags &= ~EP_Collate;
1117         pRHS->flags |= EP_Generic;
1118       }
1119       A.pExpr = sqlite3PExpr(pParse, N ? TK_NE : TK_EQ, X.pExpr, pRHS, 0);
1120     }else{
1121       A.pExpr = sqlite3PExpr(pParse, TK_IN, X.pExpr, 0, 0);
1122       if( A.pExpr ){
1123         A.pExpr->x.pList = Y;
1124         sqlite3ExprSetHeightAndFlags(pParse, A.pExpr);
1125       }else{
1126         sqlite3ExprListDelete(pParse->db, Y);
1127       }
1128       exprNot(pParse, N, &A.pExpr);
1129     }
1130     A.zStart = X.zStart;
1131     A.zEnd = &E.z[E.n];
1132   }
1133   expr(A) ::= LP(B) select(X) RP(E). {
1134     A.pExpr = sqlite3PExpr(pParse, TK_SELECT, 0, 0, 0);
1135     if( A.pExpr ){
1136       A.pExpr->x.pSelect = X;
1137       ExprSetProperty(A.pExpr, EP_xIsSelect|EP_Subquery);
1138       sqlite3ExprSetHeightAndFlags(pParse, A.pExpr);
1139     }else{
1140       sqlite3SelectDelete(pParse->db, X);
1141     }
1142     A.zStart = B.z;
1143     A.zEnd = &E.z[E.n];
1144   }
1145   expr(A) ::= expr(X) in_op(N) LP select(Y) RP(E).  [IN] {
1146     A.pExpr = sqlite3PExpr(pParse, TK_IN, X.pExpr, 0, 0);
1147     if( A.pExpr ){
1148       A.pExpr->x.pSelect = Y;
1149       ExprSetProperty(A.pExpr, EP_xIsSelect|EP_Subquery);
1150       sqlite3ExprSetHeightAndFlags(pParse, A.pExpr);
1151     }else{
1152       sqlite3SelectDelete(pParse->db, Y);
1153     }
1154     exprNot(pParse, N, &A.pExpr);
1155     A.zStart = X.zStart;
1156     A.zEnd = &E.z[E.n];
1157   }
1158   expr(A) ::= expr(X) in_op(N) nm(Y) dbnm(Z). [IN] {
1159     SrcList *pSrc = sqlite3SrcListAppend(pParse->db, 0,&Y,&Z);
1160     A.pExpr = sqlite3PExpr(pParse, TK_IN, X.pExpr, 0, 0);
1161     if( A.pExpr ){
1162       A.pExpr->x.pSelect = sqlite3SelectNew(pParse, 0,pSrc,0,0,0,0,0,0,0);
1163       ExprSetProperty(A.pExpr, EP_xIsSelect|EP_Subquery);
1164       sqlite3ExprSetHeightAndFlags(pParse, A.pExpr);
1165     }else{
1166       sqlite3SrcListDelete(pParse->db, pSrc);
1167     }
1168     exprNot(pParse, N, &A.pExpr);
1169     A.zStart = X.zStart;
1170     A.zEnd = Z.z ? &Z.z[Z.n] : &Y.z[Y.n];
1171   }
1172   expr(A) ::= EXISTS(B) LP select(Y) RP(E). {
1173     Expr *p = A.pExpr = sqlite3PExpr(pParse, TK_EXISTS, 0, 0, 0);
1174     if( p ){
1175       p->x.pSelect = Y;
1176       ExprSetProperty(p, EP_xIsSelect|EP_Subquery);
1177       sqlite3ExprSetHeightAndFlags(pParse, p);
1178     }else{
1179       sqlite3SelectDelete(pParse->db, Y);
1180     }
1181     A.zStart = B.z;
1182     A.zEnd = &E.z[E.n];
1183   }
1184 %endif SQLITE_OMIT_SUBQUERY
1185 
1186 /* CASE expressions */
1187 expr(A) ::= CASE(C) case_operand(X) case_exprlist(Y) case_else(Z) END(E). {
1188   A.pExpr = sqlite3PExpr(pParse, TK_CASE, X, 0, 0);
1189   if( A.pExpr ){
1190     A.pExpr->x.pList = Z ? sqlite3ExprListAppend(pParse,Y,Z) : Y;
1191     sqlite3ExprSetHeightAndFlags(pParse, A.pExpr);
1192   }else{
1193     sqlite3ExprListDelete(pParse->db, Y);
1194     sqlite3ExprDelete(pParse->db, Z);
1195   }
1196   A.zStart = C.z;
1197   A.zEnd = &E.z[E.n];
1198 }
1199 %type case_exprlist {ExprList*}
1200 %destructor case_exprlist {sqlite3ExprListDelete(pParse->db, $$);}
1201 case_exprlist(A) ::= case_exprlist(X) WHEN expr(Y) THEN expr(Z). {
1202   A = sqlite3ExprListAppend(pParse,X, Y.pExpr);
1203   A = sqlite3ExprListAppend(pParse,A, Z.pExpr);
1204 }
1205 case_exprlist(A) ::= WHEN expr(Y) THEN expr(Z). {
1206   A = sqlite3ExprListAppend(pParse,0, Y.pExpr);
1207   A = sqlite3ExprListAppend(pParse,A, Z.pExpr);
1208 }
1209 %type case_else {Expr*}
1210 %destructor case_else {sqlite3ExprDelete(pParse->db, $$);}
1211 case_else(A) ::=  ELSE expr(X).         {A = X.pExpr;}
1212 case_else(A) ::=  .                     {A = 0;}
1213 %type case_operand {Expr*}
1214 %destructor case_operand {sqlite3ExprDelete(pParse->db, $$);}
1215 case_operand(A) ::= expr(X).            {A = X.pExpr;}
1216 case_operand(A) ::= .                   {A = 0;}
1217 
1218 %type exprlist {ExprList*}
1219 %destructor exprlist {sqlite3ExprListDelete(pParse->db, $$);}
1220 %type nexprlist {ExprList*}
1221 %destructor nexprlist {sqlite3ExprListDelete(pParse->db, $$);}
1222 
1223 exprlist(A) ::= nexprlist(X).                {A = X;}
1224 exprlist(A) ::= .                            {A = 0;}
1225 nexprlist(A) ::= nexprlist(X) COMMA expr(Y).
1226     {A = sqlite3ExprListAppend(pParse,X,Y.pExpr);}
1227 nexprlist(A) ::= expr(Y).
1228     {A = sqlite3ExprListAppend(pParse,0,Y.pExpr);}
1229 
1230 
1231 ///////////////////////////// The CREATE INDEX command ///////////////////////
1232 //
1233 cmd ::= createkw(S) uniqueflag(U) INDEX ifnotexists(NE) nm(X) dbnm(D)
1234         ON nm(Y) LP sortlist(Z) RP where_opt(W). {
1235   sqlite3CreateIndex(pParse, &X, &D,
1236                      sqlite3SrcListAppend(pParse->db,0,&Y,0), Z, U,
1237                       &S, W, SQLITE_SO_ASC, NE);
1238 }
1239 
1240 %type uniqueflag {int}
1241 uniqueflag(A) ::= UNIQUE.  {A = OE_Abort;}
1242 uniqueflag(A) ::= .        {A = OE_None;}
1243 
1244 
1245 // The eidlist non-terminal (Expression Id List) generates an ExprList
1246 // from a list of identifiers.  The identifier names are in ExprList.a[].zName.
1247 // This list is stored in an ExprList rather than an IdList so that it
1248 // can be easily sent to sqlite3ColumnsExprList().
1249 //
1250 // eidlist is grouped with CREATE INDEX because it used to be the non-terminal
1251 // used for the arguments to an index.  That is just an historical accident.
1252 //
1253 // IMPORTANT COMPATIBILITY NOTE:  Some prior versions of SQLite accepted
1254 // COLLATE clauses and ASC or DESC keywords on ID lists in inappropriate
1255 // places - places that might have been stored in the sqlite_master schema.
1256 // Those extra features were ignored.  But because they might be in some
1257 // (busted) old databases, we need to continue parsing them when loading
1258 // historical schemas.
1259 //
1260 %type eidlist {ExprList*}
1261 %destructor eidlist {sqlite3ExprListDelete(pParse->db, $$);}
1262 %type eidlist_opt {ExprList*}
1263 %destructor eidlist_opt {sqlite3ExprListDelete(pParse->db, $$);}
1264 
1265 %include {
1266   /* Add a single new term to an ExprList that is used to store a
1267   ** list of identifiers.  Report an error if the ID list contains
1268   ** a COLLATE clause or an ASC or DESC keyword, except ignore the
1269   ** error while parsing a legacy schema.
1270   */
1271   static ExprList *parserAddExprIdListTerm(
1272     Parse *pParse,
1273     ExprList *pPrior,
1274     Token *pIdToken,
1275     int hasCollate,
1276     int sortOrder
1277   ){
1278     ExprList *p = sqlite3ExprListAppend(pParse, pPrior, 0);
1279     if( (hasCollate || sortOrder!=SQLITE_SO_UNDEFINED)
1280         && pParse->db->init.busy==0
1281     ){
1282       sqlite3ErrorMsg(pParse, "syntax error after column name \"%.*s\"",
1283                          pIdToken->n, pIdToken->z);
1284     }
1285     sqlite3ExprListSetName(pParse, p, pIdToken, 1);
1286     return p;
1287   }
1288 } // end %include
1289 
1290 eidlist_opt(A) ::= .                         {A = 0;}
1291 eidlist_opt(A) ::= LP eidlist(X) RP.         {A = X;}
1292 eidlist(A) ::= eidlist(X) COMMA nm(Y) collate(C) sortorder(Z).  {
1293   A = parserAddExprIdListTerm(pParse, X, &Y, C, Z);
1294 }
1295 eidlist(A) ::= nm(Y) collate(C) sortorder(Z). {
1296   A = parserAddExprIdListTerm(pParse, 0, &Y, C, Z);
1297 }
1298 
1299 %type collate {int}
1300 collate(C) ::= .              {C = 0;}
1301 collate(C) ::= COLLATE ids.   {C = 1;}
1302 
1303 
1304 ///////////////////////////// The DROP INDEX command /////////////////////////
1305 //
1306 cmd ::= DROP INDEX ifexists(E) fullname(X).   {sqlite3DropIndex(pParse, X, E);}
1307 
1308 ///////////////////////////// The VACUUM command /////////////////////////////
1309 //
1310 %ifndef SQLITE_OMIT_VACUUM
1311 %ifndef SQLITE_OMIT_ATTACH
1312 cmd ::= VACUUM.                {sqlite3Vacuum(pParse);}
1313 cmd ::= VACUUM nm.             {sqlite3Vacuum(pParse);}
1314 %endif  SQLITE_OMIT_ATTACH
1315 %endif  SQLITE_OMIT_VACUUM
1316 
1317 ///////////////////////////// The PRAGMA command /////////////////////////////
1318 //
1319 %ifndef SQLITE_OMIT_PRAGMA
1320 cmd ::= PRAGMA nm(X) dbnm(Z).                {sqlite3Pragma(pParse,&X,&Z,0,0);}
1321 cmd ::= PRAGMA nm(X) dbnm(Z) EQ nmnum(Y).    {sqlite3Pragma(pParse,&X,&Z,&Y,0);}
1322 cmd ::= PRAGMA nm(X) dbnm(Z) LP nmnum(Y) RP. {sqlite3Pragma(pParse,&X,&Z,&Y,0);}
1323 cmd ::= PRAGMA nm(X) dbnm(Z) EQ minus_num(Y).
1324                                              {sqlite3Pragma(pParse,&X,&Z,&Y,1);}
1325 cmd ::= PRAGMA nm(X) dbnm(Z) LP minus_num(Y) RP.
1326                                              {sqlite3Pragma(pParse,&X,&Z,&Y,1);}
1327 
1328 nmnum(A) ::= plus_num(X).             {A = X;}
1329 nmnum(A) ::= nm(X).                   {A = X;}
1330 nmnum(A) ::= ON(X).                   {A = X;}
1331 nmnum(A) ::= DELETE(X).               {A = X;}
1332 nmnum(A) ::= DEFAULT(X).              {A = X;}
1333 %endif SQLITE_OMIT_PRAGMA
1334 %token_class number INTEGER|FLOAT.
1335 plus_num(A) ::= PLUS number(X).       {A = X;}
1336 plus_num(A) ::= number(X).            {A = X;}
1337 minus_num(A) ::= MINUS number(X).     {A = X;}
1338 //////////////////////////// The CREATE TRIGGER command /////////////////////
1339 
1340 %ifndef SQLITE_OMIT_TRIGGER
1341 
1342 cmd ::= createkw trigger_decl(A) BEGIN trigger_cmd_list(S) END(Z). {
1343   Token all;
1344   all.z = A.z;
1345   all.n = (int)(Z.z - A.z) + Z.n;
1346   sqlite3FinishTrigger(pParse, S, &all);
1347 }
1348 
1349 trigger_decl(A) ::= temp(T) TRIGGER ifnotexists(NOERR) nm(B) dbnm(Z)
1350                     trigger_time(C) trigger_event(D)
1351                     ON fullname(E) foreach_clause when_clause(G). {
1352   sqlite3BeginTrigger(pParse, &B, &Z, C, D.a, D.b, E, G, T, NOERR);
1353   A = (Z.n==0?B:Z);
1354 }
1355 
1356 %type trigger_time {int}
1357 trigger_time(A) ::= BEFORE.      { A = TK_BEFORE; }
1358 trigger_time(A) ::= AFTER.       { A = TK_AFTER;  }
1359 trigger_time(A) ::= INSTEAD OF.  { A = TK_INSTEAD;}
1360 trigger_time(A) ::= .            { A = TK_BEFORE; }
1361 
1362 %type trigger_event {struct TrigEvent}
1363 %destructor trigger_event {sqlite3IdListDelete(pParse->db, $$.b);}
1364 trigger_event(A) ::= DELETE|INSERT(OP).       {A.a = @OP; A.b = 0;}
1365 trigger_event(A) ::= UPDATE(OP).              {A.a = @OP; A.b = 0;}
1366 trigger_event(A) ::= UPDATE OF idlist(X). {A.a = TK_UPDATE; A.b = X;}
1367 
1368 foreach_clause ::= .
1369 foreach_clause ::= FOR EACH ROW.
1370 
1371 %type when_clause {Expr*}
1372 %destructor when_clause {sqlite3ExprDelete(pParse->db, $$);}
1373 when_clause(A) ::= .             { A = 0; }
1374 when_clause(A) ::= WHEN expr(X). { A = X.pExpr; }
1375 
1376 %type trigger_cmd_list {TriggerStep*}
1377 %destructor trigger_cmd_list {sqlite3DeleteTriggerStep(pParse->db, $$);}
1378 trigger_cmd_list(A) ::= trigger_cmd_list(Y) trigger_cmd(X) SEMI. {
1379   assert( Y!=0 );
1380   Y->pLast->pNext = X;
1381   Y->pLast = X;
1382   A = Y;
1383 }
1384 trigger_cmd_list(A) ::= trigger_cmd(X) SEMI. {
1385   assert( X!=0 );
1386   X->pLast = X;
1387   A = X;
1388 }
1389 
1390 // Disallow qualified table names on INSERT, UPDATE, and DELETE statements
1391 // within a trigger.  The table to INSERT, UPDATE, or DELETE is always in
1392 // the same database as the table that the trigger fires on.
1393 //
1394 %type trnm {Token}
1395 trnm(A) ::= nm(X).   {A = X;}
1396 trnm(A) ::= nm DOT nm(X). {
1397   A = X;
1398   sqlite3ErrorMsg(pParse,
1399         "qualified table names are not allowed on INSERT, UPDATE, and DELETE "
1400         "statements within triggers");
1401 }
1402 
1403 // Disallow the INDEX BY and NOT INDEXED clauses on UPDATE and DELETE
1404 // statements within triggers.  We make a specific error message for this
1405 // since it is an exception to the default grammar rules.
1406 //
1407 tridxby ::= .
1408 tridxby ::= INDEXED BY nm. {
1409   sqlite3ErrorMsg(pParse,
1410         "the INDEXED BY clause is not allowed on UPDATE or DELETE statements "
1411         "within triggers");
1412 }
1413 tridxby ::= NOT INDEXED. {
1414   sqlite3ErrorMsg(pParse,
1415         "the NOT INDEXED clause is not allowed on UPDATE or DELETE statements "
1416         "within triggers");
1417 }
1418 
1419 
1420 
1421 %type trigger_cmd {TriggerStep*}
1422 %destructor trigger_cmd {sqlite3DeleteTriggerStep(pParse->db, $$);}
1423 // UPDATE
1424 trigger_cmd(A) ::=
1425    UPDATE orconf(R) trnm(X) tridxby SET setlist(Y) where_opt(Z).
1426    { A = sqlite3TriggerUpdateStep(pParse->db, &X, Y, Z, R); }
1427 
1428 // INSERT
1429 trigger_cmd(A) ::= insert_cmd(R) INTO trnm(X) idlist_opt(F) select(S).
1430                {A = sqlite3TriggerInsertStep(pParse->db, &X, F, S, R);}
1431 
1432 // DELETE
1433 trigger_cmd(A) ::= DELETE FROM trnm(X) tridxby where_opt(Y).
1434                {A = sqlite3TriggerDeleteStep(pParse->db, &X, Y);}
1435 
1436 // SELECT
1437 trigger_cmd(A) ::= select(X).  {A = sqlite3TriggerSelectStep(pParse->db, X); }
1438 
1439 // The special RAISE expression that may occur in trigger programs
1440 expr(A) ::= RAISE(X) LP IGNORE RP(Y).  {
1441   A.pExpr = sqlite3PExpr(pParse, TK_RAISE, 0, 0, 0);
1442   if( A.pExpr ){
1443     A.pExpr->affinity = OE_Ignore;
1444   }
1445   A.zStart = X.z;
1446   A.zEnd = &Y.z[Y.n];
1447 }
1448 expr(A) ::= RAISE(X) LP raisetype(T) COMMA nm(Z) RP(Y).  {
1449   A.pExpr = sqlite3PExpr(pParse, TK_RAISE, 0, 0, &Z);
1450   if( A.pExpr ) {
1451     A.pExpr->affinity = (char)T;
1452   }
1453   A.zStart = X.z;
1454   A.zEnd = &Y.z[Y.n];
1455 }
1456 %endif  !SQLITE_OMIT_TRIGGER
1457 
1458 %type raisetype {int}
1459 raisetype(A) ::= ROLLBACK.  {A = OE_Rollback;}
1460 raisetype(A) ::= ABORT.     {A = OE_Abort;}
1461 raisetype(A) ::= FAIL.      {A = OE_Fail;}
1462 
1463 
1464 ////////////////////////  DROP TRIGGER statement //////////////////////////////
1465 %ifndef SQLITE_OMIT_TRIGGER
1466 cmd ::= DROP TRIGGER ifexists(NOERR) fullname(X). {
1467   sqlite3DropTrigger(pParse,X,NOERR);
1468 }
1469 %endif  !SQLITE_OMIT_TRIGGER
1470 
1471 //////////////////////// ATTACH DATABASE file AS name /////////////////////////
1472 %ifndef SQLITE_OMIT_ATTACH
1473 cmd ::= ATTACH database_kw_opt expr(F) AS expr(D) key_opt(K). {
1474   sqlite3Attach(pParse, F.pExpr, D.pExpr, K);
1475 }
1476 cmd ::= DETACH database_kw_opt expr(D). {
1477   sqlite3Detach(pParse, D.pExpr);
1478 }
1479 
1480 %type key_opt {Expr*}
1481 %destructor key_opt {sqlite3ExprDelete(pParse->db, $$);}
1482 key_opt(A) ::= .                     { A = 0; }
1483 key_opt(A) ::= KEY expr(X).          { A = X.pExpr; }
1484 
1485 database_kw_opt ::= DATABASE.
1486 database_kw_opt ::= .
1487 %endif SQLITE_OMIT_ATTACH
1488 
1489 ////////////////////////// REINDEX collation //////////////////////////////////
1490 %ifndef SQLITE_OMIT_REINDEX
1491 cmd ::= REINDEX.                {sqlite3Reindex(pParse, 0, 0);}
1492 cmd ::= REINDEX nm(X) dbnm(Y).  {sqlite3Reindex(pParse, &X, &Y);}
1493 %endif  SQLITE_OMIT_REINDEX
1494 
1495 /////////////////////////////////// ANALYZE ///////////////////////////////////
1496 %ifndef SQLITE_OMIT_ANALYZE
1497 cmd ::= ANALYZE.                {sqlite3Analyze(pParse, 0, 0);}
1498 cmd ::= ANALYZE nm(X) dbnm(Y).  {sqlite3Analyze(pParse, &X, &Y);}
1499 %endif
1500 
1501 //////////////////////// ALTER TABLE table ... ////////////////////////////////
1502 %ifndef SQLITE_OMIT_ALTERTABLE
1503 cmd ::= ALTER TABLE fullname(X) RENAME TO nm(Z). {
1504   sqlite3AlterRenameTable(pParse,X,&Z);
1505 }
1506 cmd ::= ALTER TABLE add_column_fullname ADD kwcolumn_opt column(Y). {
1507   sqlite3AlterFinishAddColumn(pParse, &Y);
1508 }
1509 add_column_fullname ::= fullname(X). {
1510   pParse->db->lookaside.bEnabled = 0;
1511   sqlite3AlterBeginAddColumn(pParse, X);
1512 }
1513 kwcolumn_opt ::= .
1514 kwcolumn_opt ::= COLUMNKW.
1515 %endif  SQLITE_OMIT_ALTERTABLE
1516 
1517 //////////////////////// CREATE VIRTUAL TABLE ... /////////////////////////////
1518 %ifndef SQLITE_OMIT_VIRTUALTABLE
1519 cmd ::= create_vtab.                       {sqlite3VtabFinishParse(pParse,0);}
1520 cmd ::= create_vtab LP vtabarglist RP(X).  {sqlite3VtabFinishParse(pParse,&X);}
1521 create_vtab ::= createkw VIRTUAL TABLE ifnotexists(E)
1522                 nm(X) dbnm(Y) USING nm(Z). {
1523     sqlite3VtabBeginParse(pParse, &X, &Y, &Z, E);
1524 }
1525 vtabarglist ::= vtabarg.
1526 vtabarglist ::= vtabarglist COMMA vtabarg.
1527 vtabarg ::= .                       {sqlite3VtabArgInit(pParse);}
1528 vtabarg ::= vtabarg vtabargtoken.
1529 vtabargtoken ::= ANY(X).            {sqlite3VtabArgExtend(pParse,&X);}
1530 vtabargtoken ::= lp anylist RP(X).  {sqlite3VtabArgExtend(pParse,&X);}
1531 lp ::= LP(X).                       {sqlite3VtabArgExtend(pParse,&X);}
1532 anylist ::= .
1533 anylist ::= anylist LP anylist RP.
1534 anylist ::= anylist ANY.
1535 %endif  SQLITE_OMIT_VIRTUALTABLE
1536 
1537 
1538 //////////////////////// COMMON TABLE EXPRESSIONS ////////////////////////////
1539 %type with {With*}
1540 %type wqlist {With*}
1541 %destructor with {sqlite3WithDelete(pParse->db, $$);}
1542 %destructor wqlist {sqlite3WithDelete(pParse->db, $$);}
1543 
1544 with(A) ::= . {A = 0;}
1545 %ifndef SQLITE_OMIT_CTE
1546 with(A) ::= WITH wqlist(W).              { A = W; }
1547 with(A) ::= WITH RECURSIVE wqlist(W).    { A = W; }
1548 
1549 wqlist(A) ::= nm(X) eidlist_opt(Y) AS LP select(Z) RP. {
1550   A = sqlite3WithAdd(pParse, 0, &X, Y, Z);
1551 }
1552 wqlist(A) ::= wqlist(W) COMMA nm(X) eidlist_opt(Y) AS LP select(Z) RP. {
1553   A = sqlite3WithAdd(pParse, W, &X, Y, Z);
1554 }
1555 %endif  SQLITE_OMIT_CTE
1556