Snapshot of upstream SQLite 3.42.0
[sqlcipher.git] / src / parse.y
blob541b9ffe584c31381219afa7cad1fc767822c13c
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.
299 // And "ids" is an identifer-or-string.
301 %token_class ids ID|STRING.
303 // An identifier or a join-keyword
305 %token_class idj ID|INDEXED|JOIN_KW.
307 // The name of a column or table can be any of the following:
309 %type nm {Token}
310 nm(A) ::= idj(A).
311 nm(A) ::= STRING(A).
313 // A typetoken is really zero or more tokens that form a type name such
314 // as can be found after the column name in a CREATE TABLE statement.
315 // Multiple tokens are concatenated to form the value of the typetoken.
317 %type typetoken {Token}
318 typetoken(A) ::= . {A.n = 0; A.z = 0;}
319 typetoken(A) ::= typename(A).
320 typetoken(A) ::= typename(A) LP signed RP(Y). {
321 A.n = (int)(&Y.z[Y.n] - A.z);
323 typetoken(A) ::= typename(A) LP signed COMMA signed RP(Y). {
324 A.n = (int)(&Y.z[Y.n] - A.z);
326 %type typename {Token}
327 typename(A) ::= ids(A).
328 typename(A) ::= typename(A) ids(Y). {A.n=Y.n+(int)(Y.z-A.z);}
329 signed ::= plus_num.
330 signed ::= minus_num.
332 // The scanpt non-terminal takes a value which is a pointer to the
333 // input text just past the last token that has been shifted into
334 // the parser. By surrounding some phrase in the grammar with two
335 // scanpt non-terminals, we can capture the input text for that phrase.
336 // For example:
338 // something ::= .... scanpt(A) phrase scanpt(Z).
340 // The text that is parsed as "phrase" is a string starting at A
341 // and containing (int)(Z-A) characters. There might be some extra
342 // whitespace on either end of the text, but that can be removed in
343 // post-processing, if needed.
345 %type scanpt {const char*}
346 scanpt(A) ::= . {
347 assert( yyLookahead!=YYNOCODE );
348 A = yyLookaheadToken.z;
350 scantok(A) ::= . {
351 assert( yyLookahead!=YYNOCODE );
352 A = yyLookaheadToken;
355 // "carglist" is a list of additional constraints that come after the
356 // column name and column type in a CREATE TABLE statement.
358 carglist ::= carglist ccons.
359 carglist ::= .
360 ccons ::= CONSTRAINT nm(X). {pParse->constraintName = X;}
361 ccons ::= DEFAULT scantok(A) term(X).
362 {sqlite3AddDefaultValue(pParse,X,A.z,&A.z[A.n]);}
363 ccons ::= DEFAULT LP(A) expr(X) RP(Z).
364 {sqlite3AddDefaultValue(pParse,X,A.z+1,Z.z);}
365 ccons ::= DEFAULT PLUS(A) scantok(Z) term(X).
366 {sqlite3AddDefaultValue(pParse,X,A.z,&Z.z[Z.n]);}
367 ccons ::= DEFAULT MINUS(A) scantok(Z) term(X). {
368 Expr *p = sqlite3PExpr(pParse, TK_UMINUS, X, 0);
369 sqlite3AddDefaultValue(pParse,p,A.z,&Z.z[Z.n]);
371 ccons ::= DEFAULT scantok id(X). {
372 Expr *p = tokenExpr(pParse, TK_STRING, X);
373 if( p ){
374 sqlite3ExprIdToTrueFalse(p);
375 testcase( p->op==TK_TRUEFALSE && sqlite3ExprTruthValue(p) );
377 sqlite3AddDefaultValue(pParse,p,X.z,X.z+X.n);
380 // In addition to the type name, we also care about the primary key and
381 // UNIQUE constraints.
383 ccons ::= NULL onconf.
384 ccons ::= NOT NULL onconf(R). {sqlite3AddNotNull(pParse, R);}
385 ccons ::= PRIMARY KEY sortorder(Z) onconf(R) autoinc(I).
386 {sqlite3AddPrimaryKey(pParse,0,R,I,Z);}
387 ccons ::= UNIQUE onconf(R). {sqlite3CreateIndex(pParse,0,0,0,0,R,0,0,0,0,
388 SQLITE_IDXTYPE_UNIQUE);}
389 ccons ::= CHECK LP(A) expr(X) RP(B). {sqlite3AddCheckConstraint(pParse,X,A.z,B.z);}
390 ccons ::= REFERENCES nm(T) eidlist_opt(TA) refargs(R).
391 {sqlite3CreateForeignKey(pParse,0,&T,TA,R);}
392 ccons ::= defer_subclause(D). {sqlite3DeferForeignKey(pParse,D);}
393 ccons ::= COLLATE ids(C). {sqlite3AddCollateType(pParse, &C);}
394 ccons ::= GENERATED ALWAYS AS generated.
395 ccons ::= AS generated.
396 generated ::= LP expr(E) RP. {sqlite3AddGenerated(pParse,E,0);}
397 generated ::= LP expr(E) RP ID(TYPE). {sqlite3AddGenerated(pParse,E,&TYPE);}
399 // The optional AUTOINCREMENT keyword
400 %type autoinc {int}
401 autoinc(X) ::= . {X = 0;}
402 autoinc(X) ::= AUTOINCR. {X = 1;}
404 // The next group of rules parses the arguments to a REFERENCES clause
405 // that determine if the referential integrity checking is deferred or
406 // or immediate and which determine what action to take if a ref-integ
407 // check fails.
409 %type refargs {int}
410 refargs(A) ::= . { A = OE_None*0x0101; /* EV: R-19803-45884 */}
411 refargs(A) ::= refargs(A) refarg(Y). { A = (A & ~Y.mask) | Y.value; }
412 %type refarg {struct {int value; int mask;}}
413 refarg(A) ::= MATCH nm. { A.value = 0; A.mask = 0x000000; }
414 refarg(A) ::= ON INSERT refact. { A.value = 0; A.mask = 0x000000; }
415 refarg(A) ::= ON DELETE refact(X). { A.value = X; A.mask = 0x0000ff; }
416 refarg(A) ::= ON UPDATE refact(X). { A.value = X<<8; A.mask = 0x00ff00; }
417 %type refact {int}
418 refact(A) ::= SET NULL. { A = OE_SetNull; /* EV: R-33326-45252 */}
419 refact(A) ::= SET DEFAULT. { A = OE_SetDflt; /* EV: R-33326-45252 */}
420 refact(A) ::= CASCADE. { A = OE_Cascade; /* EV: R-33326-45252 */}
421 refact(A) ::= RESTRICT. { A = OE_Restrict; /* EV: R-33326-45252 */}
422 refact(A) ::= NO ACTION. { A = OE_None; /* EV: R-33326-45252 */}
423 %type defer_subclause {int}
424 defer_subclause(A) ::= NOT DEFERRABLE init_deferred_pred_opt. {A = 0;}
425 defer_subclause(A) ::= DEFERRABLE init_deferred_pred_opt(X). {A = X;}
426 %type init_deferred_pred_opt {int}
427 init_deferred_pred_opt(A) ::= . {A = 0;}
428 init_deferred_pred_opt(A) ::= INITIALLY DEFERRED. {A = 1;}
429 init_deferred_pred_opt(A) ::= INITIALLY IMMEDIATE. {A = 0;}
431 conslist_opt(A) ::= . {A.n = 0; A.z = 0;}
432 conslist_opt(A) ::= COMMA(A) conslist.
433 conslist ::= conslist tconscomma tcons.
434 conslist ::= tcons.
435 tconscomma ::= COMMA. {pParse->constraintName.n = 0;}
436 tconscomma ::= .
437 tcons ::= CONSTRAINT nm(X). {pParse->constraintName = X;}
438 tcons ::= PRIMARY KEY LP sortlist(X) autoinc(I) RP onconf(R).
439 {sqlite3AddPrimaryKey(pParse,X,R,I,0);}
440 tcons ::= UNIQUE LP sortlist(X) RP onconf(R).
441 {sqlite3CreateIndex(pParse,0,0,0,X,R,0,0,0,0,
442 SQLITE_IDXTYPE_UNIQUE);}
443 tcons ::= CHECK LP(A) expr(E) RP(B) onconf.
444 {sqlite3AddCheckConstraint(pParse,E,A.z,B.z);}
445 tcons ::= FOREIGN KEY LP eidlist(FA) RP
446 REFERENCES nm(T) eidlist_opt(TA) refargs(R) defer_subclause_opt(D). {
447 sqlite3CreateForeignKey(pParse, FA, &T, TA, R);
448 sqlite3DeferForeignKey(pParse, D);
450 %type defer_subclause_opt {int}
451 defer_subclause_opt(A) ::= . {A = 0;}
452 defer_subclause_opt(A) ::= defer_subclause(A).
454 // The following is a non-standard extension that allows us to declare the
455 // default behavior when there is a constraint conflict.
457 %type onconf {int}
458 %type orconf {int}
459 %type resolvetype {int}
460 onconf(A) ::= . {A = OE_Default;}
461 onconf(A) ::= ON CONFLICT resolvetype(X). {A = X;}
462 orconf(A) ::= . {A = OE_Default;}
463 orconf(A) ::= OR resolvetype(X). {A = X;}
464 resolvetype(A) ::= raisetype(A).
465 resolvetype(A) ::= IGNORE. {A = OE_Ignore;}
466 resolvetype(A) ::= REPLACE. {A = OE_Replace;}
468 ////////////////////////// The DROP TABLE /////////////////////////////////////
470 cmd ::= DROP TABLE ifexists(E) fullname(X). {
471 sqlite3DropTable(pParse, X, 0, E);
473 %type ifexists {int}
474 ifexists(A) ::= IF EXISTS. {A = 1;}
475 ifexists(A) ::= . {A = 0;}
477 ///////////////////// The CREATE VIEW statement /////////////////////////////
479 %ifndef SQLITE_OMIT_VIEW
480 cmd ::= createkw(X) temp(T) VIEW ifnotexists(E) nm(Y) dbnm(Z) eidlist_opt(C)
481 AS select(S). {
482 sqlite3CreateView(pParse, &X, &Y, &Z, C, S, T, E);
484 cmd ::= DROP VIEW ifexists(E) fullname(X). {
485 sqlite3DropTable(pParse, X, 1, E);
487 %endif SQLITE_OMIT_VIEW
489 //////////////////////// The SELECT statement /////////////////////////////////
491 cmd ::= select(X). {
492 SelectDest dest = {SRT_Output, 0, 0, 0, 0, 0, 0};
493 sqlite3Select(pParse, X, &dest);
494 sqlite3SelectDelete(pParse->db, X);
497 %type select {Select*}
498 %destructor select {sqlite3SelectDelete(pParse->db, $$);}
499 %type selectnowith {Select*}
500 %destructor selectnowith {sqlite3SelectDelete(pParse->db, $$);}
501 %type oneselect {Select*}
502 %destructor oneselect {sqlite3SelectDelete(pParse->db, $$);}
504 %include {
506 ** For a compound SELECT statement, make sure p->pPrior->pNext==p for
507 ** all elements in the list. And make sure list length does not exceed
508 ** SQLITE_LIMIT_COMPOUND_SELECT.
510 static void parserDoubleLinkSelect(Parse *pParse, Select *p){
511 assert( p!=0 );
512 if( p->pPrior ){
513 Select *pNext = 0, *pLoop = p;
514 int mxSelect, cnt = 1;
515 while(1){
516 pLoop->pNext = pNext;
517 pLoop->selFlags |= SF_Compound;
518 pNext = pLoop;
519 pLoop = pLoop->pPrior;
520 if( pLoop==0 ) break;
521 cnt++;
522 if( pLoop->pOrderBy || pLoop->pLimit ){
523 sqlite3ErrorMsg(pParse,"%s clause should come after %s not before",
524 pLoop->pOrderBy!=0 ? "ORDER BY" : "LIMIT",
525 sqlite3SelectOpName(pNext->op));
526 break;
529 if( (p->selFlags & SF_MultiValue)==0 &&
530 (mxSelect = pParse->db->aLimit[SQLITE_LIMIT_COMPOUND_SELECT])>0 &&
531 cnt>mxSelect
533 sqlite3ErrorMsg(pParse, "too many terms in compound SELECT");
538 /* Attach a With object describing the WITH clause to a Select
539 ** object describing the query for which the WITH clause is a prefix.
541 static Select *attachWithToSelect(Parse *pParse, Select *pSelect, With *pWith){
542 if( pSelect ){
543 pSelect->pWith = pWith;
544 parserDoubleLinkSelect(pParse, pSelect);
545 }else{
546 sqlite3WithDelete(pParse->db, pWith);
548 return pSelect;
552 %ifndef SQLITE_OMIT_CTE
553 select(A) ::= WITH wqlist(W) selectnowith(X). {A = attachWithToSelect(pParse,X,W);}
554 select(A) ::= WITH RECURSIVE wqlist(W) selectnowith(X).
555 {A = attachWithToSelect(pParse,X,W);}
556 %endif /* SQLITE_OMIT_CTE */
557 select(A) ::= selectnowith(X). {
558 Select *p = X;
559 if( p ){
560 parserDoubleLinkSelect(pParse, p);
562 A = p; /*A-overwrites-X*/
565 selectnowith(A) ::= oneselect(A).
566 %ifndef SQLITE_OMIT_COMPOUND_SELECT
567 selectnowith(A) ::= selectnowith(A) multiselect_op(Y) oneselect(Z). {
568 Select *pRhs = Z;
569 Select *pLhs = A;
570 if( pRhs && pRhs->pPrior ){
571 SrcList *pFrom;
572 Token x;
573 x.n = 0;
574 parserDoubleLinkSelect(pParse, pRhs);
575 pFrom = sqlite3SrcListAppendFromTerm(pParse,0,0,0,&x,pRhs,0);
576 pRhs = sqlite3SelectNew(pParse,0,pFrom,0,0,0,0,0,0);
578 if( pRhs ){
579 pRhs->op = (u8)Y;
580 pRhs->pPrior = pLhs;
581 if( ALWAYS(pLhs) ) pLhs->selFlags &= ~SF_MultiValue;
582 pRhs->selFlags &= ~SF_MultiValue;
583 if( Y!=TK_ALL ) pParse->hasCompound = 1;
584 }else{
585 sqlite3SelectDelete(pParse->db, pLhs);
587 A = pRhs;
589 %type multiselect_op {int}
590 multiselect_op(A) ::= UNION(OP). {A = @OP; /*A-overwrites-OP*/}
591 multiselect_op(A) ::= UNION ALL. {A = TK_ALL;}
592 multiselect_op(A) ::= EXCEPT|INTERSECT(OP). {A = @OP; /*A-overwrites-OP*/}
593 %endif SQLITE_OMIT_COMPOUND_SELECT
595 oneselect(A) ::= SELECT distinct(D) selcollist(W) from(X) where_opt(Y)
596 groupby_opt(P) having_opt(Q)
597 orderby_opt(Z) limit_opt(L). {
598 A = sqlite3SelectNew(pParse,W,X,Y,P,Q,Z,D,L);
600 %ifndef SQLITE_OMIT_WINDOWFUNC
601 oneselect(A) ::= SELECT distinct(D) selcollist(W) from(X) where_opt(Y)
602 groupby_opt(P) having_opt(Q) window_clause(R)
603 orderby_opt(Z) limit_opt(L). {
604 A = sqlite3SelectNew(pParse,W,X,Y,P,Q,Z,D,L);
605 if( A ){
606 A->pWinDefn = R;
607 }else{
608 sqlite3WindowListDelete(pParse->db, R);
611 %endif
614 oneselect(A) ::= values(A).
616 %type values {Select*}
617 %destructor values {sqlite3SelectDelete(pParse->db, $$);}
618 values(A) ::= VALUES LP nexprlist(X) RP. {
619 A = sqlite3SelectNew(pParse,X,0,0,0,0,0,SF_Values,0);
621 values(A) ::= values(A) COMMA LP nexprlist(Y) RP. {
622 Select *pRight, *pLeft = A;
623 pRight = sqlite3SelectNew(pParse,Y,0,0,0,0,0,SF_Values|SF_MultiValue,0);
624 if( ALWAYS(pLeft) ) pLeft->selFlags &= ~SF_MultiValue;
625 if( pRight ){
626 pRight->op = TK_ALL;
627 pRight->pPrior = pLeft;
628 A = pRight;
629 }else{
630 A = pLeft;
634 // The "distinct" nonterminal is true (1) if the DISTINCT keyword is
635 // present and false (0) if it is not.
637 %type distinct {int}
638 distinct(A) ::= DISTINCT. {A = SF_Distinct;}
639 distinct(A) ::= ALL. {A = SF_All;}
640 distinct(A) ::= . {A = 0;}
642 // selcollist is a list of expressions that are to become the return
643 // values of the SELECT statement. The "*" in statements like
644 // "SELECT * FROM ..." is encoded as a special expression with an
645 // opcode of TK_ASTERISK.
647 %type selcollist {ExprList*}
648 %destructor selcollist {sqlite3ExprListDelete(pParse->db, $$);}
649 %type sclp {ExprList*}
650 %destructor sclp {sqlite3ExprListDelete(pParse->db, $$);}
651 sclp(A) ::= selcollist(A) COMMA.
652 sclp(A) ::= . {A = 0;}
653 selcollist(A) ::= sclp(A) scanpt(B) expr(X) scanpt(Z) as(Y). {
654 A = sqlite3ExprListAppend(pParse, A, X);
655 if( Y.n>0 ) sqlite3ExprListSetName(pParse, A, &Y, 1);
656 sqlite3ExprListSetSpan(pParse,A,B,Z);
658 selcollist(A) ::= sclp(A) scanpt STAR. {
659 Expr *p = sqlite3Expr(pParse->db, TK_ASTERISK, 0);
660 A = sqlite3ExprListAppend(pParse, A, p);
662 selcollist(A) ::= sclp(A) scanpt nm(X) DOT STAR. {
663 Expr *pRight = sqlite3PExpr(pParse, TK_ASTERISK, 0, 0);
664 Expr *pLeft = tokenExpr(pParse, TK_ID, X);
665 Expr *pDot = sqlite3PExpr(pParse, TK_DOT, pLeft, pRight);
666 A = sqlite3ExprListAppend(pParse,A, pDot);
669 // An option "AS <id>" phrase that can follow one of the expressions that
670 // define the result set, or one of the tables in the FROM clause.
672 %type as {Token}
673 as(X) ::= AS nm(Y). {X = Y;}
674 as(X) ::= ids(X).
675 as(X) ::= . {X.n = 0; X.z = 0;}
678 %type seltablist {SrcList*}
679 %destructor seltablist {sqlite3SrcListDelete(pParse->db, $$);}
680 %type stl_prefix {SrcList*}
681 %destructor stl_prefix {sqlite3SrcListDelete(pParse->db, $$);}
682 %type from {SrcList*}
683 %destructor from {sqlite3SrcListDelete(pParse->db, $$);}
685 // A complete FROM clause.
687 from(A) ::= . {A = 0;}
688 from(A) ::= FROM seltablist(X). {
689 A = X;
690 sqlite3SrcListShiftJoinType(pParse,A);
693 // "seltablist" is a "Select Table List" - the content of the FROM clause
694 // in a SELECT statement. "stl_prefix" is a prefix of this list.
696 stl_prefix(A) ::= seltablist(A) joinop(Y). {
697 if( ALWAYS(A && A->nSrc>0) ) A->a[A->nSrc-1].fg.jointype = (u8)Y;
699 stl_prefix(A) ::= . {A = 0;}
700 seltablist(A) ::= stl_prefix(A) nm(Y) dbnm(D) as(Z) on_using(N). {
701 A = sqlite3SrcListAppendFromTerm(pParse,A,&Y,&D,&Z,0,&N);
703 seltablist(A) ::= stl_prefix(A) nm(Y) dbnm(D) as(Z) indexed_by(I) on_using(N). {
704 A = sqlite3SrcListAppendFromTerm(pParse,A,&Y,&D,&Z,0,&N);
705 sqlite3SrcListIndexedBy(pParse, A, &I);
707 seltablist(A) ::= stl_prefix(A) nm(Y) dbnm(D) LP exprlist(E) RP as(Z) on_using(N). {
708 A = sqlite3SrcListAppendFromTerm(pParse,A,&Y,&D,&Z,0,&N);
709 sqlite3SrcListFuncArgs(pParse, A, E);
711 %ifndef SQLITE_OMIT_SUBQUERY
712 seltablist(A) ::= stl_prefix(A) LP select(S) RP as(Z) on_using(N). {
713 A = sqlite3SrcListAppendFromTerm(pParse,A,0,0,&Z,S,&N);
715 seltablist(A) ::= stl_prefix(A) LP seltablist(F) RP as(Z) on_using(N). {
716 if( A==0 && Z.n==0 && N.pOn==0 && N.pUsing==0 ){
717 A = F;
718 }else if( ALWAYS(F!=0) && F->nSrc==1 ){
719 A = sqlite3SrcListAppendFromTerm(pParse,A,0,0,&Z,0,&N);
720 if( A ){
721 SrcItem *pNew = &A->a[A->nSrc-1];
722 SrcItem *pOld = F->a;
723 pNew->zName = pOld->zName;
724 pNew->zDatabase = pOld->zDatabase;
725 pNew->pSelect = pOld->pSelect;
726 if( pNew->pSelect && (pNew->pSelect->selFlags & SF_NestedFrom)!=0 ){
727 pNew->fg.isNestedFrom = 1;
729 if( pOld->fg.isTabFunc ){
730 pNew->u1.pFuncArg = pOld->u1.pFuncArg;
731 pOld->u1.pFuncArg = 0;
732 pOld->fg.isTabFunc = 0;
733 pNew->fg.isTabFunc = 1;
735 pOld->zName = pOld->zDatabase = 0;
736 pOld->pSelect = 0;
738 sqlite3SrcListDelete(pParse->db, F);
739 }else{
740 Select *pSubquery;
741 sqlite3SrcListShiftJoinType(pParse,F);
742 pSubquery = sqlite3SelectNew(pParse,0,F,0,0,0,0,SF_NestedFrom,0);
743 A = sqlite3SrcListAppendFromTerm(pParse,A,0,0,&Z,pSubquery,&N);
746 %endif SQLITE_OMIT_SUBQUERY
748 %type dbnm {Token}
749 dbnm(A) ::= . {A.z=0; A.n=0;}
750 dbnm(A) ::= DOT nm(X). {A = X;}
752 %type fullname {SrcList*}
753 %destructor fullname {sqlite3SrcListDelete(pParse->db, $$);}
754 fullname(A) ::= nm(X). {
755 A = sqlite3SrcListAppend(pParse,0,&X,0);
756 if( IN_RENAME_OBJECT && A ) sqlite3RenameTokenMap(pParse, A->a[0].zName, &X);
758 fullname(A) ::= nm(X) DOT nm(Y). {
759 A = sqlite3SrcListAppend(pParse,0,&X,&Y);
760 if( IN_RENAME_OBJECT && A ) sqlite3RenameTokenMap(pParse, A->a[0].zName, &Y);
763 %type xfullname {SrcList*}
764 %destructor xfullname {sqlite3SrcListDelete(pParse->db, $$);}
765 xfullname(A) ::= nm(X).
766 {A = sqlite3SrcListAppend(pParse,0,&X,0); /*A-overwrites-X*/}
767 xfullname(A) ::= nm(X) DOT nm(Y).
768 {A = sqlite3SrcListAppend(pParse,0,&X,&Y); /*A-overwrites-X*/}
769 xfullname(A) ::= nm(X) DOT nm(Y) AS nm(Z). {
770 A = sqlite3SrcListAppend(pParse,0,&X,&Y); /*A-overwrites-X*/
771 if( A ) A->a[0].zAlias = sqlite3NameFromToken(pParse->db, &Z);
773 xfullname(A) ::= nm(X) AS nm(Z). {
774 A = sqlite3SrcListAppend(pParse,0,&X,0); /*A-overwrites-X*/
775 if( A ) A->a[0].zAlias = sqlite3NameFromToken(pParse->db, &Z);
778 %type joinop {int}
779 joinop(X) ::= COMMA|JOIN. { X = JT_INNER; }
780 joinop(X) ::= JOIN_KW(A) JOIN.
781 {X = sqlite3JoinType(pParse,&A,0,0); /*X-overwrites-A*/}
782 joinop(X) ::= JOIN_KW(A) nm(B) JOIN.
783 {X = sqlite3JoinType(pParse,&A,&B,0); /*X-overwrites-A*/}
784 joinop(X) ::= JOIN_KW(A) nm(B) nm(C) JOIN.
785 {X = sqlite3JoinType(pParse,&A,&B,&C);/*X-overwrites-A*/}
787 // There is a parsing abiguity in an upsert statement that uses a
788 // SELECT on the RHS of a the INSERT:
790 // INSERT INTO tab SELECT * FROM aaa JOIN bbb ON CONFLICT ...
791 // here ----^^
793 // When the ON token is encountered, the parser does not know if it is
794 // the beginning of an ON CONFLICT clause, or the beginning of an ON
795 // clause associated with the JOIN. The conflict is resolved in favor
796 // of the JOIN. If an ON CONFLICT clause is intended, insert a dummy
797 // WHERE clause in between, like this:
799 // INSERT INTO tab SELECT * FROM aaa JOIN bbb WHERE true ON CONFLICT ...
801 // The [AND] and [OR] precedence marks in the rules for on_using cause the
802 // ON in this context to always be interpreted as belonging to the JOIN.
804 %type on_using {OnOrUsing}
805 //%destructor on_using {sqlite3ClearOnOrUsing(pParse->db, &$$);}
806 on_using(N) ::= ON expr(E). {N.pOn = E; N.pUsing = 0;}
807 on_using(N) ::= USING LP idlist(L) RP. {N.pOn = 0; N.pUsing = L;}
808 on_using(N) ::= . [OR] {N.pOn = 0; N.pUsing = 0;}
810 // Note that this block abuses the Token type just a little. If there is
811 // no "INDEXED BY" clause, the returned token is empty (z==0 && n==0). If
812 // there is an INDEXED BY clause, then the token is populated as per normal,
813 // with z pointing to the token data and n containing the number of bytes
814 // in the token.
816 // If there is a "NOT INDEXED" clause, then (z==0 && n==1), which is
817 // normally illegal. The sqlite3SrcListIndexedBy() function
818 // recognizes and interprets this as a special case.
820 %type indexed_opt {Token}
821 %type indexed_by {Token}
822 indexed_opt(A) ::= . {A.z=0; A.n=0;}
823 indexed_opt(A) ::= indexed_by(A).
824 indexed_by(A) ::= INDEXED BY nm(X). {A = X;}
825 indexed_by(A) ::= NOT INDEXED. {A.z=0; A.n=1;}
827 %type orderby_opt {ExprList*}
828 %destructor orderby_opt {sqlite3ExprListDelete(pParse->db, $$);}
830 // the sortlist non-terminal stores a list of expression where each
831 // expression is optionally followed by ASC or DESC to indicate the
832 // sort order.
834 %type sortlist {ExprList*}
835 %destructor sortlist {sqlite3ExprListDelete(pParse->db, $$);}
837 orderby_opt(A) ::= . {A = 0;}
838 orderby_opt(A) ::= ORDER BY sortlist(X). {A = X;}
839 sortlist(A) ::= sortlist(A) COMMA expr(Y) sortorder(Z) nulls(X). {
840 A = sqlite3ExprListAppend(pParse,A,Y);
841 sqlite3ExprListSetSortOrder(A,Z,X);
843 sortlist(A) ::= expr(Y) sortorder(Z) nulls(X). {
844 A = sqlite3ExprListAppend(pParse,0,Y); /*A-overwrites-Y*/
845 sqlite3ExprListSetSortOrder(A,Z,X);
848 %type sortorder {int}
850 sortorder(A) ::= ASC. {A = SQLITE_SO_ASC;}
851 sortorder(A) ::= DESC. {A = SQLITE_SO_DESC;}
852 sortorder(A) ::= . {A = SQLITE_SO_UNDEFINED;}
854 %type nulls {int}
855 nulls(A) ::= NULLS FIRST. {A = SQLITE_SO_ASC;}
856 nulls(A) ::= NULLS LAST. {A = SQLITE_SO_DESC;}
857 nulls(A) ::= . {A = SQLITE_SO_UNDEFINED;}
859 %type groupby_opt {ExprList*}
860 %destructor groupby_opt {sqlite3ExprListDelete(pParse->db, $$);}
861 groupby_opt(A) ::= . {A = 0;}
862 groupby_opt(A) ::= GROUP BY nexprlist(X). {A = X;}
864 %type having_opt {Expr*}
865 %destructor having_opt {sqlite3ExprDelete(pParse->db, $$);}
866 having_opt(A) ::= . {A = 0;}
867 having_opt(A) ::= HAVING expr(X). {A = X;}
869 %type limit_opt {Expr*}
871 // The destructor for limit_opt will never fire in the current grammar.
872 // The limit_opt non-terminal only occurs at the end of a single production
873 // rule for SELECT statements. As soon as the rule that create the
874 // limit_opt non-terminal reduces, the SELECT statement rule will also
875 // reduce. So there is never a limit_opt non-terminal on the stack
876 // except as a transient. So there is never anything to destroy.
878 //%destructor limit_opt {sqlite3ExprDelete(pParse->db, $$);}
879 limit_opt(A) ::= . {A = 0;}
880 limit_opt(A) ::= LIMIT expr(X).
881 {A = sqlite3PExpr(pParse,TK_LIMIT,X,0);}
882 limit_opt(A) ::= LIMIT expr(X) OFFSET expr(Y).
883 {A = sqlite3PExpr(pParse,TK_LIMIT,X,Y);}
884 limit_opt(A) ::= LIMIT expr(X) COMMA expr(Y).
885 {A = sqlite3PExpr(pParse,TK_LIMIT,Y,X);}
887 /////////////////////////// The DELETE statement /////////////////////////////
889 %if SQLITE_ENABLE_UPDATE_DELETE_LIMIT || SQLITE_UDL_CAPABLE_PARSER
890 cmd ::= with DELETE FROM xfullname(X) indexed_opt(I) where_opt_ret(W)
891 orderby_opt(O) limit_opt(L). {
892 sqlite3SrcListIndexedBy(pParse, X, &I);
893 #ifndef SQLITE_ENABLE_UPDATE_DELETE_LIMIT
894 if( O || L ){
895 updateDeleteLimitError(pParse,O,L);
896 O = 0;
897 L = 0;
899 #endif
900 sqlite3DeleteFrom(pParse,X,W,O,L);
902 %else
903 cmd ::= with DELETE FROM xfullname(X) indexed_opt(I) where_opt_ret(W). {
904 sqlite3SrcListIndexedBy(pParse, X, &I);
905 sqlite3DeleteFrom(pParse,X,W,0,0);
907 %endif
909 %type where_opt {Expr*}
910 %destructor where_opt {sqlite3ExprDelete(pParse->db, $$);}
911 %type where_opt_ret {Expr*}
912 %destructor where_opt_ret {sqlite3ExprDelete(pParse->db, $$);}
914 where_opt(A) ::= . {A = 0;}
915 where_opt(A) ::= WHERE expr(X). {A = X;}
916 where_opt_ret(A) ::= . {A = 0;}
917 where_opt_ret(A) ::= WHERE expr(X). {A = X;}
918 where_opt_ret(A) ::= RETURNING selcollist(X).
919 {sqlite3AddReturning(pParse,X); A = 0;}
920 where_opt_ret(A) ::= WHERE expr(X) RETURNING selcollist(Y).
921 {sqlite3AddReturning(pParse,Y); A = X;}
923 ////////////////////////// The UPDATE command ////////////////////////////////
925 %if SQLITE_ENABLE_UPDATE_DELETE_LIMIT || SQLITE_UDL_CAPABLE_PARSER
926 cmd ::= with UPDATE orconf(R) xfullname(X) indexed_opt(I) SET setlist(Y) from(F)
927 where_opt_ret(W) orderby_opt(O) limit_opt(L). {
928 sqlite3SrcListIndexedBy(pParse, X, &I);
929 if( F ){
930 SrcList *pFromClause = F;
931 if( pFromClause->nSrc>1 ){
932 Select *pSubquery;
933 Token as;
934 pSubquery = sqlite3SelectNew(pParse,0,pFromClause,0,0,0,0,SF_NestedFrom,0);
935 as.n = 0;
936 as.z = 0;
937 pFromClause = sqlite3SrcListAppendFromTerm(pParse,0,0,0,&as,pSubquery,0);
939 X = sqlite3SrcListAppendList(pParse, X, pFromClause);
941 sqlite3ExprListCheckLength(pParse,Y,"set list");
942 #ifndef SQLITE_ENABLE_UPDATE_DELETE_LIMIT
943 if( O || L ){
944 updateDeleteLimitError(pParse,O,L);
945 O = 0;
946 L = 0;
948 #endif
949 sqlite3Update(pParse,X,Y,W,R,O,L,0);
951 %else
952 cmd ::= with UPDATE orconf(R) xfullname(X) indexed_opt(I) SET setlist(Y) from(F)
953 where_opt_ret(W). {
954 sqlite3SrcListIndexedBy(pParse, X, &I);
955 sqlite3ExprListCheckLength(pParse,Y,"set list");
956 if( F ){
957 SrcList *pFromClause = F;
958 if( pFromClause->nSrc>1 ){
959 Select *pSubquery;
960 Token as;
961 pSubquery = sqlite3SelectNew(pParse,0,pFromClause,0,0,0,0,SF_NestedFrom,0);
962 as.n = 0;
963 as.z = 0;
964 pFromClause = sqlite3SrcListAppendFromTerm(pParse,0,0,0,&as,pSubquery,0);
966 X = sqlite3SrcListAppendList(pParse, X, pFromClause);
968 sqlite3Update(pParse,X,Y,W,R,0,0,0);
970 %endif
974 %type setlist {ExprList*}
975 %destructor setlist {sqlite3ExprListDelete(pParse->db, $$);}
977 setlist(A) ::= setlist(A) COMMA nm(X) EQ expr(Y). {
978 A = sqlite3ExprListAppend(pParse, A, Y);
979 sqlite3ExprListSetName(pParse, A, &X, 1);
981 setlist(A) ::= setlist(A) COMMA LP idlist(X) RP EQ expr(Y). {
982 A = sqlite3ExprListAppendVector(pParse, A, X, Y);
984 setlist(A) ::= nm(X) EQ expr(Y). {
985 A = sqlite3ExprListAppend(pParse, 0, Y);
986 sqlite3ExprListSetName(pParse, A, &X, 1);
988 setlist(A) ::= LP idlist(X) RP EQ expr(Y). {
989 A = sqlite3ExprListAppendVector(pParse, 0, X, Y);
992 ////////////////////////// The INSERT command /////////////////////////////////
994 cmd ::= with insert_cmd(R) INTO xfullname(X) idlist_opt(F) select(S)
995 upsert(U). {
996 sqlite3Insert(pParse, X, S, F, R, U);
998 cmd ::= with insert_cmd(R) INTO xfullname(X) idlist_opt(F) DEFAULT VALUES returning.
1000 sqlite3Insert(pParse, X, 0, F, R, 0);
1003 %type upsert {Upsert*}
1005 // Because upsert only occurs at the tip end of the INSERT rule for cmd,
1006 // there is never a case where the value of the upsert pointer will not
1007 // be destroyed by the cmd action. So comment-out the destructor to
1008 // avoid unreachable code.
1009 //%destructor upsert {sqlite3UpsertDelete(pParse->db,$$);}
1010 upsert(A) ::= . { A = 0; }
1011 upsert(A) ::= RETURNING selcollist(X). { A = 0; sqlite3AddReturning(pParse,X); }
1012 upsert(A) ::= ON CONFLICT LP sortlist(T) RP where_opt(TW)
1013 DO UPDATE SET setlist(Z) where_opt(W) upsert(N).
1014 { A = sqlite3UpsertNew(pParse->db,T,TW,Z,W,N);}
1015 upsert(A) ::= ON CONFLICT LP sortlist(T) RP where_opt(TW) DO NOTHING upsert(N).
1016 { A = sqlite3UpsertNew(pParse->db,T,TW,0,0,N); }
1017 upsert(A) ::= ON CONFLICT DO NOTHING returning.
1018 { A = sqlite3UpsertNew(pParse->db,0,0,0,0,0); }
1019 upsert(A) ::= ON CONFLICT DO UPDATE SET setlist(Z) where_opt(W) returning.
1020 { A = sqlite3UpsertNew(pParse->db,0,0,Z,W,0);}
1022 returning ::= RETURNING selcollist(X). {sqlite3AddReturning(pParse,X);}
1023 returning ::= .
1025 %type insert_cmd {int}
1026 insert_cmd(A) ::= INSERT orconf(R). {A = R;}
1027 insert_cmd(A) ::= REPLACE. {A = OE_Replace;}
1029 %type idlist_opt {IdList*}
1030 %destructor idlist_opt {sqlite3IdListDelete(pParse->db, $$);}
1031 %type idlist {IdList*}
1032 %destructor idlist {sqlite3IdListDelete(pParse->db, $$);}
1034 idlist_opt(A) ::= . {A = 0;}
1035 idlist_opt(A) ::= LP idlist(X) RP. {A = X;}
1036 idlist(A) ::= idlist(A) COMMA nm(Y).
1037 {A = sqlite3IdListAppend(pParse,A,&Y);}
1038 idlist(A) ::= nm(Y).
1039 {A = sqlite3IdListAppend(pParse,0,&Y); /*A-overwrites-Y*/}
1041 /////////////////////////// Expression Processing /////////////////////////////
1044 %type expr {Expr*}
1045 %destructor expr {sqlite3ExprDelete(pParse->db, $$);}
1046 %type term {Expr*}
1047 %destructor term {sqlite3ExprDelete(pParse->db, $$);}
1049 %include {
1051 /* Construct a new Expr object from a single token */
1052 static Expr *tokenExpr(Parse *pParse, int op, Token t){
1053 Expr *p = sqlite3DbMallocRawNN(pParse->db, sizeof(Expr)+t.n+1);
1054 if( p ){
1055 /* memset(p, 0, sizeof(Expr)); */
1056 p->op = (u8)op;
1057 p->affExpr = 0;
1058 p->flags = EP_Leaf;
1059 ExprClearVVAProperties(p);
1060 /* p->iAgg = -1; // Not required */
1061 p->pLeft = p->pRight = 0;
1062 p->pAggInfo = 0;
1063 memset(&p->x, 0, sizeof(p->x));
1064 memset(&p->y, 0, sizeof(p->y));
1065 p->op2 = 0;
1066 p->iTable = 0;
1067 p->iColumn = 0;
1068 p->u.zToken = (char*)&p[1];
1069 memcpy(p->u.zToken, t.z, t.n);
1070 p->u.zToken[t.n] = 0;
1071 p->w.iOfst = (int)(t.z - pParse->zTail);
1072 if( sqlite3Isquote(p->u.zToken[0]) ){
1073 sqlite3DequoteExpr(p);
1075 #if SQLITE_MAX_EXPR_DEPTH>0
1076 p->nHeight = 1;
1077 #endif
1078 if( IN_RENAME_OBJECT ){
1079 return (Expr*)sqlite3RenameTokenMap(pParse, (void*)p, &t);
1082 return p;
1087 expr(A) ::= term(A).
1088 expr(A) ::= LP expr(X) RP. {A = X;}
1089 expr(A) ::= idj(X). {A=tokenExpr(pParse,TK_ID,X); /*A-overwrites-X*/}
1090 expr(A) ::= nm(X) DOT nm(Y). {
1091 Expr *temp1 = tokenExpr(pParse,TK_ID,X);
1092 Expr *temp2 = tokenExpr(pParse,TK_ID,Y);
1093 A = sqlite3PExpr(pParse, TK_DOT, temp1, temp2);
1095 expr(A) ::= nm(X) DOT nm(Y) DOT nm(Z). {
1096 Expr *temp1 = tokenExpr(pParse,TK_ID,X);
1097 Expr *temp2 = tokenExpr(pParse,TK_ID,Y);
1098 Expr *temp3 = tokenExpr(pParse,TK_ID,Z);
1099 Expr *temp4 = sqlite3PExpr(pParse, TK_DOT, temp2, temp3);
1100 if( IN_RENAME_OBJECT ){
1101 sqlite3RenameTokenRemap(pParse, 0, temp1);
1103 A = sqlite3PExpr(pParse, TK_DOT, temp1, temp4);
1105 term(A) ::= NULL|FLOAT|BLOB(X). {A=tokenExpr(pParse,@X,X); /*A-overwrites-X*/}
1106 term(A) ::= STRING(X). {A=tokenExpr(pParse,@X,X); /*A-overwrites-X*/}
1107 term(A) ::= INTEGER(X). {
1108 A = sqlite3ExprAlloc(pParse->db, TK_INTEGER, &X, 1);
1109 if( A ) A->w.iOfst = (int)(X.z - pParse->zTail);
1111 expr(A) ::= VARIABLE(X). {
1112 if( !(X.z[0]=='#' && sqlite3Isdigit(X.z[1])) ){
1113 u32 n = X.n;
1114 A = tokenExpr(pParse, TK_VARIABLE, X);
1115 sqlite3ExprAssignVarNumber(pParse, A, n);
1116 }else{
1117 /* When doing a nested parse, one can include terms in an expression
1118 ** that look like this: #1 #2 ... These terms refer to registers
1119 ** in the virtual machine. #N is the N-th register. */
1120 Token t = X; /*A-overwrites-X*/
1121 assert( t.n>=2 );
1122 if( pParse->nested==0 ){
1123 sqlite3ErrorMsg(pParse, "near \"%T\": syntax error", &t);
1124 A = 0;
1125 }else{
1126 A = sqlite3PExpr(pParse, TK_REGISTER, 0, 0);
1127 if( A ) sqlite3GetInt32(&t.z[1], &A->iTable);
1131 expr(A) ::= expr(A) COLLATE ids(C). {
1132 A = sqlite3ExprAddCollateToken(pParse, A, &C, 1);
1134 %ifndef SQLITE_OMIT_CAST
1135 expr(A) ::= CAST LP expr(E) AS typetoken(T) RP. {
1136 A = sqlite3ExprAlloc(pParse->db, TK_CAST, &T, 1);
1137 sqlite3ExprAttachSubtrees(pParse->db, A, E, 0);
1139 %endif SQLITE_OMIT_CAST
1142 expr(A) ::= idj(X) LP distinct(D) exprlist(Y) RP. {
1143 A = sqlite3ExprFunction(pParse, Y, &X, D);
1145 expr(A) ::= idj(X) LP STAR RP. {
1146 A = sqlite3ExprFunction(pParse, 0, &X, 0);
1149 %ifndef SQLITE_OMIT_WINDOWFUNC
1150 expr(A) ::= idj(X) LP distinct(D) exprlist(Y) RP filter_over(Z). {
1151 A = sqlite3ExprFunction(pParse, Y, &X, D);
1152 sqlite3WindowAttach(pParse, A, Z);
1154 expr(A) ::= idj(X) LP STAR RP filter_over(Z). {
1155 A = sqlite3ExprFunction(pParse, 0, &X, 0);
1156 sqlite3WindowAttach(pParse, A, Z);
1158 %endif
1160 term(A) ::= CTIME_KW(OP). {
1161 A = sqlite3ExprFunction(pParse, 0, &OP, 0);
1164 expr(A) ::= LP nexprlist(X) COMMA expr(Y) RP. {
1165 ExprList *pList = sqlite3ExprListAppend(pParse, X, Y);
1166 A = sqlite3PExpr(pParse, TK_VECTOR, 0, 0);
1167 if( A ){
1168 A->x.pList = pList;
1169 if( ALWAYS(pList->nExpr) ){
1170 A->flags |= pList->a[0].pExpr->flags & EP_Propagate;
1172 }else{
1173 sqlite3ExprListDelete(pParse->db, pList);
1177 expr(A) ::= expr(A) AND expr(Y). {A=sqlite3ExprAnd(pParse,A,Y);}
1178 expr(A) ::= expr(A) OR(OP) expr(Y). {A=sqlite3PExpr(pParse,@OP,A,Y);}
1179 expr(A) ::= expr(A) LT|GT|GE|LE(OP) expr(Y).
1180 {A=sqlite3PExpr(pParse,@OP,A,Y);}
1181 expr(A) ::= expr(A) EQ|NE(OP) expr(Y). {A=sqlite3PExpr(pParse,@OP,A,Y);}
1182 expr(A) ::= expr(A) BITAND|BITOR|LSHIFT|RSHIFT(OP) expr(Y).
1183 {A=sqlite3PExpr(pParse,@OP,A,Y);}
1184 expr(A) ::= expr(A) PLUS|MINUS(OP) expr(Y).
1185 {A=sqlite3PExpr(pParse,@OP,A,Y);}
1186 expr(A) ::= expr(A) STAR|SLASH|REM(OP) expr(Y).
1187 {A=sqlite3PExpr(pParse,@OP,A,Y);}
1188 expr(A) ::= expr(A) CONCAT(OP) expr(Y). {A=sqlite3PExpr(pParse,@OP,A,Y);}
1189 %type likeop {Token}
1190 likeop(A) ::= LIKE_KW|MATCH(A).
1191 likeop(A) ::= NOT LIKE_KW|MATCH(X). {A=X; A.n|=0x80000000; /*A-overwrite-X*/}
1192 expr(A) ::= expr(A) likeop(OP) expr(Y). [LIKE_KW] {
1193 ExprList *pList;
1194 int bNot = OP.n & 0x80000000;
1195 OP.n &= 0x7fffffff;
1196 pList = sqlite3ExprListAppend(pParse,0, Y);
1197 pList = sqlite3ExprListAppend(pParse,pList, A);
1198 A = sqlite3ExprFunction(pParse, pList, &OP, 0);
1199 if( bNot ) A = sqlite3PExpr(pParse, TK_NOT, A, 0);
1200 if( A ) A->flags |= EP_InfixFunc;
1202 expr(A) ::= expr(A) likeop(OP) expr(Y) ESCAPE expr(E). [LIKE_KW] {
1203 ExprList *pList;
1204 int bNot = OP.n & 0x80000000;
1205 OP.n &= 0x7fffffff;
1206 pList = sqlite3ExprListAppend(pParse,0, Y);
1207 pList = sqlite3ExprListAppend(pParse,pList, A);
1208 pList = sqlite3ExprListAppend(pParse,pList, E);
1209 A = sqlite3ExprFunction(pParse, pList, &OP, 0);
1210 if( bNot ) A = sqlite3PExpr(pParse, TK_NOT, A, 0);
1211 if( A ) A->flags |= EP_InfixFunc;
1214 expr(A) ::= expr(A) ISNULL|NOTNULL(E). {A = sqlite3PExpr(pParse,@E,A,0);}
1215 expr(A) ::= expr(A) NOT NULL. {A = sqlite3PExpr(pParse,TK_NOTNULL,A,0);}
1217 %include {
1218 /* A routine to convert a binary TK_IS or TK_ISNOT expression into a
1219 ** unary TK_ISNULL or TK_NOTNULL expression. */
1220 static void binaryToUnaryIfNull(Parse *pParse, Expr *pY, Expr *pA, int op){
1221 sqlite3 *db = pParse->db;
1222 if( pA && pY && pY->op==TK_NULL && !IN_RENAME_OBJECT ){
1223 pA->op = (u8)op;
1224 sqlite3ExprDelete(db, pA->pRight);
1225 pA->pRight = 0;
1230 // expr1 IS expr2
1231 // expr1 IS NOT expr2
1233 // If expr2 is NULL then code as TK_ISNULL or TK_NOTNULL. If expr2
1234 // is any other expression, code as TK_IS or TK_ISNOT.
1236 expr(A) ::= expr(A) IS expr(Y). {
1237 A = sqlite3PExpr(pParse,TK_IS,A,Y);
1238 binaryToUnaryIfNull(pParse, Y, A, TK_ISNULL);
1240 expr(A) ::= expr(A) IS NOT expr(Y). {
1241 A = sqlite3PExpr(pParse,TK_ISNOT,A,Y);
1242 binaryToUnaryIfNull(pParse, Y, A, TK_NOTNULL);
1244 expr(A) ::= expr(A) IS NOT DISTINCT FROM expr(Y). {
1245 A = sqlite3PExpr(pParse,TK_IS,A,Y);
1246 binaryToUnaryIfNull(pParse, Y, A, TK_ISNULL);
1248 expr(A) ::= expr(A) IS DISTINCT FROM expr(Y). {
1249 A = sqlite3PExpr(pParse,TK_ISNOT,A,Y);
1250 binaryToUnaryIfNull(pParse, Y, A, TK_NOTNULL);
1253 expr(A) ::= NOT(B) expr(X).
1254 {A = sqlite3PExpr(pParse, @B, X, 0);/*A-overwrites-B*/}
1255 expr(A) ::= BITNOT(B) expr(X).
1256 {A = sqlite3PExpr(pParse, @B, X, 0);/*A-overwrites-B*/}
1257 expr(A) ::= PLUS|MINUS(B) expr(X). [BITNOT] {
1258 A = sqlite3PExpr(pParse, @B==TK_PLUS ? TK_UPLUS : TK_UMINUS, X, 0);
1259 /*A-overwrites-B*/
1262 expr(A) ::= expr(B) PTR(C) expr(D). {
1263 ExprList *pList = sqlite3ExprListAppend(pParse, 0, B);
1264 pList = sqlite3ExprListAppend(pParse, pList, D);
1265 A = sqlite3ExprFunction(pParse, pList, &C, 0);
1268 %type between_op {int}
1269 between_op(A) ::= BETWEEN. {A = 0;}
1270 between_op(A) ::= NOT BETWEEN. {A = 1;}
1271 expr(A) ::= expr(A) between_op(N) expr(X) AND expr(Y). [BETWEEN] {
1272 ExprList *pList = sqlite3ExprListAppend(pParse,0, X);
1273 pList = sqlite3ExprListAppend(pParse,pList, Y);
1274 A = sqlite3PExpr(pParse, TK_BETWEEN, A, 0);
1275 if( A ){
1276 A->x.pList = pList;
1277 }else{
1278 sqlite3ExprListDelete(pParse->db, pList);
1280 if( N ) A = sqlite3PExpr(pParse, TK_NOT, A, 0);
1282 %ifndef SQLITE_OMIT_SUBQUERY
1283 %type in_op {int}
1284 in_op(A) ::= IN. {A = 0;}
1285 in_op(A) ::= NOT IN. {A = 1;}
1286 expr(A) ::= expr(A) in_op(N) LP exprlist(Y) RP. [IN] {
1287 if( Y==0 ){
1288 /* Expressions of the form
1290 ** expr1 IN ()
1291 ** expr1 NOT IN ()
1293 ** simplify to constants 0 (false) and 1 (true), respectively,
1294 ** regardless of the value of expr1.
1296 sqlite3ExprUnmapAndDelete(pParse, A);
1297 A = sqlite3Expr(pParse->db, TK_STRING, N ? "true" : "false");
1298 if( A ) sqlite3ExprIdToTrueFalse(A);
1299 }else{
1300 Expr *pRHS = Y->a[0].pExpr;
1301 if( Y->nExpr==1 && sqlite3ExprIsConstant(pRHS) && A->op!=TK_VECTOR ){
1302 Y->a[0].pExpr = 0;
1303 sqlite3ExprListDelete(pParse->db, Y);
1304 pRHS = sqlite3PExpr(pParse, TK_UPLUS, pRHS, 0);
1305 A = sqlite3PExpr(pParse, TK_EQ, A, pRHS);
1306 }else if( Y->nExpr==1 && pRHS->op==TK_SELECT ){
1307 A = sqlite3PExpr(pParse, TK_IN, A, 0);
1308 sqlite3PExprAddSelect(pParse, A, pRHS->x.pSelect);
1309 pRHS->x.pSelect = 0;
1310 sqlite3ExprListDelete(pParse->db, Y);
1311 }else{
1312 A = sqlite3PExpr(pParse, TK_IN, A, 0);
1313 if( A==0 ){
1314 sqlite3ExprListDelete(pParse->db, Y);
1315 }else if( A->pLeft->op==TK_VECTOR ){
1316 int nExpr = A->pLeft->x.pList->nExpr;
1317 Select *pSelectRHS = sqlite3ExprListToValues(pParse, nExpr, Y);
1318 if( pSelectRHS ){
1319 parserDoubleLinkSelect(pParse, pSelectRHS);
1320 sqlite3PExprAddSelect(pParse, A, pSelectRHS);
1322 }else{
1323 A->x.pList = Y;
1324 sqlite3ExprSetHeightAndFlags(pParse, A);
1327 if( N ) A = sqlite3PExpr(pParse, TK_NOT, A, 0);
1330 expr(A) ::= LP select(X) RP. {
1331 A = sqlite3PExpr(pParse, TK_SELECT, 0, 0);
1332 sqlite3PExprAddSelect(pParse, A, X);
1334 expr(A) ::= expr(A) in_op(N) LP select(Y) RP. [IN] {
1335 A = sqlite3PExpr(pParse, TK_IN, A, 0);
1336 sqlite3PExprAddSelect(pParse, A, Y);
1337 if( N ) A = sqlite3PExpr(pParse, TK_NOT, A, 0);
1339 expr(A) ::= expr(A) in_op(N) nm(Y) dbnm(Z) paren_exprlist(E). [IN] {
1340 SrcList *pSrc = sqlite3SrcListAppend(pParse, 0,&Y,&Z);
1341 Select *pSelect = sqlite3SelectNew(pParse, 0,pSrc,0,0,0,0,0,0);
1342 if( E ) sqlite3SrcListFuncArgs(pParse, pSelect ? pSrc : 0, E);
1343 A = sqlite3PExpr(pParse, TK_IN, A, 0);
1344 sqlite3PExprAddSelect(pParse, A, pSelect);
1345 if( N ) A = sqlite3PExpr(pParse, TK_NOT, A, 0);
1347 expr(A) ::= EXISTS LP select(Y) RP. {
1348 Expr *p;
1349 p = A = sqlite3PExpr(pParse, TK_EXISTS, 0, 0);
1350 sqlite3PExprAddSelect(pParse, p, Y);
1352 %endif SQLITE_OMIT_SUBQUERY
1354 /* CASE expressions */
1355 expr(A) ::= CASE case_operand(X) case_exprlist(Y) case_else(Z) END. {
1356 A = sqlite3PExpr(pParse, TK_CASE, X, 0);
1357 if( A ){
1358 A->x.pList = Z ? sqlite3ExprListAppend(pParse,Y,Z) : Y;
1359 sqlite3ExprSetHeightAndFlags(pParse, A);
1360 }else{
1361 sqlite3ExprListDelete(pParse->db, Y);
1362 sqlite3ExprDelete(pParse->db, Z);
1365 %type case_exprlist {ExprList*}
1366 %destructor case_exprlist {sqlite3ExprListDelete(pParse->db, $$);}
1367 case_exprlist(A) ::= case_exprlist(A) WHEN expr(Y) THEN expr(Z). {
1368 A = sqlite3ExprListAppend(pParse,A, Y);
1369 A = sqlite3ExprListAppend(pParse,A, Z);
1371 case_exprlist(A) ::= WHEN expr(Y) THEN expr(Z). {
1372 A = sqlite3ExprListAppend(pParse,0, Y);
1373 A = sqlite3ExprListAppend(pParse,A, Z);
1375 %type case_else {Expr*}
1376 %destructor case_else {sqlite3ExprDelete(pParse->db, $$);}
1377 case_else(A) ::= ELSE expr(X). {A = X;}
1378 case_else(A) ::= . {A = 0;}
1379 %type case_operand {Expr*}
1380 %destructor case_operand {sqlite3ExprDelete(pParse->db, $$);}
1381 case_operand(A) ::= expr(A).
1382 case_operand(A) ::= . {A = 0;}
1384 %type exprlist {ExprList*}
1385 %destructor exprlist {sqlite3ExprListDelete(pParse->db, $$);}
1386 %type nexprlist {ExprList*}
1387 %destructor nexprlist {sqlite3ExprListDelete(pParse->db, $$);}
1389 exprlist(A) ::= nexprlist(A).
1390 exprlist(A) ::= . {A = 0;}
1391 nexprlist(A) ::= nexprlist(A) COMMA expr(Y).
1392 {A = sqlite3ExprListAppend(pParse,A,Y);}
1393 nexprlist(A) ::= expr(Y).
1394 {A = sqlite3ExprListAppend(pParse,0,Y); /*A-overwrites-Y*/}
1396 %ifndef SQLITE_OMIT_SUBQUERY
1397 /* A paren_exprlist is an optional expression list contained inside
1398 ** of parenthesis */
1399 %type paren_exprlist {ExprList*}
1400 %destructor paren_exprlist {sqlite3ExprListDelete(pParse->db, $$);}
1401 paren_exprlist(A) ::= . {A = 0;}
1402 paren_exprlist(A) ::= LP exprlist(X) RP. {A = X;}
1403 %endif SQLITE_OMIT_SUBQUERY
1406 ///////////////////////////// The CREATE INDEX command ///////////////////////
1408 cmd ::= createkw(S) uniqueflag(U) INDEX ifnotexists(NE) nm(X) dbnm(D)
1409 ON nm(Y) LP sortlist(Z) RP where_opt(W). {
1410 sqlite3CreateIndex(pParse, &X, &D,
1411 sqlite3SrcListAppend(pParse,0,&Y,0), Z, U,
1412 &S, W, SQLITE_SO_ASC, NE, SQLITE_IDXTYPE_APPDEF);
1413 if( IN_RENAME_OBJECT && pParse->pNewIndex ){
1414 sqlite3RenameTokenMap(pParse, pParse->pNewIndex->zName, &Y);
1418 %type uniqueflag {int}
1419 uniqueflag(A) ::= UNIQUE. {A = OE_Abort;}
1420 uniqueflag(A) ::= . {A = OE_None;}
1423 // The eidlist non-terminal (Expression Id List) generates an ExprList
1424 // from a list of identifiers. The identifier names are in ExprList.a[].zName.
1425 // This list is stored in an ExprList rather than an IdList so that it
1426 // can be easily sent to sqlite3ColumnsExprList().
1428 // eidlist is grouped with CREATE INDEX because it used to be the non-terminal
1429 // used for the arguments to an index. That is just an historical accident.
1431 // IMPORTANT COMPATIBILITY NOTE: Some prior versions of SQLite accepted
1432 // COLLATE clauses and ASC or DESC keywords on ID lists in inappropriate
1433 // places - places that might have been stored in the sqlite_schema table.
1434 // Those extra features were ignored. But because they might be in some
1435 // (busted) old databases, we need to continue parsing them when loading
1436 // historical schemas.
1438 %type eidlist {ExprList*}
1439 %destructor eidlist {sqlite3ExprListDelete(pParse->db, $$);}
1440 %type eidlist_opt {ExprList*}
1441 %destructor eidlist_opt {sqlite3ExprListDelete(pParse->db, $$);}
1443 %include {
1444 /* Add a single new term to an ExprList that is used to store a
1445 ** list of identifiers. Report an error if the ID list contains
1446 ** a COLLATE clause or an ASC or DESC keyword, except ignore the
1447 ** error while parsing a legacy schema.
1449 static ExprList *parserAddExprIdListTerm(
1450 Parse *pParse,
1451 ExprList *pPrior,
1452 Token *pIdToken,
1453 int hasCollate,
1454 int sortOrder
1456 ExprList *p = sqlite3ExprListAppend(pParse, pPrior, 0);
1457 if( (hasCollate || sortOrder!=SQLITE_SO_UNDEFINED)
1458 && pParse->db->init.busy==0
1460 sqlite3ErrorMsg(pParse, "syntax error after column name \"%.*s\"",
1461 pIdToken->n, pIdToken->z);
1463 sqlite3ExprListSetName(pParse, p, pIdToken, 1);
1464 return p;
1466 } // end %include
1468 eidlist_opt(A) ::= . {A = 0;}
1469 eidlist_opt(A) ::= LP eidlist(X) RP. {A = X;}
1470 eidlist(A) ::= eidlist(A) COMMA nm(Y) collate(C) sortorder(Z). {
1471 A = parserAddExprIdListTerm(pParse, A, &Y, C, Z);
1473 eidlist(A) ::= nm(Y) collate(C) sortorder(Z). {
1474 A = parserAddExprIdListTerm(pParse, 0, &Y, C, Z); /*A-overwrites-Y*/
1477 %type collate {int}
1478 collate(C) ::= . {C = 0;}
1479 collate(C) ::= COLLATE ids. {C = 1;}
1482 ///////////////////////////// The DROP INDEX command /////////////////////////
1484 cmd ::= DROP INDEX ifexists(E) fullname(X). {sqlite3DropIndex(pParse, X, E);}
1486 ///////////////////////////// The VACUUM command /////////////////////////////
1488 %if !SQLITE_OMIT_VACUUM && !SQLITE_OMIT_ATTACH
1489 %type vinto {Expr*}
1490 %destructor vinto {sqlite3ExprDelete(pParse->db, $$);}
1491 cmd ::= VACUUM vinto(Y). {sqlite3Vacuum(pParse,0,Y);}
1492 cmd ::= VACUUM nm(X) vinto(Y). {sqlite3Vacuum(pParse,&X,Y);}
1493 vinto(A) ::= INTO expr(X). {A = X;}
1494 vinto(A) ::= . {A = 0;}
1495 %endif
1497 ///////////////////////////// The PRAGMA command /////////////////////////////
1499 %ifndef SQLITE_OMIT_PRAGMA
1500 cmd ::= PRAGMA nm(X) dbnm(Z). {sqlite3Pragma(pParse,&X,&Z,0,0);}
1501 cmd ::= PRAGMA nm(X) dbnm(Z) EQ nmnum(Y). {sqlite3Pragma(pParse,&X,&Z,&Y,0);}
1502 cmd ::= PRAGMA nm(X) dbnm(Z) LP nmnum(Y) RP. {sqlite3Pragma(pParse,&X,&Z,&Y,0);}
1503 cmd ::= PRAGMA nm(X) dbnm(Z) EQ minus_num(Y).
1504 {sqlite3Pragma(pParse,&X,&Z,&Y,1);}
1505 cmd ::= PRAGMA nm(X) dbnm(Z) LP minus_num(Y) RP.
1506 {sqlite3Pragma(pParse,&X,&Z,&Y,1);}
1508 nmnum(A) ::= plus_num(A).
1509 nmnum(A) ::= nm(A).
1510 nmnum(A) ::= ON(A).
1511 nmnum(A) ::= DELETE(A).
1512 nmnum(A) ::= DEFAULT(A).
1513 %endif SQLITE_OMIT_PRAGMA
1514 %token_class number INTEGER|FLOAT.
1515 plus_num(A) ::= PLUS number(X). {A = X;}
1516 plus_num(A) ::= number(A).
1517 minus_num(A) ::= MINUS number(X). {A = X;}
1518 //////////////////////////// The CREATE TRIGGER command /////////////////////
1520 %ifndef SQLITE_OMIT_TRIGGER
1522 cmd ::= createkw trigger_decl(A) BEGIN trigger_cmd_list(S) END(Z). {
1523 Token all;
1524 all.z = A.z;
1525 all.n = (int)(Z.z - A.z) + Z.n;
1526 sqlite3FinishTrigger(pParse, S, &all);
1529 trigger_decl(A) ::= temp(T) TRIGGER ifnotexists(NOERR) nm(B) dbnm(Z)
1530 trigger_time(C) trigger_event(D)
1531 ON fullname(E) foreach_clause when_clause(G). {
1532 sqlite3BeginTrigger(pParse, &B, &Z, C, D.a, D.b, E, G, T, NOERR);
1533 A = (Z.n==0?B:Z); /*A-overwrites-T*/
1536 %type trigger_time {int}
1537 trigger_time(A) ::= BEFORE|AFTER(X). { A = @X; /*A-overwrites-X*/ }
1538 trigger_time(A) ::= INSTEAD OF. { A = TK_INSTEAD;}
1539 trigger_time(A) ::= . { A = TK_BEFORE; }
1541 %type trigger_event {struct TrigEvent}
1542 %destructor trigger_event {sqlite3IdListDelete(pParse->db, $$.b);}
1543 trigger_event(A) ::= DELETE|INSERT(X). {A.a = @X; /*A-overwrites-X*/ A.b = 0;}
1544 trigger_event(A) ::= UPDATE(X). {A.a = @X; /*A-overwrites-X*/ A.b = 0;}
1545 trigger_event(A) ::= UPDATE OF idlist(X).{A.a = TK_UPDATE; A.b = X;}
1547 foreach_clause ::= .
1548 foreach_clause ::= FOR EACH ROW.
1550 %type when_clause {Expr*}
1551 %destructor when_clause {sqlite3ExprDelete(pParse->db, $$);}
1552 when_clause(A) ::= . { A = 0; }
1553 when_clause(A) ::= WHEN expr(X). { A = X; }
1555 %type trigger_cmd_list {TriggerStep*}
1556 %destructor trigger_cmd_list {sqlite3DeleteTriggerStep(pParse->db, $$);}
1557 trigger_cmd_list(A) ::= trigger_cmd_list(A) trigger_cmd(X) SEMI. {
1558 assert( A!=0 );
1559 A->pLast->pNext = X;
1560 A->pLast = X;
1562 trigger_cmd_list(A) ::= trigger_cmd(A) SEMI. {
1563 assert( A!=0 );
1564 A->pLast = A;
1567 // Disallow qualified table names on INSERT, UPDATE, and DELETE statements
1568 // within a trigger. The table to INSERT, UPDATE, or DELETE is always in
1569 // the same database as the table that the trigger fires on.
1571 %type trnm {Token}
1572 trnm(A) ::= nm(A).
1573 trnm(A) ::= nm DOT nm(X). {
1574 A = X;
1575 sqlite3ErrorMsg(pParse,
1576 "qualified table names are not allowed on INSERT, UPDATE, and DELETE "
1577 "statements within triggers");
1580 // Disallow the INDEX BY and NOT INDEXED clauses on UPDATE and DELETE
1581 // statements within triggers. We make a specific error message for this
1582 // since it is an exception to the default grammar rules.
1584 tridxby ::= .
1585 tridxby ::= INDEXED BY nm. {
1586 sqlite3ErrorMsg(pParse,
1587 "the INDEXED BY clause is not allowed on UPDATE or DELETE statements "
1588 "within triggers");
1590 tridxby ::= NOT INDEXED. {
1591 sqlite3ErrorMsg(pParse,
1592 "the NOT INDEXED clause is not allowed on UPDATE or DELETE statements "
1593 "within triggers");
1598 %type trigger_cmd {TriggerStep*}
1599 %destructor trigger_cmd {sqlite3DeleteTriggerStep(pParse->db, $$);}
1600 // UPDATE
1601 trigger_cmd(A) ::=
1602 UPDATE(B) orconf(R) trnm(X) tridxby SET setlist(Y) from(F) where_opt(Z) scanpt(E).
1603 {A = sqlite3TriggerUpdateStep(pParse, &X, F, Y, Z, R, B.z, E);}
1605 // INSERT
1606 trigger_cmd(A) ::= scanpt(B) insert_cmd(R) INTO
1607 trnm(X) idlist_opt(F) select(S) upsert(U) scanpt(Z). {
1608 A = sqlite3TriggerInsertStep(pParse,&X,F,S,R,U,B,Z);/*A-overwrites-R*/
1610 // DELETE
1611 trigger_cmd(A) ::= DELETE(B) FROM trnm(X) tridxby where_opt(Y) scanpt(E).
1612 {A = sqlite3TriggerDeleteStep(pParse, &X, Y, B.z, E);}
1614 // SELECT
1615 trigger_cmd(A) ::= scanpt(B) select(X) scanpt(E).
1616 {A = sqlite3TriggerSelectStep(pParse->db, X, B, E); /*A-overwrites-X*/}
1618 // The special RAISE expression that may occur in trigger programs
1619 expr(A) ::= RAISE LP IGNORE RP. {
1620 A = sqlite3PExpr(pParse, TK_RAISE, 0, 0);
1621 if( A ){
1622 A->affExpr = OE_Ignore;
1625 expr(A) ::= RAISE LP raisetype(T) COMMA nm(Z) RP. {
1626 A = sqlite3ExprAlloc(pParse->db, TK_RAISE, &Z, 1);
1627 if( A ) {
1628 A->affExpr = (char)T;
1631 %endif !SQLITE_OMIT_TRIGGER
1633 %type raisetype {int}
1634 raisetype(A) ::= ROLLBACK. {A = OE_Rollback;}
1635 raisetype(A) ::= ABORT. {A = OE_Abort;}
1636 raisetype(A) ::= FAIL. {A = OE_Fail;}
1639 //////////////////////// DROP TRIGGER statement //////////////////////////////
1640 %ifndef SQLITE_OMIT_TRIGGER
1641 cmd ::= DROP TRIGGER ifexists(NOERR) fullname(X). {
1642 sqlite3DropTrigger(pParse,X,NOERR);
1644 %endif !SQLITE_OMIT_TRIGGER
1646 //////////////////////// ATTACH DATABASE file AS name /////////////////////////
1647 %ifndef SQLITE_OMIT_ATTACH
1648 cmd ::= ATTACH database_kw_opt expr(F) AS expr(D) key_opt(K). {
1649 sqlite3Attach(pParse, F, D, K);
1651 cmd ::= DETACH database_kw_opt expr(D). {
1652 sqlite3Detach(pParse, D);
1655 %type key_opt {Expr*}
1656 %destructor key_opt {sqlite3ExprDelete(pParse->db, $$);}
1657 key_opt(A) ::= . { A = 0; }
1658 key_opt(A) ::= KEY expr(X). { A = X; }
1660 database_kw_opt ::= DATABASE.
1661 database_kw_opt ::= .
1662 %endif SQLITE_OMIT_ATTACH
1664 ////////////////////////// REINDEX collation //////////////////////////////////
1665 %ifndef SQLITE_OMIT_REINDEX
1666 cmd ::= REINDEX. {sqlite3Reindex(pParse, 0, 0);}
1667 cmd ::= REINDEX nm(X) dbnm(Y). {sqlite3Reindex(pParse, &X, &Y);}
1668 %endif SQLITE_OMIT_REINDEX
1670 /////////////////////////////////// ANALYZE ///////////////////////////////////
1671 %ifndef SQLITE_OMIT_ANALYZE
1672 cmd ::= ANALYZE. {sqlite3Analyze(pParse, 0, 0);}
1673 cmd ::= ANALYZE nm(X) dbnm(Y). {sqlite3Analyze(pParse, &X, &Y);}
1674 %endif
1676 //////////////////////// ALTER TABLE table ... ////////////////////////////////
1677 %ifndef SQLITE_OMIT_ALTERTABLE
1678 %ifndef SQLITE_OMIT_VIRTUALTABLE
1679 cmd ::= ALTER TABLE fullname(X) RENAME TO nm(Z). {
1680 sqlite3AlterRenameTable(pParse,X,&Z);
1682 cmd ::= ALTER TABLE add_column_fullname
1683 ADD kwcolumn_opt columnname(Y) carglist. {
1684 Y.n = (int)(pParse->sLastToken.z-Y.z) + pParse->sLastToken.n;
1685 sqlite3AlterFinishAddColumn(pParse, &Y);
1687 cmd ::= ALTER TABLE fullname(X) DROP kwcolumn_opt nm(Y). {
1688 sqlite3AlterDropColumn(pParse, X, &Y);
1691 add_column_fullname ::= fullname(X). {
1692 disableLookaside(pParse);
1693 sqlite3AlterBeginAddColumn(pParse, X);
1695 cmd ::= ALTER TABLE fullname(X) RENAME kwcolumn_opt nm(Y) TO nm(Z). {
1696 sqlite3AlterRenameColumn(pParse, X, &Y, &Z);
1699 kwcolumn_opt ::= .
1700 kwcolumn_opt ::= COLUMNKW.
1702 %endif SQLITE_OMIT_VIRTUALTABLE
1703 %endif SQLITE_OMIT_ALTERTABLE
1705 //////////////////////// CREATE VIRTUAL TABLE ... /////////////////////////////
1706 %ifndef SQLITE_OMIT_VIRTUALTABLE
1707 cmd ::= create_vtab. {sqlite3VtabFinishParse(pParse,0);}
1708 cmd ::= create_vtab LP vtabarglist RP(X). {sqlite3VtabFinishParse(pParse,&X);}
1709 create_vtab ::= createkw VIRTUAL TABLE ifnotexists(E)
1710 nm(X) dbnm(Y) USING nm(Z). {
1711 sqlite3VtabBeginParse(pParse, &X, &Y, &Z, E);
1713 vtabarglist ::= vtabarg.
1714 vtabarglist ::= vtabarglist COMMA vtabarg.
1715 vtabarg ::= . {sqlite3VtabArgInit(pParse);}
1716 vtabarg ::= vtabarg vtabargtoken.
1717 vtabargtoken ::= ANY(X). {sqlite3VtabArgExtend(pParse,&X);}
1718 vtabargtoken ::= lp anylist RP(X). {sqlite3VtabArgExtend(pParse,&X);}
1719 lp ::= LP(X). {sqlite3VtabArgExtend(pParse,&X);}
1720 anylist ::= .
1721 anylist ::= anylist LP anylist RP.
1722 anylist ::= anylist ANY.
1723 %endif SQLITE_OMIT_VIRTUALTABLE
1726 //////////////////////// COMMON TABLE EXPRESSIONS ////////////////////////////
1727 %type wqlist {With*}
1728 %destructor wqlist {sqlite3WithDelete(pParse->db, $$);}
1729 %type wqitem {Cte*}
1730 // %destructor wqitem {sqlite3CteDelete(pParse->db, $$);} // not reachable
1732 with ::= .
1733 %ifndef SQLITE_OMIT_CTE
1734 with ::= WITH wqlist(W). { sqlite3WithPush(pParse, W, 1); }
1735 with ::= WITH RECURSIVE wqlist(W). { sqlite3WithPush(pParse, W, 1); }
1737 %type wqas {u8}
1738 wqas(A) ::= AS. {A = M10d_Any;}
1739 wqas(A) ::= AS MATERIALIZED. {A = M10d_Yes;}
1740 wqas(A) ::= AS NOT MATERIALIZED. {A = M10d_No;}
1741 wqitem(A) ::= nm(X) eidlist_opt(Y) wqas(M) LP select(Z) RP. {
1742 A = sqlite3CteNew(pParse, &X, Y, Z, M); /*A-overwrites-X*/
1744 wqlist(A) ::= wqitem(X). {
1745 A = sqlite3WithAdd(pParse, 0, X); /*A-overwrites-X*/
1747 wqlist(A) ::= wqlist(A) COMMA wqitem(X). {
1748 A = sqlite3WithAdd(pParse, A, X);
1750 %endif SQLITE_OMIT_CTE
1752 //////////////////////// WINDOW FUNCTION EXPRESSIONS /////////////////////////
1753 // These must be at the end of this file. Specifically, the rules that
1754 // introduce tokens WINDOW, OVER and FILTER must appear last. This causes
1755 // the integer values assigned to these tokens to be larger than all other
1756 // tokens that may be output by the tokenizer except TK_SPACE and TK_ILLEGAL.
1758 %ifndef SQLITE_OMIT_WINDOWFUNC
1759 %type windowdefn_list {Window*}
1760 %destructor windowdefn_list {sqlite3WindowListDelete(pParse->db, $$);}
1761 windowdefn_list(A) ::= windowdefn(Z). { A = Z; }
1762 windowdefn_list(A) ::= windowdefn_list(Y) COMMA windowdefn(Z). {
1763 assert( Z!=0 );
1764 sqlite3WindowChain(pParse, Z, Y);
1765 Z->pNextWin = Y;
1766 A = Z;
1769 %type windowdefn {Window*}
1770 %destructor windowdefn {sqlite3WindowDelete(pParse->db, $$);}
1771 windowdefn(A) ::= nm(X) AS LP window(Y) RP. {
1772 if( ALWAYS(Y) ){
1773 Y->zName = sqlite3DbStrNDup(pParse->db, X.z, X.n);
1775 A = Y;
1778 %type window {Window*}
1779 %destructor window {sqlite3WindowDelete(pParse->db, $$);}
1781 %type frame_opt {Window*}
1782 %destructor frame_opt {sqlite3WindowDelete(pParse->db, $$);}
1784 %type part_opt {ExprList*}
1785 %destructor part_opt {sqlite3ExprListDelete(pParse->db, $$);}
1787 %type filter_clause {Expr*}
1788 %destructor filter_clause {sqlite3ExprDelete(pParse->db, $$);}
1790 %type over_clause {Window*}
1791 %destructor over_clause {sqlite3WindowDelete(pParse->db, $$);}
1793 %type filter_over {Window*}
1794 %destructor filter_over {sqlite3WindowDelete(pParse->db, $$);}
1796 %type range_or_rows {int}
1798 %type frame_bound {struct FrameBound}
1799 %destructor frame_bound {sqlite3ExprDelete(pParse->db, $$.pExpr);}
1800 %type frame_bound_s {struct FrameBound}
1801 %destructor frame_bound_s {sqlite3ExprDelete(pParse->db, $$.pExpr);}
1802 %type frame_bound_e {struct FrameBound}
1803 %destructor frame_bound_e {sqlite3ExprDelete(pParse->db, $$.pExpr);}
1805 window(A) ::= PARTITION BY nexprlist(X) orderby_opt(Y) frame_opt(Z). {
1806 A = sqlite3WindowAssemble(pParse, Z, X, Y, 0);
1808 window(A) ::= nm(W) PARTITION BY nexprlist(X) orderby_opt(Y) frame_opt(Z). {
1809 A = sqlite3WindowAssemble(pParse, Z, X, Y, &W);
1811 window(A) ::= ORDER BY sortlist(Y) frame_opt(Z). {
1812 A = sqlite3WindowAssemble(pParse, Z, 0, Y, 0);
1814 window(A) ::= nm(W) ORDER BY sortlist(Y) frame_opt(Z). {
1815 A = sqlite3WindowAssemble(pParse, Z, 0, Y, &W);
1817 window(A) ::= frame_opt(Z). {
1818 A = Z;
1820 window(A) ::= nm(W) frame_opt(Z). {
1821 A = sqlite3WindowAssemble(pParse, Z, 0, 0, &W);
1824 frame_opt(A) ::= . {
1825 A = sqlite3WindowAlloc(pParse, 0, TK_UNBOUNDED, 0, TK_CURRENT, 0, 0);
1827 frame_opt(A) ::= range_or_rows(X) frame_bound_s(Y) frame_exclude_opt(Z). {
1828 A = sqlite3WindowAlloc(pParse, X, Y.eType, Y.pExpr, TK_CURRENT, 0, Z);
1830 frame_opt(A) ::= range_or_rows(X) BETWEEN frame_bound_s(Y) AND
1831 frame_bound_e(Z) frame_exclude_opt(W). {
1832 A = sqlite3WindowAlloc(pParse, X, Y.eType, Y.pExpr, Z.eType, Z.pExpr, W);
1835 range_or_rows(A) ::= RANGE|ROWS|GROUPS(X). {A = @X; /*A-overwrites-X*/}
1837 frame_bound_s(A) ::= frame_bound(X). {A = X;}
1838 frame_bound_s(A) ::= UNBOUNDED(X) PRECEDING. {A.eType = @X; A.pExpr = 0;}
1839 frame_bound_e(A) ::= frame_bound(X). {A = X;}
1840 frame_bound_e(A) ::= UNBOUNDED(X) FOLLOWING. {A.eType = @X; A.pExpr = 0;}
1842 frame_bound(A) ::= expr(X) PRECEDING|FOLLOWING(Y).
1843 {A.eType = @Y; A.pExpr = X;}
1844 frame_bound(A) ::= CURRENT(X) ROW. {A.eType = @X; A.pExpr = 0;}
1846 %type frame_exclude_opt {u8}
1847 frame_exclude_opt(A) ::= . {A = 0;}
1848 frame_exclude_opt(A) ::= EXCLUDE frame_exclude(X). {A = X;}
1850 %type frame_exclude {u8}
1851 frame_exclude(A) ::= NO(X) OTHERS. {A = @X; /*A-overwrites-X*/}
1852 frame_exclude(A) ::= CURRENT(X) ROW. {A = @X; /*A-overwrites-X*/}
1853 frame_exclude(A) ::= GROUP|TIES(X). {A = @X; /*A-overwrites-X*/}
1856 %type window_clause {Window*}
1857 %destructor window_clause {sqlite3WindowListDelete(pParse->db, $$);}
1858 window_clause(A) ::= WINDOW windowdefn_list(B). { A = B; }
1860 filter_over(A) ::= filter_clause(F) over_clause(O). {
1861 if( O ){
1862 O->pFilter = F;
1863 }else{
1864 sqlite3ExprDelete(pParse->db, F);
1866 A = O;
1868 filter_over(A) ::= over_clause(O). {
1869 A = O;
1871 filter_over(A) ::= filter_clause(F). {
1872 A = (Window*)sqlite3DbMallocZero(pParse->db, sizeof(Window));
1873 if( A ){
1874 A->eFrmType = TK_FILTER;
1875 A->pFilter = F;
1876 }else{
1877 sqlite3ExprDelete(pParse->db, F);
1881 over_clause(A) ::= OVER LP window(Z) RP. {
1882 A = Z;
1883 assert( A!=0 );
1885 over_clause(A) ::= OVER nm(Z). {
1886 A = (Window*)sqlite3DbMallocZero(pParse->db, sizeof(Window));
1887 if( A ){
1888 A->zName = sqlite3DbStrNDup(pParse->db, Z.z, Z.n);
1892 filter_clause(A) ::= FILTER LP WHERE expr(X) RP. { A = X; }
1893 %endif /* SQLITE_OMIT_WINDOWFUNC */
1896 ** The code generator needs some extra TK_ token values for tokens that
1897 ** are synthesized and do not actually appear in the grammar:
1899 %token
1900 COLUMN /* Reference to a table column */
1901 AGG_FUNCTION /* An aggregate function */
1902 AGG_COLUMN /* An aggregated column */
1903 TRUEFALSE /* True or false keyword */
1904 ISNOT /* Combination of IS and NOT */
1905 FUNCTION /* A function invocation */
1906 UMINUS /* Unary minus */
1907 UPLUS /* Unary plus */
1908 TRUTH /* IS TRUE or IS FALSE or IS NOT TRUE or IS NOT FALSE */
1909 REGISTER /* Reference to a VDBE register */
1910 VECTOR /* Vector */
1911 SELECT_COLUMN /* Choose a single column from a multi-column SELECT */
1912 IF_NULL_ROW /* the if-null-row operator */
1913 ASTERISK /* The "*" in count(*) and similar */
1914 SPAN /* The span operator */
1915 ERROR /* An expression containing an error */
1917 /* There must be no more than 255 tokens defined above. If this grammar
1918 ** is extended with new rules and tokens, they must either be so few in
1919 ** number that TK_SPAN is no more than 255, or else the new tokens must
1920 ** appear after this line.
1922 %include {
1923 #if TK_SPAN>255
1924 # error too many tokens in the grammar
1925 #endif
1929 ** The TK_SPACE and TK_ILLEGAL tokens must be the last two tokens. The
1930 ** parser depends on this. Those tokens are not used in any grammar rule.
1931 ** They are only used by the tokenizer. Declare them last so that they
1932 ** are guaranteed to be the last two tokens
1934 %token SPACE ILLEGAL.