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