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 oneselect(A) ::= SELECT distinct(D) selcollist(W) from(X) where_opt(Y) 535 groupby_opt(P) having_opt(Q) 536 %ifndef SQLITE_OMIT_WINDOWFUNC 537 windowdefn_opt(R) 538 %endif 539 orderby_opt(Z) limit_opt(L). { 540 A = sqlite3SelectNew(pParse,W,X,Y,P,Q,Z,D,L); 541 #ifndef SQLITE_OMIT_WINDOWFUNC 542 if( A ){ 543 A->pWinDefn = R; 544 }else{ 545 sqlite3WindowListDelete(pParse->db, R); 546 } 547 #endif /* SQLITE_OMIT_WINDOWFUNC */ 548 } 549 oneselect(A) ::= values(A). 550 551 %type values {Select*} 552 %destructor values {sqlite3SelectDelete(pParse->db, $$);} 553 values(A) ::= VALUES LP nexprlist(X) RP. { 554 A = sqlite3SelectNew(pParse,X,0,0,0,0,0,SF_Values,0); 555 } 556 values(A) ::= values(A) COMMA LP exprlist(Y) RP. { 557 Select *pRight, *pLeft = A; 558 pRight = sqlite3SelectNew(pParse,Y,0,0,0,0,0,SF_Values|SF_MultiValue,0); 559 if( ALWAYS(pLeft) ) pLeft->selFlags &= ~SF_MultiValue; 560 if( pRight ){ 561 pRight->op = TK_ALL; 562 pRight->pPrior = pLeft; 563 A = pRight; 564 }else{ 565 A = pLeft; 566 } 567 } 568 569 // The "distinct" nonterminal is true (1) if the DISTINCT keyword is 570 // present and false (0) if it is not. 571 // 572 %type distinct {int} 573 distinct(A) ::= DISTINCT. {A = SF_Distinct;} 574 distinct(A) ::= ALL. {A = SF_All;} 575 distinct(A) ::= . {A = 0;} 576 577 // selcollist is a list of expressions that are to become the return 578 // values of the SELECT statement. The "*" in statements like 579 // "SELECT * FROM ..." is encoded as a special expression with an 580 // opcode of TK_ASTERISK. 581 // 582 %type selcollist {ExprList*} 583 %destructor selcollist {sqlite3ExprListDelete(pParse->db, $$);} 584 %type sclp {ExprList*} 585 %destructor sclp {sqlite3ExprListDelete(pParse->db, $$);} 586 sclp(A) ::= selcollist(A) COMMA. 587 sclp(A) ::= . {A = 0;} 588 selcollist(A) ::= sclp(A) scanpt(B) expr(X) scanpt(Z) as(Y). { 589 A = sqlite3ExprListAppend(pParse, A, X); 590 if( Y.n>0 ) sqlite3ExprListSetName(pParse, A, &Y, 1); 591 sqlite3ExprListSetSpan(pParse,A,B,Z); 592 } 593 selcollist(A) ::= sclp(A) scanpt STAR. { 594 Expr *p = sqlite3Expr(pParse->db, TK_ASTERISK, 0); 595 A = sqlite3ExprListAppend(pParse, A, p); 596 } 597 selcollist(A) ::= sclp(A) scanpt nm(X) DOT STAR. { 598 Expr *pRight = sqlite3PExpr(pParse, TK_ASTERISK, 0, 0); 599 Expr *pLeft = sqlite3ExprAlloc(pParse->db, TK_ID, &X, 1); 600 Expr *pDot = sqlite3PExpr(pParse, TK_DOT, pLeft, pRight); 601 A = sqlite3ExprListAppend(pParse,A, pDot); 602 } 603 604 // An option "AS <id>" phrase that can follow one of the expressions that 605 // define the result set, or one of the tables in the FROM clause. 606 // 607 %type as {Token} 608 as(X) ::= AS nm(Y). {X = Y;} 609 as(X) ::= ids(X). 610 as(X) ::= . {X.n = 0; X.z = 0;} 611 612 613 %type seltablist {SrcList*} 614 %destructor seltablist {sqlite3SrcListDelete(pParse->db, $$);} 615 %type stl_prefix {SrcList*} 616 %destructor stl_prefix {sqlite3SrcListDelete(pParse->db, $$);} 617 %type from {SrcList*} 618 %destructor from {sqlite3SrcListDelete(pParse->db, $$);} 619 620 // A complete FROM clause. 621 // 622 from(A) ::= . {A = sqlite3DbMallocZero(pParse->db, sizeof(*A));} 623 from(A) ::= FROM seltablist(X). { 624 A = X; 625 sqlite3SrcListShiftJoinType(A); 626 } 627 628 // "seltablist" is a "Select Table List" - the content of the FROM clause 629 // in a SELECT statement. "stl_prefix" is a prefix of this list. 630 // 631 stl_prefix(A) ::= seltablist(A) joinop(Y). { 632 if( ALWAYS(A && A->nSrc>0) ) A->a[A->nSrc-1].fg.jointype = (u8)Y; 633 } 634 stl_prefix(A) ::= . {A = 0;} 635 seltablist(A) ::= stl_prefix(A) nm(Y) dbnm(D) as(Z) indexed_opt(I) 636 on_opt(N) using_opt(U). { 637 A = sqlite3SrcListAppendFromTerm(pParse,A,&Y,&D,&Z,0,N,U); 638 sqlite3SrcListIndexedBy(pParse, A, &I); 639 } 640 seltablist(A) ::= stl_prefix(A) nm(Y) dbnm(D) LP exprlist(E) RP as(Z) 641 on_opt(N) using_opt(U). { 642 A = sqlite3SrcListAppendFromTerm(pParse,A,&Y,&D,&Z,0,N,U); 643 sqlite3SrcListFuncArgs(pParse, A, E); 644 } 645 %ifndef SQLITE_OMIT_SUBQUERY 646 seltablist(A) ::= stl_prefix(A) LP select(S) RP 647 as(Z) on_opt(N) using_opt(U). { 648 A = sqlite3SrcListAppendFromTerm(pParse,A,0,0,&Z,S,N,U); 649 } 650 seltablist(A) ::= stl_prefix(A) LP seltablist(F) RP 651 as(Z) on_opt(N) using_opt(U). { 652 if( A==0 && Z.n==0 && N==0 && U==0 ){ 653 A = F; 654 }else if( F->nSrc==1 ){ 655 A = sqlite3SrcListAppendFromTerm(pParse,A,0,0,&Z,0,N,U); 656 if( A ){ 657 struct SrcList_item *pNew = &A->a[A->nSrc-1]; 658 struct SrcList_item *pOld = F->a; 659 pNew->zName = pOld->zName; 660 pNew->zDatabase = pOld->zDatabase; 661 pNew->pSelect = pOld->pSelect; 662 pOld->zName = pOld->zDatabase = 0; 663 pOld->pSelect = 0; 664 } 665 sqlite3SrcListDelete(pParse->db, F); 666 }else{ 667 Select *pSubquery; 668 sqlite3SrcListShiftJoinType(F); 669 pSubquery = sqlite3SelectNew(pParse,0,F,0,0,0,0,SF_NestedFrom,0); 670 A = sqlite3SrcListAppendFromTerm(pParse,A,0,0,&Z,pSubquery,N,U); 671 } 672 } 673 %endif SQLITE_OMIT_SUBQUERY 674 675 %type dbnm {Token} 676 dbnm(A) ::= . {A.z=0; A.n=0;} 677 dbnm(A) ::= DOT nm(X). {A = X;} 678 679 %type fullname {SrcList*} 680 %destructor fullname {sqlite3SrcListDelete(pParse->db, $$);} 681 fullname(A) ::= nm(X). 682 {A = sqlite3SrcListAppend(pParse->db,0,&X,0); /*A-overwrites-X*/} 683 fullname(A) ::= nm(X) DOT nm(Y). 684 {A = sqlite3SrcListAppend(pParse->db,0,&X,&Y); /*A-overwrites-X*/} 685 686 %type xfullname {SrcList*} 687 %destructor xfullname {sqlite3SrcListDelete(pParse->db, $$);} 688 xfullname(A) ::= nm(X). 689 {A = sqlite3SrcListAppend(pParse->db,0,&X,0); /*A-overwrites-X*/} 690 xfullname(A) ::= nm(X) DOT nm(Y). 691 {A = sqlite3SrcListAppend(pParse->db,0,&X,&Y); /*A-overwrites-X*/} 692 xfullname(A) ::= nm(X) DOT nm(Y) AS nm(Z). { 693 A = sqlite3SrcListAppend(pParse->db,0,&X,&Y); /*A-overwrites-X*/ 694 if( A ) A->a[0].zAlias = sqlite3NameFromToken(pParse->db, &Z); 695 } 696 xfullname(A) ::= nm(X) AS nm(Z). { 697 A = sqlite3SrcListAppend(pParse->db,0,&X,0); /*A-overwrites-X*/ 698 if( A ) A->a[0].zAlias = sqlite3NameFromToken(pParse->db, &Z); 699 } 700 701 %type joinop {int} 702 joinop(X) ::= COMMA|JOIN. { X = JT_INNER; } 703 joinop(X) ::= JOIN_KW(A) JOIN. 704 {X = sqlite3JoinType(pParse,&A,0,0); /*X-overwrites-A*/} 705 joinop(X) ::= JOIN_KW(A) nm(B) JOIN. 706 {X = sqlite3JoinType(pParse,&A,&B,0); /*X-overwrites-A*/} 707 joinop(X) ::= JOIN_KW(A) nm(B) nm(C) JOIN. 708 {X = sqlite3JoinType(pParse,&A,&B,&C);/*X-overwrites-A*/} 709 710 // There is a parsing abiguity in an upsert statement that uses a 711 // SELECT on the RHS of a the INSERT: 712 // 713 // INSERT INTO tab SELECT * FROM aaa JOIN bbb ON CONFLICT ... 714 // here ----^^ 715 // 716 // When the ON token is encountered, the parser does not know if it is 717 // the beginning of an ON CONFLICT clause, or the beginning of an ON 718 // clause associated with the JOIN. The conflict is resolved in favor 719 // of the JOIN. If an ON CONFLICT clause is intended, insert a dummy 720 // WHERE clause in between, like this: 721 // 722 // INSERT INTO tab SELECT * FROM aaa JOIN bbb WHERE true ON CONFLICT ... 723 // 724 // The [AND] and [OR] precedence marks in the rules for on_opt cause the 725 // ON in this context to always be interpreted as belonging to the JOIN. 726 // 727 %type on_opt {Expr*} 728 %destructor on_opt {sqlite3ExprDelete(pParse->db, $$);} 729 on_opt(N) ::= ON expr(E). {N = E;} 730 on_opt(N) ::= . [OR] {N = 0;} 731 732 // Note that this block abuses the Token type just a little. If there is 733 // no "INDEXED BY" clause, the returned token is empty (z==0 && n==0). If 734 // there is an INDEXED BY clause, then the token is populated as per normal, 735 // with z pointing to the token data and n containing the number of bytes 736 // in the token. 737 // 738 // If there is a "NOT INDEXED" clause, then (z==0 && n==1), which is 739 // normally illegal. The sqlite3SrcListIndexedBy() function 740 // recognizes and interprets this as a special case. 741 // 742 %type indexed_opt {Token} 743 indexed_opt(A) ::= . {A.z=0; A.n=0;} 744 indexed_opt(A) ::= INDEXED BY nm(X). {A = X;} 745 indexed_opt(A) ::= NOT INDEXED. {A.z=0; A.n=1;} 746 747 %type using_opt {IdList*} 748 %destructor using_opt {sqlite3IdListDelete(pParse->db, $$);} 749 using_opt(U) ::= USING LP idlist(L) RP. {U = L;} 750 using_opt(U) ::= . {U = 0;} 751 752 753 %type orderby_opt {ExprList*} 754 %destructor orderby_opt {sqlite3ExprListDelete(pParse->db, $$);} 755 756 // the sortlist non-terminal stores a list of expression where each 757 // expression is optionally followed by ASC or DESC to indicate the 758 // sort order. 759 // 760 %type sortlist {ExprList*} 761 %destructor sortlist {sqlite3ExprListDelete(pParse->db, $$);} 762 763 orderby_opt(A) ::= . {A = 0;} 764 orderby_opt(A) ::= ORDER BY sortlist(X). {A = X;} 765 sortlist(A) ::= sortlist(A) COMMA expr(Y) sortorder(Z). { 766 A = sqlite3ExprListAppend(pParse,A,Y); 767 sqlite3ExprListSetSortOrder(A,Z); 768 } 769 sortlist(A) ::= expr(Y) sortorder(Z). { 770 A = sqlite3ExprListAppend(pParse,0,Y); /*A-overwrites-Y*/ 771 sqlite3ExprListSetSortOrder(A,Z); 772 } 773 774 %type sortorder {int} 775 776 sortorder(A) ::= ASC. {A = SQLITE_SO_ASC;} 777 sortorder(A) ::= DESC. {A = SQLITE_SO_DESC;} 778 sortorder(A) ::= . {A = SQLITE_SO_UNDEFINED;} 779 780 %type groupby_opt {ExprList*} 781 %destructor groupby_opt {sqlite3ExprListDelete(pParse->db, $$);} 782 groupby_opt(A) ::= . {A = 0;} 783 groupby_opt(A) ::= GROUP BY nexprlist(X). {A = X;} 784 785 %type having_opt {Expr*} 786 %destructor having_opt {sqlite3ExprDelete(pParse->db, $$);} 787 having_opt(A) ::= . {A = 0;} 788 having_opt(A) ::= HAVING expr(X). {A = X;} 789 790 %type limit_opt {Expr*} 791 792 // The destructor for limit_opt will never fire in the current grammar. 793 // The limit_opt non-terminal only occurs at the end of a single production 794 // rule for SELECT statements. As soon as the rule that create the 795 // limit_opt non-terminal reduces, the SELECT statement rule will also 796 // reduce. So there is never a limit_opt non-terminal on the stack 797 // except as a transient. So there is never anything to destroy. 798 // 799 //%destructor limit_opt {sqlite3ExprDelete(pParse->db, $$);} 800 limit_opt(A) ::= . {A = 0;} 801 limit_opt(A) ::= LIMIT expr(X). 802 {A = sqlite3PExpr(pParse,TK_LIMIT,X,0);} 803 limit_opt(A) ::= LIMIT expr(X) OFFSET expr(Y). 804 {A = sqlite3PExpr(pParse,TK_LIMIT,X,Y);} 805 limit_opt(A) ::= LIMIT expr(X) COMMA expr(Y). 806 {A = sqlite3PExpr(pParse,TK_LIMIT,Y,X);} 807 808 /////////////////////////// The DELETE statement ///////////////////////////// 809 // 810 %ifdef SQLITE_ENABLE_UPDATE_DELETE_LIMIT 811 cmd ::= with DELETE FROM xfullname(X) indexed_opt(I) where_opt(W) 812 orderby_opt(O) limit_opt(L). { 813 sqlite3SrcListIndexedBy(pParse, X, &I); 814 sqlite3DeleteFrom(pParse,X,W,O,L); 815 } 816 %endif 817 %ifndef SQLITE_ENABLE_UPDATE_DELETE_LIMIT 818 cmd ::= with DELETE FROM xfullname(X) indexed_opt(I) where_opt(W). { 819 sqlite3SrcListIndexedBy(pParse, X, &I); 820 sqlite3DeleteFrom(pParse,X,W,0,0); 821 } 822 %endif 823 824 %type where_opt {Expr*} 825 %destructor where_opt {sqlite3ExprDelete(pParse->db, $$);} 826 827 where_opt(A) ::= . {A = 0;} 828 where_opt(A) ::= WHERE expr(X). {A = X;} 829 830 ////////////////////////// The UPDATE command //////////////////////////////// 831 // 832 %ifdef SQLITE_ENABLE_UPDATE_DELETE_LIMIT 833 cmd ::= with UPDATE orconf(R) xfullname(X) indexed_opt(I) SET setlist(Y) 834 where_opt(W) orderby_opt(O) limit_opt(L). { 835 sqlite3SrcListIndexedBy(pParse, X, &I); 836 sqlite3ExprListCheckLength(pParse,Y,"set list"); 837 sqlite3Update(pParse,X,Y,W,R,O,L,0); 838 } 839 %endif 840 %ifndef SQLITE_ENABLE_UPDATE_DELETE_LIMIT 841 cmd ::= with UPDATE orconf(R) xfullname(X) indexed_opt(I) SET setlist(Y) 842 where_opt(W). { 843 sqlite3SrcListIndexedBy(pParse, X, &I); 844 sqlite3ExprListCheckLength(pParse,Y,"set list"); 845 sqlite3Update(pParse,X,Y,W,R,0,0,0); 846 } 847 %endif 848 849 %type setlist {ExprList*} 850 %destructor setlist {sqlite3ExprListDelete(pParse->db, $$);} 851 852 setlist(A) ::= setlist(A) COMMA nm(X) EQ expr(Y). { 853 A = sqlite3ExprListAppend(pParse, A, Y); 854 sqlite3ExprListSetName(pParse, A, &X, 1); 855 } 856 setlist(A) ::= setlist(A) COMMA LP idlist(X) RP EQ expr(Y). { 857 A = sqlite3ExprListAppendVector(pParse, A, X, Y); 858 } 859 setlist(A) ::= nm(X) EQ expr(Y). { 860 A = sqlite3ExprListAppend(pParse, 0, Y); 861 sqlite3ExprListSetName(pParse, A, &X, 1); 862 } 863 setlist(A) ::= LP idlist(X) RP EQ expr(Y). { 864 A = sqlite3ExprListAppendVector(pParse, 0, X, Y); 865 } 866 867 ////////////////////////// The INSERT command ///////////////////////////////// 868 // 869 cmd ::= with insert_cmd(R) INTO xfullname(X) idlist_opt(F) select(S) 870 upsert(U). { 871 sqlite3Insert(pParse, X, S, F, R, U); 872 } 873 cmd ::= with insert_cmd(R) INTO xfullname(X) idlist_opt(F) DEFAULT VALUES. 874 { 875 sqlite3Insert(pParse, X, 0, F, R, 0); 876 } 877 878 %type upsert {Upsert*} 879 880 // Because upsert only occurs at the tip end of the INSERT rule for cmd, 881 // there is never a case where the value of the upsert pointer will not 882 // be destroyed by the cmd action. So comment-out the destructor to 883 // avoid unreachable code. 884 //%destructor upsert {sqlite3UpsertDelete(pParse->db,$$);} 885 upsert(A) ::= . { A = 0; } 886 upsert(A) ::= ON CONFLICT LP sortlist(T) RP where_opt(TW) 887 DO UPDATE SET setlist(Z) where_opt(W). 888 { A = sqlite3UpsertNew(pParse->db,T,TW,Z,W);} 889 upsert(A) ::= ON CONFLICT LP sortlist(T) RP where_opt(TW) DO NOTHING. 890 { A = sqlite3UpsertNew(pParse->db,T,TW,0,0); } 891 upsert(A) ::= ON CONFLICT DO NOTHING. 892 { A = sqlite3UpsertNew(pParse->db,0,0,0,0); } 893 894 %type insert_cmd {int} 895 insert_cmd(A) ::= INSERT orconf(R). {A = R;} 896 insert_cmd(A) ::= REPLACE. {A = OE_Replace;} 897 898 %type idlist_opt {IdList*} 899 %destructor idlist_opt {sqlite3IdListDelete(pParse->db, $$);} 900 %type idlist {IdList*} 901 %destructor idlist {sqlite3IdListDelete(pParse->db, $$);} 902 903 idlist_opt(A) ::= . {A = 0;} 904 idlist_opt(A) ::= LP idlist(X) RP. {A = X;} 905 idlist(A) ::= idlist(A) COMMA nm(Y). 906 {A = sqlite3IdListAppend(pParse->db,A,&Y);} 907 idlist(A) ::= nm(Y). 908 {A = sqlite3IdListAppend(pParse->db,0,&Y); /*A-overwrites-Y*/} 909 910 /////////////////////////// Expression Processing ///////////////////////////// 911 // 912 913 %type expr {Expr*} 914 %destructor expr {sqlite3ExprDelete(pParse->db, $$);} 915 %type term {Expr*} 916 %destructor term {sqlite3ExprDelete(pParse->db, $$);} 917 918 %include { 919 920 /* Construct a new Expr object from a single identifier. Use the 921 ** new Expr to populate pOut. Set the span of pOut to be the identifier 922 ** that created the expression. 923 */ 924 static Expr *tokenExpr(Parse *pParse, int op, Token t){ 925 Expr *p = sqlite3DbMallocRawNN(pParse->db, sizeof(Expr)+t.n+1); 926 if( p ){ 927 memset(p, 0, sizeof(Expr)); 928 p->op = (u8)op; 929 p->flags = EP_Leaf; 930 p->iAgg = -1; 931 p->u.zToken = (char*)&p[1]; 932 memcpy(p->u.zToken, t.z, t.n); 933 p->u.zToken[t.n] = 0; 934 if( sqlite3Isquote(p->u.zToken[0]) ){ 935 if( p->u.zToken[0]=='"' ) p->flags |= EP_DblQuoted; 936 sqlite3Dequote(p->u.zToken); 937 } 938 #if SQLITE_MAX_EXPR_DEPTH>0 939 p->nHeight = 1; 940 #endif 941 } 942 return p; 943 } 944 } 945 946 expr(A) ::= term(A). 947 expr(A) ::= LP expr(X) RP. {A = X;} 948 expr(A) ::= id(X). {A=tokenExpr(pParse,TK_ID,X); /*A-overwrites-X*/} 949 expr(A) ::= JOIN_KW(X). {A=tokenExpr(pParse,TK_ID,X); /*A-overwrites-X*/} 950 expr(A) ::= nm(X) DOT nm(Y). { 951 Expr *temp1 = sqlite3ExprAlloc(pParse->db, TK_ID, &X, 1); 952 Expr *temp2 = sqlite3ExprAlloc(pParse->db, TK_ID, &Y, 1); 953 A = sqlite3PExpr(pParse, TK_DOT, temp1, temp2); 954 } 955 expr(A) ::= nm(X) DOT nm(Y) DOT nm(Z). { 956 Expr *temp1 = sqlite3ExprAlloc(pParse->db, TK_ID, &X, 1); 957 Expr *temp2 = sqlite3ExprAlloc(pParse->db, TK_ID, &Y, 1); 958 Expr *temp3 = sqlite3ExprAlloc(pParse->db, TK_ID, &Z, 1); 959 Expr *temp4 = sqlite3PExpr(pParse, TK_DOT, temp2, temp3); 960 A = sqlite3PExpr(pParse, TK_DOT, temp1, temp4); 961 } 962 term(A) ::= NULL|FLOAT|BLOB(X). {A=tokenExpr(pParse,@X,X); /*A-overwrites-X*/} 963 term(A) ::= STRING(X). {A=tokenExpr(pParse,@X,X); /*A-overwrites-X*/} 964 term(A) ::= INTEGER(X). { 965 A = sqlite3ExprAlloc(pParse->db, TK_INTEGER, &X, 1); 966 } 967 expr(A) ::= VARIABLE(X). { 968 if( !(X.z[0]=='#' && sqlite3Isdigit(X.z[1])) ){ 969 u32 n = X.n; 970 A = tokenExpr(pParse, TK_VARIABLE, X); 971 sqlite3ExprAssignVarNumber(pParse, A, n); 972 }else{ 973 /* When doing a nested parse, one can include terms in an expression 974 ** that look like this: #1 #2 ... These terms refer to registers 975 ** in the virtual machine. #N is the N-th register. */ 976 Token t = X; /*A-overwrites-X*/ 977 assert( t.n>=2 ); 978 if( pParse->nested==0 ){ 979 sqlite3ErrorMsg(pParse, "near \"%T\": syntax error", &t); 980 A = 0; 981 }else{ 982 A = sqlite3PExpr(pParse, TK_REGISTER, 0, 0); 983 if( A ) sqlite3GetInt32(&t.z[1], &A->iTable); 984 } 985 } 986 } 987 expr(A) ::= expr(A) COLLATE ids(C). { 988 A = sqlite3ExprAddCollateToken(pParse, A, &C, 1); 989 } 990 %ifndef SQLITE_OMIT_CAST 991 expr(A) ::= CAST LP expr(E) AS typetoken(T) RP. { 992 A = sqlite3ExprAlloc(pParse->db, TK_CAST, &T, 1); 993 sqlite3ExprAttachSubtrees(pParse->db, A, E, 0); 994 } 995 %endif SQLITE_OMIT_CAST 996 expr(A) ::= id(X) LP distinct(D) exprlist(Y) RP 997 %ifndef SQLITE_OMIT_WINDOWFUNC 998 over_opt(Z) 999 %endif 1000 . { 1001 if( Y && Y->nExpr>pParse->db->aLimit[SQLITE_LIMIT_FUNCTION_ARG] ){ 1002 sqlite3ErrorMsg(pParse, "too many arguments on function %T", &X); 1003 } 1004 A = sqlite3ExprFunction(pParse, Y, &X); 1005 if( D==SF_Distinct && A ){ 1006 A->flags |= EP_Distinct; 1007 } 1008 sqlite3WindowAttach(pParse, A, Z); 1009 } 1010 expr(A) ::= id(X) LP STAR RP 1011 %ifndef SQLITE_OMIT_WINDOWFUNC 1012 over_opt(Z) 1013 %endif 1014 . { 1015 A = sqlite3ExprFunction(pParse, 0, &X); 1016 sqlite3WindowAttach(pParse, A, Z); 1017 } 1018 term(A) ::= CTIME_KW(OP). { 1019 A = sqlite3ExprFunction(pParse, 0, &OP); 1020 } 1021 1022 expr(A) ::= LP nexprlist(X) COMMA expr(Y) RP. { 1023 ExprList *pList = sqlite3ExprListAppend(pParse, X, Y); 1024 A = sqlite3PExpr(pParse, TK_VECTOR, 0, 0); 1025 if( A ){ 1026 A->x.pList = pList; 1027 }else{ 1028 sqlite3ExprListDelete(pParse->db, pList); 1029 } 1030 } 1031 1032 expr(A) ::= expr(A) AND(OP) expr(Y). {A=sqlite3PExpr(pParse,@OP,A,Y);} 1033 expr(A) ::= expr(A) OR(OP) expr(Y). {A=sqlite3PExpr(pParse,@OP,A,Y);} 1034 expr(A) ::= expr(A) LT|GT|GE|LE(OP) expr(Y). 1035 {A=sqlite3PExpr(pParse,@OP,A,Y);} 1036 expr(A) ::= expr(A) EQ|NE(OP) expr(Y). {A=sqlite3PExpr(pParse,@OP,A,Y);} 1037 expr(A) ::= expr(A) BITAND|BITOR|LSHIFT|RSHIFT(OP) expr(Y). 1038 {A=sqlite3PExpr(pParse,@OP,A,Y);} 1039 expr(A) ::= expr(A) PLUS|MINUS(OP) expr(Y). 1040 {A=sqlite3PExpr(pParse,@OP,A,Y);} 1041 expr(A) ::= expr(A) STAR|SLASH|REM(OP) expr(Y). 1042 {A=sqlite3PExpr(pParse,@OP,A,Y);} 1043 expr(A) ::= expr(A) CONCAT(OP) expr(Y). {A=sqlite3PExpr(pParse,@OP,A,Y);} 1044 %type likeop {Token} 1045 likeop(A) ::= LIKE_KW|MATCH(A). 1046 likeop(A) ::= NOT LIKE_KW|MATCH(X). {A=X; A.n|=0x80000000; /*A-overwrite-X*/} 1047 expr(A) ::= expr(A) likeop(OP) expr(Y). [LIKE_KW] { 1048 ExprList *pList; 1049 int bNot = OP.n & 0x80000000; 1050 OP.n &= 0x7fffffff; 1051 pList = sqlite3ExprListAppend(pParse,0, Y); 1052 pList = sqlite3ExprListAppend(pParse,pList, A); 1053 A = sqlite3ExprFunction(pParse, pList, &OP); 1054 if( bNot ) A = sqlite3PExpr(pParse, TK_NOT, A, 0); 1055 if( A ) A->flags |= EP_InfixFunc; 1056 } 1057 expr(A) ::= expr(A) likeop(OP) expr(Y) ESCAPE expr(E). [LIKE_KW] { 1058 ExprList *pList; 1059 int bNot = OP.n & 0x80000000; 1060 OP.n &= 0x7fffffff; 1061 pList = sqlite3ExprListAppend(pParse,0, Y); 1062 pList = sqlite3ExprListAppend(pParse,pList, A); 1063 pList = sqlite3ExprListAppend(pParse,pList, E); 1064 A = sqlite3ExprFunction(pParse, pList, &OP); 1065 if( bNot ) A = sqlite3PExpr(pParse, TK_NOT, A, 0); 1066 if( A ) A->flags |= EP_InfixFunc; 1067 } 1068 1069 expr(A) ::= expr(A) ISNULL|NOTNULL(E). {A = sqlite3PExpr(pParse,@E,A,0);} 1070 expr(A) ::= expr(A) NOT NULL. {A = sqlite3PExpr(pParse,TK_NOTNULL,A,0);} 1071 1072 %include { 1073 /* A routine to convert a binary TK_IS or TK_ISNOT expression into a 1074 ** unary TK_ISNULL or TK_NOTNULL expression. */ 1075 static void binaryToUnaryIfNull(Parse *pParse, Expr *pY, Expr *pA, int op){ 1076 sqlite3 *db = pParse->db; 1077 if( pA && pY && pY->op==TK_NULL ){ 1078 pA->op = (u8)op; 1079 sqlite3ExprDelete(db, pA->pRight); 1080 pA->pRight = 0; 1081 } 1082 } 1083 } 1084 1085 // expr1 IS expr2 1086 // expr1 IS NOT expr2 1087 // 1088 // If expr2 is NULL then code as TK_ISNULL or TK_NOTNULL. If expr2 1089 // is any other expression, code as TK_IS or TK_ISNOT. 1090 // 1091 expr(A) ::= expr(A) IS expr(Y). { 1092 A = sqlite3PExpr(pParse,TK_IS,A,Y); 1093 binaryToUnaryIfNull(pParse, Y, A, TK_ISNULL); 1094 } 1095 expr(A) ::= expr(A) IS NOT expr(Y). { 1096 A = sqlite3PExpr(pParse,TK_ISNOT,A,Y); 1097 binaryToUnaryIfNull(pParse, Y, A, TK_NOTNULL); 1098 } 1099 1100 expr(A) ::= NOT(B) expr(X). 1101 {A = sqlite3PExpr(pParse, @B, X, 0);/*A-overwrites-B*/} 1102 expr(A) ::= BITNOT(B) expr(X). 1103 {A = sqlite3PExpr(pParse, @B, X, 0);/*A-overwrites-B*/} 1104 expr(A) ::= PLUS|MINUS(B) expr(X). [BITNOT] { 1105 A = sqlite3PExpr(pParse, @B==TK_PLUS ? TK_UPLUS : TK_UMINUS, X, 0); 1106 /*A-overwrites-B*/ 1107 } 1108 1109 %type between_op {int} 1110 between_op(A) ::= BETWEEN. {A = 0;} 1111 between_op(A) ::= NOT BETWEEN. {A = 1;} 1112 expr(A) ::= expr(A) between_op(N) expr(X) AND expr(Y). [BETWEEN] { 1113 ExprList *pList = sqlite3ExprListAppend(pParse,0, X); 1114 pList = sqlite3ExprListAppend(pParse,pList, Y); 1115 A = sqlite3PExpr(pParse, TK_BETWEEN, A, 0); 1116 if( A ){ 1117 A->x.pList = pList; 1118 }else{ 1119 sqlite3ExprListDelete(pParse->db, pList); 1120 } 1121 if( N ) A = sqlite3PExpr(pParse, TK_NOT, A, 0); 1122 } 1123 %ifndef SQLITE_OMIT_SUBQUERY 1124 %type in_op {int} 1125 in_op(A) ::= IN. {A = 0;} 1126 in_op(A) ::= NOT IN. {A = 1;} 1127 expr(A) ::= expr(A) in_op(N) LP exprlist(Y) RP. [IN] { 1128 if( Y==0 ){ 1129 /* Expressions of the form 1130 ** 1131 ** expr1 IN () 1132 ** expr1 NOT IN () 1133 ** 1134 ** simplify to constants 0 (false) and 1 (true), respectively, 1135 ** regardless of the value of expr1. 1136 */ 1137 sqlite3ExprDelete(pParse->db, A); 1138 A = sqlite3ExprAlloc(pParse->db, TK_INTEGER,&sqlite3IntTokens[N],1); 1139 }else if( Y->nExpr==1 ){ 1140 /* Expressions of the form: 1141 ** 1142 ** expr1 IN (?1) 1143 ** expr1 NOT IN (?2) 1144 ** 1145 ** with exactly one value on the RHS can be simplified to something 1146 ** like this: 1147 ** 1148 ** expr1 == ?1 1149 ** expr1 <> ?2 1150 ** 1151 ** But, the RHS of the == or <> is marked with the EP_Generic flag 1152 ** so that it may not contribute to the computation of comparison 1153 ** affinity or the collating sequence to use for comparison. Otherwise, 1154 ** the semantics would be subtly different from IN or NOT IN. 1155 */ 1156 Expr *pRHS = Y->a[0].pExpr; 1157 Y->a[0].pExpr = 0; 1158 sqlite3ExprListDelete(pParse->db, Y); 1159 /* pRHS cannot be NULL because a malloc error would have been detected 1160 ** before now and control would have never reached this point */ 1161 if( ALWAYS(pRHS) ){ 1162 pRHS->flags &= ~EP_Collate; 1163 pRHS->flags |= EP_Generic; 1164 } 1165 A = sqlite3PExpr(pParse, N ? TK_NE : TK_EQ, A, pRHS); 1166 }else{ 1167 A = sqlite3PExpr(pParse, TK_IN, A, 0); 1168 if( A ){ 1169 A->x.pList = Y; 1170 sqlite3ExprSetHeightAndFlags(pParse, A); 1171 }else{ 1172 sqlite3ExprListDelete(pParse->db, Y); 1173 } 1174 if( N ) A = sqlite3PExpr(pParse, TK_NOT, A, 0); 1175 } 1176 } 1177 expr(A) ::= LP select(X) RP. { 1178 A = sqlite3PExpr(pParse, TK_SELECT, 0, 0); 1179 sqlite3PExprAddSelect(pParse, A, X); 1180 } 1181 expr(A) ::= expr(A) in_op(N) LP select(Y) RP. [IN] { 1182 A = sqlite3PExpr(pParse, TK_IN, A, 0); 1183 sqlite3PExprAddSelect(pParse, A, Y); 1184 if( N ) A = sqlite3PExpr(pParse, TK_NOT, A, 0); 1185 } 1186 expr(A) ::= expr(A) in_op(N) nm(Y) dbnm(Z) paren_exprlist(E). [IN] { 1187 SrcList *pSrc = sqlite3SrcListAppend(pParse->db, 0,&Y,&Z); 1188 Select *pSelect = sqlite3SelectNew(pParse, 0,pSrc,0,0,0,0,0,0); 1189 if( E ) sqlite3SrcListFuncArgs(pParse, pSelect ? pSrc : 0, E); 1190 A = sqlite3PExpr(pParse, TK_IN, A, 0); 1191 sqlite3PExprAddSelect(pParse, A, pSelect); 1192 if( N ) A = sqlite3PExpr(pParse, TK_NOT, A, 0); 1193 } 1194 expr(A) ::= EXISTS LP select(Y) RP. { 1195 Expr *p; 1196 p = A = sqlite3PExpr(pParse, TK_EXISTS, 0, 0); 1197 sqlite3PExprAddSelect(pParse, p, Y); 1198 } 1199 %endif SQLITE_OMIT_SUBQUERY 1200 1201 /* CASE expressions */ 1202 expr(A) ::= CASE case_operand(X) case_exprlist(Y) case_else(Z) END. { 1203 A = sqlite3PExpr(pParse, TK_CASE, X, 0); 1204 if( A ){ 1205 A->x.pList = Z ? sqlite3ExprListAppend(pParse,Y,Z) : Y; 1206 sqlite3ExprSetHeightAndFlags(pParse, A); 1207 }else{ 1208 sqlite3ExprListDelete(pParse->db, Y); 1209 sqlite3ExprDelete(pParse->db, Z); 1210 } 1211 } 1212 %type case_exprlist {ExprList*} 1213 %destructor case_exprlist {sqlite3ExprListDelete(pParse->db, $$);} 1214 case_exprlist(A) ::= case_exprlist(A) WHEN expr(Y) THEN expr(Z). { 1215 A = sqlite3ExprListAppend(pParse,A, Y); 1216 A = sqlite3ExprListAppend(pParse,A, Z); 1217 } 1218 case_exprlist(A) ::= WHEN expr(Y) THEN expr(Z). { 1219 A = sqlite3ExprListAppend(pParse,0, Y); 1220 A = sqlite3ExprListAppend(pParse,A, Z); 1221 } 1222 %type case_else {Expr*} 1223 %destructor case_else {sqlite3ExprDelete(pParse->db, $$);} 1224 case_else(A) ::= ELSE expr(X). {A = X;} 1225 case_else(A) ::= . {A = 0;} 1226 %type case_operand {Expr*} 1227 %destructor case_operand {sqlite3ExprDelete(pParse->db, $$);} 1228 case_operand(A) ::= expr(X). {A = X; /*A-overwrites-X*/} 1229 case_operand(A) ::= . {A = 0;} 1230 1231 %type exprlist {ExprList*} 1232 %destructor exprlist {sqlite3ExprListDelete(pParse->db, $$);} 1233 %type nexprlist {ExprList*} 1234 %destructor nexprlist {sqlite3ExprListDelete(pParse->db, $$);} 1235 1236 exprlist(A) ::= nexprlist(A). 1237 exprlist(A) ::= . {A = 0;} 1238 nexprlist(A) ::= nexprlist(A) COMMA expr(Y). 1239 {A = sqlite3ExprListAppend(pParse,A,Y);} 1240 nexprlist(A) ::= expr(Y). 1241 {A = sqlite3ExprListAppend(pParse,0,Y); /*A-overwrites-Y*/} 1242 1243 %ifndef SQLITE_OMIT_SUBQUERY 1244 /* A paren_exprlist is an optional expression list contained inside 1245 ** of parenthesis */ 1246 %type paren_exprlist {ExprList*} 1247 %destructor paren_exprlist {sqlite3ExprListDelete(pParse->db, $$);} 1248 paren_exprlist(A) ::= . {A = 0;} 1249 paren_exprlist(A) ::= LP exprlist(X) RP. {A = X;} 1250 %endif SQLITE_OMIT_SUBQUERY 1251 1252 1253 ///////////////////////////// The CREATE INDEX command /////////////////////// 1254 // 1255 cmd ::= createkw(S) uniqueflag(U) INDEX ifnotexists(NE) nm(X) dbnm(D) 1256 ON nm(Y) LP sortlist(Z) RP where_opt(W). { 1257 sqlite3CreateIndex(pParse, &X, &D, 1258 sqlite3SrcListAppend(pParse->db,0,&Y,0), Z, U, 1259 &S, W, SQLITE_SO_ASC, NE, SQLITE_IDXTYPE_APPDEF); 1260 } 1261 1262 %type uniqueflag {int} 1263 uniqueflag(A) ::= UNIQUE. {A = OE_Abort;} 1264 uniqueflag(A) ::= . {A = OE_None;} 1265 1266 1267 // The eidlist non-terminal (Expression Id List) generates an ExprList 1268 // from a list of identifiers. The identifier names are in ExprList.a[].zName. 1269 // This list is stored in an ExprList rather than an IdList so that it 1270 // can be easily sent to sqlite3ColumnsExprList(). 1271 // 1272 // eidlist is grouped with CREATE INDEX because it used to be the non-terminal 1273 // used for the arguments to an index. That is just an historical accident. 1274 // 1275 // IMPORTANT COMPATIBILITY NOTE: Some prior versions of SQLite accepted 1276 // COLLATE clauses and ASC or DESC keywords on ID lists in inappropriate 1277 // places - places that might have been stored in the sqlite_master schema. 1278 // Those extra features were ignored. But because they might be in some 1279 // (busted) old databases, we need to continue parsing them when loading 1280 // historical schemas. 1281 // 1282 %type eidlist {ExprList*} 1283 %destructor eidlist {sqlite3ExprListDelete(pParse->db, $$);} 1284 %type eidlist_opt {ExprList*} 1285 %destructor eidlist_opt {sqlite3ExprListDelete(pParse->db, $$);} 1286 1287 %include { 1288 /* Add a single new term to an ExprList that is used to store a 1289 ** list of identifiers. Report an error if the ID list contains 1290 ** a COLLATE clause or an ASC or DESC keyword, except ignore the 1291 ** error while parsing a legacy schema. 1292 */ 1293 static ExprList *parserAddExprIdListTerm( 1294 Parse *pParse, 1295 ExprList *pPrior, 1296 Token *pIdToken, 1297 int hasCollate, 1298 int sortOrder 1299 ){ 1300 ExprList *p = sqlite3ExprListAppend(pParse, pPrior, 0); 1301 if( (hasCollate || sortOrder!=SQLITE_SO_UNDEFINED) 1302 && pParse->db->init.busy==0 1303 ){ 1304 sqlite3ErrorMsg(pParse, "syntax error after column name \"%.*s\"", 1305 pIdToken->n, pIdToken->z); 1306 } 1307 sqlite3ExprListSetName(pParse, p, pIdToken, 1); 1308 return p; 1309 } 1310 } // end %include 1311 1312 eidlist_opt(A) ::= . {A = 0;} 1313 eidlist_opt(A) ::= LP eidlist(X) RP. {A = X;} 1314 eidlist(A) ::= eidlist(A) COMMA nm(Y) collate(C) sortorder(Z). { 1315 A = parserAddExprIdListTerm(pParse, A, &Y, C, Z); 1316 } 1317 eidlist(A) ::= nm(Y) collate(C) sortorder(Z). { 1318 A = parserAddExprIdListTerm(pParse, 0, &Y, C, Z); /*A-overwrites-Y*/ 1319 } 1320 1321 %type collate {int} 1322 collate(C) ::= . {C = 0;} 1323 collate(C) ::= COLLATE ids. {C = 1;} 1324 1325 1326 ///////////////////////////// The DROP INDEX command ///////////////////////// 1327 // 1328 cmd ::= DROP INDEX ifexists(E) fullname(X). {sqlite3DropIndex(pParse, X, E);} 1329 1330 ///////////////////////////// The VACUUM command ///////////////////////////// 1331 // 1332 %ifndef SQLITE_OMIT_VACUUM 1333 %ifndef SQLITE_OMIT_ATTACH 1334 cmd ::= VACUUM. {sqlite3Vacuum(pParse,0);} 1335 cmd ::= VACUUM nm(X). {sqlite3Vacuum(pParse,&X);} 1336 %endif SQLITE_OMIT_ATTACH 1337 %endif SQLITE_OMIT_VACUUM 1338 1339 ///////////////////////////// The PRAGMA command ///////////////////////////// 1340 // 1341 %ifndef SQLITE_OMIT_PRAGMA 1342 cmd ::= PRAGMA nm(X) dbnm(Z). {sqlite3Pragma(pParse,&X,&Z,0,0);} 1343 cmd ::= PRAGMA nm(X) dbnm(Z) EQ nmnum(Y). {sqlite3Pragma(pParse,&X,&Z,&Y,0);} 1344 cmd ::= PRAGMA nm(X) dbnm(Z) LP nmnum(Y) RP. {sqlite3Pragma(pParse,&X,&Z,&Y,0);} 1345 cmd ::= PRAGMA nm(X) dbnm(Z) EQ minus_num(Y). 1346 {sqlite3Pragma(pParse,&X,&Z,&Y,1);} 1347 cmd ::= PRAGMA nm(X) dbnm(Z) LP minus_num(Y) RP. 1348 {sqlite3Pragma(pParse,&X,&Z,&Y,1);} 1349 1350 nmnum(A) ::= plus_num(A). 1351 nmnum(A) ::= nm(A). 1352 nmnum(A) ::= ON(A). 1353 nmnum(A) ::= DELETE(A). 1354 nmnum(A) ::= DEFAULT(A). 1355 %endif SQLITE_OMIT_PRAGMA 1356 %token_class number INTEGER|FLOAT. 1357 plus_num(A) ::= PLUS number(X). {A = X;} 1358 plus_num(A) ::= number(A). 1359 minus_num(A) ::= MINUS number(X). {A = X;} 1360 //////////////////////////// The CREATE TRIGGER command ///////////////////// 1361 1362 %ifndef SQLITE_OMIT_TRIGGER 1363 1364 cmd ::= createkw trigger_decl(A) BEGIN trigger_cmd_list(S) END(Z). { 1365 Token all; 1366 all.z = A.z; 1367 all.n = (int)(Z.z - A.z) + Z.n; 1368 sqlite3FinishTrigger(pParse, S, &all); 1369 } 1370 1371 trigger_decl(A) ::= temp(T) TRIGGER ifnotexists(NOERR) nm(B) dbnm(Z) 1372 trigger_time(C) trigger_event(D) 1373 ON fullname(E) foreach_clause when_clause(G). { 1374 sqlite3BeginTrigger(pParse, &B, &Z, C, D.a, D.b, E, G, T, NOERR); 1375 A = (Z.n==0?B:Z); /*A-overwrites-T*/ 1376 } 1377 1378 %type trigger_time {int} 1379 trigger_time(A) ::= BEFORE|AFTER(X). { A = @X; /*A-overwrites-X*/ } 1380 trigger_time(A) ::= INSTEAD OF. { A = TK_INSTEAD;} 1381 trigger_time(A) ::= . { A = TK_BEFORE; } 1382 1383 %type trigger_event {struct TrigEvent} 1384 %destructor trigger_event {sqlite3IdListDelete(pParse->db, $$.b);} 1385 trigger_event(A) ::= DELETE|INSERT(X). {A.a = @X; /*A-overwrites-X*/ A.b = 0;} 1386 trigger_event(A) ::= UPDATE(X). {A.a = @X; /*A-overwrites-X*/ A.b = 0;} 1387 trigger_event(A) ::= UPDATE OF idlist(X).{A.a = TK_UPDATE; A.b = X;} 1388 1389 foreach_clause ::= . 1390 foreach_clause ::= FOR EACH ROW. 1391 1392 %type when_clause {Expr*} 1393 %destructor when_clause {sqlite3ExprDelete(pParse->db, $$);} 1394 when_clause(A) ::= . { A = 0; } 1395 when_clause(A) ::= WHEN expr(X). { A = X; } 1396 1397 %type trigger_cmd_list {TriggerStep*} 1398 %destructor trigger_cmd_list {sqlite3DeleteTriggerStep(pParse->db, $$);} 1399 trigger_cmd_list(A) ::= trigger_cmd_list(A) trigger_cmd(X) SEMI. { 1400 assert( A!=0 ); 1401 A->pLast->pNext = X; 1402 A->pLast = X; 1403 } 1404 trigger_cmd_list(A) ::= trigger_cmd(A) SEMI. { 1405 assert( A!=0 ); 1406 A->pLast = A; 1407 } 1408 1409 // Disallow qualified table names on INSERT, UPDATE, and DELETE statements 1410 // within a trigger. The table to INSERT, UPDATE, or DELETE is always in 1411 // the same database as the table that the trigger fires on. 1412 // 1413 %type trnm {Token} 1414 trnm(A) ::= nm(A). 1415 trnm(A) ::= nm DOT nm(X). { 1416 A = X; 1417 sqlite3ErrorMsg(pParse, 1418 "qualified table names are not allowed on INSERT, UPDATE, and DELETE " 1419 "statements within triggers"); 1420 } 1421 1422 // Disallow the INDEX BY and NOT INDEXED clauses on UPDATE and DELETE 1423 // statements within triggers. We make a specific error message for this 1424 // since it is an exception to the default grammar rules. 1425 // 1426 tridxby ::= . 1427 tridxby ::= INDEXED BY nm. { 1428 sqlite3ErrorMsg(pParse, 1429 "the INDEXED BY clause is not allowed on UPDATE or DELETE statements " 1430 "within triggers"); 1431 } 1432 tridxby ::= NOT INDEXED. { 1433 sqlite3ErrorMsg(pParse, 1434 "the NOT INDEXED clause is not allowed on UPDATE or DELETE statements " 1435 "within triggers"); 1436 } 1437 1438 1439 1440 %type trigger_cmd {TriggerStep*} 1441 %destructor trigger_cmd {sqlite3DeleteTriggerStep(pParse->db, $$);} 1442 // UPDATE 1443 trigger_cmd(A) ::= 1444 UPDATE(B) orconf(R) trnm(X) tridxby SET setlist(Y) where_opt(Z) scanpt(E). 1445 {A = sqlite3TriggerUpdateStep(pParse->db, &X, Y, Z, R, B.z, E);} 1446 1447 // INSERT 1448 trigger_cmd(A) ::= scanpt(B) insert_cmd(R) INTO 1449 trnm(X) idlist_opt(F) select(S) upsert(U) scanpt(Z). { 1450 A = sqlite3TriggerInsertStep(pParse->db,&X,F,S,R,U,B,Z);/*A-overwrites-R*/ 1451 } 1452 // DELETE 1453 trigger_cmd(A) ::= DELETE(B) FROM trnm(X) tridxby where_opt(Y) scanpt(E). 1454 {A = sqlite3TriggerDeleteStep(pParse->db, &X, Y, B.z, E);} 1455 1456 // SELECT 1457 trigger_cmd(A) ::= scanpt(B) select(X) scanpt(E). 1458 {A = sqlite3TriggerSelectStep(pParse->db, X, B, E); /*A-overwrites-X*/} 1459 1460 // The special RAISE expression that may occur in trigger programs 1461 expr(A) ::= RAISE LP IGNORE RP. { 1462 A = sqlite3PExpr(pParse, TK_RAISE, 0, 0); 1463 if( A ){ 1464 A->affinity = OE_Ignore; 1465 } 1466 } 1467 expr(A) ::= RAISE LP raisetype(T) COMMA nm(Z) RP. { 1468 A = sqlite3ExprAlloc(pParse->db, TK_RAISE, &Z, 1); 1469 if( A ) { 1470 A->affinity = (char)T; 1471 } 1472 } 1473 %endif !SQLITE_OMIT_TRIGGER 1474 1475 %type raisetype {int} 1476 raisetype(A) ::= ROLLBACK. {A = OE_Rollback;} 1477 raisetype(A) ::= ABORT. {A = OE_Abort;} 1478 raisetype(A) ::= FAIL. {A = OE_Fail;} 1479 1480 1481 //////////////////////// DROP TRIGGER statement ////////////////////////////// 1482 %ifndef SQLITE_OMIT_TRIGGER 1483 cmd ::= DROP TRIGGER ifexists(NOERR) fullname(X). { 1484 sqlite3DropTrigger(pParse,X,NOERR); 1485 } 1486 %endif !SQLITE_OMIT_TRIGGER 1487 1488 //////////////////////// ATTACH DATABASE file AS name ///////////////////////// 1489 %ifndef SQLITE_OMIT_ATTACH 1490 cmd ::= ATTACH database_kw_opt expr(F) AS expr(D) key_opt(K). { 1491 sqlite3Attach(pParse, F, D, K); 1492 } 1493 cmd ::= DETACH database_kw_opt expr(D). { 1494 sqlite3Detach(pParse, D); 1495 } 1496 1497 %type key_opt {Expr*} 1498 %destructor key_opt {sqlite3ExprDelete(pParse->db, $$);} 1499 key_opt(A) ::= . { A = 0; } 1500 key_opt(A) ::= KEY expr(X). { A = X; } 1501 1502 database_kw_opt ::= DATABASE. 1503 database_kw_opt ::= . 1504 %endif SQLITE_OMIT_ATTACH 1505 1506 ////////////////////////// REINDEX collation ////////////////////////////////// 1507 %ifndef SQLITE_OMIT_REINDEX 1508 cmd ::= REINDEX. {sqlite3Reindex(pParse, 0, 0);} 1509 cmd ::= REINDEX nm(X) dbnm(Y). {sqlite3Reindex(pParse, &X, &Y);} 1510 %endif SQLITE_OMIT_REINDEX 1511 1512 /////////////////////////////////// ANALYZE /////////////////////////////////// 1513 %ifndef SQLITE_OMIT_ANALYZE 1514 cmd ::= ANALYZE. {sqlite3Analyze(pParse, 0, 0);} 1515 cmd ::= ANALYZE nm(X) dbnm(Y). {sqlite3Analyze(pParse, &X, &Y);} 1516 %endif 1517 1518 //////////////////////// ALTER TABLE table ... //////////////////////////////// 1519 %ifndef SQLITE_OMIT_ALTERTABLE 1520 cmd ::= ALTER TABLE fullname(X) RENAME TO nm(Z). { 1521 sqlite3AlterRenameTable(pParse,X,&Z); 1522 } 1523 cmd ::= ALTER TABLE add_column_fullname 1524 ADD kwcolumn_opt columnname(Y) carglist. { 1525 Y.n = (int)(pParse->sLastToken.z-Y.z) + pParse->sLastToken.n; 1526 sqlite3AlterFinishAddColumn(pParse, &Y); 1527 } 1528 add_column_fullname ::= fullname(X). { 1529 disableLookaside(pParse); 1530 sqlite3AlterBeginAddColumn(pParse, X); 1531 } 1532 kwcolumn_opt ::= . 1533 kwcolumn_opt ::= COLUMNKW. 1534 %endif SQLITE_OMIT_ALTERTABLE 1535 1536 //////////////////////// CREATE VIRTUAL TABLE ... ///////////////////////////// 1537 %ifndef SQLITE_OMIT_VIRTUALTABLE 1538 cmd ::= create_vtab. {sqlite3VtabFinishParse(pParse,0);} 1539 cmd ::= create_vtab LP vtabarglist RP(X). {sqlite3VtabFinishParse(pParse,&X);} 1540 create_vtab ::= createkw VIRTUAL TABLE ifnotexists(E) 1541 nm(X) dbnm(Y) USING nm(Z). { 1542 sqlite3VtabBeginParse(pParse, &X, &Y, &Z, E); 1543 } 1544 vtabarglist ::= vtabarg. 1545 vtabarglist ::= vtabarglist COMMA vtabarg. 1546 vtabarg ::= . {sqlite3VtabArgInit(pParse);} 1547 vtabarg ::= vtabarg vtabargtoken. 1548 vtabargtoken ::= ANY(X). {sqlite3VtabArgExtend(pParse,&X);} 1549 vtabargtoken ::= lp anylist RP(X). {sqlite3VtabArgExtend(pParse,&X);} 1550 lp ::= LP(X). {sqlite3VtabArgExtend(pParse,&X);} 1551 anylist ::= . 1552 anylist ::= anylist LP anylist RP. 1553 anylist ::= anylist ANY. 1554 %endif SQLITE_OMIT_VIRTUALTABLE 1555 1556 1557 //////////////////////// COMMON TABLE EXPRESSIONS //////////////////////////// 1558 %type wqlist {With*} 1559 %destructor wqlist {sqlite3WithDelete(pParse->db, $$);} 1560 1561 with ::= . 1562 %ifndef SQLITE_OMIT_CTE 1563 with ::= WITH wqlist(W). { sqlite3WithPush(pParse, W, 1); } 1564 with ::= WITH RECURSIVE wqlist(W). { sqlite3WithPush(pParse, W, 1); } 1565 1566 wqlist(A) ::= nm(X) eidlist_opt(Y) AS LP select(Z) RP. { 1567 A = sqlite3WithAdd(pParse, 0, &X, Y, Z); /*A-overwrites-X*/ 1568 } 1569 wqlist(A) ::= wqlist(A) COMMA nm(X) eidlist_opt(Y) AS LP select(Z) RP. { 1570 A = sqlite3WithAdd(pParse, A, &X, Y, Z); 1571 } 1572 %endif SQLITE_OMIT_CTE 1573 1574 //////////////////////// WINDOW FUNCTION EXPRESSIONS ///////////////////////// 1575 // These must be at the end of this file. Specifically, the rules that 1576 // introduce tokens WINDOW, OVER and FILTER must appear last. This causes 1577 // the integer values assigned to these tokens to be larger than all other 1578 // tokens that may be output by the tokenizer except TK_SPACE and TK_ILLEGAL. 1579 // 1580 %ifndef SQLITE_OMIT_WINDOWFUNC 1581 %type windowdefn_list {Window*} 1582 %destructor windowdefn_list {sqlite3WindowListDelete(pParse->db, $$);} 1583 windowdefn_list(A) ::= windowdefn(Z). { A = Z; } 1584 windowdefn_list(A) ::= windowdefn_list(Y) COMMA windowdefn(Z). { 1585 assert( Z!=0 ); 1586 Z->pNextWin = Y; 1587 A = Z; 1588 } 1589 1590 %type windowdefn {Window*} 1591 %destructor windowdefn {sqlite3WindowDelete(pParse->db, $$);} 1592 windowdefn(A) ::= nm(X) AS window(Y). { 1593 if( ALWAYS(Y) ){ 1594 Y->zName = sqlite3DbStrNDup(pParse->db, X.z, X.n); 1595 } 1596 A = Y; 1597 } 1598 1599 %type window {Window*} 1600 %destructor window {sqlite3WindowDelete(pParse->db, $$);} 1601 1602 %type frame_opt {Window*} 1603 %destructor frame_opt {sqlite3WindowDelete(pParse->db, $$);} 1604 1605 %type part_opt {ExprList*} 1606 %destructor part_opt {sqlite3ExprListDelete(pParse->db, $$);} 1607 1608 %type filter_opt {Expr*} 1609 %destructor filter_opt {sqlite3ExprDelete(pParse->db, $$);} 1610 1611 %type range_or_rows {int} 1612 1613 %type frame_bound {struct FrameBound} 1614 %destructor frame_bound {sqlite3ExprDelete(pParse->db, $$.pExpr);} 1615 %type frame_bound_s {struct FrameBound} 1616 %destructor frame_bound_s {sqlite3ExprDelete(pParse->db, $$.pExpr);} 1617 %type frame_bound_e {struct FrameBound} 1618 %destructor frame_bound_e {sqlite3ExprDelete(pParse->db, $$.pExpr);} 1619 1620 window(A) ::= LP part_opt(X) orderby_opt(Y) frame_opt(Z) RP. { 1621 A = Z; 1622 if( ALWAYS(A) ){ 1623 A->pPartition = X; 1624 A->pOrderBy = Y; 1625 } 1626 } 1627 1628 part_opt(A) ::= PARTITION BY exprlist(X). { A = X; } 1629 part_opt(A) ::= . { A = 0; } 1630 1631 frame_opt(A) ::= . { 1632 A = sqlite3WindowAlloc(pParse, TK_RANGE, TK_UNBOUNDED, 0, TK_CURRENT, 0); 1633 } 1634 frame_opt(A) ::= range_or_rows(X) frame_bound_s(Y). { 1635 A = sqlite3WindowAlloc(pParse, X, Y.eType, Y.pExpr, TK_CURRENT, 0); 1636 } 1637 frame_opt(A) ::= range_or_rows(X) BETWEEN frame_bound_s(Y) AND frame_bound_e(Z). { 1638 A = sqlite3WindowAlloc(pParse, X, Y.eType, Y.pExpr, Z.eType, Z.pExpr); 1639 } 1640 1641 range_or_rows(A) ::= RANGE. { A = TK_RANGE; } 1642 range_or_rows(A) ::= ROWS. { A = TK_ROWS; } 1643 1644 1645 frame_bound_s(A) ::= frame_bound(X). { A = X; } 1646 frame_bound_s(A) ::= UNBOUNDED PRECEDING. {A.eType = TK_UNBOUNDED; A.pExpr = 0;} 1647 frame_bound_e(A) ::= frame_bound(X). { A = X; } 1648 frame_bound_e(A) ::= UNBOUNDED FOLLOWING. {A.eType = TK_UNBOUNDED; A.pExpr = 0;} 1649 1650 frame_bound(A) ::= expr(X) PRECEDING. { A.eType = TK_PRECEDING; A.pExpr = X; } 1651 frame_bound(A) ::= CURRENT ROW. { A.eType = TK_CURRENT ; A.pExpr = 0; } 1652 frame_bound(A) ::= expr(X) FOLLOWING. { A.eType = TK_FOLLOWING; A.pExpr = X; } 1653 1654 %type windowdefn_opt {Window*} 1655 %destructor windowdefn_opt {sqlite3WindowListDelete(pParse->db, $$);} 1656 windowdefn_opt(A) ::= . { A = 0; } 1657 windowdefn_opt(A) ::= WINDOW windowdefn_list(B). { A = B; } 1658 1659 %type over_opt {Window*} 1660 %destructor over_opt {sqlite3WindowDelete(pParse->db, $$);} 1661 over_opt(A) ::= . { A = 0; } 1662 over_opt(A) ::= filter_opt(W) OVER window(Z). { 1663 A = Z; 1664 assert( A!=0 ); 1665 A->pFilter = W; 1666 } 1667 over_opt(A) ::= filter_opt(W) OVER nm(Z). { 1668 A = (Window*)sqlite3DbMallocZero(pParse->db, sizeof(Window)); 1669 if( A ){ 1670 A->zName = sqlite3DbStrNDup(pParse->db, Z.z, Z.n); 1671 A->pFilter = W; 1672 }else{ 1673 sqlite3ExprDelete(pParse->db, W); 1674 } 1675 } 1676 1677 filter_opt(A) ::= . { A = 0; } 1678 filter_opt(A) ::= FILTER LP WHERE expr(X) RP. { A = X; } 1679 %endif /* SQLITE_OMIT_WINDOWFUNC */ 1680