Minor JNI cleanups.
[sqlite.git] / src / parse.y
blob867b62aa7ad69761c00fbfa7c7007940bdb7536c
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 grammar. 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. { if( pParse->pReprepare==0 ) pParse->explain = 1; }
152 explain ::= EXPLAIN QUERY PLAN. { if( pParse->pReprepare==0 ) 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 grammar. 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(A). {
558 Select *p = A;
559 if( p ){
560 parserDoubleLinkSelect(pParse, p);
564 selectnowith(A) ::= oneselect(A).
565 %ifndef SQLITE_OMIT_COMPOUND_SELECT
566 selectnowith(A) ::= selectnowith(A) multiselect_op(Y) oneselect(Z). {
567 Select *pRhs = Z;
568 Select *pLhs = A;
569 if( pRhs && pRhs->pPrior ){
570 SrcList *pFrom;
571 Token x;
572 x.n = 0;
573 parserDoubleLinkSelect(pParse, pRhs);
574 pFrom = sqlite3SrcListAppendFromTerm(pParse,0,0,0,&x,pRhs,0);
575 pRhs = sqlite3SelectNew(pParse,0,pFrom,0,0,0,0,0,0);
577 if( pRhs ){
578 pRhs->op = (u8)Y;
579 pRhs->pPrior = pLhs;
580 if( ALWAYS(pLhs) ) pLhs->selFlags &= ~SF_MultiValue;
581 pRhs->selFlags &= ~SF_MultiValue;
582 if( Y!=TK_ALL ) pParse->hasCompound = 1;
583 }else{
584 sqlite3SelectDelete(pParse->db, pLhs);
586 A = pRhs;
588 %type multiselect_op {int}
589 multiselect_op(A) ::= UNION(OP). {A = @OP; /*A-overwrites-OP*/}
590 multiselect_op(A) ::= UNION ALL. {A = TK_ALL;}
591 multiselect_op(A) ::= EXCEPT|INTERSECT(OP). {A = @OP; /*A-overwrites-OP*/}
592 %endif SQLITE_OMIT_COMPOUND_SELECT
594 oneselect(A) ::= SELECT distinct(D) selcollist(W) from(X) where_opt(Y)
595 groupby_opt(P) having_opt(Q)
596 orderby_opt(Z) limit_opt(L). {
597 A = sqlite3SelectNew(pParse,W,X,Y,P,Q,Z,D,L);
599 %ifndef SQLITE_OMIT_WINDOWFUNC
600 oneselect(A) ::= SELECT distinct(D) selcollist(W) from(X) where_opt(Y)
601 groupby_opt(P) having_opt(Q) window_clause(R)
602 orderby_opt(Z) limit_opt(L). {
603 A = sqlite3SelectNew(pParse,W,X,Y,P,Q,Z,D,L);
604 if( A ){
605 A->pWinDefn = R;
606 }else{
607 sqlite3WindowListDelete(pParse->db, R);
610 %endif
613 oneselect(A) ::= values(A).
615 %type values {Select*}
616 %destructor values {sqlite3SelectDelete(pParse->db, $$);}
617 values(A) ::= VALUES LP nexprlist(X) RP. {
618 A = sqlite3SelectNew(pParse,X,0,0,0,0,0,SF_Values,0);
620 values(A) ::= values(A) COMMA LP nexprlist(Y) RP. {
621 Select *pRight, *pLeft = A;
622 pRight = sqlite3SelectNew(pParse,Y,0,0,0,0,0,SF_Values|SF_MultiValue,0);
623 if( ALWAYS(pLeft) ) pLeft->selFlags &= ~SF_MultiValue;
624 if( pRight ){
625 pRight->op = TK_ALL;
626 pRight->pPrior = pLeft;
627 A = pRight;
628 }else{
629 A = pLeft;
633 // The "distinct" nonterminal is true (1) if the DISTINCT keyword is
634 // present and false (0) if it is not.
636 %type distinct {int}
637 distinct(A) ::= DISTINCT. {A = SF_Distinct;}
638 distinct(A) ::= ALL. {A = SF_All;}
639 distinct(A) ::= . {A = 0;}
641 // selcollist is a list of expressions that are to become the return
642 // values of the SELECT statement. The "*" in statements like
643 // "SELECT * FROM ..." is encoded as a special expression with an
644 // opcode of TK_ASTERISK.
646 %type selcollist {ExprList*}
647 %destructor selcollist {sqlite3ExprListDelete(pParse->db, $$);}
648 %type sclp {ExprList*}
649 %destructor sclp {sqlite3ExprListDelete(pParse->db, $$);}
650 sclp(A) ::= selcollist(A) COMMA.
651 sclp(A) ::= . {A = 0;}
652 selcollist(A) ::= sclp(A) scanpt(B) expr(X) scanpt(Z) as(Y). {
653 A = sqlite3ExprListAppend(pParse, A, X);
654 if( Y.n>0 ) sqlite3ExprListSetName(pParse, A, &Y, 1);
655 sqlite3ExprListSetSpan(pParse,A,B,Z);
657 selcollist(A) ::= sclp(A) scanpt STAR(X). {
658 Expr *p = sqlite3Expr(pParse->db, TK_ASTERISK, 0);
659 sqlite3ExprSetErrorOffset(p, (int)(X.z - pParse->zTail));
660 A = sqlite3ExprListAppend(pParse, A, p);
662 selcollist(A) ::= sclp(A) scanpt nm(X) DOT STAR(Y). {
663 Expr *pRight, *pLeft, *pDot;
664 pRight = sqlite3PExpr(pParse, TK_ASTERISK, 0, 0);
665 sqlite3ExprSetErrorOffset(pRight, (int)(Y.z - pParse->zTail));
666 pLeft = tokenExpr(pParse, TK_ID, X);
667 pDot = sqlite3PExpr(pParse, TK_DOT, pLeft, pRight);
668 A = sqlite3ExprListAppend(pParse,A, pDot);
671 // An option "AS <id>" phrase that can follow one of the expressions that
672 // define the result set, or one of the tables in the FROM clause.
674 %type as {Token}
675 as(X) ::= AS nm(Y). {X = Y;}
676 as(X) ::= ids(X).
677 as(X) ::= . {X.n = 0; X.z = 0;}
680 %type seltablist {SrcList*}
681 %destructor seltablist {sqlite3SrcListDelete(pParse->db, $$);}
682 %type stl_prefix {SrcList*}
683 %destructor stl_prefix {sqlite3SrcListDelete(pParse->db, $$);}
684 %type from {SrcList*}
685 %destructor from {sqlite3SrcListDelete(pParse->db, $$);}
687 // A complete FROM clause.
689 from(A) ::= . {A = 0;}
690 from(A) ::= FROM seltablist(X). {
691 A = X;
692 sqlite3SrcListShiftJoinType(pParse,A);
695 // "seltablist" is a "Select Table List" - the content of the FROM clause
696 // in a SELECT statement. "stl_prefix" is a prefix of this list.
698 stl_prefix(A) ::= seltablist(A) joinop(Y). {
699 if( ALWAYS(A && A->nSrc>0) ) A->a[A->nSrc-1].fg.jointype = (u8)Y;
701 stl_prefix(A) ::= . {A = 0;}
702 seltablist(A) ::= stl_prefix(A) nm(Y) dbnm(D) as(Z) on_using(N). {
703 A = sqlite3SrcListAppendFromTerm(pParse,A,&Y,&D,&Z,0,&N);
705 seltablist(A) ::= stl_prefix(A) nm(Y) dbnm(D) as(Z) indexed_by(I) on_using(N). {
706 A = sqlite3SrcListAppendFromTerm(pParse,A,&Y,&D,&Z,0,&N);
707 sqlite3SrcListIndexedBy(pParse, A, &I);
709 seltablist(A) ::= stl_prefix(A) nm(Y) dbnm(D) LP exprlist(E) RP as(Z) on_using(N). {
710 A = sqlite3SrcListAppendFromTerm(pParse,A,&Y,&D,&Z,0,&N);
711 sqlite3SrcListFuncArgs(pParse, A, E);
713 %ifndef SQLITE_OMIT_SUBQUERY
714 seltablist(A) ::= stl_prefix(A) LP select(S) RP as(Z) on_using(N). {
715 A = sqlite3SrcListAppendFromTerm(pParse,A,0,0,&Z,S,&N);
717 seltablist(A) ::= stl_prefix(A) LP seltablist(F) RP as(Z) on_using(N). {
718 if( A==0 && Z.n==0 && N.pOn==0 && N.pUsing==0 ){
719 A = F;
720 }else if( ALWAYS(F!=0) && F->nSrc==1 ){
721 A = sqlite3SrcListAppendFromTerm(pParse,A,0,0,&Z,0,&N);
722 if( A ){
723 SrcItem *pNew = &A->a[A->nSrc-1];
724 SrcItem *pOld = F->a;
725 pNew->zName = pOld->zName;
726 pNew->zDatabase = pOld->zDatabase;
727 pNew->pSelect = pOld->pSelect;
728 if( pNew->pSelect && (pNew->pSelect->selFlags & SF_NestedFrom)!=0 ){
729 pNew->fg.isNestedFrom = 1;
731 if( pOld->fg.isTabFunc ){
732 pNew->u1.pFuncArg = pOld->u1.pFuncArg;
733 pOld->u1.pFuncArg = 0;
734 pOld->fg.isTabFunc = 0;
735 pNew->fg.isTabFunc = 1;
737 pOld->zName = pOld->zDatabase = 0;
738 pOld->pSelect = 0;
740 sqlite3SrcListDelete(pParse->db, F);
741 }else{
742 Select *pSubquery;
743 sqlite3SrcListShiftJoinType(pParse,F);
744 pSubquery = sqlite3SelectNew(pParse,0,F,0,0,0,0,SF_NestedFrom,0);
745 A = sqlite3SrcListAppendFromTerm(pParse,A,0,0,&Z,pSubquery,&N);
748 %endif SQLITE_OMIT_SUBQUERY
750 %type dbnm {Token}
751 dbnm(A) ::= . {A.z=0; A.n=0;}
752 dbnm(A) ::= DOT nm(X). {A = X;}
754 %type fullname {SrcList*}
755 %destructor fullname {sqlite3SrcListDelete(pParse->db, $$);}
756 fullname(A) ::= nm(X). {
757 A = sqlite3SrcListAppend(pParse,0,&X,0);
758 if( IN_RENAME_OBJECT && A ) sqlite3RenameTokenMap(pParse, A->a[0].zName, &X);
760 fullname(A) ::= nm(X) DOT nm(Y). {
761 A = sqlite3SrcListAppend(pParse,0,&X,&Y);
762 if( IN_RENAME_OBJECT && A ) sqlite3RenameTokenMap(pParse, A->a[0].zName, &Y);
765 %type xfullname {SrcList*}
766 %destructor xfullname {sqlite3SrcListDelete(pParse->db, $$);}
767 xfullname(A) ::= nm(X).
768 {A = sqlite3SrcListAppend(pParse,0,&X,0); /*A-overwrites-X*/}
769 xfullname(A) ::= nm(X) DOT nm(Y).
770 {A = sqlite3SrcListAppend(pParse,0,&X,&Y); /*A-overwrites-X*/}
771 xfullname(A) ::= nm(X) DOT nm(Y) AS nm(Z). {
772 A = sqlite3SrcListAppend(pParse,0,&X,&Y); /*A-overwrites-X*/
773 if( A ) A->a[0].zAlias = sqlite3NameFromToken(pParse->db, &Z);
775 xfullname(A) ::= nm(X) AS nm(Z). {
776 A = sqlite3SrcListAppend(pParse,0,&X,0); /*A-overwrites-X*/
777 if( A ) A->a[0].zAlias = sqlite3NameFromToken(pParse->db, &Z);
780 %type joinop {int}
781 joinop(X) ::= COMMA|JOIN. { X = JT_INNER; }
782 joinop(X) ::= JOIN_KW(A) JOIN.
783 {X = sqlite3JoinType(pParse,&A,0,0); /*X-overwrites-A*/}
784 joinop(X) ::= JOIN_KW(A) nm(B) JOIN.
785 {X = sqlite3JoinType(pParse,&A,&B,0); /*X-overwrites-A*/}
786 joinop(X) ::= JOIN_KW(A) nm(B) nm(C) JOIN.
787 {X = sqlite3JoinType(pParse,&A,&B,&C);/*X-overwrites-A*/}
789 // There is a parsing abiguity in an upsert statement that uses a
790 // SELECT on the RHS of a the INSERT:
792 // INSERT INTO tab SELECT * FROM aaa JOIN bbb ON CONFLICT ...
793 // here ----^^
795 // When the ON token is encountered, the parser does not know if it is
796 // the beginning of an ON CONFLICT clause, or the beginning of an ON
797 // clause associated with the JOIN. The conflict is resolved in favor
798 // of the JOIN. If an ON CONFLICT clause is intended, insert a dummy
799 // WHERE clause in between, like this:
801 // INSERT INTO tab SELECT * FROM aaa JOIN bbb WHERE true ON CONFLICT ...
803 // The [AND] and [OR] precedence marks in the rules for on_using cause the
804 // ON in this context to always be interpreted as belonging to the JOIN.
806 %type on_using {OnOrUsing}
807 //%destructor on_using {sqlite3ClearOnOrUsing(pParse->db, &$$);}
808 on_using(N) ::= ON expr(E). {N.pOn = E; N.pUsing = 0;}
809 on_using(N) ::= USING LP idlist(L) RP. {N.pOn = 0; N.pUsing = L;}
810 on_using(N) ::= . [OR] {N.pOn = 0; N.pUsing = 0;}
812 // Note that this block abuses the Token type just a little. If there is
813 // no "INDEXED BY" clause, the returned token is empty (z==0 && n==0). If
814 // there is an INDEXED BY clause, then the token is populated as per normal,
815 // with z pointing to the token data and n containing the number of bytes
816 // in the token.
818 // If there is a "NOT INDEXED" clause, then (z==0 && n==1), which is
819 // normally illegal. The sqlite3SrcListIndexedBy() function
820 // recognizes and interprets this as a special case.
822 %type indexed_opt {Token}
823 %type indexed_by {Token}
824 indexed_opt(A) ::= . {A.z=0; A.n=0;}
825 indexed_opt(A) ::= indexed_by(A).
826 indexed_by(A) ::= INDEXED BY nm(X). {A = X;}
827 indexed_by(A) ::= NOT INDEXED. {A.z=0; A.n=1;}
829 %type orderby_opt {ExprList*}
830 %destructor orderby_opt {sqlite3ExprListDelete(pParse->db, $$);}
832 // the sortlist non-terminal stores a list of expression where each
833 // expression is optionally followed by ASC or DESC to indicate the
834 // sort order.
836 %type sortlist {ExprList*}
837 %destructor sortlist {sqlite3ExprListDelete(pParse->db, $$);}
839 orderby_opt(A) ::= . {A = 0;}
840 orderby_opt(A) ::= ORDER BY sortlist(X). {A = X;}
841 sortlist(A) ::= sortlist(A) COMMA expr(Y) sortorder(Z) nulls(X). {
842 A = sqlite3ExprListAppend(pParse,A,Y);
843 sqlite3ExprListSetSortOrder(A,Z,X);
845 sortlist(A) ::= expr(Y) sortorder(Z) nulls(X). {
846 A = sqlite3ExprListAppend(pParse,0,Y); /*A-overwrites-Y*/
847 sqlite3ExprListSetSortOrder(A,Z,X);
850 %type sortorder {int}
852 sortorder(A) ::= ASC. {A = SQLITE_SO_ASC;}
853 sortorder(A) ::= DESC. {A = SQLITE_SO_DESC;}
854 sortorder(A) ::= . {A = SQLITE_SO_UNDEFINED;}
856 %type nulls {int}
857 nulls(A) ::= NULLS FIRST. {A = SQLITE_SO_ASC;}
858 nulls(A) ::= NULLS LAST. {A = SQLITE_SO_DESC;}
859 nulls(A) ::= . {A = SQLITE_SO_UNDEFINED;}
861 %type groupby_opt {ExprList*}
862 %destructor groupby_opt {sqlite3ExprListDelete(pParse->db, $$);}
863 groupby_opt(A) ::= . {A = 0;}
864 groupby_opt(A) ::= GROUP BY nexprlist(X). {A = X;}
866 %type having_opt {Expr*}
867 %destructor having_opt {sqlite3ExprDelete(pParse->db, $$);}
868 having_opt(A) ::= . {A = 0;}
869 having_opt(A) ::= HAVING expr(X). {A = X;}
871 %type limit_opt {Expr*}
873 // The destructor for limit_opt will never fire in the current grammar.
874 // The limit_opt non-terminal only occurs at the end of a single production
875 // rule for SELECT statements. As soon as the rule that create the
876 // limit_opt non-terminal reduces, the SELECT statement rule will also
877 // reduce. So there is never a limit_opt non-terminal on the stack
878 // except as a transient. So there is never anything to destroy.
880 //%destructor limit_opt {sqlite3ExprDelete(pParse->db, $$);}
881 limit_opt(A) ::= . {A = 0;}
882 limit_opt(A) ::= LIMIT expr(X).
883 {A = sqlite3PExpr(pParse,TK_LIMIT,X,0);}
884 limit_opt(A) ::= LIMIT expr(X) OFFSET expr(Y).
885 {A = sqlite3PExpr(pParse,TK_LIMIT,X,Y);}
886 limit_opt(A) ::= LIMIT expr(X) COMMA expr(Y).
887 {A = sqlite3PExpr(pParse,TK_LIMIT,Y,X);}
889 /////////////////////////// The DELETE statement /////////////////////////////
891 %if SQLITE_ENABLE_UPDATE_DELETE_LIMIT || SQLITE_UDL_CAPABLE_PARSER
892 cmd ::= with DELETE FROM xfullname(X) indexed_opt(I) where_opt_ret(W)
893 orderby_opt(O) limit_opt(L). {
894 sqlite3SrcListIndexedBy(pParse, X, &I);
895 #ifndef SQLITE_ENABLE_UPDATE_DELETE_LIMIT
896 if( O || L ){
897 updateDeleteLimitError(pParse,O,L);
898 O = 0;
899 L = 0;
901 #endif
902 sqlite3DeleteFrom(pParse,X,W,O,L);
904 %else
905 cmd ::= with DELETE FROM xfullname(X) indexed_opt(I) where_opt_ret(W). {
906 sqlite3SrcListIndexedBy(pParse, X, &I);
907 sqlite3DeleteFrom(pParse,X,W,0,0);
909 %endif
911 %type where_opt {Expr*}
912 %destructor where_opt {sqlite3ExprDelete(pParse->db, $$);}
913 %type where_opt_ret {Expr*}
914 %destructor where_opt_ret {sqlite3ExprDelete(pParse->db, $$);}
916 where_opt(A) ::= . {A = 0;}
917 where_opt(A) ::= WHERE expr(X). {A = X;}
918 where_opt_ret(A) ::= . {A = 0;}
919 where_opt_ret(A) ::= WHERE expr(X). {A = X;}
920 where_opt_ret(A) ::= RETURNING selcollist(X).
921 {sqlite3AddReturning(pParse,X); A = 0;}
922 where_opt_ret(A) ::= WHERE expr(X) RETURNING selcollist(Y).
923 {sqlite3AddReturning(pParse,Y); A = X;}
925 ////////////////////////// The UPDATE command ////////////////////////////////
927 %if SQLITE_ENABLE_UPDATE_DELETE_LIMIT || SQLITE_UDL_CAPABLE_PARSER
928 cmd ::= with UPDATE orconf(R) xfullname(X) indexed_opt(I) SET setlist(Y) from(F)
929 where_opt_ret(W) orderby_opt(O) limit_opt(L). {
930 sqlite3SrcListIndexedBy(pParse, X, &I);
931 if( F ){
932 SrcList *pFromClause = F;
933 if( pFromClause->nSrc>1 ){
934 Select *pSubquery;
935 Token as;
936 pSubquery = sqlite3SelectNew(pParse,0,pFromClause,0,0,0,0,SF_NestedFrom,0);
937 as.n = 0;
938 as.z = 0;
939 pFromClause = sqlite3SrcListAppendFromTerm(pParse,0,0,0,&as,pSubquery,0);
941 X = sqlite3SrcListAppendList(pParse, X, pFromClause);
943 sqlite3ExprListCheckLength(pParse,Y,"set list");
944 #ifndef SQLITE_ENABLE_UPDATE_DELETE_LIMIT
945 if( O || L ){
946 updateDeleteLimitError(pParse,O,L);
947 O = 0;
948 L = 0;
950 #endif
951 sqlite3Update(pParse,X,Y,W,R,O,L,0);
953 %else
954 cmd ::= with UPDATE orconf(R) xfullname(X) indexed_opt(I) SET setlist(Y) from(F)
955 where_opt_ret(W). {
956 sqlite3SrcListIndexedBy(pParse, X, &I);
957 sqlite3ExprListCheckLength(pParse,Y,"set list");
958 if( F ){
959 SrcList *pFromClause = F;
960 if( pFromClause->nSrc>1 ){
961 Select *pSubquery;
962 Token as;
963 pSubquery = sqlite3SelectNew(pParse,0,pFromClause,0,0,0,0,SF_NestedFrom,0);
964 as.n = 0;
965 as.z = 0;
966 pFromClause = sqlite3SrcListAppendFromTerm(pParse,0,0,0,&as,pSubquery,0);
968 X = sqlite3SrcListAppendList(pParse, X, pFromClause);
970 sqlite3Update(pParse,X,Y,W,R,0,0,0);
972 %endif
976 %type setlist {ExprList*}
977 %destructor setlist {sqlite3ExprListDelete(pParse->db, $$);}
979 setlist(A) ::= setlist(A) COMMA nm(X) EQ expr(Y). {
980 A = sqlite3ExprListAppend(pParse, A, Y);
981 sqlite3ExprListSetName(pParse, A, &X, 1);
983 setlist(A) ::= setlist(A) COMMA LP idlist(X) RP EQ expr(Y). {
984 A = sqlite3ExprListAppendVector(pParse, A, X, Y);
986 setlist(A) ::= nm(X) EQ expr(Y). {
987 A = sqlite3ExprListAppend(pParse, 0, Y);
988 sqlite3ExprListSetName(pParse, A, &X, 1);
990 setlist(A) ::= LP idlist(X) RP EQ expr(Y). {
991 A = sqlite3ExprListAppendVector(pParse, 0, X, Y);
994 ////////////////////////// The INSERT command /////////////////////////////////
996 cmd ::= with insert_cmd(R) INTO xfullname(X) idlist_opt(F) select(S)
997 upsert(U). {
998 sqlite3Insert(pParse, X, S, F, R, U);
1000 cmd ::= with insert_cmd(R) INTO xfullname(X) idlist_opt(F) DEFAULT VALUES returning.
1002 sqlite3Insert(pParse, X, 0, F, R, 0);
1005 %type upsert {Upsert*}
1007 // Because upsert only occurs at the tip end of the INSERT rule for cmd,
1008 // there is never a case where the value of the upsert pointer will not
1009 // be destroyed by the cmd action. So comment-out the destructor to
1010 // avoid unreachable code.
1011 //%destructor upsert {sqlite3UpsertDelete(pParse->db,$$);}
1012 upsert(A) ::= . { A = 0; }
1013 upsert(A) ::= RETURNING selcollist(X). { A = 0; sqlite3AddReturning(pParse,X); }
1014 upsert(A) ::= ON CONFLICT LP sortlist(T) RP where_opt(TW)
1015 DO UPDATE SET setlist(Z) where_opt(W) upsert(N).
1016 { A = sqlite3UpsertNew(pParse->db,T,TW,Z,W,N);}
1017 upsert(A) ::= ON CONFLICT LP sortlist(T) RP where_opt(TW) DO NOTHING upsert(N).
1018 { A = sqlite3UpsertNew(pParse->db,T,TW,0,0,N); }
1019 upsert(A) ::= ON CONFLICT DO NOTHING returning.
1020 { A = sqlite3UpsertNew(pParse->db,0,0,0,0,0); }
1021 upsert(A) ::= ON CONFLICT DO UPDATE SET setlist(Z) where_opt(W) returning.
1022 { A = sqlite3UpsertNew(pParse->db,0,0,Z,W,0);}
1024 returning ::= RETURNING selcollist(X). {sqlite3AddReturning(pParse,X);}
1025 returning ::= .
1027 %type insert_cmd {int}
1028 insert_cmd(A) ::= INSERT orconf(R). {A = R;}
1029 insert_cmd(A) ::= REPLACE. {A = OE_Replace;}
1031 %type idlist_opt {IdList*}
1032 %destructor idlist_opt {sqlite3IdListDelete(pParse->db, $$);}
1033 %type idlist {IdList*}
1034 %destructor idlist {sqlite3IdListDelete(pParse->db, $$);}
1036 idlist_opt(A) ::= . {A = 0;}
1037 idlist_opt(A) ::= LP idlist(X) RP. {A = X;}
1038 idlist(A) ::= idlist(A) COMMA nm(Y).
1039 {A = sqlite3IdListAppend(pParse,A,&Y);}
1040 idlist(A) ::= nm(Y).
1041 {A = sqlite3IdListAppend(pParse,0,&Y); /*A-overwrites-Y*/}
1043 /////////////////////////// Expression Processing /////////////////////////////
1046 %type expr {Expr*}
1047 %destructor expr {sqlite3ExprDelete(pParse->db, $$);}
1048 %type term {Expr*}
1049 %destructor term {sqlite3ExprDelete(pParse->db, $$);}
1051 %include {
1053 /* Construct a new Expr object from a single token */
1054 static Expr *tokenExpr(Parse *pParse, int op, Token t){
1055 Expr *p = sqlite3DbMallocRawNN(pParse->db, sizeof(Expr)+t.n+1);
1056 if( p ){
1057 /* memset(p, 0, sizeof(Expr)); */
1058 p->op = (u8)op;
1059 p->affExpr = 0;
1060 p->flags = EP_Leaf;
1061 ExprClearVVAProperties(p);
1062 /* p->iAgg = -1; // Not required */
1063 p->pLeft = p->pRight = 0;
1064 p->pAggInfo = 0;
1065 memset(&p->x, 0, sizeof(p->x));
1066 memset(&p->y, 0, sizeof(p->y));
1067 p->op2 = 0;
1068 p->iTable = 0;
1069 p->iColumn = 0;
1070 p->u.zToken = (char*)&p[1];
1071 memcpy(p->u.zToken, t.z, t.n);
1072 p->u.zToken[t.n] = 0;
1073 p->w.iOfst = (int)(t.z - pParse->zTail);
1074 if( sqlite3Isquote(p->u.zToken[0]) ){
1075 sqlite3DequoteExpr(p);
1077 #if SQLITE_MAX_EXPR_DEPTH>0
1078 p->nHeight = 1;
1079 #endif
1080 if( IN_RENAME_OBJECT ){
1081 return (Expr*)sqlite3RenameTokenMap(pParse, (void*)p, &t);
1084 return p;
1089 expr(A) ::= term(A).
1090 expr(A) ::= LP expr(X) RP. {A = X;}
1091 expr(A) ::= idj(X). {A=tokenExpr(pParse,TK_ID,X); /*A-overwrites-X*/}
1092 expr(A) ::= nm(X) DOT nm(Y). {
1093 Expr *temp1 = tokenExpr(pParse,TK_ID,X);
1094 Expr *temp2 = tokenExpr(pParse,TK_ID,Y);
1095 A = sqlite3PExpr(pParse, TK_DOT, temp1, temp2);
1097 expr(A) ::= nm(X) DOT nm(Y) DOT nm(Z). {
1098 Expr *temp1 = tokenExpr(pParse,TK_ID,X);
1099 Expr *temp2 = tokenExpr(pParse,TK_ID,Y);
1100 Expr *temp3 = tokenExpr(pParse,TK_ID,Z);
1101 Expr *temp4 = sqlite3PExpr(pParse, TK_DOT, temp2, temp3);
1102 if( IN_RENAME_OBJECT ){
1103 sqlite3RenameTokenRemap(pParse, 0, temp1);
1105 A = sqlite3PExpr(pParse, TK_DOT, temp1, temp4);
1107 term(A) ::= NULL|FLOAT|BLOB(X). {A=tokenExpr(pParse,@X,X); /*A-overwrites-X*/}
1108 term(A) ::= STRING(X). {A=tokenExpr(pParse,@X,X); /*A-overwrites-X*/}
1109 term(A) ::= INTEGER(X). {
1110 A = sqlite3ExprAlloc(pParse->db, TK_INTEGER, &X, 1);
1111 if( A ) A->w.iOfst = (int)(X.z - pParse->zTail);
1113 expr(A) ::= VARIABLE(X). {
1114 if( !(X.z[0]=='#' && sqlite3Isdigit(X.z[1])) ){
1115 u32 n = X.n;
1116 A = tokenExpr(pParse, TK_VARIABLE, X);
1117 sqlite3ExprAssignVarNumber(pParse, A, n);
1118 }else{
1119 /* When doing a nested parse, one can include terms in an expression
1120 ** that look like this: #1 #2 ... These terms refer to registers
1121 ** in the virtual machine. #N is the N-th register. */
1122 Token t = X; /*A-overwrites-X*/
1123 assert( t.n>=2 );
1124 if( pParse->nested==0 ){
1125 sqlite3ErrorMsg(pParse, "near \"%T\": syntax error", &t);
1126 A = 0;
1127 }else{
1128 A = sqlite3PExpr(pParse, TK_REGISTER, 0, 0);
1129 if( A ) sqlite3GetInt32(&t.z[1], &A->iTable);
1133 expr(A) ::= expr(A) COLLATE ids(C). {
1134 A = sqlite3ExprAddCollateToken(pParse, A, &C, 1);
1136 %ifndef SQLITE_OMIT_CAST
1137 expr(A) ::= CAST LP expr(E) AS typetoken(T) RP. {
1138 A = sqlite3ExprAlloc(pParse->db, TK_CAST, &T, 1);
1139 sqlite3ExprAttachSubtrees(pParse->db, A, E, 0);
1141 %endif SQLITE_OMIT_CAST
1144 expr(A) ::= idj(X) LP distinct(D) exprlist(Y) RP. {
1145 A = sqlite3ExprFunction(pParse, Y, &X, D);
1147 expr(A) ::= idj(X) LP STAR RP. {
1148 A = sqlite3ExprFunction(pParse, 0, &X, 0);
1151 %ifndef SQLITE_OMIT_WINDOWFUNC
1152 expr(A) ::= idj(X) LP distinct(D) exprlist(Y) RP filter_over(Z). {
1153 A = sqlite3ExprFunction(pParse, Y, &X, D);
1154 sqlite3WindowAttach(pParse, A, Z);
1156 expr(A) ::= idj(X) LP STAR RP filter_over(Z). {
1157 A = sqlite3ExprFunction(pParse, 0, &X, 0);
1158 sqlite3WindowAttach(pParse, A, Z);
1160 %endif
1162 term(A) ::= CTIME_KW(OP). {
1163 A = sqlite3ExprFunction(pParse, 0, &OP, 0);
1166 expr(A) ::= LP nexprlist(X) COMMA expr(Y) RP. {
1167 ExprList *pList = sqlite3ExprListAppend(pParse, X, Y);
1168 A = sqlite3PExpr(pParse, TK_VECTOR, 0, 0);
1169 if( A ){
1170 A->x.pList = pList;
1171 if( ALWAYS(pList->nExpr) ){
1172 A->flags |= pList->a[0].pExpr->flags & EP_Propagate;
1174 }else{
1175 sqlite3ExprListDelete(pParse->db, pList);
1179 expr(A) ::= expr(A) AND expr(Y). {A=sqlite3ExprAnd(pParse,A,Y);}
1180 expr(A) ::= expr(A) OR(OP) expr(Y). {A=sqlite3PExpr(pParse,@OP,A,Y);}
1181 expr(A) ::= expr(A) LT|GT|GE|LE(OP) expr(Y).
1182 {A=sqlite3PExpr(pParse,@OP,A,Y);}
1183 expr(A) ::= expr(A) EQ|NE(OP) expr(Y). {A=sqlite3PExpr(pParse,@OP,A,Y);}
1184 expr(A) ::= expr(A) BITAND|BITOR|LSHIFT|RSHIFT(OP) expr(Y).
1185 {A=sqlite3PExpr(pParse,@OP,A,Y);}
1186 expr(A) ::= expr(A) PLUS|MINUS(OP) expr(Y).
1187 {A=sqlite3PExpr(pParse,@OP,A,Y);}
1188 expr(A) ::= expr(A) STAR|SLASH|REM(OP) expr(Y).
1189 {A=sqlite3PExpr(pParse,@OP,A,Y);}
1190 expr(A) ::= expr(A) CONCAT(OP) expr(Y). {A=sqlite3PExpr(pParse,@OP,A,Y);}
1191 %type likeop {Token}
1192 likeop(A) ::= LIKE_KW|MATCH(A).
1193 likeop(A) ::= NOT LIKE_KW|MATCH(X). {A=X; A.n|=0x80000000; /*A-overwrite-X*/}
1194 expr(A) ::= expr(A) likeop(OP) expr(Y). [LIKE_KW] {
1195 ExprList *pList;
1196 int bNot = OP.n & 0x80000000;
1197 OP.n &= 0x7fffffff;
1198 pList = sqlite3ExprListAppend(pParse,0, Y);
1199 pList = sqlite3ExprListAppend(pParse,pList, A);
1200 A = sqlite3ExprFunction(pParse, pList, &OP, 0);
1201 if( bNot ) A = sqlite3PExpr(pParse, TK_NOT, A, 0);
1202 if( A ) A->flags |= EP_InfixFunc;
1204 expr(A) ::= expr(A) likeop(OP) expr(Y) ESCAPE expr(E). [LIKE_KW] {
1205 ExprList *pList;
1206 int bNot = OP.n & 0x80000000;
1207 OP.n &= 0x7fffffff;
1208 pList = sqlite3ExprListAppend(pParse,0, Y);
1209 pList = sqlite3ExprListAppend(pParse,pList, A);
1210 pList = sqlite3ExprListAppend(pParse,pList, E);
1211 A = sqlite3ExprFunction(pParse, pList, &OP, 0);
1212 if( bNot ) A = sqlite3PExpr(pParse, TK_NOT, A, 0);
1213 if( A ) A->flags |= EP_InfixFunc;
1216 expr(A) ::= expr(A) ISNULL|NOTNULL(E). {A = sqlite3PExpr(pParse,@E,A,0);}
1217 expr(A) ::= expr(A) NOT NULL. {A = sqlite3PExpr(pParse,TK_NOTNULL,A,0);}
1219 %include {
1220 /* A routine to convert a binary TK_IS or TK_ISNOT expression into a
1221 ** unary TK_ISNULL or TK_NOTNULL expression. */
1222 static void binaryToUnaryIfNull(Parse *pParse, Expr *pY, Expr *pA, int op){
1223 sqlite3 *db = pParse->db;
1224 if( pA && pY && pY->op==TK_NULL && !IN_RENAME_OBJECT ){
1225 pA->op = (u8)op;
1226 sqlite3ExprDelete(db, pA->pRight);
1227 pA->pRight = 0;
1232 // expr1 IS expr2
1233 // expr1 IS NOT expr2
1235 // If expr2 is NULL then code as TK_ISNULL or TK_NOTNULL. If expr2
1236 // is any other expression, code as TK_IS or TK_ISNOT.
1238 expr(A) ::= expr(A) IS expr(Y). {
1239 A = sqlite3PExpr(pParse,TK_IS,A,Y);
1240 binaryToUnaryIfNull(pParse, Y, A, TK_ISNULL);
1242 expr(A) ::= expr(A) IS NOT expr(Y). {
1243 A = sqlite3PExpr(pParse,TK_ISNOT,A,Y);
1244 binaryToUnaryIfNull(pParse, Y, A, TK_NOTNULL);
1246 expr(A) ::= expr(A) IS NOT DISTINCT FROM expr(Y). {
1247 A = sqlite3PExpr(pParse,TK_IS,A,Y);
1248 binaryToUnaryIfNull(pParse, Y, A, TK_ISNULL);
1250 expr(A) ::= expr(A) IS DISTINCT FROM expr(Y). {
1251 A = sqlite3PExpr(pParse,TK_ISNOT,A,Y);
1252 binaryToUnaryIfNull(pParse, Y, A, TK_NOTNULL);
1255 expr(A) ::= NOT(B) expr(X).
1256 {A = sqlite3PExpr(pParse, @B, X, 0);/*A-overwrites-B*/}
1257 expr(A) ::= BITNOT(B) expr(X).
1258 {A = sqlite3PExpr(pParse, @B, X, 0);/*A-overwrites-B*/}
1259 expr(A) ::= PLUS|MINUS(B) expr(X). [BITNOT] {
1260 A = sqlite3PExpr(pParse, @B==TK_PLUS ? TK_UPLUS : TK_UMINUS, X, 0);
1261 /*A-overwrites-B*/
1264 expr(A) ::= expr(B) PTR(C) expr(D). {
1265 ExprList *pList = sqlite3ExprListAppend(pParse, 0, B);
1266 pList = sqlite3ExprListAppend(pParse, pList, D);
1267 A = sqlite3ExprFunction(pParse, pList, &C, 0);
1270 %type between_op {int}
1271 between_op(A) ::= BETWEEN. {A = 0;}
1272 between_op(A) ::= NOT BETWEEN. {A = 1;}
1273 expr(A) ::= expr(A) between_op(N) expr(X) AND expr(Y). [BETWEEN] {
1274 ExprList *pList = sqlite3ExprListAppend(pParse,0, X);
1275 pList = sqlite3ExprListAppend(pParse,pList, Y);
1276 A = sqlite3PExpr(pParse, TK_BETWEEN, A, 0);
1277 if( A ){
1278 A->x.pList = pList;
1279 }else{
1280 sqlite3ExprListDelete(pParse->db, pList);
1282 if( N ) A = sqlite3PExpr(pParse, TK_NOT, A, 0);
1284 %ifndef SQLITE_OMIT_SUBQUERY
1285 %type in_op {int}
1286 in_op(A) ::= IN. {A = 0;}
1287 in_op(A) ::= NOT IN. {A = 1;}
1288 expr(A) ::= expr(A) in_op(N) LP exprlist(Y) RP. [IN] {
1289 if( Y==0 ){
1290 /* Expressions of the form
1292 ** expr1 IN ()
1293 ** expr1 NOT IN ()
1295 ** simplify to constants 0 (false) and 1 (true), respectively,
1296 ** regardless of the value of expr1.
1298 sqlite3ExprUnmapAndDelete(pParse, A);
1299 A = sqlite3Expr(pParse->db, TK_STRING, N ? "true" : "false");
1300 if( A ) sqlite3ExprIdToTrueFalse(A);
1301 }else{
1302 Expr *pRHS = Y->a[0].pExpr;
1303 if( Y->nExpr==1 && sqlite3ExprIsConstant(pRHS) && A->op!=TK_VECTOR ){
1304 Y->a[0].pExpr = 0;
1305 sqlite3ExprListDelete(pParse->db, Y);
1306 pRHS = sqlite3PExpr(pParse, TK_UPLUS, pRHS, 0);
1307 A = sqlite3PExpr(pParse, TK_EQ, A, pRHS);
1308 }else if( Y->nExpr==1 && pRHS->op==TK_SELECT ){
1309 A = sqlite3PExpr(pParse, TK_IN, A, 0);
1310 sqlite3PExprAddSelect(pParse, A, pRHS->x.pSelect);
1311 pRHS->x.pSelect = 0;
1312 sqlite3ExprListDelete(pParse->db, Y);
1313 }else{
1314 A = sqlite3PExpr(pParse, TK_IN, A, 0);
1315 if( A==0 ){
1316 sqlite3ExprListDelete(pParse->db, Y);
1317 }else if( A->pLeft->op==TK_VECTOR ){
1318 int nExpr = A->pLeft->x.pList->nExpr;
1319 Select *pSelectRHS = sqlite3ExprListToValues(pParse, nExpr, Y);
1320 if( pSelectRHS ){
1321 parserDoubleLinkSelect(pParse, pSelectRHS);
1322 sqlite3PExprAddSelect(pParse, A, pSelectRHS);
1324 }else{
1325 A->x.pList = Y;
1326 sqlite3ExprSetHeightAndFlags(pParse, A);
1329 if( N ) A = sqlite3PExpr(pParse, TK_NOT, A, 0);
1332 expr(A) ::= LP select(X) RP. {
1333 A = sqlite3PExpr(pParse, TK_SELECT, 0, 0);
1334 sqlite3PExprAddSelect(pParse, A, X);
1336 expr(A) ::= expr(A) in_op(N) LP select(Y) RP. [IN] {
1337 A = sqlite3PExpr(pParse, TK_IN, A, 0);
1338 sqlite3PExprAddSelect(pParse, A, Y);
1339 if( N ) A = sqlite3PExpr(pParse, TK_NOT, A, 0);
1341 expr(A) ::= expr(A) in_op(N) nm(Y) dbnm(Z) paren_exprlist(E). [IN] {
1342 SrcList *pSrc = sqlite3SrcListAppend(pParse, 0,&Y,&Z);
1343 Select *pSelect = sqlite3SelectNew(pParse, 0,pSrc,0,0,0,0,0,0);
1344 if( E ) sqlite3SrcListFuncArgs(pParse, pSelect ? pSrc : 0, E);
1345 A = sqlite3PExpr(pParse, TK_IN, A, 0);
1346 sqlite3PExprAddSelect(pParse, A, pSelect);
1347 if( N ) A = sqlite3PExpr(pParse, TK_NOT, A, 0);
1349 expr(A) ::= EXISTS LP select(Y) RP. {
1350 Expr *p;
1351 p = A = sqlite3PExpr(pParse, TK_EXISTS, 0, 0);
1352 sqlite3PExprAddSelect(pParse, p, Y);
1354 %endif SQLITE_OMIT_SUBQUERY
1356 /* CASE expressions */
1357 expr(A) ::= CASE case_operand(X) case_exprlist(Y) case_else(Z) END. {
1358 A = sqlite3PExpr(pParse, TK_CASE, X, 0);
1359 if( A ){
1360 A->x.pList = Z ? sqlite3ExprListAppend(pParse,Y,Z) : Y;
1361 sqlite3ExprSetHeightAndFlags(pParse, A);
1362 }else{
1363 sqlite3ExprListDelete(pParse->db, Y);
1364 sqlite3ExprDelete(pParse->db, Z);
1367 %type case_exprlist {ExprList*}
1368 %destructor case_exprlist {sqlite3ExprListDelete(pParse->db, $$);}
1369 case_exprlist(A) ::= case_exprlist(A) WHEN expr(Y) THEN expr(Z). {
1370 A = sqlite3ExprListAppend(pParse,A, Y);
1371 A = sqlite3ExprListAppend(pParse,A, Z);
1373 case_exprlist(A) ::= WHEN expr(Y) THEN expr(Z). {
1374 A = sqlite3ExprListAppend(pParse,0, Y);
1375 A = sqlite3ExprListAppend(pParse,A, Z);
1377 %type case_else {Expr*}
1378 %destructor case_else {sqlite3ExprDelete(pParse->db, $$);}
1379 case_else(A) ::= ELSE expr(X). {A = X;}
1380 case_else(A) ::= . {A = 0;}
1381 %type case_operand {Expr*}
1382 %destructor case_operand {sqlite3ExprDelete(pParse->db, $$);}
1383 case_operand(A) ::= expr(A).
1384 case_operand(A) ::= . {A = 0;}
1386 %type exprlist {ExprList*}
1387 %destructor exprlist {sqlite3ExprListDelete(pParse->db, $$);}
1388 %type nexprlist {ExprList*}
1389 %destructor nexprlist {sqlite3ExprListDelete(pParse->db, $$);}
1391 exprlist(A) ::= nexprlist(A).
1392 exprlist(A) ::= . {A = 0;}
1393 nexprlist(A) ::= nexprlist(A) COMMA expr(Y).
1394 {A = sqlite3ExprListAppend(pParse,A,Y);}
1395 nexprlist(A) ::= expr(Y).
1396 {A = sqlite3ExprListAppend(pParse,0,Y); /*A-overwrites-Y*/}
1398 %ifndef SQLITE_OMIT_SUBQUERY
1399 /* A paren_exprlist is an optional expression list contained inside
1400 ** of parenthesis */
1401 %type paren_exprlist {ExprList*}
1402 %destructor paren_exprlist {sqlite3ExprListDelete(pParse->db, $$);}
1403 paren_exprlist(A) ::= . {A = 0;}
1404 paren_exprlist(A) ::= LP exprlist(X) RP. {A = X;}
1405 %endif SQLITE_OMIT_SUBQUERY
1408 ///////////////////////////// The CREATE INDEX command ///////////////////////
1410 cmd ::= createkw(S) uniqueflag(U) INDEX ifnotexists(NE) nm(X) dbnm(D)
1411 ON nm(Y) LP sortlist(Z) RP where_opt(W). {
1412 sqlite3CreateIndex(pParse, &X, &D,
1413 sqlite3SrcListAppend(pParse,0,&Y,0), Z, U,
1414 &S, W, SQLITE_SO_ASC, NE, SQLITE_IDXTYPE_APPDEF);
1415 if( IN_RENAME_OBJECT && pParse->pNewIndex ){
1416 sqlite3RenameTokenMap(pParse, pParse->pNewIndex->zName, &Y);
1420 %type uniqueflag {int}
1421 uniqueflag(A) ::= UNIQUE. {A = OE_Abort;}
1422 uniqueflag(A) ::= . {A = OE_None;}
1425 // The eidlist non-terminal (Expression Id List) generates an ExprList
1426 // from a list of identifiers. The identifier names are in ExprList.a[].zName.
1427 // This list is stored in an ExprList rather than an IdList so that it
1428 // can be easily sent to sqlite3ColumnsExprList().
1430 // eidlist is grouped with CREATE INDEX because it used to be the non-terminal
1431 // used for the arguments to an index. That is just an historical accident.
1433 // IMPORTANT COMPATIBILITY NOTE: Some prior versions of SQLite accepted
1434 // COLLATE clauses and ASC or DESC keywords on ID lists in inappropriate
1435 // places - places that might have been stored in the sqlite_schema table.
1436 // Those extra features were ignored. But because they might be in some
1437 // (busted) old databases, we need to continue parsing them when loading
1438 // historical schemas.
1440 %type eidlist {ExprList*}
1441 %destructor eidlist {sqlite3ExprListDelete(pParse->db, $$);}
1442 %type eidlist_opt {ExprList*}
1443 %destructor eidlist_opt {sqlite3ExprListDelete(pParse->db, $$);}
1445 %include {
1446 /* Add a single new term to an ExprList that is used to store a
1447 ** list of identifiers. Report an error if the ID list contains
1448 ** a COLLATE clause or an ASC or DESC keyword, except ignore the
1449 ** error while parsing a legacy schema.
1451 static ExprList *parserAddExprIdListTerm(
1452 Parse *pParse,
1453 ExprList *pPrior,
1454 Token *pIdToken,
1455 int hasCollate,
1456 int sortOrder
1458 ExprList *p = sqlite3ExprListAppend(pParse, pPrior, 0);
1459 if( (hasCollate || sortOrder!=SQLITE_SO_UNDEFINED)
1460 && pParse->db->init.busy==0
1462 sqlite3ErrorMsg(pParse, "syntax error after column name \"%.*s\"",
1463 pIdToken->n, pIdToken->z);
1465 sqlite3ExprListSetName(pParse, p, pIdToken, 1);
1466 return p;
1468 } // end %include
1470 eidlist_opt(A) ::= . {A = 0;}
1471 eidlist_opt(A) ::= LP eidlist(X) RP. {A = X;}
1472 eidlist(A) ::= eidlist(A) COMMA nm(Y) collate(C) sortorder(Z). {
1473 A = parserAddExprIdListTerm(pParse, A, &Y, C, Z);
1475 eidlist(A) ::= nm(Y) collate(C) sortorder(Z). {
1476 A = parserAddExprIdListTerm(pParse, 0, &Y, C, Z); /*A-overwrites-Y*/
1479 %type collate {int}
1480 collate(C) ::= . {C = 0;}
1481 collate(C) ::= COLLATE ids. {C = 1;}
1484 ///////////////////////////// The DROP INDEX command /////////////////////////
1486 cmd ::= DROP INDEX ifexists(E) fullname(X). {sqlite3DropIndex(pParse, X, E);}
1488 ///////////////////////////// The VACUUM command /////////////////////////////
1490 %if !SQLITE_OMIT_VACUUM && !SQLITE_OMIT_ATTACH
1491 %type vinto {Expr*}
1492 %destructor vinto {sqlite3ExprDelete(pParse->db, $$);}
1493 cmd ::= VACUUM vinto(Y). {sqlite3Vacuum(pParse,0,Y);}
1494 cmd ::= VACUUM nm(X) vinto(Y). {sqlite3Vacuum(pParse,&X,Y);}
1495 vinto(A) ::= INTO expr(X). {A = X;}
1496 vinto(A) ::= . {A = 0;}
1497 %endif
1499 ///////////////////////////// The PRAGMA command /////////////////////////////
1501 %ifndef SQLITE_OMIT_PRAGMA
1502 cmd ::= PRAGMA nm(X) dbnm(Z). {sqlite3Pragma(pParse,&X,&Z,0,0);}
1503 cmd ::= PRAGMA nm(X) dbnm(Z) EQ nmnum(Y). {sqlite3Pragma(pParse,&X,&Z,&Y,0);}
1504 cmd ::= PRAGMA nm(X) dbnm(Z) LP nmnum(Y) RP. {sqlite3Pragma(pParse,&X,&Z,&Y,0);}
1505 cmd ::= PRAGMA nm(X) dbnm(Z) EQ minus_num(Y).
1506 {sqlite3Pragma(pParse,&X,&Z,&Y,1);}
1507 cmd ::= PRAGMA nm(X) dbnm(Z) LP minus_num(Y) RP.
1508 {sqlite3Pragma(pParse,&X,&Z,&Y,1);}
1510 nmnum(A) ::= plus_num(A).
1511 nmnum(A) ::= nm(A).
1512 nmnum(A) ::= ON(A).
1513 nmnum(A) ::= DELETE(A).
1514 nmnum(A) ::= DEFAULT(A).
1515 %endif SQLITE_OMIT_PRAGMA
1516 %token_class number INTEGER|FLOAT.
1517 plus_num(A) ::= PLUS number(X). {A = X;}
1518 plus_num(A) ::= number(A).
1519 minus_num(A) ::= MINUS number(X). {A = X;}
1520 //////////////////////////// The CREATE TRIGGER command /////////////////////
1522 %ifndef SQLITE_OMIT_TRIGGER
1524 cmd ::= createkw trigger_decl(A) BEGIN trigger_cmd_list(S) END(Z). {
1525 Token all;
1526 all.z = A.z;
1527 all.n = (int)(Z.z - A.z) + Z.n;
1528 sqlite3FinishTrigger(pParse, S, &all);
1531 trigger_decl(A) ::= temp(T) TRIGGER ifnotexists(NOERR) nm(B) dbnm(Z)
1532 trigger_time(C) trigger_event(D)
1533 ON fullname(E) foreach_clause when_clause(G). {
1534 sqlite3BeginTrigger(pParse, &B, &Z, C, D.a, D.b, E, G, T, NOERR);
1535 A = (Z.n==0?B:Z); /*A-overwrites-T*/
1538 %type trigger_time {int}
1539 trigger_time(A) ::= BEFORE|AFTER(X). { A = @X; /*A-overwrites-X*/ }
1540 trigger_time(A) ::= INSTEAD OF. { A = TK_INSTEAD;}
1541 trigger_time(A) ::= . { A = TK_BEFORE; }
1543 %type trigger_event {struct TrigEvent}
1544 %destructor trigger_event {sqlite3IdListDelete(pParse->db, $$.b);}
1545 trigger_event(A) ::= DELETE|INSERT(X). {A.a = @X; /*A-overwrites-X*/ A.b = 0;}
1546 trigger_event(A) ::= UPDATE(X). {A.a = @X; /*A-overwrites-X*/ A.b = 0;}
1547 trigger_event(A) ::= UPDATE OF idlist(X).{A.a = TK_UPDATE; A.b = X;}
1549 foreach_clause ::= .
1550 foreach_clause ::= FOR EACH ROW.
1552 %type when_clause {Expr*}
1553 %destructor when_clause {sqlite3ExprDelete(pParse->db, $$);}
1554 when_clause(A) ::= . { A = 0; }
1555 when_clause(A) ::= WHEN expr(X). { A = X; }
1557 %type trigger_cmd_list {TriggerStep*}
1558 %destructor trigger_cmd_list {sqlite3DeleteTriggerStep(pParse->db, $$);}
1559 trigger_cmd_list(A) ::= trigger_cmd_list(A) trigger_cmd(X) SEMI. {
1560 assert( A!=0 );
1561 A->pLast->pNext = X;
1562 A->pLast = X;
1564 trigger_cmd_list(A) ::= trigger_cmd(A) SEMI. {
1565 assert( A!=0 );
1566 A->pLast = A;
1569 // Disallow qualified table names on INSERT, UPDATE, and DELETE statements
1570 // within a trigger. The table to INSERT, UPDATE, or DELETE is always in
1571 // the same database as the table that the trigger fires on.
1573 %type trnm {Token}
1574 trnm(A) ::= nm(A).
1575 trnm(A) ::= nm DOT nm(X). {
1576 A = X;
1577 sqlite3ErrorMsg(pParse,
1578 "qualified table names are not allowed on INSERT, UPDATE, and DELETE "
1579 "statements within triggers");
1582 // Disallow the INDEX BY and NOT INDEXED clauses on UPDATE and DELETE
1583 // statements within triggers. We make a specific error message for this
1584 // since it is an exception to the default grammar rules.
1586 tridxby ::= .
1587 tridxby ::= INDEXED BY nm. {
1588 sqlite3ErrorMsg(pParse,
1589 "the INDEXED BY clause is not allowed on UPDATE or DELETE statements "
1590 "within triggers");
1592 tridxby ::= NOT INDEXED. {
1593 sqlite3ErrorMsg(pParse,
1594 "the NOT INDEXED clause is not allowed on UPDATE or DELETE statements "
1595 "within triggers");
1600 %type trigger_cmd {TriggerStep*}
1601 %destructor trigger_cmd {sqlite3DeleteTriggerStep(pParse->db, $$);}
1602 // UPDATE
1603 trigger_cmd(A) ::=
1604 UPDATE(B) orconf(R) trnm(X) tridxby SET setlist(Y) from(F) where_opt(Z) scanpt(E).
1605 {A = sqlite3TriggerUpdateStep(pParse, &X, F, Y, Z, R, B.z, E);}
1607 // INSERT
1608 trigger_cmd(A) ::= scanpt(B) insert_cmd(R) INTO
1609 trnm(X) idlist_opt(F) select(S) upsert(U) scanpt(Z). {
1610 A = sqlite3TriggerInsertStep(pParse,&X,F,S,R,U,B,Z);/*A-overwrites-R*/
1612 // DELETE
1613 trigger_cmd(A) ::= DELETE(B) FROM trnm(X) tridxby where_opt(Y) scanpt(E).
1614 {A = sqlite3TriggerDeleteStep(pParse, &X, Y, B.z, E);}
1616 // SELECT
1617 trigger_cmd(A) ::= scanpt(B) select(X) scanpt(E).
1618 {A = sqlite3TriggerSelectStep(pParse->db, X, B, E); /*A-overwrites-X*/}
1620 // The special RAISE expression that may occur in trigger programs
1621 expr(A) ::= RAISE LP IGNORE RP. {
1622 A = sqlite3PExpr(pParse, TK_RAISE, 0, 0);
1623 if( A ){
1624 A->affExpr = OE_Ignore;
1627 expr(A) ::= RAISE LP raisetype(T) COMMA nm(Z) RP. {
1628 A = sqlite3ExprAlloc(pParse->db, TK_RAISE, &Z, 1);
1629 if( A ) {
1630 A->affExpr = (char)T;
1633 %endif !SQLITE_OMIT_TRIGGER
1635 %type raisetype {int}
1636 raisetype(A) ::= ROLLBACK. {A = OE_Rollback;}
1637 raisetype(A) ::= ABORT. {A = OE_Abort;}
1638 raisetype(A) ::= FAIL. {A = OE_Fail;}
1641 //////////////////////// DROP TRIGGER statement //////////////////////////////
1642 %ifndef SQLITE_OMIT_TRIGGER
1643 cmd ::= DROP TRIGGER ifexists(NOERR) fullname(X). {
1644 sqlite3DropTrigger(pParse,X,NOERR);
1646 %endif !SQLITE_OMIT_TRIGGER
1648 //////////////////////// ATTACH DATABASE file AS name /////////////////////////
1649 %ifndef SQLITE_OMIT_ATTACH
1650 cmd ::= ATTACH database_kw_opt expr(F) AS expr(D) key_opt(K). {
1651 sqlite3Attach(pParse, F, D, K);
1653 cmd ::= DETACH database_kw_opt expr(D). {
1654 sqlite3Detach(pParse, D);
1657 %type key_opt {Expr*}
1658 %destructor key_opt {sqlite3ExprDelete(pParse->db, $$);}
1659 key_opt(A) ::= . { A = 0; }
1660 key_opt(A) ::= KEY expr(X). { A = X; }
1662 database_kw_opt ::= DATABASE.
1663 database_kw_opt ::= .
1664 %endif SQLITE_OMIT_ATTACH
1666 ////////////////////////// REINDEX collation //////////////////////////////////
1667 %ifndef SQLITE_OMIT_REINDEX
1668 cmd ::= REINDEX. {sqlite3Reindex(pParse, 0, 0);}
1669 cmd ::= REINDEX nm(X) dbnm(Y). {sqlite3Reindex(pParse, &X, &Y);}
1670 %endif SQLITE_OMIT_REINDEX
1672 /////////////////////////////////// ANALYZE ///////////////////////////////////
1673 %ifndef SQLITE_OMIT_ANALYZE
1674 cmd ::= ANALYZE. {sqlite3Analyze(pParse, 0, 0);}
1675 cmd ::= ANALYZE nm(X) dbnm(Y). {sqlite3Analyze(pParse, &X, &Y);}
1676 %endif
1678 //////////////////////// ALTER TABLE table ... ////////////////////////////////
1679 %ifndef SQLITE_OMIT_ALTERTABLE
1680 %ifndef SQLITE_OMIT_VIRTUALTABLE
1681 cmd ::= ALTER TABLE fullname(X) RENAME TO nm(Z). {
1682 sqlite3AlterRenameTable(pParse,X,&Z);
1684 cmd ::= ALTER TABLE add_column_fullname
1685 ADD kwcolumn_opt columnname(Y) carglist. {
1686 Y.n = (int)(pParse->sLastToken.z-Y.z) + pParse->sLastToken.n;
1687 sqlite3AlterFinishAddColumn(pParse, &Y);
1689 cmd ::= ALTER TABLE fullname(X) DROP kwcolumn_opt nm(Y). {
1690 sqlite3AlterDropColumn(pParse, X, &Y);
1693 add_column_fullname ::= fullname(X). {
1694 disableLookaside(pParse);
1695 sqlite3AlterBeginAddColumn(pParse, X);
1697 cmd ::= ALTER TABLE fullname(X) RENAME kwcolumn_opt nm(Y) TO nm(Z). {
1698 sqlite3AlterRenameColumn(pParse, X, &Y, &Z);
1701 kwcolumn_opt ::= .
1702 kwcolumn_opt ::= COLUMNKW.
1704 %endif SQLITE_OMIT_VIRTUALTABLE
1705 %endif SQLITE_OMIT_ALTERTABLE
1707 //////////////////////// CREATE VIRTUAL TABLE ... /////////////////////////////
1708 %ifndef SQLITE_OMIT_VIRTUALTABLE
1709 cmd ::= create_vtab. {sqlite3VtabFinishParse(pParse,0);}
1710 cmd ::= create_vtab LP vtabarglist RP(X). {sqlite3VtabFinishParse(pParse,&X);}
1711 create_vtab ::= createkw VIRTUAL TABLE ifnotexists(E)
1712 nm(X) dbnm(Y) USING nm(Z). {
1713 sqlite3VtabBeginParse(pParse, &X, &Y, &Z, E);
1715 vtabarglist ::= vtabarg.
1716 vtabarglist ::= vtabarglist COMMA vtabarg.
1717 vtabarg ::= . {sqlite3VtabArgInit(pParse);}
1718 vtabarg ::= vtabarg vtabargtoken.
1719 vtabargtoken ::= ANY(X). {sqlite3VtabArgExtend(pParse,&X);}
1720 vtabargtoken ::= lp anylist RP(X). {sqlite3VtabArgExtend(pParse,&X);}
1721 lp ::= LP(X). {sqlite3VtabArgExtend(pParse,&X);}
1722 anylist ::= .
1723 anylist ::= anylist LP anylist RP.
1724 anylist ::= anylist ANY.
1725 %endif SQLITE_OMIT_VIRTUALTABLE
1728 //////////////////////// COMMON TABLE EXPRESSIONS ////////////////////////////
1729 %type wqlist {With*}
1730 %destructor wqlist {sqlite3WithDelete(pParse->db, $$);}
1731 %type wqitem {Cte*}
1732 // %destructor wqitem {sqlite3CteDelete(pParse->db, $$);} // not reachable
1734 with ::= .
1735 %ifndef SQLITE_OMIT_CTE
1736 with ::= WITH wqlist(W). { sqlite3WithPush(pParse, W, 1); }
1737 with ::= WITH RECURSIVE wqlist(W). { sqlite3WithPush(pParse, W, 1); }
1739 %type wqas {u8}
1740 wqas(A) ::= AS. {A = M10d_Any;}
1741 wqas(A) ::= AS MATERIALIZED. {A = M10d_Yes;}
1742 wqas(A) ::= AS NOT MATERIALIZED. {A = M10d_No;}
1743 wqitem(A) ::= nm(X) eidlist_opt(Y) wqas(M) LP select(Z) RP. {
1744 A = sqlite3CteNew(pParse, &X, Y, Z, M); /*A-overwrites-X*/
1746 wqlist(A) ::= wqitem(X). {
1747 A = sqlite3WithAdd(pParse, 0, X); /*A-overwrites-X*/
1749 wqlist(A) ::= wqlist(A) COMMA wqitem(X). {
1750 A = sqlite3WithAdd(pParse, A, X);
1752 %endif SQLITE_OMIT_CTE
1754 //////////////////////// WINDOW FUNCTION EXPRESSIONS /////////////////////////
1755 // These must be at the end of this file. Specifically, the rules that
1756 // introduce tokens WINDOW, OVER and FILTER must appear last. This causes
1757 // the integer values assigned to these tokens to be larger than all other
1758 // tokens that may be output by the tokenizer except TK_SPACE and TK_ILLEGAL.
1760 %ifndef SQLITE_OMIT_WINDOWFUNC
1761 %type windowdefn_list {Window*}
1762 %destructor windowdefn_list {sqlite3WindowListDelete(pParse->db, $$);}
1763 windowdefn_list(A) ::= windowdefn(A).
1764 windowdefn_list(A) ::= windowdefn_list(Y) COMMA windowdefn(Z). {
1765 assert( Z!=0 );
1766 sqlite3WindowChain(pParse, Z, Y);
1767 Z->pNextWin = Y;
1768 A = Z;
1771 %type windowdefn {Window*}
1772 %destructor windowdefn {sqlite3WindowDelete(pParse->db, $$);}
1773 windowdefn(A) ::= nm(X) AS LP window(Y) RP. {
1774 if( ALWAYS(Y) ){
1775 Y->zName = sqlite3DbStrNDup(pParse->db, X.z, X.n);
1777 A = Y;
1780 %type window {Window*}
1781 %destructor window {sqlite3WindowDelete(pParse->db, $$);}
1783 %type frame_opt {Window*}
1784 %destructor frame_opt {sqlite3WindowDelete(pParse->db, $$);}
1786 %type part_opt {ExprList*}
1787 %destructor part_opt {sqlite3ExprListDelete(pParse->db, $$);}
1789 %type filter_clause {Expr*}
1790 %destructor filter_clause {sqlite3ExprDelete(pParse->db, $$);}
1792 %type over_clause {Window*}
1793 %destructor over_clause {sqlite3WindowDelete(pParse->db, $$);}
1795 %type filter_over {Window*}
1796 %destructor filter_over {sqlite3WindowDelete(pParse->db, $$);}
1798 %type range_or_rows {int}
1800 %type frame_bound {struct FrameBound}
1801 %destructor frame_bound {sqlite3ExprDelete(pParse->db, $$.pExpr);}
1802 %type frame_bound_s {struct FrameBound}
1803 %destructor frame_bound_s {sqlite3ExprDelete(pParse->db, $$.pExpr);}
1804 %type frame_bound_e {struct FrameBound}
1805 %destructor frame_bound_e {sqlite3ExprDelete(pParse->db, $$.pExpr);}
1807 window(A) ::= PARTITION BY nexprlist(X) orderby_opt(Y) frame_opt(Z). {
1808 A = sqlite3WindowAssemble(pParse, Z, X, Y, 0);
1810 window(A) ::= nm(W) PARTITION BY nexprlist(X) orderby_opt(Y) frame_opt(Z). {
1811 A = sqlite3WindowAssemble(pParse, Z, X, Y, &W);
1813 window(A) ::= ORDER BY sortlist(Y) frame_opt(Z). {
1814 A = sqlite3WindowAssemble(pParse, Z, 0, Y, 0);
1816 window(A) ::= nm(W) ORDER BY sortlist(Y) frame_opt(Z). {
1817 A = sqlite3WindowAssemble(pParse, Z, 0, Y, &W);
1819 window(A) ::= frame_opt(A).
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.