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