update tags for podspec
[sqlcipher.git] / src / parse.y
blob760cb114ad8cfc9240d1b571a1d18fa44870b748
1 %include {
2 /*
3 ** 2001-09-15
4 **
5 ** The author disclaims copyright to this source code. In place of
6 ** a legal notice, here is a blessing:
7 **
8 ** May you do good and not evil.
9 ** May you find forgiveness for yourself and forgive others.
10 ** May you share freely, never taking more than you give.
12 *************************************************************************
13 ** This file contains SQLite's SQL parser.
15 ** The canonical source code to this file ("parse.y") is a Lemon grammar
16 ** file that specifies the input grammar and actions to take while parsing.
17 ** That input file is processed by Lemon to generate a C-language
18 ** implementation of a parser for the given grammer. You might be reading
19 ** this comment as part of the translated C-code. Edits should be made
20 ** to the original parse.y sources.
24 // All token codes are small integers with #defines that begin with "TK_"
25 %token_prefix TK_
27 // The type of the data attached to each token is Token. This is also the
28 // default type for non-terminals.
30 %token_type {Token}
31 %default_type {Token}
33 // An extra argument to the constructor for the parser, which is available
34 // to all actions.
35 %extra_context {Parse *pParse}
37 // This code runs whenever there is a syntax error
39 %syntax_error {
40 UNUSED_PARAMETER(yymajor); /* Silence some compiler warnings */
41 if( TOKEN.z[0] ){
42 sqlite3ErrorMsg(pParse, "near \"%T\": syntax error", &TOKEN);
43 }else{
44 sqlite3ErrorMsg(pParse, "incomplete input");
47 %stack_overflow {
48 sqlite3ErrorMsg(pParse, "parser stack overflow");
51 // The name of the generated procedure that implements the parser
52 // is as follows:
53 %name sqlite3Parser
55 // The following text is included near the beginning of the C source
56 // code file that implements the parser.
58 %include {
59 #include "sqliteInt.h"
62 ** Disable all error recovery processing in the parser push-down
63 ** automaton.
65 #define YYNOERRORRECOVERY 1
68 ** Make yytestcase() the same as testcase()
70 #define yytestcase(X) testcase(X)
73 ** Indicate that sqlite3ParserFree() will never be called with a null
74 ** pointer.
76 #define YYPARSEFREENEVERNULL 1
79 ** In the amalgamation, the parse.c file generated by lemon and the
80 ** tokenize.c file are concatenated. In that case, sqlite3RunParser()
81 ** has access to the the size of the yyParser object and so the parser
82 ** engine can be allocated from stack. In that case, only the
83 ** sqlite3ParserInit() and sqlite3ParserFinalize() routines are invoked
84 ** and the sqlite3ParserAlloc() and sqlite3ParserFree() routines can be
85 ** omitted.
87 #ifdef SQLITE_AMALGAMATION
88 # define sqlite3Parser_ENGINEALWAYSONSTACK 1
89 #endif
92 ** Alternative datatype for the argument to the malloc() routine passed
93 ** into sqlite3ParserAlloc(). The default is size_t.
95 #define YYMALLOCARGTYPE u64
98 ** An instance of the following structure describes the event of a
99 ** TRIGGER. "a" is the event type, one of TK_UPDATE, TK_INSERT,
100 ** TK_DELETE, or TK_INSTEAD. If the event is of the form
102 ** UPDATE ON (a,b,c)
104 ** Then the "b" IdList records the list "a,b,c".
106 struct TrigEvent { int a; IdList * b; };
108 struct FrameBound { int eType; Expr *pExpr; };
111 ** Disable lookaside memory allocation for objects that might be
112 ** shared across database connections.
114 static void disableLookaside(Parse *pParse){
115 sqlite3 *db = pParse->db;
116 pParse->disableLookaside++;
117 DisableLookaside;
120 #if !defined(SQLITE_ENABLE_UPDATE_DELETE_LIMIT) \
121 && defined(SQLITE_UDL_CAPABLE_PARSER)
123 ** Issue an error message if an ORDER BY or LIMIT clause occurs on an
124 ** UPDATE or DELETE statement.
126 static void updateDeleteLimitError(
127 Parse *pParse,
128 ExprList *pOrderBy,
129 Expr *pLimit
131 if( pOrderBy ){
132 sqlite3ErrorMsg(pParse, "syntax error near \"ORDER BY\"");
133 }else{
134 sqlite3ErrorMsg(pParse, "syntax error near \"LIMIT\"");
136 sqlite3ExprListDelete(pParse->db, pOrderBy);
137 sqlite3ExprDelete(pParse->db, pLimit);
139 #endif /* SQLITE_ENABLE_UPDATE_DELETE_LIMIT */
141 } // end %include
143 // Input is a single SQL command
144 input ::= cmdlist.
145 cmdlist ::= cmdlist ecmd.
146 cmdlist ::= ecmd.
147 ecmd ::= SEMI.
148 ecmd ::= cmdx SEMI.
149 %ifndef SQLITE_OMIT_EXPLAIN
150 ecmd ::= explain cmdx SEMI. {NEVER-REDUCE}
151 explain ::= EXPLAIN. { pParse->explain = 1; }
152 explain ::= EXPLAIN QUERY PLAN. { pParse->explain = 2; }
153 %endif SQLITE_OMIT_EXPLAIN
154 cmdx ::= cmd. { sqlite3FinishCoding(pParse); }
156 ///////////////////// Begin and end transactions. ////////////////////////////
159 cmd ::= BEGIN transtype(Y) trans_opt. {sqlite3BeginTransaction(pParse, Y);}
160 trans_opt ::= .
161 trans_opt ::= TRANSACTION.
162 trans_opt ::= TRANSACTION nm.
163 %type transtype {int}
164 transtype(A) ::= . {A = TK_DEFERRED;}
165 transtype(A) ::= DEFERRED(X). {A = @X; /*A-overwrites-X*/}
166 transtype(A) ::= IMMEDIATE(X). {A = @X; /*A-overwrites-X*/}
167 transtype(A) ::= EXCLUSIVE(X). {A = @X; /*A-overwrites-X*/}
168 cmd ::= COMMIT|END(X) trans_opt. {sqlite3EndTransaction(pParse,@X);}
169 cmd ::= ROLLBACK(X) trans_opt. {sqlite3EndTransaction(pParse,@X);}
171 savepoint_opt ::= SAVEPOINT.
172 savepoint_opt ::= .
173 cmd ::= SAVEPOINT nm(X). {
174 sqlite3Savepoint(pParse, SAVEPOINT_BEGIN, &X);
176 cmd ::= RELEASE savepoint_opt nm(X). {
177 sqlite3Savepoint(pParse, SAVEPOINT_RELEASE, &X);
179 cmd ::= ROLLBACK trans_opt TO savepoint_opt nm(X). {
180 sqlite3Savepoint(pParse, SAVEPOINT_ROLLBACK, &X);
183 ///////////////////// The CREATE TABLE statement ////////////////////////////
185 cmd ::= create_table create_table_args.
186 create_table ::= createkw temp(T) TABLE ifnotexists(E) nm(Y) dbnm(Z). {
187 sqlite3StartTable(pParse,&Y,&Z,T,0,0,E);
189 createkw(A) ::= CREATE(A). {disableLookaside(pParse);}
191 %type ifnotexists {int}
192 ifnotexists(A) ::= . {A = 0;}
193 ifnotexists(A) ::= IF NOT EXISTS. {A = 1;}
194 %type temp {int}
195 %ifndef SQLITE_OMIT_TEMPDB
196 temp(A) ::= TEMP. {A = pParse->db->init.busy==0;}
197 %endif SQLITE_OMIT_TEMPDB
198 temp(A) ::= . {A = 0;}
199 create_table_args ::= LP columnlist conslist_opt(X) RP(E) table_option_set(F). {
200 sqlite3EndTable(pParse,&X,&E,F,0);
202 create_table_args ::= AS select(S). {
203 sqlite3EndTable(pParse,0,0,0,S);
204 sqlite3SelectDelete(pParse->db, S);
206 %type table_option_set {u32}
207 %type table_option {u32}
208 table_option_set(A) ::= . {A = 0;}
209 table_option_set(A) ::= table_option(A).
210 table_option_set(A) ::= table_option_set(X) COMMA table_option(Y). {A = X|Y;}
211 table_option(A) ::= WITHOUT nm(X). {
212 if( X.n==5 && sqlite3_strnicmp(X.z,"rowid",5)==0 ){
213 A = TF_WithoutRowid | TF_NoVisibleRowid;
214 }else{
215 A = 0;
216 sqlite3ErrorMsg(pParse, "unknown table option: %.*s", X.n, X.z);
219 table_option(A) ::= nm(X). {
220 if( X.n==6 && sqlite3_strnicmp(X.z,"strict",6)==0 ){
221 A = TF_Strict;
222 }else{
223 A = 0;
224 sqlite3ErrorMsg(pParse, "unknown table option: %.*s", X.n, X.z);
227 columnlist ::= columnlist COMMA columnname carglist.
228 columnlist ::= columnname carglist.
229 columnname(A) ::= nm(A) typetoken(Y). {sqlite3AddColumn(pParse,A,Y);}
231 // Declare some tokens early in order to influence their values, to
232 // improve performance and reduce the executable size. The goal here is
233 // to get the "jump" operations in ISNULL through ESCAPE to have numeric
234 // values that are early enough so that all jump operations are clustered
235 // at the beginning.
237 %token ABORT ACTION AFTER ANALYZE ASC ATTACH BEFORE BEGIN BY CASCADE CAST.
238 %token CONFLICT DATABASE DEFERRED DESC DETACH EACH END EXCLUSIVE EXPLAIN FAIL.
239 %token OR AND NOT IS MATCH LIKE_KW BETWEEN IN ISNULL NOTNULL NE EQ.
240 %token GT LE LT GE ESCAPE.
242 // The following directive causes tokens ABORT, AFTER, ASC, etc. to
243 // fallback to ID if they will not parse as their original value.
244 // This obviates the need for the "id" nonterminal.
246 %fallback ID
247 ABORT ACTION AFTER ANALYZE ASC ATTACH BEFORE BEGIN BY CASCADE CAST COLUMNKW
248 CONFLICT DATABASE DEFERRED DESC DETACH DO
249 EACH END EXCLUSIVE EXPLAIN FAIL FOR
250 IGNORE IMMEDIATE INITIALLY INSTEAD LIKE_KW MATCH NO PLAN
251 QUERY KEY OF OFFSET PRAGMA RAISE RECURSIVE RELEASE REPLACE RESTRICT ROW ROWS
252 ROLLBACK SAVEPOINT TEMP TRIGGER VACUUM VIEW VIRTUAL WITH WITHOUT
253 NULLS FIRST LAST
254 %ifdef SQLITE_OMIT_COMPOUND_SELECT
255 EXCEPT INTERSECT UNION
256 %endif SQLITE_OMIT_COMPOUND_SELECT
257 %ifndef SQLITE_OMIT_WINDOWFUNC
258 CURRENT FOLLOWING PARTITION PRECEDING RANGE UNBOUNDED
259 EXCLUDE GROUPS OTHERS TIES
260 %endif SQLITE_OMIT_WINDOWFUNC
261 %ifndef SQLITE_OMIT_GENERATED_COLUMNS
262 GENERATED ALWAYS
263 %endif
264 MATERIALIZED
265 REINDEX RENAME CTIME_KW IF
267 %wildcard ANY.
269 // Define operator precedence early so that this is the first occurrence
270 // of the operator tokens in the grammer. Keeping the operators together
271 // causes them to be assigned integer values that are close together,
272 // which keeps parser tables smaller.
274 // The token values assigned to these symbols is determined by the order
275 // in which lemon first sees them. It must be the case that ISNULL/NOTNULL,
276 // NE/EQ, GT/LE, and GE/LT are separated by only a single value. See
277 // the sqlite3ExprIfFalse() routine for additional information on this
278 // constraint.
280 %left OR.
281 %left AND.
282 %right NOT.
283 %left IS MATCH LIKE_KW BETWEEN IN ISNULL NOTNULL NE EQ.
284 %left GT LE LT GE.
285 %right ESCAPE.
286 %left BITAND BITOR LSHIFT RSHIFT.
287 %left PLUS MINUS.
288 %left STAR SLASH REM.
289 %left CONCAT PTR.
290 %left COLLATE.
291 %right BITNOT.
292 %nonassoc ON.
294 // An IDENTIFIER can be a generic identifier, or one of several
295 // keywords. Any non-standard keyword can also be an identifier.
297 %token_class id ID|INDEXED.
300 // And "ids" is an identifer-or-string.
302 %token_class ids ID|STRING.
304 // The name of a column or table can be any of the following:
306 %type nm {Token}
307 nm(A) ::= id(A).
308 nm(A) ::= STRING(A).
309 nm(A) ::= JOIN_KW(A).
311 // A typetoken is really zero or more tokens that form a type name such
312 // as can be found after the column name in a CREATE TABLE statement.
313 // Multiple tokens are concatenated to form the value of the typetoken.
315 %type typetoken {Token}
316 typetoken(A) ::= . {A.n = 0; A.z = 0;}
317 typetoken(A) ::= typename(A).
318 typetoken(A) ::= typename(A) LP signed RP(Y). {
319 A.n = (int)(&Y.z[Y.n] - A.z);
321 typetoken(A) ::= typename(A) LP signed COMMA signed RP(Y). {
322 A.n = (int)(&Y.z[Y.n] - A.z);
324 %type typename {Token}
325 typename(A) ::= ids(A).
326 typename(A) ::= typename(A) ids(Y). {A.n=Y.n+(int)(Y.z-A.z);}
327 signed ::= plus_num.
328 signed ::= minus_num.
330 // The scanpt non-terminal takes a value which is a pointer to the
331 // input text just past the last token that has been shifted into
332 // the parser. By surrounding some phrase in the grammar with two
333 // scanpt non-terminals, we can capture the input text for that phrase.
334 // For example:
336 // something ::= .... scanpt(A) phrase scanpt(Z).
338 // The text that is parsed as "phrase" is a string starting at A
339 // and containing (int)(Z-A) characters. There might be some extra
340 // whitespace on either end of the text, but that can be removed in
341 // post-processing, if needed.
343 %type scanpt {const char*}
344 scanpt(A) ::= . {
345 assert( yyLookahead!=YYNOCODE );
346 A = yyLookaheadToken.z;
348 scantok(A) ::= . {
349 assert( yyLookahead!=YYNOCODE );
350 A = yyLookaheadToken;
353 // "carglist" is a list of additional constraints that come after the
354 // column name and column type in a CREATE TABLE statement.
356 carglist ::= carglist ccons.
357 carglist ::= .
358 ccons ::= CONSTRAINT nm(X). {pParse->constraintName = X;}
359 ccons ::= DEFAULT scantok(A) term(X).
360 {sqlite3AddDefaultValue(pParse,X,A.z,&A.z[A.n]);}
361 ccons ::= DEFAULT LP(A) expr(X) RP(Z).
362 {sqlite3AddDefaultValue(pParse,X,A.z+1,Z.z);}
363 ccons ::= DEFAULT PLUS(A) scantok(Z) term(X).
364 {sqlite3AddDefaultValue(pParse,X,A.z,&Z.z[Z.n]);}
365 ccons ::= DEFAULT MINUS(A) scantok(Z) term(X). {
366 Expr *p = sqlite3PExpr(pParse, TK_UMINUS, X, 0);
367 sqlite3AddDefaultValue(pParse,p,A.z,&Z.z[Z.n]);
369 ccons ::= DEFAULT scantok id(X). {
370 Expr *p = tokenExpr(pParse, TK_STRING, X);
371 if( p ){
372 sqlite3ExprIdToTrueFalse(p);
373 testcase( p->op==TK_TRUEFALSE && sqlite3ExprTruthValue(p) );
375 sqlite3AddDefaultValue(pParse,p,X.z,X.z+X.n);
378 // In addition to the type name, we also care about the primary key and
379 // UNIQUE constraints.
381 ccons ::= NULL onconf.
382 ccons ::= NOT NULL onconf(R). {sqlite3AddNotNull(pParse, R);}
383 ccons ::= PRIMARY KEY sortorder(Z) onconf(R) autoinc(I).
384 {sqlite3AddPrimaryKey(pParse,0,R,I,Z);}
385 ccons ::= UNIQUE onconf(R). {sqlite3CreateIndex(pParse,0,0,0,0,R,0,0,0,0,
386 SQLITE_IDXTYPE_UNIQUE);}
387 ccons ::= CHECK LP(A) expr(X) RP(B). {sqlite3AddCheckConstraint(pParse,X,A.z,B.z);}
388 ccons ::= REFERENCES nm(T) eidlist_opt(TA) refargs(R).
389 {sqlite3CreateForeignKey(pParse,0,&T,TA,R);}
390 ccons ::= defer_subclause(D). {sqlite3DeferForeignKey(pParse,D);}
391 ccons ::= COLLATE ids(C). {sqlite3AddCollateType(pParse, &C);}
392 ccons ::= GENERATED ALWAYS AS generated.
393 ccons ::= AS generated.
394 generated ::= LP expr(E) RP. {sqlite3AddGenerated(pParse,E,0);}
395 generated ::= LP expr(E) RP ID(TYPE). {sqlite3AddGenerated(pParse,E,&TYPE);}
397 // The optional AUTOINCREMENT keyword
398 %type autoinc {int}
399 autoinc(X) ::= . {X = 0;}
400 autoinc(X) ::= AUTOINCR. {X = 1;}
402 // The next group of rules parses the arguments to a REFERENCES clause
403 // that determine if the referential integrity checking is deferred or
404 // or immediate and which determine what action to take if a ref-integ
405 // check fails.
407 %type refargs {int}
408 refargs(A) ::= . { A = OE_None*0x0101; /* EV: R-19803-45884 */}
409 refargs(A) ::= refargs(A) refarg(Y). { A = (A & ~Y.mask) | Y.value; }
410 %type refarg {struct {int value; int mask;}}
411 refarg(A) ::= MATCH nm. { A.value = 0; A.mask = 0x000000; }
412 refarg(A) ::= ON INSERT refact. { A.value = 0; A.mask = 0x000000; }
413 refarg(A) ::= ON DELETE refact(X). { A.value = X; A.mask = 0x0000ff; }
414 refarg(A) ::= ON UPDATE refact(X). { A.value = X<<8; A.mask = 0x00ff00; }
415 %type refact {int}
416 refact(A) ::= SET NULL. { A = OE_SetNull; /* EV: R-33326-45252 */}
417 refact(A) ::= SET DEFAULT. { A = OE_SetDflt; /* EV: R-33326-45252 */}
418 refact(A) ::= CASCADE. { A = OE_Cascade; /* EV: R-33326-45252 */}
419 refact(A) ::= RESTRICT. { A = OE_Restrict; /* EV: R-33326-45252 */}
420 refact(A) ::= NO ACTION. { A = OE_None; /* EV: R-33326-45252 */}
421 %type defer_subclause {int}
422 defer_subclause(A) ::= NOT DEFERRABLE init_deferred_pred_opt. {A = 0;}
423 defer_subclause(A) ::= DEFERRABLE init_deferred_pred_opt(X). {A = X;}
424 %type init_deferred_pred_opt {int}
425 init_deferred_pred_opt(A) ::= . {A = 0;}
426 init_deferred_pred_opt(A) ::= INITIALLY DEFERRED. {A = 1;}
427 init_deferred_pred_opt(A) ::= INITIALLY IMMEDIATE. {A = 0;}
429 conslist_opt(A) ::= . {A.n = 0; A.z = 0;}
430 conslist_opt(A) ::= COMMA(A) conslist.
431 conslist ::= conslist tconscomma tcons.
432 conslist ::= tcons.
433 tconscomma ::= COMMA. {pParse->constraintName.n = 0;}
434 tconscomma ::= .
435 tcons ::= CONSTRAINT nm(X). {pParse->constraintName = X;}
436 tcons ::= PRIMARY KEY LP sortlist(X) autoinc(I) RP onconf(R).
437 {sqlite3AddPrimaryKey(pParse,X,R,I,0);}
438 tcons ::= UNIQUE LP sortlist(X) RP onconf(R).
439 {sqlite3CreateIndex(pParse,0,0,0,X,R,0,0,0,0,
440 SQLITE_IDXTYPE_UNIQUE);}
441 tcons ::= CHECK LP(A) expr(E) RP(B) onconf.
442 {sqlite3AddCheckConstraint(pParse,E,A.z,B.z);}
443 tcons ::= FOREIGN KEY LP eidlist(FA) RP
444 REFERENCES nm(T) eidlist_opt(TA) refargs(R) defer_subclause_opt(D). {
445 sqlite3CreateForeignKey(pParse, FA, &T, TA, R);
446 sqlite3DeferForeignKey(pParse, D);
448 %type defer_subclause_opt {int}
449 defer_subclause_opt(A) ::= . {A = 0;}
450 defer_subclause_opt(A) ::= defer_subclause(A).
452 // The following is a non-standard extension that allows us to declare the
453 // default behavior when there is a constraint conflict.
455 %type onconf {int}
456 %type orconf {int}
457 %type resolvetype {int}
458 onconf(A) ::= . {A = OE_Default;}
459 onconf(A) ::= ON CONFLICT resolvetype(X). {A = X;}
460 orconf(A) ::= . {A = OE_Default;}
461 orconf(A) ::= OR resolvetype(X). {A = X;}
462 resolvetype(A) ::= raisetype(A).
463 resolvetype(A) ::= IGNORE. {A = OE_Ignore;}
464 resolvetype(A) ::= REPLACE. {A = OE_Replace;}
466 ////////////////////////// The DROP TABLE /////////////////////////////////////
468 cmd ::= DROP TABLE ifexists(E) fullname(X). {
469 sqlite3DropTable(pParse, X, 0, E);
471 %type ifexists {int}
472 ifexists(A) ::= IF EXISTS. {A = 1;}
473 ifexists(A) ::= . {A = 0;}
475 ///////////////////// The CREATE VIEW statement /////////////////////////////
477 %ifndef SQLITE_OMIT_VIEW
478 cmd ::= createkw(X) temp(T) VIEW ifnotexists(E) nm(Y) dbnm(Z) eidlist_opt(C)
479 AS select(S). {
480 sqlite3CreateView(pParse, &X, &Y, &Z, C, S, T, E);
482 cmd ::= DROP VIEW ifexists(E) fullname(X). {
483 sqlite3DropTable(pParse, X, 1, E);
485 %endif SQLITE_OMIT_VIEW
487 //////////////////////// The SELECT statement /////////////////////////////////
489 cmd ::= select(X). {
490 SelectDest dest = {SRT_Output, 0, 0, 0, 0, 0, 0};
491 sqlite3Select(pParse, X, &dest);
492 sqlite3SelectDelete(pParse->db, X);
495 %type select {Select*}
496 %destructor select {sqlite3SelectDelete(pParse->db, $$);}
497 %type selectnowith {Select*}
498 %destructor selectnowith {sqlite3SelectDelete(pParse->db, $$);}
499 %type oneselect {Select*}
500 %destructor oneselect {sqlite3SelectDelete(pParse->db, $$);}
502 %include {
504 ** For a compound SELECT statement, make sure p->pPrior->pNext==p for
505 ** all elements in the list. And make sure list length does not exceed
506 ** SQLITE_LIMIT_COMPOUND_SELECT.
508 static void parserDoubleLinkSelect(Parse *pParse, Select *p){
509 assert( p!=0 );
510 if( p->pPrior ){
511 Select *pNext = 0, *pLoop = p;
512 int mxSelect, cnt = 1;
513 while(1){
514 pLoop->pNext = pNext;
515 pLoop->selFlags |= SF_Compound;
516 pNext = pLoop;
517 pLoop = pLoop->pPrior;
518 if( pLoop==0 ) break;
519 cnt++;
520 if( pLoop->pOrderBy || pLoop->pLimit ){
521 sqlite3ErrorMsg(pParse,"%s clause should come after %s not before",
522 pLoop->pOrderBy!=0 ? "ORDER BY" : "LIMIT",
523 sqlite3SelectOpName(pNext->op));
524 break;
527 if( (p->selFlags & SF_MultiValue)==0 &&
528 (mxSelect = pParse->db->aLimit[SQLITE_LIMIT_COMPOUND_SELECT])>0 &&
529 cnt>mxSelect
531 sqlite3ErrorMsg(pParse, "too many terms in compound SELECT");
536 /* Attach a With object describing the WITH clause to a Select
537 ** object describing the query for which the WITH clause is a prefix.
539 static Select *attachWithToSelect(Parse *pParse, Select *pSelect, With *pWith){
540 if( pSelect ){
541 pSelect->pWith = pWith;
542 parserDoubleLinkSelect(pParse, pSelect);
543 }else{
544 sqlite3WithDelete(pParse->db, pWith);
546 return pSelect;
550 %ifndef SQLITE_OMIT_CTE
551 select(A) ::= WITH wqlist(W) selectnowith(X). {A = attachWithToSelect(pParse,X,W);}
552 select(A) ::= WITH RECURSIVE wqlist(W) selectnowith(X).
553 {A = attachWithToSelect(pParse,X,W);}
554 %endif /* SQLITE_OMIT_CTE */
555 select(A) ::= selectnowith(X). {
556 Select *p = X;
557 if( p ){
558 parserDoubleLinkSelect(pParse, p);
560 A = p; /*A-overwrites-X*/
563 selectnowith(A) ::= oneselect(A).
564 %ifndef SQLITE_OMIT_COMPOUND_SELECT
565 selectnowith(A) ::= selectnowith(A) multiselect_op(Y) oneselect(Z). {
566 Select *pRhs = Z;
567 Select *pLhs = A;
568 if( pRhs && pRhs->pPrior ){
569 SrcList *pFrom;
570 Token x;
571 x.n = 0;
572 parserDoubleLinkSelect(pParse, pRhs);
573 pFrom = sqlite3SrcListAppendFromTerm(pParse,0,0,0,&x,pRhs,0);
574 pRhs = sqlite3SelectNew(pParse,0,pFrom,0,0,0,0,0,0);
576 if( pRhs ){
577 pRhs->op = (u8)Y;
578 pRhs->pPrior = pLhs;
579 if( ALWAYS(pLhs) ) pLhs->selFlags &= ~SF_MultiValue;
580 pRhs->selFlags &= ~SF_MultiValue;
581 if( Y!=TK_ALL ) pParse->hasCompound = 1;
582 }else{
583 sqlite3SelectDelete(pParse->db, pLhs);
585 A = pRhs;
587 %type multiselect_op {int}
588 multiselect_op(A) ::= UNION(OP). {A = @OP; /*A-overwrites-OP*/}
589 multiselect_op(A) ::= UNION ALL. {A = TK_ALL;}
590 multiselect_op(A) ::= EXCEPT|INTERSECT(OP). {A = @OP; /*A-overwrites-OP*/}
591 %endif SQLITE_OMIT_COMPOUND_SELECT
593 oneselect(A) ::= SELECT distinct(D) selcollist(W) from(X) where_opt(Y)
594 groupby_opt(P) having_opt(Q)
595 orderby_opt(Z) limit_opt(L). {
596 A = sqlite3SelectNew(pParse,W,X,Y,P,Q,Z,D,L);
598 %ifndef SQLITE_OMIT_WINDOWFUNC
599 oneselect(A) ::= SELECT distinct(D) selcollist(W) from(X) where_opt(Y)
600 groupby_opt(P) having_opt(Q) window_clause(R)
601 orderby_opt(Z) limit_opt(L). {
602 A = sqlite3SelectNew(pParse,W,X,Y,P,Q,Z,D,L);
603 if( A ){
604 A->pWinDefn = R;
605 }else{
606 sqlite3WindowListDelete(pParse->db, R);
609 %endif
612 oneselect(A) ::= values(A).
614 %type values {Select*}
615 %destructor values {sqlite3SelectDelete(pParse->db, $$);}
616 values(A) ::= VALUES LP nexprlist(X) RP. {
617 A = sqlite3SelectNew(pParse,X,0,0,0,0,0,SF_Values,0);
619 values(A) ::= values(A) COMMA LP nexprlist(Y) RP. {
620 Select *pRight, *pLeft = A;
621 pRight = sqlite3SelectNew(pParse,Y,0,0,0,0,0,SF_Values|SF_MultiValue,0);
622 if( ALWAYS(pLeft) ) pLeft->selFlags &= ~SF_MultiValue;
623 if( pRight ){
624 pRight->op = TK_ALL;
625 pRight->pPrior = pLeft;
626 A = pRight;
627 }else{
628 A = pLeft;
632 // The "distinct" nonterminal is true (1) if the DISTINCT keyword is
633 // present and false (0) if it is not.
635 %type distinct {int}
636 distinct(A) ::= DISTINCT. {A = SF_Distinct;}
637 distinct(A) ::= ALL. {A = SF_All;}
638 distinct(A) ::= . {A = 0;}
640 // selcollist is a list of expressions that are to become the return
641 // values of the SELECT statement. The "*" in statements like
642 // "SELECT * FROM ..." is encoded as a special expression with an
643 // opcode of TK_ASTERISK.
645 %type selcollist {ExprList*}
646 %destructor selcollist {sqlite3ExprListDelete(pParse->db, $$);}
647 %type sclp {ExprList*}
648 %destructor sclp {sqlite3ExprListDelete(pParse->db, $$);}
649 sclp(A) ::= selcollist(A) COMMA.
650 sclp(A) ::= . {A = 0;}
651 selcollist(A) ::= sclp(A) scanpt(B) expr(X) scanpt(Z) as(Y). {
652 A = sqlite3ExprListAppend(pParse, A, X);
653 if( Y.n>0 ) sqlite3ExprListSetName(pParse, A, &Y, 1);
654 sqlite3ExprListSetSpan(pParse,A,B,Z);
656 selcollist(A) ::= sclp(A) scanpt STAR. {
657 Expr *p = sqlite3Expr(pParse->db, TK_ASTERISK, 0);
658 A = sqlite3ExprListAppend(pParse, A, p);
660 selcollist(A) ::= sclp(A) scanpt nm(X) DOT STAR. {
661 Expr *pRight = sqlite3PExpr(pParse, TK_ASTERISK, 0, 0);
662 Expr *pLeft = tokenExpr(pParse, TK_ID, X);
663 Expr *pDot = sqlite3PExpr(pParse, TK_DOT, pLeft, pRight);
664 A = sqlite3ExprListAppend(pParse,A, pDot);
667 // An option "AS <id>" phrase that can follow one of the expressions that
668 // define the result set, or one of the tables in the FROM clause.
670 %type as {Token}
671 as(X) ::= AS nm(Y). {X = Y;}
672 as(X) ::= ids(X).
673 as(X) ::= . {X.n = 0; X.z = 0;}
676 %type seltablist {SrcList*}
677 %destructor seltablist {sqlite3SrcListDelete(pParse->db, $$);}
678 %type stl_prefix {SrcList*}
679 %destructor stl_prefix {sqlite3SrcListDelete(pParse->db, $$);}
680 %type from {SrcList*}
681 %destructor from {sqlite3SrcListDelete(pParse->db, $$);}
683 // A complete FROM clause.
685 from(A) ::= . {A = 0;}
686 from(A) ::= FROM seltablist(X). {
687 A = X;
688 sqlite3SrcListShiftJoinType(pParse,A);
691 // "seltablist" is a "Select Table List" - the content of the FROM clause
692 // in a SELECT statement. "stl_prefix" is a prefix of this list.
694 stl_prefix(A) ::= seltablist(A) joinop(Y). {
695 if( ALWAYS(A && A->nSrc>0) ) A->a[A->nSrc-1].fg.jointype = (u8)Y;
697 stl_prefix(A) ::= . {A = 0;}
698 seltablist(A) ::= stl_prefix(A) nm(Y) dbnm(D) as(Z) on_using(N). {
699 A = sqlite3SrcListAppendFromTerm(pParse,A,&Y,&D,&Z,0,&N);
701 seltablist(A) ::= stl_prefix(A) nm(Y) dbnm(D) as(Z) indexed_by(I) on_using(N). {
702 A = sqlite3SrcListAppendFromTerm(pParse,A,&Y,&D,&Z,0,&N);
703 sqlite3SrcListIndexedBy(pParse, A, &I);
705 seltablist(A) ::= stl_prefix(A) nm(Y) dbnm(D) LP exprlist(E) RP as(Z) on_using(N). {
706 A = sqlite3SrcListAppendFromTerm(pParse,A,&Y,&D,&Z,0,&N);
707 sqlite3SrcListFuncArgs(pParse, A, E);
709 %ifndef SQLITE_OMIT_SUBQUERY
710 seltablist(A) ::= stl_prefix(A) LP select(S) RP as(Z) on_using(N). {
711 A = sqlite3SrcListAppendFromTerm(pParse,A,0,0,&Z,S,&N);
713 seltablist(A) ::= stl_prefix(A) LP seltablist(F) RP as(Z) on_using(N). {
714 if( A==0 && Z.n==0 && N.pOn==0 && N.pUsing==0 ){
715 A = F;
716 }else if( F->nSrc==1 ){
717 A = sqlite3SrcListAppendFromTerm(pParse,A,0,0,&Z,0,&N);
718 if( A ){
719 SrcItem *pNew = &A->a[A->nSrc-1];
720 SrcItem *pOld = F->a;
721 pNew->zName = pOld->zName;
722 pNew->zDatabase = pOld->zDatabase;
723 pNew->pSelect = pOld->pSelect;
724 if( pNew->pSelect && (pNew->pSelect->selFlags & SF_NestedFrom)!=0 ){
725 pNew->fg.isNestedFrom = 1;
727 if( pOld->fg.isTabFunc ){
728 pNew->u1.pFuncArg = pOld->u1.pFuncArg;
729 pOld->u1.pFuncArg = 0;
730 pOld->fg.isTabFunc = 0;
731 pNew->fg.isTabFunc = 1;
733 pOld->zName = pOld->zDatabase = 0;
734 pOld->pSelect = 0;
736 sqlite3SrcListDelete(pParse->db, F);
737 }else{
738 Select *pSubquery;
739 sqlite3SrcListShiftJoinType(pParse,F);
740 pSubquery = sqlite3SelectNew(pParse,0,F,0,0,0,0,SF_NestedFrom,0);
741 A = sqlite3SrcListAppendFromTerm(pParse,A,0,0,&Z,pSubquery,&N);
744 %endif SQLITE_OMIT_SUBQUERY
746 %type dbnm {Token}
747 dbnm(A) ::= . {A.z=0; A.n=0;}
748 dbnm(A) ::= DOT nm(X). {A = X;}
750 %type fullname {SrcList*}
751 %destructor fullname {sqlite3SrcListDelete(pParse->db, $$);}
752 fullname(A) ::= nm(X). {
753 A = sqlite3SrcListAppend(pParse,0,&X,0);
754 if( IN_RENAME_OBJECT && A ) sqlite3RenameTokenMap(pParse, A->a[0].zName, &X);
756 fullname(A) ::= nm(X) DOT nm(Y). {
757 A = sqlite3SrcListAppend(pParse,0,&X,&Y);
758 if( IN_RENAME_OBJECT && A ) sqlite3RenameTokenMap(pParse, A->a[0].zName, &Y);
761 %type xfullname {SrcList*}
762 %destructor xfullname {sqlite3SrcListDelete(pParse->db, $$);}
763 xfullname(A) ::= nm(X).
764 {A = sqlite3SrcListAppend(pParse,0,&X,0); /*A-overwrites-X*/}
765 xfullname(A) ::= nm(X) DOT nm(Y).
766 {A = sqlite3SrcListAppend(pParse,0,&X,&Y); /*A-overwrites-X*/}
767 xfullname(A) ::= nm(X) DOT nm(Y) AS nm(Z). {
768 A = sqlite3SrcListAppend(pParse,0,&X,&Y); /*A-overwrites-X*/
769 if( A ) A->a[0].zAlias = sqlite3NameFromToken(pParse->db, &Z);
771 xfullname(A) ::= nm(X) AS nm(Z). {
772 A = sqlite3SrcListAppend(pParse,0,&X,0); /*A-overwrites-X*/
773 if( A ) A->a[0].zAlias = sqlite3NameFromToken(pParse->db, &Z);
776 %type joinop {int}
777 joinop(X) ::= COMMA|JOIN. { X = JT_INNER; }
778 joinop(X) ::= JOIN_KW(A) JOIN.
779 {X = sqlite3JoinType(pParse,&A,0,0); /*X-overwrites-A*/}
780 joinop(X) ::= JOIN_KW(A) nm(B) JOIN.
781 {X = sqlite3JoinType(pParse,&A,&B,0); /*X-overwrites-A*/}
782 joinop(X) ::= JOIN_KW(A) nm(B) nm(C) JOIN.
783 {X = sqlite3JoinType(pParse,&A,&B,&C);/*X-overwrites-A*/}
785 // There is a parsing abiguity in an upsert statement that uses a
786 // SELECT on the RHS of a the INSERT:
788 // INSERT INTO tab SELECT * FROM aaa JOIN bbb ON CONFLICT ...
789 // here ----^^
791 // When the ON token is encountered, the parser does not know if it is
792 // the beginning of an ON CONFLICT clause, or the beginning of an ON
793 // clause associated with the JOIN. The conflict is resolved in favor
794 // of the JOIN. If an ON CONFLICT clause is intended, insert a dummy
795 // WHERE clause in between, like this:
797 // INSERT INTO tab SELECT * FROM aaa JOIN bbb WHERE true ON CONFLICT ...
799 // The [AND] and [OR] precedence marks in the rules for on_using cause the
800 // ON in this context to always be interpreted as belonging to the JOIN.
802 %type on_using {OnOrUsing}
803 //%destructor on_using {sqlite3ClearOnOrUsing(pParse->db, &$$);}
804 on_using(N) ::= ON expr(E). {N.pOn = E; N.pUsing = 0;}
805 on_using(N) ::= USING LP idlist(L) RP. {N.pOn = 0; N.pUsing = L;}
806 on_using(N) ::= . [OR] {N.pOn = 0; N.pUsing = 0;}
808 // Note that this block abuses the Token type just a little. If there is
809 // no "INDEXED BY" clause, the returned token is empty (z==0 && n==0). If
810 // there is an INDEXED BY clause, then the token is populated as per normal,
811 // with z pointing to the token data and n containing the number of bytes
812 // in the token.
814 // If there is a "NOT INDEXED" clause, then (z==0 && n==1), which is
815 // normally illegal. The sqlite3SrcListIndexedBy() function
816 // recognizes and interprets this as a special case.
818 %type indexed_opt {Token}
819 %type indexed_by {Token}
820 indexed_opt(A) ::= . {A.z=0; A.n=0;}
821 indexed_opt(A) ::= indexed_by(A).
822 indexed_by(A) ::= INDEXED BY nm(X). {A = X;}
823 indexed_by(A) ::= NOT INDEXED. {A.z=0; A.n=1;}
825 %type orderby_opt {ExprList*}
826 %destructor orderby_opt {sqlite3ExprListDelete(pParse->db, $$);}
828 // the sortlist non-terminal stores a list of expression where each
829 // expression is optionally followed by ASC or DESC to indicate the
830 // sort order.
832 %type sortlist {ExprList*}
833 %destructor sortlist {sqlite3ExprListDelete(pParse->db, $$);}
835 orderby_opt(A) ::= . {A = 0;}
836 orderby_opt(A) ::= ORDER BY sortlist(X). {A = X;}
837 sortlist(A) ::= sortlist(A) COMMA expr(Y) sortorder(Z) nulls(X). {
838 A = sqlite3ExprListAppend(pParse,A,Y);
839 sqlite3ExprListSetSortOrder(A,Z,X);
841 sortlist(A) ::= expr(Y) sortorder(Z) nulls(X). {
842 A = sqlite3ExprListAppend(pParse,0,Y); /*A-overwrites-Y*/
843 sqlite3ExprListSetSortOrder(A,Z,X);
846 %type sortorder {int}
848 sortorder(A) ::= ASC. {A = SQLITE_SO_ASC;}
849 sortorder(A) ::= DESC. {A = SQLITE_SO_DESC;}
850 sortorder(A) ::= . {A = SQLITE_SO_UNDEFINED;}
852 %type nulls {int}
853 nulls(A) ::= NULLS FIRST. {A = SQLITE_SO_ASC;}
854 nulls(A) ::= NULLS LAST. {A = SQLITE_SO_DESC;}
855 nulls(A) ::= . {A = SQLITE_SO_UNDEFINED;}
857 %type groupby_opt {ExprList*}
858 %destructor groupby_opt {sqlite3ExprListDelete(pParse->db, $$);}
859 groupby_opt(A) ::= . {A = 0;}
860 groupby_opt(A) ::= GROUP BY nexprlist(X). {A = X;}
862 %type having_opt {Expr*}
863 %destructor having_opt {sqlite3ExprDelete(pParse->db, $$);}
864 having_opt(A) ::= . {A = 0;}
865 having_opt(A) ::= HAVING expr(X). {A = X;}
867 %type limit_opt {Expr*}
869 // The destructor for limit_opt will never fire in the current grammar.
870 // The limit_opt non-terminal only occurs at the end of a single production
871 // rule for SELECT statements. As soon as the rule that create the
872 // limit_opt non-terminal reduces, the SELECT statement rule will also
873 // reduce. So there is never a limit_opt non-terminal on the stack
874 // except as a transient. So there is never anything to destroy.
876 //%destructor limit_opt {sqlite3ExprDelete(pParse->db, $$);}
877 limit_opt(A) ::= . {A = 0;}
878 limit_opt(A) ::= LIMIT expr(X).
879 {A = sqlite3PExpr(pParse,TK_LIMIT,X,0);}
880 limit_opt(A) ::= LIMIT expr(X) OFFSET expr(Y).
881 {A = sqlite3PExpr(pParse,TK_LIMIT,X,Y);}
882 limit_opt(A) ::= LIMIT expr(X) COMMA expr(Y).
883 {A = sqlite3PExpr(pParse,TK_LIMIT,Y,X);}
885 /////////////////////////// The DELETE statement /////////////////////////////
887 %if SQLITE_ENABLE_UPDATE_DELETE_LIMIT || SQLITE_UDL_CAPABLE_PARSER
888 cmd ::= with DELETE FROM xfullname(X) indexed_opt(I) where_opt_ret(W)
889 orderby_opt(O) limit_opt(L). {
890 sqlite3SrcListIndexedBy(pParse, X, &I);
891 #ifndef SQLITE_ENABLE_UPDATE_DELETE_LIMIT
892 if( O || L ){
893 updateDeleteLimitError(pParse,O,L);
894 O = 0;
895 L = 0;
897 #endif
898 sqlite3DeleteFrom(pParse,X,W,O,L);
900 %else
901 cmd ::= with DELETE FROM xfullname(X) indexed_opt(I) where_opt_ret(W). {
902 sqlite3SrcListIndexedBy(pParse, X, &I);
903 sqlite3DeleteFrom(pParse,X,W,0,0);
905 %endif
907 %type where_opt {Expr*}
908 %destructor where_opt {sqlite3ExprDelete(pParse->db, $$);}
909 %type where_opt_ret {Expr*}
910 %destructor where_opt_ret {sqlite3ExprDelete(pParse->db, $$);}
912 where_opt(A) ::= . {A = 0;}
913 where_opt(A) ::= WHERE expr(X). {A = X;}
914 where_opt_ret(A) ::= . {A = 0;}
915 where_opt_ret(A) ::= WHERE expr(X). {A = X;}
916 where_opt_ret(A) ::= RETURNING selcollist(X).
917 {sqlite3AddReturning(pParse,X); A = 0;}
918 where_opt_ret(A) ::= WHERE expr(X) RETURNING selcollist(Y).
919 {sqlite3AddReturning(pParse,Y); A = X;}
921 ////////////////////////// The UPDATE command ////////////////////////////////
923 %if SQLITE_ENABLE_UPDATE_DELETE_LIMIT || SQLITE_UDL_CAPABLE_PARSER
924 cmd ::= with UPDATE orconf(R) xfullname(X) indexed_opt(I) SET setlist(Y) from(F)
925 where_opt_ret(W) orderby_opt(O) limit_opt(L). {
926 sqlite3SrcListIndexedBy(pParse, X, &I);
927 if( F ){
928 SrcList *pFromClause = F;
929 if( pFromClause->nSrc>1 ){
930 Select *pSubquery;
931 Token as;
932 pSubquery = sqlite3SelectNew(pParse,0,pFromClause,0,0,0,0,SF_NestedFrom,0);
933 as.n = 0;
934 as.z = 0;
935 pFromClause = sqlite3SrcListAppendFromTerm(pParse,0,0,0,&as,pSubquery,0);
937 X = sqlite3SrcListAppendList(pParse, X, pFromClause);
939 sqlite3ExprListCheckLength(pParse,Y,"set list");
940 #ifndef SQLITE_ENABLE_UPDATE_DELETE_LIMIT
941 if( O || L ){
942 updateDeleteLimitError(pParse,O,L);
943 O = 0;
944 L = 0;
946 #endif
947 sqlite3Update(pParse,X,Y,W,R,O,L,0);
949 %else
950 cmd ::= with UPDATE orconf(R) xfullname(X) indexed_opt(I) SET setlist(Y) from(F)
951 where_opt_ret(W). {
952 sqlite3SrcListIndexedBy(pParse, X, &I);
953 sqlite3ExprListCheckLength(pParse,Y,"set list");
954 if( F ){
955 SrcList *pFromClause = F;
956 if( pFromClause->nSrc>1 ){
957 Select *pSubquery;
958 Token as;
959 pSubquery = sqlite3SelectNew(pParse,0,pFromClause,0,0,0,0,SF_NestedFrom,0);
960 as.n = 0;
961 as.z = 0;
962 pFromClause = sqlite3SrcListAppendFromTerm(pParse,0,0,0,&as,pSubquery,0);
964 X = sqlite3SrcListAppendList(pParse, X, pFromClause);
966 sqlite3Update(pParse,X,Y,W,R,0,0,0);
968 %endif
972 %type setlist {ExprList*}
973 %destructor setlist {sqlite3ExprListDelete(pParse->db, $$);}
975 setlist(A) ::= setlist(A) COMMA nm(X) EQ expr(Y). {
976 A = sqlite3ExprListAppend(pParse, A, Y);
977 sqlite3ExprListSetName(pParse, A, &X, 1);
979 setlist(A) ::= setlist(A) COMMA LP idlist(X) RP EQ expr(Y). {
980 A = sqlite3ExprListAppendVector(pParse, A, X, Y);
982 setlist(A) ::= nm(X) EQ expr(Y). {
983 A = sqlite3ExprListAppend(pParse, 0, Y);
984 sqlite3ExprListSetName(pParse, A, &X, 1);
986 setlist(A) ::= LP idlist(X) RP EQ expr(Y). {
987 A = sqlite3ExprListAppendVector(pParse, 0, X, Y);
990 ////////////////////////// The INSERT command /////////////////////////////////
992 cmd ::= with insert_cmd(R) INTO xfullname(X) idlist_opt(F) select(S)
993 upsert(U). {
994 sqlite3Insert(pParse, X, S, F, R, U);
996 cmd ::= with insert_cmd(R) INTO xfullname(X) idlist_opt(F) DEFAULT VALUES returning.
998 sqlite3Insert(pParse, X, 0, F, R, 0);
1001 %type upsert {Upsert*}
1003 // Because upsert only occurs at the tip end of the INSERT rule for cmd,
1004 // there is never a case where the value of the upsert pointer will not
1005 // be destroyed by the cmd action. So comment-out the destructor to
1006 // avoid unreachable code.
1007 //%destructor upsert {sqlite3UpsertDelete(pParse->db,$$);}
1008 upsert(A) ::= . { A = 0; }
1009 upsert(A) ::= RETURNING selcollist(X). { A = 0; sqlite3AddReturning(pParse,X); }
1010 upsert(A) ::= ON CONFLICT LP sortlist(T) RP where_opt(TW)
1011 DO UPDATE SET setlist(Z) where_opt(W) upsert(N).
1012 { A = sqlite3UpsertNew(pParse->db,T,TW,Z,W,N);}
1013 upsert(A) ::= ON CONFLICT LP sortlist(T) RP where_opt(TW) DO NOTHING upsert(N).
1014 { A = sqlite3UpsertNew(pParse->db,T,TW,0,0,N); }
1015 upsert(A) ::= ON CONFLICT DO NOTHING returning.
1016 { A = sqlite3UpsertNew(pParse->db,0,0,0,0,0); }
1017 upsert(A) ::= ON CONFLICT DO UPDATE SET setlist(Z) where_opt(W) returning.
1018 { A = sqlite3UpsertNew(pParse->db,0,0,Z,W,0);}
1020 returning ::= RETURNING selcollist(X). {sqlite3AddReturning(pParse,X);}
1021 returning ::= .
1023 %type insert_cmd {int}
1024 insert_cmd(A) ::= INSERT orconf(R). {A = R;}
1025 insert_cmd(A) ::= REPLACE. {A = OE_Replace;}
1027 %type idlist_opt {IdList*}
1028 %destructor idlist_opt {sqlite3IdListDelete(pParse->db, $$);}
1029 %type idlist {IdList*}
1030 %destructor idlist {sqlite3IdListDelete(pParse->db, $$);}
1032 idlist_opt(A) ::= . {A = 0;}
1033 idlist_opt(A) ::= LP idlist(X) RP. {A = X;}
1034 idlist(A) ::= idlist(A) COMMA nm(Y).
1035 {A = sqlite3IdListAppend(pParse,A,&Y);}
1036 idlist(A) ::= nm(Y).
1037 {A = sqlite3IdListAppend(pParse,0,&Y); /*A-overwrites-Y*/}
1039 /////////////////////////// Expression Processing /////////////////////////////
1042 %type expr {Expr*}
1043 %destructor expr {sqlite3ExprDelete(pParse->db, $$);}
1044 %type term {Expr*}
1045 %destructor term {sqlite3ExprDelete(pParse->db, $$);}
1047 %include {
1049 /* Construct a new Expr object from a single token */
1050 static Expr *tokenExpr(Parse *pParse, int op, Token t){
1051 Expr *p = sqlite3DbMallocRawNN(pParse->db, sizeof(Expr)+t.n+1);
1052 if( p ){
1053 /* memset(p, 0, sizeof(Expr)); */
1054 p->op = (u8)op;
1055 p->affExpr = 0;
1056 p->flags = EP_Leaf;
1057 ExprClearVVAProperties(p);
1058 /* p->iAgg = -1; // Not required */
1059 p->pLeft = p->pRight = 0;
1060 p->pAggInfo = 0;
1061 memset(&p->x, 0, sizeof(p->x));
1062 memset(&p->y, 0, sizeof(p->y));
1063 p->op2 = 0;
1064 p->iTable = 0;
1065 p->iColumn = 0;
1066 p->u.zToken = (char*)&p[1];
1067 memcpy(p->u.zToken, t.z, t.n);
1068 p->u.zToken[t.n] = 0;
1069 p->w.iOfst = (int)(t.z - pParse->zTail);
1070 if( sqlite3Isquote(p->u.zToken[0]) ){
1071 sqlite3DequoteExpr(p);
1073 #if SQLITE_MAX_EXPR_DEPTH>0
1074 p->nHeight = 1;
1075 #endif
1076 if( IN_RENAME_OBJECT ){
1077 return (Expr*)sqlite3RenameTokenMap(pParse, (void*)p, &t);
1080 return p;
1085 expr(A) ::= term(A).
1086 expr(A) ::= LP expr(X) RP. {A = X;}
1087 expr(A) ::= id(X). {A=tokenExpr(pParse,TK_ID,X); /*A-overwrites-X*/}
1088 expr(A) ::= JOIN_KW(X). {A=tokenExpr(pParse,TK_ID,X); /*A-overwrites-X*/}
1089 expr(A) ::= nm(X) DOT nm(Y). {
1090 Expr *temp1 = tokenExpr(pParse,TK_ID,X);
1091 Expr *temp2 = tokenExpr(pParse,TK_ID,Y);
1092 A = sqlite3PExpr(pParse, TK_DOT, temp1, temp2);
1094 expr(A) ::= nm(X) DOT nm(Y) DOT nm(Z). {
1095 Expr *temp1 = tokenExpr(pParse,TK_ID,X);
1096 Expr *temp2 = tokenExpr(pParse,TK_ID,Y);
1097 Expr *temp3 = tokenExpr(pParse,TK_ID,Z);
1098 Expr *temp4 = sqlite3PExpr(pParse, TK_DOT, temp2, temp3);
1099 if( IN_RENAME_OBJECT ){
1100 sqlite3RenameTokenRemap(pParse, 0, temp1);
1102 A = sqlite3PExpr(pParse, TK_DOT, temp1, temp4);
1104 term(A) ::= NULL|FLOAT|BLOB(X). {A=tokenExpr(pParse,@X,X); /*A-overwrites-X*/}
1105 term(A) ::= STRING(X). {A=tokenExpr(pParse,@X,X); /*A-overwrites-X*/}
1106 term(A) ::= INTEGER(X). {
1107 A = sqlite3ExprAlloc(pParse->db, TK_INTEGER, &X, 1);
1108 if( A ) A->w.iOfst = (int)(X.z - pParse->zTail);
1110 expr(A) ::= VARIABLE(X). {
1111 if( !(X.z[0]=='#' && sqlite3Isdigit(X.z[1])) ){
1112 u32 n = X.n;
1113 A = tokenExpr(pParse, TK_VARIABLE, X);
1114 sqlite3ExprAssignVarNumber(pParse, A, n);
1115 }else{
1116 /* When doing a nested parse, one can include terms in an expression
1117 ** that look like this: #1 #2 ... These terms refer to registers
1118 ** in the virtual machine. #N is the N-th register. */
1119 Token t = X; /*A-overwrites-X*/
1120 assert( t.n>=2 );
1121 if( pParse->nested==0 ){
1122 sqlite3ErrorMsg(pParse, "near \"%T\": syntax error", &t);
1123 A = 0;
1124 }else{
1125 A = sqlite3PExpr(pParse, TK_REGISTER, 0, 0);
1126 if( A ) sqlite3GetInt32(&t.z[1], &A->iTable);
1130 expr(A) ::= expr(A) COLLATE ids(C). {
1131 A = sqlite3ExprAddCollateToken(pParse, A, &C, 1);
1133 %ifndef SQLITE_OMIT_CAST
1134 expr(A) ::= CAST LP expr(E) AS typetoken(T) RP. {
1135 A = sqlite3ExprAlloc(pParse->db, TK_CAST, &T, 1);
1136 sqlite3ExprAttachSubtrees(pParse->db, A, E, 0);
1138 %endif SQLITE_OMIT_CAST
1141 expr(A) ::= id(X) LP distinct(D) exprlist(Y) RP. {
1142 A = sqlite3ExprFunction(pParse, Y, &X, D);
1144 expr(A) ::= id(X) LP STAR RP. {
1145 A = sqlite3ExprFunction(pParse, 0, &X, 0);
1148 %ifndef SQLITE_OMIT_WINDOWFUNC
1149 expr(A) ::= id(X) LP distinct(D) exprlist(Y) RP filter_over(Z). {
1150 A = sqlite3ExprFunction(pParse, Y, &X, D);
1151 sqlite3WindowAttach(pParse, A, Z);
1153 expr(A) ::= id(X) LP STAR RP filter_over(Z). {
1154 A = sqlite3ExprFunction(pParse, 0, &X, 0);
1155 sqlite3WindowAttach(pParse, A, Z);
1157 %endif
1159 term(A) ::= CTIME_KW(OP). {
1160 A = sqlite3ExprFunction(pParse, 0, &OP, 0);
1163 expr(A) ::= LP nexprlist(X) COMMA expr(Y) RP. {
1164 ExprList *pList = sqlite3ExprListAppend(pParse, X, Y);
1165 A = sqlite3PExpr(pParse, TK_VECTOR, 0, 0);
1166 if( A ){
1167 A->x.pList = pList;
1168 if( ALWAYS(pList->nExpr) ){
1169 A->flags |= pList->a[0].pExpr->flags & EP_Propagate;
1171 }else{
1172 sqlite3ExprListDelete(pParse->db, pList);
1176 expr(A) ::= expr(A) AND expr(Y). {A=sqlite3ExprAnd(pParse,A,Y);}
1177 expr(A) ::= expr(A) OR(OP) expr(Y). {A=sqlite3PExpr(pParse,@OP,A,Y);}
1178 expr(A) ::= expr(A) LT|GT|GE|LE(OP) expr(Y).
1179 {A=sqlite3PExpr(pParse,@OP,A,Y);}
1180 expr(A) ::= expr(A) EQ|NE(OP) expr(Y). {A=sqlite3PExpr(pParse,@OP,A,Y);}
1181 expr(A) ::= expr(A) BITAND|BITOR|LSHIFT|RSHIFT(OP) expr(Y).
1182 {A=sqlite3PExpr(pParse,@OP,A,Y);}
1183 expr(A) ::= expr(A) PLUS|MINUS(OP) expr(Y).
1184 {A=sqlite3PExpr(pParse,@OP,A,Y);}
1185 expr(A) ::= expr(A) STAR|SLASH|REM(OP) expr(Y).
1186 {A=sqlite3PExpr(pParse,@OP,A,Y);}
1187 expr(A) ::= expr(A) CONCAT(OP) expr(Y). {A=sqlite3PExpr(pParse,@OP,A,Y);}
1188 %type likeop {Token}
1189 likeop(A) ::= LIKE_KW|MATCH(A).
1190 likeop(A) ::= NOT LIKE_KW|MATCH(X). {A=X; A.n|=0x80000000; /*A-overwrite-X*/}
1191 expr(A) ::= expr(A) likeop(OP) expr(Y). [LIKE_KW] {
1192 ExprList *pList;
1193 int bNot = OP.n & 0x80000000;
1194 OP.n &= 0x7fffffff;
1195 pList = sqlite3ExprListAppend(pParse,0, Y);
1196 pList = sqlite3ExprListAppend(pParse,pList, A);
1197 A = sqlite3ExprFunction(pParse, pList, &OP, 0);
1198 if( bNot ) A = sqlite3PExpr(pParse, TK_NOT, A, 0);
1199 if( A ) A->flags |= EP_InfixFunc;
1201 expr(A) ::= expr(A) likeop(OP) expr(Y) ESCAPE expr(E). [LIKE_KW] {
1202 ExprList *pList;
1203 int bNot = OP.n & 0x80000000;
1204 OP.n &= 0x7fffffff;
1205 pList = sqlite3ExprListAppend(pParse,0, Y);
1206 pList = sqlite3ExprListAppend(pParse,pList, A);
1207 pList = sqlite3ExprListAppend(pParse,pList, E);
1208 A = sqlite3ExprFunction(pParse, pList, &OP, 0);
1209 if( bNot ) A = sqlite3PExpr(pParse, TK_NOT, A, 0);
1210 if( A ) A->flags |= EP_InfixFunc;
1213 expr(A) ::= expr(A) ISNULL|NOTNULL(E). {A = sqlite3PExpr(pParse,@E,A,0);}
1214 expr(A) ::= expr(A) NOT NULL. {A = sqlite3PExpr(pParse,TK_NOTNULL,A,0);}
1216 %include {
1217 /* A routine to convert a binary TK_IS or TK_ISNOT expression into a
1218 ** unary TK_ISNULL or TK_NOTNULL expression. */
1219 static void binaryToUnaryIfNull(Parse *pParse, Expr *pY, Expr *pA, int op){
1220 sqlite3 *db = pParse->db;
1221 if( pA && pY && pY->op==TK_NULL && !IN_RENAME_OBJECT ){
1222 pA->op = (u8)op;
1223 sqlite3ExprDelete(db, pA->pRight);
1224 pA->pRight = 0;
1229 // expr1 IS expr2
1230 // expr1 IS NOT expr2
1232 // If expr2 is NULL then code as TK_ISNULL or TK_NOTNULL. If expr2
1233 // is any other expression, code as TK_IS or TK_ISNOT.
1235 expr(A) ::= expr(A) IS expr(Y). {
1236 A = sqlite3PExpr(pParse,TK_IS,A,Y);
1237 binaryToUnaryIfNull(pParse, Y, A, TK_ISNULL);
1239 expr(A) ::= expr(A) IS NOT expr(Y). {
1240 A = sqlite3PExpr(pParse,TK_ISNOT,A,Y);
1241 binaryToUnaryIfNull(pParse, Y, A, TK_NOTNULL);
1243 expr(A) ::= expr(A) IS NOT DISTINCT FROM expr(Y). {
1244 A = sqlite3PExpr(pParse,TK_IS,A,Y);
1245 binaryToUnaryIfNull(pParse, Y, A, TK_ISNULL);
1247 expr(A) ::= expr(A) IS DISTINCT FROM expr(Y). {
1248 A = sqlite3PExpr(pParse,TK_ISNOT,A,Y);
1249 binaryToUnaryIfNull(pParse, Y, A, TK_NOTNULL);
1252 expr(A) ::= NOT(B) expr(X).
1253 {A = sqlite3PExpr(pParse, @B, X, 0);/*A-overwrites-B*/}
1254 expr(A) ::= BITNOT(B) expr(X).
1255 {A = sqlite3PExpr(pParse, @B, X, 0);/*A-overwrites-B*/}
1256 expr(A) ::= PLUS|MINUS(B) expr(X). [BITNOT] {
1257 A = sqlite3PExpr(pParse, @B==TK_PLUS ? TK_UPLUS : TK_UMINUS, X, 0);
1258 /*A-overwrites-B*/
1261 expr(A) ::= expr(B) PTR(C) expr(D). {
1262 ExprList *pList = sqlite3ExprListAppend(pParse, 0, B);
1263 pList = sqlite3ExprListAppend(pParse, pList, D);
1264 A = sqlite3ExprFunction(pParse, pList, &C, 0);
1267 %type between_op {int}
1268 between_op(A) ::= BETWEEN. {A = 0;}
1269 between_op(A) ::= NOT BETWEEN. {A = 1;}
1270 expr(A) ::= expr(A) between_op(N) expr(X) AND expr(Y). [BETWEEN] {
1271 ExprList *pList = sqlite3ExprListAppend(pParse,0, X);
1272 pList = sqlite3ExprListAppend(pParse,pList, Y);
1273 A = sqlite3PExpr(pParse, TK_BETWEEN, A, 0);
1274 if( A ){
1275 A->x.pList = pList;
1276 }else{
1277 sqlite3ExprListDelete(pParse->db, pList);
1279 if( N ) A = sqlite3PExpr(pParse, TK_NOT, A, 0);
1281 %ifndef SQLITE_OMIT_SUBQUERY
1282 %type in_op {int}
1283 in_op(A) ::= IN. {A = 0;}
1284 in_op(A) ::= NOT IN. {A = 1;}
1285 expr(A) ::= expr(A) in_op(N) LP exprlist(Y) RP. [IN] {
1286 if( Y==0 ){
1287 /* Expressions of the form
1289 ** expr1 IN ()
1290 ** expr1 NOT IN ()
1292 ** simplify to constants 0 (false) and 1 (true), respectively,
1293 ** regardless of the value of expr1.
1295 sqlite3ExprUnmapAndDelete(pParse, A);
1296 A = sqlite3Expr(pParse->db, TK_STRING, N ? "true" : "false");
1297 if( A ) sqlite3ExprIdToTrueFalse(A);
1298 }else{
1299 Expr *pRHS = Y->a[0].pExpr;
1300 if( Y->nExpr==1 && sqlite3ExprIsConstant(pRHS) && A->op!=TK_VECTOR ){
1301 Y->a[0].pExpr = 0;
1302 sqlite3ExprListDelete(pParse->db, Y);
1303 pRHS = sqlite3PExpr(pParse, TK_UPLUS, pRHS, 0);
1304 A = sqlite3PExpr(pParse, TK_EQ, A, pRHS);
1305 }else if( Y->nExpr==1 && pRHS->op==TK_SELECT ){
1306 A = sqlite3PExpr(pParse, TK_IN, A, 0);
1307 sqlite3PExprAddSelect(pParse, A, pRHS->x.pSelect);
1308 pRHS->x.pSelect = 0;
1309 sqlite3ExprListDelete(pParse->db, Y);
1310 }else{
1311 A = sqlite3PExpr(pParse, TK_IN, A, 0);
1312 if( A==0 ){
1313 sqlite3ExprListDelete(pParse->db, Y);
1314 }else if( A->pLeft->op==TK_VECTOR ){
1315 int nExpr = A->pLeft->x.pList->nExpr;
1316 Select *pSelectRHS = sqlite3ExprListToValues(pParse, nExpr, Y);
1317 if( pSelectRHS ){
1318 parserDoubleLinkSelect(pParse, pSelectRHS);
1319 sqlite3PExprAddSelect(pParse, A, pSelectRHS);
1321 }else{
1322 A->x.pList = Y;
1323 sqlite3ExprSetHeightAndFlags(pParse, A);
1326 if( N ) A = sqlite3PExpr(pParse, TK_NOT, A, 0);
1329 expr(A) ::= LP select(X) RP. {
1330 A = sqlite3PExpr(pParse, TK_SELECT, 0, 0);
1331 sqlite3PExprAddSelect(pParse, A, X);
1333 expr(A) ::= expr(A) in_op(N) LP select(Y) RP. [IN] {
1334 A = sqlite3PExpr(pParse, TK_IN, A, 0);
1335 sqlite3PExprAddSelect(pParse, A, Y);
1336 if( N ) A = sqlite3PExpr(pParse, TK_NOT, A, 0);
1338 expr(A) ::= expr(A) in_op(N) nm(Y) dbnm(Z) paren_exprlist(E). [IN] {
1339 SrcList *pSrc = sqlite3SrcListAppend(pParse, 0,&Y,&Z);
1340 Select *pSelect = sqlite3SelectNew(pParse, 0,pSrc,0,0,0,0,0,0);
1341 if( E ) sqlite3SrcListFuncArgs(pParse, pSelect ? pSrc : 0, E);
1342 A = sqlite3PExpr(pParse, TK_IN, A, 0);
1343 sqlite3PExprAddSelect(pParse, A, pSelect);
1344 if( N ) A = sqlite3PExpr(pParse, TK_NOT, A, 0);
1346 expr(A) ::= EXISTS LP select(Y) RP. {
1347 Expr *p;
1348 p = A = sqlite3PExpr(pParse, TK_EXISTS, 0, 0);
1349 sqlite3PExprAddSelect(pParse, p, Y);
1351 %endif SQLITE_OMIT_SUBQUERY
1353 /* CASE expressions */
1354 expr(A) ::= CASE case_operand(X) case_exprlist(Y) case_else(Z) END. {
1355 A = sqlite3PExpr(pParse, TK_CASE, X, 0);
1356 if( A ){
1357 A->x.pList = Z ? sqlite3ExprListAppend(pParse,Y,Z) : Y;
1358 sqlite3ExprSetHeightAndFlags(pParse, A);
1359 }else{
1360 sqlite3ExprListDelete(pParse->db, Y);
1361 sqlite3ExprDelete(pParse->db, Z);
1364 %type case_exprlist {ExprList*}
1365 %destructor case_exprlist {sqlite3ExprListDelete(pParse->db, $$);}
1366 case_exprlist(A) ::= case_exprlist(A) WHEN expr(Y) THEN expr(Z). {
1367 A = sqlite3ExprListAppend(pParse,A, Y);
1368 A = sqlite3ExprListAppend(pParse,A, Z);
1370 case_exprlist(A) ::= WHEN expr(Y) THEN expr(Z). {
1371 A = sqlite3ExprListAppend(pParse,0, Y);
1372 A = sqlite3ExprListAppend(pParse,A, Z);
1374 %type case_else {Expr*}
1375 %destructor case_else {sqlite3ExprDelete(pParse->db, $$);}
1376 case_else(A) ::= ELSE expr(X). {A = X;}
1377 case_else(A) ::= . {A = 0;}
1378 %type case_operand {Expr*}
1379 %destructor case_operand {sqlite3ExprDelete(pParse->db, $$);}
1380 case_operand(A) ::= expr(X). {A = X; /*A-overwrites-X*/}
1381 case_operand(A) ::= . {A = 0;}
1383 %type exprlist {ExprList*}
1384 %destructor exprlist {sqlite3ExprListDelete(pParse->db, $$);}
1385 %type nexprlist {ExprList*}
1386 %destructor nexprlist {sqlite3ExprListDelete(pParse->db, $$);}
1388 exprlist(A) ::= nexprlist(A).
1389 exprlist(A) ::= . {A = 0;}
1390 nexprlist(A) ::= nexprlist(A) COMMA expr(Y).
1391 {A = sqlite3ExprListAppend(pParse,A,Y);}
1392 nexprlist(A) ::= expr(Y).
1393 {A = sqlite3ExprListAppend(pParse,0,Y); /*A-overwrites-Y*/}
1395 %ifndef SQLITE_OMIT_SUBQUERY
1396 /* A paren_exprlist is an optional expression list contained inside
1397 ** of parenthesis */
1398 %type paren_exprlist {ExprList*}
1399 %destructor paren_exprlist {sqlite3ExprListDelete(pParse->db, $$);}
1400 paren_exprlist(A) ::= . {A = 0;}
1401 paren_exprlist(A) ::= LP exprlist(X) RP. {A = X;}
1402 %endif SQLITE_OMIT_SUBQUERY
1405 ///////////////////////////// The CREATE INDEX command ///////////////////////
1407 cmd ::= createkw(S) uniqueflag(U) INDEX ifnotexists(NE) nm(X) dbnm(D)
1408 ON nm(Y) LP sortlist(Z) RP where_opt(W). {
1409 sqlite3CreateIndex(pParse, &X, &D,
1410 sqlite3SrcListAppend(pParse,0,&Y,0), Z, U,
1411 &S, W, SQLITE_SO_ASC, NE, SQLITE_IDXTYPE_APPDEF);
1412 if( IN_RENAME_OBJECT && pParse->pNewIndex ){
1413 sqlite3RenameTokenMap(pParse, pParse->pNewIndex->zName, &Y);
1417 %type uniqueflag {int}
1418 uniqueflag(A) ::= UNIQUE. {A = OE_Abort;}
1419 uniqueflag(A) ::= . {A = OE_None;}
1422 // The eidlist non-terminal (Expression Id List) generates an ExprList
1423 // from a list of identifiers. The identifier names are in ExprList.a[].zName.
1424 // This list is stored in an ExprList rather than an IdList so that it
1425 // can be easily sent to sqlite3ColumnsExprList().
1427 // eidlist is grouped with CREATE INDEX because it used to be the non-terminal
1428 // used for the arguments to an index. That is just an historical accident.
1430 // IMPORTANT COMPATIBILITY NOTE: Some prior versions of SQLite accepted
1431 // COLLATE clauses and ASC or DESC keywords on ID lists in inappropriate
1432 // places - places that might have been stored in the sqlite_schema table.
1433 // Those extra features were ignored. But because they might be in some
1434 // (busted) old databases, we need to continue parsing them when loading
1435 // historical schemas.
1437 %type eidlist {ExprList*}
1438 %destructor eidlist {sqlite3ExprListDelete(pParse->db, $$);}
1439 %type eidlist_opt {ExprList*}
1440 %destructor eidlist_opt {sqlite3ExprListDelete(pParse->db, $$);}
1442 %include {
1443 /* Add a single new term to an ExprList that is used to store a
1444 ** list of identifiers. Report an error if the ID list contains
1445 ** a COLLATE clause or an ASC or DESC keyword, except ignore the
1446 ** error while parsing a legacy schema.
1448 static ExprList *parserAddExprIdListTerm(
1449 Parse *pParse,
1450 ExprList *pPrior,
1451 Token *pIdToken,
1452 int hasCollate,
1453 int sortOrder
1455 ExprList *p = sqlite3ExprListAppend(pParse, pPrior, 0);
1456 if( (hasCollate || sortOrder!=SQLITE_SO_UNDEFINED)
1457 && pParse->db->init.busy==0
1459 sqlite3ErrorMsg(pParse, "syntax error after column name \"%.*s\"",
1460 pIdToken->n, pIdToken->z);
1462 sqlite3ExprListSetName(pParse, p, pIdToken, 1);
1463 return p;
1465 } // end %include
1467 eidlist_opt(A) ::= . {A = 0;}
1468 eidlist_opt(A) ::= LP eidlist(X) RP. {A = X;}
1469 eidlist(A) ::= eidlist(A) COMMA nm(Y) collate(C) sortorder(Z). {
1470 A = parserAddExprIdListTerm(pParse, A, &Y, C, Z);
1472 eidlist(A) ::= nm(Y) collate(C) sortorder(Z). {
1473 A = parserAddExprIdListTerm(pParse, 0, &Y, C, Z); /*A-overwrites-Y*/
1476 %type collate {int}
1477 collate(C) ::= . {C = 0;}
1478 collate(C) ::= COLLATE ids. {C = 1;}
1481 ///////////////////////////// The DROP INDEX command /////////////////////////
1483 cmd ::= DROP INDEX ifexists(E) fullname(X). {sqlite3DropIndex(pParse, X, E);}
1485 ///////////////////////////// The VACUUM command /////////////////////////////
1487 %if !SQLITE_OMIT_VACUUM && !SQLITE_OMIT_ATTACH
1488 %type vinto {Expr*}
1489 %destructor vinto {sqlite3ExprDelete(pParse->db, $$);}
1490 cmd ::= VACUUM vinto(Y). {sqlite3Vacuum(pParse,0,Y);}
1491 cmd ::= VACUUM nm(X) vinto(Y). {sqlite3Vacuum(pParse,&X,Y);}
1492 vinto(A) ::= INTO expr(X). {A = X;}
1493 vinto(A) ::= . {A = 0;}
1494 %endif
1496 ///////////////////////////// The PRAGMA command /////////////////////////////
1498 %ifndef SQLITE_OMIT_PRAGMA
1499 cmd ::= PRAGMA nm(X) dbnm(Z). {sqlite3Pragma(pParse,&X,&Z,0,0);}
1500 cmd ::= PRAGMA nm(X) dbnm(Z) EQ nmnum(Y). {sqlite3Pragma(pParse,&X,&Z,&Y,0);}
1501 cmd ::= PRAGMA nm(X) dbnm(Z) LP nmnum(Y) RP. {sqlite3Pragma(pParse,&X,&Z,&Y,0);}
1502 cmd ::= PRAGMA nm(X) dbnm(Z) EQ minus_num(Y).
1503 {sqlite3Pragma(pParse,&X,&Z,&Y,1);}
1504 cmd ::= PRAGMA nm(X) dbnm(Z) LP minus_num(Y) RP.
1505 {sqlite3Pragma(pParse,&X,&Z,&Y,1);}
1507 nmnum(A) ::= plus_num(A).
1508 nmnum(A) ::= nm(A).
1509 nmnum(A) ::= ON(A).
1510 nmnum(A) ::= DELETE(A).
1511 nmnum(A) ::= DEFAULT(A).
1512 %endif SQLITE_OMIT_PRAGMA
1513 %token_class number INTEGER|FLOAT.
1514 plus_num(A) ::= PLUS number(X). {A = X;}
1515 plus_num(A) ::= number(A).
1516 minus_num(A) ::= MINUS number(X). {A = X;}
1517 //////////////////////////// The CREATE TRIGGER command /////////////////////
1519 %ifndef SQLITE_OMIT_TRIGGER
1521 cmd ::= createkw trigger_decl(A) BEGIN trigger_cmd_list(S) END(Z). {
1522 Token all;
1523 all.z = A.z;
1524 all.n = (int)(Z.z - A.z) + Z.n;
1525 sqlite3FinishTrigger(pParse, S, &all);
1528 trigger_decl(A) ::= temp(T) TRIGGER ifnotexists(NOERR) nm(B) dbnm(Z)
1529 trigger_time(C) trigger_event(D)
1530 ON fullname(E) foreach_clause when_clause(G). {
1531 sqlite3BeginTrigger(pParse, &B, &Z, C, D.a, D.b, E, G, T, NOERR);
1532 A = (Z.n==0?B:Z); /*A-overwrites-T*/
1535 %type trigger_time {int}
1536 trigger_time(A) ::= BEFORE|AFTER(X). { A = @X; /*A-overwrites-X*/ }
1537 trigger_time(A) ::= INSTEAD OF. { A = TK_INSTEAD;}
1538 trigger_time(A) ::= . { A = TK_BEFORE; }
1540 %type trigger_event {struct TrigEvent}
1541 %destructor trigger_event {sqlite3IdListDelete(pParse->db, $$.b);}
1542 trigger_event(A) ::= DELETE|INSERT(X). {A.a = @X; /*A-overwrites-X*/ A.b = 0;}
1543 trigger_event(A) ::= UPDATE(X). {A.a = @X; /*A-overwrites-X*/ A.b = 0;}
1544 trigger_event(A) ::= UPDATE OF idlist(X).{A.a = TK_UPDATE; A.b = X;}
1546 foreach_clause ::= .
1547 foreach_clause ::= FOR EACH ROW.
1549 %type when_clause {Expr*}
1550 %destructor when_clause {sqlite3ExprDelete(pParse->db, $$);}
1551 when_clause(A) ::= . { A = 0; }
1552 when_clause(A) ::= WHEN expr(X). { A = X; }
1554 %type trigger_cmd_list {TriggerStep*}
1555 %destructor trigger_cmd_list {sqlite3DeleteTriggerStep(pParse->db, $$);}
1556 trigger_cmd_list(A) ::= trigger_cmd_list(A) trigger_cmd(X) SEMI. {
1557 assert( A!=0 );
1558 A->pLast->pNext = X;
1559 A->pLast = X;
1561 trigger_cmd_list(A) ::= trigger_cmd(A) SEMI. {
1562 assert( A!=0 );
1563 A->pLast = A;
1566 // Disallow qualified table names on INSERT, UPDATE, and DELETE statements
1567 // within a trigger. The table to INSERT, UPDATE, or DELETE is always in
1568 // the same database as the table that the trigger fires on.
1570 %type trnm {Token}
1571 trnm(A) ::= nm(A).
1572 trnm(A) ::= nm DOT nm(X). {
1573 A = X;
1574 sqlite3ErrorMsg(pParse,
1575 "qualified table names are not allowed on INSERT, UPDATE, and DELETE "
1576 "statements within triggers");
1579 // Disallow the INDEX BY and NOT INDEXED clauses on UPDATE and DELETE
1580 // statements within triggers. We make a specific error message for this
1581 // since it is an exception to the default grammar rules.
1583 tridxby ::= .
1584 tridxby ::= INDEXED BY nm. {
1585 sqlite3ErrorMsg(pParse,
1586 "the INDEXED BY clause is not allowed on UPDATE or DELETE statements "
1587 "within triggers");
1589 tridxby ::= NOT INDEXED. {
1590 sqlite3ErrorMsg(pParse,
1591 "the NOT INDEXED clause is not allowed on UPDATE or DELETE statements "
1592 "within triggers");
1597 %type trigger_cmd {TriggerStep*}
1598 %destructor trigger_cmd {sqlite3DeleteTriggerStep(pParse->db, $$);}
1599 // UPDATE
1600 trigger_cmd(A) ::=
1601 UPDATE(B) orconf(R) trnm(X) tridxby SET setlist(Y) from(F) where_opt(Z) scanpt(E).
1602 {A = sqlite3TriggerUpdateStep(pParse, &X, F, Y, Z, R, B.z, E);}
1604 // INSERT
1605 trigger_cmd(A) ::= scanpt(B) insert_cmd(R) INTO
1606 trnm(X) idlist_opt(F) select(S) upsert(U) scanpt(Z). {
1607 A = sqlite3TriggerInsertStep(pParse,&X,F,S,R,U,B,Z);/*A-overwrites-R*/
1609 // DELETE
1610 trigger_cmd(A) ::= DELETE(B) FROM trnm(X) tridxby where_opt(Y) scanpt(E).
1611 {A = sqlite3TriggerDeleteStep(pParse, &X, Y, B.z, E);}
1613 // SELECT
1614 trigger_cmd(A) ::= scanpt(B) select(X) scanpt(E).
1615 {A = sqlite3TriggerSelectStep(pParse->db, X, B, E); /*A-overwrites-X*/}
1617 // The special RAISE expression that may occur in trigger programs
1618 expr(A) ::= RAISE LP IGNORE RP. {
1619 A = sqlite3PExpr(pParse, TK_RAISE, 0, 0);
1620 if( A ){
1621 A->affExpr = OE_Ignore;
1624 expr(A) ::= RAISE LP raisetype(T) COMMA nm(Z) RP. {
1625 A = sqlite3ExprAlloc(pParse->db, TK_RAISE, &Z, 1);
1626 if( A ) {
1627 A->affExpr = (char)T;
1630 %endif !SQLITE_OMIT_TRIGGER
1632 %type raisetype {int}
1633 raisetype(A) ::= ROLLBACK. {A = OE_Rollback;}
1634 raisetype(A) ::= ABORT. {A = OE_Abort;}
1635 raisetype(A) ::= FAIL. {A = OE_Fail;}
1638 //////////////////////// DROP TRIGGER statement //////////////////////////////
1639 %ifndef SQLITE_OMIT_TRIGGER
1640 cmd ::= DROP TRIGGER ifexists(NOERR) fullname(X). {
1641 sqlite3DropTrigger(pParse,X,NOERR);
1643 %endif !SQLITE_OMIT_TRIGGER
1645 //////////////////////// ATTACH DATABASE file AS name /////////////////////////
1646 %ifndef SQLITE_OMIT_ATTACH
1647 cmd ::= ATTACH database_kw_opt expr(F) AS expr(D) key_opt(K). {
1648 sqlite3Attach(pParse, F, D, K);
1650 cmd ::= DETACH database_kw_opt expr(D). {
1651 sqlite3Detach(pParse, D);
1654 %type key_opt {Expr*}
1655 %destructor key_opt {sqlite3ExprDelete(pParse->db, $$);}
1656 key_opt(A) ::= . { A = 0; }
1657 key_opt(A) ::= KEY expr(X). { A = X; }
1659 database_kw_opt ::= DATABASE.
1660 database_kw_opt ::= .
1661 %endif SQLITE_OMIT_ATTACH
1663 ////////////////////////// REINDEX collation //////////////////////////////////
1664 %ifndef SQLITE_OMIT_REINDEX
1665 cmd ::= REINDEX. {sqlite3Reindex(pParse, 0, 0);}
1666 cmd ::= REINDEX nm(X) dbnm(Y). {sqlite3Reindex(pParse, &X, &Y);}
1667 %endif SQLITE_OMIT_REINDEX
1669 /////////////////////////////////// ANALYZE ///////////////////////////////////
1670 %ifndef SQLITE_OMIT_ANALYZE
1671 cmd ::= ANALYZE. {sqlite3Analyze(pParse, 0, 0);}
1672 cmd ::= ANALYZE nm(X) dbnm(Y). {sqlite3Analyze(pParse, &X, &Y);}
1673 %endif
1675 //////////////////////// ALTER TABLE table ... ////////////////////////////////
1676 %ifndef SQLITE_OMIT_ALTERTABLE
1677 %ifndef SQLITE_OMIT_VIRTUALTABLE
1678 cmd ::= ALTER TABLE fullname(X) RENAME TO nm(Z). {
1679 sqlite3AlterRenameTable(pParse,X,&Z);
1681 cmd ::= ALTER TABLE add_column_fullname
1682 ADD kwcolumn_opt columnname(Y) carglist. {
1683 Y.n = (int)(pParse->sLastToken.z-Y.z) + pParse->sLastToken.n;
1684 sqlite3AlterFinishAddColumn(pParse, &Y);
1686 cmd ::= ALTER TABLE fullname(X) DROP kwcolumn_opt nm(Y). {
1687 sqlite3AlterDropColumn(pParse, X, &Y);
1690 add_column_fullname ::= fullname(X). {
1691 disableLookaside(pParse);
1692 sqlite3AlterBeginAddColumn(pParse, X);
1694 cmd ::= ALTER TABLE fullname(X) RENAME kwcolumn_opt nm(Y) TO nm(Z). {
1695 sqlite3AlterRenameColumn(pParse, X, &Y, &Z);
1698 kwcolumn_opt ::= .
1699 kwcolumn_opt ::= COLUMNKW.
1701 %endif SQLITE_OMIT_VIRTUALTABLE
1702 %endif SQLITE_OMIT_ALTERTABLE
1704 //////////////////////// CREATE VIRTUAL TABLE ... /////////////////////////////
1705 %ifndef SQLITE_OMIT_VIRTUALTABLE
1706 cmd ::= create_vtab. {sqlite3VtabFinishParse(pParse,0);}
1707 cmd ::= create_vtab LP vtabarglist RP(X). {sqlite3VtabFinishParse(pParse,&X);}
1708 create_vtab ::= createkw VIRTUAL TABLE ifnotexists(E)
1709 nm(X) dbnm(Y) USING nm(Z). {
1710 sqlite3VtabBeginParse(pParse, &X, &Y, &Z, E);
1712 vtabarglist ::= vtabarg.
1713 vtabarglist ::= vtabarglist COMMA vtabarg.
1714 vtabarg ::= . {sqlite3VtabArgInit(pParse);}
1715 vtabarg ::= vtabarg vtabargtoken.
1716 vtabargtoken ::= ANY(X). {sqlite3VtabArgExtend(pParse,&X);}
1717 vtabargtoken ::= lp anylist RP(X). {sqlite3VtabArgExtend(pParse,&X);}
1718 lp ::= LP(X). {sqlite3VtabArgExtend(pParse,&X);}
1719 anylist ::= .
1720 anylist ::= anylist LP anylist RP.
1721 anylist ::= anylist ANY.
1722 %endif SQLITE_OMIT_VIRTUALTABLE
1725 //////////////////////// COMMON TABLE EXPRESSIONS ////////////////////////////
1726 %type wqlist {With*}
1727 %destructor wqlist {sqlite3WithDelete(pParse->db, $$);}
1728 %type wqitem {Cte*}
1729 // %destructor wqitem {sqlite3CteDelete(pParse->db, $$);} // not reachable
1731 with ::= .
1732 %ifndef SQLITE_OMIT_CTE
1733 with ::= WITH wqlist(W). { sqlite3WithPush(pParse, W, 1); }
1734 with ::= WITH RECURSIVE wqlist(W). { sqlite3WithPush(pParse, W, 1); }
1736 %type wqas {u8}
1737 wqas(A) ::= AS. {A = M10d_Any;}
1738 wqas(A) ::= AS MATERIALIZED. {A = M10d_Yes;}
1739 wqas(A) ::= AS NOT MATERIALIZED. {A = M10d_No;}
1740 wqitem(A) ::= nm(X) eidlist_opt(Y) wqas(M) LP select(Z) RP. {
1741 A = sqlite3CteNew(pParse, &X, Y, Z, M); /*A-overwrites-X*/
1743 wqlist(A) ::= wqitem(X). {
1744 A = sqlite3WithAdd(pParse, 0, X); /*A-overwrites-X*/
1746 wqlist(A) ::= wqlist(A) COMMA wqitem(X). {
1747 A = sqlite3WithAdd(pParse, A, X);
1749 %endif SQLITE_OMIT_CTE
1751 //////////////////////// WINDOW FUNCTION EXPRESSIONS /////////////////////////
1752 // These must be at the end of this file. Specifically, the rules that
1753 // introduce tokens WINDOW, OVER and FILTER must appear last. This causes
1754 // the integer values assigned to these tokens to be larger than all other
1755 // tokens that may be output by the tokenizer except TK_SPACE and TK_ILLEGAL.
1757 %ifndef SQLITE_OMIT_WINDOWFUNC
1758 %type windowdefn_list {Window*}
1759 %destructor windowdefn_list {sqlite3WindowListDelete(pParse->db, $$);}
1760 windowdefn_list(A) ::= windowdefn(Z). { A = Z; }
1761 windowdefn_list(A) ::= windowdefn_list(Y) COMMA windowdefn(Z). {
1762 assert( Z!=0 );
1763 sqlite3WindowChain(pParse, Z, Y);
1764 Z->pNextWin = Y;
1765 A = Z;
1768 %type windowdefn {Window*}
1769 %destructor windowdefn {sqlite3WindowDelete(pParse->db, $$);}
1770 windowdefn(A) ::= nm(X) AS LP window(Y) RP. {
1771 if( ALWAYS(Y) ){
1772 Y->zName = sqlite3DbStrNDup(pParse->db, X.z, X.n);
1774 A = Y;
1777 %type window {Window*}
1778 %destructor window {sqlite3WindowDelete(pParse->db, $$);}
1780 %type frame_opt {Window*}
1781 %destructor frame_opt {sqlite3WindowDelete(pParse->db, $$);}
1783 %type part_opt {ExprList*}
1784 %destructor part_opt {sqlite3ExprListDelete(pParse->db, $$);}
1786 %type filter_clause {Expr*}
1787 %destructor filter_clause {sqlite3ExprDelete(pParse->db, $$);}
1789 %type over_clause {Window*}
1790 %destructor over_clause {sqlite3WindowDelete(pParse->db, $$);}
1792 %type filter_over {Window*}
1793 %destructor filter_over {sqlite3WindowDelete(pParse->db, $$);}
1795 %type range_or_rows {int}
1797 %type frame_bound {struct FrameBound}
1798 %destructor frame_bound {sqlite3ExprDelete(pParse->db, $$.pExpr);}
1799 %type frame_bound_s {struct FrameBound}
1800 %destructor frame_bound_s {sqlite3ExprDelete(pParse->db, $$.pExpr);}
1801 %type frame_bound_e {struct FrameBound}
1802 %destructor frame_bound_e {sqlite3ExprDelete(pParse->db, $$.pExpr);}
1804 window(A) ::= PARTITION BY nexprlist(X) orderby_opt(Y) frame_opt(Z). {
1805 A = sqlite3WindowAssemble(pParse, Z, X, Y, 0);
1807 window(A) ::= nm(W) PARTITION BY nexprlist(X) orderby_opt(Y) frame_opt(Z). {
1808 A = sqlite3WindowAssemble(pParse, Z, X, Y, &W);
1810 window(A) ::= ORDER BY sortlist(Y) frame_opt(Z). {
1811 A = sqlite3WindowAssemble(pParse, Z, 0, Y, 0);
1813 window(A) ::= nm(W) ORDER BY sortlist(Y) frame_opt(Z). {
1814 A = sqlite3WindowAssemble(pParse, Z, 0, Y, &W);
1816 window(A) ::= frame_opt(Z). {
1817 A = Z;
1819 window(A) ::= nm(W) frame_opt(Z). {
1820 A = sqlite3WindowAssemble(pParse, Z, 0, 0, &W);
1823 frame_opt(A) ::= . {
1824 A = sqlite3WindowAlloc(pParse, 0, TK_UNBOUNDED, 0, TK_CURRENT, 0, 0);
1826 frame_opt(A) ::= range_or_rows(X) frame_bound_s(Y) frame_exclude_opt(Z). {
1827 A = sqlite3WindowAlloc(pParse, X, Y.eType, Y.pExpr, TK_CURRENT, 0, Z);
1829 frame_opt(A) ::= range_or_rows(X) BETWEEN frame_bound_s(Y) AND
1830 frame_bound_e(Z) frame_exclude_opt(W). {
1831 A = sqlite3WindowAlloc(pParse, X, Y.eType, Y.pExpr, Z.eType, Z.pExpr, W);
1834 range_or_rows(A) ::= RANGE|ROWS|GROUPS(X). {A = @X; /*A-overwrites-X*/}
1836 frame_bound_s(A) ::= frame_bound(X). {A = X;}
1837 frame_bound_s(A) ::= UNBOUNDED(X) PRECEDING. {A.eType = @X; A.pExpr = 0;}
1838 frame_bound_e(A) ::= frame_bound(X). {A = X;}
1839 frame_bound_e(A) ::= UNBOUNDED(X) FOLLOWING. {A.eType = @X; A.pExpr = 0;}
1841 frame_bound(A) ::= expr(X) PRECEDING|FOLLOWING(Y).
1842 {A.eType = @Y; A.pExpr = X;}
1843 frame_bound(A) ::= CURRENT(X) ROW. {A.eType = @X; A.pExpr = 0;}
1845 %type frame_exclude_opt {u8}
1846 frame_exclude_opt(A) ::= . {A = 0;}
1847 frame_exclude_opt(A) ::= EXCLUDE frame_exclude(X). {A = X;}
1849 %type frame_exclude {u8}
1850 frame_exclude(A) ::= NO(X) OTHERS. {A = @X; /*A-overwrites-X*/}
1851 frame_exclude(A) ::= CURRENT(X) ROW. {A = @X; /*A-overwrites-X*/}
1852 frame_exclude(A) ::= GROUP|TIES(X). {A = @X; /*A-overwrites-X*/}
1855 %type window_clause {Window*}
1856 %destructor window_clause {sqlite3WindowListDelete(pParse->db, $$);}
1857 window_clause(A) ::= WINDOW windowdefn_list(B). { A = B; }
1859 filter_over(A) ::= filter_clause(F) over_clause(O). {
1860 if( O ){
1861 O->pFilter = F;
1862 }else{
1863 sqlite3ExprDelete(pParse->db, F);
1865 A = O;
1867 filter_over(A) ::= over_clause(O). {
1868 A = O;
1870 filter_over(A) ::= filter_clause(F). {
1871 A = (Window*)sqlite3DbMallocZero(pParse->db, sizeof(Window));
1872 if( A ){
1873 A->eFrmType = TK_FILTER;
1874 A->pFilter = F;
1875 }else{
1876 sqlite3ExprDelete(pParse->db, F);
1880 over_clause(A) ::= OVER LP window(Z) RP. {
1881 A = Z;
1882 assert( A!=0 );
1884 over_clause(A) ::= OVER nm(Z). {
1885 A = (Window*)sqlite3DbMallocZero(pParse->db, sizeof(Window));
1886 if( A ){
1887 A->zName = sqlite3DbStrNDup(pParse->db, Z.z, Z.n);
1891 filter_clause(A) ::= FILTER LP WHERE expr(X) RP. { A = X; }
1892 %endif /* SQLITE_OMIT_WINDOWFUNC */
1895 ** The code generator needs some extra TK_ token values for tokens that
1896 ** are synthesized and do not actually appear in the grammar:
1898 %token
1899 COLUMN /* Reference to a table column */
1900 AGG_FUNCTION /* An aggregate function */
1901 AGG_COLUMN /* An aggregated column */
1902 TRUEFALSE /* True or false keyword */
1903 ISNOT /* Combination of IS and NOT */
1904 FUNCTION /* A function invocation */
1905 UMINUS /* Unary minus */
1906 UPLUS /* Unary plus */
1907 TRUTH /* IS TRUE or IS FALSE or IS NOT TRUE or IS NOT FALSE */
1908 REGISTER /* Reference to a VDBE register */
1909 VECTOR /* Vector */
1910 SELECT_COLUMN /* Choose a single column from a multi-column SELECT */
1911 IF_NULL_ROW /* the if-null-row operator */
1912 ASTERISK /* The "*" in count(*) and similar */
1913 SPAN /* The span operator */
1914 ERROR /* An expression containing an error */
1916 /* There must be no more than 255 tokens defined above. If this grammar
1917 ** is extended with new rules and tokens, they must either be so few in
1918 ** number that TK_SPAN is no more than 255, or else the new tokens must
1919 ** appear after this line.
1921 %include {
1922 #if TK_SPAN>255
1923 # error too many tokens in the grammar
1924 #endif
1928 ** The TK_SPACE and TK_ILLEGAL tokens must be the last two tokens. The
1929 ** parser depends on this. Those tokens are not used in any grammar rule.
1930 ** They are only used by the tokenizer. Declare them last so that they
1931 ** are guaranteed to be the last two tokens
1933 %token SPACE ILLEGAL.