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; 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 if( pRhs && pRhs->pPrior ){ 452 SrcList *pFrom; 453 Token x; 454 x.n = 0; 455 parserDoubleLinkSelect(pParse, pRhs); 456 pFrom = sqlite3SrcListAppendFromTerm(pParse,0,0,0,&x,pRhs,0,0); 457 pRhs = sqlite3SelectNew(pParse,0,pFrom,0,0,0,0,0,0,0); 458 } 459 if( pRhs ){ 460 pRhs->op = (u8)Y; 461 pRhs->pPrior = X; 462 pRhs->selFlags &= ~SF_MultiValue; 463 if( Y!=TK_ALL ) pParse->hasCompound = 1; 464 }else{ 465 sqlite3SelectDelete(pParse->db, X); 466 } 467 A = pRhs; 468 } 469 %type multiselect_op {int} 470 multiselect_op(A) ::= UNION(OP). {A = @OP;} 471 multiselect_op(A) ::= UNION ALL. {A = TK_ALL;} 472 multiselect_op(A) ::= EXCEPT|INTERSECT(OP). {A = @OP;} 473 %endif SQLITE_OMIT_COMPOUND_SELECT 474 oneselect(A) ::= SELECT(S) distinct(D) selcollist(W) from(X) where_opt(Y) 475 groupby_opt(P) having_opt(Q) orderby_opt(Z) limit_opt(L). { 476 A = sqlite3SelectNew(pParse,W,X,Y,P,Q,Z,D,L.pLimit,L.pOffset); 477 #if SELECTTRACE_ENABLED 478 /* Populate the Select.zSelName[] string that is used to help with 479 ** query planner debugging, to differentiate between multiple Select 480 ** objects in a complex query. 481 ** 482 ** If the SELECT keyword is immediately followed by a C-style comment 483 ** then extract the first few alphanumeric characters from within that 484 ** comment to be the zSelName value. Otherwise, the label is #N where 485 ** is an integer that is incremented with each SELECT statement seen. 486 */ 487 if( A!=0 ){ 488 const char *z = S.z+6; 489 int i; 490 sqlite3_snprintf(sizeof(A->zSelName), A->zSelName, "#%d", 491 ++pParse->nSelect); 492 while( z[0]==' ' ) z++; 493 if( z[0]=='/' && z[1]=='*' ){ 494 z += 2; 495 while( z[0]==' ' ) z++; 496 for(i=0; sqlite3Isalnum(z[i]); i++){} 497 sqlite3_snprintf(sizeof(A->zSelName), A->zSelName, "%.*s", i, z); 498 } 499 } 500 #endif /* SELECTRACE_ENABLED */ 501 } 502 oneselect(A) ::= values(X). {A = X;} 503 504 %type values {Select*} 505 %destructor values {sqlite3SelectDelete(pParse->db, $$);} 506 values(A) ::= VALUES LP nexprlist(X) RP. { 507 A = sqlite3SelectNew(pParse,X,0,0,0,0,0,SF_Values,0,0); 508 } 509 values(A) ::= values(X) COMMA LP exprlist(Y) RP. { 510 Select *pRight, *pLeft = X; 511 pRight = sqlite3SelectNew(pParse,Y,0,0,0,0,0,SF_Values|SF_MultiValue,0,0); 512 if( ALWAYS(pLeft) ) pLeft->selFlags &= ~SF_MultiValue; 513 if( pRight ){ 514 pRight->op = TK_ALL; 515 pLeft = X; 516 pRight->pPrior = pLeft; 517 A = pRight; 518 }else{ 519 A = pLeft; 520 } 521 } 522 523 // The "distinct" nonterminal is true (1) if the DISTINCT keyword is 524 // present and false (0) if it is not. 525 // 526 %type distinct {u16} 527 distinct(A) ::= DISTINCT. {A = SF_Distinct;} 528 distinct(A) ::= ALL. {A = 0;} 529 distinct(A) ::= . {A = 0;} 530 531 // selcollist is a list of expressions that are to become the return 532 // values of the SELECT statement. The "*" in statements like 533 // "SELECT * FROM ..." is encoded as a special expression with an 534 // opcode of TK_ALL. 535 // 536 %type selcollist {ExprList*} 537 %destructor selcollist {sqlite3ExprListDelete(pParse->db, $$);} 538 %type sclp {ExprList*} 539 %destructor sclp {sqlite3ExprListDelete(pParse->db, $$);} 540 sclp(A) ::= selcollist(X) COMMA. {A = X;} 541 sclp(A) ::= . {A = 0;} 542 selcollist(A) ::= sclp(P) expr(X) as(Y). { 543 A = sqlite3ExprListAppend(pParse, P, X.pExpr); 544 if( Y.n>0 ) sqlite3ExprListSetName(pParse, A, &Y, 1); 545 sqlite3ExprListSetSpan(pParse,A,&X); 546 } 547 selcollist(A) ::= sclp(P) STAR. { 548 Expr *p = sqlite3Expr(pParse->db, TK_ALL, 0); 549 A = sqlite3ExprListAppend(pParse, P, p); 550 } 551 selcollist(A) ::= sclp(P) nm(X) DOT STAR(Y). { 552 Expr *pRight = sqlite3PExpr(pParse, TK_ALL, 0, 0, &Y); 553 Expr *pLeft = sqlite3PExpr(pParse, TK_ID, 0, 0, &X); 554 Expr *pDot = sqlite3PExpr(pParse, TK_DOT, pLeft, pRight, 0); 555 A = sqlite3ExprListAppend(pParse,P, pDot); 556 } 557 558 // An option "AS <id>" phrase that can follow one of the expressions that 559 // define the result set, or one of the tables in the FROM clause. 560 // 561 %type as {Token} 562 as(X) ::= AS nm(Y). {X = Y;} 563 as(X) ::= ids(Y). {X = Y;} 564 as(X) ::= . {X.n = 0;} 565 566 567 %type seltablist {SrcList*} 568 %destructor seltablist {sqlite3SrcListDelete(pParse->db, $$);} 569 %type stl_prefix {SrcList*} 570 %destructor stl_prefix {sqlite3SrcListDelete(pParse->db, $$);} 571 %type from {SrcList*} 572 %destructor from {sqlite3SrcListDelete(pParse->db, $$);} 573 574 // A complete FROM clause. 575 // 576 from(A) ::= . {A = sqlite3DbMallocZero(pParse->db, sizeof(*A));} 577 from(A) ::= FROM seltablist(X). { 578 A = X; 579 sqlite3SrcListShiftJoinType(A); 580 } 581 582 // "seltablist" is a "Select Table List" - the content of the FROM clause 583 // in a SELECT statement. "stl_prefix" is a prefix of this list. 584 // 585 stl_prefix(A) ::= seltablist(X) joinop(Y). { 586 A = X; 587 if( ALWAYS(A && A->nSrc>0) ) A->a[A->nSrc-1].jointype = (u8)Y; 588 } 589 stl_prefix(A) ::= . {A = 0;} 590 seltablist(A) ::= stl_prefix(X) nm(Y) dbnm(D) as(Z) indexed_opt(I) 591 on_opt(N) using_opt(U). { 592 A = sqlite3SrcListAppendFromTerm(pParse,X,&Y,&D,&Z,0,N,U); 593 sqlite3SrcListIndexedBy(pParse, A, &I); 594 } 595 %ifndef SQLITE_OMIT_SUBQUERY 596 seltablist(A) ::= stl_prefix(X) LP select(S) RP 597 as(Z) on_opt(N) using_opt(U). { 598 A = sqlite3SrcListAppendFromTerm(pParse,X,0,0,&Z,S,N,U); 599 } 600 seltablist(A) ::= stl_prefix(X) LP seltablist(F) RP 601 as(Z) on_opt(N) using_opt(U). { 602 if( X==0 && Z.n==0 && N==0 && U==0 ){ 603 A = F; 604 }else if( F->nSrc==1 ){ 605 A = sqlite3SrcListAppendFromTerm(pParse,X,0,0,&Z,0,N,U); 606 if( A ){ 607 struct SrcList_item *pNew = &A->a[A->nSrc-1]; 608 struct SrcList_item *pOld = F->a; 609 pNew->zName = pOld->zName; 610 pNew->zDatabase = pOld->zDatabase; 611 pNew->pSelect = pOld->pSelect; 612 pOld->zName = pOld->zDatabase = 0; 613 pOld->pSelect = 0; 614 } 615 sqlite3SrcListDelete(pParse->db, F); 616 }else{ 617 Select *pSubquery; 618 sqlite3SrcListShiftJoinType(F); 619 pSubquery = sqlite3SelectNew(pParse,0,F,0,0,0,0,SF_NestedFrom,0,0); 620 A = sqlite3SrcListAppendFromTerm(pParse,X,0,0,&Z,pSubquery,N,U); 621 } 622 } 623 %endif SQLITE_OMIT_SUBQUERY 624 625 %type dbnm {Token} 626 dbnm(A) ::= . {A.z=0; A.n=0;} 627 dbnm(A) ::= DOT nm(X). {A = X;} 628 629 %type fullname {SrcList*} 630 %destructor fullname {sqlite3SrcListDelete(pParse->db, $$);} 631 fullname(A) ::= nm(X) dbnm(Y). {A = sqlite3SrcListAppend(pParse->db,0,&X,&Y);} 632 633 %type joinop {int} 634 %type joinop2 {int} 635 joinop(X) ::= COMMA|JOIN. { X = JT_INNER; } 636 joinop(X) ::= JOIN_KW(A) JOIN. { X = sqlite3JoinType(pParse,&A,0,0); } 637 joinop(X) ::= JOIN_KW(A) nm(B) JOIN. { X = sqlite3JoinType(pParse,&A,&B,0); } 638 joinop(X) ::= JOIN_KW(A) nm(B) nm(C) JOIN. 639 { X = sqlite3JoinType(pParse,&A,&B,&C); } 640 641 %type on_opt {Expr*} 642 %destructor on_opt {sqlite3ExprDelete(pParse->db, $$);} 643 on_opt(N) ::= ON expr(E). {N = E.pExpr;} 644 on_opt(N) ::= . {N = 0;} 645 646 // Note that this block abuses the Token type just a little. If there is 647 // no "INDEXED BY" clause, the returned token is empty (z==0 && n==0). If 648 // there is an INDEXED BY clause, then the token is populated as per normal, 649 // with z pointing to the token data and n containing the number of bytes 650 // in the token. 651 // 652 // If there is a "NOT INDEXED" clause, then (z==0 && n==1), which is 653 // normally illegal. The sqlite3SrcListIndexedBy() function 654 // recognizes and interprets this as a special case. 655 // 656 %type indexed_opt {Token} 657 indexed_opt(A) ::= . {A.z=0; A.n=0;} 658 indexed_opt(A) ::= INDEXED BY nm(X). {A = X;} 659 indexed_opt(A) ::= NOT INDEXED. {A.z=0; A.n=1;} 660 661 %type using_opt {IdList*} 662 %destructor using_opt {sqlite3IdListDelete(pParse->db, $$);} 663 using_opt(U) ::= USING LP idlist(L) RP. {U = L;} 664 using_opt(U) ::= . {U = 0;} 665 666 667 %type orderby_opt {ExprList*} 668 %destructor orderby_opt {sqlite3ExprListDelete(pParse->db, $$);} 669 %type sortlist {ExprList*} 670 %destructor sortlist {sqlite3ExprListDelete(pParse->db, $$);} 671 672 orderby_opt(A) ::= . {A = 0;} 673 orderby_opt(A) ::= ORDER BY sortlist(X). {A = X;} 674 sortlist(A) ::= sortlist(X) COMMA expr(Y) sortorder(Z). { 675 A = sqlite3ExprListAppend(pParse,X,Y.pExpr); 676 if( A ) A->a[A->nExpr-1].sortOrder = (u8)Z; 677 } 678 sortlist(A) ::= expr(Y) sortorder(Z). { 679 A = sqlite3ExprListAppend(pParse,0,Y.pExpr); 680 if( A && ALWAYS(A->a) ) A->a[0].sortOrder = (u8)Z; 681 } 682 683 %type sortorder {int} 684 685 sortorder(A) ::= ASC. {A = SQLITE_SO_ASC;} 686 sortorder(A) ::= DESC. {A = SQLITE_SO_DESC;} 687 sortorder(A) ::= . {A = SQLITE_SO_ASC;} 688 689 %type groupby_opt {ExprList*} 690 %destructor groupby_opt {sqlite3ExprListDelete(pParse->db, $$);} 691 groupby_opt(A) ::= . {A = 0;} 692 groupby_opt(A) ::= GROUP BY nexprlist(X). {A = X;} 693 694 %type having_opt {Expr*} 695 %destructor having_opt {sqlite3ExprDelete(pParse->db, $$);} 696 having_opt(A) ::= . {A = 0;} 697 having_opt(A) ::= HAVING expr(X). {A = X.pExpr;} 698 699 %type limit_opt {struct LimitVal} 700 701 // The destructor for limit_opt will never fire in the current grammar. 702 // The limit_opt non-terminal only occurs at the end of a single production 703 // rule for SELECT statements. As soon as the rule that create the 704 // limit_opt non-terminal reduces, the SELECT statement rule will also 705 // reduce. So there is never a limit_opt non-terminal on the stack 706 // except as a transient. So there is never anything to destroy. 707 // 708 //%destructor limit_opt { 709 // sqlite3ExprDelete(pParse->db, $$.pLimit); 710 // sqlite3ExprDelete(pParse->db, $$.pOffset); 711 //} 712 limit_opt(A) ::= . {A.pLimit = 0; A.pOffset = 0;} 713 limit_opt(A) ::= LIMIT expr(X). {A.pLimit = X.pExpr; A.pOffset = 0;} 714 limit_opt(A) ::= LIMIT expr(X) OFFSET expr(Y). 715 {A.pLimit = X.pExpr; A.pOffset = Y.pExpr;} 716 limit_opt(A) ::= LIMIT expr(X) COMMA expr(Y). 717 {A.pOffset = X.pExpr; A.pLimit = Y.pExpr;} 718 719 /////////////////////////// The DELETE statement ///////////////////////////// 720 // 721 %ifdef SQLITE_ENABLE_UPDATE_DELETE_LIMIT 722 cmd ::= with(C) DELETE FROM fullname(X) indexed_opt(I) where_opt(W) 723 orderby_opt(O) limit_opt(L). { 724 sqlite3WithPush(pParse, C, 1); 725 sqlite3SrcListIndexedBy(pParse, X, &I); 726 W = sqlite3LimitWhere(pParse, X, W, O, L.pLimit, L.pOffset, "DELETE"); 727 sqlite3DeleteFrom(pParse,X,W); 728 } 729 %endif 730 %ifndef SQLITE_ENABLE_UPDATE_DELETE_LIMIT 731 cmd ::= with(C) DELETE FROM fullname(X) indexed_opt(I) where_opt(W). { 732 sqlite3WithPush(pParse, C, 1); 733 sqlite3SrcListIndexedBy(pParse, X, &I); 734 sqlite3DeleteFrom(pParse,X,W); 735 } 736 %endif 737 738 %type where_opt {Expr*} 739 %destructor where_opt {sqlite3ExprDelete(pParse->db, $$);} 740 741 where_opt(A) ::= . {A = 0;} 742 where_opt(A) ::= WHERE expr(X). {A = X.pExpr;} 743 744 ////////////////////////// The UPDATE command //////////////////////////////// 745 // 746 %ifdef SQLITE_ENABLE_UPDATE_DELETE_LIMIT 747 cmd ::= with(C) UPDATE orconf(R) fullname(X) indexed_opt(I) SET setlist(Y) 748 where_opt(W) orderby_opt(O) limit_opt(L). { 749 sqlite3WithPush(pParse, C, 1); 750 sqlite3SrcListIndexedBy(pParse, X, &I); 751 sqlite3ExprListCheckLength(pParse,Y,"set list"); 752 W = sqlite3LimitWhere(pParse, X, W, O, L.pLimit, L.pOffset, "UPDATE"); 753 sqlite3Update(pParse,X,Y,W,R); 754 } 755 %endif 756 %ifndef SQLITE_ENABLE_UPDATE_DELETE_LIMIT 757 cmd ::= with(C) UPDATE orconf(R) fullname(X) indexed_opt(I) SET setlist(Y) 758 where_opt(W). { 759 sqlite3WithPush(pParse, C, 1); 760 sqlite3SrcListIndexedBy(pParse, X, &I); 761 sqlite3ExprListCheckLength(pParse,Y,"set list"); 762 sqlite3Update(pParse,X,Y,W,R); 763 } 764 %endif 765 766 %type setlist {ExprList*} 767 %destructor setlist {sqlite3ExprListDelete(pParse->db, $$);} 768 769 setlist(A) ::= setlist(Z) COMMA nm(X) EQ expr(Y). { 770 A = sqlite3ExprListAppend(pParse, Z, Y.pExpr); 771 sqlite3ExprListSetName(pParse, A, &X, 1); 772 } 773 setlist(A) ::= nm(X) EQ expr(Y). { 774 A = sqlite3ExprListAppend(pParse, 0, Y.pExpr); 775 sqlite3ExprListSetName(pParse, A, &X, 1); 776 } 777 778 ////////////////////////// The INSERT command ///////////////////////////////// 779 // 780 cmd ::= with(W) insert_cmd(R) INTO fullname(X) inscollist_opt(F) select(S). { 781 sqlite3WithPush(pParse, W, 1); 782 sqlite3Insert(pParse, X, S, F, R); 783 } 784 cmd ::= with(W) insert_cmd(R) INTO fullname(X) inscollist_opt(F) DEFAULT VALUES. 785 { 786 sqlite3WithPush(pParse, W, 1); 787 sqlite3Insert(pParse, X, 0, F, R); 788 } 789 790 %type insert_cmd {u8} 791 insert_cmd(A) ::= INSERT orconf(R). {A = R;} 792 insert_cmd(A) ::= REPLACE. {A = OE_Replace;} 793 794 %type inscollist_opt {IdList*} 795 %destructor inscollist_opt {sqlite3IdListDelete(pParse->db, $$);} 796 %type idlist {IdList*} 797 %destructor idlist {sqlite3IdListDelete(pParse->db, $$);} 798 799 inscollist_opt(A) ::= . {A = 0;} 800 inscollist_opt(A) ::= LP idlist(X) RP. {A = X;} 801 idlist(A) ::= idlist(X) COMMA nm(Y). 802 {A = sqlite3IdListAppend(pParse->db,X,&Y);} 803 idlist(A) ::= nm(Y). 804 {A = sqlite3IdListAppend(pParse->db,0,&Y);} 805 806 /////////////////////////// Expression Processing ///////////////////////////// 807 // 808 809 %type expr {ExprSpan} 810 %destructor expr {sqlite3ExprDelete(pParse->db, $$.pExpr);} 811 %type term {ExprSpan} 812 %destructor term {sqlite3ExprDelete(pParse->db, $$.pExpr);} 813 814 %include { 815 /* This is a utility routine used to set the ExprSpan.zStart and 816 ** ExprSpan.zEnd values of pOut so that the span covers the complete 817 ** range of text beginning with pStart and going to the end of pEnd. 818 */ 819 static void spanSet(ExprSpan *pOut, Token *pStart, Token *pEnd){ 820 pOut->zStart = pStart->z; 821 pOut->zEnd = &pEnd->z[pEnd->n]; 822 } 823 824 /* Construct a new Expr object from a single identifier. Use the 825 ** new Expr to populate pOut. Set the span of pOut to be the identifier 826 ** that created the expression. 827 */ 828 static void spanExpr(ExprSpan *pOut, Parse *pParse, int op, Token *pValue){ 829 pOut->pExpr = sqlite3PExpr(pParse, op, 0, 0, pValue); 830 pOut->zStart = pValue->z; 831 pOut->zEnd = &pValue->z[pValue->n]; 832 } 833 } 834 835 expr(A) ::= term(X). {A = X;} 836 expr(A) ::= LP(B) expr(X) RP(E). {A.pExpr = X.pExpr; spanSet(&A,&B,&E);} 837 term(A) ::= NULL(X). {spanExpr(&A, pParse, @X, &X);} 838 expr(A) ::= id(X). {spanExpr(&A, pParse, TK_ID, &X);} 839 expr(A) ::= JOIN_KW(X). {spanExpr(&A, pParse, TK_ID, &X);} 840 expr(A) ::= nm(X) DOT nm(Y). { 841 Expr *temp1 = sqlite3PExpr(pParse, TK_ID, 0, 0, &X); 842 Expr *temp2 = sqlite3PExpr(pParse, TK_ID, 0, 0, &Y); 843 A.pExpr = sqlite3PExpr(pParse, TK_DOT, temp1, temp2, 0); 844 spanSet(&A,&X,&Y); 845 } 846 expr(A) ::= nm(X) DOT nm(Y) DOT nm(Z). { 847 Expr *temp1 = sqlite3PExpr(pParse, TK_ID, 0, 0, &X); 848 Expr *temp2 = sqlite3PExpr(pParse, TK_ID, 0, 0, &Y); 849 Expr *temp3 = sqlite3PExpr(pParse, TK_ID, 0, 0, &Z); 850 Expr *temp4 = sqlite3PExpr(pParse, TK_DOT, temp2, temp3, 0); 851 A.pExpr = sqlite3PExpr(pParse, TK_DOT, temp1, temp4, 0); 852 spanSet(&A,&X,&Z); 853 } 854 term(A) ::= INTEGER|FLOAT|BLOB(X). {spanExpr(&A, pParse, @X, &X);} 855 term(A) ::= STRING(X). {spanExpr(&A, pParse, @X, &X);} 856 expr(A) ::= VARIABLE(X). { 857 if( X.n>=2 && X.z[0]=='#' && sqlite3Isdigit(X.z[1]) ){ 858 /* When doing a nested parse, one can include terms in an expression 859 ** that look like this: #1 #2 ... These terms refer to registers 860 ** in the virtual machine. #N is the N-th register. */ 861 if( pParse->nested==0 ){ 862 sqlite3ErrorMsg(pParse, "near \"%T\": syntax error", &X); 863 A.pExpr = 0; 864 }else{ 865 A.pExpr = sqlite3PExpr(pParse, TK_REGISTER, 0, 0, &X); 866 if( A.pExpr ) sqlite3GetInt32(&X.z[1], &A.pExpr->iTable); 867 } 868 }else{ 869 spanExpr(&A, pParse, TK_VARIABLE, &X); 870 sqlite3ExprAssignVarNumber(pParse, A.pExpr); 871 } 872 spanSet(&A, &X, &X); 873 } 874 expr(A) ::= expr(E) COLLATE ids(C). { 875 A.pExpr = sqlite3ExprAddCollateToken(pParse, E.pExpr, &C, 1); 876 A.zStart = E.zStart; 877 A.zEnd = &C.z[C.n]; 878 } 879 %ifndef SQLITE_OMIT_CAST 880 expr(A) ::= CAST(X) LP expr(E) AS typetoken(T) RP(Y). { 881 A.pExpr = sqlite3PExpr(pParse, TK_CAST, E.pExpr, 0, &T); 882 spanSet(&A,&X,&Y); 883 } 884 %endif SQLITE_OMIT_CAST 885 expr(A) ::= id(X) LP distinct(D) exprlist(Y) RP(E). { 886 if( Y && Y->nExpr>pParse->db->aLimit[SQLITE_LIMIT_FUNCTION_ARG] ){ 887 sqlite3ErrorMsg(pParse, "too many arguments on function %T", &X); 888 } 889 A.pExpr = sqlite3ExprFunction(pParse, Y, &X); 890 spanSet(&A,&X,&E); 891 if( D && A.pExpr ){ 892 A.pExpr->flags |= EP_Distinct; 893 } 894 } 895 expr(A) ::= id(X) LP STAR RP(E). { 896 A.pExpr = sqlite3ExprFunction(pParse, 0, &X); 897 spanSet(&A,&X,&E); 898 } 899 term(A) ::= CTIME_KW(OP). { 900 A.pExpr = sqlite3ExprFunction(pParse, 0, &OP); 901 spanSet(&A, &OP, &OP); 902 } 903 904 %include { 905 /* This routine constructs a binary expression node out of two ExprSpan 906 ** objects and uses the result to populate a new ExprSpan object. 907 */ 908 static void spanBinaryExpr( 909 ExprSpan *pOut, /* Write the result here */ 910 Parse *pParse, /* The parsing context. Errors accumulate here */ 911 int op, /* The binary operation */ 912 ExprSpan *pLeft, /* The left operand */ 913 ExprSpan *pRight /* The right operand */ 914 ){ 915 pOut->pExpr = sqlite3PExpr(pParse, op, pLeft->pExpr, pRight->pExpr, 0); 916 pOut->zStart = pLeft->zStart; 917 pOut->zEnd = pRight->zEnd; 918 } 919 } 920 921 expr(A) ::= expr(X) AND(OP) expr(Y). {spanBinaryExpr(&A,pParse,@OP,&X,&Y);} 922 expr(A) ::= expr(X) OR(OP) expr(Y). {spanBinaryExpr(&A,pParse,@OP,&X,&Y);} 923 expr(A) ::= expr(X) LT|GT|GE|LE(OP) expr(Y). 924 {spanBinaryExpr(&A,pParse,@OP,&X,&Y);} 925 expr(A) ::= expr(X) EQ|NE(OP) expr(Y). {spanBinaryExpr(&A,pParse,@OP,&X,&Y);} 926 expr(A) ::= expr(X) BITAND|BITOR|LSHIFT|RSHIFT(OP) expr(Y). 927 {spanBinaryExpr(&A,pParse,@OP,&X,&Y);} 928 expr(A) ::= expr(X) PLUS|MINUS(OP) expr(Y). 929 {spanBinaryExpr(&A,pParse,@OP,&X,&Y);} 930 expr(A) ::= expr(X) STAR|SLASH|REM(OP) expr(Y). 931 {spanBinaryExpr(&A,pParse,@OP,&X,&Y);} 932 expr(A) ::= expr(X) CONCAT(OP) expr(Y). {spanBinaryExpr(&A,pParse,@OP,&X,&Y);} 933 %type likeop {struct LikeOp} 934 likeop(A) ::= LIKE_KW|MATCH(X). {A.eOperator = X; A.bNot = 0;} 935 likeop(A) ::= NOT LIKE_KW|MATCH(X). {A.eOperator = X; A.bNot = 1;} 936 expr(A) ::= expr(X) likeop(OP) expr(Y). [LIKE_KW] { 937 ExprList *pList; 938 pList = sqlite3ExprListAppend(pParse,0, Y.pExpr); 939 pList = sqlite3ExprListAppend(pParse,pList, X.pExpr); 940 A.pExpr = sqlite3ExprFunction(pParse, pList, &OP.eOperator); 941 if( OP.bNot ) A.pExpr = sqlite3PExpr(pParse, TK_NOT, A.pExpr, 0, 0); 942 A.zStart = X.zStart; 943 A.zEnd = Y.zEnd; 944 if( A.pExpr ) A.pExpr->flags |= EP_InfixFunc; 945 } 946 expr(A) ::= expr(X) likeop(OP) expr(Y) ESCAPE expr(E). [LIKE_KW] { 947 ExprList *pList; 948 pList = sqlite3ExprListAppend(pParse,0, Y.pExpr); 949 pList = sqlite3ExprListAppend(pParse,pList, X.pExpr); 950 pList = sqlite3ExprListAppend(pParse,pList, E.pExpr); 951 A.pExpr = sqlite3ExprFunction(pParse, pList, &OP.eOperator); 952 if( OP.bNot ) A.pExpr = sqlite3PExpr(pParse, TK_NOT, A.pExpr, 0, 0); 953 A.zStart = X.zStart; 954 A.zEnd = E.zEnd; 955 if( A.pExpr ) A.pExpr->flags |= EP_InfixFunc; 956 } 957 958 %include { 959 /* Construct an expression node for a unary postfix operator 960 */ 961 static void spanUnaryPostfix( 962 ExprSpan *pOut, /* Write the new expression node here */ 963 Parse *pParse, /* Parsing context to record errors */ 964 int op, /* The operator */ 965 ExprSpan *pOperand, /* The operand */ 966 Token *pPostOp /* The operand token for setting the span */ 967 ){ 968 pOut->pExpr = sqlite3PExpr(pParse, op, pOperand->pExpr, 0, 0); 969 pOut->zStart = pOperand->zStart; 970 pOut->zEnd = &pPostOp->z[pPostOp->n]; 971 } 972 } 973 974 expr(A) ::= expr(X) ISNULL|NOTNULL(E). {spanUnaryPostfix(&A,pParse,@E,&X,&E);} 975 expr(A) ::= expr(X) NOT NULL(E). {spanUnaryPostfix(&A,pParse,TK_NOTNULL,&X,&E);} 976 977 %include { 978 /* A routine to convert a binary TK_IS or TK_ISNOT expression into a 979 ** unary TK_ISNULL or TK_NOTNULL expression. */ 980 static void binaryToUnaryIfNull(Parse *pParse, Expr *pY, Expr *pA, int op){ 981 sqlite3 *db = pParse->db; 982 if( pY && pA && pY->op==TK_NULL ){ 983 pA->op = (u8)op; 984 sqlite3ExprDelete(db, pA->pRight); 985 pA->pRight = 0; 986 } 987 } 988 } 989 990 // expr1 IS expr2 991 // expr1 IS NOT expr2 992 // 993 // If expr2 is NULL then code as TK_ISNULL or TK_NOTNULL. If expr2 994 // is any other expression, code as TK_IS or TK_ISNOT. 995 // 996 expr(A) ::= expr(X) IS expr(Y). { 997 spanBinaryExpr(&A,pParse,TK_IS,&X,&Y); 998 binaryToUnaryIfNull(pParse, Y.pExpr, A.pExpr, TK_ISNULL); 999 } 1000 expr(A) ::= expr(X) IS NOT expr(Y). { 1001 spanBinaryExpr(&A,pParse,TK_ISNOT,&X,&Y); 1002 binaryToUnaryIfNull(pParse, Y.pExpr, A.pExpr, TK_NOTNULL); 1003 } 1004 1005 %include { 1006 /* Construct an expression node for a unary prefix operator 1007 */ 1008 static void spanUnaryPrefix( 1009 ExprSpan *pOut, /* Write the new expression node here */ 1010 Parse *pParse, /* Parsing context to record errors */ 1011 int op, /* The operator */ 1012 ExprSpan *pOperand, /* The operand */ 1013 Token *pPreOp /* The operand token for setting the span */ 1014 ){ 1015 pOut->pExpr = sqlite3PExpr(pParse, op, pOperand->pExpr, 0, 0); 1016 pOut->zStart = pPreOp->z; 1017 pOut->zEnd = pOperand->zEnd; 1018 } 1019 } 1020 1021 1022 1023 expr(A) ::= NOT(B) expr(X). {spanUnaryPrefix(&A,pParse,@B,&X,&B);} 1024 expr(A) ::= BITNOT(B) expr(X). {spanUnaryPrefix(&A,pParse,@B,&X,&B);} 1025 expr(A) ::= MINUS(B) expr(X). [BITNOT] 1026 {spanUnaryPrefix(&A,pParse,TK_UMINUS,&X,&B);} 1027 expr(A) ::= PLUS(B) expr(X). [BITNOT] 1028 {spanUnaryPrefix(&A,pParse,TK_UPLUS,&X,&B);} 1029 1030 %type between_op {int} 1031 between_op(A) ::= BETWEEN. {A = 0;} 1032 between_op(A) ::= NOT BETWEEN. {A = 1;} 1033 expr(A) ::= expr(W) between_op(N) expr(X) AND expr(Y). [BETWEEN] { 1034 ExprList *pList = sqlite3ExprListAppend(pParse,0, X.pExpr); 1035 pList = sqlite3ExprListAppend(pParse,pList, Y.pExpr); 1036 A.pExpr = sqlite3PExpr(pParse, TK_BETWEEN, W.pExpr, 0, 0); 1037 if( A.pExpr ){ 1038 A.pExpr->x.pList = pList; 1039 }else{ 1040 sqlite3ExprListDelete(pParse->db, pList); 1041 } 1042 if( N ) A.pExpr = sqlite3PExpr(pParse, TK_NOT, A.pExpr, 0, 0); 1043 A.zStart = W.zStart; 1044 A.zEnd = Y.zEnd; 1045 } 1046 %ifndef SQLITE_OMIT_SUBQUERY 1047 %type in_op {int} 1048 in_op(A) ::= IN. {A = 0;} 1049 in_op(A) ::= NOT IN. {A = 1;} 1050 expr(A) ::= expr(X) in_op(N) LP exprlist(Y) RP(E). [IN] { 1051 if( Y==0 ){ 1052 /* Expressions of the form 1053 ** 1054 ** expr1 IN () 1055 ** expr1 NOT IN () 1056 ** 1057 ** simplify to constants 0 (false) and 1 (true), respectively, 1058 ** regardless of the value of expr1. 1059 */ 1060 A.pExpr = sqlite3PExpr(pParse, TK_INTEGER, 0, 0, &sqlite3IntTokens[N]); 1061 sqlite3ExprDelete(pParse->db, X.pExpr); 1062 }else if( Y->nExpr==1 ){ 1063 /* Expressions of the form: 1064 ** 1065 ** expr1 IN (?1) 1066 ** expr1 NOT IN (?2) 1067 ** 1068 ** with exactly one value on the RHS can be simplified to something 1069 ** like this: 1070 ** 1071 ** expr1 == ?1 1072 ** expr1 <> ?2 1073 ** 1074 ** But, the RHS of the == or <> is marked with the EP_Generic flag 1075 ** so that it may not contribute to the computation of comparison 1076 ** affinity or the collating sequence to use for comparison. Otherwise, 1077 ** the semantics would be subtly different from IN or NOT IN. 1078 */ 1079 Expr *pRHS = Y->a[0].pExpr; 1080 Y->a[0].pExpr = 0; 1081 sqlite3ExprListDelete(pParse->db, Y); 1082 /* pRHS cannot be NULL because a malloc error would have been detected 1083 ** before now and control would have never reached this point */ 1084 if( ALWAYS(pRHS) ){ 1085 pRHS->flags &= ~EP_Collate; 1086 pRHS->flags |= EP_Generic; 1087 } 1088 A.pExpr = sqlite3PExpr(pParse, N ? TK_NE : TK_EQ, X.pExpr, pRHS, 0); 1089 }else{ 1090 A.pExpr = sqlite3PExpr(pParse, TK_IN, X.pExpr, 0, 0); 1091 if( A.pExpr ){ 1092 A.pExpr->x.pList = Y; 1093 sqlite3ExprSetHeightAndFlags(pParse, A.pExpr); 1094 }else{ 1095 sqlite3ExprListDelete(pParse->db, Y); 1096 } 1097 if( N ) A.pExpr = sqlite3PExpr(pParse, TK_NOT, A.pExpr, 0, 0); 1098 } 1099 A.zStart = X.zStart; 1100 A.zEnd = &E.z[E.n]; 1101 } 1102 expr(A) ::= LP(B) select(X) RP(E). { 1103 A.pExpr = sqlite3PExpr(pParse, TK_SELECT, 0, 0, 0); 1104 if( A.pExpr ){ 1105 A.pExpr->x.pSelect = X; 1106 ExprSetProperty(A.pExpr, EP_xIsSelect|EP_Subquery); 1107 sqlite3ExprSetHeightAndFlags(pParse, A.pExpr); 1108 }else{ 1109 sqlite3SelectDelete(pParse->db, X); 1110 } 1111 A.zStart = B.z; 1112 A.zEnd = &E.z[E.n]; 1113 } 1114 expr(A) ::= expr(X) in_op(N) LP select(Y) RP(E). [IN] { 1115 A.pExpr = sqlite3PExpr(pParse, TK_IN, X.pExpr, 0, 0); 1116 if( A.pExpr ){ 1117 A.pExpr->x.pSelect = Y; 1118 ExprSetProperty(A.pExpr, EP_xIsSelect|EP_Subquery); 1119 sqlite3ExprSetHeightAndFlags(pParse, A.pExpr); 1120 }else{ 1121 sqlite3SelectDelete(pParse->db, Y); 1122 } 1123 if( N ) A.pExpr = sqlite3PExpr(pParse, TK_NOT, A.pExpr, 0, 0); 1124 A.zStart = X.zStart; 1125 A.zEnd = &E.z[E.n]; 1126 } 1127 expr(A) ::= expr(X) in_op(N) nm(Y) dbnm(Z). [IN] { 1128 SrcList *pSrc = sqlite3SrcListAppend(pParse->db, 0,&Y,&Z); 1129 A.pExpr = sqlite3PExpr(pParse, TK_IN, X.pExpr, 0, 0); 1130 if( A.pExpr ){ 1131 A.pExpr->x.pSelect = sqlite3SelectNew(pParse, 0,pSrc,0,0,0,0,0,0,0); 1132 ExprSetProperty(A.pExpr, EP_xIsSelect|EP_Subquery); 1133 sqlite3ExprSetHeightAndFlags(pParse, A.pExpr); 1134 }else{ 1135 sqlite3SrcListDelete(pParse->db, pSrc); 1136 } 1137 if( N ) A.pExpr = sqlite3PExpr(pParse, TK_NOT, A.pExpr, 0, 0); 1138 A.zStart = X.zStart; 1139 A.zEnd = Z.z ? &Z.z[Z.n] : &Y.z[Y.n]; 1140 } 1141 expr(A) ::= EXISTS(B) LP select(Y) RP(E). { 1142 Expr *p = A.pExpr = sqlite3PExpr(pParse, TK_EXISTS, 0, 0, 0); 1143 if( p ){ 1144 p->x.pSelect = Y; 1145 ExprSetProperty(p, EP_xIsSelect|EP_Subquery); 1146 sqlite3ExprSetHeightAndFlags(pParse, p); 1147 }else{ 1148 sqlite3SelectDelete(pParse->db, Y); 1149 } 1150 A.zStart = B.z; 1151 A.zEnd = &E.z[E.n]; 1152 } 1153 %endif SQLITE_OMIT_SUBQUERY 1154 1155 /* CASE expressions */ 1156 expr(A) ::= CASE(C) case_operand(X) case_exprlist(Y) case_else(Z) END(E). { 1157 A.pExpr = sqlite3PExpr(pParse, TK_CASE, X, 0, 0); 1158 if( A.pExpr ){ 1159 A.pExpr->x.pList = Z ? sqlite3ExprListAppend(pParse,Y,Z) : Y; 1160 sqlite3ExprSetHeightAndFlags(pParse, A.pExpr); 1161 }else{ 1162 sqlite3ExprListDelete(pParse->db, Y); 1163 sqlite3ExprDelete(pParse->db, Z); 1164 } 1165 A.zStart = C.z; 1166 A.zEnd = &E.z[E.n]; 1167 } 1168 %type case_exprlist {ExprList*} 1169 %destructor case_exprlist {sqlite3ExprListDelete(pParse->db, $$);} 1170 case_exprlist(A) ::= case_exprlist(X) WHEN expr(Y) THEN expr(Z). { 1171 A = sqlite3ExprListAppend(pParse,X, Y.pExpr); 1172 A = sqlite3ExprListAppend(pParse,A, Z.pExpr); 1173 } 1174 case_exprlist(A) ::= WHEN expr(Y) THEN expr(Z). { 1175 A = sqlite3ExprListAppend(pParse,0, Y.pExpr); 1176 A = sqlite3ExprListAppend(pParse,A, Z.pExpr); 1177 } 1178 %type case_else {Expr*} 1179 %destructor case_else {sqlite3ExprDelete(pParse->db, $$);} 1180 case_else(A) ::= ELSE expr(X). {A = X.pExpr;} 1181 case_else(A) ::= . {A = 0;} 1182 %type case_operand {Expr*} 1183 %destructor case_operand {sqlite3ExprDelete(pParse->db, $$);} 1184 case_operand(A) ::= expr(X). {A = X.pExpr;} 1185 case_operand(A) ::= . {A = 0;} 1186 1187 %type exprlist {ExprList*} 1188 %destructor exprlist {sqlite3ExprListDelete(pParse->db, $$);} 1189 %type nexprlist {ExprList*} 1190 %destructor nexprlist {sqlite3ExprListDelete(pParse->db, $$);} 1191 1192 exprlist(A) ::= nexprlist(X). {A = X;} 1193 exprlist(A) ::= . {A = 0;} 1194 nexprlist(A) ::= nexprlist(X) COMMA expr(Y). 1195 {A = sqlite3ExprListAppend(pParse,X,Y.pExpr);} 1196 nexprlist(A) ::= expr(Y). 1197 {A = sqlite3ExprListAppend(pParse,0,Y.pExpr);} 1198 1199 1200 ///////////////////////////// The CREATE INDEX command /////////////////////// 1201 // 1202 cmd ::= createkw(S) uniqueflag(U) INDEX ifnotexists(NE) nm(X) dbnm(D) 1203 ON nm(Y) LP idxlist(Z) RP where_opt(W). { 1204 sqlite3CreateIndex(pParse, &X, &D, 1205 sqlite3SrcListAppend(pParse->db,0,&Y,0), Z, U, 1206 &S, W, SQLITE_SO_ASC, NE); 1207 } 1208 1209 %type uniqueflag {int} 1210 uniqueflag(A) ::= UNIQUE. {A = OE_Abort;} 1211 uniqueflag(A) ::= . {A = OE_None;} 1212 1213 %type idxlist {ExprList*} 1214 %destructor idxlist {sqlite3ExprListDelete(pParse->db, $$);} 1215 %type idxlist_opt {ExprList*} 1216 %destructor idxlist_opt {sqlite3ExprListDelete(pParse->db, $$);} 1217 1218 idxlist_opt(A) ::= . {A = 0;} 1219 idxlist_opt(A) ::= LP idxlist(X) RP. {A = X;} 1220 idxlist(A) ::= idxlist(X) COMMA nm(Y) collate(C) sortorder(Z). { 1221 Expr *p = sqlite3ExprAddCollateToken(pParse, 0, &C, 1); 1222 A = sqlite3ExprListAppend(pParse,X, p); 1223 sqlite3ExprListSetName(pParse,A,&Y,1); 1224 sqlite3ExprListCheckLength(pParse, A, "index"); 1225 if( A ) A->a[A->nExpr-1].sortOrder = (u8)Z; 1226 } 1227 idxlist(A) ::= nm(Y) collate(C) sortorder(Z). { 1228 Expr *p = sqlite3ExprAddCollateToken(pParse, 0, &C, 1); 1229 A = sqlite3ExprListAppend(pParse,0, p); 1230 sqlite3ExprListSetName(pParse, A, &Y, 1); 1231 sqlite3ExprListCheckLength(pParse, A, "index"); 1232 if( A ) A->a[A->nExpr-1].sortOrder = (u8)Z; 1233 } 1234 1235 %type collate {Token} 1236 collate(C) ::= . {C.z = 0; C.n = 0;} 1237 collate(C) ::= COLLATE ids(X). {C = X;} 1238 1239 1240 ///////////////////////////// The DROP INDEX command ///////////////////////// 1241 // 1242 cmd ::= DROP INDEX ifexists(E) fullname(X). {sqlite3DropIndex(pParse, X, E);} 1243 1244 ///////////////////////////// The VACUUM command ///////////////////////////// 1245 // 1246 %ifndef SQLITE_OMIT_VACUUM 1247 %ifndef SQLITE_OMIT_ATTACH 1248 cmd ::= VACUUM. {sqlite3Vacuum(pParse);} 1249 cmd ::= VACUUM nm. {sqlite3Vacuum(pParse);} 1250 %endif SQLITE_OMIT_ATTACH 1251 %endif SQLITE_OMIT_VACUUM 1252 1253 ///////////////////////////// The PRAGMA command ///////////////////////////// 1254 // 1255 %ifndef SQLITE_OMIT_PRAGMA 1256 cmd ::= PRAGMA nm(X) dbnm(Z). {sqlite3Pragma(pParse,&X,&Z,0,0);} 1257 cmd ::= PRAGMA nm(X) dbnm(Z) EQ nmnum(Y). {sqlite3Pragma(pParse,&X,&Z,&Y,0);} 1258 cmd ::= PRAGMA nm(X) dbnm(Z) LP nmnum(Y) RP. {sqlite3Pragma(pParse,&X,&Z,&Y,0);} 1259 cmd ::= PRAGMA nm(X) dbnm(Z) EQ minus_num(Y). 1260 {sqlite3Pragma(pParse,&X,&Z,&Y,1);} 1261 cmd ::= PRAGMA nm(X) dbnm(Z) LP minus_num(Y) RP. 1262 {sqlite3Pragma(pParse,&X,&Z,&Y,1);} 1263 1264 nmnum(A) ::= plus_num(X). {A = X;} 1265 nmnum(A) ::= nm(X). {A = X;} 1266 nmnum(A) ::= ON(X). {A = X;} 1267 nmnum(A) ::= DELETE(X). {A = X;} 1268 nmnum(A) ::= DEFAULT(X). {A = X;} 1269 %endif SQLITE_OMIT_PRAGMA 1270 %token_class number INTEGER|FLOAT. 1271 plus_num(A) ::= PLUS number(X). {A = X;} 1272 plus_num(A) ::= number(X). {A = X;} 1273 minus_num(A) ::= MINUS number(X). {A = X;} 1274 //////////////////////////// The CREATE TRIGGER command ///////////////////// 1275 1276 %ifndef SQLITE_OMIT_TRIGGER 1277 1278 cmd ::= createkw trigger_decl(A) BEGIN trigger_cmd_list(S) END(Z). { 1279 Token all; 1280 all.z = A.z; 1281 all.n = (int)(Z.z - A.z) + Z.n; 1282 sqlite3FinishTrigger(pParse, S, &all); 1283 } 1284 1285 trigger_decl(A) ::= temp(T) TRIGGER ifnotexists(NOERR) nm(B) dbnm(Z) 1286 trigger_time(C) trigger_event(D) 1287 ON fullname(E) foreach_clause when_clause(G). { 1288 sqlite3BeginTrigger(pParse, &B, &Z, C, D.a, D.b, E, G, T, NOERR); 1289 A = (Z.n==0?B:Z); 1290 } 1291 1292 %type trigger_time {int} 1293 trigger_time(A) ::= BEFORE. { A = TK_BEFORE; } 1294 trigger_time(A) ::= AFTER. { A = TK_AFTER; } 1295 trigger_time(A) ::= INSTEAD OF. { A = TK_INSTEAD;} 1296 trigger_time(A) ::= . { A = TK_BEFORE; } 1297 1298 %type trigger_event {struct TrigEvent} 1299 %destructor trigger_event {sqlite3IdListDelete(pParse->db, $$.b);} 1300 trigger_event(A) ::= DELETE|INSERT(OP). {A.a = @OP; A.b = 0;} 1301 trigger_event(A) ::= UPDATE(OP). {A.a = @OP; A.b = 0;} 1302 trigger_event(A) ::= UPDATE OF idlist(X). {A.a = TK_UPDATE; A.b = X;} 1303 1304 foreach_clause ::= . 1305 foreach_clause ::= FOR EACH ROW. 1306 1307 %type when_clause {Expr*} 1308 %destructor when_clause {sqlite3ExprDelete(pParse->db, $$);} 1309 when_clause(A) ::= . { A = 0; } 1310 when_clause(A) ::= WHEN expr(X). { A = X.pExpr; } 1311 1312 %type trigger_cmd_list {TriggerStep*} 1313 %destructor trigger_cmd_list {sqlite3DeleteTriggerStep(pParse->db, $$);} 1314 trigger_cmd_list(A) ::= trigger_cmd_list(Y) trigger_cmd(X) SEMI. { 1315 assert( Y!=0 ); 1316 Y->pLast->pNext = X; 1317 Y->pLast = X; 1318 A = Y; 1319 } 1320 trigger_cmd_list(A) ::= trigger_cmd(X) SEMI. { 1321 assert( X!=0 ); 1322 X->pLast = X; 1323 A = X; 1324 } 1325 1326 // Disallow qualified table names on INSERT, UPDATE, and DELETE statements 1327 // within a trigger. The table to INSERT, UPDATE, or DELETE is always in 1328 // the same database as the table that the trigger fires on. 1329 // 1330 %type trnm {Token} 1331 trnm(A) ::= nm(X). {A = X;} 1332 trnm(A) ::= nm DOT nm(X). { 1333 A = X; 1334 sqlite3ErrorMsg(pParse, 1335 "qualified table names are not allowed on INSERT, UPDATE, and DELETE " 1336 "statements within triggers"); 1337 } 1338 1339 // Disallow the INDEX BY and NOT INDEXED clauses on UPDATE and DELETE 1340 // statements within triggers. We make a specific error message for this 1341 // since it is an exception to the default grammar rules. 1342 // 1343 tridxby ::= . 1344 tridxby ::= INDEXED BY nm. { 1345 sqlite3ErrorMsg(pParse, 1346 "the INDEXED BY clause is not allowed on UPDATE or DELETE statements " 1347 "within triggers"); 1348 } 1349 tridxby ::= NOT INDEXED. { 1350 sqlite3ErrorMsg(pParse, 1351 "the NOT INDEXED clause is not allowed on UPDATE or DELETE statements " 1352 "within triggers"); 1353 } 1354 1355 1356 1357 %type trigger_cmd {TriggerStep*} 1358 %destructor trigger_cmd {sqlite3DeleteTriggerStep(pParse->db, $$);} 1359 // UPDATE 1360 trigger_cmd(A) ::= 1361 UPDATE orconf(R) trnm(X) tridxby SET setlist(Y) where_opt(Z). 1362 { A = sqlite3TriggerUpdateStep(pParse->db, &X, Y, Z, R); } 1363 1364 // INSERT 1365 trigger_cmd(A) ::= insert_cmd(R) INTO trnm(X) inscollist_opt(F) select(S). 1366 {A = sqlite3TriggerInsertStep(pParse->db, &X, F, S, R);} 1367 1368 // DELETE 1369 trigger_cmd(A) ::= DELETE FROM trnm(X) tridxby where_opt(Y). 1370 {A = sqlite3TriggerDeleteStep(pParse->db, &X, Y);} 1371 1372 // SELECT 1373 trigger_cmd(A) ::= select(X). {A = sqlite3TriggerSelectStep(pParse->db, X); } 1374 1375 // The special RAISE expression that may occur in trigger programs 1376 expr(A) ::= RAISE(X) LP IGNORE RP(Y). { 1377 A.pExpr = sqlite3PExpr(pParse, TK_RAISE, 0, 0, 0); 1378 if( A.pExpr ){ 1379 A.pExpr->affinity = OE_Ignore; 1380 } 1381 A.zStart = X.z; 1382 A.zEnd = &Y.z[Y.n]; 1383 } 1384 expr(A) ::= RAISE(X) LP raisetype(T) COMMA nm(Z) RP(Y). { 1385 A.pExpr = sqlite3PExpr(pParse, TK_RAISE, 0, 0, &Z); 1386 if( A.pExpr ) { 1387 A.pExpr->affinity = (char)T; 1388 } 1389 A.zStart = X.z; 1390 A.zEnd = &Y.z[Y.n]; 1391 } 1392 %endif !SQLITE_OMIT_TRIGGER 1393 1394 %type raisetype {int} 1395 raisetype(A) ::= ROLLBACK. {A = OE_Rollback;} 1396 raisetype(A) ::= ABORT. {A = OE_Abort;} 1397 raisetype(A) ::= FAIL. {A = OE_Fail;} 1398 1399 1400 //////////////////////// DROP TRIGGER statement ////////////////////////////// 1401 %ifndef SQLITE_OMIT_TRIGGER 1402 cmd ::= DROP TRIGGER ifexists(NOERR) fullname(X). { 1403 sqlite3DropTrigger(pParse,X,NOERR); 1404 } 1405 %endif !SQLITE_OMIT_TRIGGER 1406 1407 //////////////////////// ATTACH DATABASE file AS name ///////////////////////// 1408 %ifndef SQLITE_OMIT_ATTACH 1409 cmd ::= ATTACH database_kw_opt expr(F) AS expr(D) key_opt(K). { 1410 sqlite3Attach(pParse, F.pExpr, D.pExpr, K); 1411 } 1412 cmd ::= DETACH database_kw_opt expr(D). { 1413 sqlite3Detach(pParse, D.pExpr); 1414 } 1415 1416 %type key_opt {Expr*} 1417 %destructor key_opt {sqlite3ExprDelete(pParse->db, $$);} 1418 key_opt(A) ::= . { A = 0; } 1419 key_opt(A) ::= KEY expr(X). { A = X.pExpr; } 1420 1421 database_kw_opt ::= DATABASE. 1422 database_kw_opt ::= . 1423 %endif SQLITE_OMIT_ATTACH 1424 1425 ////////////////////////// REINDEX collation ////////////////////////////////// 1426 %ifndef SQLITE_OMIT_REINDEX 1427 cmd ::= REINDEX. {sqlite3Reindex(pParse, 0, 0);} 1428 cmd ::= REINDEX nm(X) dbnm(Y). {sqlite3Reindex(pParse, &X, &Y);} 1429 %endif SQLITE_OMIT_REINDEX 1430 1431 /////////////////////////////////// ANALYZE /////////////////////////////////// 1432 %ifndef SQLITE_OMIT_ANALYZE 1433 cmd ::= ANALYZE. {sqlite3Analyze(pParse, 0, 0);} 1434 cmd ::= ANALYZE nm(X) dbnm(Y). {sqlite3Analyze(pParse, &X, &Y);} 1435 %endif 1436 1437 //////////////////////// ALTER TABLE table ... //////////////////////////////// 1438 %ifndef SQLITE_OMIT_ALTERTABLE 1439 cmd ::= ALTER TABLE fullname(X) RENAME TO nm(Z). { 1440 sqlite3AlterRenameTable(pParse,X,&Z); 1441 } 1442 cmd ::= ALTER TABLE add_column_fullname ADD kwcolumn_opt column(Y). { 1443 sqlite3AlterFinishAddColumn(pParse, &Y); 1444 } 1445 add_column_fullname ::= fullname(X). { 1446 pParse->db->lookaside.bEnabled = 0; 1447 sqlite3AlterBeginAddColumn(pParse, X); 1448 } 1449 kwcolumn_opt ::= . 1450 kwcolumn_opt ::= COLUMNKW. 1451 %endif SQLITE_OMIT_ALTERTABLE 1452 1453 //////////////////////// CREATE VIRTUAL TABLE ... ///////////////////////////// 1454 %ifndef SQLITE_OMIT_VIRTUALTABLE 1455 cmd ::= create_vtab. {sqlite3VtabFinishParse(pParse,0);} 1456 cmd ::= create_vtab LP vtabarglist RP(X). {sqlite3VtabFinishParse(pParse,&X);} 1457 create_vtab ::= createkw VIRTUAL TABLE ifnotexists(E) 1458 nm(X) dbnm(Y) USING nm(Z). { 1459 sqlite3VtabBeginParse(pParse, &X, &Y, &Z, E); 1460 } 1461 vtabarglist ::= vtabarg. 1462 vtabarglist ::= vtabarglist COMMA vtabarg. 1463 vtabarg ::= . {sqlite3VtabArgInit(pParse);} 1464 vtabarg ::= vtabarg vtabargtoken. 1465 vtabargtoken ::= ANY(X). {sqlite3VtabArgExtend(pParse,&X);} 1466 vtabargtoken ::= lp anylist RP(X). {sqlite3VtabArgExtend(pParse,&X);} 1467 lp ::= LP(X). {sqlite3VtabArgExtend(pParse,&X);} 1468 anylist ::= . 1469 anylist ::= anylist LP anylist RP. 1470 anylist ::= anylist ANY. 1471 %endif SQLITE_OMIT_VIRTUALTABLE 1472 1473 1474 //////////////////////// COMMON TABLE EXPRESSIONS //////////////////////////// 1475 %type with {With*} 1476 %type wqlist {With*} 1477 %destructor with {sqlite3WithDelete(pParse->db, $$);} 1478 %destructor wqlist {sqlite3WithDelete(pParse->db, $$);} 1479 1480 with(A) ::= . {A = 0;} 1481 %ifndef SQLITE_OMIT_CTE 1482 with(A) ::= WITH wqlist(W). { A = W; } 1483 with(A) ::= WITH RECURSIVE wqlist(W). { A = W; } 1484 1485 wqlist(A) ::= nm(X) idxlist_opt(Y) AS LP select(Z) RP. { 1486 A = sqlite3WithAdd(pParse, 0, &X, Y, Z); 1487 } 1488 wqlist(A) ::= wqlist(W) COMMA nm(X) idxlist_opt(Y) AS LP select(Z) RP. { 1489 A = sqlite3WithAdd(pParse, W, &X, Y, Z); 1490 } 1491 %endif SQLITE_OMIT_CTE 1492