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