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