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