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