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