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