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