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 ** @(#) $Id: parse.y,v 1.175 2005/07/08 12:13:05 drh Exp $ 18 */ 19 20 // All token codes are small integers with #defines that begin with "TK_" 21 %token_prefix TK_ 22 23 // The type of the data attached to each token is Token. This is also the 24 // default type for non-terminals. 25 // 26 %token_type {Token} 27 %default_type {Token} 28 29 // The generated parser function takes a 4th argument as follows: 30 %extra_argument {Parse *pParse} 31 32 // This code runs whenever there is a syntax error 33 // 34 %syntax_error { 35 if( pParse->zErrMsg==0 ){ 36 if( TOKEN.z[0] ){ 37 sqlite3ErrorMsg(pParse, "near \"%T\": syntax error", &TOKEN); 38 }else{ 39 sqlite3ErrorMsg(pParse, "incomplete SQL statement"); 40 } 41 } 42 } 43 44 // The name of the generated procedure that implements the parser 45 // is as follows: 46 %name sqlite3Parser 47 48 // The following text is included near the beginning of the C source 49 // code file that implements the parser. 50 // 51 %include { 52 #include "sqliteInt.h" 53 #include "parse.h" 54 55 /* 56 ** An instance of this structure holds information about the 57 ** LIMIT clause of a SELECT statement. 58 */ 59 struct LimitVal { 60 Expr *pLimit; /* The LIMIT expression. NULL if there is no limit */ 61 Expr *pOffset; /* The OFFSET expression. NULL if there is none */ 62 }; 63 64 /* 65 ** An instance of this structure is used to store the LIKE, 66 ** GLOB, NOT LIKE, and NOT GLOB operators. 67 */ 68 struct LikeOp { 69 Token operator; /* "like" or "glob" or "regexp" */ 70 int not; /* True if the NOT keyword is present */ 71 }; 72 73 /* 74 ** An instance of the following structure describes the event of a 75 ** TRIGGER. "a" is the event type, one of TK_UPDATE, TK_INSERT, 76 ** TK_DELETE, or TK_INSTEAD. If the event is of the form 77 ** 78 ** UPDATE ON (a,b,c) 79 ** 80 ** Then the "b" IdList records the list "a,b,c". 81 */ 82 struct TrigEvent { int a; IdList * b; }; 83 84 /* 85 ** An instance of this structure holds the ATTACH key and the key type. 86 */ 87 struct AttachKey { int type; Token key; }; 88 89 } // end %include 90 91 // These are extra tokens used by the lexer but never seen by the 92 // parser. We put them in a rule so that the parser generator will 93 // add them to the parse.h output file. 94 // 95 %nonassoc END_OF_FILE ILLEGAL SPACE UNCLOSED_STRING COMMENT FUNCTION 96 COLUMN AGG_FUNCTION CONST_FUNC. 97 98 // Input is a single SQL command 99 input ::= cmdlist. 100 cmdlist ::= cmdlist ecmd. 101 cmdlist ::= ecmd. 102 cmdx ::= cmd. { sqlite3FinishCoding(pParse); } 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 %endif 109 110 ///////////////////// Begin and end transactions. //////////////////////////// 111 // 112 113 cmd ::= BEGIN transtype(Y) trans_opt. {sqlite3BeginTransaction(pParse, Y);} 114 trans_opt ::= . 115 trans_opt ::= TRANSACTION. 116 trans_opt ::= TRANSACTION nm. 117 %type transtype {int} 118 transtype(A) ::= . {A = TK_DEFERRED;} 119 transtype(A) ::= DEFERRED(X). {A = @X;} 120 transtype(A) ::= IMMEDIATE(X). {A = @X;} 121 transtype(A) ::= EXCLUSIVE(X). {A = @X;} 122 cmd ::= COMMIT trans_opt. {sqlite3CommitTransaction(pParse);} 123 cmd ::= END trans_opt. {sqlite3CommitTransaction(pParse);} 124 cmd ::= ROLLBACK trans_opt. {sqlite3RollbackTransaction(pParse);} 125 126 ///////////////////// The CREATE TABLE statement //////////////////////////// 127 // 128 cmd ::= create_table create_table_args. 129 create_table ::= CREATE(X) temp(T) TABLE nm(Y) dbnm(Z). { 130 sqlite3StartTable(pParse,&X,&Y,&Z,T,0); 131 } 132 %type temp {int} 133 %ifndef SQLITE_OMIT_TEMPDB 134 temp(A) ::= TEMP. {A = 1;} 135 %endif 136 temp(A) ::= . {A = 0;} 137 create_table_args ::= LP columnlist conslist_opt(X) RP(Y). { 138 sqlite3EndTable(pParse,&X,&Y,0); 139 } 140 create_table_args ::= AS select(S). { 141 sqlite3EndTable(pParse,0,0,S); 142 sqlite3SelectDelete(S); 143 } 144 columnlist ::= columnlist COMMA column. 145 columnlist ::= column. 146 147 // A "column" is a complete description of a single column in a 148 // CREATE TABLE statement. This includes the column name, its 149 // datatype, and other keywords such as PRIMARY KEY, UNIQUE, REFERENCES, 150 // NOT NULL and so forth. 151 // 152 column(A) ::= columnid(X) type carglist. { 153 A.z = X.z; 154 A.n = (pParse->sLastToken.z-X.z) + pParse->sLastToken.n; 155 } 156 columnid(A) ::= nm(X). { 157 sqlite3AddColumn(pParse,&X); 158 A = X; 159 } 160 161 162 // An IDENTIFIER can be a generic identifier, or one of several 163 // keywords. Any non-standard keyword can also be an identifier. 164 // 165 %type id {Token} 166 id(A) ::= ID(X). {A = X;} 167 168 // The following directive causes tokens ABORT, AFTER, ASC, etc. to 169 // fallback to ID if they will not parse as their original value. 170 // This obviates the need for the "id" nonterminal. 171 // 172 %fallback ID 173 ABORT AFTER ANALYZE ASC ATTACH BEFORE BEGIN CASCADE CAST CONFLICT 174 DATABASE DEFERRED DESC DETACH EACH END EXCLUSIVE EXPLAIN FAIL FOR 175 IGNORE IMMEDIATE INITIALLY INSTEAD LIKE_KW MATCH KEY 176 OF OFFSET PRAGMA RAISE REPLACE RESTRICT ROW STATEMENT 177 TEMP TRIGGER VACUUM VIEW 178 %ifdef SQLITE_OMIT_COMPOUND_SELECT 179 EXCEPT INTERSECT UNION 180 %endif 181 REINDEX RENAME CTIME_KW ALTER 182 . 183 184 // Define operator precedence early so that this is the first occurance 185 // of the operator tokens in the grammer. Keeping the operators together 186 // causes them to be assigned integer values that are close together, 187 // which keeps parser tables smaller. 188 // 189 // The token values assigned to these symbols is determined by the order 190 // in which lemon first sees them. It must be the case that ISNULL/NOTNULL, 191 // NE/EQ, GT/LE, and GE/LT are separated by only a single value. See 192 // the sqlite3ExprIfFalse() routine for additional information on this 193 // constraint. 194 // 195 %left OR. 196 %left AND. 197 %right NOT. 198 %left IS LIKE_KW BETWEEN IN ISNULL NOTNULL NE EQ. 199 %left GT LE LT GE. 200 %right ESCAPE. 201 %left BITAND BITOR LSHIFT RSHIFT. 202 %left PLUS MINUS. 203 %left STAR SLASH REM. 204 %left CONCAT. 205 %right UMINUS UPLUS BITNOT. 206 207 // And "ids" is an identifer-or-string. 208 // 209 %type ids {Token} 210 ids(A) ::= ID(X). {A = X;} 211 ids(A) ::= STRING(X). {A = X;} 212 213 // The name of a column or table can be any of the following: 214 // 215 %type nm {Token} 216 nm(A) ::= ID(X). {A = X;} 217 nm(A) ::= STRING(X). {A = X;} 218 nm(A) ::= JOIN_KW(X). {A = X;} 219 220 // A typetoken is really one or more tokens that form a type name such 221 // as can be found after the column name in a CREATE TABLE statement. 222 // Multiple tokens are concatenated to form the value of the typetoken. 223 // 224 %type typetoken {Token} 225 type ::= . 226 type ::= typetoken(X). {sqlite3AddColumnType(pParse,&X);} 227 typetoken(A) ::= typename(X). {A = X;} 228 typetoken(A) ::= typename(X) LP signed RP(Y). { 229 A.z = X.z; 230 A.n = &Y.z[Y.n] - X.z; 231 } 232 typetoken(A) ::= typename(X) LP signed COMMA signed RP(Y). { 233 A.z = X.z; 234 A.n = &Y.z[Y.n] - X.z; 235 } 236 %type typename {Token} 237 typename(A) ::= ids(X). {A = X;} 238 typename(A) ::= typename(X) ids(Y). {A.z=X.z; A.n=Y.n+(Y.z-X.z);} 239 %type signed {int} 240 signed(A) ::= plus_num(X). { A = atoi(X.z); } 241 signed(A) ::= minus_num(X). { A = -atoi(X.z); } 242 243 // "carglist" is a list of additional constraints that come after the 244 // column name and column type in a CREATE TABLE statement. 245 // 246 carglist ::= carglist carg. 247 carglist ::= . 248 carg ::= CONSTRAINT nm ccons. 249 carg ::= ccons. 250 carg ::= DEFAULT term(X). {sqlite3AddDefaultValue(pParse,X);} 251 carg ::= DEFAULT LP expr(X) RP. {sqlite3AddDefaultValue(pParse,X);} 252 carg ::= DEFAULT PLUS term(X). {sqlite3AddDefaultValue(pParse,X);} 253 carg ::= DEFAULT MINUS term(X). { 254 Expr *p = sqlite3Expr(TK_UMINUS, X, 0, 0); 255 sqlite3AddDefaultValue(pParse,p); 256 } 257 carg ::= DEFAULT id(X). { 258 Expr *p = sqlite3Expr(TK_STRING, 0, 0, &X); 259 sqlite3AddDefaultValue(pParse,p); 260 } 261 262 // In addition to the type name, we also care about the primary key and 263 // UNIQUE constraints. 264 // 265 ccons ::= NULL onconf. 266 ccons ::= NOT NULL onconf(R). {sqlite3AddNotNull(pParse, R);} 267 ccons ::= PRIMARY KEY sortorder onconf(R) autoinc(I). 268 {sqlite3AddPrimaryKey(pParse,0,R,I);} 269 ccons ::= UNIQUE onconf(R). {sqlite3CreateIndex(pParse,0,0,0,0,R,0,0);} 270 ccons ::= CHECK LP expr(X) RP onconf. {sqlite3ExprDelete(X);} 271 ccons ::= REFERENCES nm(T) idxlist_opt(TA) refargs(R). 272 {sqlite3CreateForeignKey(pParse,0,&T,TA,R);} 273 ccons ::= defer_subclause(D). {sqlite3DeferForeignKey(pParse,D);} 274 ccons ::= COLLATE id(C). {sqlite3AddCollateType(pParse, C.z, C.n);} 275 276 // The optional AUTOINCREMENT keyword 277 %type autoinc {int} 278 autoinc(X) ::= . {X = 0;} 279 autoinc(X) ::= AUTOINCR. {X = 1;} 280 281 // The next group of rules parses the arguments to a REFERENCES clause 282 // that determine if the referential integrity checking is deferred or 283 // or immediate and which determine what action to take if a ref-integ 284 // check fails. 285 // 286 %type refargs {int} 287 refargs(A) ::= . { A = OE_Restrict * 0x010101; } 288 refargs(A) ::= refargs(X) refarg(Y). { A = (X & Y.mask) | Y.value; } 289 %type refarg {struct {int value; int mask;}} 290 refarg(A) ::= MATCH nm. { A.value = 0; A.mask = 0x000000; } 291 refarg(A) ::= ON DELETE refact(X). { A.value = X; A.mask = 0x0000ff; } 292 refarg(A) ::= ON UPDATE refact(X). { A.value = X<<8; A.mask = 0x00ff00; } 293 refarg(A) ::= ON INSERT refact(X). { A.value = X<<16; A.mask = 0xff0000; } 294 %type refact {int} 295 refact(A) ::= SET NULL. { A = OE_SetNull; } 296 refact(A) ::= SET DEFAULT. { A = OE_SetDflt; } 297 refact(A) ::= CASCADE. { A = OE_Cascade; } 298 refact(A) ::= RESTRICT. { A = OE_Restrict; } 299 %type defer_subclause {int} 300 defer_subclause(A) ::= NOT DEFERRABLE init_deferred_pred_opt(X). {A = X;} 301 defer_subclause(A) ::= DEFERRABLE init_deferred_pred_opt(X). {A = X;} 302 %type init_deferred_pred_opt {int} 303 init_deferred_pred_opt(A) ::= . {A = 0;} 304 init_deferred_pred_opt(A) ::= INITIALLY DEFERRED. {A = 1;} 305 init_deferred_pred_opt(A) ::= INITIALLY IMMEDIATE. {A = 0;} 306 307 // For the time being, the only constraint we care about is the primary 308 // key and UNIQUE. Both create indices. 309 // 310 conslist_opt(A) ::= . {A.n = 0; A.z = 0;} 311 conslist_opt(A) ::= COMMA(X) conslist. {A = X;} 312 conslist ::= conslist COMMA tcons. 313 conslist ::= conslist tcons. 314 conslist ::= tcons. 315 tcons ::= CONSTRAINT nm. 316 tcons ::= PRIMARY KEY LP idxlist(X) autoinc(I) RP onconf(R). 317 {sqlite3AddPrimaryKey(pParse,X,R,I);} 318 tcons ::= UNIQUE LP idxlist(X) RP onconf(R). 319 {sqlite3CreateIndex(pParse,0,0,0,X,R,0,0);} 320 tcons ::= CHECK expr onconf. 321 tcons ::= FOREIGN KEY LP idxlist(FA) RP 322 REFERENCES nm(T) idxlist_opt(TA) refargs(R) defer_subclause_opt(D). { 323 sqlite3CreateForeignKey(pParse, FA, &T, TA, R); 324 sqlite3DeferForeignKey(pParse, D); 325 } 326 %type defer_subclause_opt {int} 327 defer_subclause_opt(A) ::= . {A = 0;} 328 defer_subclause_opt(A) ::= defer_subclause(X). {A = X;} 329 330 // The following is a non-standard extension that allows us to declare the 331 // default behavior when there is a constraint conflict. 332 // 333 %type onconf {int} 334 %type orconf {int} 335 %type resolvetype {int} 336 onconf(A) ::= . {A = OE_Default;} 337 onconf(A) ::= ON CONFLICT resolvetype(X). {A = X;} 338 orconf(A) ::= . {A = OE_Default;} 339 orconf(A) ::= OR resolvetype(X). {A = X;} 340 resolvetype(A) ::= raisetype(X). {A = X;} 341 resolvetype(A) ::= IGNORE. {A = OE_Ignore;} 342 resolvetype(A) ::= REPLACE. {A = OE_Replace;} 343 344 ////////////////////////// The DROP TABLE ///////////////////////////////////// 345 // 346 cmd ::= DROP TABLE fullname(X). { 347 sqlite3DropTable(pParse, X, 0); 348 } 349 350 ///////////////////// The CREATE VIEW statement ///////////////////////////// 351 // 352 %ifndef SQLITE_OMIT_VIEW 353 cmd ::= CREATE(X) temp(T) VIEW nm(Y) dbnm(Z) AS select(S). { 354 sqlite3CreateView(pParse, &X, &Y, &Z, S, T); 355 } 356 cmd ::= DROP VIEW fullname(X). { 357 sqlite3DropTable(pParse, X, 1); 358 } 359 %endif // SQLITE_OMIT_VIEW 360 361 //////////////////////// The SELECT statement ///////////////////////////////// 362 // 363 cmd ::= select(X). { 364 sqlite3Select(pParse, X, SRT_Callback, 0, 0, 0, 0, 0); 365 sqlite3SelectDelete(X); 366 } 367 368 %type select {Select*} 369 %destructor select {sqlite3SelectDelete($$);} 370 %type oneselect {Select*} 371 %destructor oneselect {sqlite3SelectDelete($$);} 372 373 select(A) ::= oneselect(X). {A = X;} 374 %ifndef SQLITE_OMIT_COMPOUND_SELECT 375 select(A) ::= select(X) multiselect_op(Y) oneselect(Z). { 376 if( Z ){ 377 Z->op = Y; 378 Z->pPrior = X; 379 } 380 A = Z; 381 } 382 %type multiselect_op {int} 383 multiselect_op(A) ::= UNION(OP). {A = @OP;} 384 multiselect_op(A) ::= UNION ALL. {A = TK_ALL;} 385 multiselect_op(A) ::= INTERSECT(OP). {A = @OP;} 386 multiselect_op(A) ::= EXCEPT(OP). {A = @OP;} 387 %endif // SQLITE_OMIT_COMPOUND_SELECT 388 oneselect(A) ::= SELECT distinct(D) selcollist(W) from(X) where_opt(Y) 389 groupby_opt(P) having_opt(Q) orderby_opt(Z) limit_opt(L). { 390 A = sqlite3SelectNew(W,X,Y,P,Q,Z,D,L.pLimit,L.pOffset); 391 } 392 393 // The "distinct" nonterminal is true (1) if the DISTINCT keyword is 394 // present and false (0) if it is not. 395 // 396 %type distinct {int} 397 distinct(A) ::= DISTINCT. {A = 1;} 398 distinct(A) ::= ALL. {A = 0;} 399 distinct(A) ::= . {A = 0;} 400 401 // selcollist is a list of expressions that are to become the return 402 // values of the SELECT statement. The "*" in statements like 403 // "SELECT * FROM ..." is encoded as a special expression with an 404 // opcode of TK_ALL. 405 // 406 %type selcollist {ExprList*} 407 %destructor selcollist {sqlite3ExprListDelete($$);} 408 %type sclp {ExprList*} 409 %destructor sclp {sqlite3ExprListDelete($$);} 410 sclp(A) ::= selcollist(X) COMMA. {A = X;} 411 sclp(A) ::= . {A = 0;} 412 selcollist(A) ::= sclp(P) expr(X) as(Y). { 413 A = sqlite3ExprListAppend(P,X,Y.n?&Y:0); 414 } 415 selcollist(A) ::= sclp(P) STAR. { 416 A = sqlite3ExprListAppend(P, sqlite3Expr(TK_ALL, 0, 0, 0), 0); 417 } 418 selcollist(A) ::= sclp(P) nm(X) DOT STAR. { 419 Expr *pRight = sqlite3Expr(TK_ALL, 0, 0, 0); 420 Expr *pLeft = sqlite3Expr(TK_ID, 0, 0, &X); 421 A = sqlite3ExprListAppend(P, sqlite3Expr(TK_DOT, pLeft, pRight, 0), 0); 422 } 423 424 // An option "AS <id>" phrase that can follow one of the expressions that 425 // define the result set, or one of the tables in the FROM clause. 426 // 427 %type as {Token} 428 as(X) ::= AS nm(Y). {X = Y;} 429 as(X) ::= ids(Y). {X = Y;} 430 as(X) ::= . {X.n = 0;} 431 432 433 %type seltablist {SrcList*} 434 %destructor seltablist {sqlite3SrcListDelete($$);} 435 %type stl_prefix {SrcList*} 436 %destructor stl_prefix {sqlite3SrcListDelete($$);} 437 %type from {SrcList*} 438 %destructor from {sqlite3SrcListDelete($$);} 439 440 // A complete FROM clause. 441 // 442 from(A) ::= . {A = sqliteMalloc(sizeof(*A));} 443 from(A) ::= FROM seltablist(X). {A = X;} 444 445 // "seltablist" is a "Select Table List" - the content of the FROM clause 446 // in a SELECT statement. "stl_prefix" is a prefix of this list. 447 // 448 stl_prefix(A) ::= seltablist(X) joinop(Y). { 449 A = X; 450 if( A && A->nSrc>0 ) A->a[A->nSrc-1].jointype = Y; 451 } 452 stl_prefix(A) ::= . {A = 0;} 453 seltablist(A) ::= stl_prefix(X) nm(Y) dbnm(D) as(Z) on_opt(N) using_opt(U). { 454 A = sqlite3SrcListAppend(X,&Y,&D); 455 if( Z.n ) sqlite3SrcListAddAlias(A,&Z); 456 if( N ){ 457 if( A && A->nSrc>1 ){ A->a[A->nSrc-2].pOn = N; } 458 else { sqlite3ExprDelete(N); } 459 } 460 if( U ){ 461 if( A && A->nSrc>1 ){ A->a[A->nSrc-2].pUsing = U; } 462 else { sqlite3IdListDelete(U); } 463 } 464 } 465 %ifndef SQLITE_OMIT_SUBQUERY 466 seltablist(A) ::= stl_prefix(X) LP seltablist_paren(S) RP 467 as(Z) on_opt(N) using_opt(U). { 468 A = sqlite3SrcListAppend(X,0,0); 469 A->a[A->nSrc-1].pSelect = S; 470 if( Z.n ) sqlite3SrcListAddAlias(A,&Z); 471 if( N ){ 472 if( A && A->nSrc>1 ){ A->a[A->nSrc-2].pOn = N; } 473 else { sqlite3ExprDelete(N); } 474 } 475 if( U ){ 476 if( A && A->nSrc>1 ){ A->a[A->nSrc-2].pUsing = U; } 477 else { sqlite3IdListDelete(U); } 478 } 479 } 480 481 // A seltablist_paren nonterminal represents anything in a FROM that 482 // is contained inside parentheses. This can be either a subquery or 483 // a grouping of table and subqueries. 484 // 485 %type seltablist_paren {Select*} 486 %destructor seltablist_paren {sqlite3SelectDelete($$);} 487 seltablist_paren(A) ::= select(S). {A = S;} 488 seltablist_paren(A) ::= seltablist(F). { 489 A = sqlite3SelectNew(0,F,0,0,0,0,0,0,0); 490 } 491 %endif // SQLITE_OMIT_SUBQUERY 492 493 %type dbnm {Token} 494 dbnm(A) ::= . {A.z=0; A.n=0;} 495 dbnm(A) ::= DOT nm(X). {A = X;} 496 497 %type fullname {SrcList*} 498 %destructor fullname {sqlite3SrcListDelete($$);} 499 fullname(A) ::= nm(X) dbnm(Y). {A = sqlite3SrcListAppend(0,&X,&Y);} 500 501 %type joinop {int} 502 %type joinop2 {int} 503 joinop(X) ::= COMMA. { X = JT_INNER; } 504 joinop(X) ::= JOIN. { X = JT_INNER; } 505 joinop(X) ::= JOIN_KW(A) JOIN. { X = sqlite3JoinType(pParse,&A,0,0); } 506 joinop(X) ::= JOIN_KW(A) nm(B) JOIN. { X = sqlite3JoinType(pParse,&A,&B,0); } 507 joinop(X) ::= JOIN_KW(A) nm(B) nm(C) JOIN. 508 { X = sqlite3JoinType(pParse,&A,&B,&C); } 509 510 %type on_opt {Expr*} 511 %destructor on_opt {sqlite3ExprDelete($$);} 512 on_opt(N) ::= ON expr(E). {N = E;} 513 on_opt(N) ::= . {N = 0;} 514 515 %type using_opt {IdList*} 516 %destructor using_opt {sqlite3IdListDelete($$);} 517 using_opt(U) ::= USING LP inscollist(L) RP. {U = L;} 518 using_opt(U) ::= . {U = 0;} 519 520 521 %type orderby_opt {ExprList*} 522 %destructor orderby_opt {sqlite3ExprListDelete($$);} 523 %type sortlist {ExprList*} 524 %destructor sortlist {sqlite3ExprListDelete($$);} 525 %type sortitem {Expr*} 526 %destructor sortitem {sqlite3ExprDelete($$);} 527 528 orderby_opt(A) ::= . {A = 0;} 529 orderby_opt(A) ::= ORDER BY sortlist(X). {A = X;} 530 sortlist(A) ::= sortlist(X) COMMA sortitem(Y) collate(C) sortorder(Z). { 531 A = sqlite3ExprListAppend(X,Y,C.n>0?&C:0); 532 if( A ) A->a[A->nExpr-1].sortOrder = Z; 533 } 534 sortlist(A) ::= sortitem(Y) collate(C) sortorder(Z). { 535 A = sqlite3ExprListAppend(0,Y,C.n>0?&C:0); 536 if( A && A->a ) A->a[0].sortOrder = Z; 537 } 538 sortitem(A) ::= expr(X). {A = X;} 539 540 %type sortorder {int} 541 %type collate {Token} 542 543 sortorder(A) ::= ASC. {A = SQLITE_SO_ASC;} 544 sortorder(A) ::= DESC. {A = SQLITE_SO_DESC;} 545 sortorder(A) ::= . {A = SQLITE_SO_ASC;} 546 collate(C) ::= . {C.z = 0; C.n = 0;} 547 collate(C) ::= COLLATE id(X). {C = X;} 548 549 %type groupby_opt {ExprList*} 550 %destructor groupby_opt {sqlite3ExprListDelete($$);} 551 groupby_opt(A) ::= . {A = 0;} 552 groupby_opt(A) ::= GROUP BY exprlist(X). {A = X;} 553 554 %type having_opt {Expr*} 555 %destructor having_opt {sqlite3ExprDelete($$);} 556 having_opt(A) ::= . {A = 0;} 557 having_opt(A) ::= HAVING expr(X). {A = X;} 558 559 %type limit_opt {struct LimitVal} 560 %destructor limit_opt { 561 sqlite3ExprDelete($$.pLimit); 562 sqlite3ExprDelete($$.pOffset); 563 } 564 limit_opt(A) ::= . {A.pLimit = 0; A.pOffset = 0;} 565 limit_opt(A) ::= LIMIT expr(X). {A.pLimit = X; A.pOffset = 0;} 566 limit_opt(A) ::= LIMIT expr(X) OFFSET expr(Y). 567 {A.pLimit = X; A.pOffset = Y;} 568 limit_opt(A) ::= LIMIT expr(X) COMMA expr(Y). 569 {A.pOffset = X; A.pLimit = Y;} 570 571 /////////////////////////// The DELETE statement ///////////////////////////// 572 // 573 cmd ::= DELETE FROM fullname(X) where_opt(Y). {sqlite3DeleteFrom(pParse,X,Y);} 574 575 %type where_opt {Expr*} 576 %destructor where_opt {sqlite3ExprDelete($$);} 577 578 where_opt(A) ::= . {A = 0;} 579 where_opt(A) ::= WHERE expr(X). {A = X;} 580 581 ////////////////////////// The UPDATE command //////////////////////////////// 582 // 583 cmd ::= UPDATE orconf(R) fullname(X) SET setlist(Y) where_opt(Z). 584 {sqlite3Update(pParse,X,Y,Z,R);} 585 586 %type setlist {ExprList*} 587 %destructor setlist {sqlite3ExprListDelete($$);} 588 589 setlist(A) ::= setlist(Z) COMMA nm(X) EQ expr(Y). 590 {A = sqlite3ExprListAppend(Z,Y,&X);} 591 setlist(A) ::= nm(X) EQ expr(Y). {A = sqlite3ExprListAppend(0,Y,&X);} 592 593 ////////////////////////// The INSERT command ///////////////////////////////// 594 // 595 cmd ::= insert_cmd(R) INTO fullname(X) inscollist_opt(F) 596 VALUES LP itemlist(Y) RP. 597 {sqlite3Insert(pParse, X, Y, 0, F, R);} 598 cmd ::= insert_cmd(R) INTO fullname(X) inscollist_opt(F) select(S). 599 {sqlite3Insert(pParse, X, 0, S, F, R);} 600 601 %type insert_cmd {int} 602 insert_cmd(A) ::= INSERT orconf(R). {A = R;} 603 insert_cmd(A) ::= REPLACE. {A = OE_Replace;} 604 605 606 %type itemlist {ExprList*} 607 %destructor itemlist {sqlite3ExprListDelete($$);} 608 609 itemlist(A) ::= itemlist(X) COMMA expr(Y). {A = sqlite3ExprListAppend(X,Y,0);} 610 itemlist(A) ::= expr(X). {A = sqlite3ExprListAppend(0,X,0);} 611 612 %type inscollist_opt {IdList*} 613 %destructor inscollist_opt {sqlite3IdListDelete($$);} 614 %type inscollist {IdList*} 615 %destructor inscollist {sqlite3IdListDelete($$);} 616 617 inscollist_opt(A) ::= . {A = 0;} 618 inscollist_opt(A) ::= LP inscollist(X) RP. {A = X;} 619 inscollist(A) ::= inscollist(X) COMMA nm(Y). {A = sqlite3IdListAppend(X,&Y);} 620 inscollist(A) ::= nm(Y). {A = sqlite3IdListAppend(0,&Y);} 621 622 /////////////////////////// Expression Processing ///////////////////////////// 623 // 624 625 %type expr {Expr*} 626 %destructor expr {sqlite3ExprDelete($$);} 627 %type term {Expr*} 628 %destructor term {sqlite3ExprDelete($$);} 629 630 expr(A) ::= term(X). {A = X;} 631 expr(A) ::= LP(B) expr(X) RP(E). {A = X; sqlite3ExprSpan(A,&B,&E); } 632 term(A) ::= NULL(X). {A = sqlite3Expr(@X, 0, 0, &X);} 633 expr(A) ::= ID(X). {A = sqlite3Expr(TK_ID, 0, 0, &X);} 634 expr(A) ::= JOIN_KW(X). {A = sqlite3Expr(TK_ID, 0, 0, &X);} 635 expr(A) ::= nm(X) DOT nm(Y). { 636 Expr *temp1 = sqlite3Expr(TK_ID, 0, 0, &X); 637 Expr *temp2 = sqlite3Expr(TK_ID, 0, 0, &Y); 638 A = sqlite3Expr(TK_DOT, temp1, temp2, 0); 639 } 640 expr(A) ::= nm(X) DOT nm(Y) DOT nm(Z). { 641 Expr *temp1 = sqlite3Expr(TK_ID, 0, 0, &X); 642 Expr *temp2 = sqlite3Expr(TK_ID, 0, 0, &Y); 643 Expr *temp3 = sqlite3Expr(TK_ID, 0, 0, &Z); 644 Expr *temp4 = sqlite3Expr(TK_DOT, temp2, temp3, 0); 645 A = sqlite3Expr(TK_DOT, temp1, temp4, 0); 646 } 647 term(A) ::= INTEGER(X). {A = sqlite3Expr(@X, 0, 0, &X);} 648 term(A) ::= FLOAT(X). {A = sqlite3Expr(@X, 0, 0, &X);} 649 term(A) ::= STRING(X). {A = sqlite3Expr(@X, 0, 0, &X);} 650 term(A) ::= BLOB(X). {A = sqlite3Expr(@X, 0, 0, &X);} 651 expr(A) ::= REGISTER(X). {A = sqlite3RegisterExpr(pParse, &X);} 652 expr(A) ::= VARIABLE(X). { 653 Token *pToken = &X; 654 Expr *pExpr = A = sqlite3Expr(TK_VARIABLE, 0, 0, pToken); 655 sqlite3ExprAssignVarNumber(pParse, pExpr); 656 } 657 %ifndef SQLITE_OMIT_CAST 658 expr(A) ::= CAST(X) LP expr(E) AS typetoken(T) RP(Y). { 659 A = sqlite3Expr(TK_CAST, E, 0, &T); 660 sqlite3ExprSpan(A,&X,&Y); 661 } 662 %endif // SQLITE_OMIT_CAST 663 expr(A) ::= ID(X) LP exprlist(Y) RP(E). { 664 A = sqlite3ExprFunction(Y, &X); 665 sqlite3ExprSpan(A,&X,&E); 666 } 667 expr(A) ::= ID(X) LP STAR RP(E). { 668 A = sqlite3ExprFunction(0, &X); 669 sqlite3ExprSpan(A,&X,&E); 670 } 671 term(A) ::= CTIME_KW(OP). { 672 /* The CURRENT_TIME, CURRENT_DATE, and CURRENT_TIMESTAMP values are 673 ** treated as functions that return constants */ 674 A = sqlite3ExprFunction(0,&OP); 675 if( A ) A->op = TK_CONST_FUNC; 676 } 677 expr(A) ::= expr(X) AND(OP) expr(Y). {A = sqlite3Expr(@OP, X, Y, 0);} 678 expr(A) ::= expr(X) OR(OP) expr(Y). {A = sqlite3Expr(@OP, X, Y, 0);} 679 expr(A) ::= expr(X) LT(OP) expr(Y). {A = sqlite3Expr(@OP, X, Y, 0);} 680 expr(A) ::= expr(X) GT(OP) expr(Y). {A = sqlite3Expr(@OP, X, Y, 0);} 681 expr(A) ::= expr(X) LE(OP) expr(Y). {A = sqlite3Expr(@OP, X, Y, 0);} 682 expr(A) ::= expr(X) GE(OP) expr(Y). {A = sqlite3Expr(@OP, X, Y, 0);} 683 expr(A) ::= expr(X) NE(OP) expr(Y). {A = sqlite3Expr(@OP, X, Y, 0);} 684 expr(A) ::= expr(X) EQ(OP) expr(Y). {A = sqlite3Expr(@OP, X, Y, 0);} 685 expr(A) ::= expr(X) BITAND(OP) expr(Y). {A = sqlite3Expr(@OP, X, Y, 0);} 686 expr(A) ::= expr(X) BITOR(OP) expr(Y). {A = sqlite3Expr(@OP, X, Y, 0);} 687 expr(A) ::= expr(X) LSHIFT(OP) expr(Y). {A = sqlite3Expr(@OP, X, Y, 0);} 688 expr(A) ::= expr(X) RSHIFT(OP) expr(Y). {A = sqlite3Expr(@OP, X, Y, 0);} 689 expr(A) ::= expr(X) PLUS(OP) expr(Y). {A = sqlite3Expr(@OP, X, Y, 0);} 690 expr(A) ::= expr(X) MINUS(OP) expr(Y). {A = sqlite3Expr(@OP, X, Y, 0);} 691 expr(A) ::= expr(X) STAR(OP) expr(Y). {A = sqlite3Expr(@OP, X, Y, 0);} 692 expr(A) ::= expr(X) SLASH(OP) expr(Y). {A = sqlite3Expr(@OP, X, Y, 0);} 693 expr(A) ::= expr(X) REM(OP) expr(Y). {A = sqlite3Expr(@OP, X, Y, 0);} 694 expr(A) ::= expr(X) CONCAT(OP) expr(Y). {A = sqlite3Expr(@OP, X, Y, 0);} 695 %type likeop {struct LikeOp} 696 likeop(A) ::= LIKE_KW(X). {A.operator = X; A.not = 0;} 697 likeop(A) ::= NOT LIKE_KW(X). {A.operator = X; A.not = 1;} 698 %type escape {Expr*} 699 escape(X) ::= ESCAPE expr(A). [ESCAPE] {X = A;} 700 escape(X) ::= . [ESCAPE] {X = 0;} 701 expr(A) ::= expr(X) likeop(OP) expr(Y) escape(E). [LIKE_KW] { 702 ExprList *pList = sqlite3ExprListAppend(0, Y, 0); 703 pList = sqlite3ExprListAppend(pList, X, 0); 704 if( E ){ 705 pList = sqlite3ExprListAppend(pList, E, 0); 706 } 707 A = sqlite3ExprFunction(pList, &OP.operator); 708 if( OP.not ) A = sqlite3Expr(TK_NOT, A, 0, 0); 709 sqlite3ExprSpan(A, &X->span, &Y->span); 710 } 711 712 expr(A) ::= expr(X) ISNULL(E). { 713 A = sqlite3Expr(TK_ISNULL, X, 0, 0); 714 sqlite3ExprSpan(A,&X->span,&E); 715 } 716 expr(A) ::= expr(X) IS NULL(E). { 717 A = sqlite3Expr(TK_ISNULL, X, 0, 0); 718 sqlite3ExprSpan(A,&X->span,&E); 719 } 720 expr(A) ::= expr(X) NOTNULL(E). { 721 A = sqlite3Expr(TK_NOTNULL, X, 0, 0); 722 sqlite3ExprSpan(A,&X->span,&E); 723 } 724 expr(A) ::= expr(X) NOT NULL(E). { 725 A = sqlite3Expr(TK_NOTNULL, X, 0, 0); 726 sqlite3ExprSpan(A,&X->span,&E); 727 } 728 expr(A) ::= expr(X) IS NOT NULL(E). { 729 A = sqlite3Expr(TK_NOTNULL, X, 0, 0); 730 sqlite3ExprSpan(A,&X->span,&E); 731 } 732 expr(A) ::= NOT(B) expr(X). { 733 A = sqlite3Expr(@B, X, 0, 0); 734 sqlite3ExprSpan(A,&B,&X->span); 735 } 736 expr(A) ::= BITNOT(B) expr(X). { 737 A = sqlite3Expr(@B, X, 0, 0); 738 sqlite3ExprSpan(A,&B,&X->span); 739 } 740 expr(A) ::= MINUS(B) expr(X). [UMINUS] { 741 A = sqlite3Expr(TK_UMINUS, X, 0, 0); 742 sqlite3ExprSpan(A,&B,&X->span); 743 } 744 expr(A) ::= PLUS(B) expr(X). [UPLUS] { 745 A = sqlite3Expr(TK_UPLUS, X, 0, 0); 746 sqlite3ExprSpan(A,&B,&X->span); 747 } 748 %type between_op {int} 749 between_op(A) ::= BETWEEN. {A = 0;} 750 between_op(A) ::= NOT BETWEEN. {A = 1;} 751 expr(A) ::= expr(W) between_op(N) expr(X) AND expr(Y). [BETWEEN] { 752 ExprList *pList = sqlite3ExprListAppend(0, X, 0); 753 pList = sqlite3ExprListAppend(pList, Y, 0); 754 A = sqlite3Expr(TK_BETWEEN, W, 0, 0); 755 if( A ) A->pList = pList; 756 if( N ) A = sqlite3Expr(TK_NOT, A, 0, 0); 757 sqlite3ExprSpan(A,&W->span,&Y->span); 758 } 759 %ifndef SQLITE_OMIT_SUBQUERY 760 %type in_op {int} 761 in_op(A) ::= IN. {A = 0;} 762 in_op(A) ::= NOT IN. {A = 1;} 763 expr(A) ::= expr(X) in_op(N) LP exprlist(Y) RP(E). [IN] { 764 A = sqlite3Expr(TK_IN, X, 0, 0); 765 if( A ){ 766 A->pList = Y; 767 }else{ 768 sqlite3ExprListDelete(Y); 769 } 770 if( N ) A = sqlite3Expr(TK_NOT, A, 0, 0); 771 sqlite3ExprSpan(A,&X->span,&E); 772 } 773 expr(A) ::= LP(B) select(X) RP(E). { 774 A = sqlite3Expr(TK_SELECT, 0, 0, 0); 775 if( A ) A->pSelect = X; 776 if( !A ) sqlite3SelectDelete(X); 777 sqlite3ExprSpan(A,&B,&E); 778 } 779 expr(A) ::= expr(X) in_op(N) LP select(Y) RP(E). [IN] { 780 A = sqlite3Expr(TK_IN, X, 0, 0); 781 if( A ) A->pSelect = Y; 782 if( !A ) sqlite3SelectDelete(Y); 783 if( N ) A = sqlite3Expr(TK_NOT, A, 0, 0); 784 sqlite3ExprSpan(A,&X->span,&E); 785 } 786 expr(A) ::= expr(X) in_op(N) nm(Y) dbnm(Z). [IN] { 787 SrcList *pSrc = sqlite3SrcListAppend(0,&Y,&Z); 788 A = sqlite3Expr(TK_IN, X, 0, 0); 789 if( A ) A->pSelect = sqlite3SelectNew(0,pSrc,0,0,0,0,0,0,0); 790 if( N ) A = sqlite3Expr(TK_NOT, A, 0, 0); 791 sqlite3ExprSpan(A,&X->span,Z.z?&Z:&Y); 792 } 793 expr(A) ::= EXISTS(B) LP select(Y) RP(E). { 794 Expr *p = A = sqlite3Expr(TK_EXISTS, 0, 0, 0); 795 if( p ){ 796 p->pSelect = Y; 797 sqlite3ExprSpan(p,&B,&E); 798 } 799 if( !p ) sqlite3SelectDelete(Y); 800 } 801 %endif // SQLITE_OMIT_SUBQUERY 802 803 /* CASE expressions */ 804 expr(A) ::= CASE(C) case_operand(X) case_exprlist(Y) case_else(Z) END(E). { 805 A = sqlite3Expr(TK_CASE, X, Z, 0); 806 if( A ) A->pList = Y; 807 sqlite3ExprSpan(A, &C, &E); 808 } 809 %type case_exprlist {ExprList*} 810 %destructor case_exprlist {sqlite3ExprListDelete($$);} 811 case_exprlist(A) ::= case_exprlist(X) WHEN expr(Y) THEN expr(Z). { 812 A = sqlite3ExprListAppend(X, Y, 0); 813 A = sqlite3ExprListAppend(A, Z, 0); 814 } 815 case_exprlist(A) ::= WHEN expr(Y) THEN expr(Z). { 816 A = sqlite3ExprListAppend(0, Y, 0); 817 A = sqlite3ExprListAppend(A, Z, 0); 818 } 819 %type case_else {Expr*} 820 case_else(A) ::= ELSE expr(X). {A = X;} 821 case_else(A) ::= . {A = 0;} 822 %type case_operand {Expr*} 823 case_operand(A) ::= expr(X). {A = X;} 824 case_operand(A) ::= . {A = 0;} 825 826 %type exprlist {ExprList*} 827 %destructor exprlist {sqlite3ExprListDelete($$);} 828 %type expritem {Expr*} 829 %destructor expritem {sqlite3ExprDelete($$);} 830 831 exprlist(A) ::= exprlist(X) COMMA expritem(Y). 832 {A = sqlite3ExprListAppend(X,Y,0);} 833 exprlist(A) ::= expritem(X). {A = sqlite3ExprListAppend(0,X,0);} 834 expritem(A) ::= expr(X). {A = X;} 835 expritem(A) ::= . {A = 0;} 836 837 ///////////////////////////// The CREATE INDEX command /////////////////////// 838 // 839 cmd ::= CREATE(S) uniqueflag(U) INDEX nm(X) dbnm(D) 840 ON nm(Y) LP idxlist(Z) RP(E) onconf(R). { 841 if( U!=OE_None ) U = R; 842 if( U==OE_Default) U = OE_Abort; 843 sqlite3CreateIndex(pParse, &X, &D, sqlite3SrcListAppend(0,&Y,0),Z,U, &S, &E); 844 } 845 846 %type uniqueflag {int} 847 uniqueflag(A) ::= UNIQUE. {A = OE_Abort;} 848 uniqueflag(A) ::= . {A = OE_None;} 849 850 %type idxlist {ExprList*} 851 %destructor idxlist {sqlite3ExprListDelete($$);} 852 %type idxlist_opt {ExprList*} 853 %destructor idxlist_opt {sqlite3ExprListDelete($$);} 854 %type idxitem {Token} 855 856 idxlist_opt(A) ::= . {A = 0;} 857 idxlist_opt(A) ::= LP idxlist(X) RP. {A = X;} 858 idxlist(A) ::= idxlist(X) COMMA idxitem(Y) collate(C) sortorder. { 859 Expr *p = 0; 860 if( C.n>0 ){ 861 p = sqlite3Expr(TK_COLUMN, 0, 0, 0); 862 if( p ) p->pColl = sqlite3LocateCollSeq(pParse, C.z, C.n); 863 } 864 A = sqlite3ExprListAppend(X, p, &Y); 865 } 866 idxlist(A) ::= idxitem(Y) collate(C) sortorder. { 867 Expr *p = 0; 868 if( C.n>0 ){ 869 p = sqlite3Expr(TK_COLUMN, 0, 0, 0); 870 if( p ) p->pColl = sqlite3LocateCollSeq(pParse, C.z, C.n); 871 } 872 A = sqlite3ExprListAppend(0, p, &Y); 873 } 874 idxitem(A) ::= nm(X). {A = X;} 875 876 877 ///////////////////////////// The DROP INDEX command ///////////////////////// 878 // 879 cmd ::= DROP INDEX fullname(X). {sqlite3DropIndex(pParse, X);} 880 881 ///////////////////////////// The VACUUM command ///////////////////////////// 882 // 883 cmd ::= VACUUM. {sqlite3Vacuum(pParse,0);} 884 cmd ::= VACUUM nm. {sqlite3Vacuum(pParse,0);} 885 886 ///////////////////////////// The PRAGMA command ///////////////////////////// 887 // 888 %ifndef SQLITE_OMIT_PRAGMA 889 cmd ::= PRAGMA nm(X) dbnm(Z) EQ nm(Y). {sqlite3Pragma(pParse,&X,&Z,&Y,0);} 890 cmd ::= PRAGMA nm(X) dbnm(Z) EQ ON(Y). {sqlite3Pragma(pParse,&X,&Z,&Y,0);} 891 cmd ::= PRAGMA nm(X) dbnm(Z) EQ plus_num(Y). {sqlite3Pragma(pParse,&X,&Z,&Y,0);} 892 cmd ::= PRAGMA nm(X) dbnm(Z) EQ minus_num(Y). { 893 sqlite3Pragma(pParse,&X,&Z,&Y,1); 894 } 895 cmd ::= PRAGMA nm(X) dbnm(Z) LP nm(Y) RP. {sqlite3Pragma(pParse,&X,&Z,&Y,0);} 896 cmd ::= PRAGMA nm(X) dbnm(Z). {sqlite3Pragma(pParse,&X,&Z,0,0);} 897 %endif // SQLITE_OMIT_PRAGMA 898 plus_num(A) ::= plus_opt number(X). {A = X;} 899 minus_num(A) ::= MINUS number(X). {A = X;} 900 number(A) ::= INTEGER(X). {A = X;} 901 number(A) ::= FLOAT(X). {A = X;} 902 plus_opt ::= PLUS. 903 plus_opt ::= . 904 905 //////////////////////////// The CREATE TRIGGER command ///////////////////// 906 907 %ifndef SQLITE_OMIT_TRIGGER 908 909 cmd ::= CREATE trigger_decl(A) BEGIN trigger_cmd_list(S) END(Z). { 910 Token all; 911 all.z = A.z; 912 all.n = (Z.z - A.z) + Z.n; 913 sqlite3FinishTrigger(pParse, S, &all); 914 } 915 916 trigger_decl(A) ::= temp(T) TRIGGER nm(B) dbnm(Z) trigger_time(C) 917 trigger_event(D) 918 ON fullname(E) foreach_clause(F) when_clause(G). { 919 sqlite3BeginTrigger(pParse, &B, &Z, C, D.a, D.b, E, F, G, T); 920 A = (Z.n==0?B:Z); 921 } 922 923 %type trigger_time {int} 924 trigger_time(A) ::= BEFORE. { A = TK_BEFORE; } 925 trigger_time(A) ::= AFTER. { A = TK_AFTER; } 926 trigger_time(A) ::= INSTEAD OF. { A = TK_INSTEAD;} 927 trigger_time(A) ::= . { A = TK_BEFORE; } 928 929 %type trigger_event {struct TrigEvent} 930 %destructor trigger_event {sqlite3IdListDelete($$.b);} 931 trigger_event(A) ::= DELETE(OP). {A.a = @OP; A.b = 0;} 932 trigger_event(A) ::= INSERT(OP). {A.a = @OP; A.b = 0;} 933 trigger_event(A) ::= UPDATE(OP). {A.a = @OP; A.b = 0;} 934 trigger_event(A) ::= UPDATE OF inscollist(X). {A.a = TK_UPDATE; A.b = X;} 935 936 %type foreach_clause {int} 937 foreach_clause(A) ::= . { A = TK_ROW; } 938 foreach_clause(A) ::= FOR EACH ROW. { A = TK_ROW; } 939 foreach_clause(A) ::= FOR EACH STATEMENT. { A = TK_STATEMENT; } 940 941 %type when_clause {Expr*} 942 when_clause(A) ::= . { A = 0; } 943 when_clause(A) ::= WHEN expr(X). { A = X; } 944 945 %type trigger_cmd_list {TriggerStep*} 946 %destructor trigger_cmd_list {sqlite3DeleteTriggerStep($$);} 947 trigger_cmd_list(A) ::= trigger_cmd(X) SEMI trigger_cmd_list(Y). { 948 X->pNext = Y; 949 A = X; 950 } 951 trigger_cmd_list(A) ::= . { A = 0; } 952 953 %type trigger_cmd {TriggerStep*} 954 %destructor trigger_cmd {sqlite3DeleteTriggerStep($$);} 955 // UPDATE 956 trigger_cmd(A) ::= UPDATE orconf(R) nm(X) SET setlist(Y) where_opt(Z). 957 { A = sqlite3TriggerUpdateStep(&X, Y, Z, R); } 958 959 // INSERT 960 trigger_cmd(A) ::= insert_cmd(R) INTO nm(X) inscollist_opt(F) 961 VALUES LP itemlist(Y) RP. 962 {A = sqlite3TriggerInsertStep(&X, F, Y, 0, R);} 963 964 trigger_cmd(A) ::= insert_cmd(R) INTO nm(X) inscollist_opt(F) select(S). 965 {A = sqlite3TriggerInsertStep(&X, F, 0, S, R);} 966 967 // DELETE 968 trigger_cmd(A) ::= DELETE FROM nm(X) where_opt(Y). 969 {A = sqlite3TriggerDeleteStep(&X, Y);} 970 971 // SELECT 972 trigger_cmd(A) ::= select(X). {A = sqlite3TriggerSelectStep(X); } 973 974 // The special RAISE expression that may occur in trigger programs 975 expr(A) ::= RAISE(X) LP IGNORE RP(Y). { 976 A = sqlite3Expr(TK_RAISE, 0, 0, 0); 977 A->iColumn = OE_Ignore; 978 sqlite3ExprSpan(A, &X, &Y); 979 } 980 expr(A) ::= RAISE(X) LP raisetype(T) COMMA nm(Z) RP(Y). { 981 A = sqlite3Expr(TK_RAISE, 0, 0, &Z); 982 A->iColumn = T; 983 sqlite3ExprSpan(A, &X, &Y); 984 } 985 %endif // !SQLITE_OMIT_TRIGGER 986 987 %type raisetype {int} 988 raisetype(A) ::= ROLLBACK. {A = OE_Rollback;} 989 raisetype(A) ::= ABORT. {A = OE_Abort;} 990 raisetype(A) ::= FAIL. {A = OE_Fail;} 991 992 993 //////////////////////// DROP TRIGGER statement ////////////////////////////// 994 %ifndef SQLITE_OMIT_TRIGGER 995 cmd ::= DROP TRIGGER fullname(X). { 996 sqlite3DropTrigger(pParse,X); 997 } 998 %endif // !SQLITE_OMIT_TRIGGER 999 1000 //////////////////////// ATTACH DATABASE file AS name ///////////////////////// 1001 cmd ::= ATTACH database_kw_opt ids(F) AS nm(D) key_opt(K). { 1002 sqlite3Attach(pParse, &F, &D, K.type, &K.key); 1003 } 1004 %type key_opt {struct AttachKey} 1005 key_opt(A) ::= . { A.type = 0; } 1006 key_opt(A) ::= KEY ids(X). { A.type=1; A.key = X; } 1007 key_opt(A) ::= KEY BLOB(X). { A.type=2; A.key = X; } 1008 1009 database_kw_opt ::= DATABASE. 1010 database_kw_opt ::= . 1011 1012 //////////////////////// DETACH DATABASE name ///////////////////////////////// 1013 cmd ::= DETACH database_kw_opt nm(D). { 1014 sqlite3Detach(pParse, &D); 1015 } 1016 1017 ////////////////////////// REINDEX collation ////////////////////////////////// 1018 %ifndef SQLITE_OMIT_REINDEX 1019 cmd ::= REINDEX. {sqlite3Reindex(pParse, 0, 0);} 1020 cmd ::= REINDEX nm(X) dbnm(Y). {sqlite3Reindex(pParse, &X, &Y);} 1021 %endif 1022 1023 /////////////////////////////////// ANALYZE /////////////////////////////////// 1024 %ifndef SQLITE_OMIT_ANALYZE 1025 cmd ::= ANALYZE. {sqlite3Analyze(pParse, 0, 0);} 1026 cmd ::= ANALYZE nm(X) dbnm(Y). {sqlite3Analyze(pParse, &X, &Y);} 1027 %endif 1028 1029 //////////////////////// ALTER TABLE table ... //////////////////////////////// 1030 %ifndef SQLITE_OMIT_ALTERTABLE 1031 cmd ::= ALTER TABLE fullname(X) RENAME TO nm(Z). { 1032 sqlite3AlterRenameTable(pParse,X,&Z); 1033 } 1034 cmd ::= ALTER TABLE add_column_fullname ADD kwcolumn_opt column(Y). { 1035 sqlite3AlterFinishAddColumn(pParse, &Y); 1036 } 1037 add_column_fullname ::= fullname(X). { 1038 sqlite3AlterBeginAddColumn(pParse, X); 1039 } 1040 kwcolumn_opt ::= . 1041 kwcolumn_opt ::= COLUMNKW. 1042 %endif 1043