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