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