Ensure that sqlite3AuthRead() is only call for TK_COLUMN and TK_TRIGGER
[sqlite.git] / src / parse.y
bloba29a98d0e2f156d8b68da1b85c00c8d751010426
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.
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.
18 // All token codes are small integers with #defines that begin with "TK_"
19 %token_prefix TK_
21 // The type of the data attached to each token is Token. This is also the
22 // default type for non-terminals.
24 %token_type {Token}
25 %default_type {Token}
27 // An extra argument to the constructor for the parser, which is available
28 // to all actions.
29 %extra_context {Parse *pParse}
31 // This code runs whenever there is a syntax error
33 %syntax_error {
34 UNUSED_PARAMETER(yymajor); /* Silence some compiler warnings */
35 if( TOKEN.z[0] ){
36 sqlite3ErrorMsg(pParse, "near \"%T\": syntax error", &TOKEN);
37 }else{
38 sqlite3ErrorMsg(pParse, "incomplete input");
41 %stack_overflow {
42 sqlite3ErrorMsg(pParse, "parser stack overflow");
45 // The name of the generated procedure that implements the parser
46 // is as follows:
47 %name sqlite3Parser
49 // The following text is included near the beginning of the C source
50 // code file that implements the parser.
52 %include {
53 #include "sqliteInt.h"
56 ** Disable all error recovery processing in the parser push-down
57 ** automaton.
59 #define YYNOERRORRECOVERY 1
62 ** Make yytestcase() the same as testcase()
64 #define yytestcase(X) testcase(X)
67 ** Indicate that sqlite3ParserFree() will never be called with a null
68 ** pointer.
70 #define YYPARSEFREENEVERNULL 1
73 ** In the amalgamation, the parse.c file generated by lemon and the
74 ** tokenize.c file are concatenated. In that case, sqlite3RunParser()
75 ** has access to the the size of the yyParser object and so the parser
76 ** engine can be allocated from stack. In that case, only the
77 ** sqlite3ParserInit() and sqlite3ParserFinalize() routines are invoked
78 ** and the sqlite3ParserAlloc() and sqlite3ParserFree() routines can be
79 ** omitted.
81 #ifdef SQLITE_AMALGAMATION
82 # define sqlite3Parser_ENGINEALWAYSONSTACK 1
83 #endif
86 ** Alternative datatype for the argument to the malloc() routine passed
87 ** into sqlite3ParserAlloc(). The default is size_t.
89 #define YYMALLOCARGTYPE u64
92 ** An instance of the following structure describes the event of a
93 ** TRIGGER. "a" is the event type, one of TK_UPDATE, TK_INSERT,
94 ** TK_DELETE, or TK_INSTEAD. If the event is of the form
96 ** UPDATE ON (a,b,c)
98 ** Then the "b" IdList records the list "a,b,c".
100 struct TrigEvent { int a; IdList * b; };
103 ** Disable lookaside memory allocation for objects that might be
104 ** shared across database connections.
106 static void disableLookaside(Parse *pParse){
107 pParse->disableLookaside++;
108 pParse->db->lookaside.bDisable++;
111 } // end %include
113 // Input is a single SQL command
114 input ::= cmdlist.
115 cmdlist ::= cmdlist ecmd.
116 cmdlist ::= ecmd.
117 ecmd ::= SEMI.
118 ecmd ::= cmdx SEMI.
119 %ifndef SQLITE_OMIT_EXPLAIN
120 ecmd ::= explain cmdx.
121 explain ::= EXPLAIN. { pParse->explain = 1; }
122 explain ::= EXPLAIN QUERY PLAN. { pParse->explain = 2; }
123 %endif SQLITE_OMIT_EXPLAIN
124 cmdx ::= cmd. { sqlite3FinishCoding(pParse); }
126 ///////////////////// Begin and end transactions. ////////////////////////////
129 cmd ::= BEGIN transtype(Y) trans_opt. {sqlite3BeginTransaction(pParse, Y);}
130 trans_opt ::= .
131 trans_opt ::= TRANSACTION.
132 trans_opt ::= TRANSACTION nm.
133 %type transtype {int}
134 transtype(A) ::= . {A = TK_DEFERRED;}
135 transtype(A) ::= DEFERRED(X). {A = @X; /*A-overwrites-X*/}
136 transtype(A) ::= IMMEDIATE(X). {A = @X; /*A-overwrites-X*/}
137 transtype(A) ::= EXCLUSIVE(X). {A = @X; /*A-overwrites-X*/}
138 cmd ::= COMMIT|END(X) trans_opt. {sqlite3EndTransaction(pParse,@X);}
139 cmd ::= ROLLBACK(X) trans_opt. {sqlite3EndTransaction(pParse,@X);}
141 savepoint_opt ::= SAVEPOINT.
142 savepoint_opt ::= .
143 cmd ::= SAVEPOINT nm(X). {
144 sqlite3Savepoint(pParse, SAVEPOINT_BEGIN, &X);
146 cmd ::= RELEASE savepoint_opt nm(X). {
147 sqlite3Savepoint(pParse, SAVEPOINT_RELEASE, &X);
149 cmd ::= ROLLBACK trans_opt TO savepoint_opt nm(X). {
150 sqlite3Savepoint(pParse, SAVEPOINT_ROLLBACK, &X);
153 ///////////////////// The CREATE TABLE statement ////////////////////////////
155 cmd ::= create_table create_table_args.
156 create_table ::= createkw temp(T) TABLE ifnotexists(E) nm(Y) dbnm(Z). {
157 sqlite3StartTable(pParse,&Y,&Z,T,0,0,E);
159 createkw(A) ::= CREATE(A). {disableLookaside(pParse);}
161 %type ifnotexists {int}
162 ifnotexists(A) ::= . {A = 0;}
163 ifnotexists(A) ::= IF NOT EXISTS. {A = 1;}
164 %type temp {int}
165 %ifndef SQLITE_OMIT_TEMPDB
166 temp(A) ::= TEMP. {A = 1;}
167 %endif SQLITE_OMIT_TEMPDB
168 temp(A) ::= . {A = 0;}
169 create_table_args ::= LP columnlist conslist_opt(X) RP(E) table_options(F). {
170 sqlite3EndTable(pParse,&X,&E,F,0);
172 create_table_args ::= AS select(S). {
173 sqlite3EndTable(pParse,0,0,0,S);
174 sqlite3SelectDelete(pParse->db, S);
176 %type table_options {int}
177 table_options(A) ::= . {A = 0;}
178 table_options(A) ::= WITHOUT nm(X). {
179 if( X.n==5 && sqlite3_strnicmp(X.z,"rowid",5)==0 ){
180 A = TF_WithoutRowid | TF_NoVisibleRowid;
181 }else{
182 A = 0;
183 sqlite3ErrorMsg(pParse, "unknown table option: %.*s", X.n, X.z);
186 columnlist ::= columnlist COMMA columnname carglist.
187 columnlist ::= columnname carglist.
188 columnname(A) ::= nm(A) typetoken(Y). {sqlite3AddColumn(pParse,&A,&Y);}
190 // Declare some tokens early in order to influence their values, to
191 // improve performance and reduce the executable size. The goal here is
192 // to get the "jump" operations in ISNULL through ESCAPE to have numeric
193 // values that are early enough so that all jump operations are clustered
194 // at the beginning, but also so that the comparison tokens NE through GE
195 // are as large as possible so that they are near to FUNCTION, which is a
196 // token synthesized by addopcodes.tcl.
198 %token ABORT ACTION AFTER ANALYZE ASC ATTACH BEFORE BEGIN BY CASCADE CAST.
199 %token CONFLICT DATABASE DEFERRED DESC DETACH EACH END EXCLUSIVE EXPLAIN FAIL.
200 %token OR AND NOT IS MATCH LIKE_KW BETWEEN IN ISNULL NOTNULL NE EQ.
201 %token GT LE LT GE ESCAPE.
203 // The following directive causes tokens ABORT, AFTER, ASC, etc. to
204 // fallback to ID if they will not parse as their original value.
205 // This obviates the need for the "id" nonterminal.
207 %fallback ID
208 ABORT ACTION AFTER ANALYZE ASC ATTACH BEFORE BEGIN BY CASCADE CAST COLUMNKW
209 CONFLICT DATABASE DEFERRED DESC DETACH DO
210 EACH END EXCLUSIVE EXPLAIN FAIL FOR
211 IGNORE IMMEDIATE INITIALLY INSTEAD LIKE_KW MATCH NO PLAN
212 QUERY KEY OF OFFSET PRAGMA RAISE RECURSIVE RELEASE REPLACE RESTRICT ROW
213 ROLLBACK SAVEPOINT TEMP TRIGGER VACUUM VIEW VIRTUAL WITH WITHOUT
214 %ifdef SQLITE_OMIT_COMPOUND_SELECT
215 EXCEPT INTERSECT UNION
216 %endif SQLITE_OMIT_COMPOUND_SELECT
217 REINDEX RENAME CTIME_KW IF
219 %wildcard ANY.
221 // Define operator precedence early so that this is the first occurrence
222 // of the operator tokens in the grammer. Keeping the operators together
223 // causes them to be assigned integer values that are close together,
224 // which keeps parser tables smaller.
226 // The token values assigned to these symbols is determined by the order
227 // in which lemon first sees them. It must be the case that ISNULL/NOTNULL,
228 // NE/EQ, GT/LE, and GE/LT are separated by only a single value. See
229 // the sqlite3ExprIfFalse() routine for additional information on this
230 // constraint.
232 %left OR.
233 %left AND.
234 %right NOT.
235 %left IS MATCH LIKE_KW BETWEEN IN ISNULL NOTNULL NE EQ.
236 %left GT LE LT GE.
237 %right ESCAPE.
238 %left BITAND BITOR LSHIFT RSHIFT.
239 %left PLUS MINUS.
240 %left STAR SLASH REM.
241 %left CONCAT.
242 %left COLLATE.
243 %right BITNOT.
244 %nonassoc ON.
246 // An IDENTIFIER can be a generic identifier, or one of several
247 // keywords. Any non-standard keyword can also be an identifier.
249 %token_class id ID|INDEXED.
252 // And "ids" is an identifer-or-string.
254 %token_class ids ID|STRING.
256 // The name of a column or table can be any of the following:
258 %type nm {Token}
259 nm(A) ::= id(A).
260 nm(A) ::= STRING(A).
261 nm(A) ::= JOIN_KW(A).
263 // A typetoken is really zero 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.
267 %type typetoken {Token}
268 typetoken(A) ::= . {A.n = 0; A.z = 0;}
269 typetoken(A) ::= typename(A).
270 typetoken(A) ::= typename(A) LP signed RP(Y). {
271 A.n = (int)(&Y.z[Y.n] - A.z);
273 typetoken(A) ::= typename(A) LP signed COMMA signed RP(Y). {
274 A.n = (int)(&Y.z[Y.n] - A.z);
276 %type typename {Token}
277 typename(A) ::= ids(A).
278 typename(A) ::= typename(A) ids(Y). {A.n=Y.n+(int)(Y.z-A.z);}
279 signed ::= plus_num.
280 signed ::= minus_num.
282 // The scanpt non-terminal takes a value which is a pointer to the
283 // input text just past the last token that has been shifted into
284 // the parser. By surrounding some phrase in the grammar with two
285 // scanpt non-terminals, we can capture the input text for that phrase.
286 // For example:
288 // something ::= .... scanpt(A) phrase scanpt(Z).
290 // The text that is parsed as "phrase" is a string starting at A
291 // and containing (int)(Z-A) characters. There might be some extra
292 // whitespace on either end of the text, but that can be removed in
293 // post-processing, if needed.
295 %type scanpt {const char*}
296 scanpt(A) ::= . {
297 assert( yyLookahead!=YYNOCODE );
298 A = yyLookaheadToken.z;
301 // "carglist" is a list of additional constraints that come after the
302 // column name and column type in a CREATE TABLE statement.
304 carglist ::= carglist ccons.
305 carglist ::= .
306 ccons ::= CONSTRAINT nm(X). {pParse->constraintName = X;}
307 ccons ::= DEFAULT scanpt(A) term(X) scanpt(Z).
308 {sqlite3AddDefaultValue(pParse,X,A,Z);}
309 ccons ::= DEFAULT LP(A) expr(X) RP(Z).
310 {sqlite3AddDefaultValue(pParse,X,A.z+1,Z.z);}
311 ccons ::= DEFAULT PLUS(A) term(X) scanpt(Z).
312 {sqlite3AddDefaultValue(pParse,X,A.z,Z);}
313 ccons ::= DEFAULT MINUS(A) term(X) scanpt(Z). {
314 Expr *p = sqlite3PExpr(pParse, TK_UMINUS, X, 0);
315 sqlite3AddDefaultValue(pParse,p,A.z,Z);
317 ccons ::= DEFAULT scanpt id(X). {
318 Expr *p = tokenExpr(pParse, TK_STRING, X);
319 if( p ){
320 sqlite3ExprIdToTrueFalse(p);
321 testcase( p->op==TK_TRUEFALSE && sqlite3ExprTruthValue(p) );
323 sqlite3AddDefaultValue(pParse,p,X.z,X.z+X.n);
326 // In addition to the type name, we also care about the primary key and
327 // UNIQUE constraints.
329 ccons ::= NULL onconf.
330 ccons ::= NOT NULL onconf(R). {sqlite3AddNotNull(pParse, R);}
331 ccons ::= PRIMARY KEY sortorder(Z) onconf(R) autoinc(I).
332 {sqlite3AddPrimaryKey(pParse,0,R,I,Z);}
333 ccons ::= UNIQUE onconf(R). {sqlite3CreateIndex(pParse,0,0,0,0,R,0,0,0,0,
334 SQLITE_IDXTYPE_UNIQUE);}
335 ccons ::= CHECK LP expr(X) RP. {sqlite3AddCheckConstraint(pParse,X);}
336 ccons ::= REFERENCES nm(T) eidlist_opt(TA) refargs(R).
337 {sqlite3CreateForeignKey(pParse,0,&T,TA,R);}
338 ccons ::= defer_subclause(D). {sqlite3DeferForeignKey(pParse,D);}
339 ccons ::= COLLATE ids(C). {sqlite3AddCollateType(pParse, &C);}
341 // The optional AUTOINCREMENT keyword
342 %type autoinc {int}
343 autoinc(X) ::= . {X = 0;}
344 autoinc(X) ::= AUTOINCR. {X = 1;}
346 // The next group of rules parses the arguments to a REFERENCES clause
347 // that determine if the referential integrity checking is deferred or
348 // or immediate and which determine what action to take if a ref-integ
349 // check fails.
351 %type refargs {int}
352 refargs(A) ::= . { A = OE_None*0x0101; /* EV: R-19803-45884 */}
353 refargs(A) ::= refargs(A) refarg(Y). { A = (A & ~Y.mask) | Y.value; }
354 %type refarg {struct {int value; int mask;}}
355 refarg(A) ::= MATCH nm. { A.value = 0; A.mask = 0x000000; }
356 refarg(A) ::= ON INSERT refact. { A.value = 0; A.mask = 0x000000; }
357 refarg(A) ::= ON DELETE refact(X). { A.value = X; A.mask = 0x0000ff; }
358 refarg(A) ::= ON UPDATE refact(X). { A.value = X<<8; A.mask = 0x00ff00; }
359 %type refact {int}
360 refact(A) ::= SET NULL. { A = OE_SetNull; /* EV: R-33326-45252 */}
361 refact(A) ::= SET DEFAULT. { A = OE_SetDflt; /* EV: R-33326-45252 */}
362 refact(A) ::= CASCADE. { A = OE_Cascade; /* EV: R-33326-45252 */}
363 refact(A) ::= RESTRICT. { A = OE_Restrict; /* EV: R-33326-45252 */}
364 refact(A) ::= NO ACTION. { A = OE_None; /* EV: R-33326-45252 */}
365 %type defer_subclause {int}
366 defer_subclause(A) ::= NOT DEFERRABLE init_deferred_pred_opt. {A = 0;}
367 defer_subclause(A) ::= DEFERRABLE init_deferred_pred_opt(X). {A = X;}
368 %type init_deferred_pred_opt {int}
369 init_deferred_pred_opt(A) ::= . {A = 0;}
370 init_deferred_pred_opt(A) ::= INITIALLY DEFERRED. {A = 1;}
371 init_deferred_pred_opt(A) ::= INITIALLY IMMEDIATE. {A = 0;}
373 conslist_opt(A) ::= . {A.n = 0; A.z = 0;}
374 conslist_opt(A) ::= COMMA(A) conslist.
375 conslist ::= conslist tconscomma tcons.
376 conslist ::= tcons.
377 tconscomma ::= COMMA. {pParse->constraintName.n = 0;}
378 tconscomma ::= .
379 tcons ::= CONSTRAINT nm(X). {pParse->constraintName = X;}
380 tcons ::= PRIMARY KEY LP sortlist(X) autoinc(I) RP onconf(R).
381 {sqlite3AddPrimaryKey(pParse,X,R,I,0);}
382 tcons ::= UNIQUE LP sortlist(X) RP onconf(R).
383 {sqlite3CreateIndex(pParse,0,0,0,X,R,0,0,0,0,
384 SQLITE_IDXTYPE_UNIQUE);}
385 tcons ::= CHECK LP expr(E) RP onconf.
386 {sqlite3AddCheckConstraint(pParse,E);}
387 tcons ::= FOREIGN KEY LP eidlist(FA) RP
388 REFERENCES nm(T) eidlist_opt(TA) refargs(R) defer_subclause_opt(D). {
389 sqlite3CreateForeignKey(pParse, FA, &T, TA, R);
390 sqlite3DeferForeignKey(pParse, D);
392 %type defer_subclause_opt {int}
393 defer_subclause_opt(A) ::= . {A = 0;}
394 defer_subclause_opt(A) ::= defer_subclause(A).
396 // The following is a non-standard extension that allows us to declare the
397 // default behavior when there is a constraint conflict.
399 %type onconf {int}
400 %type orconf {int}
401 %type resolvetype {int}
402 onconf(A) ::= . {A = OE_Default;}
403 onconf(A) ::= ON CONFLICT resolvetype(X). {A = X;}
404 orconf(A) ::= . {A = OE_Default;}
405 orconf(A) ::= OR resolvetype(X). {A = X;}
406 resolvetype(A) ::= raisetype(A).
407 resolvetype(A) ::= IGNORE. {A = OE_Ignore;}
408 resolvetype(A) ::= REPLACE. {A = OE_Replace;}
410 ////////////////////////// The DROP TABLE /////////////////////////////////////
412 cmd ::= DROP TABLE ifexists(E) fullname(X). {
413 sqlite3DropTable(pParse, X, 0, E);
415 %type ifexists {int}
416 ifexists(A) ::= IF EXISTS. {A = 1;}
417 ifexists(A) ::= . {A = 0;}
419 ///////////////////// The CREATE VIEW statement /////////////////////////////
421 %ifndef SQLITE_OMIT_VIEW
422 cmd ::= createkw(X) temp(T) VIEW ifnotexists(E) nm(Y) dbnm(Z) eidlist_opt(C)
423 AS select(S). {
424 sqlite3CreateView(pParse, &X, &Y, &Z, C, S, T, E);
426 cmd ::= DROP VIEW ifexists(E) fullname(X). {
427 sqlite3DropTable(pParse, X, 1, E);
429 %endif SQLITE_OMIT_VIEW
431 //////////////////////// The SELECT statement /////////////////////////////////
433 cmd ::= select(X). {
434 SelectDest dest = {SRT_Output, 0, 0, 0, 0, 0};
435 sqlite3Select(pParse, X, &dest);
436 sqlite3SelectDelete(pParse->db, X);
439 %type select {Select*}
440 %destructor select {sqlite3SelectDelete(pParse->db, $$);}
441 %type selectnowith {Select*}
442 %destructor selectnowith {sqlite3SelectDelete(pParse->db, $$);}
443 %type oneselect {Select*}
444 %destructor oneselect {sqlite3SelectDelete(pParse->db, $$);}
446 %include {
448 ** For a compound SELECT statement, make sure p->pPrior->pNext==p for
449 ** all elements in the list. And make sure list length does not exceed
450 ** SQLITE_LIMIT_COMPOUND_SELECT.
452 static void parserDoubleLinkSelect(Parse *pParse, Select *p){
453 if( p->pPrior ){
454 Select *pNext = 0, *pLoop;
455 int mxSelect, cnt = 0;
456 for(pLoop=p; pLoop; pNext=pLoop, pLoop=pLoop->pPrior, cnt++){
457 pLoop->pNext = pNext;
458 pLoop->selFlags |= SF_Compound;
460 if( (p->selFlags & SF_MultiValue)==0 &&
461 (mxSelect = pParse->db->aLimit[SQLITE_LIMIT_COMPOUND_SELECT])>0 &&
462 cnt>mxSelect
464 sqlite3ErrorMsg(pParse, "too many terms in compound SELECT");
470 %ifndef SQLITE_OMIT_CTE
471 select(A) ::= WITH wqlist(W) selectnowith(X). {
472 Select *p = X;
473 if( p ){
474 p->pWith = W;
475 parserDoubleLinkSelect(pParse, p);
476 }else{
477 sqlite3WithDelete(pParse->db, W);
479 A = p;
481 select(A) ::= WITH RECURSIVE wqlist(W) selectnowith(X). {
482 Select *p = X;
483 if( p ){
484 p->pWith = W;
485 parserDoubleLinkSelect(pParse, p);
486 }else{
487 sqlite3WithDelete(pParse->db, W);
489 A = p;
491 %endif /* SQLITE_OMIT_CTE */
492 select(A) ::= selectnowith(X). {
493 Select *p = X;
494 if( p ){
495 parserDoubleLinkSelect(pParse, p);
497 A = p; /*A-overwrites-X*/
500 selectnowith(A) ::= oneselect(A).
501 %ifndef SQLITE_OMIT_COMPOUND_SELECT
502 selectnowith(A) ::= selectnowith(A) multiselect_op(Y) oneselect(Z). {
503 Select *pRhs = Z;
504 Select *pLhs = A;
505 if( pRhs && pRhs->pPrior ){
506 SrcList *pFrom;
507 Token x;
508 x.n = 0;
509 parserDoubleLinkSelect(pParse, pRhs);
510 pFrom = sqlite3SrcListAppendFromTerm(pParse,0,0,0,&x,pRhs,0,0);
511 pRhs = sqlite3SelectNew(pParse,0,pFrom,0,0,0,0,0,0);
513 if( pRhs ){
514 pRhs->op = (u8)Y;
515 pRhs->pPrior = pLhs;
516 if( ALWAYS(pLhs) ) pLhs->selFlags &= ~SF_MultiValue;
517 pRhs->selFlags &= ~SF_MultiValue;
518 if( Y!=TK_ALL ) pParse->hasCompound = 1;
519 }else{
520 sqlite3SelectDelete(pParse->db, pLhs);
522 A = pRhs;
524 %type multiselect_op {int}
525 multiselect_op(A) ::= UNION(OP). {A = @OP; /*A-overwrites-OP*/}
526 multiselect_op(A) ::= UNION ALL. {A = TK_ALL;}
527 multiselect_op(A) ::= EXCEPT|INTERSECT(OP). {A = @OP; /*A-overwrites-OP*/}
528 %endif SQLITE_OMIT_COMPOUND_SELECT
529 oneselect(A) ::= SELECT(S) distinct(D) selcollist(W) from(X) where_opt(Y)
530 groupby_opt(P) having_opt(Q) orderby_opt(Z) limit_opt(L). {
531 #if SELECTTRACE_ENABLED
532 Token s = S; /*A-overwrites-S*/
533 #endif
534 A = sqlite3SelectNew(pParse,W,X,Y,P,Q,Z,D,L);
535 #if SELECTTRACE_ENABLED
536 /* Populate the Select.zSelName[] string that is used to help with
537 ** query planner debugging, to differentiate between multiple Select
538 ** objects in a complex query.
540 ** If the SELECT keyword is immediately followed by a C-style comment
541 ** then extract the first few alphanumeric characters from within that
542 ** comment to be the zSelName value. Otherwise, the label is #N where
543 ** is an integer that is incremented with each SELECT statement seen.
545 if( A!=0 ){
546 const char *z = s.z+6;
547 int i;
548 sqlite3_snprintf(sizeof(A->zSelName), A->zSelName,"#%d",++pParse->nSelect);
549 while( z[0]==' ' ) z++;
550 if( z[0]=='/' && z[1]=='*' ){
551 z += 2;
552 while( z[0]==' ' ) z++;
553 for(i=0; sqlite3Isalnum(z[i]); i++){}
554 sqlite3_snprintf(sizeof(A->zSelName), A->zSelName, "%.*s", i, z);
557 #endif /* SELECTRACE_ENABLED */
559 oneselect(A) ::= values(A).
561 %type values {Select*}
562 %destructor values {sqlite3SelectDelete(pParse->db, $$);}
563 values(A) ::= VALUES LP nexprlist(X) RP. {
564 A = sqlite3SelectNew(pParse,X,0,0,0,0,0,SF_Values,0);
566 values(A) ::= values(A) COMMA LP exprlist(Y) RP. {
567 Select *pRight, *pLeft = A;
568 pRight = sqlite3SelectNew(pParse,Y,0,0,0,0,0,SF_Values|SF_MultiValue,0);
569 if( ALWAYS(pLeft) ) pLeft->selFlags &= ~SF_MultiValue;
570 if( pRight ){
571 pRight->op = TK_ALL;
572 pRight->pPrior = pLeft;
573 A = pRight;
574 }else{
575 A = pLeft;
579 // The "distinct" nonterminal is true (1) if the DISTINCT keyword is
580 // present and false (0) if it is not.
582 %type distinct {int}
583 distinct(A) ::= DISTINCT. {A = SF_Distinct;}
584 distinct(A) ::= ALL. {A = SF_All;}
585 distinct(A) ::= . {A = 0;}
587 // selcollist is a list of expressions that are to become the return
588 // values of the SELECT statement. The "*" in statements like
589 // "SELECT * FROM ..." is encoded as a special expression with an
590 // opcode of TK_ASTERISK.
592 %type selcollist {ExprList*}
593 %destructor selcollist {sqlite3ExprListDelete(pParse->db, $$);}
594 %type sclp {ExprList*}
595 %destructor sclp {sqlite3ExprListDelete(pParse->db, $$);}
596 sclp(A) ::= selcollist(A) COMMA.
597 sclp(A) ::= . {A = 0;}
598 selcollist(A) ::= sclp(A) scanpt(B) expr(X) scanpt(Z) as(Y). {
599 A = sqlite3ExprListAppend(pParse, A, X);
600 if( Y.n>0 ) sqlite3ExprListSetName(pParse, A, &Y, 1);
601 sqlite3ExprListSetSpan(pParse,A,B,Z);
603 selcollist(A) ::= sclp(A) scanpt STAR. {
604 Expr *p = sqlite3Expr(pParse->db, TK_ASTERISK, 0);
605 A = sqlite3ExprListAppend(pParse, A, p);
607 selcollist(A) ::= sclp(A) scanpt nm(X) DOT STAR. {
608 Expr *pRight = sqlite3PExpr(pParse, TK_ASTERISK, 0, 0);
609 Expr *pLeft = sqlite3ExprAlloc(pParse->db, TK_ID, &X, 1);
610 Expr *pDot = sqlite3PExpr(pParse, TK_DOT, pLeft, pRight);
611 A = sqlite3ExprListAppend(pParse,A, pDot);
614 // An option "AS <id>" phrase that can follow one of the expressions that
615 // define the result set, or one of the tables in the FROM clause.
617 %type as {Token}
618 as(X) ::= AS nm(Y). {X = Y;}
619 as(X) ::= ids(X).
620 as(X) ::= . {X.n = 0; X.z = 0;}
623 %type seltablist {SrcList*}
624 %destructor seltablist {sqlite3SrcListDelete(pParse->db, $$);}
625 %type stl_prefix {SrcList*}
626 %destructor stl_prefix {sqlite3SrcListDelete(pParse->db, $$);}
627 %type from {SrcList*}
628 %destructor from {sqlite3SrcListDelete(pParse->db, $$);}
630 // A complete FROM clause.
632 from(A) ::= . {A = sqlite3DbMallocZero(pParse->db, sizeof(*A));}
633 from(A) ::= FROM seltablist(X). {
634 A = X;
635 sqlite3SrcListShiftJoinType(A);
638 // "seltablist" is a "Select Table List" - the content of the FROM clause
639 // in a SELECT statement. "stl_prefix" is a prefix of this list.
641 stl_prefix(A) ::= seltablist(A) joinop(Y). {
642 if( ALWAYS(A && A->nSrc>0) ) A->a[A->nSrc-1].fg.jointype = (u8)Y;
644 stl_prefix(A) ::= . {A = 0;}
645 seltablist(A) ::= stl_prefix(A) nm(Y) dbnm(D) as(Z) indexed_opt(I)
646 on_opt(N) using_opt(U). {
647 A = sqlite3SrcListAppendFromTerm(pParse,A,&Y,&D,&Z,0,N,U);
648 sqlite3SrcListIndexedBy(pParse, A, &I);
650 seltablist(A) ::= stl_prefix(A) nm(Y) dbnm(D) LP exprlist(E) RP as(Z)
651 on_opt(N) using_opt(U). {
652 A = sqlite3SrcListAppendFromTerm(pParse,A,&Y,&D,&Z,0,N,U);
653 sqlite3SrcListFuncArgs(pParse, A, E);
655 %ifndef SQLITE_OMIT_SUBQUERY
656 seltablist(A) ::= stl_prefix(A) LP select(S) RP
657 as(Z) on_opt(N) using_opt(U). {
658 A = sqlite3SrcListAppendFromTerm(pParse,A,0,0,&Z,S,N,U);
660 seltablist(A) ::= stl_prefix(A) LP seltablist(F) RP
661 as(Z) on_opt(N) using_opt(U). {
662 if( A==0 && Z.n==0 && N==0 && U==0 ){
663 A = F;
664 }else if( F->nSrc==1 ){
665 A = sqlite3SrcListAppendFromTerm(pParse,A,0,0,&Z,0,N,U);
666 if( A ){
667 struct SrcList_item *pNew = &A->a[A->nSrc-1];
668 struct SrcList_item *pOld = F->a;
669 pNew->zName = pOld->zName;
670 pNew->zDatabase = pOld->zDatabase;
671 pNew->pSelect = pOld->pSelect;
672 pOld->zName = pOld->zDatabase = 0;
673 pOld->pSelect = 0;
675 sqlite3SrcListDelete(pParse->db, F);
676 }else{
677 Select *pSubquery;
678 sqlite3SrcListShiftJoinType(F);
679 pSubquery = sqlite3SelectNew(pParse,0,F,0,0,0,0,SF_NestedFrom,0);
680 A = sqlite3SrcListAppendFromTerm(pParse,A,0,0,&Z,pSubquery,N,U);
683 %endif SQLITE_OMIT_SUBQUERY
685 %type dbnm {Token}
686 dbnm(A) ::= . {A.z=0; A.n=0;}
687 dbnm(A) ::= DOT nm(X). {A = X;}
689 %type fullname {SrcList*}
690 %destructor fullname {sqlite3SrcListDelete(pParse->db, $$);}
691 fullname(A) ::= nm(X).
692 {A = sqlite3SrcListAppend(pParse->db,0,&X,0); /*A-overwrites-X*/}
693 fullname(A) ::= nm(X) DOT nm(Y).
694 {A = sqlite3SrcListAppend(pParse->db,0,&X,&Y); /*A-overwrites-X*/}
696 %type xfullname {SrcList*}
697 %destructor xfullname {sqlite3SrcListDelete(pParse->db, $$);}
698 xfullname(A) ::= nm(X).
699 {A = sqlite3SrcListAppend(pParse->db,0,&X,0); /*A-overwrites-X*/}
700 xfullname(A) ::= nm(X) DOT nm(Y).
701 {A = sqlite3SrcListAppend(pParse->db,0,&X,&Y); /*A-overwrites-X*/}
702 xfullname(A) ::= nm(X) DOT nm(Y) AS nm(Z). {
703 A = sqlite3SrcListAppend(pParse->db,0,&X,&Y); /*A-overwrites-X*/
704 if( A ) A->a[0].zAlias = sqlite3NameFromToken(pParse->db, &Z);
706 xfullname(A) ::= nm(X) AS nm(Z). {
707 A = sqlite3SrcListAppend(pParse->db,0,&X,0); /*A-overwrites-X*/
708 if( A ) A->a[0].zAlias = sqlite3NameFromToken(pParse->db, &Z);
711 %type joinop {int}
712 joinop(X) ::= COMMA|JOIN. { X = JT_INNER; }
713 joinop(X) ::= JOIN_KW(A) JOIN.
714 {X = sqlite3JoinType(pParse,&A,0,0); /*X-overwrites-A*/}
715 joinop(X) ::= JOIN_KW(A) nm(B) JOIN.
716 {X = sqlite3JoinType(pParse,&A,&B,0); /*X-overwrites-A*/}
717 joinop(X) ::= JOIN_KW(A) nm(B) nm(C) JOIN.
718 {X = sqlite3JoinType(pParse,&A,&B,&C);/*X-overwrites-A*/}
720 // There is a parsing abiguity in an upsert statement that uses a
721 // SELECT on the RHS of a the INSERT:
723 // INSERT INTO tab SELECT * FROM aaa JOIN bbb ON CONFLICT ...
724 // here ----^^
726 // When the ON token is encountered, the parser does not know if it is
727 // the beginning of an ON CONFLICT clause, or the beginning of an ON
728 // clause associated with the JOIN. The conflict is resolved in favor
729 // of the JOIN. If an ON CONFLICT clause is intended, insert a dummy
730 // WHERE clause in between, like this:
732 // INSERT INTO tab SELECT * FROM aaa JOIN bbb WHERE true ON CONFLICT ...
734 // The [AND] and [OR] precedence marks in the rules for on_opt cause the
735 // ON in this context to always be interpreted as belonging to the JOIN.
737 %type on_opt {Expr*}
738 %destructor on_opt {sqlite3ExprDelete(pParse->db, $$);}
739 on_opt(N) ::= ON expr(E). {N = E;}
740 on_opt(N) ::= . [OR] {N = 0;}
742 // Note that this block abuses the Token type just a little. If there is
743 // no "INDEXED BY" clause, the returned token is empty (z==0 && n==0). If
744 // there is an INDEXED BY clause, then the token is populated as per normal,
745 // with z pointing to the token data and n containing the number of bytes
746 // in the token.
748 // If there is a "NOT INDEXED" clause, then (z==0 && n==1), which is
749 // normally illegal. The sqlite3SrcListIndexedBy() function
750 // recognizes and interprets this as a special case.
752 %type indexed_opt {Token}
753 indexed_opt(A) ::= . {A.z=0; A.n=0;}
754 indexed_opt(A) ::= INDEXED BY nm(X). {A = X;}
755 indexed_opt(A) ::= NOT INDEXED. {A.z=0; A.n=1;}
757 %type using_opt {IdList*}
758 %destructor using_opt {sqlite3IdListDelete(pParse->db, $$);}
759 using_opt(U) ::= USING LP idlist(L) RP. {U = L;}
760 using_opt(U) ::= . {U = 0;}
763 %type orderby_opt {ExprList*}
764 %destructor orderby_opt {sqlite3ExprListDelete(pParse->db, $$);}
766 // the sortlist non-terminal stores a list of expression where each
767 // expression is optionally followed by ASC or DESC to indicate the
768 // sort order.
770 %type sortlist {ExprList*}
771 %destructor sortlist {sqlite3ExprListDelete(pParse->db, $$);}
773 orderby_opt(A) ::= . {A = 0;}
774 orderby_opt(A) ::= ORDER BY sortlist(X). {A = X;}
775 sortlist(A) ::= sortlist(A) COMMA expr(Y) sortorder(Z). {
776 A = sqlite3ExprListAppend(pParse,A,Y);
777 sqlite3ExprListSetSortOrder(A,Z);
779 sortlist(A) ::= expr(Y) sortorder(Z). {
780 A = sqlite3ExprListAppend(pParse,0,Y); /*A-overwrites-Y*/
781 sqlite3ExprListSetSortOrder(A,Z);
784 %type sortorder {int}
786 sortorder(A) ::= ASC. {A = SQLITE_SO_ASC;}
787 sortorder(A) ::= DESC. {A = SQLITE_SO_DESC;}
788 sortorder(A) ::= . {A = SQLITE_SO_UNDEFINED;}
790 %type groupby_opt {ExprList*}
791 %destructor groupby_opt {sqlite3ExprListDelete(pParse->db, $$);}
792 groupby_opt(A) ::= . {A = 0;}
793 groupby_opt(A) ::= GROUP BY nexprlist(X). {A = X;}
795 %type having_opt {Expr*}
796 %destructor having_opt {sqlite3ExprDelete(pParse->db, $$);}
797 having_opt(A) ::= . {A = 0;}
798 having_opt(A) ::= HAVING expr(X). {A = X;}
800 %type limit_opt {Expr*}
802 // The destructor for limit_opt will never fire in the current grammar.
803 // The limit_opt non-terminal only occurs at the end of a single production
804 // rule for SELECT statements. As soon as the rule that create the
805 // limit_opt non-terminal reduces, the SELECT statement rule will also
806 // reduce. So there is never a limit_opt non-terminal on the stack
807 // except as a transient. So there is never anything to destroy.
809 //%destructor limit_opt {sqlite3ExprDelete(pParse->db, $$);}
810 limit_opt(A) ::= . {A = 0;}
811 limit_opt(A) ::= LIMIT expr(X).
812 {A = sqlite3PExpr(pParse,TK_LIMIT,X,0);}
813 limit_opt(A) ::= LIMIT expr(X) OFFSET expr(Y).
814 {A = sqlite3PExpr(pParse,TK_LIMIT,X,Y);}
815 limit_opt(A) ::= LIMIT expr(X) COMMA expr(Y).
816 {A = sqlite3PExpr(pParse,TK_LIMIT,Y,X);}
818 /////////////////////////// The DELETE statement /////////////////////////////
820 %ifdef SQLITE_ENABLE_UPDATE_DELETE_LIMIT
821 cmd ::= with DELETE FROM xfullname(X) indexed_opt(I) where_opt(W)
822 orderby_opt(O) limit_opt(L). {
823 sqlite3SrcListIndexedBy(pParse, X, &I);
824 sqlite3DeleteFrom(pParse,X,W,O,L);
826 %endif
827 %ifndef SQLITE_ENABLE_UPDATE_DELETE_LIMIT
828 cmd ::= with DELETE FROM xfullname(X) indexed_opt(I) where_opt(W). {
829 sqlite3SrcListIndexedBy(pParse, X, &I);
830 sqlite3DeleteFrom(pParse,X,W,0,0);
832 %endif
834 %type where_opt {Expr*}
835 %destructor where_opt {sqlite3ExprDelete(pParse->db, $$);}
837 where_opt(A) ::= . {A = 0;}
838 where_opt(A) ::= WHERE expr(X). {A = X;}
840 ////////////////////////// The UPDATE command ////////////////////////////////
842 %ifdef SQLITE_ENABLE_UPDATE_DELETE_LIMIT
843 cmd ::= with UPDATE orconf(R) xfullname(X) indexed_opt(I) SET setlist(Y)
844 where_opt(W) orderby_opt(O) limit_opt(L). {
845 sqlite3SrcListIndexedBy(pParse, X, &I);
846 sqlite3ExprListCheckLength(pParse,Y,"set list");
847 sqlite3Update(pParse,X,Y,W,R,O,L,0);
849 %endif
850 %ifndef SQLITE_ENABLE_UPDATE_DELETE_LIMIT
851 cmd ::= with UPDATE orconf(R) xfullname(X) indexed_opt(I) SET setlist(Y)
852 where_opt(W). {
853 sqlite3SrcListIndexedBy(pParse, X, &I);
854 sqlite3ExprListCheckLength(pParse,Y,"set list");
855 sqlite3Update(pParse,X,Y,W,R,0,0,0);
857 %endif
859 %type setlist {ExprList*}
860 %destructor setlist {sqlite3ExprListDelete(pParse->db, $$);}
862 setlist(A) ::= setlist(A) COMMA nm(X) EQ expr(Y). {
863 A = sqlite3ExprListAppend(pParse, A, Y);
864 sqlite3ExprListSetName(pParse, A, &X, 1);
866 setlist(A) ::= setlist(A) COMMA LP idlist(X) RP EQ expr(Y). {
867 A = sqlite3ExprListAppendVector(pParse, A, X, Y);
869 setlist(A) ::= nm(X) EQ expr(Y). {
870 A = sqlite3ExprListAppend(pParse, 0, Y);
871 sqlite3ExprListSetName(pParse, A, &X, 1);
873 setlist(A) ::= LP idlist(X) RP EQ expr(Y). {
874 A = sqlite3ExprListAppendVector(pParse, 0, X, Y);
877 ////////////////////////// The INSERT command /////////////////////////////////
879 cmd ::= with insert_cmd(R) INTO xfullname(X) idlist_opt(F) select(S)
880 upsert(U). {
881 sqlite3Insert(pParse, X, S, F, R, U);
883 cmd ::= with insert_cmd(R) INTO xfullname(X) idlist_opt(F) DEFAULT VALUES.
885 sqlite3Insert(pParse, X, 0, F, R, 0);
888 %type upsert {Upsert*}
890 // Because upsert only occurs at the tip end of the INSERT rule for cmd,
891 // there is never a case where the value of the upsert pointer will not
892 // be destroyed by the cmd action. So comment-out the destructor to
893 // avoid unreachable code.
894 //%destructor upsert {sqlite3UpsertDelete(pParse->db,$$);}
895 upsert(A) ::= . { A = 0; }
896 upsert(A) ::= ON CONFLICT LP sortlist(T) RP where_opt(TW)
897 DO UPDATE SET setlist(Z) where_opt(W).
898 { A = sqlite3UpsertNew(pParse->db,T,TW,Z,W);}
899 upsert(A) ::= ON CONFLICT LP sortlist(T) RP where_opt(TW) DO NOTHING.
900 { A = sqlite3UpsertNew(pParse->db,T,TW,0,0); }
901 upsert(A) ::= ON CONFLICT DO NOTHING.
902 { A = sqlite3UpsertNew(pParse->db,0,0,0,0); }
904 %type insert_cmd {int}
905 insert_cmd(A) ::= INSERT orconf(R). {A = R;}
906 insert_cmd(A) ::= REPLACE. {A = OE_Replace;}
908 %type idlist_opt {IdList*}
909 %destructor idlist_opt {sqlite3IdListDelete(pParse->db, $$);}
910 %type idlist {IdList*}
911 %destructor idlist {sqlite3IdListDelete(pParse->db, $$);}
913 idlist_opt(A) ::= . {A = 0;}
914 idlist_opt(A) ::= LP idlist(X) RP. {A = X;}
915 idlist(A) ::= idlist(A) COMMA nm(Y).
916 {A = sqlite3IdListAppend(pParse->db,A,&Y);}
917 idlist(A) ::= nm(Y).
918 {A = sqlite3IdListAppend(pParse->db,0,&Y); /*A-overwrites-Y*/}
920 /////////////////////////// Expression Processing /////////////////////////////
923 %type expr {Expr*}
924 %destructor expr {sqlite3ExprDelete(pParse->db, $$);}
925 %type term {Expr*}
926 %destructor term {sqlite3ExprDelete(pParse->db, $$);}
928 %include {
930 /* Construct a new Expr object from a single identifier. Use the
931 ** new Expr to populate pOut. Set the span of pOut to be the identifier
932 ** that created the expression.
934 static Expr *tokenExpr(Parse *pParse, int op, Token t){
935 Expr *p = sqlite3DbMallocRawNN(pParse->db, sizeof(Expr)+t.n+1);
936 if( p ){
937 memset(p, 0, sizeof(Expr));
938 p->op = (u8)op;
939 p->flags = EP_Leaf;
940 p->iAgg = -1;
941 p->u.zToken = (char*)&p[1];
942 memcpy(p->u.zToken, t.z, t.n);
943 p->u.zToken[t.n] = 0;
944 if( sqlite3Isquote(p->u.zToken[0]) ){
945 if( p->u.zToken[0]=='"' ) p->flags |= EP_DblQuoted;
946 sqlite3Dequote(p->u.zToken);
948 #if SQLITE_MAX_EXPR_DEPTH>0
949 p->nHeight = 1;
950 #endif
952 return p;
956 expr(A) ::= term(A).
957 expr(A) ::= LP expr(X) RP. {A = X;}
958 expr(A) ::= id(X). {A=tokenExpr(pParse,TK_ID,X); /*A-overwrites-X*/}
959 expr(A) ::= JOIN_KW(X). {A=tokenExpr(pParse,TK_ID,X); /*A-overwrites-X*/}
960 expr(A) ::= nm(X) DOT nm(Y). {
961 Expr *temp1 = sqlite3ExprAlloc(pParse->db, TK_ID, &X, 1);
962 Expr *temp2 = sqlite3ExprAlloc(pParse->db, TK_ID, &Y, 1);
963 A = sqlite3PExpr(pParse, TK_DOT, temp1, temp2);
965 expr(A) ::= nm(X) DOT nm(Y) DOT nm(Z). {
966 Expr *temp1 = sqlite3ExprAlloc(pParse->db, TK_ID, &X, 1);
967 Expr *temp2 = sqlite3ExprAlloc(pParse->db, TK_ID, &Y, 1);
968 Expr *temp3 = sqlite3ExprAlloc(pParse->db, TK_ID, &Z, 1);
969 Expr *temp4 = sqlite3PExpr(pParse, TK_DOT, temp2, temp3);
970 A = sqlite3PExpr(pParse, TK_DOT, temp1, temp4);
972 term(A) ::= NULL|FLOAT|BLOB(X). {A=tokenExpr(pParse,@X,X); /*A-overwrites-X*/}
973 term(A) ::= STRING(X). {A=tokenExpr(pParse,@X,X); /*A-overwrites-X*/}
974 term(A) ::= INTEGER(X). {
975 A = sqlite3ExprAlloc(pParse->db, TK_INTEGER, &X, 1);
977 expr(A) ::= VARIABLE(X). {
978 if( !(X.z[0]=='#' && sqlite3Isdigit(X.z[1])) ){
979 u32 n = X.n;
980 A = tokenExpr(pParse, TK_VARIABLE, X);
981 sqlite3ExprAssignVarNumber(pParse, A, n);
982 }else{
983 /* When doing a nested parse, one can include terms in an expression
984 ** that look like this: #1 #2 ... These terms refer to registers
985 ** in the virtual machine. #N is the N-th register. */
986 Token t = X; /*A-overwrites-X*/
987 assert( t.n>=2 );
988 if( pParse->nested==0 ){
989 sqlite3ErrorMsg(pParse, "near \"%T\": syntax error", &t);
990 A = 0;
991 }else{
992 A = sqlite3PExpr(pParse, TK_REGISTER, 0, 0);
993 if( A ) sqlite3GetInt32(&t.z[1], &A->iTable);
997 expr(A) ::= expr(A) COLLATE ids(C). {
998 A = sqlite3ExprAddCollateToken(pParse, A, &C, 1);
1000 %ifndef SQLITE_OMIT_CAST
1001 expr(A) ::= CAST LP expr(E) AS typetoken(T) RP. {
1002 A = sqlite3ExprAlloc(pParse->db, TK_CAST, &T, 1);
1003 sqlite3ExprAttachSubtrees(pParse->db, A, E, 0);
1005 %endif SQLITE_OMIT_CAST
1006 expr(A) ::= id(X) LP distinct(D) exprlist(Y) RP. {
1007 if( Y && Y->nExpr>pParse->db->aLimit[SQLITE_LIMIT_FUNCTION_ARG] ){
1008 sqlite3ErrorMsg(pParse, "too many arguments on function %T", &X);
1010 A = sqlite3ExprFunction(pParse, Y, &X);
1011 if( D==SF_Distinct && A ){
1012 A->flags |= EP_Distinct;
1015 expr(A) ::= id(X) LP STAR RP. {
1016 A = sqlite3ExprFunction(pParse, 0, &X);
1018 term(A) ::= CTIME_KW(OP). {
1019 A = sqlite3ExprFunction(pParse, 0, &OP);
1022 expr(A) ::= LP nexprlist(X) COMMA expr(Y) RP. {
1023 ExprList *pList = sqlite3ExprListAppend(pParse, X, Y);
1024 A = sqlite3PExpr(pParse, TK_VECTOR, 0, 0);
1025 if( A ){
1026 A->x.pList = pList;
1027 }else{
1028 sqlite3ExprListDelete(pParse->db, pList);
1032 expr(A) ::= expr(A) AND(OP) expr(Y). {A=sqlite3PExpr(pParse,@OP,A,Y);}
1033 expr(A) ::= expr(A) OR(OP) expr(Y). {A=sqlite3PExpr(pParse,@OP,A,Y);}
1034 expr(A) ::= expr(A) LT|GT|GE|LE(OP) expr(Y).
1035 {A=sqlite3PExpr(pParse,@OP,A,Y);}
1036 expr(A) ::= expr(A) EQ|NE(OP) expr(Y). {A=sqlite3PExpr(pParse,@OP,A,Y);}
1037 expr(A) ::= expr(A) BITAND|BITOR|LSHIFT|RSHIFT(OP) expr(Y).
1038 {A=sqlite3PExpr(pParse,@OP,A,Y);}
1039 expr(A) ::= expr(A) PLUS|MINUS(OP) expr(Y).
1040 {A=sqlite3PExpr(pParse,@OP,A,Y);}
1041 expr(A) ::= expr(A) STAR|SLASH|REM(OP) expr(Y).
1042 {A=sqlite3PExpr(pParse,@OP,A,Y);}
1043 expr(A) ::= expr(A) CONCAT(OP) expr(Y). {A=sqlite3PExpr(pParse,@OP,A,Y);}
1044 %type likeop {Token}
1045 likeop(A) ::= LIKE_KW|MATCH(A).
1046 likeop(A) ::= NOT LIKE_KW|MATCH(X). {A=X; A.n|=0x80000000; /*A-overwrite-X*/}
1047 expr(A) ::= expr(A) likeop(OP) expr(Y). [LIKE_KW] {
1048 ExprList *pList;
1049 int bNot = OP.n & 0x80000000;
1050 OP.n &= 0x7fffffff;
1051 pList = sqlite3ExprListAppend(pParse,0, Y);
1052 pList = sqlite3ExprListAppend(pParse,pList, A);
1053 A = sqlite3ExprFunction(pParse, pList, &OP);
1054 if( bNot ) A = sqlite3PExpr(pParse, TK_NOT, A, 0);
1055 if( A ) A->flags |= EP_InfixFunc;
1057 expr(A) ::= expr(A) likeop(OP) expr(Y) ESCAPE expr(E). [LIKE_KW] {
1058 ExprList *pList;
1059 int bNot = OP.n & 0x80000000;
1060 OP.n &= 0x7fffffff;
1061 pList = sqlite3ExprListAppend(pParse,0, Y);
1062 pList = sqlite3ExprListAppend(pParse,pList, A);
1063 pList = sqlite3ExprListAppend(pParse,pList, E);
1064 A = sqlite3ExprFunction(pParse, pList, &OP);
1065 if( bNot ) A = sqlite3PExpr(pParse, TK_NOT, A, 0);
1066 if( A ) A->flags |= EP_InfixFunc;
1069 expr(A) ::= expr(A) ISNULL|NOTNULL(E). {A = sqlite3PExpr(pParse,@E,A,0);}
1070 expr(A) ::= expr(A) NOT NULL. {A = sqlite3PExpr(pParse,TK_NOTNULL,A,0);}
1072 %include {
1073 /* A routine to convert a binary TK_IS or TK_ISNOT expression into a
1074 ** unary TK_ISNULL or TK_NOTNULL expression. */
1075 static void binaryToUnaryIfNull(Parse *pParse, Expr *pY, Expr *pA, int op){
1076 sqlite3 *db = pParse->db;
1077 if( pA && pY && pY->op==TK_NULL ){
1078 pA->op = (u8)op;
1079 sqlite3ExprDelete(db, pA->pRight);
1080 pA->pRight = 0;
1085 // expr1 IS expr2
1086 // expr1 IS NOT expr2
1088 // If expr2 is NULL then code as TK_ISNULL or TK_NOTNULL. If expr2
1089 // is any other expression, code as TK_IS or TK_ISNOT.
1091 expr(A) ::= expr(A) IS expr(Y). {
1092 A = sqlite3PExpr(pParse,TK_IS,A,Y);
1093 binaryToUnaryIfNull(pParse, Y, A, TK_ISNULL);
1095 expr(A) ::= expr(A) IS NOT expr(Y). {
1096 A = sqlite3PExpr(pParse,TK_ISNOT,A,Y);
1097 binaryToUnaryIfNull(pParse, Y, A, TK_NOTNULL);
1100 expr(A) ::= NOT(B) expr(X).
1101 {A = sqlite3PExpr(pParse, @B, X, 0);/*A-overwrites-B*/}
1102 expr(A) ::= BITNOT(B) expr(X).
1103 {A = sqlite3PExpr(pParse, @B, X, 0);/*A-overwrites-B*/}
1104 expr(A) ::= MINUS expr(X). [BITNOT]
1105 {A = sqlite3PExpr(pParse, TK_UMINUS, X, 0);}
1106 expr(A) ::= PLUS expr(X). [BITNOT]
1107 {A = sqlite3PExpr(pParse, TK_UPLUS, X, 0);}
1109 %type between_op {int}
1110 between_op(A) ::= BETWEEN. {A = 0;}
1111 between_op(A) ::= NOT BETWEEN. {A = 1;}
1112 expr(A) ::= expr(A) between_op(N) expr(X) AND expr(Y). [BETWEEN] {
1113 ExprList *pList = sqlite3ExprListAppend(pParse,0, X);
1114 pList = sqlite3ExprListAppend(pParse,pList, Y);
1115 A = sqlite3PExpr(pParse, TK_BETWEEN, A, 0);
1116 if( A ){
1117 A->x.pList = pList;
1118 }else{
1119 sqlite3ExprListDelete(pParse->db, pList);
1121 if( N ) A = sqlite3PExpr(pParse, TK_NOT, A, 0);
1123 %ifndef SQLITE_OMIT_SUBQUERY
1124 %type in_op {int}
1125 in_op(A) ::= IN. {A = 0;}
1126 in_op(A) ::= NOT IN. {A = 1;}
1127 expr(A) ::= expr(A) in_op(N) LP exprlist(Y) RP. [IN] {
1128 if( Y==0 ){
1129 /* Expressions of the form
1131 ** expr1 IN ()
1132 ** expr1 NOT IN ()
1134 ** simplify to constants 0 (false) and 1 (true), respectively,
1135 ** regardless of the value of expr1.
1137 sqlite3ExprDelete(pParse->db, A);
1138 A = sqlite3ExprAlloc(pParse->db, TK_INTEGER,&sqlite3IntTokens[N],1);
1139 }else if( Y->nExpr==1 ){
1140 /* Expressions of the form:
1142 ** expr1 IN (?1)
1143 ** expr1 NOT IN (?2)
1145 ** with exactly one value on the RHS can be simplified to something
1146 ** like this:
1148 ** expr1 == ?1
1149 ** expr1 <> ?2
1151 ** But, the RHS of the == or <> is marked with the EP_Generic flag
1152 ** so that it may not contribute to the computation of comparison
1153 ** affinity or the collating sequence to use for comparison. Otherwise,
1154 ** the semantics would be subtly different from IN or NOT IN.
1156 Expr *pRHS = Y->a[0].pExpr;
1157 Y->a[0].pExpr = 0;
1158 sqlite3ExprListDelete(pParse->db, Y);
1159 /* pRHS cannot be NULL because a malloc error would have been detected
1160 ** before now and control would have never reached this point */
1161 if( ALWAYS(pRHS) ){
1162 pRHS->flags &= ~EP_Collate;
1163 pRHS->flags |= EP_Generic;
1165 A = sqlite3PExpr(pParse, N ? TK_NE : TK_EQ, A, pRHS);
1166 }else{
1167 A = sqlite3PExpr(pParse, TK_IN, A, 0);
1168 if( A ){
1169 A->x.pList = Y;
1170 sqlite3ExprSetHeightAndFlags(pParse, A);
1171 }else{
1172 sqlite3ExprListDelete(pParse->db, Y);
1174 if( N ) A = sqlite3PExpr(pParse, TK_NOT, A, 0);
1177 expr(A) ::= LP select(X) RP. {
1178 A = sqlite3PExpr(pParse, TK_SELECT, 0, 0);
1179 sqlite3PExprAddSelect(pParse, A, X);
1181 expr(A) ::= expr(A) in_op(N) LP select(Y) RP. [IN] {
1182 A = sqlite3PExpr(pParse, TK_IN, A, 0);
1183 sqlite3PExprAddSelect(pParse, A, Y);
1184 if( N ) A = sqlite3PExpr(pParse, TK_NOT, A, 0);
1186 expr(A) ::= expr(A) in_op(N) nm(Y) dbnm(Z) paren_exprlist(E). [IN] {
1187 SrcList *pSrc = sqlite3SrcListAppend(pParse->db, 0,&Y,&Z);
1188 Select *pSelect = sqlite3SelectNew(pParse, 0,pSrc,0,0,0,0,0,0);
1189 if( E ) sqlite3SrcListFuncArgs(pParse, pSelect ? pSrc : 0, E);
1190 A = sqlite3PExpr(pParse, TK_IN, A, 0);
1191 sqlite3PExprAddSelect(pParse, A, pSelect);
1192 if( N ) A = sqlite3PExpr(pParse, TK_NOT, A, 0);
1194 expr(A) ::= EXISTS LP select(Y) RP. {
1195 Expr *p;
1196 p = A = sqlite3PExpr(pParse, TK_EXISTS, 0, 0);
1197 sqlite3PExprAddSelect(pParse, p, Y);
1199 %endif SQLITE_OMIT_SUBQUERY
1201 /* CASE expressions */
1202 expr(A) ::= CASE case_operand(X) case_exprlist(Y) case_else(Z) END. {
1203 A = sqlite3PExpr(pParse, TK_CASE, X, 0);
1204 if( A ){
1205 A->x.pList = Z ? sqlite3ExprListAppend(pParse,Y,Z) : Y;
1206 sqlite3ExprSetHeightAndFlags(pParse, A);
1207 }else{
1208 sqlite3ExprListDelete(pParse->db, Y);
1209 sqlite3ExprDelete(pParse->db, Z);
1212 %type case_exprlist {ExprList*}
1213 %destructor case_exprlist {sqlite3ExprListDelete(pParse->db, $$);}
1214 case_exprlist(A) ::= case_exprlist(A) WHEN expr(Y) THEN expr(Z). {
1215 A = sqlite3ExprListAppend(pParse,A, Y);
1216 A = sqlite3ExprListAppend(pParse,A, Z);
1218 case_exprlist(A) ::= WHEN expr(Y) THEN expr(Z). {
1219 A = sqlite3ExprListAppend(pParse,0, Y);
1220 A = sqlite3ExprListAppend(pParse,A, Z);
1222 %type case_else {Expr*}
1223 %destructor case_else {sqlite3ExprDelete(pParse->db, $$);}
1224 case_else(A) ::= ELSE expr(X). {A = X;}
1225 case_else(A) ::= . {A = 0;}
1226 %type case_operand {Expr*}
1227 %destructor case_operand {sqlite3ExprDelete(pParse->db, $$);}
1228 case_operand(A) ::= expr(X). {A = X; /*A-overwrites-X*/}
1229 case_operand(A) ::= . {A = 0;}
1231 %type exprlist {ExprList*}
1232 %destructor exprlist {sqlite3ExprListDelete(pParse->db, $$);}
1233 %type nexprlist {ExprList*}
1234 %destructor nexprlist {sqlite3ExprListDelete(pParse->db, $$);}
1236 exprlist(A) ::= nexprlist(A).
1237 exprlist(A) ::= . {A = 0;}
1238 nexprlist(A) ::= nexprlist(A) COMMA expr(Y).
1239 {A = sqlite3ExprListAppend(pParse,A,Y);}
1240 nexprlist(A) ::= expr(Y).
1241 {A = sqlite3ExprListAppend(pParse,0,Y); /*A-overwrites-Y*/}
1243 %ifndef SQLITE_OMIT_SUBQUERY
1244 /* A paren_exprlist is an optional expression list contained inside
1245 ** of parenthesis */
1246 %type paren_exprlist {ExprList*}
1247 %destructor paren_exprlist {sqlite3ExprListDelete(pParse->db, $$);}
1248 paren_exprlist(A) ::= . {A = 0;}
1249 paren_exprlist(A) ::= LP exprlist(X) RP. {A = X;}
1250 %endif SQLITE_OMIT_SUBQUERY
1253 ///////////////////////////// The CREATE INDEX command ///////////////////////
1255 cmd ::= createkw(S) uniqueflag(U) INDEX ifnotexists(NE) nm(X) dbnm(D)
1256 ON nm(Y) LP sortlist(Z) RP where_opt(W). {
1257 sqlite3CreateIndex(pParse, &X, &D,
1258 sqlite3SrcListAppend(pParse->db,0,&Y,0), Z, U,
1259 &S, W, SQLITE_SO_ASC, NE, SQLITE_IDXTYPE_APPDEF);
1262 %type uniqueflag {int}
1263 uniqueflag(A) ::= UNIQUE. {A = OE_Abort;}
1264 uniqueflag(A) ::= . {A = OE_None;}
1267 // The eidlist non-terminal (Expression Id List) generates an ExprList
1268 // from a list of identifiers. The identifier names are in ExprList.a[].zName.
1269 // This list is stored in an ExprList rather than an IdList so that it
1270 // can be easily sent to sqlite3ColumnsExprList().
1272 // eidlist is grouped with CREATE INDEX because it used to be the non-terminal
1273 // used for the arguments to an index. That is just an historical accident.
1275 // IMPORTANT COMPATIBILITY NOTE: Some prior versions of SQLite accepted
1276 // COLLATE clauses and ASC or DESC keywords on ID lists in inappropriate
1277 // places - places that might have been stored in the sqlite_master schema.
1278 // Those extra features were ignored. But because they might be in some
1279 // (busted) old databases, we need to continue parsing them when loading
1280 // historical schemas.
1282 %type eidlist {ExprList*}
1283 %destructor eidlist {sqlite3ExprListDelete(pParse->db, $$);}
1284 %type eidlist_opt {ExprList*}
1285 %destructor eidlist_opt {sqlite3ExprListDelete(pParse->db, $$);}
1287 %include {
1288 /* Add a single new term to an ExprList that is used to store a
1289 ** list of identifiers. Report an error if the ID list contains
1290 ** a COLLATE clause or an ASC or DESC keyword, except ignore the
1291 ** error while parsing a legacy schema.
1293 static ExprList *parserAddExprIdListTerm(
1294 Parse *pParse,
1295 ExprList *pPrior,
1296 Token *pIdToken,
1297 int hasCollate,
1298 int sortOrder
1300 ExprList *p = sqlite3ExprListAppend(pParse, pPrior, 0);
1301 if( (hasCollate || sortOrder!=SQLITE_SO_UNDEFINED)
1302 && pParse->db->init.busy==0
1304 sqlite3ErrorMsg(pParse, "syntax error after column name \"%.*s\"",
1305 pIdToken->n, pIdToken->z);
1307 sqlite3ExprListSetName(pParse, p, pIdToken, 1);
1308 return p;
1310 } // end %include
1312 eidlist_opt(A) ::= . {A = 0;}
1313 eidlist_opt(A) ::= LP eidlist(X) RP. {A = X;}
1314 eidlist(A) ::= eidlist(A) COMMA nm(Y) collate(C) sortorder(Z). {
1315 A = parserAddExprIdListTerm(pParse, A, &Y, C, Z);
1317 eidlist(A) ::= nm(Y) collate(C) sortorder(Z). {
1318 A = parserAddExprIdListTerm(pParse, 0, &Y, C, Z); /*A-overwrites-Y*/
1321 %type collate {int}
1322 collate(C) ::= . {C = 0;}
1323 collate(C) ::= COLLATE ids. {C = 1;}
1326 ///////////////////////////// The DROP INDEX command /////////////////////////
1328 cmd ::= DROP INDEX ifexists(E) fullname(X). {sqlite3DropIndex(pParse, X, E);}
1330 ///////////////////////////// The VACUUM command /////////////////////////////
1332 %ifndef SQLITE_OMIT_VACUUM
1333 %ifndef SQLITE_OMIT_ATTACH
1334 cmd ::= VACUUM. {sqlite3Vacuum(pParse,0);}
1335 cmd ::= VACUUM nm(X). {sqlite3Vacuum(pParse,&X);}
1336 %endif SQLITE_OMIT_ATTACH
1337 %endif SQLITE_OMIT_VACUUM
1339 ///////////////////////////// The PRAGMA command /////////////////////////////
1341 %ifndef SQLITE_OMIT_PRAGMA
1342 cmd ::= PRAGMA nm(X) dbnm(Z). {sqlite3Pragma(pParse,&X,&Z,0,0);}
1343 cmd ::= PRAGMA nm(X) dbnm(Z) EQ nmnum(Y). {sqlite3Pragma(pParse,&X,&Z,&Y,0);}
1344 cmd ::= PRAGMA nm(X) dbnm(Z) LP nmnum(Y) RP. {sqlite3Pragma(pParse,&X,&Z,&Y,0);}
1345 cmd ::= PRAGMA nm(X) dbnm(Z) EQ minus_num(Y).
1346 {sqlite3Pragma(pParse,&X,&Z,&Y,1);}
1347 cmd ::= PRAGMA nm(X) dbnm(Z) LP minus_num(Y) RP.
1348 {sqlite3Pragma(pParse,&X,&Z,&Y,1);}
1350 nmnum(A) ::= plus_num(A).
1351 nmnum(A) ::= nm(A).
1352 nmnum(A) ::= ON(A).
1353 nmnum(A) ::= DELETE(A).
1354 nmnum(A) ::= DEFAULT(A).
1355 %endif SQLITE_OMIT_PRAGMA
1356 %token_class number INTEGER|FLOAT.
1357 plus_num(A) ::= PLUS number(X). {A = X;}
1358 plus_num(A) ::= number(A).
1359 minus_num(A) ::= MINUS number(X). {A = X;}
1360 //////////////////////////// The CREATE TRIGGER command /////////////////////
1362 %ifndef SQLITE_OMIT_TRIGGER
1364 cmd ::= createkw trigger_decl(A) BEGIN trigger_cmd_list(S) END(Z). {
1365 Token all;
1366 all.z = A.z;
1367 all.n = (int)(Z.z - A.z) + Z.n;
1368 sqlite3FinishTrigger(pParse, S, &all);
1371 trigger_decl(A) ::= temp(T) TRIGGER ifnotexists(NOERR) nm(B) dbnm(Z)
1372 trigger_time(C) trigger_event(D)
1373 ON fullname(E) foreach_clause when_clause(G). {
1374 sqlite3BeginTrigger(pParse, &B, &Z, C, D.a, D.b, E, G, T, NOERR);
1375 A = (Z.n==0?B:Z); /*A-overwrites-T*/
1378 %type trigger_time {int}
1379 trigger_time(A) ::= BEFORE|AFTER(X). { A = @X; /*A-overwrites-X*/ }
1380 trigger_time(A) ::= INSTEAD OF. { A = TK_INSTEAD;}
1381 trigger_time(A) ::= . { A = TK_BEFORE; }
1383 %type trigger_event {struct TrigEvent}
1384 %destructor trigger_event {sqlite3IdListDelete(pParse->db, $$.b);}
1385 trigger_event(A) ::= DELETE|INSERT(X). {A.a = @X; /*A-overwrites-X*/ A.b = 0;}
1386 trigger_event(A) ::= UPDATE(X). {A.a = @X; /*A-overwrites-X*/ A.b = 0;}
1387 trigger_event(A) ::= UPDATE OF idlist(X).{A.a = TK_UPDATE; A.b = X;}
1389 foreach_clause ::= .
1390 foreach_clause ::= FOR EACH ROW.
1392 %type when_clause {Expr*}
1393 %destructor when_clause {sqlite3ExprDelete(pParse->db, $$);}
1394 when_clause(A) ::= . { A = 0; }
1395 when_clause(A) ::= WHEN expr(X). { A = X; }
1397 %type trigger_cmd_list {TriggerStep*}
1398 %destructor trigger_cmd_list {sqlite3DeleteTriggerStep(pParse->db, $$);}
1399 trigger_cmd_list(A) ::= trigger_cmd_list(A) trigger_cmd(X) SEMI. {
1400 assert( A!=0 );
1401 A->pLast->pNext = X;
1402 A->pLast = X;
1404 trigger_cmd_list(A) ::= trigger_cmd(A) SEMI. {
1405 assert( A!=0 );
1406 A->pLast = A;
1409 // Disallow qualified table names on INSERT, UPDATE, and DELETE statements
1410 // within a trigger. The table to INSERT, UPDATE, or DELETE is always in
1411 // the same database as the table that the trigger fires on.
1413 %type trnm {Token}
1414 trnm(A) ::= nm(A).
1415 trnm(A) ::= nm DOT nm(X). {
1416 A = X;
1417 sqlite3ErrorMsg(pParse,
1418 "qualified table names are not allowed on INSERT, UPDATE, and DELETE "
1419 "statements within triggers");
1422 // Disallow the INDEX BY and NOT INDEXED clauses on UPDATE and DELETE
1423 // statements within triggers. We make a specific error message for this
1424 // since it is an exception to the default grammar rules.
1426 tridxby ::= .
1427 tridxby ::= INDEXED BY nm. {
1428 sqlite3ErrorMsg(pParse,
1429 "the INDEXED BY clause is not allowed on UPDATE or DELETE statements "
1430 "within triggers");
1432 tridxby ::= NOT INDEXED. {
1433 sqlite3ErrorMsg(pParse,
1434 "the NOT INDEXED clause is not allowed on UPDATE or DELETE statements "
1435 "within triggers");
1440 %type trigger_cmd {TriggerStep*}
1441 %destructor trigger_cmd {sqlite3DeleteTriggerStep(pParse->db, $$);}
1442 // UPDATE
1443 trigger_cmd(A) ::=
1444 UPDATE(B) orconf(R) trnm(X) tridxby SET setlist(Y) where_opt(Z) scanpt(E).
1445 {A = sqlite3TriggerUpdateStep(pParse->db, &X, Y, Z, R, B.z, E);}
1447 // INSERT
1448 trigger_cmd(A) ::= scanpt(B) insert_cmd(R) INTO
1449 trnm(X) idlist_opt(F) select(S) upsert(U) scanpt(Z). {
1450 A = sqlite3TriggerInsertStep(pParse->db,&X,F,S,R,U,B,Z);/*A-overwrites-R*/
1452 // DELETE
1453 trigger_cmd(A) ::= DELETE(B) FROM trnm(X) tridxby where_opt(Y) scanpt(E).
1454 {A = sqlite3TriggerDeleteStep(pParse->db, &X, Y, B.z, E);}
1456 // SELECT
1457 trigger_cmd(A) ::= scanpt(B) select(X) scanpt(E).
1458 {A = sqlite3TriggerSelectStep(pParse->db, X, B, E); /*A-overwrites-X*/}
1460 // The special RAISE expression that may occur in trigger programs
1461 expr(A) ::= RAISE LP IGNORE RP. {
1462 A = sqlite3PExpr(pParse, TK_RAISE, 0, 0);
1463 if( A ){
1464 A->affinity = OE_Ignore;
1467 expr(A) ::= RAISE LP raisetype(T) COMMA nm(Z) RP. {
1468 A = sqlite3ExprAlloc(pParse->db, TK_RAISE, &Z, 1);
1469 if( A ) {
1470 A->affinity = (char)T;
1473 %endif !SQLITE_OMIT_TRIGGER
1475 %type raisetype {int}
1476 raisetype(A) ::= ROLLBACK. {A = OE_Rollback;}
1477 raisetype(A) ::= ABORT. {A = OE_Abort;}
1478 raisetype(A) ::= FAIL. {A = OE_Fail;}
1481 //////////////////////// DROP TRIGGER statement //////////////////////////////
1482 %ifndef SQLITE_OMIT_TRIGGER
1483 cmd ::= DROP TRIGGER ifexists(NOERR) fullname(X). {
1484 sqlite3DropTrigger(pParse,X,NOERR);
1486 %endif !SQLITE_OMIT_TRIGGER
1488 //////////////////////// ATTACH DATABASE file AS name /////////////////////////
1489 %ifndef SQLITE_OMIT_ATTACH
1490 cmd ::= ATTACH database_kw_opt expr(F) AS expr(D) key_opt(K). {
1491 sqlite3Attach(pParse, F, D, K);
1493 cmd ::= DETACH database_kw_opt expr(D). {
1494 sqlite3Detach(pParse, D);
1497 %type key_opt {Expr*}
1498 %destructor key_opt {sqlite3ExprDelete(pParse->db, $$);}
1499 key_opt(A) ::= . { A = 0; }
1500 key_opt(A) ::= KEY expr(X). { A = X; }
1502 database_kw_opt ::= DATABASE.
1503 database_kw_opt ::= .
1504 %endif SQLITE_OMIT_ATTACH
1506 ////////////////////////// REINDEX collation //////////////////////////////////
1507 %ifndef SQLITE_OMIT_REINDEX
1508 cmd ::= REINDEX. {sqlite3Reindex(pParse, 0, 0);}
1509 cmd ::= REINDEX nm(X) dbnm(Y). {sqlite3Reindex(pParse, &X, &Y);}
1510 %endif SQLITE_OMIT_REINDEX
1512 /////////////////////////////////// ANALYZE ///////////////////////////////////
1513 %ifndef SQLITE_OMIT_ANALYZE
1514 cmd ::= ANALYZE. {sqlite3Analyze(pParse, 0, 0);}
1515 cmd ::= ANALYZE nm(X) dbnm(Y). {sqlite3Analyze(pParse, &X, &Y);}
1516 %endif
1518 //////////////////////// ALTER TABLE table ... ////////////////////////////////
1519 %ifndef SQLITE_OMIT_ALTERTABLE
1520 cmd ::= ALTER TABLE fullname(X) RENAME TO nm(Z). {
1521 sqlite3AlterRenameTable(pParse,X,&Z);
1523 cmd ::= ALTER TABLE add_column_fullname
1524 ADD kwcolumn_opt columnname(Y) carglist. {
1525 Y.n = (int)(pParse->sLastToken.z-Y.z) + pParse->sLastToken.n;
1526 sqlite3AlterFinishAddColumn(pParse, &Y);
1528 add_column_fullname ::= fullname(X). {
1529 disableLookaside(pParse);
1530 sqlite3AlterBeginAddColumn(pParse, X);
1532 kwcolumn_opt ::= .
1533 kwcolumn_opt ::= COLUMNKW.
1534 %endif SQLITE_OMIT_ALTERTABLE
1536 //////////////////////// CREATE VIRTUAL TABLE ... /////////////////////////////
1537 %ifndef SQLITE_OMIT_VIRTUALTABLE
1538 cmd ::= create_vtab. {sqlite3VtabFinishParse(pParse,0);}
1539 cmd ::= create_vtab LP vtabarglist RP(X). {sqlite3VtabFinishParse(pParse,&X);}
1540 create_vtab ::= createkw VIRTUAL TABLE ifnotexists(E)
1541 nm(X) dbnm(Y) USING nm(Z). {
1542 sqlite3VtabBeginParse(pParse, &X, &Y, &Z, E);
1544 vtabarglist ::= vtabarg.
1545 vtabarglist ::= vtabarglist COMMA vtabarg.
1546 vtabarg ::= . {sqlite3VtabArgInit(pParse);}
1547 vtabarg ::= vtabarg vtabargtoken.
1548 vtabargtoken ::= ANY(X). {sqlite3VtabArgExtend(pParse,&X);}
1549 vtabargtoken ::= lp anylist RP(X). {sqlite3VtabArgExtend(pParse,&X);}
1550 lp ::= LP(X). {sqlite3VtabArgExtend(pParse,&X);}
1551 anylist ::= .
1552 anylist ::= anylist LP anylist RP.
1553 anylist ::= anylist ANY.
1554 %endif SQLITE_OMIT_VIRTUALTABLE
1557 //////////////////////// COMMON TABLE EXPRESSIONS ////////////////////////////
1558 %type wqlist {With*}
1559 %destructor wqlist {sqlite3WithDelete(pParse->db, $$);}
1561 with ::= .
1562 %ifndef SQLITE_OMIT_CTE
1563 with ::= WITH wqlist(W). { sqlite3WithPush(pParse, W, 1); }
1564 with ::= WITH RECURSIVE wqlist(W). { sqlite3WithPush(pParse, W, 1); }
1566 wqlist(A) ::= nm(X) eidlist_opt(Y) AS LP select(Z) RP. {
1567 A = sqlite3WithAdd(pParse, 0, &X, Y, Z); /*A-overwrites-X*/
1569 wqlist(A) ::= wqlist(A) COMMA nm(X) eidlist_opt(Y) AS LP select(Z) RP. {
1570 A = sqlite3WithAdd(pParse, A, &X, Y, Z);
1572 %endif SQLITE_OMIT_CTE