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