1 /* This file is automatically generated by Lemon from input grammar 2 ** source file "parse.y". */ 3 /* 4 ** 2001-09-15 5 ** 6 ** The author disclaims copyright to this source code. In place of 7 ** a legal notice, here is a blessing: 8 ** 9 ** May you do good and not evil. 10 ** May you find forgiveness for yourself and forgive others. 11 ** May you share freely, never taking more than you give. 12 ** 13 ************************************************************************* 14 ** This file contains SQLite's SQL parser. 15 ** 16 ** The canonical source code to this file ("parse.y") is a Lemon grammar 17 ** file that specifies the input grammar and actions to take while parsing. 18 ** That input file is processed by Lemon to generate a C-language 19 ** implementation of a parser for the given grammer. You might be reading 20 ** this comment as part of the translated C-code. Edits should be made 21 ** to the original parse.y sources. 22 */ 23 #line 58 "parse.y" 24 25 #include "sqliteInt.h" 26 27 /* 28 ** Disable all error recovery processing in the parser push-down 29 ** automaton. 30 */ 31 #define YYNOERRORRECOVERY 1 32 33 /* 34 ** Make yytestcase() the same as testcase() 35 */ 36 #define yytestcase(X) testcase(X) 37 38 /* 39 ** Indicate that sqlite3ParserFree() will never be called with a null 40 ** pointer. 41 */ 42 #define YYPARSEFREENEVERNULL 1 43 44 /* 45 ** In the amalgamation, the parse.c file generated by lemon and the 46 ** tokenize.c file are concatenated. In that case, sqlite3RunParser() 47 ** has access to the the size of the yyParser object and so the parser 48 ** engine can be allocated from stack. In that case, only the 49 ** sqlite3ParserInit() and sqlite3ParserFinalize() routines are invoked 50 ** and the sqlite3ParserAlloc() and sqlite3ParserFree() routines can be 51 ** omitted. 52 */ 53 #ifdef SQLITE_AMALGAMATION 54 # define sqlite3Parser_ENGINEALWAYSONSTACK 1 55 #endif 56 57 /* 58 ** Alternative datatype for the argument to the malloc() routine passed 59 ** into sqlite3ParserAlloc(). The default is size_t. 60 */ 61 #define YYMALLOCARGTYPE u64 62 63 /* 64 ** An instance of the following structure describes the event of a 65 ** TRIGGER. "a" is the event type, one of TK_UPDATE, TK_INSERT, 66 ** TK_DELETE, or TK_INSTEAD. If the event is of the form 67 ** 68 ** UPDATE ON (a,b,c) 69 ** 70 ** Then the "b" IdList records the list "a,b,c". 71 */ 72 struct TrigEvent { int a; IdList * b; }; 73 74 struct FrameBound { int eType; Expr *pExpr; }; 75 76 /* 77 ** Disable lookaside memory allocation for objects that might be 78 ** shared across database connections. 79 */ 80 static void disableLookaside(Parse *pParse){ 81 sqlite3 *db = pParse->db; 82 pParse->disableLookaside++; 83 DisableLookaside; 84 } 85 86 #if !defined(SQLITE_ENABLE_UPDATE_DELETE_LIMIT) \ 87 && defined(SQLITE_UDL_CAPABLE_PARSER) 88 /* 89 ** Issue an error message if an ORDER BY or LIMIT clause occurs on an 90 ** UPDATE or DELETE statement. 91 */ 92 static void updateDeleteLimitError( 93 Parse *pParse, 94 ExprList *pOrderBy, 95 Expr *pLimit 96 ){ 97 if( pOrderBy ){ 98 sqlite3ErrorMsg(pParse, "syntax error near \"ORDER BY\""); 99 }else{ 100 sqlite3ErrorMsg(pParse, "syntax error near \"LIMIT\""); 101 } 102 sqlite3ExprListDelete(pParse->db, pOrderBy); 103 sqlite3ExprDelete(pParse->db, pLimit); 104 } 105 #endif /* SQLITE_ENABLE_UPDATE_DELETE_LIMIT */ 106 107 #line 502 "parse.y" 108 109 /* 110 ** For a compound SELECT statement, make sure p->pPrior->pNext==p for 111 ** all elements in the list. And make sure list length does not exceed 112 ** SQLITE_LIMIT_COMPOUND_SELECT. 113 */ 114 static void parserDoubleLinkSelect(Parse *pParse, Select *p){ 115 assert( p!=0 ); 116 if( p->pPrior ){ 117 Select *pNext = 0, *pLoop = p; 118 int mxSelect, cnt = 1; 119 while(1){ 120 pLoop->pNext = pNext; 121 pLoop->selFlags |= SF_Compound; 122 pNext = pLoop; 123 pLoop = pLoop->pPrior; 124 if( pLoop==0 ) break; 125 cnt++; 126 if( pLoop->pOrderBy || pLoop->pLimit ){ 127 sqlite3ErrorMsg(pParse,"%s clause should come after %s not before", 128 pLoop->pOrderBy!=0 ? "ORDER BY" : "LIMIT", 129 sqlite3SelectOpName(pNext->op)); 130 break; 131 } 132 } 133 if( (p->selFlags & SF_MultiValue)==0 && 134 (mxSelect = pParse->db->aLimit[SQLITE_LIMIT_COMPOUND_SELECT])>0 && 135 cnt>mxSelect 136 ){ 137 sqlite3ErrorMsg(pParse, "too many terms in compound SELECT"); 138 } 139 } 140 } 141 142 /* Attach a With object describing the WITH clause to a Select 143 ** object describing the query for which the WITH clause is a prefix. 144 */ 145 static Select *attachWithToSelect(Parse *pParse, Select *pSelect, With *pWith){ 146 if( pSelect ){ 147 pSelect->pWith = pWith; 148 parserDoubleLinkSelect(pParse, pSelect); 149 }else{ 150 sqlite3WithDelete(pParse->db, pWith); 151 } 152 return pSelect; 153 } 154 #line 1047 "parse.y" 155 156 157 /* Construct a new Expr object from a single token */ 158 static Expr *tokenExpr(Parse *pParse, int op, Token t){ 159 Expr *p = sqlite3DbMallocRawNN(pParse->db, sizeof(Expr)+t.n+1); 160 if( p ){ 161 /* memset(p, 0, sizeof(Expr)); */ 162 p->op = (u8)op; 163 p->affExpr = 0; 164 p->flags = EP_Leaf; 165 ExprClearVVAProperties(p); 166 /* p->iAgg = -1; // Not required */ 167 p->pLeft = p->pRight = 0; 168 p->pAggInfo = 0; 169 memset(&p->x, 0, sizeof(p->x)); 170 memset(&p->y, 0, sizeof(p->y)); 171 p->op2 = 0; 172 p->iTable = 0; 173 p->iColumn = 0; 174 p->u.zToken = (char*)&p[1]; 175 memcpy(p->u.zToken, t.z, t.n); 176 p->u.zToken[t.n] = 0; 177 p->w.iOfst = (int)(t.z - pParse->zTail); 178 if( sqlite3Isquote(p->u.zToken[0]) ){ 179 sqlite3DequoteExpr(p); 180 } 181 #if SQLITE_MAX_EXPR_DEPTH>0 182 p->nHeight = 1; 183 #endif 184 if( IN_RENAME_OBJECT ){ 185 return (Expr*)sqlite3RenameTokenMap(pParse, (void*)p, &t); 186 } 187 } 188 return p; 189 } 190 191 #line 1216 "parse.y" 192 193 /* A routine to convert a binary TK_IS or TK_ISNOT expression into a 194 ** unary TK_ISNULL or TK_NOTNULL expression. */ 195 static void binaryToUnaryIfNull(Parse *pParse, Expr *pY, Expr *pA, int op){ 196 sqlite3 *db = pParse->db; 197 if( pA && pY && pY->op==TK_NULL && !IN_RENAME_OBJECT ){ 198 pA->op = (u8)op; 199 sqlite3ExprDelete(db, pA->pRight); 200 pA->pRight = 0; 201 } 202 } 203 #line 1437 "parse.y" 204 205 /* Add a single new term to an ExprList that is used to store a 206 ** list of identifiers. Report an error if the ID list contains 207 ** a COLLATE clause or an ASC or DESC keyword, except ignore the 208 ** error while parsing a legacy schema. 209 */ 210 static ExprList *parserAddExprIdListTerm( 211 Parse *pParse, 212 ExprList *pPrior, 213 Token *pIdToken, 214 int hasCollate, 215 int sortOrder 216 ){ 217 ExprList *p = sqlite3ExprListAppend(pParse, pPrior, 0); 218 if( (hasCollate || sortOrder!=SQLITE_SO_UNDEFINED) 219 && pParse->db->init.busy==0 220 ){ 221 sqlite3ErrorMsg(pParse, "syntax error after column name \"%.*s\"", 222 pIdToken->n, pIdToken->z); 223 } 224 sqlite3ExprListSetName(pParse, p, pIdToken, 1); 225 return p; 226 } 227 #line 1916 "parse.y" 228 229 #if TK_SPAN>255 230 # error too many tokens in the grammar 231 #endif 232 #line 258 "parse.sql" 233 /**************** End of %include directives **********************************/ 234 /* These constants specify the various numeric values for terminal symbols. 235 ***************** Begin token definitions *************************************/ 236 #ifndef TK_SEMI 237 #define TK_SEMI 1 238 #define TK_EXPLAIN 2 239 #define TK_QUERY 3 240 #define TK_PLAN 4 241 #define TK_BEGIN 5 242 #define TK_TRANSACTION 6 243 #define TK_DEFERRED 7 244 #define TK_IMMEDIATE 8 245 #define TK_EXCLUSIVE 9 246 #define TK_COMMIT 10 247 #define TK_END 11 248 #define TK_ROLLBACK 12 249 #define TK_SAVEPOINT 13 250 #define TK_RELEASE 14 251 #define TK_TO 15 252 #define TK_TABLE 16 253 #define TK_CREATE 17 254 #define TK_IF 18 255 #define TK_NOT 19 256 #define TK_EXISTS 20 257 #define TK_TEMP 21 258 #define TK_LP 22 259 #define TK_RP 23 260 #define TK_AS 24 261 #define TK_COMMA 25 262 #define TK_WITHOUT 26 263 #define TK_ABORT 27 264 #define TK_ACTION 28 265 #define TK_AFTER 29 266 #define TK_ANALYZE 30 267 #define TK_ASC 31 268 #define TK_ATTACH 32 269 #define TK_BEFORE 33 270 #define TK_BY 34 271 #define TK_CASCADE 35 272 #define TK_CAST 36 273 #define TK_CONFLICT 37 274 #define TK_DATABASE 38 275 #define TK_DESC 39 276 #define TK_DETACH 40 277 #define TK_EACH 41 278 #define TK_FAIL 42 279 #define TK_OR 43 280 #define TK_AND 44 281 #define TK_IS 45 282 #define TK_MATCH 46 283 #define TK_LIKE_KW 47 284 #define TK_BETWEEN 48 285 #define TK_IN 49 286 #define TK_ISNULL 50 287 #define TK_NOTNULL 51 288 #define TK_NE 52 289 #define TK_EQ 53 290 #define TK_GT 54 291 #define TK_LE 55 292 #define TK_LT 56 293 #define TK_GE 57 294 #define TK_ESCAPE 58 295 #define TK_ID 59 296 #define TK_COLUMNKW 60 297 #define TK_DO 61 298 #define TK_FOR 62 299 #define TK_IGNORE 63 300 #define TK_INITIALLY 64 301 #define TK_INSTEAD 65 302 #define TK_NO 66 303 #define TK_KEY 67 304 #define TK_OF 68 305 #define TK_OFFSET 69 306 #define TK_PRAGMA 70 307 #define TK_RAISE 71 308 #define TK_RECURSIVE 72 309 #define TK_REPLACE 73 310 #define TK_RESTRICT 74 311 #define TK_ROW 75 312 #define TK_ROWS 76 313 #define TK_TRIGGER 77 314 #define TK_VACUUM 78 315 #define TK_VIEW 79 316 #define TK_VIRTUAL 80 317 #define TK_WITH 81 318 #define TK_NULLS 82 319 #define TK_FIRST 83 320 #define TK_LAST 84 321 #define TK_CURRENT 85 322 #define TK_FOLLOWING 86 323 #define TK_PARTITION 87 324 #define TK_PRECEDING 88 325 #define TK_RANGE 89 326 #define TK_UNBOUNDED 90 327 #define TK_EXCLUDE 91 328 #define TK_GROUPS 92 329 #define TK_OTHERS 93 330 #define TK_TIES 94 331 #define TK_GENERATED 95 332 #define TK_ALWAYS 96 333 #define TK_MATERIALIZED 97 334 #define TK_REINDEX 98 335 #define TK_RENAME 99 336 #define TK_CTIME_KW 100 337 #define TK_ANY 101 338 #define TK_BITAND 102 339 #define TK_BITOR 103 340 #define TK_LSHIFT 104 341 #define TK_RSHIFT 105 342 #define TK_PLUS 106 343 #define TK_MINUS 107 344 #define TK_STAR 108 345 #define TK_SLASH 109 346 #define TK_REM 110 347 #define TK_CONCAT 111 348 #define TK_PTR 112 349 #define TK_COLLATE 113 350 #define TK_BITNOT 114 351 #define TK_ON 115 352 #define TK_INDEXED 116 353 #define TK_STRING 117 354 #define TK_JOIN_KW 118 355 #define TK_CONSTRAINT 119 356 #define TK_DEFAULT 120 357 #define TK_NULL 121 358 #define TK_PRIMARY 122 359 #define TK_UNIQUE 123 360 #define TK_CHECK 124 361 #define TK_REFERENCES 125 362 #define TK_AUTOINCR 126 363 #define TK_INSERT 127 364 #define TK_DELETE 128 365 #define TK_UPDATE 129 366 #define TK_SET 130 367 #define TK_DEFERRABLE 131 368 #define TK_FOREIGN 132 369 #define TK_DROP 133 370 #define TK_UNION 134 371 #define TK_ALL 135 372 #define TK_EXCEPT 136 373 #define TK_INTERSECT 137 374 #define TK_SELECT 138 375 #define TK_VALUES 139 376 #define TK_DISTINCT 140 377 #define TK_DOT 141 378 #define TK_FROM 142 379 #define TK_JOIN 143 380 #define TK_USING 144 381 #define TK_ORDER 145 382 #define TK_GROUP 146 383 #define TK_HAVING 147 384 #define TK_LIMIT 148 385 #define TK_WHERE 149 386 #define TK_RETURNING 150 387 #define TK_INTO 151 388 #define TK_NOTHING 152 389 #define TK_FLOAT 153 390 #define TK_BLOB 154 391 #define TK_INTEGER 155 392 #define TK_VARIABLE 156 393 #define TK_CASE 157 394 #define TK_WHEN 158 395 #define TK_THEN 159 396 #define TK_ELSE 160 397 #define TK_INDEX 161 398 #define TK_ALTER 162 399 #define TK_ADD 163 400 #define TK_WINDOW 164 401 #define TK_OVER 165 402 #define TK_FILTER 166 403 #define TK_COLUMN 167 404 #define TK_AGG_FUNCTION 168 405 #define TK_AGG_COLUMN 169 406 #define TK_TRUEFALSE 170 407 #define TK_ISNOT 171 408 #define TK_FUNCTION 172 409 #define TK_UMINUS 173 410 #define TK_UPLUS 174 411 #define TK_TRUTH 175 412 #define TK_REGISTER 176 413 #define TK_VECTOR 177 414 #define TK_SELECT_COLUMN 178 415 #define TK_IF_NULL_ROW 179 416 #define TK_ASTERISK 180 417 #define TK_SPAN 181 418 #define TK_ERROR 182 419 #define TK_SPACE 183 420 #define TK_ILLEGAL 184 421 #endif 422 /**************** End token definitions ***************************************/ 423 424 /* The next sections is a series of control #defines. 425 ** various aspects of the generated parser. 426 ** YYCODETYPE is the data type used to store the integer codes 427 ** that represent terminal and non-terminal symbols. 428 ** "unsigned char" is used if there are fewer than 429 ** 256 symbols. Larger types otherwise. 430 ** YYNOCODE is a number of type YYCODETYPE that is not used for 431 ** any terminal or nonterminal symbol. 432 ** YYFALLBACK If defined, this indicates that one or more tokens 433 ** (also known as: "terminal symbols") have fall-back 434 ** values which should be used if the original symbol 435 ** would not parse. This permits keywords to sometimes 436 ** be used as identifiers, for example. 437 ** YYACTIONTYPE is the data type used for "action codes" - numbers 438 ** that indicate what to do in response to the next 439 ** token. 440 ** sqlite3ParserTOKENTYPE is the data type used for minor type for terminal 441 ** symbols. Background: A "minor type" is a semantic 442 ** value associated with a terminal or non-terminal 443 ** symbols. For example, for an "ID" terminal symbol, 444 ** the minor type might be the name of the identifier. 445 ** Each non-terminal can have a different minor type. 446 ** Terminal symbols all have the same minor type, though. 447 ** This macros defines the minor type for terminal 448 ** symbols. 449 ** YYMINORTYPE is the data type used for all minor types. 450 ** This is typically a union of many types, one of 451 ** which is sqlite3ParserTOKENTYPE. The entry in the union 452 ** for terminal symbols is called "yy0". 453 ** YYSTACKDEPTH is the maximum depth of the parser's stack. If 454 ** zero the stack is dynamically sized using realloc() 455 ** sqlite3ParserARG_SDECL A static variable declaration for the %extra_argument 456 ** sqlite3ParserARG_PDECL A parameter declaration for the %extra_argument 457 ** sqlite3ParserARG_PARAM Code to pass %extra_argument as a subroutine parameter 458 ** sqlite3ParserARG_STORE Code to store %extra_argument into yypParser 459 ** sqlite3ParserARG_FETCH Code to extract %extra_argument from yypParser 460 ** sqlite3ParserCTX_* As sqlite3ParserARG_ except for %extra_context 461 ** YYERRORSYMBOL is the code number of the error symbol. If not 462 ** defined, then do no error processing. 463 ** YYNSTATE the combined number of states. 464 ** YYNRULE the number of rules in the grammar 465 ** YYNTOKEN Number of terminal symbols 466 ** YY_MAX_SHIFT Maximum value for shift actions 467 ** YY_MIN_SHIFTREDUCE Minimum value for shift-reduce actions 468 ** YY_MAX_SHIFTREDUCE Maximum value for shift-reduce actions 469 ** YY_ERROR_ACTION The yy_action[] code for syntax error 470 ** YY_ACCEPT_ACTION The yy_action[] code for accept 471 ** YY_NO_ACTION The yy_action[] code for no-op 472 ** YY_MIN_REDUCE Minimum value for reduce actions 473 ** YY_MAX_REDUCE Maximum value for reduce actions 474 */ 475 #ifndef INTERFACE 476 # define INTERFACE 1 477 #endif 478 /************* Begin control #defines *****************************************/ 479 #define YYCODETYPE unsigned short int 480 #define YYNOCODE 319 481 #define YYACTIONTYPE unsigned short int 482 #define YYWILDCARD 101 483 #define sqlite3ParserTOKENTYPE Token 484 typedef union { 485 int yyinit; 486 sqlite3ParserTOKENTYPE yy0; 487 TriggerStep* yy33; 488 Window* yy41; 489 Select* yy47; 490 SrcList* yy131; 491 struct TrigEvent yy180; 492 struct {int value; int mask;} yy231; 493 IdList* yy254; 494 u32 yy285; 495 ExprList* yy322; 496 Cte* yy385; 497 int yy394; 498 Upsert* yy444; 499 u8 yy516; 500 With* yy521; 501 const char* yy522; 502 Expr* yy528; 503 OnOrUsing yy561; 504 struct FrameBound yy595; 505 } YYMINORTYPE; 506 #ifndef YYSTACKDEPTH 507 #define YYSTACKDEPTH 100 508 #endif 509 #define sqlite3ParserARG_SDECL 510 #define sqlite3ParserARG_PDECL 511 #define sqlite3ParserARG_PARAM 512 #define sqlite3ParserARG_FETCH 513 #define sqlite3ParserARG_STORE 514 #define sqlite3ParserCTX_SDECL Parse *pParse; 515 #define sqlite3ParserCTX_PDECL ,Parse *pParse 516 #define sqlite3ParserCTX_PARAM ,pParse 517 #define sqlite3ParserCTX_FETCH Parse *pParse=yypParser->pParse; 518 #define sqlite3ParserCTX_STORE yypParser->pParse=pParse; 519 #define YYFALLBACK 1 520 #define YYNSTATE 576 521 #define YYNRULE 405 522 #define YYNRULE_WITH_ACTION 342 523 #define YYNTOKEN 185 524 #define YY_MAX_SHIFT 575 525 #define YY_MIN_SHIFTREDUCE 835 526 #define YY_MAX_SHIFTREDUCE 1239 527 #define YY_ERROR_ACTION 1240 528 #define YY_ACCEPT_ACTION 1241 529 #define YY_NO_ACTION 1242 530 #define YY_MIN_REDUCE 1243 531 #define YY_MAX_REDUCE 1647 532 /************* End control #defines *******************************************/ 533 #define YY_NLOOKAHEAD ((int)(sizeof(yy_lookahead)/sizeof(yy_lookahead[0]))) 534 535 /* Define the yytestcase() macro to be a no-op if is not already defined 536 ** otherwise. 537 ** 538 ** Applications can choose to define yytestcase() in the %include section 539 ** to a macro that can assist in verifying code coverage. For production 540 ** code the yytestcase() macro should be turned off. But it is useful 541 ** for testing. 542 */ 543 #ifndef yytestcase 544 # define yytestcase(X) 545 #endif 546 547 548 /* Next are the tables used to determine what action to take based on the 549 ** current state and lookahead token. These tables are used to implement 550 ** functions that take a state number and lookahead value and return an 551 ** action integer. 552 ** 553 ** Suppose the action integer is N. Then the action is determined as 554 ** follows 555 ** 556 ** 0 <= N <= YY_MAX_SHIFT Shift N. That is, push the lookahead 557 ** token onto the stack and goto state N. 558 ** 559 ** N between YY_MIN_SHIFTREDUCE Shift to an arbitrary state then 560 ** and YY_MAX_SHIFTREDUCE reduce by rule N-YY_MIN_SHIFTREDUCE. 561 ** 562 ** N == YY_ERROR_ACTION A syntax error has occurred. 563 ** 564 ** N == YY_ACCEPT_ACTION The parser accepts its input. 565 ** 566 ** N == YY_NO_ACTION No such action. Denotes unused 567 ** slots in the yy_action[] table. 568 ** 569 ** N between YY_MIN_REDUCE Reduce by rule N-YY_MIN_REDUCE 570 ** and YY_MAX_REDUCE 571 ** 572 ** The action table is constructed as a single large table named yy_action[]. 573 ** Given state S and lookahead X, the action is computed as either: 574 ** 575 ** (A) N = yy_action[ yy_shift_ofst[S] + X ] 576 ** (B) N = yy_default[S] 577 ** 578 ** The (A) formula is preferred. The B formula is used instead if 579 ** yy_lookahead[yy_shift_ofst[S]+X] is not equal to X. 580 ** 581 ** The formulas above are for computing the action when the lookahead is 582 ** a terminal symbol. If the lookahead is a non-terminal (as occurs after 583 ** a reduce action) then the yy_reduce_ofst[] array is used in place of 584 ** the yy_shift_ofst[] array. 585 ** 586 ** The following are the tables generated in this section: 587 ** 588 ** yy_action[] A single table containing all actions. 589 ** yy_lookahead[] A table containing the lookahead for each entry in 590 ** yy_action. Used to detect hash collisions. 591 ** yy_shift_ofst[] For each state, the offset into yy_action for 592 ** shifting terminals. 593 ** yy_reduce_ofst[] For each state, the offset into yy_action for 594 ** shifting non-terminals after a reduce. 595 ** yy_default[] Default action for each state. 596 ** 597 *********** Begin parsing tables **********************************************/ 598 #define YY_ACTTAB_COUNT (2098) 599 static const YYACTIONTYPE yy_action[] = { 600 /* 0 */ 568, 208, 568, 118, 115, 229, 568, 118, 115, 229, 601 /* 10 */ 568, 1314, 377, 1293, 408, 562, 562, 562, 568, 409, 602 /* 20 */ 378, 1314, 1276, 41, 41, 41, 41, 208, 1526, 71, 603 /* 30 */ 71, 971, 419, 41, 41, 491, 303, 279, 303, 972, 604 /* 40 */ 397, 71, 71, 125, 126, 80, 1217, 1217, 1050, 1053, 605 /* 50 */ 1040, 1040, 123, 123, 124, 124, 124, 124, 476, 409, 606 /* 60 */ 1241, 1, 1, 575, 2, 1245, 550, 118, 115, 229, 607 /* 70 */ 317, 480, 146, 480, 524, 118, 115, 229, 529, 1327, 608 /* 80 */ 417, 523, 142, 125, 126, 80, 1217, 1217, 1050, 1053, 609 /* 90 */ 1040, 1040, 123, 123, 124, 124, 124, 124, 118, 115, 610 /* 100 */ 229, 327, 122, 122, 122, 122, 121, 121, 120, 120, 611 /* 110 */ 120, 119, 116, 444, 284, 284, 284, 284, 442, 442, 612 /* 120 */ 442, 1567, 376, 1569, 1192, 375, 1163, 565, 1163, 565, 613 /* 130 */ 409, 1567, 537, 259, 226, 444, 101, 145, 449, 316, 614 /* 140 */ 559, 240, 122, 122, 122, 122, 121, 121, 120, 120, 615 /* 150 */ 120, 119, 116, 444, 125, 126, 80, 1217, 1217, 1050, 616 /* 160 */ 1053, 1040, 1040, 123, 123, 124, 124, 124, 124, 142, 617 /* 170 */ 294, 1192, 339, 448, 120, 120, 120, 119, 116, 444, 618 /* 180 */ 127, 1192, 1193, 1194, 148, 441, 440, 568, 119, 116, 619 /* 190 */ 444, 124, 124, 124, 124, 117, 122, 122, 122, 122, 620 /* 200 */ 121, 121, 120, 120, 120, 119, 116, 444, 454, 113, 621 /* 210 */ 13, 13, 546, 122, 122, 122, 122, 121, 121, 120, 622 /* 220 */ 120, 120, 119, 116, 444, 422, 316, 559, 1192, 1193, 623 /* 230 */ 1194, 149, 1224, 409, 1224, 124, 124, 124, 124, 122, 624 /* 240 */ 122, 122, 122, 121, 121, 120, 120, 120, 119, 116, 625 /* 250 */ 444, 465, 342, 1037, 1037, 1051, 1054, 125, 126, 80, 626 /* 260 */ 1217, 1217, 1050, 1053, 1040, 1040, 123, 123, 124, 124, 627 /* 270 */ 124, 124, 1279, 522, 222, 1192, 568, 409, 224, 514, 628 /* 280 */ 175, 82, 83, 122, 122, 122, 122, 121, 121, 120, 629 /* 290 */ 120, 120, 119, 116, 444, 1007, 16, 16, 1192, 133, 630 /* 300 */ 133, 125, 126, 80, 1217, 1217, 1050, 1053, 1040, 1040, 631 /* 310 */ 123, 123, 124, 124, 124, 124, 122, 122, 122, 122, 632 /* 320 */ 121, 121, 120, 120, 120, 119, 116, 444, 1041, 546, 633 /* 330 */ 1192, 373, 1192, 1193, 1194, 252, 1434, 399, 504, 501, 634 /* 340 */ 500, 111, 560, 566, 4, 926, 926, 433, 499, 340, 635 /* 350 */ 460, 328, 360, 394, 1237, 1192, 1193, 1194, 563, 568, 636 /* 360 */ 122, 122, 122, 122, 121, 121, 120, 120, 120, 119, 637 /* 370 */ 116, 444, 284, 284, 369, 1580, 1607, 441, 440, 154, 638 /* 380 */ 409, 445, 71, 71, 1286, 565, 1221, 1192, 1193, 1194, 639 /* 390 */ 85, 1223, 271, 557, 543, 515, 1561, 568, 98, 1222, 640 /* 400 */ 6, 1278, 472, 142, 125, 126, 80, 1217, 1217, 1050, 641 /* 410 */ 1053, 1040, 1040, 123, 123, 124, 124, 124, 124, 550, 642 /* 420 */ 13, 13, 1027, 507, 1224, 1192, 1224, 549, 109, 109, 643 /* 430 */ 222, 568, 1238, 175, 568, 427, 110, 197, 445, 570, 644 /* 440 */ 569, 430, 1552, 1017, 325, 551, 1192, 270, 287, 368, 645 /* 450 */ 510, 363, 509, 257, 71, 71, 543, 71, 71, 359, 646 /* 460 */ 316, 559, 1613, 122, 122, 122, 122, 121, 121, 120, 647 /* 470 */ 120, 120, 119, 116, 444, 1017, 1017, 1019, 1020, 27, 648 /* 480 */ 284, 284, 1192, 1193, 1194, 1158, 568, 1612, 409, 901, 649 /* 490 */ 190, 550, 356, 565, 550, 937, 533, 517, 1158, 516, 650 /* 500 */ 413, 1158, 552, 1192, 1193, 1194, 568, 544, 1554, 51, 651 /* 510 */ 51, 214, 125, 126, 80, 1217, 1217, 1050, 1053, 1040, 652 /* 520 */ 1040, 123, 123, 124, 124, 124, 124, 1192, 474, 135, 653 /* 530 */ 135, 409, 284, 284, 1490, 505, 121, 121, 120, 120, 654 /* 540 */ 120, 119, 116, 444, 1007, 565, 518, 217, 541, 1561, 655 /* 550 */ 316, 559, 142, 6, 532, 125, 126, 80, 1217, 1217, 656 /* 560 */ 1050, 1053, 1040, 1040, 123, 123, 124, 124, 124, 124, 657 /* 570 */ 1555, 122, 122, 122, 122, 121, 121, 120, 120, 120, 658 /* 580 */ 119, 116, 444, 485, 1192, 1193, 1194, 482, 281, 1267, 659 /* 590 */ 957, 252, 1192, 373, 504, 501, 500, 1192, 340, 571, 660 /* 600 */ 1192, 571, 409, 292, 499, 957, 876, 191, 480, 316, 661 /* 610 */ 559, 384, 290, 380, 122, 122, 122, 122, 121, 121, 662 /* 620 */ 120, 120, 120, 119, 116, 444, 125, 126, 80, 1217, 663 /* 630 */ 1217, 1050, 1053, 1040, 1040, 123, 123, 124, 124, 124, 664 /* 640 */ 124, 409, 394, 1136, 1192, 869, 100, 284, 284, 1192, 665 /* 650 */ 1193, 1194, 373, 1093, 1192, 1193, 1194, 1192, 1193, 1194, 666 /* 660 */ 565, 455, 32, 373, 233, 125, 126, 80, 1217, 1217, 667 /* 670 */ 1050, 1053, 1040, 1040, 123, 123, 124, 124, 124, 124, 668 /* 680 */ 1433, 959, 568, 228, 958, 122, 122, 122, 122, 121, 669 /* 690 */ 121, 120, 120, 120, 119, 116, 444, 1158, 228, 1192, 670 /* 700 */ 157, 1192, 1193, 1194, 1553, 13, 13, 301, 957, 1232, 671 /* 710 */ 1158, 153, 409, 1158, 373, 1583, 1176, 5, 369, 1580, 672 /* 720 */ 429, 1238, 3, 957, 122, 122, 122, 122, 121, 121, 673 /* 730 */ 120, 120, 120, 119, 116, 444, 125, 126, 80, 1217, 674 /* 740 */ 1217, 1050, 1053, 1040, 1040, 123, 123, 124, 124, 124, 675 /* 750 */ 124, 409, 208, 567, 1192, 1028, 1192, 1193, 1194, 1192, 676 /* 760 */ 388, 852, 155, 1552, 286, 402, 1098, 1098, 488, 568, 677 /* 770 */ 465, 342, 1319, 1319, 1552, 125, 126, 80, 1217, 1217, 678 /* 780 */ 1050, 1053, 1040, 1040, 123, 123, 124, 124, 124, 124, 679 /* 790 */ 129, 568, 13, 13, 374, 122, 122, 122, 122, 121, 680 /* 800 */ 121, 120, 120, 120, 119, 116, 444, 302, 568, 453, 681 /* 810 */ 528, 1192, 1193, 1194, 13, 13, 1192, 1193, 1194, 1297, 682 /* 820 */ 463, 1267, 409, 1317, 1317, 1552, 1012, 453, 452, 200, 683 /* 830 */ 299, 71, 71, 1265, 122, 122, 122, 122, 121, 121, 684 /* 840 */ 120, 120, 120, 119, 116, 444, 125, 126, 80, 1217, 685 /* 850 */ 1217, 1050, 1053, 1040, 1040, 123, 123, 124, 124, 124, 686 /* 860 */ 124, 409, 227, 1073, 1158, 284, 284, 419, 312, 278, 687 /* 870 */ 278, 285, 285, 1419, 406, 405, 382, 1158, 565, 568, 688 /* 880 */ 1158, 1196, 565, 1600, 565, 125, 126, 80, 1217, 1217, 689 /* 890 */ 1050, 1053, 1040, 1040, 123, 123, 124, 124, 124, 124, 690 /* 900 */ 453, 1482, 13, 13, 1536, 122, 122, 122, 122, 121, 691 /* 910 */ 121, 120, 120, 120, 119, 116, 444, 201, 568, 354, 692 /* 920 */ 1586, 575, 2, 1245, 840, 841, 842, 1562, 317, 1212, 693 /* 930 */ 146, 6, 409, 255, 254, 253, 206, 1327, 9, 1196, 694 /* 940 */ 262, 71, 71, 424, 122, 122, 122, 122, 121, 121, 695 /* 950 */ 120, 120, 120, 119, 116, 444, 125, 126, 80, 1217, 696 /* 960 */ 1217, 1050, 1053, 1040, 1040, 123, 123, 124, 124, 124, 697 /* 970 */ 124, 568, 284, 284, 568, 1213, 409, 574, 313, 1245, 698 /* 980 */ 349, 1296, 352, 419, 317, 565, 146, 491, 525, 1643, 699 /* 990 */ 395, 371, 491, 1327, 70, 70, 1295, 71, 71, 240, 700 /* 1000 */ 1325, 104, 80, 1217, 1217, 1050, 1053, 1040, 1040, 123, 701 /* 1010 */ 123, 124, 124, 124, 124, 122, 122, 122, 122, 121, 702 /* 1020 */ 121, 120, 120, 120, 119, 116, 444, 1114, 284, 284, 703 /* 1030 */ 428, 448, 1525, 1213, 439, 284, 284, 1489, 1352, 311, 704 /* 1040 */ 474, 565, 1115, 971, 491, 491, 217, 1263, 565, 1538, 705 /* 1050 */ 568, 972, 207, 568, 1027, 240, 383, 1116, 519, 122, 706 /* 1060 */ 122, 122, 122, 121, 121, 120, 120, 120, 119, 116, 707 /* 1070 */ 444, 1018, 107, 71, 71, 1017, 13, 13, 912, 568, 708 /* 1080 */ 1495, 568, 284, 284, 97, 526, 491, 448, 913, 1326, 709 /* 1090 */ 1322, 545, 409, 284, 284, 565, 151, 209, 1495, 1497, 710 /* 1100 */ 262, 450, 55, 55, 56, 56, 565, 1017, 1017, 1019, 711 /* 1110 */ 443, 332, 409, 527, 12, 295, 125, 126, 80, 1217, 712 /* 1120 */ 1217, 1050, 1053, 1040, 1040, 123, 123, 124, 124, 124, 713 /* 1130 */ 124, 347, 409, 864, 1534, 1213, 125, 126, 80, 1217, 714 /* 1140 */ 1217, 1050, 1053, 1040, 1040, 123, 123, 124, 124, 124, 715 /* 1150 */ 124, 1137, 1641, 474, 1641, 371, 125, 114, 80, 1217, 716 /* 1160 */ 1217, 1050, 1053, 1040, 1040, 123, 123, 124, 124, 124, 717 /* 1170 */ 124, 1495, 329, 474, 331, 122, 122, 122, 122, 121, 718 /* 1180 */ 121, 120, 120, 120, 119, 116, 444, 203, 1419, 568, 719 /* 1190 */ 1294, 864, 464, 1213, 436, 122, 122, 122, 122, 121, 720 /* 1200 */ 121, 120, 120, 120, 119, 116, 444, 553, 1137, 1642, 721 /* 1210 */ 539, 1642, 15, 15, 892, 122, 122, 122, 122, 121, 722 /* 1220 */ 121, 120, 120, 120, 119, 116, 444, 568, 298, 538, 723 /* 1230 */ 1135, 1419, 1559, 1560, 1331, 409, 6, 6, 1169, 1268, 724 /* 1240 */ 415, 320, 284, 284, 1419, 508, 565, 525, 300, 457, 725 /* 1250 */ 43, 43, 568, 893, 12, 565, 330, 478, 425, 407, 726 /* 1260 */ 126, 80, 1217, 1217, 1050, 1053, 1040, 1040, 123, 123, 727 /* 1270 */ 124, 124, 124, 124, 568, 57, 57, 288, 1192, 1419, 728 /* 1280 */ 496, 458, 392, 392, 391, 273, 389, 1135, 1558, 849, 729 /* 1290 */ 1169, 407, 6, 568, 321, 1158, 470, 44, 44, 1557, 730 /* 1300 */ 1114, 426, 234, 6, 323, 256, 540, 256, 1158, 431, 731 /* 1310 */ 568, 1158, 322, 17, 487, 1115, 58, 58, 122, 122, 732 /* 1320 */ 122, 122, 121, 121, 120, 120, 120, 119, 116, 444, 733 /* 1330 */ 1116, 216, 481, 59, 59, 1192, 1193, 1194, 111, 560, 734 /* 1340 */ 324, 4, 236, 456, 526, 568, 237, 456, 568, 437, 735 /* 1350 */ 168, 556, 420, 141, 479, 563, 568, 293, 568, 1095, 736 /* 1360 */ 568, 293, 568, 1095, 531, 568, 872, 8, 60, 60, 737 /* 1370 */ 235, 61, 61, 568, 414, 568, 414, 568, 445, 62, 738 /* 1380 */ 62, 45, 45, 46, 46, 47, 47, 199, 49, 49, 739 /* 1390 */ 557, 568, 359, 568, 100, 486, 50, 50, 63, 63, 740 /* 1400 */ 64, 64, 561, 415, 535, 410, 568, 1027, 568, 534, 741 /* 1410 */ 316, 559, 316, 559, 65, 65, 14, 14, 568, 1027, 742 /* 1420 */ 568, 512, 932, 872, 1018, 109, 109, 931, 1017, 66, 743 /* 1430 */ 66, 131, 131, 110, 451, 445, 570, 569, 416, 177, 744 /* 1440 */ 1017, 132, 132, 67, 67, 568, 467, 568, 932, 471, 745 /* 1450 */ 1364, 283, 226, 931, 315, 1363, 407, 568, 459, 407, 746 /* 1460 */ 1017, 1017, 1019, 239, 407, 86, 213, 1350, 52, 52, 747 /* 1470 */ 68, 68, 1017, 1017, 1019, 1020, 27, 1585, 1180, 447, 748 /* 1480 */ 69, 69, 288, 97, 108, 1541, 106, 392, 392, 391, 749 /* 1490 */ 273, 389, 568, 879, 849, 883, 568, 111, 560, 466, 750 /* 1500 */ 4, 568, 152, 30, 38, 568, 1132, 234, 396, 323, 751 /* 1510 */ 111, 560, 527, 4, 563, 53, 53, 322, 568, 163, 752 /* 1520 */ 163, 568, 337, 468, 164, 164, 333, 563, 76, 76, 753 /* 1530 */ 568, 289, 1514, 568, 31, 1513, 568, 445, 338, 483, 754 /* 1540 */ 100, 54, 54, 344, 72, 72, 296, 236, 1080, 557, 755 /* 1550 */ 445, 879, 1360, 134, 134, 168, 73, 73, 141, 161, 756 /* 1560 */ 161, 1574, 557, 535, 568, 319, 568, 348, 536, 1009, 757 /* 1570 */ 473, 261, 261, 891, 890, 235, 535, 568, 1027, 568, 758 /* 1580 */ 475, 534, 261, 367, 109, 109, 521, 136, 136, 130, 759 /* 1590 */ 130, 1027, 110, 366, 445, 570, 569, 109, 109, 1017, 760 /* 1600 */ 162, 162, 156, 156, 568, 110, 1080, 445, 570, 569, 761 /* 1610 */ 410, 351, 1017, 568, 353, 316, 559, 568, 343, 568, 762 /* 1620 */ 100, 497, 357, 258, 100, 898, 899, 140, 140, 355, 763 /* 1630 */ 1310, 1017, 1017, 1019, 1020, 27, 139, 139, 362, 451, 764 /* 1640 */ 137, 137, 138, 138, 1017, 1017, 1019, 1020, 27, 1180, 765 /* 1650 */ 447, 568, 372, 288, 111, 560, 1021, 4, 392, 392, 766 /* 1660 */ 391, 273, 389, 568, 1141, 849, 568, 1076, 568, 258, 767 /* 1670 */ 492, 563, 568, 211, 75, 75, 555, 962, 234, 261, 768 /* 1680 */ 323, 111, 560, 929, 4, 113, 77, 77, 322, 74, 769 /* 1690 */ 74, 42, 42, 1373, 445, 48, 48, 1418, 563, 974, 770 /* 1700 */ 975, 1092, 1091, 1092, 1091, 862, 557, 150, 930, 1346, 771 /* 1710 */ 113, 1358, 554, 1424, 1021, 1275, 1266, 1254, 236, 1253, 772 /* 1720 */ 1255, 445, 1593, 1343, 308, 276, 168, 309, 11, 141, 773 /* 1730 */ 393, 310, 232, 557, 1405, 1027, 335, 291, 1400, 219, 774 /* 1740 */ 336, 109, 109, 936, 297, 1410, 235, 341, 477, 110, 775 /* 1750 */ 502, 445, 570, 569, 1393, 1409, 1017, 400, 1293, 365, 776 /* 1760 */ 223, 1486, 1027, 1485, 1355, 1356, 1354, 1353, 109, 109, 777 /* 1770 */ 204, 1596, 1232, 558, 265, 218, 110, 205, 445, 570, 778 /* 1780 */ 569, 410, 387, 1017, 1533, 179, 316, 559, 1017, 1017, 779 /* 1790 */ 1019, 1020, 27, 230, 1531, 1229, 79, 560, 85, 4, 780 /* 1800 */ 418, 215, 548, 81, 84, 188, 1406, 173, 181, 461, 781 /* 1810 */ 451, 35, 462, 563, 183, 1017, 1017, 1019, 1020, 27, 782 /* 1820 */ 184, 1491, 185, 186, 495, 242, 98, 398, 1412, 36, 783 /* 1830 */ 1411, 484, 91, 469, 401, 1414, 445, 192, 1480, 246, 784 /* 1840 */ 1502, 490, 346, 277, 248, 196, 493, 511, 557, 350, 785 /* 1850 */ 1256, 249, 250, 403, 1313, 1312, 111, 560, 432, 4, 786 /* 1860 */ 1311, 1304, 93, 1611, 883, 1610, 224, 404, 434, 520, 787 /* 1870 */ 263, 435, 1579, 563, 1283, 1282, 364, 1027, 306, 1281, 788 /* 1880 */ 264, 1609, 1565, 109, 109, 370, 1303, 307, 1564, 438, 789 /* 1890 */ 128, 110, 1378, 445, 570, 569, 445, 546, 1017, 10, 790 /* 1900 */ 1466, 105, 381, 1377, 34, 572, 99, 1336, 557, 314, 791 /* 1910 */ 1186, 530, 272, 274, 379, 210, 1335, 547, 385, 386, 792 /* 1920 */ 275, 573, 1251, 1246, 411, 412, 1518, 165, 178, 1519, 793 /* 1930 */ 1017, 1017, 1019, 1020, 27, 1517, 1516, 1027, 78, 147, 794 /* 1940 */ 166, 220, 221, 109, 109, 836, 304, 167, 446, 212, 795 /* 1950 */ 318, 110, 231, 445, 570, 569, 144, 1090, 1017, 1088, 796 /* 1960 */ 326, 180, 169, 1212, 182, 334, 238, 915, 241, 1104, 797 /* 1970 */ 187, 170, 171, 421, 87, 88, 423, 189, 89, 90, 798 /* 1980 */ 172, 1107, 243, 1103, 244, 158, 18, 245, 345, 247, 799 /* 1990 */ 1017, 1017, 1019, 1020, 27, 261, 1096, 193, 1226, 489, 800 /* 2000 */ 194, 37, 366, 851, 494, 251, 195, 506, 92, 19, 801 /* 2010 */ 498, 358, 20, 503, 881, 361, 94, 894, 305, 159, 802 /* 2020 */ 513, 39, 95, 1174, 160, 1056, 966, 1143, 96, 174, 803 /* 2030 */ 1142, 225, 280, 282, 198, 960, 113, 1164, 1160, 260, 804 /* 2040 */ 21, 22, 23, 1162, 1168, 1167, 1148, 24, 33, 25, 805 /* 2050 */ 202, 542, 26, 100, 1071, 102, 1057, 103, 7, 1055, 806 /* 2060 */ 1059, 1113, 1060, 1112, 266, 267, 28, 40, 390, 1022, 807 /* 2070 */ 863, 112, 29, 564, 1182, 1181, 268, 176, 143, 925, 808 /* 2080 */ 1242, 1242, 1242, 1242, 1242, 1242, 1242, 1242, 1242, 1242, 809 /* 2090 */ 1242, 1242, 1242, 1242, 269, 1602, 1242, 1601, 810 }; 811 static const YYCODETYPE yy_lookahead[] = { 812 /* 0 */ 193, 193, 193, 274, 275, 276, 193, 274, 275, 276, 813 /* 10 */ 193, 223, 219, 225, 206, 210, 211, 212, 193, 19, 814 /* 20 */ 219, 233, 216, 216, 217, 216, 217, 193, 295, 216, 815 /* 30 */ 217, 31, 193, 216, 217, 193, 228, 213, 230, 39, 816 /* 40 */ 206, 216, 217, 43, 44, 45, 46, 47, 48, 49, 817 /* 50 */ 50, 51, 52, 53, 54, 55, 56, 57, 193, 19, 818 /* 60 */ 185, 186, 187, 188, 189, 190, 253, 274, 275, 276, 819 /* 70 */ 195, 193, 197, 193, 261, 274, 275, 276, 253, 204, 820 /* 80 */ 238, 204, 81, 43, 44, 45, 46, 47, 48, 49, 821 /* 90 */ 50, 51, 52, 53, 54, 55, 56, 57, 274, 275, 822 /* 100 */ 276, 262, 102, 103, 104, 105, 106, 107, 108, 109, 823 /* 110 */ 110, 111, 112, 113, 239, 240, 239, 240, 210, 211, 824 /* 120 */ 212, 314, 315, 314, 59, 316, 86, 252, 88, 252, 825 /* 130 */ 19, 314, 315, 256, 257, 113, 25, 72, 296, 138, 826 /* 140 */ 139, 266, 102, 103, 104, 105, 106, 107, 108, 109, 827 /* 150 */ 110, 111, 112, 113, 43, 44, 45, 46, 47, 48, 828 /* 160 */ 49, 50, 51, 52, 53, 54, 55, 56, 57, 81, 829 /* 170 */ 292, 59, 292, 298, 108, 109, 110, 111, 112, 113, 830 /* 180 */ 69, 116, 117, 118, 72, 106, 107, 193, 111, 112, 831 /* 190 */ 113, 54, 55, 56, 57, 58, 102, 103, 104, 105, 832 /* 200 */ 106, 107, 108, 109, 110, 111, 112, 113, 120, 25, 833 /* 210 */ 216, 217, 145, 102, 103, 104, 105, 106, 107, 108, 834 /* 220 */ 109, 110, 111, 112, 113, 231, 138, 139, 116, 117, 835 /* 230 */ 118, 164, 153, 19, 155, 54, 55, 56, 57, 102, 836 /* 240 */ 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 837 /* 250 */ 113, 128, 129, 46, 47, 48, 49, 43, 44, 45, 838 /* 260 */ 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 839 /* 270 */ 56, 57, 216, 193, 25, 59, 193, 19, 165, 166, 840 /* 280 */ 193, 67, 24, 102, 103, 104, 105, 106, 107, 108, 841 /* 290 */ 109, 110, 111, 112, 113, 73, 216, 217, 59, 216, 842 /* 300 */ 217, 43, 44, 45, 46, 47, 48, 49, 50, 51, 843 /* 310 */ 52, 53, 54, 55, 56, 57, 102, 103, 104, 105, 844 /* 320 */ 106, 107, 108, 109, 110, 111, 112, 113, 121, 145, 845 /* 330 */ 59, 193, 116, 117, 118, 119, 273, 204, 122, 123, 846 /* 340 */ 124, 19, 20, 134, 22, 136, 137, 19, 132, 127, 847 /* 350 */ 128, 129, 24, 22, 23, 116, 117, 118, 36, 193, 848 /* 360 */ 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 849 /* 370 */ 112, 113, 239, 240, 311, 312, 215, 106, 107, 241, 850 /* 380 */ 19, 59, 216, 217, 223, 252, 115, 116, 117, 118, 851 /* 390 */ 151, 120, 26, 71, 193, 308, 309, 193, 149, 128, 852 /* 400 */ 313, 216, 269, 81, 43, 44, 45, 46, 47, 48, 853 /* 410 */ 49, 50, 51, 52, 53, 54, 55, 56, 57, 253, 854 /* 420 */ 216, 217, 100, 95, 153, 59, 155, 261, 106, 107, 855 /* 430 */ 25, 193, 101, 193, 193, 231, 114, 25, 116, 117, 856 /* 440 */ 118, 113, 304, 121, 193, 204, 59, 119, 120, 121, 857 /* 450 */ 122, 123, 124, 125, 216, 217, 193, 216, 217, 131, 858 /* 460 */ 138, 139, 230, 102, 103, 104, 105, 106, 107, 108, 859 /* 470 */ 109, 110, 111, 112, 113, 153, 154, 155, 156, 157, 860 /* 480 */ 239, 240, 116, 117, 118, 76, 193, 23, 19, 25, 861 /* 490 */ 22, 253, 23, 252, 253, 108, 87, 204, 89, 261, 862 /* 500 */ 198, 92, 261, 116, 117, 118, 193, 306, 307, 216, 863 /* 510 */ 217, 150, 43, 44, 45, 46, 47, 48, 49, 50, 864 /* 520 */ 51, 52, 53, 54, 55, 56, 57, 59, 193, 216, 865 /* 530 */ 217, 19, 239, 240, 283, 23, 106, 107, 108, 109, 866 /* 540 */ 110, 111, 112, 113, 73, 252, 253, 142, 308, 309, 867 /* 550 */ 138, 139, 81, 313, 145, 43, 44, 45, 46, 47, 868 /* 560 */ 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 869 /* 570 */ 307, 102, 103, 104, 105, 106, 107, 108, 109, 110, 870 /* 580 */ 111, 112, 113, 281, 116, 117, 118, 285, 23, 193, 871 /* 590 */ 25, 119, 59, 193, 122, 123, 124, 59, 127, 203, 872 /* 600 */ 59, 205, 19, 268, 132, 25, 23, 22, 193, 138, 873 /* 610 */ 139, 249, 204, 251, 102, 103, 104, 105, 106, 107, 874 /* 620 */ 108, 109, 110, 111, 112, 113, 43, 44, 45, 46, 875 /* 630 */ 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 876 /* 640 */ 57, 19, 22, 23, 59, 23, 25, 239, 240, 116, 877 /* 650 */ 117, 118, 193, 11, 116, 117, 118, 116, 117, 118, 878 /* 660 */ 252, 269, 22, 193, 15, 43, 44, 45, 46, 47, 879 /* 670 */ 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 880 /* 680 */ 273, 143, 193, 118, 143, 102, 103, 104, 105, 106, 881 /* 690 */ 107, 108, 109, 110, 111, 112, 113, 76, 118, 59, 882 /* 700 */ 241, 116, 117, 118, 304, 216, 217, 292, 143, 60, 883 /* 710 */ 89, 241, 19, 92, 193, 193, 23, 22, 311, 312, 884 /* 720 */ 231, 101, 22, 143, 102, 103, 104, 105, 106, 107, 885 /* 730 */ 108, 109, 110, 111, 112, 113, 43, 44, 45, 46, 886 /* 740 */ 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 887 /* 750 */ 57, 19, 193, 193, 59, 23, 116, 117, 118, 59, 888 /* 760 */ 201, 21, 241, 304, 22, 206, 127, 128, 129, 193, 889 /* 770 */ 128, 129, 235, 236, 304, 43, 44, 45, 46, 47, 890 /* 780 */ 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 891 /* 790 */ 22, 193, 216, 217, 193, 102, 103, 104, 105, 106, 892 /* 800 */ 107, 108, 109, 110, 111, 112, 113, 231, 193, 193, 893 /* 810 */ 193, 116, 117, 118, 216, 217, 116, 117, 118, 226, 894 /* 820 */ 80, 193, 19, 235, 236, 304, 23, 211, 212, 231, 895 /* 830 */ 204, 216, 217, 205, 102, 103, 104, 105, 106, 107, 896 /* 840 */ 108, 109, 110, 111, 112, 113, 43, 44, 45, 46, 897 /* 850 */ 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 898 /* 860 */ 57, 19, 193, 123, 76, 239, 240, 193, 253, 239, 899 /* 870 */ 240, 239, 240, 193, 106, 107, 193, 89, 252, 193, 900 /* 880 */ 92, 59, 252, 141, 252, 43, 44, 45, 46, 47, 901 /* 890 */ 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 902 /* 900 */ 284, 161, 216, 217, 193, 102, 103, 104, 105, 106, 903 /* 910 */ 107, 108, 109, 110, 111, 112, 113, 231, 193, 16, 904 /* 920 */ 187, 188, 189, 190, 7, 8, 9, 309, 195, 25, 905 /* 930 */ 197, 313, 19, 127, 128, 129, 262, 204, 22, 117, 906 /* 940 */ 24, 216, 217, 263, 102, 103, 104, 105, 106, 107, 907 /* 950 */ 108, 109, 110, 111, 112, 113, 43, 44, 45, 46, 908 /* 960 */ 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 909 /* 970 */ 57, 193, 239, 240, 193, 59, 19, 188, 253, 190, 910 /* 980 */ 77, 226, 79, 193, 195, 252, 197, 193, 19, 301, 911 /* 990 */ 302, 193, 193, 204, 216, 217, 226, 216, 217, 266, 912 /* 1000 */ 204, 159, 45, 46, 47, 48, 49, 50, 51, 52, 913 /* 1010 */ 53, 54, 55, 56, 57, 102, 103, 104, 105, 106, 914 /* 1020 */ 107, 108, 109, 110, 111, 112, 113, 12, 239, 240, 915 /* 1030 */ 232, 298, 238, 117, 253, 239, 240, 238, 259, 260, 916 /* 1040 */ 193, 252, 27, 31, 193, 193, 142, 204, 252, 193, 917 /* 1050 */ 193, 39, 262, 193, 100, 266, 278, 42, 204, 102, 918 /* 1060 */ 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 919 /* 1070 */ 113, 117, 159, 216, 217, 121, 216, 217, 63, 193, 920 /* 1080 */ 193, 193, 239, 240, 115, 116, 193, 298, 73, 238, 921 /* 1090 */ 238, 231, 19, 239, 240, 252, 22, 24, 211, 212, 922 /* 1100 */ 24, 193, 216, 217, 216, 217, 252, 153, 154, 155, 923 /* 1110 */ 253, 16, 19, 144, 213, 268, 43, 44, 45, 46, 924 /* 1120 */ 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 925 /* 1130 */ 57, 238, 19, 59, 193, 59, 43, 44, 45, 46, 926 /* 1140 */ 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 927 /* 1150 */ 57, 22, 23, 193, 25, 193, 43, 44, 45, 46, 928 /* 1160 */ 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 929 /* 1170 */ 57, 284, 77, 193, 79, 102, 103, 104, 105, 106, 930 /* 1180 */ 107, 108, 109, 110, 111, 112, 113, 286, 193, 193, 931 /* 1190 */ 193, 117, 291, 117, 232, 102, 103, 104, 105, 106, 932 /* 1200 */ 107, 108, 109, 110, 111, 112, 113, 204, 22, 23, 933 /* 1210 */ 66, 25, 216, 217, 35, 102, 103, 104, 105, 106, 934 /* 1220 */ 107, 108, 109, 110, 111, 112, 113, 193, 268, 85, 935 /* 1230 */ 101, 193, 309, 309, 240, 19, 313, 313, 94, 208, 936 /* 1240 */ 209, 193, 239, 240, 193, 66, 252, 19, 268, 244, 937 /* 1250 */ 216, 217, 193, 74, 213, 252, 161, 19, 263, 254, 938 /* 1260 */ 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 939 /* 1270 */ 54, 55, 56, 57, 193, 216, 217, 5, 59, 193, 940 /* 1280 */ 19, 244, 10, 11, 12, 13, 14, 101, 309, 17, 941 /* 1290 */ 146, 254, 313, 193, 193, 76, 115, 216, 217, 309, 942 /* 1300 */ 12, 263, 30, 313, 32, 46, 87, 46, 89, 130, 943 /* 1310 */ 193, 92, 40, 22, 263, 27, 216, 217, 102, 103, 944 /* 1320 */ 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 945 /* 1330 */ 42, 150, 291, 216, 217, 116, 117, 118, 19, 20, 946 /* 1340 */ 193, 22, 70, 260, 116, 193, 24, 264, 193, 263, 947 /* 1350 */ 78, 63, 61, 81, 116, 36, 193, 260, 193, 29, 948 /* 1360 */ 193, 264, 193, 33, 145, 193, 59, 48, 216, 217, 949 /* 1370 */ 98, 216, 217, 193, 115, 193, 115, 193, 59, 216, 950 /* 1380 */ 217, 216, 217, 216, 217, 216, 217, 255, 216, 217, 951 /* 1390 */ 71, 193, 131, 193, 25, 65, 216, 217, 216, 217, 952 /* 1400 */ 216, 217, 208, 209, 85, 133, 193, 100, 193, 90, 953 /* 1410 */ 138, 139, 138, 139, 216, 217, 216, 217, 193, 100, 954 /* 1420 */ 193, 108, 135, 116, 117, 106, 107, 140, 121, 216, 955 /* 1430 */ 217, 216, 217, 114, 162, 116, 117, 118, 299, 300, 956 /* 1440 */ 121, 216, 217, 216, 217, 193, 244, 193, 135, 244, 957 /* 1450 */ 193, 256, 257, 140, 244, 193, 254, 193, 193, 254, 958 /* 1460 */ 153, 154, 155, 141, 254, 149, 150, 258, 216, 217, 959 /* 1470 */ 216, 217, 153, 154, 155, 156, 157, 0, 1, 2, 960 /* 1480 */ 216, 217, 5, 115, 158, 193, 160, 10, 11, 12, 961 /* 1490 */ 13, 14, 193, 59, 17, 126, 193, 19, 20, 129, 962 /* 1500 */ 22, 193, 22, 22, 24, 193, 23, 30, 25, 32, 963 /* 1510 */ 19, 20, 144, 22, 36, 216, 217, 40, 193, 216, 964 /* 1520 */ 217, 193, 152, 129, 216, 217, 193, 36, 216, 217, 965 /* 1530 */ 193, 99, 193, 193, 53, 193, 193, 59, 23, 193, 966 /* 1540 */ 25, 216, 217, 193, 216, 217, 152, 70, 59, 71, 967 /* 1550 */ 59, 117, 193, 216, 217, 78, 216, 217, 81, 216, 968 /* 1560 */ 217, 318, 71, 85, 193, 133, 193, 193, 90, 23, 969 /* 1570 */ 23, 25, 25, 120, 121, 98, 85, 193, 100, 193, 970 /* 1580 */ 23, 90, 25, 121, 106, 107, 19, 216, 217, 216, 971 /* 1590 */ 217, 100, 114, 131, 116, 117, 118, 106, 107, 121, 972 /* 1600 */ 216, 217, 216, 217, 193, 114, 117, 116, 117, 118, 973 /* 1610 */ 133, 193, 121, 193, 193, 138, 139, 193, 23, 193, 974 /* 1620 */ 25, 23, 23, 25, 25, 7, 8, 216, 217, 193, 975 /* 1630 */ 193, 153, 154, 155, 156, 157, 216, 217, 193, 162, 976 /* 1640 */ 216, 217, 216, 217, 153, 154, 155, 156, 157, 1, 977 /* 1650 */ 2, 193, 193, 5, 19, 20, 59, 22, 10, 11, 978 /* 1660 */ 12, 13, 14, 193, 97, 17, 193, 23, 193, 25, 979 /* 1670 */ 288, 36, 193, 242, 216, 217, 236, 23, 30, 25, 980 /* 1680 */ 32, 19, 20, 23, 22, 25, 216, 217, 40, 216, 981 /* 1690 */ 217, 216, 217, 193, 59, 216, 217, 193, 36, 83, 982 /* 1700 */ 84, 153, 153, 155, 155, 23, 71, 25, 23, 193, 983 /* 1710 */ 25, 193, 193, 193, 117, 193, 193, 193, 70, 193, 984 /* 1720 */ 193, 59, 193, 255, 255, 287, 78, 255, 243, 81, 985 /* 1730 */ 191, 255, 297, 71, 271, 100, 293, 245, 267, 214, 986 /* 1740 */ 246, 106, 107, 108, 246, 271, 98, 245, 293, 114, 987 /* 1750 */ 220, 116, 117, 118, 267, 271, 121, 271, 225, 219, 988 /* 1760 */ 229, 219, 100, 219, 259, 259, 259, 259, 106, 107, 989 /* 1770 */ 249, 196, 60, 280, 141, 243, 114, 249, 116, 117, 990 /* 1780 */ 118, 133, 245, 121, 200, 297, 138, 139, 153, 154, 991 /* 1790 */ 155, 156, 157, 297, 200, 38, 19, 20, 151, 22, 992 /* 1800 */ 200, 150, 140, 294, 294, 22, 272, 43, 234, 18, 993 /* 1810 */ 162, 270, 200, 36, 237, 153, 154, 155, 156, 157, 994 /* 1820 */ 237, 283, 237, 237, 18, 199, 149, 246, 272, 270, 995 /* 1830 */ 272, 200, 158, 246, 246, 234, 59, 234, 246, 199, 996 /* 1840 */ 290, 62, 289, 200, 199, 22, 221, 115, 71, 200, 997 /* 1850 */ 200, 199, 199, 221, 218, 218, 19, 20, 64, 22, 998 /* 1860 */ 218, 227, 22, 224, 126, 224, 165, 221, 24, 305, 999 /* 1870 */ 200, 113, 312, 36, 218, 220, 218, 100, 282, 218, 1000 /* 1880 */ 91, 218, 317, 106, 107, 221, 227, 282, 317, 82, 1001 /* 1890 */ 148, 114, 265, 116, 117, 118, 59, 145, 121, 22, 1002 /* 1900 */ 277, 158, 200, 265, 25, 202, 147, 250, 71, 279, 1003 /* 1910 */ 13, 146, 194, 194, 249, 248, 250, 140, 247, 246, 1004 /* 1920 */ 6, 192, 192, 192, 303, 303, 213, 207, 300, 213, 1005 /* 1930 */ 153, 154, 155, 156, 157, 213, 213, 100, 213, 222, 1006 /* 1940 */ 207, 214, 214, 106, 107, 4, 222, 207, 3, 22, 1007 /* 1950 */ 163, 114, 15, 116, 117, 118, 16, 23, 121, 23, 1008 /* 1960 */ 139, 151, 130, 25, 142, 16, 24, 20, 144, 1, 1009 /* 1970 */ 142, 130, 130, 61, 53, 53, 37, 151, 53, 53, 1010 /* 1980 */ 130, 116, 34, 1, 141, 5, 22, 115, 161, 141, 1011 /* 1990 */ 153, 154, 155, 156, 157, 25, 68, 68, 75, 41, 1012 /* 2000 */ 115, 24, 131, 20, 19, 125, 22, 96, 22, 22, 1013 /* 2010 */ 67, 23, 22, 67, 59, 24, 22, 28, 67, 23, 1014 /* 2020 */ 22, 22, 149, 23, 23, 23, 116, 23, 25, 37, 1015 /* 2030 */ 97, 141, 23, 23, 22, 143, 25, 75, 88, 34, 1016 /* 2040 */ 34, 34, 34, 86, 75, 93, 23, 34, 22, 34, 1017 /* 2050 */ 25, 24, 34, 25, 23, 142, 23, 142, 44, 23, 1018 /* 2060 */ 23, 23, 11, 23, 25, 22, 22, 22, 15, 23, 1019 /* 2070 */ 23, 22, 22, 25, 1, 1, 141, 25, 23, 135, 1020 /* 2080 */ 319, 319, 319, 319, 319, 319, 319, 319, 319, 319, 1021 /* 2090 */ 319, 319, 319, 319, 141, 141, 319, 141, 319, 319, 1022 /* 2100 */ 319, 319, 319, 319, 319, 319, 319, 319, 319, 319, 1023 /* 2110 */ 319, 319, 319, 319, 319, 319, 319, 319, 319, 319, 1024 /* 2120 */ 319, 319, 319, 319, 319, 319, 319, 319, 319, 319, 1025 /* 2130 */ 319, 319, 319, 319, 319, 319, 319, 319, 319, 319, 1026 /* 2140 */ 319, 319, 319, 319, 319, 319, 319, 319, 319, 319, 1027 /* 2150 */ 319, 319, 319, 319, 319, 319, 319, 319, 319, 319, 1028 /* 2160 */ 319, 319, 319, 319, 319, 319, 319, 319, 319, 319, 1029 /* 2170 */ 319, 319, 319, 319, 319, 319, 319, 319, 319, 319, 1030 /* 2180 */ 319, 319, 319, 319, 319, 319, 319, 319, 319, 319, 1031 /* 2190 */ 319, 319, 319, 319, 319, 319, 319, 319, 319, 319, 1032 /* 2200 */ 319, 319, 319, 319, 319, 319, 319, 319, 319, 319, 1033 /* 2210 */ 319, 319, 319, 319, 319, 319, 319, 319, 319, 319, 1034 /* 2220 */ 319, 319, 319, 319, 319, 319, 319, 319, 319, 319, 1035 /* 2230 */ 319, 319, 319, 319, 319, 319, 319, 319, 319, 319, 1036 /* 2240 */ 319, 319, 319, 319, 319, 319, 319, 319, 319, 319, 1037 /* 2250 */ 319, 319, 319, 319, 319, 319, 319, 319, 319, 319, 1038 /* 2260 */ 319, 319, 319, 319, 319, 319, 319, 319, 319, 319, 1039 /* 2270 */ 319, 319, 319, 319, 319, 319, 319, 319, 319, 319, 1040 /* 2280 */ 319, 319, 319, 1041 }; 1042 #define YY_SHIFT_COUNT (575) 1043 #define YY_SHIFT_MIN (0) 1044 #define YY_SHIFT_MAX (2074) 1045 static const unsigned short int yy_shift_ofst[] = { 1046 /* 0 */ 1648, 1477, 1272, 322, 322, 1, 1319, 1478, 1491, 1837, 1047 /* 10 */ 1837, 1837, 471, 0, 0, 214, 1093, 1837, 1837, 1837, 1048 /* 20 */ 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1049 /* 30 */ 271, 271, 1219, 1219, 216, 88, 1, 1, 1, 1, 1050 /* 40 */ 1, 40, 111, 258, 361, 469, 512, 583, 622, 693, 1051 /* 50 */ 732, 803, 842, 913, 1073, 1093, 1093, 1093, 1093, 1093, 1052 /* 60 */ 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1093, 1053 /* 70 */ 1093, 1093, 1093, 1113, 1093, 1216, 957, 957, 1635, 1662, 1054 /* 80 */ 1777, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1055 /* 90 */ 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1056 /* 100 */ 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1057 /* 110 */ 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1058 /* 120 */ 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1837, 1059 /* 130 */ 137, 181, 181, 181, 181, 181, 181, 181, 94, 430, 1060 /* 140 */ 66, 65, 112, 366, 533, 533, 740, 1261, 533, 533, 1061 /* 150 */ 79, 79, 533, 412, 412, 412, 77, 412, 123, 113, 1062 /* 160 */ 113, 22, 22, 2098, 2098, 328, 328, 328, 239, 468, 1063 /* 170 */ 468, 468, 468, 1015, 1015, 409, 366, 1129, 1186, 533, 1064 /* 180 */ 533, 533, 533, 533, 533, 533, 533, 533, 533, 533, 1065 /* 190 */ 533, 533, 533, 533, 533, 533, 533, 533, 533, 969, 1066 /* 200 */ 621, 621, 533, 642, 788, 788, 1228, 1228, 822, 822, 1067 /* 210 */ 67, 1274, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 1307, 1068 /* 220 */ 954, 954, 585, 472, 640, 387, 695, 538, 541, 700, 1069 /* 230 */ 533, 533, 533, 533, 533, 533, 533, 533, 533, 533, 1070 /* 240 */ 222, 533, 533, 533, 533, 533, 533, 533, 533, 533, 1071 /* 250 */ 533, 533, 533, 1179, 1179, 1179, 533, 533, 533, 565, 1072 /* 260 */ 533, 533, 533, 916, 1144, 533, 533, 1288, 533, 533, 1073 /* 270 */ 533, 533, 533, 533, 533, 533, 639, 1330, 209, 1076, 1074 /* 280 */ 1076, 1076, 1076, 580, 209, 209, 1313, 768, 917, 649, 1075 /* 290 */ 1181, 1316, 405, 1316, 1238, 249, 1181, 1181, 249, 1181, 1076 /* 300 */ 405, 1238, 1369, 464, 1259, 1012, 1012, 1012, 1368, 1368, 1077 /* 310 */ 1368, 1368, 184, 184, 1326, 904, 1287, 1480, 1712, 1712, 1078 /* 320 */ 1633, 1633, 1757, 1757, 1633, 1647, 1651, 1783, 1764, 1791, 1079 /* 330 */ 1791, 1791, 1791, 1633, 1806, 1677, 1651, 1651, 1677, 1783, 1080 /* 340 */ 1764, 1677, 1764, 1677, 1633, 1806, 1674, 1779, 1633, 1806, 1081 /* 350 */ 1823, 1633, 1806, 1633, 1806, 1823, 1732, 1732, 1732, 1794, 1082 /* 360 */ 1840, 1840, 1823, 1732, 1738, 1732, 1794, 1732, 1732, 1701, 1083 /* 370 */ 1844, 1758, 1758, 1823, 1633, 1789, 1789, 1807, 1807, 1742, 1084 /* 380 */ 1752, 1877, 1633, 1743, 1742, 1759, 1765, 1677, 1879, 1897, 1085 /* 390 */ 1897, 1914, 1914, 1914, 2098, 2098, 2098, 2098, 2098, 2098, 1086 /* 400 */ 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 2098, 207, 1087 /* 410 */ 1095, 331, 620, 903, 806, 1074, 1483, 1432, 1481, 1322, 1088 /* 420 */ 1370, 1394, 1515, 1291, 1546, 1547, 1557, 1595, 1598, 1599, 1089 /* 430 */ 1434, 1453, 1618, 1462, 1567, 1489, 1644, 1654, 1616, 1660, 1090 /* 440 */ 1548, 1549, 1682, 1685, 1597, 742, 1941, 1945, 1927, 1787, 1091 /* 450 */ 1937, 1940, 1934, 1936, 1821, 1810, 1832, 1938, 1938, 1942, 1092 /* 460 */ 1822, 1947, 1824, 1949, 1968, 1828, 1841, 1938, 1842, 1912, 1093 /* 470 */ 1939, 1938, 1826, 1921, 1922, 1925, 1926, 1850, 1865, 1948, 1094 /* 480 */ 1843, 1982, 1980, 1964, 1872, 1827, 1928, 1970, 1929, 1923, 1095 /* 490 */ 1958, 1848, 1885, 1977, 1983, 1985, 1871, 1880, 1984, 1943, 1096 /* 500 */ 1986, 1987, 1988, 1990, 1946, 1955, 1991, 1911, 1989, 1994, 1097 /* 510 */ 1951, 1992, 1996, 1873, 1998, 2000, 2001, 2002, 2003, 2004, 1098 /* 520 */ 1999, 1933, 1890, 2009, 2010, 1910, 2005, 2012, 1892, 2011, 1099 /* 530 */ 2006, 2007, 2008, 2013, 1950, 1962, 1957, 2014, 1969, 1952, 1100 /* 540 */ 2015, 2023, 2026, 2027, 2025, 2028, 2018, 1913, 1915, 2031, 1101 /* 550 */ 2011, 2033, 2036, 2037, 2038, 2039, 2040, 2043, 2051, 2044, 1102 /* 560 */ 2045, 2046, 2047, 2049, 2050, 2048, 1944, 1935, 1953, 1954, 1103 /* 570 */ 1956, 2052, 2055, 2053, 2073, 2074, 1104 }; 1105 #define YY_REDUCE_COUNT (408) 1106 #define YY_REDUCE_MIN (-271) 1107 #define YY_REDUCE_MAX (1740) 1108 static const short yy_reduce_ofst[] = { 1109 /* 0 */ -125, 733, 789, 241, 293, -123, -193, -191, -183, -187, 1110 /* 10 */ 166, 238, 133, -207, -199, -267, -176, -6, 204, 489, 1111 /* 20 */ 576, -175, 598, 686, 615, 725, 860, 778, 781, 857, 1112 /* 30 */ 616, 887, 87, 240, -192, 408, 626, 796, 843, 854, 1113 /* 40 */ 1003, -271, -271, -271, -271, -271, -271, -271, -271, -271, 1114 /* 50 */ -271, -271, -271, -271, -271, -271, -271, -271, -271, -271, 1115 /* 60 */ -271, -271, -271, -271, -271, -271, -271, -271, -271, -271, 1116 /* 70 */ -271, -271, -271, -271, -271, -271, -271, -271, 80, 83, 1117 /* 80 */ 313, 886, 888, 996, 1034, 1059, 1081, 1100, 1117, 1152, 1118 /* 90 */ 1155, 1163, 1165, 1167, 1169, 1172, 1180, 1182, 1184, 1198, 1119 /* 100 */ 1200, 1213, 1215, 1225, 1227, 1252, 1254, 1264, 1299, 1303, 1120 /* 110 */ 1308, 1312, 1325, 1328, 1337, 1340, 1343, 1371, 1373, 1384, 1121 /* 120 */ 1386, 1411, 1420, 1424, 1426, 1458, 1470, 1473, 1475, 1479, 1122 /* 130 */ -271, -271, -271, -271, -271, -271, -271, -271, -271, -271, 1123 /* 140 */ -271, 138, 459, 396, -158, 470, 302, -212, 521, 201, 1124 /* 150 */ -195, -92, 559, 630, 632, 630, -271, 632, 901, 63, 1125 /* 160 */ 407, -271, -271, -271, -271, 161, 161, 161, 251, 335, 1126 /* 170 */ 847, 960, 980, 537, 588, 618, 628, 688, 688, -166, 1127 /* 180 */ -161, 674, 790, 794, 799, 851, 852, -122, 680, -120, 1128 /* 190 */ 995, 1038, 415, 1051, 893, 798, 962, 400, 1086, 779, 1129 /* 200 */ 923, 924, 263, 1041, 979, 990, 1083, 1097, 1031, 1194, 1130 /* 210 */ 362, 994, 1139, 1005, 1037, 1202, 1205, 1195, 1210, -194, 1131 /* 220 */ 56, 185, -135, 232, 522, 560, 601, 617, 669, 683, 1132 /* 230 */ 711, 856, 908, 941, 1048, 1101, 1147, 1257, 1262, 1265, 1133 /* 240 */ 392, 1292, 1333, 1339, 1342, 1346, 1350, 1359, 1374, 1418, 1134 /* 250 */ 1421, 1436, 1437, 593, 755, 770, 997, 1445, 1459, 1209, 1135 /* 260 */ 1500, 1504, 1516, 1132, 1243, 1518, 1519, 1440, 1520, 560, 1136 /* 270 */ 1522, 1523, 1524, 1526, 1527, 1529, 1382, 1438, 1431, 1468, 1137 /* 280 */ 1469, 1472, 1476, 1209, 1431, 1431, 1485, 1525, 1539, 1435, 1138 /* 290 */ 1463, 1471, 1492, 1487, 1443, 1494, 1474, 1484, 1498, 1486, 1139 /* 300 */ 1502, 1455, 1530, 1531, 1533, 1540, 1542, 1544, 1505, 1506, 1140 /* 310 */ 1507, 1508, 1521, 1528, 1493, 1537, 1532, 1575, 1488, 1496, 1141 /* 320 */ 1584, 1594, 1509, 1510, 1600, 1538, 1534, 1541, 1574, 1577, 1142 /* 330 */ 1583, 1585, 1586, 1612, 1626, 1581, 1556, 1558, 1587, 1559, 1143 /* 340 */ 1601, 1588, 1603, 1592, 1631, 1640, 1550, 1553, 1643, 1645, 1144 /* 350 */ 1625, 1649, 1652, 1650, 1653, 1632, 1636, 1637, 1642, 1634, 1145 /* 360 */ 1639, 1641, 1646, 1656, 1655, 1658, 1659, 1661, 1663, 1560, 1146 /* 370 */ 1564, 1596, 1605, 1664, 1670, 1565, 1571, 1627, 1638, 1657, 1147 /* 380 */ 1665, 1623, 1702, 1630, 1666, 1667, 1671, 1673, 1703, 1718, 1148 /* 390 */ 1719, 1729, 1730, 1731, 1621, 1622, 1628, 1720, 1713, 1716, 1149 /* 400 */ 1722, 1723, 1733, 1717, 1724, 1727, 1728, 1725, 1740, 1150 }; 1151 static const YYACTIONTYPE yy_default[] = { 1152 /* 0 */ 1647, 1647, 1647, 1475, 1240, 1351, 1240, 1240, 1240, 1475, 1153 /* 10 */ 1475, 1475, 1240, 1381, 1381, 1528, 1273, 1240, 1240, 1240, 1154 /* 20 */ 1240, 1240, 1240, 1240, 1240, 1240, 1240, 1474, 1240, 1240, 1155 /* 30 */ 1240, 1240, 1563, 1563, 1240, 1240, 1240, 1240, 1240, 1240, 1156 /* 40 */ 1240, 1240, 1390, 1240, 1397, 1240, 1240, 1240, 1240, 1240, 1157 /* 50 */ 1476, 1477, 1240, 1240, 1240, 1527, 1529, 1492, 1404, 1403, 1158 /* 60 */ 1402, 1401, 1510, 1369, 1395, 1388, 1392, 1470, 1471, 1469, 1159 /* 70 */ 1473, 1477, 1476, 1240, 1391, 1438, 1454, 1437, 1240, 1240, 1160 /* 80 */ 1240, 1240, 1240, 1240, 1240, 1240, 1240, 1240, 1240, 1240, 1161 /* 90 */ 1240, 1240, 1240, 1240, 1240, 1240, 1240, 1240, 1240, 1240, 1162 /* 100 */ 1240, 1240, 1240, 1240, 1240, 1240, 1240, 1240, 1240, 1240, 1163 /* 110 */ 1240, 1240, 1240, 1240, 1240, 1240, 1240, 1240, 1240, 1240, 1164 /* 120 */ 1240, 1240, 1240, 1240, 1240, 1240, 1240, 1240, 1240, 1240, 1165 /* 130 */ 1446, 1453, 1452, 1451, 1460, 1450, 1447, 1440, 1439, 1441, 1166 /* 140 */ 1442, 1240, 1240, 1264, 1240, 1240, 1261, 1315, 1240, 1240, 1167 /* 150 */ 1240, 1240, 1240, 1547, 1546, 1240, 1443, 1240, 1273, 1432, 1168 /* 160 */ 1431, 1457, 1444, 1456, 1455, 1535, 1599, 1598, 1493, 1240, 1169 /* 170 */ 1240, 1240, 1240, 1240, 1240, 1563, 1240, 1240, 1240, 1240, 1170 /* 180 */ 1240, 1240, 1240, 1240, 1240, 1240, 1240, 1240, 1240, 1240, 1171 /* 190 */ 1240, 1240, 1240, 1240, 1240, 1240, 1240, 1240, 1240, 1371, 1172 /* 200 */ 1563, 1563, 1240, 1273, 1563, 1563, 1372, 1372, 1269, 1269, 1173 /* 210 */ 1375, 1240, 1542, 1342, 1342, 1342, 1342, 1351, 1342, 1240, 1174 /* 220 */ 1240, 1240, 1240, 1240, 1240, 1240, 1240, 1240, 1240, 1240, 1175 /* 230 */ 1240, 1240, 1240, 1240, 1532, 1530, 1240, 1240, 1240, 1240, 1176 /* 240 */ 1240, 1240, 1240, 1240, 1240, 1240, 1240, 1240, 1240, 1240, 1177 /* 250 */ 1240, 1240, 1240, 1240, 1240, 1240, 1240, 1240, 1240, 1240, 1178 /* 260 */ 1240, 1240, 1240, 1347, 1240, 1240, 1240, 1240, 1240, 1240, 1179 /* 270 */ 1240, 1240, 1240, 1240, 1240, 1592, 1240, 1505, 1329, 1347, 1180 /* 280 */ 1347, 1347, 1347, 1349, 1330, 1328, 1341, 1274, 1247, 1639, 1181 /* 290 */ 1407, 1396, 1348, 1396, 1636, 1394, 1407, 1407, 1394, 1407, 1182 /* 300 */ 1348, 1636, 1290, 1615, 1285, 1381, 1381, 1381, 1371, 1371, 1183 /* 310 */ 1371, 1371, 1375, 1375, 1472, 1348, 1341, 1240, 1639, 1639, 1184 /* 320 */ 1357, 1357, 1638, 1638, 1357, 1493, 1623, 1416, 1318, 1324, 1185 /* 330 */ 1324, 1324, 1324, 1357, 1258, 1394, 1623, 1623, 1394, 1416, 1186 /* 340 */ 1318, 1394, 1318, 1394, 1357, 1258, 1509, 1633, 1357, 1258, 1187 /* 350 */ 1483, 1357, 1258, 1357, 1258, 1483, 1316, 1316, 1316, 1305, 1188 /* 360 */ 1240, 1240, 1483, 1316, 1290, 1316, 1305, 1316, 1316, 1581, 1189 /* 370 */ 1240, 1487, 1487, 1483, 1357, 1573, 1573, 1384, 1384, 1389, 1190 /* 380 */ 1375, 1478, 1357, 1240, 1389, 1387, 1385, 1394, 1308, 1595, 1191 /* 390 */ 1595, 1591, 1591, 1591, 1644, 1644, 1542, 1608, 1273, 1273, 1192 /* 400 */ 1273, 1273, 1608, 1292, 1292, 1274, 1274, 1273, 1608, 1240, 1193 /* 410 */ 1240, 1240, 1240, 1240, 1240, 1603, 1240, 1537, 1494, 1361, 1194 /* 420 */ 1240, 1240, 1240, 1240, 1240, 1240, 1240, 1240, 1240, 1240, 1195 /* 430 */ 1240, 1240, 1240, 1240, 1548, 1240, 1240, 1240, 1240, 1240, 1196 /* 440 */ 1240, 1240, 1240, 1240, 1240, 1421, 1240, 1243, 1539, 1240, 1197 /* 450 */ 1240, 1240, 1240, 1240, 1240, 1240, 1240, 1398, 1399, 1362, 1198 /* 460 */ 1240, 1240, 1240, 1240, 1240, 1240, 1240, 1413, 1240, 1240, 1199 /* 470 */ 1240, 1408, 1240, 1240, 1240, 1240, 1240, 1240, 1240, 1240, 1200 /* 480 */ 1635, 1240, 1240, 1240, 1240, 1240, 1240, 1508, 1507, 1240, 1201 /* 490 */ 1240, 1359, 1240, 1240, 1240, 1240, 1240, 1240, 1240, 1240, 1202 /* 500 */ 1240, 1240, 1240, 1240, 1240, 1288, 1240, 1240, 1240, 1240, 1203 /* 510 */ 1240, 1240, 1240, 1240, 1240, 1240, 1240, 1240, 1240, 1240, 1204 /* 520 */ 1240, 1240, 1240, 1240, 1240, 1240, 1240, 1240, 1240, 1386, 1205 /* 530 */ 1240, 1240, 1240, 1240, 1240, 1240, 1240, 1240, 1240, 1240, 1206 /* 540 */ 1240, 1240, 1240, 1240, 1578, 1376, 1240, 1240, 1240, 1240, 1207 /* 550 */ 1626, 1240, 1240, 1240, 1240, 1240, 1240, 1240, 1240, 1240, 1208 /* 560 */ 1240, 1240, 1240, 1240, 1240, 1619, 1332, 1423, 1240, 1422, 1209 /* 570 */ 1426, 1262, 1240, 1252, 1240, 1240, 1210 }; 1211 /********** End of lemon-generated parsing tables *****************************/ 1212 1213 /* The next table maps tokens (terminal symbols) into fallback tokens. 1214 ** If a construct like the following: 1215 ** 1216 ** %fallback ID X Y Z. 1217 ** 1218 ** appears in the grammar, then ID becomes a fallback token for X, Y, 1219 ** and Z. Whenever one of the tokens X, Y, or Z is input to the parser 1220 ** but it does not parse, the type of the token is changed to ID and 1221 ** the parse is retried before an error is thrown. 1222 ** 1223 ** This feature can be used, for example, to cause some keywords in a language 1224 ** to revert to identifiers if they keyword does not apply in the context where 1225 ** it appears. 1226 */ 1227 #ifdef YYFALLBACK 1228 static const YYCODETYPE yyFallback[] = { 1229 0, /* $ => nothing */ 1230 0, /* SEMI => nothing */ 1231 59, /* EXPLAIN => ID */ 1232 59, /* QUERY => ID */ 1233 59, /* PLAN => ID */ 1234 59, /* BEGIN => ID */ 1235 0, /* TRANSACTION => nothing */ 1236 59, /* DEFERRED => ID */ 1237 59, /* IMMEDIATE => ID */ 1238 59, /* EXCLUSIVE => ID */ 1239 0, /* COMMIT => nothing */ 1240 59, /* END => ID */ 1241 59, /* ROLLBACK => ID */ 1242 59, /* SAVEPOINT => ID */ 1243 59, /* RELEASE => ID */ 1244 0, /* TO => nothing */ 1245 0, /* TABLE => nothing */ 1246 0, /* CREATE => nothing */ 1247 59, /* IF => ID */ 1248 0, /* NOT => nothing */ 1249 0, /* EXISTS => nothing */ 1250 59, /* TEMP => ID */ 1251 0, /* LP => nothing */ 1252 0, /* RP => nothing */ 1253 0, /* AS => nothing */ 1254 0, /* COMMA => nothing */ 1255 59, /* WITHOUT => ID */ 1256 59, /* ABORT => ID */ 1257 59, /* ACTION => ID */ 1258 59, /* AFTER => ID */ 1259 59, /* ANALYZE => ID */ 1260 59, /* ASC => ID */ 1261 59, /* ATTACH => ID */ 1262 59, /* BEFORE => ID */ 1263 59, /* BY => ID */ 1264 59, /* CASCADE => ID */ 1265 59, /* CAST => ID */ 1266 59, /* CONFLICT => ID */ 1267 59, /* DATABASE => ID */ 1268 59, /* DESC => ID */ 1269 59, /* DETACH => ID */ 1270 59, /* EACH => ID */ 1271 59, /* FAIL => ID */ 1272 0, /* OR => nothing */ 1273 0, /* AND => nothing */ 1274 0, /* IS => nothing */ 1275 59, /* MATCH => ID */ 1276 59, /* LIKE_KW => ID */ 1277 0, /* BETWEEN => nothing */ 1278 0, /* IN => nothing */ 1279 0, /* ISNULL => nothing */ 1280 0, /* NOTNULL => nothing */ 1281 0, /* NE => nothing */ 1282 0, /* EQ => nothing */ 1283 0, /* GT => nothing */ 1284 0, /* LE => nothing */ 1285 0, /* LT => nothing */ 1286 0, /* GE => nothing */ 1287 0, /* ESCAPE => nothing */ 1288 0, /* ID => nothing */ 1289 59, /* COLUMNKW => ID */ 1290 59, /* DO => ID */ 1291 59, /* FOR => ID */ 1292 59, /* IGNORE => ID */ 1293 59, /* INITIALLY => ID */ 1294 59, /* INSTEAD => ID */ 1295 59, /* NO => ID */ 1296 59, /* KEY => ID */ 1297 59, /* OF => ID */ 1298 59, /* OFFSET => ID */ 1299 59, /* PRAGMA => ID */ 1300 59, /* RAISE => ID */ 1301 59, /* RECURSIVE => ID */ 1302 59, /* REPLACE => ID */ 1303 59, /* RESTRICT => ID */ 1304 59, /* ROW => ID */ 1305 59, /* ROWS => ID */ 1306 59, /* TRIGGER => ID */ 1307 59, /* VACUUM => ID */ 1308 59, /* VIEW => ID */ 1309 59, /* VIRTUAL => ID */ 1310 59, /* WITH => ID */ 1311 59, /* NULLS => ID */ 1312 59, /* FIRST => ID */ 1313 59, /* LAST => ID */ 1314 59, /* CURRENT => ID */ 1315 59, /* FOLLOWING => ID */ 1316 59, /* PARTITION => ID */ 1317 59, /* PRECEDING => ID */ 1318 59, /* RANGE => ID */ 1319 59, /* UNBOUNDED => ID */ 1320 59, /* EXCLUDE => ID */ 1321 59, /* GROUPS => ID */ 1322 59, /* OTHERS => ID */ 1323 59, /* TIES => ID */ 1324 59, /* GENERATED => ID */ 1325 59, /* ALWAYS => ID */ 1326 59, /* MATERIALIZED => ID */ 1327 59, /* REINDEX => ID */ 1328 59, /* RENAME => ID */ 1329 59, /* CTIME_KW => ID */ 1330 0, /* ANY => nothing */ 1331 0, /* BITAND => nothing */ 1332 0, /* BITOR => nothing */ 1333 0, /* LSHIFT => nothing */ 1334 0, /* RSHIFT => nothing */ 1335 0, /* PLUS => nothing */ 1336 0, /* MINUS => nothing */ 1337 0, /* STAR => nothing */ 1338 0, /* SLASH => nothing */ 1339 0, /* REM => nothing */ 1340 0, /* CONCAT => nothing */ 1341 0, /* PTR => nothing */ 1342 0, /* COLLATE => nothing */ 1343 0, /* BITNOT => nothing */ 1344 0, /* ON => nothing */ 1345 0, /* INDEXED => nothing */ 1346 0, /* STRING => nothing */ 1347 0, /* JOIN_KW => nothing */ 1348 0, /* CONSTRAINT => nothing */ 1349 0, /* DEFAULT => nothing */ 1350 0, /* NULL => nothing */ 1351 0, /* PRIMARY => nothing */ 1352 0, /* UNIQUE => nothing */ 1353 0, /* CHECK => nothing */ 1354 0, /* REFERENCES => nothing */ 1355 0, /* AUTOINCR => nothing */ 1356 0, /* INSERT => nothing */ 1357 0, /* DELETE => nothing */ 1358 0, /* UPDATE => nothing */ 1359 0, /* SET => nothing */ 1360 0, /* DEFERRABLE => nothing */ 1361 0, /* FOREIGN => nothing */ 1362 0, /* DROP => nothing */ 1363 0, /* UNION => nothing */ 1364 0, /* ALL => nothing */ 1365 0, /* EXCEPT => nothing */ 1366 0, /* INTERSECT => nothing */ 1367 0, /* SELECT => nothing */ 1368 0, /* VALUES => nothing */ 1369 0, /* DISTINCT => nothing */ 1370 0, /* DOT => nothing */ 1371 0, /* FROM => nothing */ 1372 0, /* JOIN => nothing */ 1373 0, /* USING => nothing */ 1374 0, /* ORDER => nothing */ 1375 0, /* GROUP => nothing */ 1376 0, /* HAVING => nothing */ 1377 0, /* LIMIT => nothing */ 1378 0, /* WHERE => nothing */ 1379 0, /* RETURNING => nothing */ 1380 0, /* INTO => nothing */ 1381 0, /* NOTHING => nothing */ 1382 0, /* FLOAT => nothing */ 1383 0, /* BLOB => nothing */ 1384 0, /* INTEGER => nothing */ 1385 0, /* VARIABLE => nothing */ 1386 0, /* CASE => nothing */ 1387 0, /* WHEN => nothing */ 1388 0, /* THEN => nothing */ 1389 0, /* ELSE => nothing */ 1390 0, /* INDEX => nothing */ 1391 0, /* ALTER => nothing */ 1392 0, /* ADD => nothing */ 1393 0, /* WINDOW => nothing */ 1394 0, /* OVER => nothing */ 1395 0, /* FILTER => nothing */ 1396 0, /* COLUMN => nothing */ 1397 0, /* AGG_FUNCTION => nothing */ 1398 0, /* AGG_COLUMN => nothing */ 1399 0, /* TRUEFALSE => nothing */ 1400 0, /* ISNOT => nothing */ 1401 0, /* FUNCTION => nothing */ 1402 0, /* UMINUS => nothing */ 1403 0, /* UPLUS => nothing */ 1404 0, /* TRUTH => nothing */ 1405 0, /* REGISTER => nothing */ 1406 0, /* VECTOR => nothing */ 1407 0, /* SELECT_COLUMN => nothing */ 1408 0, /* IF_NULL_ROW => nothing */ 1409 0, /* ASTERISK => nothing */ 1410 0, /* SPAN => nothing */ 1411 0, /* ERROR => nothing */ 1412 0, /* SPACE => nothing */ 1413 0, /* ILLEGAL => nothing */ 1414 }; 1415 #endif /* YYFALLBACK */ 1416 1417 /* The following structure represents a single element of the 1418 ** parser's stack. Information stored includes: 1419 ** 1420 ** + The state number for the parser at this level of the stack. 1421 ** 1422 ** + The value of the token stored at this level of the stack. 1423 ** (In other words, the "major" token.) 1424 ** 1425 ** + The semantic value stored at this level of the stack. This is 1426 ** the information used by the action routines in the grammar. 1427 ** It is sometimes called the "minor" token. 1428 ** 1429 ** After the "shift" half of a SHIFTREDUCE action, the stateno field 1430 ** actually contains the reduce action for the second half of the 1431 ** SHIFTREDUCE. 1432 */ 1433 struct yyStackEntry { 1434 YYACTIONTYPE stateno; /* The state-number, or reduce action in SHIFTREDUCE */ 1435 YYCODETYPE major; /* The major token value. This is the code 1436 ** number for the token at this stack level */ 1437 YYMINORTYPE minor; /* The user-supplied minor token value. This 1438 ** is the value of the token */ 1439 }; 1440 typedef struct yyStackEntry yyStackEntry; 1441 1442 /* The state of the parser is completely contained in an instance of 1443 ** the following structure */ 1444 struct yyParser { 1445 yyStackEntry *yytos; /* Pointer to top element of the stack */ 1446 #ifdef YYTRACKMAXSTACKDEPTH 1447 int yyhwm; /* High-water mark of the stack */ 1448 #endif 1449 #ifndef YYNOERRORRECOVERY 1450 int yyerrcnt; /* Shifts left before out of the error */ 1451 #endif 1452 sqlite3ParserARG_SDECL /* A place to hold %extra_argument */ 1453 sqlite3ParserCTX_SDECL /* A place to hold %extra_context */ 1454 #if YYSTACKDEPTH<=0 1455 int yystksz; /* Current side of the stack */ 1456 yyStackEntry *yystack; /* The parser's stack */ 1457 yyStackEntry yystk0; /* First stack entry */ 1458 #else 1459 yyStackEntry yystack[YYSTACKDEPTH]; /* The parser's stack */ 1460 yyStackEntry *yystackEnd; /* Last entry in the stack */ 1461 #endif 1462 }; 1463 typedef struct yyParser yyParser; 1464 1465 #include <assert.h> 1466 #ifndef NDEBUG 1467 #include <stdio.h> 1468 static FILE *yyTraceFILE = 0; 1469 static char *yyTracePrompt = 0; 1470 #endif /* NDEBUG */ 1471 1472 #ifndef NDEBUG 1473 /* 1474 ** Turn parser tracing on by giving a stream to which to write the trace 1475 ** and a prompt to preface each trace message. Tracing is turned off 1476 ** by making either argument NULL 1477 ** 1478 ** Inputs: 1479 ** <ul> 1480 ** <li> A FILE* to which trace output should be written. 1481 ** If NULL, then tracing is turned off. 1482 ** <li> A prefix string written at the beginning of every 1483 ** line of trace output. If NULL, then tracing is 1484 ** turned off. 1485 ** </ul> 1486 ** 1487 ** Outputs: 1488 ** None. 1489 */ 1490 void sqlite3ParserTrace(FILE *TraceFILE, char *zTracePrompt){ 1491 yyTraceFILE = TraceFILE; 1492 yyTracePrompt = zTracePrompt; 1493 if( yyTraceFILE==0 ) yyTracePrompt = 0; 1494 else if( yyTracePrompt==0 ) yyTraceFILE = 0; 1495 } 1496 #endif /* NDEBUG */ 1497 1498 #if defined(YYCOVERAGE) || !defined(NDEBUG) 1499 /* For tracing shifts, the names of all terminals and nonterminals 1500 ** are required. The following table supplies these names */ 1501 static const char *const yyTokenName[] = { 1502 /* 0 */ "$", 1503 /* 1 */ "SEMI", 1504 /* 2 */ "EXPLAIN", 1505 /* 3 */ "QUERY", 1506 /* 4 */ "PLAN", 1507 /* 5 */ "BEGIN", 1508 /* 6 */ "TRANSACTION", 1509 /* 7 */ "DEFERRED", 1510 /* 8 */ "IMMEDIATE", 1511 /* 9 */ "EXCLUSIVE", 1512 /* 10 */ "COMMIT", 1513 /* 11 */ "END", 1514 /* 12 */ "ROLLBACK", 1515 /* 13 */ "SAVEPOINT", 1516 /* 14 */ "RELEASE", 1517 /* 15 */ "TO", 1518 /* 16 */ "TABLE", 1519 /* 17 */ "CREATE", 1520 /* 18 */ "IF", 1521 /* 19 */ "NOT", 1522 /* 20 */ "EXISTS", 1523 /* 21 */ "TEMP", 1524 /* 22 */ "LP", 1525 /* 23 */ "RP", 1526 /* 24 */ "AS", 1527 /* 25 */ "COMMA", 1528 /* 26 */ "WITHOUT", 1529 /* 27 */ "ABORT", 1530 /* 28 */ "ACTION", 1531 /* 29 */ "AFTER", 1532 /* 30 */ "ANALYZE", 1533 /* 31 */ "ASC", 1534 /* 32 */ "ATTACH", 1535 /* 33 */ "BEFORE", 1536 /* 34 */ "BY", 1537 /* 35 */ "CASCADE", 1538 /* 36 */ "CAST", 1539 /* 37 */ "CONFLICT", 1540 /* 38 */ "DATABASE", 1541 /* 39 */ "DESC", 1542 /* 40 */ "DETACH", 1543 /* 41 */ "EACH", 1544 /* 42 */ "FAIL", 1545 /* 43 */ "OR", 1546 /* 44 */ "AND", 1547 /* 45 */ "IS", 1548 /* 46 */ "MATCH", 1549 /* 47 */ "LIKE_KW", 1550 /* 48 */ "BETWEEN", 1551 /* 49 */ "IN", 1552 /* 50 */ "ISNULL", 1553 /* 51 */ "NOTNULL", 1554 /* 52 */ "NE", 1555 /* 53 */ "EQ", 1556 /* 54 */ "GT", 1557 /* 55 */ "LE", 1558 /* 56 */ "LT", 1559 /* 57 */ "GE", 1560 /* 58 */ "ESCAPE", 1561 /* 59 */ "ID", 1562 /* 60 */ "COLUMNKW", 1563 /* 61 */ "DO", 1564 /* 62 */ "FOR", 1565 /* 63 */ "IGNORE", 1566 /* 64 */ "INITIALLY", 1567 /* 65 */ "INSTEAD", 1568 /* 66 */ "NO", 1569 /* 67 */ "KEY", 1570 /* 68 */ "OF", 1571 /* 69 */ "OFFSET", 1572 /* 70 */ "PRAGMA", 1573 /* 71 */ "RAISE", 1574 /* 72 */ "RECURSIVE", 1575 /* 73 */ "REPLACE", 1576 /* 74 */ "RESTRICT", 1577 /* 75 */ "ROW", 1578 /* 76 */ "ROWS", 1579 /* 77 */ "TRIGGER", 1580 /* 78 */ "VACUUM", 1581 /* 79 */ "VIEW", 1582 /* 80 */ "VIRTUAL", 1583 /* 81 */ "WITH", 1584 /* 82 */ "NULLS", 1585 /* 83 */ "FIRST", 1586 /* 84 */ "LAST", 1587 /* 85 */ "CURRENT", 1588 /* 86 */ "FOLLOWING", 1589 /* 87 */ "PARTITION", 1590 /* 88 */ "PRECEDING", 1591 /* 89 */ "RANGE", 1592 /* 90 */ "UNBOUNDED", 1593 /* 91 */ "EXCLUDE", 1594 /* 92 */ "GROUPS", 1595 /* 93 */ "OTHERS", 1596 /* 94 */ "TIES", 1597 /* 95 */ "GENERATED", 1598 /* 96 */ "ALWAYS", 1599 /* 97 */ "MATERIALIZED", 1600 /* 98 */ "REINDEX", 1601 /* 99 */ "RENAME", 1602 /* 100 */ "CTIME_KW", 1603 /* 101 */ "ANY", 1604 /* 102 */ "BITAND", 1605 /* 103 */ "BITOR", 1606 /* 104 */ "LSHIFT", 1607 /* 105 */ "RSHIFT", 1608 /* 106 */ "PLUS", 1609 /* 107 */ "MINUS", 1610 /* 108 */ "STAR", 1611 /* 109 */ "SLASH", 1612 /* 110 */ "REM", 1613 /* 111 */ "CONCAT", 1614 /* 112 */ "PTR", 1615 /* 113 */ "COLLATE", 1616 /* 114 */ "BITNOT", 1617 /* 115 */ "ON", 1618 /* 116 */ "INDEXED", 1619 /* 117 */ "STRING", 1620 /* 118 */ "JOIN_KW", 1621 /* 119 */ "CONSTRAINT", 1622 /* 120 */ "DEFAULT", 1623 /* 121 */ "NULL", 1624 /* 122 */ "PRIMARY", 1625 /* 123 */ "UNIQUE", 1626 /* 124 */ "CHECK", 1627 /* 125 */ "REFERENCES", 1628 /* 126 */ "AUTOINCR", 1629 /* 127 */ "INSERT", 1630 /* 128 */ "DELETE", 1631 /* 129 */ "UPDATE", 1632 /* 130 */ "SET", 1633 /* 131 */ "DEFERRABLE", 1634 /* 132 */ "FOREIGN", 1635 /* 133 */ "DROP", 1636 /* 134 */ "UNION", 1637 /* 135 */ "ALL", 1638 /* 136 */ "EXCEPT", 1639 /* 137 */ "INTERSECT", 1640 /* 138 */ "SELECT", 1641 /* 139 */ "VALUES", 1642 /* 140 */ "DISTINCT", 1643 /* 141 */ "DOT", 1644 /* 142 */ "FROM", 1645 /* 143 */ "JOIN", 1646 /* 144 */ "USING", 1647 /* 145 */ "ORDER", 1648 /* 146 */ "GROUP", 1649 /* 147 */ "HAVING", 1650 /* 148 */ "LIMIT", 1651 /* 149 */ "WHERE", 1652 /* 150 */ "RETURNING", 1653 /* 151 */ "INTO", 1654 /* 152 */ "NOTHING", 1655 /* 153 */ "FLOAT", 1656 /* 154 */ "BLOB", 1657 /* 155 */ "INTEGER", 1658 /* 156 */ "VARIABLE", 1659 /* 157 */ "CASE", 1660 /* 158 */ "WHEN", 1661 /* 159 */ "THEN", 1662 /* 160 */ "ELSE", 1663 /* 161 */ "INDEX", 1664 /* 162 */ "ALTER", 1665 /* 163 */ "ADD", 1666 /* 164 */ "WINDOW", 1667 /* 165 */ "OVER", 1668 /* 166 */ "FILTER", 1669 /* 167 */ "COLUMN", 1670 /* 168 */ "AGG_FUNCTION", 1671 /* 169 */ "AGG_COLUMN", 1672 /* 170 */ "TRUEFALSE", 1673 /* 171 */ "ISNOT", 1674 /* 172 */ "FUNCTION", 1675 /* 173 */ "UMINUS", 1676 /* 174 */ "UPLUS", 1677 /* 175 */ "TRUTH", 1678 /* 176 */ "REGISTER", 1679 /* 177 */ "VECTOR", 1680 /* 178 */ "SELECT_COLUMN", 1681 /* 179 */ "IF_NULL_ROW", 1682 /* 180 */ "ASTERISK", 1683 /* 181 */ "SPAN", 1684 /* 182 */ "ERROR", 1685 /* 183 */ "SPACE", 1686 /* 184 */ "ILLEGAL", 1687 /* 185 */ "input", 1688 /* 186 */ "cmdlist", 1689 /* 187 */ "ecmd", 1690 /* 188 */ "cmdx", 1691 /* 189 */ "explain", 1692 /* 190 */ "cmd", 1693 /* 191 */ "transtype", 1694 /* 192 */ "trans_opt", 1695 /* 193 */ "nm", 1696 /* 194 */ "savepoint_opt", 1697 /* 195 */ "create_table", 1698 /* 196 */ "create_table_args", 1699 /* 197 */ "createkw", 1700 /* 198 */ "temp", 1701 /* 199 */ "ifnotexists", 1702 /* 200 */ "dbnm", 1703 /* 201 */ "columnlist", 1704 /* 202 */ "conslist_opt", 1705 /* 203 */ "table_option_set", 1706 /* 204 */ "select", 1707 /* 205 */ "table_option", 1708 /* 206 */ "columnname", 1709 /* 207 */ "carglist", 1710 /* 208 */ "typetoken", 1711 /* 209 */ "typename", 1712 /* 210 */ "signed", 1713 /* 211 */ "plus_num", 1714 /* 212 */ "minus_num", 1715 /* 213 */ "scanpt", 1716 /* 214 */ "scantok", 1717 /* 215 */ "ccons", 1718 /* 216 */ "term", 1719 /* 217 */ "expr", 1720 /* 218 */ "onconf", 1721 /* 219 */ "sortorder", 1722 /* 220 */ "autoinc", 1723 /* 221 */ "eidlist_opt", 1724 /* 222 */ "refargs", 1725 /* 223 */ "defer_subclause", 1726 /* 224 */ "generated", 1727 /* 225 */ "refarg", 1728 /* 226 */ "refact", 1729 /* 227 */ "init_deferred_pred_opt", 1730 /* 228 */ "conslist", 1731 /* 229 */ "tconscomma", 1732 /* 230 */ "tcons", 1733 /* 231 */ "sortlist", 1734 /* 232 */ "eidlist", 1735 /* 233 */ "defer_subclause_opt", 1736 /* 234 */ "orconf", 1737 /* 235 */ "resolvetype", 1738 /* 236 */ "raisetype", 1739 /* 237 */ "ifexists", 1740 /* 238 */ "fullname", 1741 /* 239 */ "selectnowith", 1742 /* 240 */ "oneselect", 1743 /* 241 */ "wqlist", 1744 /* 242 */ "multiselect_op", 1745 /* 243 */ "distinct", 1746 /* 244 */ "selcollist", 1747 /* 245 */ "from", 1748 /* 246 */ "where_opt", 1749 /* 247 */ "groupby_opt", 1750 /* 248 */ "having_opt", 1751 /* 249 */ "orderby_opt", 1752 /* 250 */ "limit_opt", 1753 /* 251 */ "window_clause", 1754 /* 252 */ "values", 1755 /* 253 */ "nexprlist", 1756 /* 254 */ "sclp", 1757 /* 255 */ "as", 1758 /* 256 */ "seltablist", 1759 /* 257 */ "stl_prefix", 1760 /* 258 */ "joinop", 1761 /* 259 */ "on_using", 1762 /* 260 */ "indexed_by", 1763 /* 261 */ "exprlist", 1764 /* 262 */ "xfullname", 1765 /* 263 */ "idlist", 1766 /* 264 */ "indexed_opt", 1767 /* 265 */ "nulls", 1768 /* 266 */ "with", 1769 /* 267 */ "where_opt_ret", 1770 /* 268 */ "setlist", 1771 /* 269 */ "insert_cmd", 1772 /* 270 */ "idlist_opt", 1773 /* 271 */ "upsert", 1774 /* 272 */ "returning", 1775 /* 273 */ "filter_over", 1776 /* 274 */ "likeop", 1777 /* 275 */ "between_op", 1778 /* 276 */ "in_op", 1779 /* 277 */ "paren_exprlist", 1780 /* 278 */ "case_operand", 1781 /* 279 */ "case_exprlist", 1782 /* 280 */ "case_else", 1783 /* 281 */ "uniqueflag", 1784 /* 282 */ "collate", 1785 /* 283 */ "vinto", 1786 /* 284 */ "nmnum", 1787 /* 285 */ "trigger_decl", 1788 /* 286 */ "trigger_cmd_list", 1789 /* 287 */ "trigger_time", 1790 /* 288 */ "trigger_event", 1791 /* 289 */ "foreach_clause", 1792 /* 290 */ "when_clause", 1793 /* 291 */ "trigger_cmd", 1794 /* 292 */ "trnm", 1795 /* 293 */ "tridxby", 1796 /* 294 */ "database_kw_opt", 1797 /* 295 */ "key_opt", 1798 /* 296 */ "add_column_fullname", 1799 /* 297 */ "kwcolumn_opt", 1800 /* 298 */ "create_vtab", 1801 /* 299 */ "vtabarglist", 1802 /* 300 */ "vtabarg", 1803 /* 301 */ "vtabargtoken", 1804 /* 302 */ "lp", 1805 /* 303 */ "anylist", 1806 /* 304 */ "wqitem", 1807 /* 305 */ "wqas", 1808 /* 306 */ "windowdefn_list", 1809 /* 307 */ "windowdefn", 1810 /* 308 */ "window", 1811 /* 309 */ "frame_opt", 1812 /* 310 */ "part_opt", 1813 /* 311 */ "filter_clause", 1814 /* 312 */ "over_clause", 1815 /* 313 */ "range_or_rows", 1816 /* 314 */ "frame_bound", 1817 /* 315 */ "frame_bound_s", 1818 /* 316 */ "frame_bound_e", 1819 /* 317 */ "frame_exclude_opt", 1820 /* 318 */ "frame_exclude", 1821 }; 1822 #endif /* defined(YYCOVERAGE) || !defined(NDEBUG) */ 1823 1824 #ifndef NDEBUG 1825 /* For tracing reduce actions, the names of all rules are required. 1826 */ 1827 static const char *const yyRuleName[] = { 1828 /* 0 */ "explain ::= EXPLAIN", 1829 /* 1 */ "explain ::= EXPLAIN QUERY PLAN", 1830 /* 2 */ "cmdx ::= cmd", 1831 /* 3 */ "cmd ::= BEGIN transtype trans_opt", 1832 /* 4 */ "transtype ::=", 1833 /* 5 */ "transtype ::= DEFERRED", 1834 /* 6 */ "transtype ::= IMMEDIATE", 1835 /* 7 */ "transtype ::= EXCLUSIVE", 1836 /* 8 */ "cmd ::= COMMIT|END trans_opt", 1837 /* 9 */ "cmd ::= ROLLBACK trans_opt", 1838 /* 10 */ "cmd ::= SAVEPOINT nm", 1839 /* 11 */ "cmd ::= RELEASE savepoint_opt nm", 1840 /* 12 */ "cmd ::= ROLLBACK trans_opt TO savepoint_opt nm", 1841 /* 13 */ "create_table ::= createkw temp TABLE ifnotexists nm dbnm", 1842 /* 14 */ "createkw ::= CREATE", 1843 /* 15 */ "ifnotexists ::=", 1844 /* 16 */ "ifnotexists ::= IF NOT EXISTS", 1845 /* 17 */ "temp ::= TEMP", 1846 /* 18 */ "temp ::=", 1847 /* 19 */ "create_table_args ::= LP columnlist conslist_opt RP table_option_set", 1848 /* 20 */ "create_table_args ::= AS select", 1849 /* 21 */ "table_option_set ::=", 1850 /* 22 */ "table_option_set ::= table_option_set COMMA table_option", 1851 /* 23 */ "table_option ::= WITHOUT nm", 1852 /* 24 */ "table_option ::= nm", 1853 /* 25 */ "columnname ::= nm typetoken", 1854 /* 26 */ "typetoken ::=", 1855 /* 27 */ "typetoken ::= typename LP signed RP", 1856 /* 28 */ "typetoken ::= typename LP signed COMMA signed RP", 1857 /* 29 */ "typename ::= typename ID|STRING", 1858 /* 30 */ "scanpt ::=", 1859 /* 31 */ "scantok ::=", 1860 /* 32 */ "ccons ::= CONSTRAINT nm", 1861 /* 33 */ "ccons ::= DEFAULT scantok term", 1862 /* 34 */ "ccons ::= DEFAULT LP expr RP", 1863 /* 35 */ "ccons ::= DEFAULT PLUS scantok term", 1864 /* 36 */ "ccons ::= DEFAULT MINUS scantok term", 1865 /* 37 */ "ccons ::= DEFAULT scantok ID|INDEXED", 1866 /* 38 */ "ccons ::= NOT NULL onconf", 1867 /* 39 */ "ccons ::= PRIMARY KEY sortorder onconf autoinc", 1868 /* 40 */ "ccons ::= UNIQUE onconf", 1869 /* 41 */ "ccons ::= CHECK LP expr RP", 1870 /* 42 */ "ccons ::= REFERENCES nm eidlist_opt refargs", 1871 /* 43 */ "ccons ::= defer_subclause", 1872 /* 44 */ "ccons ::= COLLATE ID|STRING", 1873 /* 45 */ "generated ::= LP expr RP", 1874 /* 46 */ "generated ::= LP expr RP ID", 1875 /* 47 */ "autoinc ::=", 1876 /* 48 */ "autoinc ::= AUTOINCR", 1877 /* 49 */ "refargs ::=", 1878 /* 50 */ "refargs ::= refargs refarg", 1879 /* 51 */ "refarg ::= MATCH nm", 1880 /* 52 */ "refarg ::= ON INSERT refact", 1881 /* 53 */ "refarg ::= ON DELETE refact", 1882 /* 54 */ "refarg ::= ON UPDATE refact", 1883 /* 55 */ "refact ::= SET NULL", 1884 /* 56 */ "refact ::= SET DEFAULT", 1885 /* 57 */ "refact ::= CASCADE", 1886 /* 58 */ "refact ::= RESTRICT", 1887 /* 59 */ "refact ::= NO ACTION", 1888 /* 60 */ "defer_subclause ::= NOT DEFERRABLE init_deferred_pred_opt", 1889 /* 61 */ "defer_subclause ::= DEFERRABLE init_deferred_pred_opt", 1890 /* 62 */ "init_deferred_pred_opt ::=", 1891 /* 63 */ "init_deferred_pred_opt ::= INITIALLY DEFERRED", 1892 /* 64 */ "init_deferred_pred_opt ::= INITIALLY IMMEDIATE", 1893 /* 65 */ "conslist_opt ::=", 1894 /* 66 */ "tconscomma ::= COMMA", 1895 /* 67 */ "tcons ::= CONSTRAINT nm", 1896 /* 68 */ "tcons ::= PRIMARY KEY LP sortlist autoinc RP onconf", 1897 /* 69 */ "tcons ::= UNIQUE LP sortlist RP onconf", 1898 /* 70 */ "tcons ::= CHECK LP expr RP onconf", 1899 /* 71 */ "tcons ::= FOREIGN KEY LP eidlist RP REFERENCES nm eidlist_opt refargs defer_subclause_opt", 1900 /* 72 */ "defer_subclause_opt ::=", 1901 /* 73 */ "onconf ::=", 1902 /* 74 */ "onconf ::= ON CONFLICT resolvetype", 1903 /* 75 */ "orconf ::=", 1904 /* 76 */ "orconf ::= OR resolvetype", 1905 /* 77 */ "resolvetype ::= IGNORE", 1906 /* 78 */ "resolvetype ::= REPLACE", 1907 /* 79 */ "cmd ::= DROP TABLE ifexists fullname", 1908 /* 80 */ "ifexists ::= IF EXISTS", 1909 /* 81 */ "ifexists ::=", 1910 /* 82 */ "cmd ::= createkw temp VIEW ifnotexists nm dbnm eidlist_opt AS select", 1911 /* 83 */ "cmd ::= DROP VIEW ifexists fullname", 1912 /* 84 */ "cmd ::= select", 1913 /* 85 */ "select ::= WITH wqlist selectnowith", 1914 /* 86 */ "select ::= WITH RECURSIVE wqlist selectnowith", 1915 /* 87 */ "select ::= selectnowith", 1916 /* 88 */ "selectnowith ::= selectnowith multiselect_op oneselect", 1917 /* 89 */ "multiselect_op ::= UNION", 1918 /* 90 */ "multiselect_op ::= UNION ALL", 1919 /* 91 */ "multiselect_op ::= EXCEPT|INTERSECT", 1920 /* 92 */ "oneselect ::= SELECT distinct selcollist from where_opt groupby_opt having_opt orderby_opt limit_opt", 1921 /* 93 */ "oneselect ::= SELECT distinct selcollist from where_opt groupby_opt having_opt window_clause orderby_opt limit_opt", 1922 /* 94 */ "values ::= VALUES LP nexprlist RP", 1923 /* 95 */ "values ::= values COMMA LP nexprlist RP", 1924 /* 96 */ "distinct ::= DISTINCT", 1925 /* 97 */ "distinct ::= ALL", 1926 /* 98 */ "distinct ::=", 1927 /* 99 */ "sclp ::=", 1928 /* 100 */ "selcollist ::= sclp scanpt expr scanpt as", 1929 /* 101 */ "selcollist ::= sclp scanpt STAR", 1930 /* 102 */ "selcollist ::= sclp scanpt nm DOT STAR", 1931 /* 103 */ "as ::= AS nm", 1932 /* 104 */ "as ::=", 1933 /* 105 */ "from ::=", 1934 /* 106 */ "from ::= FROM seltablist", 1935 /* 107 */ "stl_prefix ::= seltablist joinop", 1936 /* 108 */ "stl_prefix ::=", 1937 /* 109 */ "seltablist ::= stl_prefix nm dbnm as on_using", 1938 /* 110 */ "seltablist ::= stl_prefix nm dbnm as indexed_by on_using", 1939 /* 111 */ "seltablist ::= stl_prefix nm dbnm LP exprlist RP as on_using", 1940 /* 112 */ "seltablist ::= stl_prefix LP select RP as on_using", 1941 /* 113 */ "seltablist ::= stl_prefix LP seltablist RP as on_using", 1942 /* 114 */ "dbnm ::=", 1943 /* 115 */ "dbnm ::= DOT nm", 1944 /* 116 */ "fullname ::= nm", 1945 /* 117 */ "fullname ::= nm DOT nm", 1946 /* 118 */ "xfullname ::= nm", 1947 /* 119 */ "xfullname ::= nm DOT nm", 1948 /* 120 */ "xfullname ::= nm DOT nm AS nm", 1949 /* 121 */ "xfullname ::= nm AS nm", 1950 /* 122 */ "joinop ::= COMMA|JOIN", 1951 /* 123 */ "joinop ::= JOIN_KW JOIN", 1952 /* 124 */ "joinop ::= JOIN_KW nm JOIN", 1953 /* 125 */ "joinop ::= JOIN_KW nm nm JOIN", 1954 /* 126 */ "on_using ::= ON expr", 1955 /* 127 */ "on_using ::= USING LP idlist RP", 1956 /* 128 */ "on_using ::=", 1957 /* 129 */ "indexed_opt ::=", 1958 /* 130 */ "indexed_by ::= INDEXED BY nm", 1959 /* 131 */ "indexed_by ::= NOT INDEXED", 1960 /* 132 */ "orderby_opt ::=", 1961 /* 133 */ "orderby_opt ::= ORDER BY sortlist", 1962 /* 134 */ "sortlist ::= sortlist COMMA expr sortorder nulls", 1963 /* 135 */ "sortlist ::= expr sortorder nulls", 1964 /* 136 */ "sortorder ::= ASC", 1965 /* 137 */ "sortorder ::= DESC", 1966 /* 138 */ "sortorder ::=", 1967 /* 139 */ "nulls ::= NULLS FIRST", 1968 /* 140 */ "nulls ::= NULLS LAST", 1969 /* 141 */ "nulls ::=", 1970 /* 142 */ "groupby_opt ::=", 1971 /* 143 */ "groupby_opt ::= GROUP BY nexprlist", 1972 /* 144 */ "having_opt ::=", 1973 /* 145 */ "having_opt ::= HAVING expr", 1974 /* 146 */ "limit_opt ::=", 1975 /* 147 */ "limit_opt ::= LIMIT expr", 1976 /* 148 */ "limit_opt ::= LIMIT expr OFFSET expr", 1977 /* 149 */ "limit_opt ::= LIMIT expr COMMA expr", 1978 /* 150 */ "cmd ::= with DELETE FROM xfullname indexed_opt where_opt_ret", 1979 /* 151 */ "where_opt ::=", 1980 /* 152 */ "where_opt ::= WHERE expr", 1981 /* 153 */ "where_opt_ret ::=", 1982 /* 154 */ "where_opt_ret ::= WHERE expr", 1983 /* 155 */ "where_opt_ret ::= RETURNING selcollist", 1984 /* 156 */ "where_opt_ret ::= WHERE expr RETURNING selcollist", 1985 /* 157 */ "cmd ::= with UPDATE orconf xfullname indexed_opt SET setlist from where_opt_ret", 1986 /* 158 */ "setlist ::= setlist COMMA nm EQ expr", 1987 /* 159 */ "setlist ::= setlist COMMA LP idlist RP EQ expr", 1988 /* 160 */ "setlist ::= nm EQ expr", 1989 /* 161 */ "setlist ::= LP idlist RP EQ expr", 1990 /* 162 */ "cmd ::= with insert_cmd INTO xfullname idlist_opt select upsert", 1991 /* 163 */ "cmd ::= with insert_cmd INTO xfullname idlist_opt DEFAULT VALUES returning", 1992 /* 164 */ "upsert ::=", 1993 /* 165 */ "upsert ::= RETURNING selcollist", 1994 /* 166 */ "upsert ::= ON CONFLICT LP sortlist RP where_opt DO UPDATE SET setlist where_opt upsert", 1995 /* 167 */ "upsert ::= ON CONFLICT LP sortlist RP where_opt DO NOTHING upsert", 1996 /* 168 */ "upsert ::= ON CONFLICT DO NOTHING returning", 1997 /* 169 */ "upsert ::= ON CONFLICT DO UPDATE SET setlist where_opt returning", 1998 /* 170 */ "returning ::= RETURNING selcollist", 1999 /* 171 */ "insert_cmd ::= INSERT orconf", 2000 /* 172 */ "insert_cmd ::= REPLACE", 2001 /* 173 */ "idlist_opt ::=", 2002 /* 174 */ "idlist_opt ::= LP idlist RP", 2003 /* 175 */ "idlist ::= idlist COMMA nm", 2004 /* 176 */ "idlist ::= nm", 2005 /* 177 */ "expr ::= LP expr RP", 2006 /* 178 */ "expr ::= ID|INDEXED", 2007 /* 179 */ "expr ::= JOIN_KW", 2008 /* 180 */ "expr ::= nm DOT nm", 2009 /* 181 */ "expr ::= nm DOT nm DOT nm", 2010 /* 182 */ "term ::= NULL|FLOAT|BLOB", 2011 /* 183 */ "term ::= STRING", 2012 /* 184 */ "term ::= INTEGER", 2013 /* 185 */ "expr ::= VARIABLE", 2014 /* 186 */ "expr ::= expr COLLATE ID|STRING", 2015 /* 187 */ "expr ::= CAST LP expr AS typetoken RP", 2016 /* 188 */ "expr ::= ID|INDEXED LP distinct exprlist RP", 2017 /* 189 */ "expr ::= ID|INDEXED LP STAR RP", 2018 /* 190 */ "expr ::= ID|INDEXED LP distinct exprlist RP filter_over", 2019 /* 191 */ "expr ::= ID|INDEXED LP STAR RP filter_over", 2020 /* 192 */ "term ::= CTIME_KW", 2021 /* 193 */ "expr ::= LP nexprlist COMMA expr RP", 2022 /* 194 */ "expr ::= expr AND expr", 2023 /* 195 */ "expr ::= expr OR expr", 2024 /* 196 */ "expr ::= expr LT|GT|GE|LE expr", 2025 /* 197 */ "expr ::= expr EQ|NE expr", 2026 /* 198 */ "expr ::= expr BITAND|BITOR|LSHIFT|RSHIFT expr", 2027 /* 199 */ "expr ::= expr PLUS|MINUS expr", 2028 /* 200 */ "expr ::= expr STAR|SLASH|REM expr", 2029 /* 201 */ "expr ::= expr CONCAT expr", 2030 /* 202 */ "likeop ::= NOT LIKE_KW|MATCH", 2031 /* 203 */ "expr ::= expr likeop expr", 2032 /* 204 */ "expr ::= expr likeop expr ESCAPE expr", 2033 /* 205 */ "expr ::= expr ISNULL|NOTNULL", 2034 /* 206 */ "expr ::= expr NOT NULL", 2035 /* 207 */ "expr ::= expr IS expr", 2036 /* 208 */ "expr ::= expr IS NOT expr", 2037 /* 209 */ "expr ::= expr IS NOT DISTINCT FROM expr", 2038 /* 210 */ "expr ::= expr IS DISTINCT FROM expr", 2039 /* 211 */ "expr ::= NOT expr", 2040 /* 212 */ "expr ::= BITNOT expr", 2041 /* 213 */ "expr ::= PLUS|MINUS expr", 2042 /* 214 */ "expr ::= expr PTR expr", 2043 /* 215 */ "between_op ::= BETWEEN", 2044 /* 216 */ "between_op ::= NOT BETWEEN", 2045 /* 217 */ "expr ::= expr between_op expr AND expr", 2046 /* 218 */ "in_op ::= IN", 2047 /* 219 */ "in_op ::= NOT IN", 2048 /* 220 */ "expr ::= expr in_op LP exprlist RP", 2049 /* 221 */ "expr ::= LP select RP", 2050 /* 222 */ "expr ::= expr in_op LP select RP", 2051 /* 223 */ "expr ::= expr in_op nm dbnm paren_exprlist", 2052 /* 224 */ "expr ::= EXISTS LP select RP", 2053 /* 225 */ "expr ::= CASE case_operand case_exprlist case_else END", 2054 /* 226 */ "case_exprlist ::= case_exprlist WHEN expr THEN expr", 2055 /* 227 */ "case_exprlist ::= WHEN expr THEN expr", 2056 /* 228 */ "case_else ::= ELSE expr", 2057 /* 229 */ "case_else ::=", 2058 /* 230 */ "case_operand ::= expr", 2059 /* 231 */ "case_operand ::=", 2060 /* 232 */ "exprlist ::=", 2061 /* 233 */ "nexprlist ::= nexprlist COMMA expr", 2062 /* 234 */ "nexprlist ::= expr", 2063 /* 235 */ "paren_exprlist ::=", 2064 /* 236 */ "paren_exprlist ::= LP exprlist RP", 2065 /* 237 */ "cmd ::= createkw uniqueflag INDEX ifnotexists nm dbnm ON nm LP sortlist RP where_opt", 2066 /* 238 */ "uniqueflag ::= UNIQUE", 2067 /* 239 */ "uniqueflag ::=", 2068 /* 240 */ "eidlist_opt ::=", 2069 /* 241 */ "eidlist_opt ::= LP eidlist RP", 2070 /* 242 */ "eidlist ::= eidlist COMMA nm collate sortorder", 2071 /* 243 */ "eidlist ::= nm collate sortorder", 2072 /* 244 */ "collate ::=", 2073 /* 245 */ "collate ::= COLLATE ID|STRING", 2074 /* 246 */ "cmd ::= DROP INDEX ifexists fullname", 2075 /* 247 */ "cmd ::= VACUUM vinto", 2076 /* 248 */ "cmd ::= VACUUM nm vinto", 2077 /* 249 */ "vinto ::= INTO expr", 2078 /* 250 */ "vinto ::=", 2079 /* 251 */ "cmd ::= PRAGMA nm dbnm", 2080 /* 252 */ "cmd ::= PRAGMA nm dbnm EQ nmnum", 2081 /* 253 */ "cmd ::= PRAGMA nm dbnm LP nmnum RP", 2082 /* 254 */ "cmd ::= PRAGMA nm dbnm EQ minus_num", 2083 /* 255 */ "cmd ::= PRAGMA nm dbnm LP minus_num RP", 2084 /* 256 */ "plus_num ::= PLUS INTEGER|FLOAT", 2085 /* 257 */ "minus_num ::= MINUS INTEGER|FLOAT", 2086 /* 258 */ "cmd ::= createkw trigger_decl BEGIN trigger_cmd_list END", 2087 /* 259 */ "trigger_decl ::= temp TRIGGER ifnotexists nm dbnm trigger_time trigger_event ON fullname foreach_clause when_clause", 2088 /* 260 */ "trigger_time ::= BEFORE|AFTER", 2089 /* 261 */ "trigger_time ::= INSTEAD OF", 2090 /* 262 */ "trigger_time ::=", 2091 /* 263 */ "trigger_event ::= DELETE|INSERT", 2092 /* 264 */ "trigger_event ::= UPDATE", 2093 /* 265 */ "trigger_event ::= UPDATE OF idlist", 2094 /* 266 */ "when_clause ::=", 2095 /* 267 */ "when_clause ::= WHEN expr", 2096 /* 268 */ "trigger_cmd_list ::= trigger_cmd_list trigger_cmd SEMI", 2097 /* 269 */ "trigger_cmd_list ::= trigger_cmd SEMI", 2098 /* 270 */ "trnm ::= nm DOT nm", 2099 /* 271 */ "tridxby ::= INDEXED BY nm", 2100 /* 272 */ "tridxby ::= NOT INDEXED", 2101 /* 273 */ "trigger_cmd ::= UPDATE orconf trnm tridxby SET setlist from where_opt scanpt", 2102 /* 274 */ "trigger_cmd ::= scanpt insert_cmd INTO trnm idlist_opt select upsert scanpt", 2103 /* 275 */ "trigger_cmd ::= DELETE FROM trnm tridxby where_opt scanpt", 2104 /* 276 */ "trigger_cmd ::= scanpt select scanpt", 2105 /* 277 */ "expr ::= RAISE LP IGNORE RP", 2106 /* 278 */ "expr ::= RAISE LP raisetype COMMA nm RP", 2107 /* 279 */ "raisetype ::= ROLLBACK", 2108 /* 280 */ "raisetype ::= ABORT", 2109 /* 281 */ "raisetype ::= FAIL", 2110 /* 282 */ "cmd ::= DROP TRIGGER ifexists fullname", 2111 /* 283 */ "cmd ::= ATTACH database_kw_opt expr AS expr key_opt", 2112 /* 284 */ "cmd ::= DETACH database_kw_opt expr", 2113 /* 285 */ "key_opt ::=", 2114 /* 286 */ "key_opt ::= KEY expr", 2115 /* 287 */ "cmd ::= REINDEX", 2116 /* 288 */ "cmd ::= REINDEX nm dbnm", 2117 /* 289 */ "cmd ::= ANALYZE", 2118 /* 290 */ "cmd ::= ANALYZE nm dbnm", 2119 /* 291 */ "cmd ::= ALTER TABLE fullname RENAME TO nm", 2120 /* 292 */ "cmd ::= ALTER TABLE add_column_fullname ADD kwcolumn_opt columnname carglist", 2121 /* 293 */ "cmd ::= ALTER TABLE fullname DROP kwcolumn_opt nm", 2122 /* 294 */ "add_column_fullname ::= fullname", 2123 /* 295 */ "cmd ::= ALTER TABLE fullname RENAME kwcolumn_opt nm TO nm", 2124 /* 296 */ "cmd ::= create_vtab", 2125 /* 297 */ "cmd ::= create_vtab LP vtabarglist RP", 2126 /* 298 */ "create_vtab ::= createkw VIRTUAL TABLE ifnotexists nm dbnm USING nm", 2127 /* 299 */ "vtabarg ::=", 2128 /* 300 */ "vtabargtoken ::= ANY", 2129 /* 301 */ "vtabargtoken ::= lp anylist RP", 2130 /* 302 */ "lp ::= LP", 2131 /* 303 */ "with ::= WITH wqlist", 2132 /* 304 */ "with ::= WITH RECURSIVE wqlist", 2133 /* 305 */ "wqas ::= AS", 2134 /* 306 */ "wqas ::= AS MATERIALIZED", 2135 /* 307 */ "wqas ::= AS NOT MATERIALIZED", 2136 /* 308 */ "wqitem ::= nm eidlist_opt wqas LP select RP", 2137 /* 309 */ "wqlist ::= wqitem", 2138 /* 310 */ "wqlist ::= wqlist COMMA wqitem", 2139 /* 311 */ "windowdefn_list ::= windowdefn", 2140 /* 312 */ "windowdefn_list ::= windowdefn_list COMMA windowdefn", 2141 /* 313 */ "windowdefn ::= nm AS LP window RP", 2142 /* 314 */ "window ::= PARTITION BY nexprlist orderby_opt frame_opt", 2143 /* 315 */ "window ::= nm PARTITION BY nexprlist orderby_opt frame_opt", 2144 /* 316 */ "window ::= ORDER BY sortlist frame_opt", 2145 /* 317 */ "window ::= nm ORDER BY sortlist frame_opt", 2146 /* 318 */ "window ::= frame_opt", 2147 /* 319 */ "window ::= nm frame_opt", 2148 /* 320 */ "frame_opt ::=", 2149 /* 321 */ "frame_opt ::= range_or_rows frame_bound_s frame_exclude_opt", 2150 /* 322 */ "frame_opt ::= range_or_rows BETWEEN frame_bound_s AND frame_bound_e frame_exclude_opt", 2151 /* 323 */ "range_or_rows ::= RANGE|ROWS|GROUPS", 2152 /* 324 */ "frame_bound_s ::= frame_bound", 2153 /* 325 */ "frame_bound_s ::= UNBOUNDED PRECEDING", 2154 /* 326 */ "frame_bound_e ::= frame_bound", 2155 /* 327 */ "frame_bound_e ::= UNBOUNDED FOLLOWING", 2156 /* 328 */ "frame_bound ::= expr PRECEDING|FOLLOWING", 2157 /* 329 */ "frame_bound ::= CURRENT ROW", 2158 /* 330 */ "frame_exclude_opt ::=", 2159 /* 331 */ "frame_exclude_opt ::= EXCLUDE frame_exclude", 2160 /* 332 */ "frame_exclude ::= NO OTHERS", 2161 /* 333 */ "frame_exclude ::= CURRENT ROW", 2162 /* 334 */ "frame_exclude ::= GROUP|TIES", 2163 /* 335 */ "window_clause ::= WINDOW windowdefn_list", 2164 /* 336 */ "filter_over ::= filter_clause over_clause", 2165 /* 337 */ "filter_over ::= over_clause", 2166 /* 338 */ "filter_over ::= filter_clause", 2167 /* 339 */ "over_clause ::= OVER LP window RP", 2168 /* 340 */ "over_clause ::= OVER nm", 2169 /* 341 */ "filter_clause ::= FILTER LP WHERE expr RP", 2170 /* 342 */ "input ::= cmdlist", 2171 /* 343 */ "cmdlist ::= cmdlist ecmd", 2172 /* 344 */ "cmdlist ::= ecmd", 2173 /* 345 */ "ecmd ::= SEMI", 2174 /* 346 */ "ecmd ::= cmdx SEMI", 2175 /* 347 */ "ecmd ::= explain cmdx SEMI", 2176 /* 348 */ "trans_opt ::=", 2177 /* 349 */ "trans_opt ::= TRANSACTION", 2178 /* 350 */ "trans_opt ::= TRANSACTION nm", 2179 /* 351 */ "savepoint_opt ::= SAVEPOINT", 2180 /* 352 */ "savepoint_opt ::=", 2181 /* 353 */ "cmd ::= create_table create_table_args", 2182 /* 354 */ "table_option_set ::= table_option", 2183 /* 355 */ "columnlist ::= columnlist COMMA columnname carglist", 2184 /* 356 */ "columnlist ::= columnname carglist", 2185 /* 357 */ "nm ::= ID|INDEXED", 2186 /* 358 */ "nm ::= STRING", 2187 /* 359 */ "nm ::= JOIN_KW", 2188 /* 360 */ "typetoken ::= typename", 2189 /* 361 */ "typename ::= ID|STRING", 2190 /* 362 */ "signed ::= plus_num", 2191 /* 363 */ "signed ::= minus_num", 2192 /* 364 */ "carglist ::= carglist ccons", 2193 /* 365 */ "carglist ::=", 2194 /* 366 */ "ccons ::= NULL onconf", 2195 /* 367 */ "ccons ::= GENERATED ALWAYS AS generated", 2196 /* 368 */ "ccons ::= AS generated", 2197 /* 369 */ "conslist_opt ::= COMMA conslist", 2198 /* 370 */ "conslist ::= conslist tconscomma tcons", 2199 /* 371 */ "conslist ::= tcons", 2200 /* 372 */ "tconscomma ::=", 2201 /* 373 */ "defer_subclause_opt ::= defer_subclause", 2202 /* 374 */ "resolvetype ::= raisetype", 2203 /* 375 */ "selectnowith ::= oneselect", 2204 /* 376 */ "oneselect ::= values", 2205 /* 377 */ "sclp ::= selcollist COMMA", 2206 /* 378 */ "as ::= ID|STRING", 2207 /* 379 */ "indexed_opt ::= indexed_by", 2208 /* 380 */ "returning ::=", 2209 /* 381 */ "expr ::= term", 2210 /* 382 */ "likeop ::= LIKE_KW|MATCH", 2211 /* 383 */ "exprlist ::= nexprlist", 2212 /* 384 */ "nmnum ::= plus_num", 2213 /* 385 */ "nmnum ::= nm", 2214 /* 386 */ "nmnum ::= ON", 2215 /* 387 */ "nmnum ::= DELETE", 2216 /* 388 */ "nmnum ::= DEFAULT", 2217 /* 389 */ "plus_num ::= INTEGER|FLOAT", 2218 /* 390 */ "foreach_clause ::=", 2219 /* 391 */ "foreach_clause ::= FOR EACH ROW", 2220 /* 392 */ "trnm ::= nm", 2221 /* 393 */ "tridxby ::=", 2222 /* 394 */ "database_kw_opt ::= DATABASE", 2223 /* 395 */ "database_kw_opt ::=", 2224 /* 396 */ "kwcolumn_opt ::=", 2225 /* 397 */ "kwcolumn_opt ::= COLUMNKW", 2226 /* 398 */ "vtabarglist ::= vtabarg", 2227 /* 399 */ "vtabarglist ::= vtabarglist COMMA vtabarg", 2228 /* 400 */ "vtabarg ::= vtabarg vtabargtoken", 2229 /* 401 */ "anylist ::=", 2230 /* 402 */ "anylist ::= anylist LP anylist RP", 2231 /* 403 */ "anylist ::= anylist ANY", 2232 /* 404 */ "with ::=", 2233 }; 2234 #endif /* NDEBUG */ 2235 2236 2237 #if YYSTACKDEPTH<=0 2238 /* 2239 ** Try to increase the size of the parser stack. Return the number 2240 ** of errors. Return 0 on success. 2241 */ 2242 static int yyGrowStack(yyParser *p){ 2243 int newSize; 2244 int idx; 2245 yyStackEntry *pNew; 2246 2247 newSize = p->yystksz*2 + 100; 2248 idx = p->yytos ? (int)(p->yytos - p->yystack) : 0; 2249 if( p->yystack==&p->yystk0 ){ 2250 pNew = malloc(newSize*sizeof(pNew[0])); 2251 if( pNew ) pNew[0] = p->yystk0; 2252 }else{ 2253 pNew = realloc(p->yystack, newSize*sizeof(pNew[0])); 2254 } 2255 if( pNew ){ 2256 p->yystack = pNew; 2257 p->yytos = &p->yystack[idx]; 2258 #ifndef NDEBUG 2259 if( yyTraceFILE ){ 2260 fprintf(yyTraceFILE,"%sStack grows from %d to %d entries.\n", 2261 yyTracePrompt, p->yystksz, newSize); 2262 } 2263 #endif 2264 p->yystksz = newSize; 2265 } 2266 return pNew==0; 2267 } 2268 #endif 2269 2270 /* Datatype of the argument to the memory allocated passed as the 2271 ** second argument to sqlite3ParserAlloc() below. This can be changed by 2272 ** putting an appropriate #define in the %include section of the input 2273 ** grammar. 2274 */ 2275 #ifndef YYMALLOCARGTYPE 2276 # define YYMALLOCARGTYPE size_t 2277 #endif 2278 2279 /* Initialize a new parser that has already been allocated. 2280 */ 2281 void sqlite3ParserInit(void *yypRawParser sqlite3ParserCTX_PDECL){ 2282 yyParser *yypParser = (yyParser*)yypRawParser; 2283 sqlite3ParserCTX_STORE 2284 #ifdef YYTRACKMAXSTACKDEPTH 2285 yypParser->yyhwm = 0; 2286 #endif 2287 #if YYSTACKDEPTH<=0 2288 yypParser->yytos = NULL; 2289 yypParser->yystack = NULL; 2290 yypParser->yystksz = 0; 2291 if( yyGrowStack(yypParser) ){ 2292 yypParser->yystack = &yypParser->yystk0; 2293 yypParser->yystksz = 1; 2294 } 2295 #endif 2296 #ifndef YYNOERRORRECOVERY 2297 yypParser->yyerrcnt = -1; 2298 #endif 2299 yypParser->yytos = yypParser->yystack; 2300 yypParser->yystack[0].stateno = 0; 2301 yypParser->yystack[0].major = 0; 2302 #if YYSTACKDEPTH>0 2303 yypParser->yystackEnd = &yypParser->yystack[YYSTACKDEPTH-1]; 2304 #endif 2305 } 2306 2307 #ifndef sqlite3Parser_ENGINEALWAYSONSTACK 2308 /* 2309 ** This function allocates a new parser. 2310 ** The only argument is a pointer to a function which works like 2311 ** malloc. 2312 ** 2313 ** Inputs: 2314 ** A pointer to the function used to allocate memory. 2315 ** 2316 ** Outputs: 2317 ** A pointer to a parser. This pointer is used in subsequent calls 2318 ** to sqlite3Parser and sqlite3ParserFree. 2319 */ 2320 void *sqlite3ParserAlloc(void *(*mallocProc)(YYMALLOCARGTYPE) sqlite3ParserCTX_PDECL){ 2321 yyParser *yypParser; 2322 yypParser = (yyParser*)(*mallocProc)( (YYMALLOCARGTYPE)sizeof(yyParser) ); 2323 if( yypParser ){ 2324 sqlite3ParserCTX_STORE 2325 sqlite3ParserInit(yypParser sqlite3ParserCTX_PARAM); 2326 } 2327 return (void*)yypParser; 2328 } 2329 #endif /* sqlite3Parser_ENGINEALWAYSONSTACK */ 2330 2331 2332 /* The following function deletes the "minor type" or semantic value 2333 ** associated with a symbol. The symbol can be either a terminal 2334 ** or nonterminal. "yymajor" is the symbol code, and "yypminor" is 2335 ** a pointer to the value to be deleted. The code used to do the 2336 ** deletions is derived from the %destructor and/or %token_destructor 2337 ** directives of the input grammar. 2338 */ 2339 static void yy_destructor( 2340 yyParser *yypParser, /* The parser */ 2341 YYCODETYPE yymajor, /* Type code for object to destroy */ 2342 YYMINORTYPE *yypminor /* The object to be destroyed */ 2343 ){ 2344 sqlite3ParserARG_FETCH 2345 sqlite3ParserCTX_FETCH 2346 switch( yymajor ){ 2347 /* Here is inserted the actions which take place when a 2348 ** terminal or non-terminal is destroyed. This can happen 2349 ** when the symbol is popped from the stack during a 2350 ** reduce or during error processing or when a parser is 2351 ** being destroyed before it is finished parsing. 2352 ** 2353 ** Note: during a reduce, the only symbols destroyed are those 2354 ** which appear on the RHS of the rule, but which are *not* used 2355 ** inside the C code. 2356 */ 2357 /********* Begin destructor definitions ***************************************/ 2358 case 204: /* select */ 2359 case 239: /* selectnowith */ 2360 case 240: /* oneselect */ 2361 case 252: /* values */ 2362 { 2363 #line 496 "parse.y" 2364 sqlite3SelectDelete(pParse->db, (yypminor->yy47)); 2365 #line 2390 "parse.sql" 2366 } 2367 break; 2368 case 216: /* term */ 2369 case 217: /* expr */ 2370 case 246: /* where_opt */ 2371 case 248: /* having_opt */ 2372 case 267: /* where_opt_ret */ 2373 case 278: /* case_operand */ 2374 case 280: /* case_else */ 2375 case 283: /* vinto */ 2376 case 290: /* when_clause */ 2377 case 295: /* key_opt */ 2378 case 311: /* filter_clause */ 2379 { 2380 #line 1045 "parse.y" 2381 sqlite3ExprDelete(pParse->db, (yypminor->yy528)); 2382 #line 2407 "parse.sql" 2383 } 2384 break; 2385 case 221: /* eidlist_opt */ 2386 case 231: /* sortlist */ 2387 case 232: /* eidlist */ 2388 case 244: /* selcollist */ 2389 case 247: /* groupby_opt */ 2390 case 249: /* orderby_opt */ 2391 case 253: /* nexprlist */ 2392 case 254: /* sclp */ 2393 case 261: /* exprlist */ 2394 case 268: /* setlist */ 2395 case 277: /* paren_exprlist */ 2396 case 279: /* case_exprlist */ 2397 case 310: /* part_opt */ 2398 { 2399 #line 1435 "parse.y" 2400 sqlite3ExprListDelete(pParse->db, (yypminor->yy322)); 2401 #line 2426 "parse.sql" 2402 } 2403 break; 2404 case 238: /* fullname */ 2405 case 245: /* from */ 2406 case 256: /* seltablist */ 2407 case 257: /* stl_prefix */ 2408 case 262: /* xfullname */ 2409 { 2410 #line 751 "parse.y" 2411 sqlite3SrcListDelete(pParse->db, (yypminor->yy131)); 2412 #line 2437 "parse.sql" 2413 } 2414 break; 2415 case 241: /* wqlist */ 2416 { 2417 #line 1722 "parse.y" 2418 sqlite3WithDelete(pParse->db, (yypminor->yy521)); 2419 #line 2444 "parse.sql" 2420 } 2421 break; 2422 case 251: /* window_clause */ 2423 case 306: /* windowdefn_list */ 2424 { 2425 #line 1851 "parse.y" 2426 sqlite3WindowListDelete(pParse->db, (yypminor->yy41)); 2427 #line 2452 "parse.sql" 2428 } 2429 break; 2430 case 263: /* idlist */ 2431 case 270: /* idlist_opt */ 2432 { 2433 #line 1030 "parse.y" 2434 sqlite3IdListDelete(pParse->db, (yypminor->yy254)); 2435 #line 2460 "parse.sql" 2436 } 2437 break; 2438 case 273: /* filter_over */ 2439 case 307: /* windowdefn */ 2440 case 308: /* window */ 2441 case 309: /* frame_opt */ 2442 case 312: /* over_clause */ 2443 { 2444 #line 1788 "parse.y" 2445 sqlite3WindowDelete(pParse->db, (yypminor->yy41)); 2446 #line 2471 "parse.sql" 2447 } 2448 break; 2449 case 286: /* trigger_cmd_list */ 2450 case 291: /* trigger_cmd */ 2451 { 2452 #line 1550 "parse.y" 2453 sqlite3DeleteTriggerStep(pParse->db, (yypminor->yy33)); 2454 #line 2479 "parse.sql" 2455 } 2456 break; 2457 case 288: /* trigger_event */ 2458 { 2459 #line 1536 "parse.y" 2460 sqlite3IdListDelete(pParse->db, (yypminor->yy180).b); 2461 #line 2486 "parse.sql" 2462 } 2463 break; 2464 case 314: /* frame_bound */ 2465 case 315: /* frame_bound_s */ 2466 case 316: /* frame_bound_e */ 2467 { 2468 #line 1793 "parse.y" 2469 sqlite3ExprDelete(pParse->db, (yypminor->yy595).pExpr); 2470 #line 2495 "parse.sql" 2471 } 2472 break; 2473 /********* End destructor definitions *****************************************/ 2474 default: break; /* If no destructor action specified: do nothing */ 2475 } 2476 } 2477 2478 /* 2479 ** Pop the parser's stack once. 2480 ** 2481 ** If there is a destructor routine associated with the token which 2482 ** is popped from the stack, then call it. 2483 */ 2484 static void yy_pop_parser_stack(yyParser *pParser){ 2485 yyStackEntry *yytos; 2486 assert( pParser->yytos!=0 ); 2487 assert( pParser->yytos > pParser->yystack ); 2488 yytos = pParser->yytos--; 2489 #ifndef NDEBUG 2490 if( yyTraceFILE ){ 2491 fprintf(yyTraceFILE,"%sPopping %s\n", 2492 yyTracePrompt, 2493 yyTokenName[yytos->major]); 2494 } 2495 #endif 2496 yy_destructor(pParser, yytos->major, &yytos->minor); 2497 } 2498 2499 /* 2500 ** Clear all secondary memory allocations from the parser 2501 */ 2502 void sqlite3ParserFinalize(void *p){ 2503 yyParser *pParser = (yyParser*)p; 2504 while( pParser->yytos>pParser->yystack ) yy_pop_parser_stack(pParser); 2505 #if YYSTACKDEPTH<=0 2506 if( pParser->yystack!=&pParser->yystk0 ) free(pParser->yystack); 2507 #endif 2508 } 2509 2510 #ifndef sqlite3Parser_ENGINEALWAYSONSTACK 2511 /* 2512 ** Deallocate and destroy a parser. Destructors are called for 2513 ** all stack elements before shutting the parser down. 2514 ** 2515 ** If the YYPARSEFREENEVERNULL macro exists (for example because it 2516 ** is defined in a %include section of the input grammar) then it is 2517 ** assumed that the input pointer is never NULL. 2518 */ 2519 void sqlite3ParserFree( 2520 void *p, /* The parser to be deleted */ 2521 void (*freeProc)(void*) /* Function used to reclaim memory */ 2522 ){ 2523 #ifndef YYPARSEFREENEVERNULL 2524 if( p==0 ) return; 2525 #endif 2526 sqlite3ParserFinalize(p); 2527 (*freeProc)(p); 2528 } 2529 #endif /* sqlite3Parser_ENGINEALWAYSONSTACK */ 2530 2531 /* 2532 ** Return the peak depth of the stack for a parser. 2533 */ 2534 #ifdef YYTRACKMAXSTACKDEPTH 2535 int sqlite3ParserStackPeak(void *p){ 2536 yyParser *pParser = (yyParser*)p; 2537 return pParser->yyhwm; 2538 } 2539 #endif 2540 2541 /* This array of booleans keeps track of the parser statement 2542 ** coverage. The element yycoverage[X][Y] is set when the parser 2543 ** is in state X and has a lookahead token Y. In a well-tested 2544 ** systems, every element of this matrix should end up being set. 2545 */ 2546 #if defined(YYCOVERAGE) 2547 static unsigned char yycoverage[YYNSTATE][YYNTOKEN]; 2548 #endif 2549 2550 /* 2551 ** Write into out a description of every state/lookahead combination that 2552 ** 2553 ** (1) has not been used by the parser, and 2554 ** (2) is not a syntax error. 2555 ** 2556 ** Return the number of missed state/lookahead combinations. 2557 */ 2558 #if defined(YYCOVERAGE) 2559 int sqlite3ParserCoverage(FILE *out){ 2560 int stateno, iLookAhead, i; 2561 int nMissed = 0; 2562 for(stateno=0; stateno<YYNSTATE; stateno++){ 2563 i = yy_shift_ofst[stateno]; 2564 for(iLookAhead=0; iLookAhead<YYNTOKEN; iLookAhead++){ 2565 if( yy_lookahead[i+iLookAhead]!=iLookAhead ) continue; 2566 if( yycoverage[stateno][iLookAhead]==0 ) nMissed++; 2567 if( out ){ 2568 fprintf(out,"State %d lookahead %s %s\n", stateno, 2569 yyTokenName[iLookAhead], 2570 yycoverage[stateno][iLookAhead] ? "ok" : "missed"); 2571 } 2572 } 2573 } 2574 return nMissed; 2575 } 2576 #endif 2577 2578 /* 2579 ** Find the appropriate action for a parser given the terminal 2580 ** look-ahead token iLookAhead. 2581 */ 2582 static YYACTIONTYPE yy_find_shift_action( 2583 YYCODETYPE iLookAhead, /* The look-ahead token */ 2584 YYACTIONTYPE stateno /* Current state number */ 2585 ){ 2586 int i; 2587 2588 if( stateno>YY_MAX_SHIFT ) return stateno; 2589 assert( stateno <= YY_SHIFT_COUNT ); 2590 #if defined(YYCOVERAGE) 2591 yycoverage[stateno][iLookAhead] = 1; 2592 #endif 2593 do{ 2594 i = yy_shift_ofst[stateno]; 2595 assert( i>=0 ); 2596 assert( i<=YY_ACTTAB_COUNT ); 2597 assert( i+YYNTOKEN<=(int)YY_NLOOKAHEAD ); 2598 assert( iLookAhead!=YYNOCODE ); 2599 assert( iLookAhead < YYNTOKEN ); 2600 i += iLookAhead; 2601 assert( i<(int)YY_NLOOKAHEAD ); 2602 if( yy_lookahead[i]!=iLookAhead ){ 2603 #ifdef YYFALLBACK 2604 YYCODETYPE iFallback; /* Fallback token */ 2605 assert( iLookAhead<sizeof(yyFallback)/sizeof(yyFallback[0]) ); 2606 iFallback = yyFallback[iLookAhead]; 2607 if( iFallback!=0 ){ 2608 #ifndef NDEBUG 2609 if( yyTraceFILE ){ 2610 fprintf(yyTraceFILE, "%sFALLBACK %s => %s\n", 2611 yyTracePrompt, yyTokenName[iLookAhead], yyTokenName[iFallback]); 2612 } 2613 #endif 2614 assert( yyFallback[iFallback]==0 ); /* Fallback loop must terminate */ 2615 iLookAhead = iFallback; 2616 continue; 2617 } 2618 #endif 2619 #ifdef YYWILDCARD 2620 { 2621 int j = i - iLookAhead + YYWILDCARD; 2622 assert( j<(int)(sizeof(yy_lookahead)/sizeof(yy_lookahead[0])) ); 2623 if( yy_lookahead[j]==YYWILDCARD && iLookAhead>0 ){ 2624 #ifndef NDEBUG 2625 if( yyTraceFILE ){ 2626 fprintf(yyTraceFILE, "%sWILDCARD %s => %s\n", 2627 yyTracePrompt, yyTokenName[iLookAhead], 2628 yyTokenName[YYWILDCARD]); 2629 } 2630 #endif /* NDEBUG */ 2631 return yy_action[j]; 2632 } 2633 } 2634 #endif /* YYWILDCARD */ 2635 return yy_default[stateno]; 2636 }else{ 2637 assert( i>=0 && i<(int)(sizeof(yy_action)/sizeof(yy_action[0])) ); 2638 return yy_action[i]; 2639 } 2640 }while(1); 2641 } 2642 2643 /* 2644 ** Find the appropriate action for a parser given the non-terminal 2645 ** look-ahead token iLookAhead. 2646 */ 2647 static YYACTIONTYPE yy_find_reduce_action( 2648 YYACTIONTYPE stateno, /* Current state number */ 2649 YYCODETYPE iLookAhead /* The look-ahead token */ 2650 ){ 2651 int i; 2652 #ifdef YYERRORSYMBOL 2653 if( stateno>YY_REDUCE_COUNT ){ 2654 return yy_default[stateno]; 2655 } 2656 #else 2657 assert( stateno<=YY_REDUCE_COUNT ); 2658 #endif 2659 i = yy_reduce_ofst[stateno]; 2660 assert( iLookAhead!=YYNOCODE ); 2661 i += iLookAhead; 2662 #ifdef YYERRORSYMBOL 2663 if( i<0 || i>=YY_ACTTAB_COUNT || yy_lookahead[i]!=iLookAhead ){ 2664 return yy_default[stateno]; 2665 } 2666 #else 2667 assert( i>=0 && i<YY_ACTTAB_COUNT ); 2668 assert( yy_lookahead[i]==iLookAhead ); 2669 #endif 2670 return yy_action[i]; 2671 } 2672 2673 /* 2674 ** The following routine is called if the stack overflows. 2675 */ 2676 static void yyStackOverflow(yyParser *yypParser){ 2677 sqlite3ParserARG_FETCH 2678 sqlite3ParserCTX_FETCH 2679 #ifndef NDEBUG 2680 if( yyTraceFILE ){ 2681 fprintf(yyTraceFILE,"%sStack Overflow!\n",yyTracePrompt); 2682 } 2683 #endif 2684 while( yypParser->yytos>yypParser->yystack ) yy_pop_parser_stack(yypParser); 2685 /* Here code is inserted which will execute if the parser 2686 ** stack every overflows */ 2687 /******** Begin %stack_overflow code ******************************************/ 2688 #line 47 "parse.y" 2689 2690 sqlite3ErrorMsg(pParse, "parser stack overflow"); 2691 #line 2716 "parse.sql" 2692 /******** End %stack_overflow code ********************************************/ 2693 sqlite3ParserARG_STORE /* Suppress warning about unused %extra_argument var */ 2694 sqlite3ParserCTX_STORE 2695 } 2696 2697 /* 2698 ** Print tracing information for a SHIFT action 2699 */ 2700 #ifndef NDEBUG 2701 static void yyTraceShift(yyParser *yypParser, int yyNewState, const char *zTag){ 2702 if( yyTraceFILE ){ 2703 if( yyNewState<YYNSTATE ){ 2704 fprintf(yyTraceFILE,"%s%s '%s', go to state %d\n", 2705 yyTracePrompt, zTag, yyTokenName[yypParser->yytos->major], 2706 yyNewState); 2707 }else{ 2708 fprintf(yyTraceFILE,"%s%s '%s', pending reduce %d\n", 2709 yyTracePrompt, zTag, yyTokenName[yypParser->yytos->major], 2710 yyNewState - YY_MIN_REDUCE); 2711 } 2712 } 2713 } 2714 #else 2715 # define yyTraceShift(X,Y,Z) 2716 #endif 2717 2718 /* 2719 ** Perform a shift action. 2720 */ 2721 static void yy_shift( 2722 yyParser *yypParser, /* The parser to be shifted */ 2723 YYACTIONTYPE yyNewState, /* The new state to shift in */ 2724 YYCODETYPE yyMajor, /* The major token to shift in */ 2725 sqlite3ParserTOKENTYPE yyMinor /* The minor token to shift in */ 2726 ){ 2727 yyStackEntry *yytos; 2728 yypParser->yytos++; 2729 #ifdef YYTRACKMAXSTACKDEPTH 2730 if( (int)(yypParser->yytos - yypParser->yystack)>yypParser->yyhwm ){ 2731 yypParser->yyhwm++; 2732 assert( yypParser->yyhwm == (int)(yypParser->yytos - yypParser->yystack) ); 2733 } 2734 #endif 2735 #if YYSTACKDEPTH>0 2736 if( yypParser->yytos>yypParser->yystackEnd ){ 2737 yypParser->yytos--; 2738 yyStackOverflow(yypParser); 2739 return; 2740 } 2741 #else 2742 if( yypParser->yytos>=&yypParser->yystack[yypParser->yystksz] ){ 2743 if( yyGrowStack(yypParser) ){ 2744 yypParser->yytos--; 2745 yyStackOverflow(yypParser); 2746 return; 2747 } 2748 } 2749 #endif 2750 if( yyNewState > YY_MAX_SHIFT ){ 2751 yyNewState += YY_MIN_REDUCE - YY_MIN_SHIFTREDUCE; 2752 } 2753 yytos = yypParser->yytos; 2754 yytos->stateno = yyNewState; 2755 yytos->major = yyMajor; 2756 yytos->minor.yy0 = yyMinor; 2757 yyTraceShift(yypParser, yyNewState, "Shift"); 2758 } 2759 2760 /* For rule J, yyRuleInfoLhs[J] contains the symbol on the left-hand side 2761 ** of that rule */ 2762 static const YYCODETYPE yyRuleInfoLhs[] = { 2763 189, /* (0) explain ::= EXPLAIN */ 2764 189, /* (1) explain ::= EXPLAIN QUERY PLAN */ 2765 188, /* (2) cmdx ::= cmd */ 2766 190, /* (3) cmd ::= BEGIN transtype trans_opt */ 2767 191, /* (4) transtype ::= */ 2768 191, /* (5) transtype ::= DEFERRED */ 2769 191, /* (6) transtype ::= IMMEDIATE */ 2770 191, /* (7) transtype ::= EXCLUSIVE */ 2771 190, /* (8) cmd ::= COMMIT|END trans_opt */ 2772 190, /* (9) cmd ::= ROLLBACK trans_opt */ 2773 190, /* (10) cmd ::= SAVEPOINT nm */ 2774 190, /* (11) cmd ::= RELEASE savepoint_opt nm */ 2775 190, /* (12) cmd ::= ROLLBACK trans_opt TO savepoint_opt nm */ 2776 195, /* (13) create_table ::= createkw temp TABLE ifnotexists nm dbnm */ 2777 197, /* (14) createkw ::= CREATE */ 2778 199, /* (15) ifnotexists ::= */ 2779 199, /* (16) ifnotexists ::= IF NOT EXISTS */ 2780 198, /* (17) temp ::= TEMP */ 2781 198, /* (18) temp ::= */ 2782 196, /* (19) create_table_args ::= LP columnlist conslist_opt RP table_option_set */ 2783 196, /* (20) create_table_args ::= AS select */ 2784 203, /* (21) table_option_set ::= */ 2785 203, /* (22) table_option_set ::= table_option_set COMMA table_option */ 2786 205, /* (23) table_option ::= WITHOUT nm */ 2787 205, /* (24) table_option ::= nm */ 2788 206, /* (25) columnname ::= nm typetoken */ 2789 208, /* (26) typetoken ::= */ 2790 208, /* (27) typetoken ::= typename LP signed RP */ 2791 208, /* (28) typetoken ::= typename LP signed COMMA signed RP */ 2792 209, /* (29) typename ::= typename ID|STRING */ 2793 213, /* (30) scanpt ::= */ 2794 214, /* (31) scantok ::= */ 2795 215, /* (32) ccons ::= CONSTRAINT nm */ 2796 215, /* (33) ccons ::= DEFAULT scantok term */ 2797 215, /* (34) ccons ::= DEFAULT LP expr RP */ 2798 215, /* (35) ccons ::= DEFAULT PLUS scantok term */ 2799 215, /* (36) ccons ::= DEFAULT MINUS scantok term */ 2800 215, /* (37) ccons ::= DEFAULT scantok ID|INDEXED */ 2801 215, /* (38) ccons ::= NOT NULL onconf */ 2802 215, /* (39) ccons ::= PRIMARY KEY sortorder onconf autoinc */ 2803 215, /* (40) ccons ::= UNIQUE onconf */ 2804 215, /* (41) ccons ::= CHECK LP expr RP */ 2805 215, /* (42) ccons ::= REFERENCES nm eidlist_opt refargs */ 2806 215, /* (43) ccons ::= defer_subclause */ 2807 215, /* (44) ccons ::= COLLATE ID|STRING */ 2808 224, /* (45) generated ::= LP expr RP */ 2809 224, /* (46) generated ::= LP expr RP ID */ 2810 220, /* (47) autoinc ::= */ 2811 220, /* (48) autoinc ::= AUTOINCR */ 2812 222, /* (49) refargs ::= */ 2813 222, /* (50) refargs ::= refargs refarg */ 2814 225, /* (51) refarg ::= MATCH nm */ 2815 225, /* (52) refarg ::= ON INSERT refact */ 2816 225, /* (53) refarg ::= ON DELETE refact */ 2817 225, /* (54) refarg ::= ON UPDATE refact */ 2818 226, /* (55) refact ::= SET NULL */ 2819 226, /* (56) refact ::= SET DEFAULT */ 2820 226, /* (57) refact ::= CASCADE */ 2821 226, /* (58) refact ::= RESTRICT */ 2822 226, /* (59) refact ::= NO ACTION */ 2823 223, /* (60) defer_subclause ::= NOT DEFERRABLE init_deferred_pred_opt */ 2824 223, /* (61) defer_subclause ::= DEFERRABLE init_deferred_pred_opt */ 2825 227, /* (62) init_deferred_pred_opt ::= */ 2826 227, /* (63) init_deferred_pred_opt ::= INITIALLY DEFERRED */ 2827 227, /* (64) init_deferred_pred_opt ::= INITIALLY IMMEDIATE */ 2828 202, /* (65) conslist_opt ::= */ 2829 229, /* (66) tconscomma ::= COMMA */ 2830 230, /* (67) tcons ::= CONSTRAINT nm */ 2831 230, /* (68) tcons ::= PRIMARY KEY LP sortlist autoinc RP onconf */ 2832 230, /* (69) tcons ::= UNIQUE LP sortlist RP onconf */ 2833 230, /* (70) tcons ::= CHECK LP expr RP onconf */ 2834 230, /* (71) tcons ::= FOREIGN KEY LP eidlist RP REFERENCES nm eidlist_opt refargs defer_subclause_opt */ 2835 233, /* (72) defer_subclause_opt ::= */ 2836 218, /* (73) onconf ::= */ 2837 218, /* (74) onconf ::= ON CONFLICT resolvetype */ 2838 234, /* (75) orconf ::= */ 2839 234, /* (76) orconf ::= OR resolvetype */ 2840 235, /* (77) resolvetype ::= IGNORE */ 2841 235, /* (78) resolvetype ::= REPLACE */ 2842 190, /* (79) cmd ::= DROP TABLE ifexists fullname */ 2843 237, /* (80) ifexists ::= IF EXISTS */ 2844 237, /* (81) ifexists ::= */ 2845 190, /* (82) cmd ::= createkw temp VIEW ifnotexists nm dbnm eidlist_opt AS select */ 2846 190, /* (83) cmd ::= DROP VIEW ifexists fullname */ 2847 190, /* (84) cmd ::= select */ 2848 204, /* (85) select ::= WITH wqlist selectnowith */ 2849 204, /* (86) select ::= WITH RECURSIVE wqlist selectnowith */ 2850 204, /* (87) select ::= selectnowith */ 2851 239, /* (88) selectnowith ::= selectnowith multiselect_op oneselect */ 2852 242, /* (89) multiselect_op ::= UNION */ 2853 242, /* (90) multiselect_op ::= UNION ALL */ 2854 242, /* (91) multiselect_op ::= EXCEPT|INTERSECT */ 2855 240, /* (92) oneselect ::= SELECT distinct selcollist from where_opt groupby_opt having_opt orderby_opt limit_opt */ 2856 240, /* (93) oneselect ::= SELECT distinct selcollist from where_opt groupby_opt having_opt window_clause orderby_opt limit_opt */ 2857 252, /* (94) values ::= VALUES LP nexprlist RP */ 2858 252, /* (95) values ::= values COMMA LP nexprlist RP */ 2859 243, /* (96) distinct ::= DISTINCT */ 2860 243, /* (97) distinct ::= ALL */ 2861 243, /* (98) distinct ::= */ 2862 254, /* (99) sclp ::= */ 2863 244, /* (100) selcollist ::= sclp scanpt expr scanpt as */ 2864 244, /* (101) selcollist ::= sclp scanpt STAR */ 2865 244, /* (102) selcollist ::= sclp scanpt nm DOT STAR */ 2866 255, /* (103) as ::= AS nm */ 2867 255, /* (104) as ::= */ 2868 245, /* (105) from ::= */ 2869 245, /* (106) from ::= FROM seltablist */ 2870 257, /* (107) stl_prefix ::= seltablist joinop */ 2871 257, /* (108) stl_prefix ::= */ 2872 256, /* (109) seltablist ::= stl_prefix nm dbnm as on_using */ 2873 256, /* (110) seltablist ::= stl_prefix nm dbnm as indexed_by on_using */ 2874 256, /* (111) seltablist ::= stl_prefix nm dbnm LP exprlist RP as on_using */ 2875 256, /* (112) seltablist ::= stl_prefix LP select RP as on_using */ 2876 256, /* (113) seltablist ::= stl_prefix LP seltablist RP as on_using */ 2877 200, /* (114) dbnm ::= */ 2878 200, /* (115) dbnm ::= DOT nm */ 2879 238, /* (116) fullname ::= nm */ 2880 238, /* (117) fullname ::= nm DOT nm */ 2881 262, /* (118) xfullname ::= nm */ 2882 262, /* (119) xfullname ::= nm DOT nm */ 2883 262, /* (120) xfullname ::= nm DOT nm AS nm */ 2884 262, /* (121) xfullname ::= nm AS nm */ 2885 258, /* (122) joinop ::= COMMA|JOIN */ 2886 258, /* (123) joinop ::= JOIN_KW JOIN */ 2887 258, /* (124) joinop ::= JOIN_KW nm JOIN */ 2888 258, /* (125) joinop ::= JOIN_KW nm nm JOIN */ 2889 259, /* (126) on_using ::= ON expr */ 2890 259, /* (127) on_using ::= USING LP idlist RP */ 2891 259, /* (128) on_using ::= */ 2892 264, /* (129) indexed_opt ::= */ 2893 260, /* (130) indexed_by ::= INDEXED BY nm */ 2894 260, /* (131) indexed_by ::= NOT INDEXED */ 2895 249, /* (132) orderby_opt ::= */ 2896 249, /* (133) orderby_opt ::= ORDER BY sortlist */ 2897 231, /* (134) sortlist ::= sortlist COMMA expr sortorder nulls */ 2898 231, /* (135) sortlist ::= expr sortorder nulls */ 2899 219, /* (136) sortorder ::= ASC */ 2900 219, /* (137) sortorder ::= DESC */ 2901 219, /* (138) sortorder ::= */ 2902 265, /* (139) nulls ::= NULLS FIRST */ 2903 265, /* (140) nulls ::= NULLS LAST */ 2904 265, /* (141) nulls ::= */ 2905 247, /* (142) groupby_opt ::= */ 2906 247, /* (143) groupby_opt ::= GROUP BY nexprlist */ 2907 248, /* (144) having_opt ::= */ 2908 248, /* (145) having_opt ::= HAVING expr */ 2909 250, /* (146) limit_opt ::= */ 2910 250, /* (147) limit_opt ::= LIMIT expr */ 2911 250, /* (148) limit_opt ::= LIMIT expr OFFSET expr */ 2912 250, /* (149) limit_opt ::= LIMIT expr COMMA expr */ 2913 190, /* (150) cmd ::= with DELETE FROM xfullname indexed_opt where_opt_ret */ 2914 246, /* (151) where_opt ::= */ 2915 246, /* (152) where_opt ::= WHERE expr */ 2916 267, /* (153) where_opt_ret ::= */ 2917 267, /* (154) where_opt_ret ::= WHERE expr */ 2918 267, /* (155) where_opt_ret ::= RETURNING selcollist */ 2919 267, /* (156) where_opt_ret ::= WHERE expr RETURNING selcollist */ 2920 190, /* (157) cmd ::= with UPDATE orconf xfullname indexed_opt SET setlist from where_opt_ret */ 2921 268, /* (158) setlist ::= setlist COMMA nm EQ expr */ 2922 268, /* (159) setlist ::= setlist COMMA LP idlist RP EQ expr */ 2923 268, /* (160) setlist ::= nm EQ expr */ 2924 268, /* (161) setlist ::= LP idlist RP EQ expr */ 2925 190, /* (162) cmd ::= with insert_cmd INTO xfullname idlist_opt select upsert */ 2926 190, /* (163) cmd ::= with insert_cmd INTO xfullname idlist_opt DEFAULT VALUES returning */ 2927 271, /* (164) upsert ::= */ 2928 271, /* (165) upsert ::= RETURNING selcollist */ 2929 271, /* (166) upsert ::= ON CONFLICT LP sortlist RP where_opt DO UPDATE SET setlist where_opt upsert */ 2930 271, /* (167) upsert ::= ON CONFLICT LP sortlist RP where_opt DO NOTHING upsert */ 2931 271, /* (168) upsert ::= ON CONFLICT DO NOTHING returning */ 2932 271, /* (169) upsert ::= ON CONFLICT DO UPDATE SET setlist where_opt returning */ 2933 272, /* (170) returning ::= RETURNING selcollist */ 2934 269, /* (171) insert_cmd ::= INSERT orconf */ 2935 269, /* (172) insert_cmd ::= REPLACE */ 2936 270, /* (173) idlist_opt ::= */ 2937 270, /* (174) idlist_opt ::= LP idlist RP */ 2938 263, /* (175) idlist ::= idlist COMMA nm */ 2939 263, /* (176) idlist ::= nm */ 2940 217, /* (177) expr ::= LP expr RP */ 2941 217, /* (178) expr ::= ID|INDEXED */ 2942 217, /* (179) expr ::= JOIN_KW */ 2943 217, /* (180) expr ::= nm DOT nm */ 2944 217, /* (181) expr ::= nm DOT nm DOT nm */ 2945 216, /* (182) term ::= NULL|FLOAT|BLOB */ 2946 216, /* (183) term ::= STRING */ 2947 216, /* (184) term ::= INTEGER */ 2948 217, /* (185) expr ::= VARIABLE */ 2949 217, /* (186) expr ::= expr COLLATE ID|STRING */ 2950 217, /* (187) expr ::= CAST LP expr AS typetoken RP */ 2951 217, /* (188) expr ::= ID|INDEXED LP distinct exprlist RP */ 2952 217, /* (189) expr ::= ID|INDEXED LP STAR RP */ 2953 217, /* (190) expr ::= ID|INDEXED LP distinct exprlist RP filter_over */ 2954 217, /* (191) expr ::= ID|INDEXED LP STAR RP filter_over */ 2955 216, /* (192) term ::= CTIME_KW */ 2956 217, /* (193) expr ::= LP nexprlist COMMA expr RP */ 2957 217, /* (194) expr ::= expr AND expr */ 2958 217, /* (195) expr ::= expr OR expr */ 2959 217, /* (196) expr ::= expr LT|GT|GE|LE expr */ 2960 217, /* (197) expr ::= expr EQ|NE expr */ 2961 217, /* (198) expr ::= expr BITAND|BITOR|LSHIFT|RSHIFT expr */ 2962 217, /* (199) expr ::= expr PLUS|MINUS expr */ 2963 217, /* (200) expr ::= expr STAR|SLASH|REM expr */ 2964 217, /* (201) expr ::= expr CONCAT expr */ 2965 274, /* (202) likeop ::= NOT LIKE_KW|MATCH */ 2966 217, /* (203) expr ::= expr likeop expr */ 2967 217, /* (204) expr ::= expr likeop expr ESCAPE expr */ 2968 217, /* (205) expr ::= expr ISNULL|NOTNULL */ 2969 217, /* (206) expr ::= expr NOT NULL */ 2970 217, /* (207) expr ::= expr IS expr */ 2971 217, /* (208) expr ::= expr IS NOT expr */ 2972 217, /* (209) expr ::= expr IS NOT DISTINCT FROM expr */ 2973 217, /* (210) expr ::= expr IS DISTINCT FROM expr */ 2974 217, /* (211) expr ::= NOT expr */ 2975 217, /* (212) expr ::= BITNOT expr */ 2976 217, /* (213) expr ::= PLUS|MINUS expr */ 2977 217, /* (214) expr ::= expr PTR expr */ 2978 275, /* (215) between_op ::= BETWEEN */ 2979 275, /* (216) between_op ::= NOT BETWEEN */ 2980 217, /* (217) expr ::= expr between_op expr AND expr */ 2981 276, /* (218) in_op ::= IN */ 2982 276, /* (219) in_op ::= NOT IN */ 2983 217, /* (220) expr ::= expr in_op LP exprlist RP */ 2984 217, /* (221) expr ::= LP select RP */ 2985 217, /* (222) expr ::= expr in_op LP select RP */ 2986 217, /* (223) expr ::= expr in_op nm dbnm paren_exprlist */ 2987 217, /* (224) expr ::= EXISTS LP select RP */ 2988 217, /* (225) expr ::= CASE case_operand case_exprlist case_else END */ 2989 279, /* (226) case_exprlist ::= case_exprlist WHEN expr THEN expr */ 2990 279, /* (227) case_exprlist ::= WHEN expr THEN expr */ 2991 280, /* (228) case_else ::= ELSE expr */ 2992 280, /* (229) case_else ::= */ 2993 278, /* (230) case_operand ::= expr */ 2994 278, /* (231) case_operand ::= */ 2995 261, /* (232) exprlist ::= */ 2996 253, /* (233) nexprlist ::= nexprlist COMMA expr */ 2997 253, /* (234) nexprlist ::= expr */ 2998 277, /* (235) paren_exprlist ::= */ 2999 277, /* (236) paren_exprlist ::= LP exprlist RP */ 3000 190, /* (237) cmd ::= createkw uniqueflag INDEX ifnotexists nm dbnm ON nm LP sortlist RP where_opt */ 3001 281, /* (238) uniqueflag ::= UNIQUE */ 3002 281, /* (239) uniqueflag ::= */ 3003 221, /* (240) eidlist_opt ::= */ 3004 221, /* (241) eidlist_opt ::= LP eidlist RP */ 3005 232, /* (242) eidlist ::= eidlist COMMA nm collate sortorder */ 3006 232, /* (243) eidlist ::= nm collate sortorder */ 3007 282, /* (244) collate ::= */ 3008 282, /* (245) collate ::= COLLATE ID|STRING */ 3009 190, /* (246) cmd ::= DROP INDEX ifexists fullname */ 3010 190, /* (247) cmd ::= VACUUM vinto */ 3011 190, /* (248) cmd ::= VACUUM nm vinto */ 3012 283, /* (249) vinto ::= INTO expr */ 3013 283, /* (250) vinto ::= */ 3014 190, /* (251) cmd ::= PRAGMA nm dbnm */ 3015 190, /* (252) cmd ::= PRAGMA nm dbnm EQ nmnum */ 3016 190, /* (253) cmd ::= PRAGMA nm dbnm LP nmnum RP */ 3017 190, /* (254) cmd ::= PRAGMA nm dbnm EQ minus_num */ 3018 190, /* (255) cmd ::= PRAGMA nm dbnm LP minus_num RP */ 3019 211, /* (256) plus_num ::= PLUS INTEGER|FLOAT */ 3020 212, /* (257) minus_num ::= MINUS INTEGER|FLOAT */ 3021 190, /* (258) cmd ::= createkw trigger_decl BEGIN trigger_cmd_list END */ 3022 285, /* (259) trigger_decl ::= temp TRIGGER ifnotexists nm dbnm trigger_time trigger_event ON fullname foreach_clause when_clause */ 3023 287, /* (260) trigger_time ::= BEFORE|AFTER */ 3024 287, /* (261) trigger_time ::= INSTEAD OF */ 3025 287, /* (262) trigger_time ::= */ 3026 288, /* (263) trigger_event ::= DELETE|INSERT */ 3027 288, /* (264) trigger_event ::= UPDATE */ 3028 288, /* (265) trigger_event ::= UPDATE OF idlist */ 3029 290, /* (266) when_clause ::= */ 3030 290, /* (267) when_clause ::= WHEN expr */ 3031 286, /* (268) trigger_cmd_list ::= trigger_cmd_list trigger_cmd SEMI */ 3032 286, /* (269) trigger_cmd_list ::= trigger_cmd SEMI */ 3033 292, /* (270) trnm ::= nm DOT nm */ 3034 293, /* (271) tridxby ::= INDEXED BY nm */ 3035 293, /* (272) tridxby ::= NOT INDEXED */ 3036 291, /* (273) trigger_cmd ::= UPDATE orconf trnm tridxby SET setlist from where_opt scanpt */ 3037 291, /* (274) trigger_cmd ::= scanpt insert_cmd INTO trnm idlist_opt select upsert scanpt */ 3038 291, /* (275) trigger_cmd ::= DELETE FROM trnm tridxby where_opt scanpt */ 3039 291, /* (276) trigger_cmd ::= scanpt select scanpt */ 3040 217, /* (277) expr ::= RAISE LP IGNORE RP */ 3041 217, /* (278) expr ::= RAISE LP raisetype COMMA nm RP */ 3042 236, /* (279) raisetype ::= ROLLBACK */ 3043 236, /* (280) raisetype ::= ABORT */ 3044 236, /* (281) raisetype ::= FAIL */ 3045 190, /* (282) cmd ::= DROP TRIGGER ifexists fullname */ 3046 190, /* (283) cmd ::= ATTACH database_kw_opt expr AS expr key_opt */ 3047 190, /* (284) cmd ::= DETACH database_kw_opt expr */ 3048 295, /* (285) key_opt ::= */ 3049 295, /* (286) key_opt ::= KEY expr */ 3050 190, /* (287) cmd ::= REINDEX */ 3051 190, /* (288) cmd ::= REINDEX nm dbnm */ 3052 190, /* (289) cmd ::= ANALYZE */ 3053 190, /* (290) cmd ::= ANALYZE nm dbnm */ 3054 190, /* (291) cmd ::= ALTER TABLE fullname RENAME TO nm */ 3055 190, /* (292) cmd ::= ALTER TABLE add_column_fullname ADD kwcolumn_opt columnname carglist */ 3056 190, /* (293) cmd ::= ALTER TABLE fullname DROP kwcolumn_opt nm */ 3057 296, /* (294) add_column_fullname ::= fullname */ 3058 190, /* (295) cmd ::= ALTER TABLE fullname RENAME kwcolumn_opt nm TO nm */ 3059 190, /* (296) cmd ::= create_vtab */ 3060 190, /* (297) cmd ::= create_vtab LP vtabarglist RP */ 3061 298, /* (298) create_vtab ::= createkw VIRTUAL TABLE ifnotexists nm dbnm USING nm */ 3062 300, /* (299) vtabarg ::= */ 3063 301, /* (300) vtabargtoken ::= ANY */ 3064 301, /* (301) vtabargtoken ::= lp anylist RP */ 3065 302, /* (302) lp ::= LP */ 3066 266, /* (303) with ::= WITH wqlist */ 3067 266, /* (304) with ::= WITH RECURSIVE wqlist */ 3068 305, /* (305) wqas ::= AS */ 3069 305, /* (306) wqas ::= AS MATERIALIZED */ 3070 305, /* (307) wqas ::= AS NOT MATERIALIZED */ 3071 304, /* (308) wqitem ::= nm eidlist_opt wqas LP select RP */ 3072 241, /* (309) wqlist ::= wqitem */ 3073 241, /* (310) wqlist ::= wqlist COMMA wqitem */ 3074 306, /* (311) windowdefn_list ::= windowdefn */ 3075 306, /* (312) windowdefn_list ::= windowdefn_list COMMA windowdefn */ 3076 307, /* (313) windowdefn ::= nm AS LP window RP */ 3077 308, /* (314) window ::= PARTITION BY nexprlist orderby_opt frame_opt */ 3078 308, /* (315) window ::= nm PARTITION BY nexprlist orderby_opt frame_opt */ 3079 308, /* (316) window ::= ORDER BY sortlist frame_opt */ 3080 308, /* (317) window ::= nm ORDER BY sortlist frame_opt */ 3081 308, /* (318) window ::= frame_opt */ 3082 308, /* (319) window ::= nm frame_opt */ 3083 309, /* (320) frame_opt ::= */ 3084 309, /* (321) frame_opt ::= range_or_rows frame_bound_s frame_exclude_opt */ 3085 309, /* (322) frame_opt ::= range_or_rows BETWEEN frame_bound_s AND frame_bound_e frame_exclude_opt */ 3086 313, /* (323) range_or_rows ::= RANGE|ROWS|GROUPS */ 3087 315, /* (324) frame_bound_s ::= frame_bound */ 3088 315, /* (325) frame_bound_s ::= UNBOUNDED PRECEDING */ 3089 316, /* (326) frame_bound_e ::= frame_bound */ 3090 316, /* (327) frame_bound_e ::= UNBOUNDED FOLLOWING */ 3091 314, /* (328) frame_bound ::= expr PRECEDING|FOLLOWING */ 3092 314, /* (329) frame_bound ::= CURRENT ROW */ 3093 317, /* (330) frame_exclude_opt ::= */ 3094 317, /* (331) frame_exclude_opt ::= EXCLUDE frame_exclude */ 3095 318, /* (332) frame_exclude ::= NO OTHERS */ 3096 318, /* (333) frame_exclude ::= CURRENT ROW */ 3097 318, /* (334) frame_exclude ::= GROUP|TIES */ 3098 251, /* (335) window_clause ::= WINDOW windowdefn_list */ 3099 273, /* (336) filter_over ::= filter_clause over_clause */ 3100 273, /* (337) filter_over ::= over_clause */ 3101 273, /* (338) filter_over ::= filter_clause */ 3102 312, /* (339) over_clause ::= OVER LP window RP */ 3103 312, /* (340) over_clause ::= OVER nm */ 3104 311, /* (341) filter_clause ::= FILTER LP WHERE expr RP */ 3105 185, /* (342) input ::= cmdlist */ 3106 186, /* (343) cmdlist ::= cmdlist ecmd */ 3107 186, /* (344) cmdlist ::= ecmd */ 3108 187, /* (345) ecmd ::= SEMI */ 3109 187, /* (346) ecmd ::= cmdx SEMI */ 3110 187, /* (347) ecmd ::= explain cmdx SEMI */ 3111 192, /* (348) trans_opt ::= */ 3112 192, /* (349) trans_opt ::= TRANSACTION */ 3113 192, /* (350) trans_opt ::= TRANSACTION nm */ 3114 194, /* (351) savepoint_opt ::= SAVEPOINT */ 3115 194, /* (352) savepoint_opt ::= */ 3116 190, /* (353) cmd ::= create_table create_table_args */ 3117 203, /* (354) table_option_set ::= table_option */ 3118 201, /* (355) columnlist ::= columnlist COMMA columnname carglist */ 3119 201, /* (356) columnlist ::= columnname carglist */ 3120 193, /* (357) nm ::= ID|INDEXED */ 3121 193, /* (358) nm ::= STRING */ 3122 193, /* (359) nm ::= JOIN_KW */ 3123 208, /* (360) typetoken ::= typename */ 3124 209, /* (361) typename ::= ID|STRING */ 3125 210, /* (362) signed ::= plus_num */ 3126 210, /* (363) signed ::= minus_num */ 3127 207, /* (364) carglist ::= carglist ccons */ 3128 207, /* (365) carglist ::= */ 3129 215, /* (366) ccons ::= NULL onconf */ 3130 215, /* (367) ccons ::= GENERATED ALWAYS AS generated */ 3131 215, /* (368) ccons ::= AS generated */ 3132 202, /* (369) conslist_opt ::= COMMA conslist */ 3133 228, /* (370) conslist ::= conslist tconscomma tcons */ 3134 228, /* (371) conslist ::= tcons */ 3135 229, /* (372) tconscomma ::= */ 3136 233, /* (373) defer_subclause_opt ::= defer_subclause */ 3137 235, /* (374) resolvetype ::= raisetype */ 3138 239, /* (375) selectnowith ::= oneselect */ 3139 240, /* (376) oneselect ::= values */ 3140 254, /* (377) sclp ::= selcollist COMMA */ 3141 255, /* (378) as ::= ID|STRING */ 3142 264, /* (379) indexed_opt ::= indexed_by */ 3143 272, /* (380) returning ::= */ 3144 217, /* (381) expr ::= term */ 3145 274, /* (382) likeop ::= LIKE_KW|MATCH */ 3146 261, /* (383) exprlist ::= nexprlist */ 3147 284, /* (384) nmnum ::= plus_num */ 3148 284, /* (385) nmnum ::= nm */ 3149 284, /* (386) nmnum ::= ON */ 3150 284, /* (387) nmnum ::= DELETE */ 3151 284, /* (388) nmnum ::= DEFAULT */ 3152 211, /* (389) plus_num ::= INTEGER|FLOAT */ 3153 289, /* (390) foreach_clause ::= */ 3154 289, /* (391) foreach_clause ::= FOR EACH ROW */ 3155 292, /* (392) trnm ::= nm */ 3156 293, /* (393) tridxby ::= */ 3157 294, /* (394) database_kw_opt ::= DATABASE */ 3158 294, /* (395) database_kw_opt ::= */ 3159 297, /* (396) kwcolumn_opt ::= */ 3160 297, /* (397) kwcolumn_opt ::= COLUMNKW */ 3161 299, /* (398) vtabarglist ::= vtabarg */ 3162 299, /* (399) vtabarglist ::= vtabarglist COMMA vtabarg */ 3163 300, /* (400) vtabarg ::= vtabarg vtabargtoken */ 3164 303, /* (401) anylist ::= */ 3165 303, /* (402) anylist ::= anylist LP anylist RP */ 3166 303, /* (403) anylist ::= anylist ANY */ 3167 266, /* (404) with ::= */ 3168 }; 3169 3170 /* For rule J, yyRuleInfoNRhs[J] contains the negative of the number 3171 ** of symbols on the right-hand side of that rule. */ 3172 static const signed char yyRuleInfoNRhs[] = { 3173 -1, /* (0) explain ::= EXPLAIN */ 3174 -3, /* (1) explain ::= EXPLAIN QUERY PLAN */ 3175 -1, /* (2) cmdx ::= cmd */ 3176 -3, /* (3) cmd ::= BEGIN transtype trans_opt */ 3177 0, /* (4) transtype ::= */ 3178 -1, /* (5) transtype ::= DEFERRED */ 3179 -1, /* (6) transtype ::= IMMEDIATE */ 3180 -1, /* (7) transtype ::= EXCLUSIVE */ 3181 -2, /* (8) cmd ::= COMMIT|END trans_opt */ 3182 -2, /* (9) cmd ::= ROLLBACK trans_opt */ 3183 -2, /* (10) cmd ::= SAVEPOINT nm */ 3184 -3, /* (11) cmd ::= RELEASE savepoint_opt nm */ 3185 -5, /* (12) cmd ::= ROLLBACK trans_opt TO savepoint_opt nm */ 3186 -6, /* (13) create_table ::= createkw temp TABLE ifnotexists nm dbnm */ 3187 -1, /* (14) createkw ::= CREATE */ 3188 0, /* (15) ifnotexists ::= */ 3189 -3, /* (16) ifnotexists ::= IF NOT EXISTS */ 3190 -1, /* (17) temp ::= TEMP */ 3191 0, /* (18) temp ::= */ 3192 -5, /* (19) create_table_args ::= LP columnlist conslist_opt RP table_option_set */ 3193 -2, /* (20) create_table_args ::= AS select */ 3194 0, /* (21) table_option_set ::= */ 3195 -3, /* (22) table_option_set ::= table_option_set COMMA table_option */ 3196 -2, /* (23) table_option ::= WITHOUT nm */ 3197 -1, /* (24) table_option ::= nm */ 3198 -2, /* (25) columnname ::= nm typetoken */ 3199 0, /* (26) typetoken ::= */ 3200 -4, /* (27) typetoken ::= typename LP signed RP */ 3201 -6, /* (28) typetoken ::= typename LP signed COMMA signed RP */ 3202 -2, /* (29) typename ::= typename ID|STRING */ 3203 0, /* (30) scanpt ::= */ 3204 0, /* (31) scantok ::= */ 3205 -2, /* (32) ccons ::= CONSTRAINT nm */ 3206 -3, /* (33) ccons ::= DEFAULT scantok term */ 3207 -4, /* (34) ccons ::= DEFAULT LP expr RP */ 3208 -4, /* (35) ccons ::= DEFAULT PLUS scantok term */ 3209 -4, /* (36) ccons ::= DEFAULT MINUS scantok term */ 3210 -3, /* (37) ccons ::= DEFAULT scantok ID|INDEXED */ 3211 -3, /* (38) ccons ::= NOT NULL onconf */ 3212 -5, /* (39) ccons ::= PRIMARY KEY sortorder onconf autoinc */ 3213 -2, /* (40) ccons ::= UNIQUE onconf */ 3214 -4, /* (41) ccons ::= CHECK LP expr RP */ 3215 -4, /* (42) ccons ::= REFERENCES nm eidlist_opt refargs */ 3216 -1, /* (43) ccons ::= defer_subclause */ 3217 -2, /* (44) ccons ::= COLLATE ID|STRING */ 3218 -3, /* (45) generated ::= LP expr RP */ 3219 -4, /* (46) generated ::= LP expr RP ID */ 3220 0, /* (47) autoinc ::= */ 3221 -1, /* (48) autoinc ::= AUTOINCR */ 3222 0, /* (49) refargs ::= */ 3223 -2, /* (50) refargs ::= refargs refarg */ 3224 -2, /* (51) refarg ::= MATCH nm */ 3225 -3, /* (52) refarg ::= ON INSERT refact */ 3226 -3, /* (53) refarg ::= ON DELETE refact */ 3227 -3, /* (54) refarg ::= ON UPDATE refact */ 3228 -2, /* (55) refact ::= SET NULL */ 3229 -2, /* (56) refact ::= SET DEFAULT */ 3230 -1, /* (57) refact ::= CASCADE */ 3231 -1, /* (58) refact ::= RESTRICT */ 3232 -2, /* (59) refact ::= NO ACTION */ 3233 -3, /* (60) defer_subclause ::= NOT DEFERRABLE init_deferred_pred_opt */ 3234 -2, /* (61) defer_subclause ::= DEFERRABLE init_deferred_pred_opt */ 3235 0, /* (62) init_deferred_pred_opt ::= */ 3236 -2, /* (63) init_deferred_pred_opt ::= INITIALLY DEFERRED */ 3237 -2, /* (64) init_deferred_pred_opt ::= INITIALLY IMMEDIATE */ 3238 0, /* (65) conslist_opt ::= */ 3239 -1, /* (66) tconscomma ::= COMMA */ 3240 -2, /* (67) tcons ::= CONSTRAINT nm */ 3241 -7, /* (68) tcons ::= PRIMARY KEY LP sortlist autoinc RP onconf */ 3242 -5, /* (69) tcons ::= UNIQUE LP sortlist RP onconf */ 3243 -5, /* (70) tcons ::= CHECK LP expr RP onconf */ 3244 -10, /* (71) tcons ::= FOREIGN KEY LP eidlist RP REFERENCES nm eidlist_opt refargs defer_subclause_opt */ 3245 0, /* (72) defer_subclause_opt ::= */ 3246 0, /* (73) onconf ::= */ 3247 -3, /* (74) onconf ::= ON CONFLICT resolvetype */ 3248 0, /* (75) orconf ::= */ 3249 -2, /* (76) orconf ::= OR resolvetype */ 3250 -1, /* (77) resolvetype ::= IGNORE */ 3251 -1, /* (78) resolvetype ::= REPLACE */ 3252 -4, /* (79) cmd ::= DROP TABLE ifexists fullname */ 3253 -2, /* (80) ifexists ::= IF EXISTS */ 3254 0, /* (81) ifexists ::= */ 3255 -9, /* (82) cmd ::= createkw temp VIEW ifnotexists nm dbnm eidlist_opt AS select */ 3256 -4, /* (83) cmd ::= DROP VIEW ifexists fullname */ 3257 -1, /* (84) cmd ::= select */ 3258 -3, /* (85) select ::= WITH wqlist selectnowith */ 3259 -4, /* (86) select ::= WITH RECURSIVE wqlist selectnowith */ 3260 -1, /* (87) select ::= selectnowith */ 3261 -3, /* (88) selectnowith ::= selectnowith multiselect_op oneselect */ 3262 -1, /* (89) multiselect_op ::= UNION */ 3263 -2, /* (90) multiselect_op ::= UNION ALL */ 3264 -1, /* (91) multiselect_op ::= EXCEPT|INTERSECT */ 3265 -9, /* (92) oneselect ::= SELECT distinct selcollist from where_opt groupby_opt having_opt orderby_opt limit_opt */ 3266 -10, /* (93) oneselect ::= SELECT distinct selcollist from where_opt groupby_opt having_opt window_clause orderby_opt limit_opt */ 3267 -4, /* (94) values ::= VALUES LP nexprlist RP */ 3268 -5, /* (95) values ::= values COMMA LP nexprlist RP */ 3269 -1, /* (96) distinct ::= DISTINCT */ 3270 -1, /* (97) distinct ::= ALL */ 3271 0, /* (98) distinct ::= */ 3272 0, /* (99) sclp ::= */ 3273 -5, /* (100) selcollist ::= sclp scanpt expr scanpt as */ 3274 -3, /* (101) selcollist ::= sclp scanpt STAR */ 3275 -5, /* (102) selcollist ::= sclp scanpt nm DOT STAR */ 3276 -2, /* (103) as ::= AS nm */ 3277 0, /* (104) as ::= */ 3278 0, /* (105) from ::= */ 3279 -2, /* (106) from ::= FROM seltablist */ 3280 -2, /* (107) stl_prefix ::= seltablist joinop */ 3281 0, /* (108) stl_prefix ::= */ 3282 -5, /* (109) seltablist ::= stl_prefix nm dbnm as on_using */ 3283 -6, /* (110) seltablist ::= stl_prefix nm dbnm as indexed_by on_using */ 3284 -8, /* (111) seltablist ::= stl_prefix nm dbnm LP exprlist RP as on_using */ 3285 -6, /* (112) seltablist ::= stl_prefix LP select RP as on_using */ 3286 -6, /* (113) seltablist ::= stl_prefix LP seltablist RP as on_using */ 3287 0, /* (114) dbnm ::= */ 3288 -2, /* (115) dbnm ::= DOT nm */ 3289 -1, /* (116) fullname ::= nm */ 3290 -3, /* (117) fullname ::= nm DOT nm */ 3291 -1, /* (118) xfullname ::= nm */ 3292 -3, /* (119) xfullname ::= nm DOT nm */ 3293 -5, /* (120) xfullname ::= nm DOT nm AS nm */ 3294 -3, /* (121) xfullname ::= nm AS nm */ 3295 -1, /* (122) joinop ::= COMMA|JOIN */ 3296 -2, /* (123) joinop ::= JOIN_KW JOIN */ 3297 -3, /* (124) joinop ::= JOIN_KW nm JOIN */ 3298 -4, /* (125) joinop ::= JOIN_KW nm nm JOIN */ 3299 -2, /* (126) on_using ::= ON expr */ 3300 -4, /* (127) on_using ::= USING LP idlist RP */ 3301 0, /* (128) on_using ::= */ 3302 0, /* (129) indexed_opt ::= */ 3303 -3, /* (130) indexed_by ::= INDEXED BY nm */ 3304 -2, /* (131) indexed_by ::= NOT INDEXED */ 3305 0, /* (132) orderby_opt ::= */ 3306 -3, /* (133) orderby_opt ::= ORDER BY sortlist */ 3307 -5, /* (134) sortlist ::= sortlist COMMA expr sortorder nulls */ 3308 -3, /* (135) sortlist ::= expr sortorder nulls */ 3309 -1, /* (136) sortorder ::= ASC */ 3310 -1, /* (137) sortorder ::= DESC */ 3311 0, /* (138) sortorder ::= */ 3312 -2, /* (139) nulls ::= NULLS FIRST */ 3313 -2, /* (140) nulls ::= NULLS LAST */ 3314 0, /* (141) nulls ::= */ 3315 0, /* (142) groupby_opt ::= */ 3316 -3, /* (143) groupby_opt ::= GROUP BY nexprlist */ 3317 0, /* (144) having_opt ::= */ 3318 -2, /* (145) having_opt ::= HAVING expr */ 3319 0, /* (146) limit_opt ::= */ 3320 -2, /* (147) limit_opt ::= LIMIT expr */ 3321 -4, /* (148) limit_opt ::= LIMIT expr OFFSET expr */ 3322 -4, /* (149) limit_opt ::= LIMIT expr COMMA expr */ 3323 -6, /* (150) cmd ::= with DELETE FROM xfullname indexed_opt where_opt_ret */ 3324 0, /* (151) where_opt ::= */ 3325 -2, /* (152) where_opt ::= WHERE expr */ 3326 0, /* (153) where_opt_ret ::= */ 3327 -2, /* (154) where_opt_ret ::= WHERE expr */ 3328 -2, /* (155) where_opt_ret ::= RETURNING selcollist */ 3329 -4, /* (156) where_opt_ret ::= WHERE expr RETURNING selcollist */ 3330 -9, /* (157) cmd ::= with UPDATE orconf xfullname indexed_opt SET setlist from where_opt_ret */ 3331 -5, /* (158) setlist ::= setlist COMMA nm EQ expr */ 3332 -7, /* (159) setlist ::= setlist COMMA LP idlist RP EQ expr */ 3333 -3, /* (160) setlist ::= nm EQ expr */ 3334 -5, /* (161) setlist ::= LP idlist RP EQ expr */ 3335 -7, /* (162) cmd ::= with insert_cmd INTO xfullname idlist_opt select upsert */ 3336 -8, /* (163) cmd ::= with insert_cmd INTO xfullname idlist_opt DEFAULT VALUES returning */ 3337 0, /* (164) upsert ::= */ 3338 -2, /* (165) upsert ::= RETURNING selcollist */ 3339 -12, /* (166) upsert ::= ON CONFLICT LP sortlist RP where_opt DO UPDATE SET setlist where_opt upsert */ 3340 -9, /* (167) upsert ::= ON CONFLICT LP sortlist RP where_opt DO NOTHING upsert */ 3341 -5, /* (168) upsert ::= ON CONFLICT DO NOTHING returning */ 3342 -8, /* (169) upsert ::= ON CONFLICT DO UPDATE SET setlist where_opt returning */ 3343 -2, /* (170) returning ::= RETURNING selcollist */ 3344 -2, /* (171) insert_cmd ::= INSERT orconf */ 3345 -1, /* (172) insert_cmd ::= REPLACE */ 3346 0, /* (173) idlist_opt ::= */ 3347 -3, /* (174) idlist_opt ::= LP idlist RP */ 3348 -3, /* (175) idlist ::= idlist COMMA nm */ 3349 -1, /* (176) idlist ::= nm */ 3350 -3, /* (177) expr ::= LP expr RP */ 3351 -1, /* (178) expr ::= ID|INDEXED */ 3352 -1, /* (179) expr ::= JOIN_KW */ 3353 -3, /* (180) expr ::= nm DOT nm */ 3354 -5, /* (181) expr ::= nm DOT nm DOT nm */ 3355 -1, /* (182) term ::= NULL|FLOAT|BLOB */ 3356 -1, /* (183) term ::= STRING */ 3357 -1, /* (184) term ::= INTEGER */ 3358 -1, /* (185) expr ::= VARIABLE */ 3359 -3, /* (186) expr ::= expr COLLATE ID|STRING */ 3360 -6, /* (187) expr ::= CAST LP expr AS typetoken RP */ 3361 -5, /* (188) expr ::= ID|INDEXED LP distinct exprlist RP */ 3362 -4, /* (189) expr ::= ID|INDEXED LP STAR RP */ 3363 -6, /* (190) expr ::= ID|INDEXED LP distinct exprlist RP filter_over */ 3364 -5, /* (191) expr ::= ID|INDEXED LP STAR RP filter_over */ 3365 -1, /* (192) term ::= CTIME_KW */ 3366 -5, /* (193) expr ::= LP nexprlist COMMA expr RP */ 3367 -3, /* (194) expr ::= expr AND expr */ 3368 -3, /* (195) expr ::= expr OR expr */ 3369 -3, /* (196) expr ::= expr LT|GT|GE|LE expr */ 3370 -3, /* (197) expr ::= expr EQ|NE expr */ 3371 -3, /* (198) expr ::= expr BITAND|BITOR|LSHIFT|RSHIFT expr */ 3372 -3, /* (199) expr ::= expr PLUS|MINUS expr */ 3373 -3, /* (200) expr ::= expr STAR|SLASH|REM expr */ 3374 -3, /* (201) expr ::= expr CONCAT expr */ 3375 -2, /* (202) likeop ::= NOT LIKE_KW|MATCH */ 3376 -3, /* (203) expr ::= expr likeop expr */ 3377 -5, /* (204) expr ::= expr likeop expr ESCAPE expr */ 3378 -2, /* (205) expr ::= expr ISNULL|NOTNULL */ 3379 -3, /* (206) expr ::= expr NOT NULL */ 3380 -3, /* (207) expr ::= expr IS expr */ 3381 -4, /* (208) expr ::= expr IS NOT expr */ 3382 -6, /* (209) expr ::= expr IS NOT DISTINCT FROM expr */ 3383 -5, /* (210) expr ::= expr IS DISTINCT FROM expr */ 3384 -2, /* (211) expr ::= NOT expr */ 3385 -2, /* (212) expr ::= BITNOT expr */ 3386 -2, /* (213) expr ::= PLUS|MINUS expr */ 3387 -3, /* (214) expr ::= expr PTR expr */ 3388 -1, /* (215) between_op ::= BETWEEN */ 3389 -2, /* (216) between_op ::= NOT BETWEEN */ 3390 -5, /* (217) expr ::= expr between_op expr AND expr */ 3391 -1, /* (218) in_op ::= IN */ 3392 -2, /* (219) in_op ::= NOT IN */ 3393 -5, /* (220) expr ::= expr in_op LP exprlist RP */ 3394 -3, /* (221) expr ::= LP select RP */ 3395 -5, /* (222) expr ::= expr in_op LP select RP */ 3396 -5, /* (223) expr ::= expr in_op nm dbnm paren_exprlist */ 3397 -4, /* (224) expr ::= EXISTS LP select RP */ 3398 -5, /* (225) expr ::= CASE case_operand case_exprlist case_else END */ 3399 -5, /* (226) case_exprlist ::= case_exprlist WHEN expr THEN expr */ 3400 -4, /* (227) case_exprlist ::= WHEN expr THEN expr */ 3401 -2, /* (228) case_else ::= ELSE expr */ 3402 0, /* (229) case_else ::= */ 3403 -1, /* (230) case_operand ::= expr */ 3404 0, /* (231) case_operand ::= */ 3405 0, /* (232) exprlist ::= */ 3406 -3, /* (233) nexprlist ::= nexprlist COMMA expr */ 3407 -1, /* (234) nexprlist ::= expr */ 3408 0, /* (235) paren_exprlist ::= */ 3409 -3, /* (236) paren_exprlist ::= LP exprlist RP */ 3410 -12, /* (237) cmd ::= createkw uniqueflag INDEX ifnotexists nm dbnm ON nm LP sortlist RP where_opt */ 3411 -1, /* (238) uniqueflag ::= UNIQUE */ 3412 0, /* (239) uniqueflag ::= */ 3413 0, /* (240) eidlist_opt ::= */ 3414 -3, /* (241) eidlist_opt ::= LP eidlist RP */ 3415 -5, /* (242) eidlist ::= eidlist COMMA nm collate sortorder */ 3416 -3, /* (243) eidlist ::= nm collate sortorder */ 3417 0, /* (244) collate ::= */ 3418 -2, /* (245) collate ::= COLLATE ID|STRING */ 3419 -4, /* (246) cmd ::= DROP INDEX ifexists fullname */ 3420 -2, /* (247) cmd ::= VACUUM vinto */ 3421 -3, /* (248) cmd ::= VACUUM nm vinto */ 3422 -2, /* (249) vinto ::= INTO expr */ 3423 0, /* (250) vinto ::= */ 3424 -3, /* (251) cmd ::= PRAGMA nm dbnm */ 3425 -5, /* (252) cmd ::= PRAGMA nm dbnm EQ nmnum */ 3426 -6, /* (253) cmd ::= PRAGMA nm dbnm LP nmnum RP */ 3427 -5, /* (254) cmd ::= PRAGMA nm dbnm EQ minus_num */ 3428 -6, /* (255) cmd ::= PRAGMA nm dbnm LP minus_num RP */ 3429 -2, /* (256) plus_num ::= PLUS INTEGER|FLOAT */ 3430 -2, /* (257) minus_num ::= MINUS INTEGER|FLOAT */ 3431 -5, /* (258) cmd ::= createkw trigger_decl BEGIN trigger_cmd_list END */ 3432 -11, /* (259) trigger_decl ::= temp TRIGGER ifnotexists nm dbnm trigger_time trigger_event ON fullname foreach_clause when_clause */ 3433 -1, /* (260) trigger_time ::= BEFORE|AFTER */ 3434 -2, /* (261) trigger_time ::= INSTEAD OF */ 3435 0, /* (262) trigger_time ::= */ 3436 -1, /* (263) trigger_event ::= DELETE|INSERT */ 3437 -1, /* (264) trigger_event ::= UPDATE */ 3438 -3, /* (265) trigger_event ::= UPDATE OF idlist */ 3439 0, /* (266) when_clause ::= */ 3440 -2, /* (267) when_clause ::= WHEN expr */ 3441 -3, /* (268) trigger_cmd_list ::= trigger_cmd_list trigger_cmd SEMI */ 3442 -2, /* (269) trigger_cmd_list ::= trigger_cmd SEMI */ 3443 -3, /* (270) trnm ::= nm DOT nm */ 3444 -3, /* (271) tridxby ::= INDEXED BY nm */ 3445 -2, /* (272) tridxby ::= NOT INDEXED */ 3446 -9, /* (273) trigger_cmd ::= UPDATE orconf trnm tridxby SET setlist from where_opt scanpt */ 3447 -8, /* (274) trigger_cmd ::= scanpt insert_cmd INTO trnm idlist_opt select upsert scanpt */ 3448 -6, /* (275) trigger_cmd ::= DELETE FROM trnm tridxby where_opt scanpt */ 3449 -3, /* (276) trigger_cmd ::= scanpt select scanpt */ 3450 -4, /* (277) expr ::= RAISE LP IGNORE RP */ 3451 -6, /* (278) expr ::= RAISE LP raisetype COMMA nm RP */ 3452 -1, /* (279) raisetype ::= ROLLBACK */ 3453 -1, /* (280) raisetype ::= ABORT */ 3454 -1, /* (281) raisetype ::= FAIL */ 3455 -4, /* (282) cmd ::= DROP TRIGGER ifexists fullname */ 3456 -6, /* (283) cmd ::= ATTACH database_kw_opt expr AS expr key_opt */ 3457 -3, /* (284) cmd ::= DETACH database_kw_opt expr */ 3458 0, /* (285) key_opt ::= */ 3459 -2, /* (286) key_opt ::= KEY expr */ 3460 -1, /* (287) cmd ::= REINDEX */ 3461 -3, /* (288) cmd ::= REINDEX nm dbnm */ 3462 -1, /* (289) cmd ::= ANALYZE */ 3463 -3, /* (290) cmd ::= ANALYZE nm dbnm */ 3464 -6, /* (291) cmd ::= ALTER TABLE fullname RENAME TO nm */ 3465 -7, /* (292) cmd ::= ALTER TABLE add_column_fullname ADD kwcolumn_opt columnname carglist */ 3466 -6, /* (293) cmd ::= ALTER TABLE fullname DROP kwcolumn_opt nm */ 3467 -1, /* (294) add_column_fullname ::= fullname */ 3468 -8, /* (295) cmd ::= ALTER TABLE fullname RENAME kwcolumn_opt nm TO nm */ 3469 -1, /* (296) cmd ::= create_vtab */ 3470 -4, /* (297) cmd ::= create_vtab LP vtabarglist RP */ 3471 -8, /* (298) create_vtab ::= createkw VIRTUAL TABLE ifnotexists nm dbnm USING nm */ 3472 0, /* (299) vtabarg ::= */ 3473 -1, /* (300) vtabargtoken ::= ANY */ 3474 -3, /* (301) vtabargtoken ::= lp anylist RP */ 3475 -1, /* (302) lp ::= LP */ 3476 -2, /* (303) with ::= WITH wqlist */ 3477 -3, /* (304) with ::= WITH RECURSIVE wqlist */ 3478 -1, /* (305) wqas ::= AS */ 3479 -2, /* (306) wqas ::= AS MATERIALIZED */ 3480 -3, /* (307) wqas ::= AS NOT MATERIALIZED */ 3481 -6, /* (308) wqitem ::= nm eidlist_opt wqas LP select RP */ 3482 -1, /* (309) wqlist ::= wqitem */ 3483 -3, /* (310) wqlist ::= wqlist COMMA wqitem */ 3484 -1, /* (311) windowdefn_list ::= windowdefn */ 3485 -3, /* (312) windowdefn_list ::= windowdefn_list COMMA windowdefn */ 3486 -5, /* (313) windowdefn ::= nm AS LP window RP */ 3487 -5, /* (314) window ::= PARTITION BY nexprlist orderby_opt frame_opt */ 3488 -6, /* (315) window ::= nm PARTITION BY nexprlist orderby_opt frame_opt */ 3489 -4, /* (316) window ::= ORDER BY sortlist frame_opt */ 3490 -5, /* (317) window ::= nm ORDER BY sortlist frame_opt */ 3491 -1, /* (318) window ::= frame_opt */ 3492 -2, /* (319) window ::= nm frame_opt */ 3493 0, /* (320) frame_opt ::= */ 3494 -3, /* (321) frame_opt ::= range_or_rows frame_bound_s frame_exclude_opt */ 3495 -6, /* (322) frame_opt ::= range_or_rows BETWEEN frame_bound_s AND frame_bound_e frame_exclude_opt */ 3496 -1, /* (323) range_or_rows ::= RANGE|ROWS|GROUPS */ 3497 -1, /* (324) frame_bound_s ::= frame_bound */ 3498 -2, /* (325) frame_bound_s ::= UNBOUNDED PRECEDING */ 3499 -1, /* (326) frame_bound_e ::= frame_bound */ 3500 -2, /* (327) frame_bound_e ::= UNBOUNDED FOLLOWING */ 3501 -2, /* (328) frame_bound ::= expr PRECEDING|FOLLOWING */ 3502 -2, /* (329) frame_bound ::= CURRENT ROW */ 3503 0, /* (330) frame_exclude_opt ::= */ 3504 -2, /* (331) frame_exclude_opt ::= EXCLUDE frame_exclude */ 3505 -2, /* (332) frame_exclude ::= NO OTHERS */ 3506 -2, /* (333) frame_exclude ::= CURRENT ROW */ 3507 -1, /* (334) frame_exclude ::= GROUP|TIES */ 3508 -2, /* (335) window_clause ::= WINDOW windowdefn_list */ 3509 -2, /* (336) filter_over ::= filter_clause over_clause */ 3510 -1, /* (337) filter_over ::= over_clause */ 3511 -1, /* (338) filter_over ::= filter_clause */ 3512 -4, /* (339) over_clause ::= OVER LP window RP */ 3513 -2, /* (340) over_clause ::= OVER nm */ 3514 -5, /* (341) filter_clause ::= FILTER LP WHERE expr RP */ 3515 -1, /* (342) input ::= cmdlist */ 3516 -2, /* (343) cmdlist ::= cmdlist ecmd */ 3517 -1, /* (344) cmdlist ::= ecmd */ 3518 -1, /* (345) ecmd ::= SEMI */ 3519 -2, /* (346) ecmd ::= cmdx SEMI */ 3520 -3, /* (347) ecmd ::= explain cmdx SEMI */ 3521 0, /* (348) trans_opt ::= */ 3522 -1, /* (349) trans_opt ::= TRANSACTION */ 3523 -2, /* (350) trans_opt ::= TRANSACTION nm */ 3524 -1, /* (351) savepoint_opt ::= SAVEPOINT */ 3525 0, /* (352) savepoint_opt ::= */ 3526 -2, /* (353) cmd ::= create_table create_table_args */ 3527 -1, /* (354) table_option_set ::= table_option */ 3528 -4, /* (355) columnlist ::= columnlist COMMA columnname carglist */ 3529 -2, /* (356) columnlist ::= columnname carglist */ 3530 -1, /* (357) nm ::= ID|INDEXED */ 3531 -1, /* (358) nm ::= STRING */ 3532 -1, /* (359) nm ::= JOIN_KW */ 3533 -1, /* (360) typetoken ::= typename */ 3534 -1, /* (361) typename ::= ID|STRING */ 3535 -1, /* (362) signed ::= plus_num */ 3536 -1, /* (363) signed ::= minus_num */ 3537 -2, /* (364) carglist ::= carglist ccons */ 3538 0, /* (365) carglist ::= */ 3539 -2, /* (366) ccons ::= NULL onconf */ 3540 -4, /* (367) ccons ::= GENERATED ALWAYS AS generated */ 3541 -2, /* (368) ccons ::= AS generated */ 3542 -2, /* (369) conslist_opt ::= COMMA conslist */ 3543 -3, /* (370) conslist ::= conslist tconscomma tcons */ 3544 -1, /* (371) conslist ::= tcons */ 3545 0, /* (372) tconscomma ::= */ 3546 -1, /* (373) defer_subclause_opt ::= defer_subclause */ 3547 -1, /* (374) resolvetype ::= raisetype */ 3548 -1, /* (375) selectnowith ::= oneselect */ 3549 -1, /* (376) oneselect ::= values */ 3550 -2, /* (377) sclp ::= selcollist COMMA */ 3551 -1, /* (378) as ::= ID|STRING */ 3552 -1, /* (379) indexed_opt ::= indexed_by */ 3553 0, /* (380) returning ::= */ 3554 -1, /* (381) expr ::= term */ 3555 -1, /* (382) likeop ::= LIKE_KW|MATCH */ 3556 -1, /* (383) exprlist ::= nexprlist */ 3557 -1, /* (384) nmnum ::= plus_num */ 3558 -1, /* (385) nmnum ::= nm */ 3559 -1, /* (386) nmnum ::= ON */ 3560 -1, /* (387) nmnum ::= DELETE */ 3561 -1, /* (388) nmnum ::= DEFAULT */ 3562 -1, /* (389) plus_num ::= INTEGER|FLOAT */ 3563 0, /* (390) foreach_clause ::= */ 3564 -3, /* (391) foreach_clause ::= FOR EACH ROW */ 3565 -1, /* (392) trnm ::= nm */ 3566 0, /* (393) tridxby ::= */ 3567 -1, /* (394) database_kw_opt ::= DATABASE */ 3568 0, /* (395) database_kw_opt ::= */ 3569 0, /* (396) kwcolumn_opt ::= */ 3570 -1, /* (397) kwcolumn_opt ::= COLUMNKW */ 3571 -1, /* (398) vtabarglist ::= vtabarg */ 3572 -3, /* (399) vtabarglist ::= vtabarglist COMMA vtabarg */ 3573 -2, /* (400) vtabarg ::= vtabarg vtabargtoken */ 3574 0, /* (401) anylist ::= */ 3575 -4, /* (402) anylist ::= anylist LP anylist RP */ 3576 -2, /* (403) anylist ::= anylist ANY */ 3577 0, /* (404) with ::= */ 3578 }; 3579 3580 static void yy_accept(yyParser*); /* Forward Declaration */ 3581 3582 /* 3583 ** Perform a reduce action and the shift that must immediately 3584 ** follow the reduce. 3585 ** 3586 ** The yyLookahead and yyLookaheadToken parameters provide reduce actions 3587 ** access to the lookahead token (if any). The yyLookahead will be YYNOCODE 3588 ** if the lookahead token has already been consumed. As this procedure is 3589 ** only called from one place, optimizing compilers will in-line it, which 3590 ** means that the extra parameters have no performance impact. 3591 */ 3592 static YYACTIONTYPE yy_reduce( 3593 yyParser *yypParser, /* The parser */ 3594 unsigned int yyruleno, /* Number of the rule by which to reduce */ 3595 int yyLookahead, /* Lookahead token, or YYNOCODE if none */ 3596 sqlite3ParserTOKENTYPE yyLookaheadToken /* Value of the lookahead token */ 3597 sqlite3ParserCTX_PDECL /* %extra_context */ 3598 ){ 3599 int yygoto; /* The next state */ 3600 YYACTIONTYPE yyact; /* The next action */ 3601 yyStackEntry *yymsp; /* The top of the parser's stack */ 3602 int yysize; /* Amount to pop the stack */ 3603 sqlite3ParserARG_FETCH 3604 (void)yyLookahead; 3605 (void)yyLookaheadToken; 3606 yymsp = yypParser->yytos; 3607 3608 switch( yyruleno ){ 3609 /* Beginning here are the reduction cases. A typical example 3610 ** follows: 3611 ** case 0: 3612 ** #line <lineno> <grammarfile> 3613 ** { ... } // User supplied code 3614 ** #line <lineno> <thisfile> 3615 ** break; 3616 */ 3617 /********** Begin reduce actions **********************************************/ 3618 YYMINORTYPE yylhsminor; 3619 case 0: /* explain ::= EXPLAIN */ 3620 #line 151 "parse.y" 3621 { pParse->explain = 1; } 3622 #line 3647 "parse.sql" 3623 break; 3624 case 1: /* explain ::= EXPLAIN QUERY PLAN */ 3625 #line 152 "parse.y" 3626 { pParse->explain = 2; } 3627 #line 3652 "parse.sql" 3628 break; 3629 case 2: /* cmdx ::= cmd */ 3630 #line 154 "parse.y" 3631 { sqlite3FinishCoding(pParse); } 3632 #line 3657 "parse.sql" 3633 break; 3634 case 3: /* cmd ::= BEGIN transtype trans_opt */ 3635 #line 159 "parse.y" 3636 {sqlite3BeginTransaction(pParse, yymsp[-1].minor.yy394);} 3637 #line 3662 "parse.sql" 3638 break; 3639 case 4: /* transtype ::= */ 3640 #line 164 "parse.y" 3641 {yymsp[1].minor.yy394 = TK_DEFERRED;} 3642 #line 3667 "parse.sql" 3643 break; 3644 case 5: /* transtype ::= DEFERRED */ 3645 case 6: /* transtype ::= IMMEDIATE */ yytestcase(yyruleno==6); 3646 case 7: /* transtype ::= EXCLUSIVE */ yytestcase(yyruleno==7); 3647 case 323: /* range_or_rows ::= RANGE|ROWS|GROUPS */ yytestcase(yyruleno==323); 3648 #line 165 "parse.y" 3649 {yymsp[0].minor.yy394 = yymsp[0].major; /*A-overwrites-X*/} 3650 #line 3675 "parse.sql" 3651 break; 3652 case 8: /* cmd ::= COMMIT|END trans_opt */ 3653 case 9: /* cmd ::= ROLLBACK trans_opt */ yytestcase(yyruleno==9); 3654 #line 168 "parse.y" 3655 {sqlite3EndTransaction(pParse,yymsp[-1].major);} 3656 #line 3681 "parse.sql" 3657 break; 3658 case 10: /* cmd ::= SAVEPOINT nm */ 3659 #line 173 "parse.y" 3660 { 3661 sqlite3Savepoint(pParse, SAVEPOINT_BEGIN, &yymsp[0].minor.yy0); 3662 } 3663 #line 3688 "parse.sql" 3664 break; 3665 case 11: /* cmd ::= RELEASE savepoint_opt nm */ 3666 #line 176 "parse.y" 3667 { 3668 sqlite3Savepoint(pParse, SAVEPOINT_RELEASE, &yymsp[0].minor.yy0); 3669 } 3670 #line 3695 "parse.sql" 3671 break; 3672 case 12: /* cmd ::= ROLLBACK trans_opt TO savepoint_opt nm */ 3673 #line 179 "parse.y" 3674 { 3675 sqlite3Savepoint(pParse, SAVEPOINT_ROLLBACK, &yymsp[0].minor.yy0); 3676 } 3677 #line 3702 "parse.sql" 3678 break; 3679 case 13: /* create_table ::= createkw temp TABLE ifnotexists nm dbnm */ 3680 #line 186 "parse.y" 3681 { 3682 sqlite3StartTable(pParse,&yymsp[-1].minor.yy0,&yymsp[0].minor.yy0,yymsp[-4].minor.yy394,0,0,yymsp[-2].minor.yy394); 3683 } 3684 #line 3709 "parse.sql" 3685 break; 3686 case 14: /* createkw ::= CREATE */ 3687 #line 189 "parse.y" 3688 {disableLookaside(pParse);} 3689 #line 3714 "parse.sql" 3690 break; 3691 case 15: /* ifnotexists ::= */ 3692 case 18: /* temp ::= */ yytestcase(yyruleno==18); 3693 case 47: /* autoinc ::= */ yytestcase(yyruleno==47); 3694 case 62: /* init_deferred_pred_opt ::= */ yytestcase(yyruleno==62); 3695 case 72: /* defer_subclause_opt ::= */ yytestcase(yyruleno==72); 3696 case 81: /* ifexists ::= */ yytestcase(yyruleno==81); 3697 case 98: /* distinct ::= */ yytestcase(yyruleno==98); 3698 case 244: /* collate ::= */ yytestcase(yyruleno==244); 3699 #line 192 "parse.y" 3700 {yymsp[1].minor.yy394 = 0;} 3701 #line 3726 "parse.sql" 3702 break; 3703 case 16: /* ifnotexists ::= IF NOT EXISTS */ 3704 #line 193 "parse.y" 3705 {yymsp[-2].minor.yy394 = 1;} 3706 #line 3731 "parse.sql" 3707 break; 3708 case 17: /* temp ::= TEMP */ 3709 #line 196 "parse.y" 3710 {yymsp[0].minor.yy394 = pParse->db->init.busy==0;} 3711 #line 3736 "parse.sql" 3712 break; 3713 case 19: /* create_table_args ::= LP columnlist conslist_opt RP table_option_set */ 3714 #line 199 "parse.y" 3715 { 3716 sqlite3EndTable(pParse,&yymsp[-2].minor.yy0,&yymsp[-1].minor.yy0,yymsp[0].minor.yy285,0); 3717 } 3718 #line 3743 "parse.sql" 3719 break; 3720 case 20: /* create_table_args ::= AS select */ 3721 #line 202 "parse.y" 3722 { 3723 sqlite3EndTable(pParse,0,0,0,yymsp[0].minor.yy47); 3724 sqlite3SelectDelete(pParse->db, yymsp[0].minor.yy47); 3725 } 3726 #line 3751 "parse.sql" 3727 break; 3728 case 21: /* table_option_set ::= */ 3729 #line 208 "parse.y" 3730 {yymsp[1].minor.yy285 = 0;} 3731 #line 3756 "parse.sql" 3732 break; 3733 case 22: /* table_option_set ::= table_option_set COMMA table_option */ 3734 #line 210 "parse.y" 3735 {yylhsminor.yy285 = yymsp[-2].minor.yy285|yymsp[0].minor.yy285;} 3736 #line 3761 "parse.sql" 3737 yymsp[-2].minor.yy285 = yylhsminor.yy285; 3738 break; 3739 case 23: /* table_option ::= WITHOUT nm */ 3740 #line 211 "parse.y" 3741 { 3742 if( yymsp[0].minor.yy0.n==5 && sqlite3_strnicmp(yymsp[0].minor.yy0.z,"rowid",5)==0 ){ 3743 yymsp[-1].minor.yy285 = TF_WithoutRowid | TF_NoVisibleRowid; 3744 }else{ 3745 yymsp[-1].minor.yy285 = 0; 3746 sqlite3ErrorMsg(pParse, "unknown table option: %.*s", yymsp[0].minor.yy0.n, yymsp[0].minor.yy0.z); 3747 } 3748 } 3749 #line 3774 "parse.sql" 3750 break; 3751 case 24: /* table_option ::= nm */ 3752 #line 219 "parse.y" 3753 { 3754 if( yymsp[0].minor.yy0.n==6 && sqlite3_strnicmp(yymsp[0].minor.yy0.z,"strict",6)==0 ){ 3755 yylhsminor.yy285 = TF_Strict; 3756 }else{ 3757 yylhsminor.yy285 = 0; 3758 sqlite3ErrorMsg(pParse, "unknown table option: %.*s", yymsp[0].minor.yy0.n, yymsp[0].minor.yy0.z); 3759 } 3760 } 3761 #line 3786 "parse.sql" 3762 yymsp[0].minor.yy285 = yylhsminor.yy285; 3763 break; 3764 case 25: /* columnname ::= nm typetoken */ 3765 #line 229 "parse.y" 3766 {sqlite3AddColumn(pParse,yymsp[-1].minor.yy0,yymsp[0].minor.yy0);} 3767 #line 3792 "parse.sql" 3768 break; 3769 case 26: /* typetoken ::= */ 3770 case 65: /* conslist_opt ::= */ yytestcase(yyruleno==65); 3771 case 104: /* as ::= */ yytestcase(yyruleno==104); 3772 #line 316 "parse.y" 3773 {yymsp[1].minor.yy0.n = 0; yymsp[1].minor.yy0.z = 0;} 3774 #line 3799 "parse.sql" 3775 break; 3776 case 27: /* typetoken ::= typename LP signed RP */ 3777 #line 318 "parse.y" 3778 { 3779 yymsp[-3].minor.yy0.n = (int)(&yymsp[0].minor.yy0.z[yymsp[0].minor.yy0.n] - yymsp[-3].minor.yy0.z); 3780 } 3781 #line 3806 "parse.sql" 3782 break; 3783 case 28: /* typetoken ::= typename LP signed COMMA signed RP */ 3784 #line 321 "parse.y" 3785 { 3786 yymsp[-5].minor.yy0.n = (int)(&yymsp[0].minor.yy0.z[yymsp[0].minor.yy0.n] - yymsp[-5].minor.yy0.z); 3787 } 3788 #line 3813 "parse.sql" 3789 break; 3790 case 29: /* typename ::= typename ID|STRING */ 3791 #line 326 "parse.y" 3792 {yymsp[-1].minor.yy0.n=yymsp[0].minor.yy0.n+(int)(yymsp[0].minor.yy0.z-yymsp[-1].minor.yy0.z);} 3793 #line 3818 "parse.sql" 3794 break; 3795 case 30: /* scanpt ::= */ 3796 #line 344 "parse.y" 3797 { 3798 assert( yyLookahead!=YYNOCODE ); 3799 yymsp[1].minor.yy522 = yyLookaheadToken.z; 3800 } 3801 #line 3826 "parse.sql" 3802 break; 3803 case 31: /* scantok ::= */ 3804 #line 348 "parse.y" 3805 { 3806 assert( yyLookahead!=YYNOCODE ); 3807 yymsp[1].minor.yy0 = yyLookaheadToken; 3808 } 3809 #line 3834 "parse.sql" 3810 break; 3811 case 32: /* ccons ::= CONSTRAINT nm */ 3812 case 67: /* tcons ::= CONSTRAINT nm */ yytestcase(yyruleno==67); 3813 #line 358 "parse.y" 3814 {pParse->constraintName = yymsp[0].minor.yy0;} 3815 #line 3840 "parse.sql" 3816 break; 3817 case 33: /* ccons ::= DEFAULT scantok term */ 3818 #line 360 "parse.y" 3819 {sqlite3AddDefaultValue(pParse,yymsp[0].minor.yy528,yymsp[-1].minor.yy0.z,&yymsp[-1].minor.yy0.z[yymsp[-1].minor.yy0.n]);} 3820 #line 3845 "parse.sql" 3821 break; 3822 case 34: /* ccons ::= DEFAULT LP expr RP */ 3823 #line 362 "parse.y" 3824 {sqlite3AddDefaultValue(pParse,yymsp[-1].minor.yy528,yymsp[-2].minor.yy0.z+1,yymsp[0].minor.yy0.z);} 3825 #line 3850 "parse.sql" 3826 break; 3827 case 35: /* ccons ::= DEFAULT PLUS scantok term */ 3828 #line 364 "parse.y" 3829 {sqlite3AddDefaultValue(pParse,yymsp[0].minor.yy528,yymsp[-2].minor.yy0.z,&yymsp[-1].minor.yy0.z[yymsp[-1].minor.yy0.n]);} 3830 #line 3855 "parse.sql" 3831 break; 3832 case 36: /* ccons ::= DEFAULT MINUS scantok term */ 3833 #line 365 "parse.y" 3834 { 3835 Expr *p = sqlite3PExpr(pParse, TK_UMINUS, yymsp[0].minor.yy528, 0); 3836 sqlite3AddDefaultValue(pParse,p,yymsp[-2].minor.yy0.z,&yymsp[-1].minor.yy0.z[yymsp[-1].minor.yy0.n]); 3837 } 3838 #line 3863 "parse.sql" 3839 break; 3840 case 37: /* ccons ::= DEFAULT scantok ID|INDEXED */ 3841 #line 369 "parse.y" 3842 { 3843 Expr *p = tokenExpr(pParse, TK_STRING, yymsp[0].minor.yy0); 3844 if( p ){ 3845 sqlite3ExprIdToTrueFalse(p); 3846 testcase( p->op==TK_TRUEFALSE && sqlite3ExprTruthValue(p) ); 3847 } 3848 sqlite3AddDefaultValue(pParse,p,yymsp[0].minor.yy0.z,yymsp[0].minor.yy0.z+yymsp[0].minor.yy0.n); 3849 } 3850 #line 3875 "parse.sql" 3851 break; 3852 case 38: /* ccons ::= NOT NULL onconf */ 3853 #line 382 "parse.y" 3854 {sqlite3AddNotNull(pParse, yymsp[0].minor.yy394);} 3855 #line 3880 "parse.sql" 3856 break; 3857 case 39: /* ccons ::= PRIMARY KEY sortorder onconf autoinc */ 3858 #line 384 "parse.y" 3859 {sqlite3AddPrimaryKey(pParse,0,yymsp[-1].minor.yy394,yymsp[0].minor.yy394,yymsp[-2].minor.yy394);} 3860 #line 3885 "parse.sql" 3861 break; 3862 case 40: /* ccons ::= UNIQUE onconf */ 3863 #line 385 "parse.y" 3864 {sqlite3CreateIndex(pParse,0,0,0,0,yymsp[0].minor.yy394,0,0,0,0, 3865 SQLITE_IDXTYPE_UNIQUE);} 3866 #line 3891 "parse.sql" 3867 break; 3868 case 41: /* ccons ::= CHECK LP expr RP */ 3869 #line 387 "parse.y" 3870 {sqlite3AddCheckConstraint(pParse,yymsp[-1].minor.yy528,yymsp[-2].minor.yy0.z,yymsp[0].minor.yy0.z);} 3871 #line 3896 "parse.sql" 3872 break; 3873 case 42: /* ccons ::= REFERENCES nm eidlist_opt refargs */ 3874 #line 389 "parse.y" 3875 {sqlite3CreateForeignKey(pParse,0,&yymsp[-2].minor.yy0,yymsp[-1].minor.yy322,yymsp[0].minor.yy394);} 3876 #line 3901 "parse.sql" 3877 break; 3878 case 43: /* ccons ::= defer_subclause */ 3879 #line 390 "parse.y" 3880 {sqlite3DeferForeignKey(pParse,yymsp[0].minor.yy394);} 3881 #line 3906 "parse.sql" 3882 break; 3883 case 44: /* ccons ::= COLLATE ID|STRING */ 3884 #line 391 "parse.y" 3885 {sqlite3AddCollateType(pParse, &yymsp[0].minor.yy0);} 3886 #line 3911 "parse.sql" 3887 break; 3888 case 45: /* generated ::= LP expr RP */ 3889 #line 394 "parse.y" 3890 {sqlite3AddGenerated(pParse,yymsp[-1].minor.yy528,0);} 3891 #line 3916 "parse.sql" 3892 break; 3893 case 46: /* generated ::= LP expr RP ID */ 3894 #line 395 "parse.y" 3895 {sqlite3AddGenerated(pParse,yymsp[-2].minor.yy528,&yymsp[0].minor.yy0);} 3896 #line 3921 "parse.sql" 3897 break; 3898 case 48: /* autoinc ::= AUTOINCR */ 3899 #line 400 "parse.y" 3900 {yymsp[0].minor.yy394 = 1;} 3901 #line 3926 "parse.sql" 3902 break; 3903 case 49: /* refargs ::= */ 3904 #line 408 "parse.y" 3905 { yymsp[1].minor.yy394 = OE_None*0x0101; /* EV: R-19803-45884 */} 3906 #line 3931 "parse.sql" 3907 break; 3908 case 50: /* refargs ::= refargs refarg */ 3909 #line 409 "parse.y" 3910 { yymsp[-1].minor.yy394 = (yymsp[-1].minor.yy394 & ~yymsp[0].minor.yy231.mask) | yymsp[0].minor.yy231.value; } 3911 #line 3936 "parse.sql" 3912 break; 3913 case 51: /* refarg ::= MATCH nm */ 3914 #line 411 "parse.y" 3915 { yymsp[-1].minor.yy231.value = 0; yymsp[-1].minor.yy231.mask = 0x000000; } 3916 #line 3941 "parse.sql" 3917 break; 3918 case 52: /* refarg ::= ON INSERT refact */ 3919 #line 412 "parse.y" 3920 { yymsp[-2].minor.yy231.value = 0; yymsp[-2].minor.yy231.mask = 0x000000; } 3921 #line 3946 "parse.sql" 3922 break; 3923 case 53: /* refarg ::= ON DELETE refact */ 3924 #line 413 "parse.y" 3925 { yymsp[-2].minor.yy231.value = yymsp[0].minor.yy394; yymsp[-2].minor.yy231.mask = 0x0000ff; } 3926 #line 3951 "parse.sql" 3927 break; 3928 case 54: /* refarg ::= ON UPDATE refact */ 3929 #line 414 "parse.y" 3930 { yymsp[-2].minor.yy231.value = yymsp[0].minor.yy394<<8; yymsp[-2].minor.yy231.mask = 0x00ff00; } 3931 #line 3956 "parse.sql" 3932 break; 3933 case 55: /* refact ::= SET NULL */ 3934 #line 416 "parse.y" 3935 { yymsp[-1].minor.yy394 = OE_SetNull; /* EV: R-33326-45252 */} 3936 #line 3961 "parse.sql" 3937 break; 3938 case 56: /* refact ::= SET DEFAULT */ 3939 #line 417 "parse.y" 3940 { yymsp[-1].minor.yy394 = OE_SetDflt; /* EV: R-33326-45252 */} 3941 #line 3966 "parse.sql" 3942 break; 3943 case 57: /* refact ::= CASCADE */ 3944 #line 418 "parse.y" 3945 { yymsp[0].minor.yy394 = OE_Cascade; /* EV: R-33326-45252 */} 3946 #line 3971 "parse.sql" 3947 break; 3948 case 58: /* refact ::= RESTRICT */ 3949 #line 419 "parse.y" 3950 { yymsp[0].minor.yy394 = OE_Restrict; /* EV: R-33326-45252 */} 3951 #line 3976 "parse.sql" 3952 break; 3953 case 59: /* refact ::= NO ACTION */ 3954 #line 420 "parse.y" 3955 { yymsp[-1].minor.yy394 = OE_None; /* EV: R-33326-45252 */} 3956 #line 3981 "parse.sql" 3957 break; 3958 case 60: /* defer_subclause ::= NOT DEFERRABLE init_deferred_pred_opt */ 3959 #line 422 "parse.y" 3960 {yymsp[-2].minor.yy394 = 0;} 3961 #line 3986 "parse.sql" 3962 break; 3963 case 61: /* defer_subclause ::= DEFERRABLE init_deferred_pred_opt */ 3964 case 76: /* orconf ::= OR resolvetype */ yytestcase(yyruleno==76); 3965 case 171: /* insert_cmd ::= INSERT orconf */ yytestcase(yyruleno==171); 3966 #line 423 "parse.y" 3967 {yymsp[-1].minor.yy394 = yymsp[0].minor.yy394;} 3968 #line 3993 "parse.sql" 3969 break; 3970 case 63: /* init_deferred_pred_opt ::= INITIALLY DEFERRED */ 3971 case 80: /* ifexists ::= IF EXISTS */ yytestcase(yyruleno==80); 3972 case 216: /* between_op ::= NOT BETWEEN */ yytestcase(yyruleno==216); 3973 case 219: /* in_op ::= NOT IN */ yytestcase(yyruleno==219); 3974 case 245: /* collate ::= COLLATE ID|STRING */ yytestcase(yyruleno==245); 3975 #line 426 "parse.y" 3976 {yymsp[-1].minor.yy394 = 1;} 3977 #line 4002 "parse.sql" 3978 break; 3979 case 64: /* init_deferred_pred_opt ::= INITIALLY IMMEDIATE */ 3980 #line 427 "parse.y" 3981 {yymsp[-1].minor.yy394 = 0;} 3982 #line 4007 "parse.sql" 3983 break; 3984 case 66: /* tconscomma ::= COMMA */ 3985 #line 433 "parse.y" 3986 {pParse->constraintName.n = 0;} 3987 #line 4012 "parse.sql" 3988 break; 3989 case 68: /* tcons ::= PRIMARY KEY LP sortlist autoinc RP onconf */ 3990 #line 437 "parse.y" 3991 {sqlite3AddPrimaryKey(pParse,yymsp[-3].minor.yy322,yymsp[0].minor.yy394,yymsp[-2].minor.yy394,0);} 3992 #line 4017 "parse.sql" 3993 break; 3994 case 69: /* tcons ::= UNIQUE LP sortlist RP onconf */ 3995 #line 439 "parse.y" 3996 {sqlite3CreateIndex(pParse,0,0,0,yymsp[-2].minor.yy322,yymsp[0].minor.yy394,0,0,0,0, 3997 SQLITE_IDXTYPE_UNIQUE);} 3998 #line 4023 "parse.sql" 3999 break; 4000 case 70: /* tcons ::= CHECK LP expr RP onconf */ 4001 #line 442 "parse.y" 4002 {sqlite3AddCheckConstraint(pParse,yymsp[-2].minor.yy528,yymsp[-3].minor.yy0.z,yymsp[-1].minor.yy0.z);} 4003 #line 4028 "parse.sql" 4004 break; 4005 case 71: /* tcons ::= FOREIGN KEY LP eidlist RP REFERENCES nm eidlist_opt refargs defer_subclause_opt */ 4006 #line 444 "parse.y" 4007 { 4008 sqlite3CreateForeignKey(pParse, yymsp[-6].minor.yy322, &yymsp[-3].minor.yy0, yymsp[-2].minor.yy322, yymsp[-1].minor.yy394); 4009 sqlite3DeferForeignKey(pParse, yymsp[0].minor.yy394); 4010 } 4011 #line 4036 "parse.sql" 4012 break; 4013 case 73: /* onconf ::= */ 4014 case 75: /* orconf ::= */ yytestcase(yyruleno==75); 4015 #line 458 "parse.y" 4016 {yymsp[1].minor.yy394 = OE_Default;} 4017 #line 4042 "parse.sql" 4018 break; 4019 case 74: /* onconf ::= ON CONFLICT resolvetype */ 4020 #line 459 "parse.y" 4021 {yymsp[-2].minor.yy394 = yymsp[0].minor.yy394;} 4022 #line 4047 "parse.sql" 4023 break; 4024 case 77: /* resolvetype ::= IGNORE */ 4025 #line 463 "parse.y" 4026 {yymsp[0].minor.yy394 = OE_Ignore;} 4027 #line 4052 "parse.sql" 4028 break; 4029 case 78: /* resolvetype ::= REPLACE */ 4030 case 172: /* insert_cmd ::= REPLACE */ yytestcase(yyruleno==172); 4031 #line 464 "parse.y" 4032 {yymsp[0].minor.yy394 = OE_Replace;} 4033 #line 4058 "parse.sql" 4034 break; 4035 case 79: /* cmd ::= DROP TABLE ifexists fullname */ 4036 #line 468 "parse.y" 4037 { 4038 sqlite3DropTable(pParse, yymsp[0].minor.yy131, 0, yymsp[-1].minor.yy394); 4039 } 4040 #line 4065 "parse.sql" 4041 break; 4042 case 82: /* cmd ::= createkw temp VIEW ifnotexists nm dbnm eidlist_opt AS select */ 4043 #line 479 "parse.y" 4044 { 4045 sqlite3CreateView(pParse, &yymsp[-8].minor.yy0, &yymsp[-4].minor.yy0, &yymsp[-3].minor.yy0, yymsp[-2].minor.yy322, yymsp[0].minor.yy47, yymsp[-7].minor.yy394, yymsp[-5].minor.yy394); 4046 } 4047 #line 4072 "parse.sql" 4048 break; 4049 case 83: /* cmd ::= DROP VIEW ifexists fullname */ 4050 #line 482 "parse.y" 4051 { 4052 sqlite3DropTable(pParse, yymsp[0].minor.yy131, 1, yymsp[-1].minor.yy394); 4053 } 4054 #line 4079 "parse.sql" 4055 break; 4056 case 84: /* cmd ::= select */ 4057 #line 489 "parse.y" 4058 { 4059 SelectDest dest = {SRT_Output, 0, 0, 0, 0, 0, 0}; 4060 sqlite3Select(pParse, yymsp[0].minor.yy47, &dest); 4061 sqlite3SelectDelete(pParse->db, yymsp[0].minor.yy47); 4062 } 4063 #line 4088 "parse.sql" 4064 break; 4065 case 85: /* select ::= WITH wqlist selectnowith */ 4066 #line 551 "parse.y" 4067 {yymsp[-2].minor.yy47 = attachWithToSelect(pParse,yymsp[0].minor.yy47,yymsp[-1].minor.yy521);} 4068 #line 4093 "parse.sql" 4069 break; 4070 case 86: /* select ::= WITH RECURSIVE wqlist selectnowith */ 4071 #line 553 "parse.y" 4072 {yymsp[-3].minor.yy47 = attachWithToSelect(pParse,yymsp[0].minor.yy47,yymsp[-1].minor.yy521);} 4073 #line 4098 "parse.sql" 4074 break; 4075 case 87: /* select ::= selectnowith */ 4076 #line 555 "parse.y" 4077 { 4078 Select *p = yymsp[0].minor.yy47; 4079 if( p ){ 4080 parserDoubleLinkSelect(pParse, p); 4081 } 4082 yymsp[0].minor.yy47 = p; /*A-overwrites-X*/ 4083 } 4084 #line 4109 "parse.sql" 4085 break; 4086 case 88: /* selectnowith ::= selectnowith multiselect_op oneselect */ 4087 #line 565 "parse.y" 4088 { 4089 Select *pRhs = yymsp[0].minor.yy47; 4090 Select *pLhs = yymsp[-2].minor.yy47; 4091 if( pRhs && pRhs->pPrior ){ 4092 SrcList *pFrom; 4093 Token x; 4094 x.n = 0; 4095 parserDoubleLinkSelect(pParse, pRhs); 4096 pFrom = sqlite3SrcListAppendFromTerm(pParse,0,0,0,&x,pRhs,0); 4097 pRhs = sqlite3SelectNew(pParse,0,pFrom,0,0,0,0,0,0); 4098 } 4099 if( pRhs ){ 4100 pRhs->op = (u8)yymsp[-1].minor.yy394; 4101 pRhs->pPrior = pLhs; 4102 if( ALWAYS(pLhs) ) pLhs->selFlags &= ~SF_MultiValue; 4103 pRhs->selFlags &= ~SF_MultiValue; 4104 if( yymsp[-1].minor.yy394!=TK_ALL ) pParse->hasCompound = 1; 4105 }else{ 4106 sqlite3SelectDelete(pParse->db, pLhs); 4107 } 4108 yymsp[-2].minor.yy47 = pRhs; 4109 } 4110 #line 4135 "parse.sql" 4111 break; 4112 case 89: /* multiselect_op ::= UNION */ 4113 case 91: /* multiselect_op ::= EXCEPT|INTERSECT */ yytestcase(yyruleno==91); 4114 #line 588 "parse.y" 4115 {yymsp[0].minor.yy394 = yymsp[0].major; /*A-overwrites-OP*/} 4116 #line 4141 "parse.sql" 4117 break; 4118 case 90: /* multiselect_op ::= UNION ALL */ 4119 #line 589 "parse.y" 4120 {yymsp[-1].minor.yy394 = TK_ALL;} 4121 #line 4146 "parse.sql" 4122 break; 4123 case 92: /* oneselect ::= SELECT distinct selcollist from where_opt groupby_opt having_opt orderby_opt limit_opt */ 4124 #line 595 "parse.y" 4125 { 4126 yymsp[-8].minor.yy47 = sqlite3SelectNew(pParse,yymsp[-6].minor.yy322,yymsp[-5].minor.yy131,yymsp[-4].minor.yy528,yymsp[-3].minor.yy322,yymsp[-2].minor.yy528,yymsp[-1].minor.yy322,yymsp[-7].minor.yy394,yymsp[0].minor.yy528); 4127 } 4128 #line 4153 "parse.sql" 4129 break; 4130 case 93: /* oneselect ::= SELECT distinct selcollist from where_opt groupby_opt having_opt window_clause orderby_opt limit_opt */ 4131 #line 601 "parse.y" 4132 { 4133 yymsp[-9].minor.yy47 = sqlite3SelectNew(pParse,yymsp[-7].minor.yy322,yymsp[-6].minor.yy131,yymsp[-5].minor.yy528,yymsp[-4].minor.yy322,yymsp[-3].minor.yy528,yymsp[-1].minor.yy322,yymsp[-8].minor.yy394,yymsp[0].minor.yy528); 4134 if( yymsp[-9].minor.yy47 ){ 4135 yymsp[-9].minor.yy47->pWinDefn = yymsp[-2].minor.yy41; 4136 }else{ 4137 sqlite3WindowListDelete(pParse->db, yymsp[-2].minor.yy41); 4138 } 4139 } 4140 #line 4165 "parse.sql" 4141 break; 4142 case 94: /* values ::= VALUES LP nexprlist RP */ 4143 #line 616 "parse.y" 4144 { 4145 yymsp[-3].minor.yy47 = sqlite3SelectNew(pParse,yymsp[-1].minor.yy322,0,0,0,0,0,SF_Values,0); 4146 } 4147 #line 4172 "parse.sql" 4148 break; 4149 case 95: /* values ::= values COMMA LP nexprlist RP */ 4150 #line 619 "parse.y" 4151 { 4152 Select *pRight, *pLeft = yymsp[-4].minor.yy47; 4153 pRight = sqlite3SelectNew(pParse,yymsp[-1].minor.yy322,0,0,0,0,0,SF_Values|SF_MultiValue,0); 4154 if( ALWAYS(pLeft) ) pLeft->selFlags &= ~SF_MultiValue; 4155 if( pRight ){ 4156 pRight->op = TK_ALL; 4157 pRight->pPrior = pLeft; 4158 yymsp[-4].minor.yy47 = pRight; 4159 }else{ 4160 yymsp[-4].minor.yy47 = pLeft; 4161 } 4162 } 4163 #line 4188 "parse.sql" 4164 break; 4165 case 96: /* distinct ::= DISTINCT */ 4166 #line 636 "parse.y" 4167 {yymsp[0].minor.yy394 = SF_Distinct;} 4168 #line 4193 "parse.sql" 4169 break; 4170 case 97: /* distinct ::= ALL */ 4171 #line 637 "parse.y" 4172 {yymsp[0].minor.yy394 = SF_All;} 4173 #line 4198 "parse.sql" 4174 break; 4175 case 99: /* sclp ::= */ 4176 case 132: /* orderby_opt ::= */ yytestcase(yyruleno==132); 4177 case 142: /* groupby_opt ::= */ yytestcase(yyruleno==142); 4178 case 232: /* exprlist ::= */ yytestcase(yyruleno==232); 4179 case 235: /* paren_exprlist ::= */ yytestcase(yyruleno==235); 4180 case 240: /* eidlist_opt ::= */ yytestcase(yyruleno==240); 4181 #line 650 "parse.y" 4182 {yymsp[1].minor.yy322 = 0;} 4183 #line 4208 "parse.sql" 4184 break; 4185 case 100: /* selcollist ::= sclp scanpt expr scanpt as */ 4186 #line 651 "parse.y" 4187 { 4188 yymsp[-4].minor.yy322 = sqlite3ExprListAppend(pParse, yymsp[-4].minor.yy322, yymsp[-2].minor.yy528); 4189 if( yymsp[0].minor.yy0.n>0 ) sqlite3ExprListSetName(pParse, yymsp[-4].minor.yy322, &yymsp[0].minor.yy0, 1); 4190 sqlite3ExprListSetSpan(pParse,yymsp[-4].minor.yy322,yymsp[-3].minor.yy522,yymsp[-1].minor.yy522); 4191 } 4192 #line 4217 "parse.sql" 4193 break; 4194 case 101: /* selcollist ::= sclp scanpt STAR */ 4195 #line 656 "parse.y" 4196 { 4197 Expr *p = sqlite3Expr(pParse->db, TK_ASTERISK, 0); 4198 yymsp[-2].minor.yy322 = sqlite3ExprListAppend(pParse, yymsp[-2].minor.yy322, p); 4199 } 4200 #line 4225 "parse.sql" 4201 break; 4202 case 102: /* selcollist ::= sclp scanpt nm DOT STAR */ 4203 #line 660 "parse.y" 4204 { 4205 Expr *pRight = sqlite3PExpr(pParse, TK_ASTERISK, 0, 0); 4206 Expr *pLeft = tokenExpr(pParse, TK_ID, yymsp[-2].minor.yy0); 4207 Expr *pDot = sqlite3PExpr(pParse, TK_DOT, pLeft, pRight); 4208 yymsp[-4].minor.yy322 = sqlite3ExprListAppend(pParse,yymsp[-4].minor.yy322, pDot); 4209 } 4210 #line 4235 "parse.sql" 4211 break; 4212 case 103: /* as ::= AS nm */ 4213 case 115: /* dbnm ::= DOT nm */ yytestcase(yyruleno==115); 4214 case 256: /* plus_num ::= PLUS INTEGER|FLOAT */ yytestcase(yyruleno==256); 4215 case 257: /* minus_num ::= MINUS INTEGER|FLOAT */ yytestcase(yyruleno==257); 4216 #line 671 "parse.y" 4217 {yymsp[-1].minor.yy0 = yymsp[0].minor.yy0;} 4218 #line 4243 "parse.sql" 4219 break; 4220 case 105: /* from ::= */ 4221 case 108: /* stl_prefix ::= */ yytestcase(yyruleno==108); 4222 #line 685 "parse.y" 4223 {yymsp[1].minor.yy131 = 0;} 4224 #line 4249 "parse.sql" 4225 break; 4226 case 106: /* from ::= FROM seltablist */ 4227 #line 686 "parse.y" 4228 { 4229 yymsp[-1].minor.yy131 = yymsp[0].minor.yy131; 4230 sqlite3SrcListShiftJoinType(pParse,yymsp[-1].minor.yy131); 4231 } 4232 #line 4257 "parse.sql" 4233 break; 4234 case 107: /* stl_prefix ::= seltablist joinop */ 4235 #line 694 "parse.y" 4236 { 4237 if( ALWAYS(yymsp[-1].minor.yy131 && yymsp[-1].minor.yy131->nSrc>0) ) yymsp[-1].minor.yy131->a[yymsp[-1].minor.yy131->nSrc-1].fg.jointype = (u8)yymsp[0].minor.yy394; 4238 } 4239 #line 4264 "parse.sql" 4240 break; 4241 case 109: /* seltablist ::= stl_prefix nm dbnm as on_using */ 4242 #line 698 "parse.y" 4243 { 4244 yymsp[-4].minor.yy131 = sqlite3SrcListAppendFromTerm(pParse,yymsp[-4].minor.yy131,&yymsp[-3].minor.yy0,&yymsp[-2].minor.yy0,&yymsp[-1].minor.yy0,0,&yymsp[0].minor.yy561); 4245 } 4246 #line 4271 "parse.sql" 4247 break; 4248 case 110: /* seltablist ::= stl_prefix nm dbnm as indexed_by on_using */ 4249 #line 701 "parse.y" 4250 { 4251 yymsp[-5].minor.yy131 = sqlite3SrcListAppendFromTerm(pParse,yymsp[-5].minor.yy131,&yymsp[-4].minor.yy0,&yymsp[-3].minor.yy0,&yymsp[-2].minor.yy0,0,&yymsp[0].minor.yy561); 4252 sqlite3SrcListIndexedBy(pParse, yymsp[-5].minor.yy131, &yymsp[-1].minor.yy0); 4253 } 4254 #line 4279 "parse.sql" 4255 break; 4256 case 111: /* seltablist ::= stl_prefix nm dbnm LP exprlist RP as on_using */ 4257 #line 705 "parse.y" 4258 { 4259 yymsp[-7].minor.yy131 = sqlite3SrcListAppendFromTerm(pParse,yymsp[-7].minor.yy131,&yymsp[-6].minor.yy0,&yymsp[-5].minor.yy0,&yymsp[-1].minor.yy0,0,&yymsp[0].minor.yy561); 4260 sqlite3SrcListFuncArgs(pParse, yymsp[-7].minor.yy131, yymsp[-3].minor.yy322); 4261 } 4262 #line 4287 "parse.sql" 4263 break; 4264 case 112: /* seltablist ::= stl_prefix LP select RP as on_using */ 4265 #line 710 "parse.y" 4266 { 4267 yymsp[-5].minor.yy131 = sqlite3SrcListAppendFromTerm(pParse,yymsp[-5].minor.yy131,0,0,&yymsp[-1].minor.yy0,yymsp[-3].minor.yy47,&yymsp[0].minor.yy561); 4268 } 4269 #line 4294 "parse.sql" 4270 break; 4271 case 113: /* seltablist ::= stl_prefix LP seltablist RP as on_using */ 4272 #line 713 "parse.y" 4273 { 4274 if( yymsp[-5].minor.yy131==0 && yymsp[-1].minor.yy0.n==0 && yymsp[0].minor.yy561.pOn==0 && yymsp[0].minor.yy561.pUsing==0 ){ 4275 yymsp[-5].minor.yy131 = yymsp[-3].minor.yy131; 4276 }else if( yymsp[-3].minor.yy131->nSrc==1 ){ 4277 yymsp[-5].minor.yy131 = sqlite3SrcListAppendFromTerm(pParse,yymsp[-5].minor.yy131,0,0,&yymsp[-1].minor.yy0,0,&yymsp[0].minor.yy561); 4278 if( yymsp[-5].minor.yy131 ){ 4279 SrcItem *pNew = &yymsp[-5].minor.yy131->a[yymsp[-5].minor.yy131->nSrc-1]; 4280 SrcItem *pOld = yymsp[-3].minor.yy131->a; 4281 pNew->zName = pOld->zName; 4282 pNew->zDatabase = pOld->zDatabase; 4283 pNew->pSelect = pOld->pSelect; 4284 if( pNew->pSelect && (pNew->pSelect->selFlags & SF_NestedFrom)!=0 ){ 4285 pNew->fg.isNestedFrom = 1; 4286 } 4287 if( pOld->fg.isTabFunc ){ 4288 pNew->u1.pFuncArg = pOld->u1.pFuncArg; 4289 pOld->u1.pFuncArg = 0; 4290 pOld->fg.isTabFunc = 0; 4291 pNew->fg.isTabFunc = 1; 4292 } 4293 pOld->zName = pOld->zDatabase = 0; 4294 pOld->pSelect = 0; 4295 } 4296 sqlite3SrcListDelete(pParse->db, yymsp[-3].minor.yy131); 4297 }else{ 4298 Select *pSubquery; 4299 sqlite3SrcListShiftJoinType(pParse,yymsp[-3].minor.yy131); 4300 pSubquery = sqlite3SelectNew(pParse,0,yymsp[-3].minor.yy131,0,0,0,0,SF_NestedFrom,0); 4301 yymsp[-5].minor.yy131 = sqlite3SrcListAppendFromTerm(pParse,yymsp[-5].minor.yy131,0,0,&yymsp[-1].minor.yy0,pSubquery,&yymsp[0].minor.yy561); 4302 } 4303 } 4304 #line 4329 "parse.sql" 4305 break; 4306 case 114: /* dbnm ::= */ 4307 case 129: /* indexed_opt ::= */ yytestcase(yyruleno==129); 4308 #line 747 "parse.y" 4309 {yymsp[1].minor.yy0.z=0; yymsp[1].minor.yy0.n=0;} 4310 #line 4335 "parse.sql" 4311 break; 4312 case 116: /* fullname ::= nm */ 4313 #line 752 "parse.y" 4314 { 4315 yylhsminor.yy131 = sqlite3SrcListAppend(pParse,0,&yymsp[0].minor.yy0,0); 4316 if( IN_RENAME_OBJECT && yylhsminor.yy131 ) sqlite3RenameTokenMap(pParse, yylhsminor.yy131->a[0].zName, &yymsp[0].minor.yy0); 4317 } 4318 #line 4343 "parse.sql" 4319 yymsp[0].minor.yy131 = yylhsminor.yy131; 4320 break; 4321 case 117: /* fullname ::= nm DOT nm */ 4322 #line 756 "parse.y" 4323 { 4324 yylhsminor.yy131 = sqlite3SrcListAppend(pParse,0,&yymsp[-2].minor.yy0,&yymsp[0].minor.yy0); 4325 if( IN_RENAME_OBJECT && yylhsminor.yy131 ) sqlite3RenameTokenMap(pParse, yylhsminor.yy131->a[0].zName, &yymsp[0].minor.yy0); 4326 } 4327 #line 4352 "parse.sql" 4328 yymsp[-2].minor.yy131 = yylhsminor.yy131; 4329 break; 4330 case 118: /* xfullname ::= nm */ 4331 #line 764 "parse.y" 4332 {yymsp[0].minor.yy131 = sqlite3SrcListAppend(pParse,0,&yymsp[0].minor.yy0,0); /*A-overwrites-X*/} 4333 #line 4358 "parse.sql" 4334 break; 4335 case 119: /* xfullname ::= nm DOT nm */ 4336 #line 766 "parse.y" 4337 {yymsp[-2].minor.yy131 = sqlite3SrcListAppend(pParse,0,&yymsp[-2].minor.yy0,&yymsp[0].minor.yy0); /*A-overwrites-X*/} 4338 #line 4363 "parse.sql" 4339 break; 4340 case 120: /* xfullname ::= nm DOT nm AS nm */ 4341 #line 767 "parse.y" 4342 { 4343 yymsp[-4].minor.yy131 = sqlite3SrcListAppend(pParse,0,&yymsp[-4].minor.yy0,&yymsp[-2].minor.yy0); /*A-overwrites-X*/ 4344 if( yymsp[-4].minor.yy131 ) yymsp[-4].minor.yy131->a[0].zAlias = sqlite3NameFromToken(pParse->db, &yymsp[0].minor.yy0); 4345 } 4346 #line 4371 "parse.sql" 4347 break; 4348 case 121: /* xfullname ::= nm AS nm */ 4349 #line 771 "parse.y" 4350 { 4351 yymsp[-2].minor.yy131 = sqlite3SrcListAppend(pParse,0,&yymsp[-2].minor.yy0,0); /*A-overwrites-X*/ 4352 if( yymsp[-2].minor.yy131 ) yymsp[-2].minor.yy131->a[0].zAlias = sqlite3NameFromToken(pParse->db, &yymsp[0].minor.yy0); 4353 } 4354 #line 4379 "parse.sql" 4355 break; 4356 case 122: /* joinop ::= COMMA|JOIN */ 4357 #line 777 "parse.y" 4358 { yymsp[0].minor.yy394 = JT_INNER; } 4359 #line 4384 "parse.sql" 4360 break; 4361 case 123: /* joinop ::= JOIN_KW JOIN */ 4362 #line 779 "parse.y" 4363 {yymsp[-1].minor.yy394 = sqlite3JoinType(pParse,&yymsp[-1].minor.yy0,0,0); /*X-overwrites-A*/} 4364 #line 4389 "parse.sql" 4365 break; 4366 case 124: /* joinop ::= JOIN_KW nm JOIN */ 4367 #line 781 "parse.y" 4368 {yymsp[-2].minor.yy394 = sqlite3JoinType(pParse,&yymsp[-2].minor.yy0,&yymsp[-1].minor.yy0,0); /*X-overwrites-A*/} 4369 #line 4394 "parse.sql" 4370 break; 4371 case 125: /* joinop ::= JOIN_KW nm nm JOIN */ 4372 #line 783 "parse.y" 4373 {yymsp[-3].minor.yy394 = sqlite3JoinType(pParse,&yymsp[-3].minor.yy0,&yymsp[-2].minor.yy0,&yymsp[-1].minor.yy0);/*X-overwrites-A*/} 4374 #line 4399 "parse.sql" 4375 break; 4376 case 126: /* on_using ::= ON expr */ 4377 #line 804 "parse.y" 4378 {yymsp[-1].minor.yy561.pOn = yymsp[0].minor.yy528; yymsp[-1].minor.yy561.pUsing = 0;} 4379 #line 4404 "parse.sql" 4380 break; 4381 case 127: /* on_using ::= USING LP idlist RP */ 4382 #line 805 "parse.y" 4383 {yymsp[-3].minor.yy561.pOn = 0; yymsp[-3].minor.yy561.pUsing = yymsp[-1].minor.yy254;} 4384 #line 4409 "parse.sql" 4385 break; 4386 case 128: /* on_using ::= */ 4387 #line 806 "parse.y" 4388 {yymsp[1].minor.yy561.pOn = 0; yymsp[1].minor.yy561.pUsing = 0;} 4389 #line 4414 "parse.sql" 4390 break; 4391 case 130: /* indexed_by ::= INDEXED BY nm */ 4392 #line 822 "parse.y" 4393 {yymsp[-2].minor.yy0 = yymsp[0].minor.yy0;} 4394 #line 4419 "parse.sql" 4395 break; 4396 case 131: /* indexed_by ::= NOT INDEXED */ 4397 #line 823 "parse.y" 4398 {yymsp[-1].minor.yy0.z=0; yymsp[-1].minor.yy0.n=1;} 4399 #line 4424 "parse.sql" 4400 break; 4401 case 133: /* orderby_opt ::= ORDER BY sortlist */ 4402 case 143: /* groupby_opt ::= GROUP BY nexprlist */ yytestcase(yyruleno==143); 4403 #line 836 "parse.y" 4404 {yymsp[-2].minor.yy322 = yymsp[0].minor.yy322;} 4405 #line 4430 "parse.sql" 4406 break; 4407 case 134: /* sortlist ::= sortlist COMMA expr sortorder nulls */ 4408 #line 837 "parse.y" 4409 { 4410 yymsp[-4].minor.yy322 = sqlite3ExprListAppend(pParse,yymsp[-4].minor.yy322,yymsp[-2].minor.yy528); 4411 sqlite3ExprListSetSortOrder(yymsp[-4].minor.yy322,yymsp[-1].minor.yy394,yymsp[0].minor.yy394); 4412 } 4413 #line 4438 "parse.sql" 4414 break; 4415 case 135: /* sortlist ::= expr sortorder nulls */ 4416 #line 841 "parse.y" 4417 { 4418 yymsp[-2].minor.yy322 = sqlite3ExprListAppend(pParse,0,yymsp[-2].minor.yy528); /*A-overwrites-Y*/ 4419 sqlite3ExprListSetSortOrder(yymsp[-2].minor.yy322,yymsp[-1].minor.yy394,yymsp[0].minor.yy394); 4420 } 4421 #line 4446 "parse.sql" 4422 break; 4423 case 136: /* sortorder ::= ASC */ 4424 #line 848 "parse.y" 4425 {yymsp[0].minor.yy394 = SQLITE_SO_ASC;} 4426 #line 4451 "parse.sql" 4427 break; 4428 case 137: /* sortorder ::= DESC */ 4429 #line 849 "parse.y" 4430 {yymsp[0].minor.yy394 = SQLITE_SO_DESC;} 4431 #line 4456 "parse.sql" 4432 break; 4433 case 138: /* sortorder ::= */ 4434 case 141: /* nulls ::= */ yytestcase(yyruleno==141); 4435 #line 850 "parse.y" 4436 {yymsp[1].minor.yy394 = SQLITE_SO_UNDEFINED;} 4437 #line 4462 "parse.sql" 4438 break; 4439 case 139: /* nulls ::= NULLS FIRST */ 4440 #line 853 "parse.y" 4441 {yymsp[-1].minor.yy394 = SQLITE_SO_ASC;} 4442 #line 4467 "parse.sql" 4443 break; 4444 case 140: /* nulls ::= NULLS LAST */ 4445 #line 854 "parse.y" 4446 {yymsp[-1].minor.yy394 = SQLITE_SO_DESC;} 4447 #line 4472 "parse.sql" 4448 break; 4449 case 144: /* having_opt ::= */ 4450 case 146: /* limit_opt ::= */ yytestcase(yyruleno==146); 4451 case 151: /* where_opt ::= */ yytestcase(yyruleno==151); 4452 case 153: /* where_opt_ret ::= */ yytestcase(yyruleno==153); 4453 case 229: /* case_else ::= */ yytestcase(yyruleno==229); 4454 case 231: /* case_operand ::= */ yytestcase(yyruleno==231); 4455 case 250: /* vinto ::= */ yytestcase(yyruleno==250); 4456 #line 864 "parse.y" 4457 {yymsp[1].minor.yy528 = 0;} 4458 #line 4483 "parse.sql" 4459 break; 4460 case 145: /* having_opt ::= HAVING expr */ 4461 case 152: /* where_opt ::= WHERE expr */ yytestcase(yyruleno==152); 4462 case 154: /* where_opt_ret ::= WHERE expr */ yytestcase(yyruleno==154); 4463 case 228: /* case_else ::= ELSE expr */ yytestcase(yyruleno==228); 4464 case 249: /* vinto ::= INTO expr */ yytestcase(yyruleno==249); 4465 #line 865 "parse.y" 4466 {yymsp[-1].minor.yy528 = yymsp[0].minor.yy528;} 4467 #line 4492 "parse.sql" 4468 break; 4469 case 147: /* limit_opt ::= LIMIT expr */ 4470 #line 879 "parse.y" 4471 {yymsp[-1].minor.yy528 = sqlite3PExpr(pParse,TK_LIMIT,yymsp[0].minor.yy528,0);} 4472 #line 4497 "parse.sql" 4473 break; 4474 case 148: /* limit_opt ::= LIMIT expr OFFSET expr */ 4475 #line 881 "parse.y" 4476 {yymsp[-3].minor.yy528 = sqlite3PExpr(pParse,TK_LIMIT,yymsp[-2].minor.yy528,yymsp[0].minor.yy528);} 4477 #line 4502 "parse.sql" 4478 break; 4479 case 149: /* limit_opt ::= LIMIT expr COMMA expr */ 4480 #line 883 "parse.y" 4481 {yymsp[-3].minor.yy528 = sqlite3PExpr(pParse,TK_LIMIT,yymsp[0].minor.yy528,yymsp[-2].minor.yy528);} 4482 #line 4507 "parse.sql" 4483 break; 4484 case 150: /* cmd ::= with DELETE FROM xfullname indexed_opt where_opt_ret */ 4485 #line 901 "parse.y" 4486 { 4487 sqlite3SrcListIndexedBy(pParse, yymsp[-2].minor.yy131, &yymsp[-1].minor.yy0); 4488 sqlite3DeleteFrom(pParse,yymsp[-2].minor.yy131,yymsp[0].minor.yy528,0,0); 4489 } 4490 #line 4515 "parse.sql" 4491 break; 4492 case 155: /* where_opt_ret ::= RETURNING selcollist */ 4493 #line 917 "parse.y" 4494 {sqlite3AddReturning(pParse,yymsp[0].minor.yy322); yymsp[-1].minor.yy528 = 0;} 4495 #line 4520 "parse.sql" 4496 break; 4497 case 156: /* where_opt_ret ::= WHERE expr RETURNING selcollist */ 4498 #line 919 "parse.y" 4499 {sqlite3AddReturning(pParse,yymsp[0].minor.yy322); yymsp[-3].minor.yy528 = yymsp[-2].minor.yy528;} 4500 #line 4525 "parse.sql" 4501 break; 4502 case 157: /* cmd ::= with UPDATE orconf xfullname indexed_opt SET setlist from where_opt_ret */ 4503 #line 951 "parse.y" 4504 { 4505 sqlite3SrcListIndexedBy(pParse, yymsp[-5].minor.yy131, &yymsp[-4].minor.yy0); 4506 sqlite3ExprListCheckLength(pParse,yymsp[-2].minor.yy322,"set list"); 4507 if( yymsp[-1].minor.yy131 ){ 4508 SrcList *pFromClause = yymsp[-1].minor.yy131; 4509 if( pFromClause->nSrc>1 ){ 4510 Select *pSubquery; 4511 Token as; 4512 pSubquery = sqlite3SelectNew(pParse,0,pFromClause,0,0,0,0,SF_NestedFrom,0); 4513 as.n = 0; 4514 as.z = 0; 4515 pFromClause = sqlite3SrcListAppendFromTerm(pParse,0,0,0,&as,pSubquery,0); 4516 } 4517 yymsp[-5].minor.yy131 = sqlite3SrcListAppendList(pParse, yymsp[-5].minor.yy131, pFromClause); 4518 } 4519 sqlite3Update(pParse,yymsp[-5].minor.yy131,yymsp[-2].minor.yy322,yymsp[0].minor.yy528,yymsp[-6].minor.yy394,0,0,0); 4520 } 4521 #line 4546 "parse.sql" 4522 break; 4523 case 158: /* setlist ::= setlist COMMA nm EQ expr */ 4524 #line 975 "parse.y" 4525 { 4526 yymsp[-4].minor.yy322 = sqlite3ExprListAppend(pParse, yymsp[-4].minor.yy322, yymsp[0].minor.yy528); 4527 sqlite3ExprListSetName(pParse, yymsp[-4].minor.yy322, &yymsp[-2].minor.yy0, 1); 4528 } 4529 #line 4554 "parse.sql" 4530 break; 4531 case 159: /* setlist ::= setlist COMMA LP idlist RP EQ expr */ 4532 #line 979 "parse.y" 4533 { 4534 yymsp[-6].minor.yy322 = sqlite3ExprListAppendVector(pParse, yymsp[-6].minor.yy322, yymsp[-3].minor.yy254, yymsp[0].minor.yy528); 4535 } 4536 #line 4561 "parse.sql" 4537 break; 4538 case 160: /* setlist ::= nm EQ expr */ 4539 #line 982 "parse.y" 4540 { 4541 yylhsminor.yy322 = sqlite3ExprListAppend(pParse, 0, yymsp[0].minor.yy528); 4542 sqlite3ExprListSetName(pParse, yylhsminor.yy322, &yymsp[-2].minor.yy0, 1); 4543 } 4544 #line 4569 "parse.sql" 4545 yymsp[-2].minor.yy322 = yylhsminor.yy322; 4546 break; 4547 case 161: /* setlist ::= LP idlist RP EQ expr */ 4548 #line 986 "parse.y" 4549 { 4550 yymsp[-4].minor.yy322 = sqlite3ExprListAppendVector(pParse, 0, yymsp[-3].minor.yy254, yymsp[0].minor.yy528); 4551 } 4552 #line 4577 "parse.sql" 4553 break; 4554 case 162: /* cmd ::= with insert_cmd INTO xfullname idlist_opt select upsert */ 4555 #line 993 "parse.y" 4556 { 4557 sqlite3Insert(pParse, yymsp[-3].minor.yy131, yymsp[-1].minor.yy47, yymsp[-2].minor.yy254, yymsp[-5].minor.yy394, yymsp[0].minor.yy444); 4558 } 4559 #line 4584 "parse.sql" 4560 break; 4561 case 163: /* cmd ::= with insert_cmd INTO xfullname idlist_opt DEFAULT VALUES returning */ 4562 #line 997 "parse.y" 4563 { 4564 sqlite3Insert(pParse, yymsp[-4].minor.yy131, 0, yymsp[-3].minor.yy254, yymsp[-6].minor.yy394, 0); 4565 } 4566 #line 4591 "parse.sql" 4567 break; 4568 case 164: /* upsert ::= */ 4569 #line 1008 "parse.y" 4570 { yymsp[1].minor.yy444 = 0; } 4571 #line 4596 "parse.sql" 4572 break; 4573 case 165: /* upsert ::= RETURNING selcollist */ 4574 #line 1009 "parse.y" 4575 { yymsp[-1].minor.yy444 = 0; sqlite3AddReturning(pParse,yymsp[0].minor.yy322); } 4576 #line 4601 "parse.sql" 4577 break; 4578 case 166: /* upsert ::= ON CONFLICT LP sortlist RP where_opt DO UPDATE SET setlist where_opt upsert */ 4579 #line 1012 "parse.y" 4580 { yymsp[-11].minor.yy444 = sqlite3UpsertNew(pParse->db,yymsp[-8].minor.yy322,yymsp[-6].minor.yy528,yymsp[-2].minor.yy322,yymsp[-1].minor.yy528,yymsp[0].minor.yy444);} 4581 #line 4606 "parse.sql" 4582 break; 4583 case 167: /* upsert ::= ON CONFLICT LP sortlist RP where_opt DO NOTHING upsert */ 4584 #line 1014 "parse.y" 4585 { yymsp[-8].minor.yy444 = sqlite3UpsertNew(pParse->db,yymsp[-5].minor.yy322,yymsp[-3].minor.yy528,0,0,yymsp[0].minor.yy444); } 4586 #line 4611 "parse.sql" 4587 break; 4588 case 168: /* upsert ::= ON CONFLICT DO NOTHING returning */ 4589 #line 1016 "parse.y" 4590 { yymsp[-4].minor.yy444 = sqlite3UpsertNew(pParse->db,0,0,0,0,0); } 4591 #line 4616 "parse.sql" 4592 break; 4593 case 169: /* upsert ::= ON CONFLICT DO UPDATE SET setlist where_opt returning */ 4594 #line 1018 "parse.y" 4595 { yymsp[-7].minor.yy444 = sqlite3UpsertNew(pParse->db,0,0,yymsp[-2].minor.yy322,yymsp[-1].minor.yy528,0);} 4596 #line 4621 "parse.sql" 4597 break; 4598 case 170: /* returning ::= RETURNING selcollist */ 4599 #line 1020 "parse.y" 4600 {sqlite3AddReturning(pParse,yymsp[0].minor.yy322);} 4601 #line 4626 "parse.sql" 4602 break; 4603 case 173: /* idlist_opt ::= */ 4604 #line 1032 "parse.y" 4605 {yymsp[1].minor.yy254 = 0;} 4606 #line 4631 "parse.sql" 4607 break; 4608 case 174: /* idlist_opt ::= LP idlist RP */ 4609 #line 1033 "parse.y" 4610 {yymsp[-2].minor.yy254 = yymsp[-1].minor.yy254;} 4611 #line 4636 "parse.sql" 4612 break; 4613 case 175: /* idlist ::= idlist COMMA nm */ 4614 #line 1035 "parse.y" 4615 {yymsp[-2].minor.yy254 = sqlite3IdListAppend(pParse,yymsp[-2].minor.yy254,&yymsp[0].minor.yy0);} 4616 #line 4641 "parse.sql" 4617 break; 4618 case 176: /* idlist ::= nm */ 4619 #line 1037 "parse.y" 4620 {yymsp[0].minor.yy254 = sqlite3IdListAppend(pParse,0,&yymsp[0].minor.yy0); /*A-overwrites-Y*/} 4621 #line 4646 "parse.sql" 4622 break; 4623 case 177: /* expr ::= LP expr RP */ 4624 #line 1086 "parse.y" 4625 {yymsp[-2].minor.yy528 = yymsp[-1].minor.yy528;} 4626 #line 4651 "parse.sql" 4627 break; 4628 case 178: /* expr ::= ID|INDEXED */ 4629 case 179: /* expr ::= JOIN_KW */ yytestcase(yyruleno==179); 4630 #line 1087 "parse.y" 4631 {yymsp[0].minor.yy528=tokenExpr(pParse,TK_ID,yymsp[0].minor.yy0); /*A-overwrites-X*/} 4632 #line 4657 "parse.sql" 4633 break; 4634 case 180: /* expr ::= nm DOT nm */ 4635 #line 1089 "parse.y" 4636 { 4637 Expr *temp1 = tokenExpr(pParse,TK_ID,yymsp[-2].minor.yy0); 4638 Expr *temp2 = tokenExpr(pParse,TK_ID,yymsp[0].minor.yy0); 4639 yylhsminor.yy528 = sqlite3PExpr(pParse, TK_DOT, temp1, temp2); 4640 } 4641 #line 4666 "parse.sql" 4642 yymsp[-2].minor.yy528 = yylhsminor.yy528; 4643 break; 4644 case 181: /* expr ::= nm DOT nm DOT nm */ 4645 #line 1094 "parse.y" 4646 { 4647 Expr *temp1 = tokenExpr(pParse,TK_ID,yymsp[-4].minor.yy0); 4648 Expr *temp2 = tokenExpr(pParse,TK_ID,yymsp[-2].minor.yy0); 4649 Expr *temp3 = tokenExpr(pParse,TK_ID,yymsp[0].minor.yy0); 4650 Expr *temp4 = sqlite3PExpr(pParse, TK_DOT, temp2, temp3); 4651 if( IN_RENAME_OBJECT ){ 4652 sqlite3RenameTokenRemap(pParse, 0, temp1); 4653 } 4654 yylhsminor.yy528 = sqlite3PExpr(pParse, TK_DOT, temp1, temp4); 4655 } 4656 #line 4681 "parse.sql" 4657 yymsp[-4].minor.yy528 = yylhsminor.yy528; 4658 break; 4659 case 182: /* term ::= NULL|FLOAT|BLOB */ 4660 case 183: /* term ::= STRING */ yytestcase(yyruleno==183); 4661 #line 1104 "parse.y" 4662 {yymsp[0].minor.yy528=tokenExpr(pParse,yymsp[0].major,yymsp[0].minor.yy0); /*A-overwrites-X*/} 4663 #line 4688 "parse.sql" 4664 break; 4665 case 184: /* term ::= INTEGER */ 4666 #line 1106 "parse.y" 4667 { 4668 yylhsminor.yy528 = sqlite3ExprAlloc(pParse->db, TK_INTEGER, &yymsp[0].minor.yy0, 1); 4669 if( yylhsminor.yy528 ) yylhsminor.yy528->w.iOfst = (int)(yymsp[0].minor.yy0.z - pParse->zTail); 4670 } 4671 #line 4696 "parse.sql" 4672 yymsp[0].minor.yy528 = yylhsminor.yy528; 4673 break; 4674 case 185: /* expr ::= VARIABLE */ 4675 #line 1110 "parse.y" 4676 { 4677 if( !(yymsp[0].minor.yy0.z[0]=='#' && sqlite3Isdigit(yymsp[0].minor.yy0.z[1])) ){ 4678 u32 n = yymsp[0].minor.yy0.n; 4679 yymsp[0].minor.yy528 = tokenExpr(pParse, TK_VARIABLE, yymsp[0].minor.yy0); 4680 sqlite3ExprAssignVarNumber(pParse, yymsp[0].minor.yy528, n); 4681 }else{ 4682 /* When doing a nested parse, one can include terms in an expression 4683 ** that look like this: #1 #2 ... These terms refer to registers 4684 ** in the virtual machine. #N is the N-th register. */ 4685 Token t = yymsp[0].minor.yy0; /*A-overwrites-X*/ 4686 assert( t.n>=2 ); 4687 if( pParse->nested==0 ){ 4688 sqlite3ErrorMsg(pParse, "near \"%T\": syntax error", &t); 4689 yymsp[0].minor.yy528 = 0; 4690 }else{ 4691 yymsp[0].minor.yy528 = sqlite3PExpr(pParse, TK_REGISTER, 0, 0); 4692 if( yymsp[0].minor.yy528 ) sqlite3GetInt32(&t.z[1], &yymsp[0].minor.yy528->iTable); 4693 } 4694 } 4695 } 4696 #line 4721 "parse.sql" 4697 break; 4698 case 186: /* expr ::= expr COLLATE ID|STRING */ 4699 #line 1130 "parse.y" 4700 { 4701 yymsp[-2].minor.yy528 = sqlite3ExprAddCollateToken(pParse, yymsp[-2].minor.yy528, &yymsp[0].minor.yy0, 1); 4702 } 4703 #line 4728 "parse.sql" 4704 break; 4705 case 187: /* expr ::= CAST LP expr AS typetoken RP */ 4706 #line 1134 "parse.y" 4707 { 4708 yymsp[-5].minor.yy528 = sqlite3ExprAlloc(pParse->db, TK_CAST, &yymsp[-1].minor.yy0, 1); 4709 sqlite3ExprAttachSubtrees(pParse->db, yymsp[-5].minor.yy528, yymsp[-3].minor.yy528, 0); 4710 } 4711 #line 4736 "parse.sql" 4712 break; 4713 case 188: /* expr ::= ID|INDEXED LP distinct exprlist RP */ 4714 #line 1141 "parse.y" 4715 { 4716 yylhsminor.yy528 = sqlite3ExprFunction(pParse, yymsp[-1].minor.yy322, &yymsp[-4].minor.yy0, yymsp[-2].minor.yy394); 4717 } 4718 #line 4743 "parse.sql" 4719 yymsp[-4].minor.yy528 = yylhsminor.yy528; 4720 break; 4721 case 189: /* expr ::= ID|INDEXED LP STAR RP */ 4722 #line 1144 "parse.y" 4723 { 4724 yylhsminor.yy528 = sqlite3ExprFunction(pParse, 0, &yymsp[-3].minor.yy0, 0); 4725 } 4726 #line 4751 "parse.sql" 4727 yymsp[-3].minor.yy528 = yylhsminor.yy528; 4728 break; 4729 case 190: /* expr ::= ID|INDEXED LP distinct exprlist RP filter_over */ 4730 #line 1149 "parse.y" 4731 { 4732 yylhsminor.yy528 = sqlite3ExprFunction(pParse, yymsp[-2].minor.yy322, &yymsp[-5].minor.yy0, yymsp[-3].minor.yy394); 4733 sqlite3WindowAttach(pParse, yylhsminor.yy528, yymsp[0].minor.yy41); 4734 } 4735 #line 4760 "parse.sql" 4736 yymsp[-5].minor.yy528 = yylhsminor.yy528; 4737 break; 4738 case 191: /* expr ::= ID|INDEXED LP STAR RP filter_over */ 4739 #line 1153 "parse.y" 4740 { 4741 yylhsminor.yy528 = sqlite3ExprFunction(pParse, 0, &yymsp[-4].minor.yy0, 0); 4742 sqlite3WindowAttach(pParse, yylhsminor.yy528, yymsp[0].minor.yy41); 4743 } 4744 #line 4769 "parse.sql" 4745 yymsp[-4].minor.yy528 = yylhsminor.yy528; 4746 break; 4747 case 192: /* term ::= CTIME_KW */ 4748 #line 1159 "parse.y" 4749 { 4750 yylhsminor.yy528 = sqlite3ExprFunction(pParse, 0, &yymsp[0].minor.yy0, 0); 4751 } 4752 #line 4777 "parse.sql" 4753 yymsp[0].minor.yy528 = yylhsminor.yy528; 4754 break; 4755 case 193: /* expr ::= LP nexprlist COMMA expr RP */ 4756 #line 1163 "parse.y" 4757 { 4758 ExprList *pList = sqlite3ExprListAppend(pParse, yymsp[-3].minor.yy322, yymsp[-1].minor.yy528); 4759 yymsp[-4].minor.yy528 = sqlite3PExpr(pParse, TK_VECTOR, 0, 0); 4760 if( yymsp[-4].minor.yy528 ){ 4761 yymsp[-4].minor.yy528->x.pList = pList; 4762 if( ALWAYS(pList->nExpr) ){ 4763 yymsp[-4].minor.yy528->flags |= pList->a[0].pExpr->flags & EP_Propagate; 4764 } 4765 }else{ 4766 sqlite3ExprListDelete(pParse->db, pList); 4767 } 4768 } 4769 #line 4794 "parse.sql" 4770 break; 4771 case 194: /* expr ::= expr AND expr */ 4772 #line 1176 "parse.y" 4773 {yymsp[-2].minor.yy528=sqlite3ExprAnd(pParse,yymsp[-2].minor.yy528,yymsp[0].minor.yy528);} 4774 #line 4799 "parse.sql" 4775 break; 4776 case 195: /* expr ::= expr OR expr */ 4777 case 196: /* expr ::= expr LT|GT|GE|LE expr */ yytestcase(yyruleno==196); 4778 case 197: /* expr ::= expr EQ|NE expr */ yytestcase(yyruleno==197); 4779 case 198: /* expr ::= expr BITAND|BITOR|LSHIFT|RSHIFT expr */ yytestcase(yyruleno==198); 4780 case 199: /* expr ::= expr PLUS|MINUS expr */ yytestcase(yyruleno==199); 4781 case 200: /* expr ::= expr STAR|SLASH|REM expr */ yytestcase(yyruleno==200); 4782 case 201: /* expr ::= expr CONCAT expr */ yytestcase(yyruleno==201); 4783 #line 1177 "parse.y" 4784 {yymsp[-2].minor.yy528=sqlite3PExpr(pParse,yymsp[-1].major,yymsp[-2].minor.yy528,yymsp[0].minor.yy528);} 4785 #line 4810 "parse.sql" 4786 break; 4787 case 202: /* likeop ::= NOT LIKE_KW|MATCH */ 4788 #line 1190 "parse.y" 4789 {yymsp[-1].minor.yy0=yymsp[0].minor.yy0; yymsp[-1].minor.yy0.n|=0x80000000; /*yymsp[-1].minor.yy0-overwrite-yymsp[0].minor.yy0*/} 4790 #line 4815 "parse.sql" 4791 break; 4792 case 203: /* expr ::= expr likeop expr */ 4793 #line 1191 "parse.y" 4794 { 4795 ExprList *pList; 4796 int bNot = yymsp[-1].minor.yy0.n & 0x80000000; 4797 yymsp[-1].minor.yy0.n &= 0x7fffffff; 4798 pList = sqlite3ExprListAppend(pParse,0, yymsp[0].minor.yy528); 4799 pList = sqlite3ExprListAppend(pParse,pList, yymsp[-2].minor.yy528); 4800 yymsp[-2].minor.yy528 = sqlite3ExprFunction(pParse, pList, &yymsp[-1].minor.yy0, 0); 4801 if( bNot ) yymsp[-2].minor.yy528 = sqlite3PExpr(pParse, TK_NOT, yymsp[-2].minor.yy528, 0); 4802 if( yymsp[-2].minor.yy528 ) yymsp[-2].minor.yy528->flags |= EP_InfixFunc; 4803 } 4804 #line 4829 "parse.sql" 4805 break; 4806 case 204: /* expr ::= expr likeop expr ESCAPE expr */ 4807 #line 1201 "parse.y" 4808 { 4809 ExprList *pList; 4810 int bNot = yymsp[-3].minor.yy0.n & 0x80000000; 4811 yymsp[-3].minor.yy0.n &= 0x7fffffff; 4812 pList = sqlite3ExprListAppend(pParse,0, yymsp[-2].minor.yy528); 4813 pList = sqlite3ExprListAppend(pParse,pList, yymsp[-4].minor.yy528); 4814 pList = sqlite3ExprListAppend(pParse,pList, yymsp[0].minor.yy528); 4815 yymsp[-4].minor.yy528 = sqlite3ExprFunction(pParse, pList, &yymsp[-3].minor.yy0, 0); 4816 if( bNot ) yymsp[-4].minor.yy528 = sqlite3PExpr(pParse, TK_NOT, yymsp[-4].minor.yy528, 0); 4817 if( yymsp[-4].minor.yy528 ) yymsp[-4].minor.yy528->flags |= EP_InfixFunc; 4818 } 4819 #line 4844 "parse.sql" 4820 break; 4821 case 205: /* expr ::= expr ISNULL|NOTNULL */ 4822 #line 1213 "parse.y" 4823 {yymsp[-1].minor.yy528 = sqlite3PExpr(pParse,yymsp[0].major,yymsp[-1].minor.yy528,0);} 4824 #line 4849 "parse.sql" 4825 break; 4826 case 206: /* expr ::= expr NOT NULL */ 4827 #line 1214 "parse.y" 4828 {yymsp[-2].minor.yy528 = sqlite3PExpr(pParse,TK_NOTNULL,yymsp[-2].minor.yy528,0);} 4829 #line 4854 "parse.sql" 4830 break; 4831 case 207: /* expr ::= expr IS expr */ 4832 #line 1235 "parse.y" 4833 { 4834 yymsp[-2].minor.yy528 = sqlite3PExpr(pParse,TK_IS,yymsp[-2].minor.yy528,yymsp[0].minor.yy528); 4835 binaryToUnaryIfNull(pParse, yymsp[0].minor.yy528, yymsp[-2].minor.yy528, TK_ISNULL); 4836 } 4837 #line 4862 "parse.sql" 4838 break; 4839 case 208: /* expr ::= expr IS NOT expr */ 4840 #line 1239 "parse.y" 4841 { 4842 yymsp[-3].minor.yy528 = sqlite3PExpr(pParse,TK_ISNOT,yymsp[-3].minor.yy528,yymsp[0].minor.yy528); 4843 binaryToUnaryIfNull(pParse, yymsp[0].minor.yy528, yymsp[-3].minor.yy528, TK_NOTNULL); 4844 } 4845 #line 4870 "parse.sql" 4846 break; 4847 case 209: /* expr ::= expr IS NOT DISTINCT FROM expr */ 4848 #line 1243 "parse.y" 4849 { 4850 yymsp[-5].minor.yy528 = sqlite3PExpr(pParse,TK_IS,yymsp[-5].minor.yy528,yymsp[0].minor.yy528); 4851 binaryToUnaryIfNull(pParse, yymsp[0].minor.yy528, yymsp[-5].minor.yy528, TK_ISNULL); 4852 } 4853 #line 4878 "parse.sql" 4854 break; 4855 case 210: /* expr ::= expr IS DISTINCT FROM expr */ 4856 #line 1247 "parse.y" 4857 { 4858 yymsp[-4].minor.yy528 = sqlite3PExpr(pParse,TK_ISNOT,yymsp[-4].minor.yy528,yymsp[0].minor.yy528); 4859 binaryToUnaryIfNull(pParse, yymsp[0].minor.yy528, yymsp[-4].minor.yy528, TK_NOTNULL); 4860 } 4861 #line 4886 "parse.sql" 4862 break; 4863 case 211: /* expr ::= NOT expr */ 4864 case 212: /* expr ::= BITNOT expr */ yytestcase(yyruleno==212); 4865 #line 1253 "parse.y" 4866 {yymsp[-1].minor.yy528 = sqlite3PExpr(pParse, yymsp[-1].major, yymsp[0].minor.yy528, 0);/*A-overwrites-B*/} 4867 #line 4892 "parse.sql" 4868 break; 4869 case 213: /* expr ::= PLUS|MINUS expr */ 4870 #line 1256 "parse.y" 4871 { 4872 yymsp[-1].minor.yy528 = sqlite3PExpr(pParse, yymsp[-1].major==TK_PLUS ? TK_UPLUS : TK_UMINUS, yymsp[0].minor.yy528, 0); 4873 /*A-overwrites-B*/ 4874 } 4875 #line 4900 "parse.sql" 4876 break; 4877 case 214: /* expr ::= expr PTR expr */ 4878 #line 1261 "parse.y" 4879 { 4880 ExprList *pList = sqlite3ExprListAppend(pParse, 0, yymsp[-2].minor.yy528); 4881 pList = sqlite3ExprListAppend(pParse, pList, yymsp[0].minor.yy528); 4882 yylhsminor.yy528 = sqlite3ExprFunction(pParse, pList, &yymsp[-1].minor.yy0, 0); 4883 } 4884 #line 4909 "parse.sql" 4885 yymsp[-2].minor.yy528 = yylhsminor.yy528; 4886 break; 4887 case 215: /* between_op ::= BETWEEN */ 4888 case 218: /* in_op ::= IN */ yytestcase(yyruleno==218); 4889 #line 1268 "parse.y" 4890 {yymsp[0].minor.yy394 = 0;} 4891 #line 4916 "parse.sql" 4892 break; 4893 case 217: /* expr ::= expr between_op expr AND expr */ 4894 #line 1270 "parse.y" 4895 { 4896 ExprList *pList = sqlite3ExprListAppend(pParse,0, yymsp[-2].minor.yy528); 4897 pList = sqlite3ExprListAppend(pParse,pList, yymsp[0].minor.yy528); 4898 yymsp[-4].minor.yy528 = sqlite3PExpr(pParse, TK_BETWEEN, yymsp[-4].minor.yy528, 0); 4899 if( yymsp[-4].minor.yy528 ){ 4900 yymsp[-4].minor.yy528->x.pList = pList; 4901 }else{ 4902 sqlite3ExprListDelete(pParse->db, pList); 4903 } 4904 if( yymsp[-3].minor.yy394 ) yymsp[-4].minor.yy528 = sqlite3PExpr(pParse, TK_NOT, yymsp[-4].minor.yy528, 0); 4905 } 4906 #line 4931 "parse.sql" 4907 break; 4908 case 220: /* expr ::= expr in_op LP exprlist RP */ 4909 #line 1285 "parse.y" 4910 { 4911 if( yymsp[-1].minor.yy322==0 ){ 4912 /* Expressions of the form 4913 ** 4914 ** expr1 IN () 4915 ** expr1 NOT IN () 4916 ** 4917 ** simplify to constants 0 (false) and 1 (true), respectively, 4918 ** regardless of the value of expr1. 4919 */ 4920 sqlite3ExprUnmapAndDelete(pParse, yymsp[-4].minor.yy528); 4921 yymsp[-4].minor.yy528 = sqlite3Expr(pParse->db, TK_STRING, yymsp[-3].minor.yy394 ? "true" : "false"); 4922 if( yymsp[-4].minor.yy528 ) sqlite3ExprIdToTrueFalse(yymsp[-4].minor.yy528); 4923 }else{ 4924 Expr *pRHS = yymsp[-1].minor.yy322->a[0].pExpr; 4925 if( yymsp[-1].minor.yy322->nExpr==1 && sqlite3ExprIsConstant(pRHS) && yymsp[-4].minor.yy528->op!=TK_VECTOR ){ 4926 yymsp[-1].minor.yy322->a[0].pExpr = 0; 4927 sqlite3ExprListDelete(pParse->db, yymsp[-1].minor.yy322); 4928 pRHS = sqlite3PExpr(pParse, TK_UPLUS, pRHS, 0); 4929 yymsp[-4].minor.yy528 = sqlite3PExpr(pParse, TK_EQ, yymsp[-4].minor.yy528, pRHS); 4930 }else{ 4931 yymsp[-4].minor.yy528 = sqlite3PExpr(pParse, TK_IN, yymsp[-4].minor.yy528, 0); 4932 if( yymsp[-4].minor.yy528==0 ){ 4933 sqlite3ExprListDelete(pParse->db, yymsp[-1].minor.yy322); 4934 }else if( yymsp[-4].minor.yy528->pLeft->op==TK_VECTOR ){ 4935 int nExpr = yymsp[-4].minor.yy528->pLeft->x.pList->nExpr; 4936 Select *pSelectRHS = sqlite3ExprListToValues(pParse, nExpr, yymsp[-1].minor.yy322); 4937 if( pSelectRHS ){ 4938 parserDoubleLinkSelect(pParse, pSelectRHS); 4939 sqlite3PExprAddSelect(pParse, yymsp[-4].minor.yy528, pSelectRHS); 4940 } 4941 }else{ 4942 yymsp[-4].minor.yy528->x.pList = yymsp[-1].minor.yy322; 4943 sqlite3ExprSetHeightAndFlags(pParse, yymsp[-4].minor.yy528); 4944 } 4945 } 4946 if( yymsp[-3].minor.yy394 ) yymsp[-4].minor.yy528 = sqlite3PExpr(pParse, TK_NOT, yymsp[-4].minor.yy528, 0); 4947 } 4948 } 4949 #line 4974 "parse.sql" 4950 break; 4951 case 221: /* expr ::= LP select RP */ 4952 #line 1324 "parse.y" 4953 { 4954 yymsp[-2].minor.yy528 = sqlite3PExpr(pParse, TK_SELECT, 0, 0); 4955 sqlite3PExprAddSelect(pParse, yymsp[-2].minor.yy528, yymsp[-1].minor.yy47); 4956 } 4957 #line 4982 "parse.sql" 4958 break; 4959 case 222: /* expr ::= expr in_op LP select RP */ 4960 #line 1328 "parse.y" 4961 { 4962 yymsp[-4].minor.yy528 = sqlite3PExpr(pParse, TK_IN, yymsp[-4].minor.yy528, 0); 4963 sqlite3PExprAddSelect(pParse, yymsp[-4].minor.yy528, yymsp[-1].minor.yy47); 4964 if( yymsp[-3].minor.yy394 ) yymsp[-4].minor.yy528 = sqlite3PExpr(pParse, TK_NOT, yymsp[-4].minor.yy528, 0); 4965 } 4966 #line 4991 "parse.sql" 4967 break; 4968 case 223: /* expr ::= expr in_op nm dbnm paren_exprlist */ 4969 #line 1333 "parse.y" 4970 { 4971 SrcList *pSrc = sqlite3SrcListAppend(pParse, 0,&yymsp[-2].minor.yy0,&yymsp[-1].minor.yy0); 4972 Select *pSelect = sqlite3SelectNew(pParse, 0,pSrc,0,0,0,0,0,0); 4973 if( yymsp[0].minor.yy322 ) sqlite3SrcListFuncArgs(pParse, pSelect ? pSrc : 0, yymsp[0].minor.yy322); 4974 yymsp[-4].minor.yy528 = sqlite3PExpr(pParse, TK_IN, yymsp[-4].minor.yy528, 0); 4975 sqlite3PExprAddSelect(pParse, yymsp[-4].minor.yy528, pSelect); 4976 if( yymsp[-3].minor.yy394 ) yymsp[-4].minor.yy528 = sqlite3PExpr(pParse, TK_NOT, yymsp[-4].minor.yy528, 0); 4977 } 4978 #line 5003 "parse.sql" 4979 break; 4980 case 224: /* expr ::= EXISTS LP select RP */ 4981 #line 1341 "parse.y" 4982 { 4983 Expr *p; 4984 p = yymsp[-3].minor.yy528 = sqlite3PExpr(pParse, TK_EXISTS, 0, 0); 4985 sqlite3PExprAddSelect(pParse, p, yymsp[-1].minor.yy47); 4986 } 4987 #line 5012 "parse.sql" 4988 break; 4989 case 225: /* expr ::= CASE case_operand case_exprlist case_else END */ 4990 #line 1349 "parse.y" 4991 { 4992 yymsp[-4].minor.yy528 = sqlite3PExpr(pParse, TK_CASE, yymsp[-3].minor.yy528, 0); 4993 if( yymsp[-4].minor.yy528 ){ 4994 yymsp[-4].minor.yy528->x.pList = yymsp[-1].minor.yy528 ? sqlite3ExprListAppend(pParse,yymsp[-2].minor.yy322,yymsp[-1].minor.yy528) : yymsp[-2].minor.yy322; 4995 sqlite3ExprSetHeightAndFlags(pParse, yymsp[-4].minor.yy528); 4996 }else{ 4997 sqlite3ExprListDelete(pParse->db, yymsp[-2].minor.yy322); 4998 sqlite3ExprDelete(pParse->db, yymsp[-1].minor.yy528); 4999 } 5000 } 5001 #line 5026 "parse.sql" 5002 break; 5003 case 226: /* case_exprlist ::= case_exprlist WHEN expr THEN expr */ 5004 #line 1361 "parse.y" 5005 { 5006 yymsp[-4].minor.yy322 = sqlite3ExprListAppend(pParse,yymsp[-4].minor.yy322, yymsp[-2].minor.yy528); 5007 yymsp[-4].minor.yy322 = sqlite3ExprListAppend(pParse,yymsp[-4].minor.yy322, yymsp[0].minor.yy528); 5008 } 5009 #line 5034 "parse.sql" 5010 break; 5011 case 227: /* case_exprlist ::= WHEN expr THEN expr */ 5012 #line 1365 "parse.y" 5013 { 5014 yymsp[-3].minor.yy322 = sqlite3ExprListAppend(pParse,0, yymsp[-2].minor.yy528); 5015 yymsp[-3].minor.yy322 = sqlite3ExprListAppend(pParse,yymsp[-3].minor.yy322, yymsp[0].minor.yy528); 5016 } 5017 #line 5042 "parse.sql" 5018 break; 5019 case 230: /* case_operand ::= expr */ 5020 #line 1375 "parse.y" 5021 {yymsp[0].minor.yy528 = yymsp[0].minor.yy528; /*A-overwrites-X*/} 5022 #line 5047 "parse.sql" 5023 break; 5024 case 233: /* nexprlist ::= nexprlist COMMA expr */ 5025 #line 1386 "parse.y" 5026 {yymsp[-2].minor.yy322 = sqlite3ExprListAppend(pParse,yymsp[-2].minor.yy322,yymsp[0].minor.yy528);} 5027 #line 5052 "parse.sql" 5028 break; 5029 case 234: /* nexprlist ::= expr */ 5030 #line 1388 "parse.y" 5031 {yymsp[0].minor.yy322 = sqlite3ExprListAppend(pParse,0,yymsp[0].minor.yy528); /*A-overwrites-Y*/} 5032 #line 5057 "parse.sql" 5033 break; 5034 case 236: /* paren_exprlist ::= LP exprlist RP */ 5035 case 241: /* eidlist_opt ::= LP eidlist RP */ yytestcase(yyruleno==241); 5036 #line 1396 "parse.y" 5037 {yymsp[-2].minor.yy322 = yymsp[-1].minor.yy322;} 5038 #line 5063 "parse.sql" 5039 break; 5040 case 237: /* cmd ::= createkw uniqueflag INDEX ifnotexists nm dbnm ON nm LP sortlist RP where_opt */ 5041 #line 1403 "parse.y" 5042 { 5043 sqlite3CreateIndex(pParse, &yymsp[-7].minor.yy0, &yymsp[-6].minor.yy0, 5044 sqlite3SrcListAppend(pParse,0,&yymsp[-4].minor.yy0,0), yymsp[-2].minor.yy322, yymsp[-10].minor.yy394, 5045 &yymsp[-11].minor.yy0, yymsp[0].minor.yy528, SQLITE_SO_ASC, yymsp[-8].minor.yy394, SQLITE_IDXTYPE_APPDEF); 5046 if( IN_RENAME_OBJECT && pParse->pNewIndex ){ 5047 sqlite3RenameTokenMap(pParse, pParse->pNewIndex->zName, &yymsp[-4].minor.yy0); 5048 } 5049 } 5050 #line 5075 "parse.sql" 5051 break; 5052 case 238: /* uniqueflag ::= UNIQUE */ 5053 case 280: /* raisetype ::= ABORT */ yytestcase(yyruleno==280); 5054 #line 1413 "parse.y" 5055 {yymsp[0].minor.yy394 = OE_Abort;} 5056 #line 5081 "parse.sql" 5057 break; 5058 case 239: /* uniqueflag ::= */ 5059 #line 1414 "parse.y" 5060 {yymsp[1].minor.yy394 = OE_None;} 5061 #line 5086 "parse.sql" 5062 break; 5063 case 242: /* eidlist ::= eidlist COMMA nm collate sortorder */ 5064 #line 1464 "parse.y" 5065 { 5066 yymsp[-4].minor.yy322 = parserAddExprIdListTerm(pParse, yymsp[-4].minor.yy322, &yymsp[-2].minor.yy0, yymsp[-1].minor.yy394, yymsp[0].minor.yy394); 5067 } 5068 #line 5093 "parse.sql" 5069 break; 5070 case 243: /* eidlist ::= nm collate sortorder */ 5071 #line 1467 "parse.y" 5072 { 5073 yymsp[-2].minor.yy322 = parserAddExprIdListTerm(pParse, 0, &yymsp[-2].minor.yy0, yymsp[-1].minor.yy394, yymsp[0].minor.yy394); /*A-overwrites-Y*/ 5074 } 5075 #line 5100 "parse.sql" 5076 break; 5077 case 246: /* cmd ::= DROP INDEX ifexists fullname */ 5078 #line 1478 "parse.y" 5079 {sqlite3DropIndex(pParse, yymsp[0].minor.yy131, yymsp[-1].minor.yy394);} 5080 #line 5105 "parse.sql" 5081 break; 5082 case 247: /* cmd ::= VACUUM vinto */ 5083 #line 1485 "parse.y" 5084 {sqlite3Vacuum(pParse,0,yymsp[0].minor.yy528);} 5085 #line 5110 "parse.sql" 5086 break; 5087 case 248: /* cmd ::= VACUUM nm vinto */ 5088 #line 1486 "parse.y" 5089 {sqlite3Vacuum(pParse,&yymsp[-1].minor.yy0,yymsp[0].minor.yy528);} 5090 #line 5115 "parse.sql" 5091 break; 5092 case 251: /* cmd ::= PRAGMA nm dbnm */ 5093 #line 1494 "parse.y" 5094 {sqlite3Pragma(pParse,&yymsp[-1].minor.yy0,&yymsp[0].minor.yy0,0,0);} 5095 #line 5120 "parse.sql" 5096 break; 5097 case 252: /* cmd ::= PRAGMA nm dbnm EQ nmnum */ 5098 #line 1495 "parse.y" 5099 {sqlite3Pragma(pParse,&yymsp[-3].minor.yy0,&yymsp[-2].minor.yy0,&yymsp[0].minor.yy0,0);} 5100 #line 5125 "parse.sql" 5101 break; 5102 case 253: /* cmd ::= PRAGMA nm dbnm LP nmnum RP */ 5103 #line 1496 "parse.y" 5104 {sqlite3Pragma(pParse,&yymsp[-4].minor.yy0,&yymsp[-3].minor.yy0,&yymsp[-1].minor.yy0,0);} 5105 #line 5130 "parse.sql" 5106 break; 5107 case 254: /* cmd ::= PRAGMA nm dbnm EQ minus_num */ 5108 #line 1498 "parse.y" 5109 {sqlite3Pragma(pParse,&yymsp[-3].minor.yy0,&yymsp[-2].minor.yy0,&yymsp[0].minor.yy0,1);} 5110 #line 5135 "parse.sql" 5111 break; 5112 case 255: /* cmd ::= PRAGMA nm dbnm LP minus_num RP */ 5113 #line 1500 "parse.y" 5114 {sqlite3Pragma(pParse,&yymsp[-4].minor.yy0,&yymsp[-3].minor.yy0,&yymsp[-1].minor.yy0,1);} 5115 #line 5140 "parse.sql" 5116 break; 5117 case 258: /* cmd ::= createkw trigger_decl BEGIN trigger_cmd_list END */ 5118 #line 1516 "parse.y" 5119 { 5120 Token all; 5121 all.z = yymsp[-3].minor.yy0.z; 5122 all.n = (int)(yymsp[0].minor.yy0.z - yymsp[-3].minor.yy0.z) + yymsp[0].minor.yy0.n; 5123 sqlite3FinishTrigger(pParse, yymsp[-1].minor.yy33, &all); 5124 } 5125 #line 5150 "parse.sql" 5126 break; 5127 case 259: /* trigger_decl ::= temp TRIGGER ifnotexists nm dbnm trigger_time trigger_event ON fullname foreach_clause when_clause */ 5128 #line 1525 "parse.y" 5129 { 5130 sqlite3BeginTrigger(pParse, &yymsp[-7].minor.yy0, &yymsp[-6].minor.yy0, yymsp[-5].minor.yy394, yymsp[-4].minor.yy180.a, yymsp[-4].minor.yy180.b, yymsp[-2].minor.yy131, yymsp[0].minor.yy528, yymsp[-10].minor.yy394, yymsp[-8].minor.yy394); 5131 yymsp[-10].minor.yy0 = (yymsp[-6].minor.yy0.n==0?yymsp[-7].minor.yy0:yymsp[-6].minor.yy0); /*A-overwrites-T*/ 5132 } 5133 #line 5158 "parse.sql" 5134 break; 5135 case 260: /* trigger_time ::= BEFORE|AFTER */ 5136 #line 1531 "parse.y" 5137 { yymsp[0].minor.yy394 = yymsp[0].major; /*A-overwrites-X*/ } 5138 #line 5163 "parse.sql" 5139 break; 5140 case 261: /* trigger_time ::= INSTEAD OF */ 5141 #line 1532 "parse.y" 5142 { yymsp[-1].minor.yy394 = TK_INSTEAD;} 5143 #line 5168 "parse.sql" 5144 break; 5145 case 262: /* trigger_time ::= */ 5146 #line 1533 "parse.y" 5147 { yymsp[1].minor.yy394 = TK_BEFORE; } 5148 #line 5173 "parse.sql" 5149 break; 5150 case 263: /* trigger_event ::= DELETE|INSERT */ 5151 case 264: /* trigger_event ::= UPDATE */ yytestcase(yyruleno==264); 5152 #line 1537 "parse.y" 5153 {yymsp[0].minor.yy180.a = yymsp[0].major; /*A-overwrites-X*/ yymsp[0].minor.yy180.b = 0;} 5154 #line 5179 "parse.sql" 5155 break; 5156 case 265: /* trigger_event ::= UPDATE OF idlist */ 5157 #line 1539 "parse.y" 5158 {yymsp[-2].minor.yy180.a = TK_UPDATE; yymsp[-2].minor.yy180.b = yymsp[0].minor.yy254;} 5159 #line 5184 "parse.sql" 5160 break; 5161 case 266: /* when_clause ::= */ 5162 case 285: /* key_opt ::= */ yytestcase(yyruleno==285); 5163 #line 1546 "parse.y" 5164 { yymsp[1].minor.yy528 = 0; } 5165 #line 5190 "parse.sql" 5166 break; 5167 case 267: /* when_clause ::= WHEN expr */ 5168 case 286: /* key_opt ::= KEY expr */ yytestcase(yyruleno==286); 5169 #line 1547 "parse.y" 5170 { yymsp[-1].minor.yy528 = yymsp[0].minor.yy528; } 5171 #line 5196 "parse.sql" 5172 break; 5173 case 268: /* trigger_cmd_list ::= trigger_cmd_list trigger_cmd SEMI */ 5174 #line 1551 "parse.y" 5175 { 5176 assert( yymsp[-2].minor.yy33!=0 ); 5177 yymsp[-2].minor.yy33->pLast->pNext = yymsp[-1].minor.yy33; 5178 yymsp[-2].minor.yy33->pLast = yymsp[-1].minor.yy33; 5179 } 5180 #line 5205 "parse.sql" 5181 break; 5182 case 269: /* trigger_cmd_list ::= trigger_cmd SEMI */ 5183 #line 1556 "parse.y" 5184 { 5185 assert( yymsp[-1].minor.yy33!=0 ); 5186 yymsp[-1].minor.yy33->pLast = yymsp[-1].minor.yy33; 5187 } 5188 #line 5213 "parse.sql" 5189 break; 5190 case 270: /* trnm ::= nm DOT nm */ 5191 #line 1567 "parse.y" 5192 { 5193 yymsp[-2].minor.yy0 = yymsp[0].minor.yy0; 5194 sqlite3ErrorMsg(pParse, 5195 "qualified table names are not allowed on INSERT, UPDATE, and DELETE " 5196 "statements within triggers"); 5197 } 5198 #line 5223 "parse.sql" 5199 break; 5200 case 271: /* tridxby ::= INDEXED BY nm */ 5201 #line 1579 "parse.y" 5202 { 5203 sqlite3ErrorMsg(pParse, 5204 "the INDEXED BY clause is not allowed on UPDATE or DELETE statements " 5205 "within triggers"); 5206 } 5207 #line 5232 "parse.sql" 5208 break; 5209 case 272: /* tridxby ::= NOT INDEXED */ 5210 #line 1584 "parse.y" 5211 { 5212 sqlite3ErrorMsg(pParse, 5213 "the NOT INDEXED clause is not allowed on UPDATE or DELETE statements " 5214 "within triggers"); 5215 } 5216 #line 5241 "parse.sql" 5217 break; 5218 case 273: /* trigger_cmd ::= UPDATE orconf trnm tridxby SET setlist from where_opt scanpt */ 5219 #line 1597 "parse.y" 5220 {yylhsminor.yy33 = sqlite3TriggerUpdateStep(pParse, &yymsp[-6].minor.yy0, yymsp[-2].minor.yy131, yymsp[-3].minor.yy322, yymsp[-1].minor.yy528, yymsp[-7].minor.yy394, yymsp[-8].minor.yy0.z, yymsp[0].minor.yy522);} 5221 #line 5246 "parse.sql" 5222 yymsp[-8].minor.yy33 = yylhsminor.yy33; 5223 break; 5224 case 274: /* trigger_cmd ::= scanpt insert_cmd INTO trnm idlist_opt select upsert scanpt */ 5225 #line 1601 "parse.y" 5226 { 5227 yylhsminor.yy33 = sqlite3TriggerInsertStep(pParse,&yymsp[-4].minor.yy0,yymsp[-3].minor.yy254,yymsp[-2].minor.yy47,yymsp[-6].minor.yy394,yymsp[-1].minor.yy444,yymsp[-7].minor.yy522,yymsp[0].minor.yy522);/*yylhsminor.yy33-overwrites-yymsp[-6].minor.yy394*/ 5228 } 5229 #line 5254 "parse.sql" 5230 yymsp[-7].minor.yy33 = yylhsminor.yy33; 5231 break; 5232 case 275: /* trigger_cmd ::= DELETE FROM trnm tridxby where_opt scanpt */ 5233 #line 1606 "parse.y" 5234 {yylhsminor.yy33 = sqlite3TriggerDeleteStep(pParse, &yymsp[-3].minor.yy0, yymsp[-1].minor.yy528, yymsp[-5].minor.yy0.z, yymsp[0].minor.yy522);} 5235 #line 5260 "parse.sql" 5236 yymsp[-5].minor.yy33 = yylhsminor.yy33; 5237 break; 5238 case 276: /* trigger_cmd ::= scanpt select scanpt */ 5239 #line 1610 "parse.y" 5240 {yylhsminor.yy33 = sqlite3TriggerSelectStep(pParse->db, yymsp[-1].minor.yy47, yymsp[-2].minor.yy522, yymsp[0].minor.yy522); /*yylhsminor.yy33-overwrites-yymsp[-1].minor.yy47*/} 5241 #line 5266 "parse.sql" 5242 yymsp[-2].minor.yy33 = yylhsminor.yy33; 5243 break; 5244 case 277: /* expr ::= RAISE LP IGNORE RP */ 5245 #line 1613 "parse.y" 5246 { 5247 yymsp[-3].minor.yy528 = sqlite3PExpr(pParse, TK_RAISE, 0, 0); 5248 if( yymsp[-3].minor.yy528 ){ 5249 yymsp[-3].minor.yy528->affExpr = OE_Ignore; 5250 } 5251 } 5252 #line 5277 "parse.sql" 5253 break; 5254 case 278: /* expr ::= RAISE LP raisetype COMMA nm RP */ 5255 #line 1619 "parse.y" 5256 { 5257 yymsp[-5].minor.yy528 = sqlite3ExprAlloc(pParse->db, TK_RAISE, &yymsp[-1].minor.yy0, 1); 5258 if( yymsp[-5].minor.yy528 ) { 5259 yymsp[-5].minor.yy528->affExpr = (char)yymsp[-3].minor.yy394; 5260 } 5261 } 5262 #line 5287 "parse.sql" 5263 break; 5264 case 279: /* raisetype ::= ROLLBACK */ 5265 #line 1628 "parse.y" 5266 {yymsp[0].minor.yy394 = OE_Rollback;} 5267 #line 5292 "parse.sql" 5268 break; 5269 case 281: /* raisetype ::= FAIL */ 5270 #line 1630 "parse.y" 5271 {yymsp[0].minor.yy394 = OE_Fail;} 5272 #line 5297 "parse.sql" 5273 break; 5274 case 282: /* cmd ::= DROP TRIGGER ifexists fullname */ 5275 #line 1635 "parse.y" 5276 { 5277 sqlite3DropTrigger(pParse,yymsp[0].minor.yy131,yymsp[-1].minor.yy394); 5278 } 5279 #line 5304 "parse.sql" 5280 break; 5281 case 283: /* cmd ::= ATTACH database_kw_opt expr AS expr key_opt */ 5282 #line 1642 "parse.y" 5283 { 5284 sqlite3Attach(pParse, yymsp[-3].minor.yy528, yymsp[-1].minor.yy528, yymsp[0].minor.yy528); 5285 } 5286 #line 5311 "parse.sql" 5287 break; 5288 case 284: /* cmd ::= DETACH database_kw_opt expr */ 5289 #line 1645 "parse.y" 5290 { 5291 sqlite3Detach(pParse, yymsp[0].minor.yy528); 5292 } 5293 #line 5318 "parse.sql" 5294 break; 5295 case 287: /* cmd ::= REINDEX */ 5296 #line 1660 "parse.y" 5297 {sqlite3Reindex(pParse, 0, 0);} 5298 #line 5323 "parse.sql" 5299 break; 5300 case 288: /* cmd ::= REINDEX nm dbnm */ 5301 #line 1661 "parse.y" 5302 {sqlite3Reindex(pParse, &yymsp[-1].minor.yy0, &yymsp[0].minor.yy0);} 5303 #line 5328 "parse.sql" 5304 break; 5305 case 289: /* cmd ::= ANALYZE */ 5306 #line 1666 "parse.y" 5307 {sqlite3Analyze(pParse, 0, 0);} 5308 #line 5333 "parse.sql" 5309 break; 5310 case 290: /* cmd ::= ANALYZE nm dbnm */ 5311 #line 1667 "parse.y" 5312 {sqlite3Analyze(pParse, &yymsp[-1].minor.yy0, &yymsp[0].minor.yy0);} 5313 #line 5338 "parse.sql" 5314 break; 5315 case 291: /* cmd ::= ALTER TABLE fullname RENAME TO nm */ 5316 #line 1673 "parse.y" 5317 { 5318 sqlite3AlterRenameTable(pParse,yymsp[-3].minor.yy131,&yymsp[0].minor.yy0); 5319 } 5320 #line 5345 "parse.sql" 5321 break; 5322 case 292: /* cmd ::= ALTER TABLE add_column_fullname ADD kwcolumn_opt columnname carglist */ 5323 #line 1677 "parse.y" 5324 { 5325 yymsp[-1].minor.yy0.n = (int)(pParse->sLastToken.z-yymsp[-1].minor.yy0.z) + pParse->sLastToken.n; 5326 sqlite3AlterFinishAddColumn(pParse, &yymsp[-1].minor.yy0); 5327 } 5328 #line 5353 "parse.sql" 5329 break; 5330 case 293: /* cmd ::= ALTER TABLE fullname DROP kwcolumn_opt nm */ 5331 #line 1681 "parse.y" 5332 { 5333 sqlite3AlterDropColumn(pParse, yymsp[-3].minor.yy131, &yymsp[0].minor.yy0); 5334 } 5335 #line 5360 "parse.sql" 5336 break; 5337 case 294: /* add_column_fullname ::= fullname */ 5338 #line 1685 "parse.y" 5339 { 5340 disableLookaside(pParse); 5341 sqlite3AlterBeginAddColumn(pParse, yymsp[0].minor.yy131); 5342 } 5343 #line 5368 "parse.sql" 5344 break; 5345 case 295: /* cmd ::= ALTER TABLE fullname RENAME kwcolumn_opt nm TO nm */ 5346 #line 1689 "parse.y" 5347 { 5348 sqlite3AlterRenameColumn(pParse, yymsp[-5].minor.yy131, &yymsp[-2].minor.yy0, &yymsp[0].minor.yy0); 5349 } 5350 #line 5375 "parse.sql" 5351 break; 5352 case 296: /* cmd ::= create_vtab */ 5353 #line 1701 "parse.y" 5354 {sqlite3VtabFinishParse(pParse,0);} 5355 #line 5380 "parse.sql" 5356 break; 5357 case 297: /* cmd ::= create_vtab LP vtabarglist RP */ 5358 #line 1702 "parse.y" 5359 {sqlite3VtabFinishParse(pParse,&yymsp[0].minor.yy0);} 5360 #line 5385 "parse.sql" 5361 break; 5362 case 298: /* create_vtab ::= createkw VIRTUAL TABLE ifnotexists nm dbnm USING nm */ 5363 #line 1704 "parse.y" 5364 { 5365 sqlite3VtabBeginParse(pParse, &yymsp[-3].minor.yy0, &yymsp[-2].minor.yy0, &yymsp[0].minor.yy0, yymsp[-4].minor.yy394); 5366 } 5367 #line 5392 "parse.sql" 5368 break; 5369 case 299: /* vtabarg ::= */ 5370 #line 1709 "parse.y" 5371 {sqlite3VtabArgInit(pParse);} 5372 #line 5397 "parse.sql" 5373 break; 5374 case 300: /* vtabargtoken ::= ANY */ 5375 case 301: /* vtabargtoken ::= lp anylist RP */ yytestcase(yyruleno==301); 5376 case 302: /* lp ::= LP */ yytestcase(yyruleno==302); 5377 #line 1711 "parse.y" 5378 {sqlite3VtabArgExtend(pParse,&yymsp[0].minor.yy0);} 5379 #line 5404 "parse.sql" 5380 break; 5381 case 303: /* with ::= WITH wqlist */ 5382 case 304: /* with ::= WITH RECURSIVE wqlist */ yytestcase(yyruleno==304); 5383 #line 1728 "parse.y" 5384 { sqlite3WithPush(pParse, yymsp[0].minor.yy521, 1); } 5385 #line 5410 "parse.sql" 5386 break; 5387 case 305: /* wqas ::= AS */ 5388 #line 1732 "parse.y" 5389 {yymsp[0].minor.yy516 = M10d_Any;} 5390 #line 5415 "parse.sql" 5391 break; 5392 case 306: /* wqas ::= AS MATERIALIZED */ 5393 #line 1733 "parse.y" 5394 {yymsp[-1].minor.yy516 = M10d_Yes;} 5395 #line 5420 "parse.sql" 5396 break; 5397 case 307: /* wqas ::= AS NOT MATERIALIZED */ 5398 #line 1734 "parse.y" 5399 {yymsp[-2].minor.yy516 = M10d_No;} 5400 #line 5425 "parse.sql" 5401 break; 5402 case 308: /* wqitem ::= nm eidlist_opt wqas LP select RP */ 5403 #line 1735 "parse.y" 5404 { 5405 yymsp[-5].minor.yy385 = sqlite3CteNew(pParse, &yymsp[-5].minor.yy0, yymsp[-4].minor.yy322, yymsp[-1].minor.yy47, yymsp[-3].minor.yy516); /*A-overwrites-X*/ 5406 } 5407 #line 5432 "parse.sql" 5408 break; 5409 case 309: /* wqlist ::= wqitem */ 5410 #line 1738 "parse.y" 5411 { 5412 yymsp[0].minor.yy521 = sqlite3WithAdd(pParse, 0, yymsp[0].minor.yy385); /*A-overwrites-X*/ 5413 } 5414 #line 5439 "parse.sql" 5415 break; 5416 case 310: /* wqlist ::= wqlist COMMA wqitem */ 5417 #line 1741 "parse.y" 5418 { 5419 yymsp[-2].minor.yy521 = sqlite3WithAdd(pParse, yymsp[-2].minor.yy521, yymsp[0].minor.yy385); 5420 } 5421 #line 5446 "parse.sql" 5422 break; 5423 case 311: /* windowdefn_list ::= windowdefn */ 5424 #line 1755 "parse.y" 5425 { yylhsminor.yy41 = yymsp[0].minor.yy41; } 5426 #line 5451 "parse.sql" 5427 yymsp[0].minor.yy41 = yylhsminor.yy41; 5428 break; 5429 case 312: /* windowdefn_list ::= windowdefn_list COMMA windowdefn */ 5430 #line 1756 "parse.y" 5431 { 5432 assert( yymsp[0].minor.yy41!=0 ); 5433 sqlite3WindowChain(pParse, yymsp[0].minor.yy41, yymsp[-2].minor.yy41); 5434 yymsp[0].minor.yy41->pNextWin = yymsp[-2].minor.yy41; 5435 yylhsminor.yy41 = yymsp[0].minor.yy41; 5436 } 5437 #line 5462 "parse.sql" 5438 yymsp[-2].minor.yy41 = yylhsminor.yy41; 5439 break; 5440 case 313: /* windowdefn ::= nm AS LP window RP */ 5441 #line 1765 "parse.y" 5442 { 5443 if( ALWAYS(yymsp[-1].minor.yy41) ){ 5444 yymsp[-1].minor.yy41->zName = sqlite3DbStrNDup(pParse->db, yymsp[-4].minor.yy0.z, yymsp[-4].minor.yy0.n); 5445 } 5446 yylhsminor.yy41 = yymsp[-1].minor.yy41; 5447 } 5448 #line 5473 "parse.sql" 5449 yymsp[-4].minor.yy41 = yylhsminor.yy41; 5450 break; 5451 case 314: /* window ::= PARTITION BY nexprlist orderby_opt frame_opt */ 5452 #line 1799 "parse.y" 5453 { 5454 yymsp[-4].minor.yy41 = sqlite3WindowAssemble(pParse, yymsp[0].minor.yy41, yymsp[-2].minor.yy322, yymsp[-1].minor.yy322, 0); 5455 } 5456 #line 5481 "parse.sql" 5457 break; 5458 case 315: /* window ::= nm PARTITION BY nexprlist orderby_opt frame_opt */ 5459 #line 1802 "parse.y" 5460 { 5461 yylhsminor.yy41 = sqlite3WindowAssemble(pParse, yymsp[0].minor.yy41, yymsp[-2].minor.yy322, yymsp[-1].minor.yy322, &yymsp[-5].minor.yy0); 5462 } 5463 #line 5488 "parse.sql" 5464 yymsp[-5].minor.yy41 = yylhsminor.yy41; 5465 break; 5466 case 316: /* window ::= ORDER BY sortlist frame_opt */ 5467 #line 1805 "parse.y" 5468 { 5469 yymsp[-3].minor.yy41 = sqlite3WindowAssemble(pParse, yymsp[0].minor.yy41, 0, yymsp[-1].minor.yy322, 0); 5470 } 5471 #line 5496 "parse.sql" 5472 break; 5473 case 317: /* window ::= nm ORDER BY sortlist frame_opt */ 5474 #line 1808 "parse.y" 5475 { 5476 yylhsminor.yy41 = sqlite3WindowAssemble(pParse, yymsp[0].minor.yy41, 0, yymsp[-1].minor.yy322, &yymsp[-4].minor.yy0); 5477 } 5478 #line 5503 "parse.sql" 5479 yymsp[-4].minor.yy41 = yylhsminor.yy41; 5480 break; 5481 case 318: /* window ::= frame_opt */ 5482 case 337: /* filter_over ::= over_clause */ yytestcase(yyruleno==337); 5483 #line 1811 "parse.y" 5484 { 5485 yylhsminor.yy41 = yymsp[0].minor.yy41; 5486 } 5487 #line 5512 "parse.sql" 5488 yymsp[0].minor.yy41 = yylhsminor.yy41; 5489 break; 5490 case 319: /* window ::= nm frame_opt */ 5491 #line 1814 "parse.y" 5492 { 5493 yylhsminor.yy41 = sqlite3WindowAssemble(pParse, yymsp[0].minor.yy41, 0, 0, &yymsp[-1].minor.yy0); 5494 } 5495 #line 5520 "parse.sql" 5496 yymsp[-1].minor.yy41 = yylhsminor.yy41; 5497 break; 5498 case 320: /* frame_opt ::= */ 5499 #line 1818 "parse.y" 5500 { 5501 yymsp[1].minor.yy41 = sqlite3WindowAlloc(pParse, 0, TK_UNBOUNDED, 0, TK_CURRENT, 0, 0); 5502 } 5503 #line 5528 "parse.sql" 5504 break; 5505 case 321: /* frame_opt ::= range_or_rows frame_bound_s frame_exclude_opt */ 5506 #line 1821 "parse.y" 5507 { 5508 yylhsminor.yy41 = sqlite3WindowAlloc(pParse, yymsp[-2].minor.yy394, yymsp[-1].minor.yy595.eType, yymsp[-1].minor.yy595.pExpr, TK_CURRENT, 0, yymsp[0].minor.yy516); 5509 } 5510 #line 5535 "parse.sql" 5511 yymsp[-2].minor.yy41 = yylhsminor.yy41; 5512 break; 5513 case 322: /* frame_opt ::= range_or_rows BETWEEN frame_bound_s AND frame_bound_e frame_exclude_opt */ 5514 #line 1825 "parse.y" 5515 { 5516 yylhsminor.yy41 = sqlite3WindowAlloc(pParse, yymsp[-5].minor.yy394, yymsp[-3].minor.yy595.eType, yymsp[-3].minor.yy595.pExpr, yymsp[-1].minor.yy595.eType, yymsp[-1].minor.yy595.pExpr, yymsp[0].minor.yy516); 5517 } 5518 #line 5543 "parse.sql" 5519 yymsp[-5].minor.yy41 = yylhsminor.yy41; 5520 break; 5521 case 324: /* frame_bound_s ::= frame_bound */ 5522 case 326: /* frame_bound_e ::= frame_bound */ yytestcase(yyruleno==326); 5523 #line 1831 "parse.y" 5524 {yylhsminor.yy595 = yymsp[0].minor.yy595;} 5525 #line 5550 "parse.sql" 5526 yymsp[0].minor.yy595 = yylhsminor.yy595; 5527 break; 5528 case 325: /* frame_bound_s ::= UNBOUNDED PRECEDING */ 5529 case 327: /* frame_bound_e ::= UNBOUNDED FOLLOWING */ yytestcase(yyruleno==327); 5530 case 329: /* frame_bound ::= CURRENT ROW */ yytestcase(yyruleno==329); 5531 #line 1832 "parse.y" 5532 {yylhsminor.yy595.eType = yymsp[-1].major; yylhsminor.yy595.pExpr = 0;} 5533 #line 5558 "parse.sql" 5534 yymsp[-1].minor.yy595 = yylhsminor.yy595; 5535 break; 5536 case 328: /* frame_bound ::= expr PRECEDING|FOLLOWING */ 5537 #line 1837 "parse.y" 5538 {yylhsminor.yy595.eType = yymsp[0].major; yylhsminor.yy595.pExpr = yymsp[-1].minor.yy528;} 5539 #line 5564 "parse.sql" 5540 yymsp[-1].minor.yy595 = yylhsminor.yy595; 5541 break; 5542 case 330: /* frame_exclude_opt ::= */ 5543 #line 1841 "parse.y" 5544 {yymsp[1].minor.yy516 = 0;} 5545 #line 5570 "parse.sql" 5546 break; 5547 case 331: /* frame_exclude_opt ::= EXCLUDE frame_exclude */ 5548 #line 1842 "parse.y" 5549 {yymsp[-1].minor.yy516 = yymsp[0].minor.yy516;} 5550 #line 5575 "parse.sql" 5551 break; 5552 case 332: /* frame_exclude ::= NO OTHERS */ 5553 case 333: /* frame_exclude ::= CURRENT ROW */ yytestcase(yyruleno==333); 5554 #line 1845 "parse.y" 5555 {yymsp[-1].minor.yy516 = yymsp[-1].major; /*A-overwrites-X*/} 5556 #line 5581 "parse.sql" 5557 break; 5558 case 334: /* frame_exclude ::= GROUP|TIES */ 5559 #line 1847 "parse.y" 5560 {yymsp[0].minor.yy516 = yymsp[0].major; /*A-overwrites-X*/} 5561 #line 5586 "parse.sql" 5562 break; 5563 case 335: /* window_clause ::= WINDOW windowdefn_list */ 5564 #line 1852 "parse.y" 5565 { yymsp[-1].minor.yy41 = yymsp[0].minor.yy41; } 5566 #line 5591 "parse.sql" 5567 break; 5568 case 336: /* filter_over ::= filter_clause over_clause */ 5569 #line 1854 "parse.y" 5570 { 5571 if( yymsp[0].minor.yy41 ){ 5572 yymsp[0].minor.yy41->pFilter = yymsp[-1].minor.yy528; 5573 }else{ 5574 sqlite3ExprDelete(pParse->db, yymsp[-1].minor.yy528); 5575 } 5576 yylhsminor.yy41 = yymsp[0].minor.yy41; 5577 } 5578 #line 5603 "parse.sql" 5579 yymsp[-1].minor.yy41 = yylhsminor.yy41; 5580 break; 5581 case 338: /* filter_over ::= filter_clause */ 5582 #line 1865 "parse.y" 5583 { 5584 yylhsminor.yy41 = (Window*)sqlite3DbMallocZero(pParse->db, sizeof(Window)); 5585 if( yylhsminor.yy41 ){ 5586 yylhsminor.yy41->eFrmType = TK_FILTER; 5587 yylhsminor.yy41->pFilter = yymsp[0].minor.yy528; 5588 }else{ 5589 sqlite3ExprDelete(pParse->db, yymsp[0].minor.yy528); 5590 } 5591 } 5592 #line 5617 "parse.sql" 5593 yymsp[0].minor.yy41 = yylhsminor.yy41; 5594 break; 5595 case 339: /* over_clause ::= OVER LP window RP */ 5596 #line 1875 "parse.y" 5597 { 5598 yymsp[-3].minor.yy41 = yymsp[-1].minor.yy41; 5599 assert( yymsp[-3].minor.yy41!=0 ); 5600 } 5601 #line 5626 "parse.sql" 5602 break; 5603 case 340: /* over_clause ::= OVER nm */ 5604 #line 1879 "parse.y" 5605 { 5606 yymsp[-1].minor.yy41 = (Window*)sqlite3DbMallocZero(pParse->db, sizeof(Window)); 5607 if( yymsp[-1].minor.yy41 ){ 5608 yymsp[-1].minor.yy41->zName = sqlite3DbStrNDup(pParse->db, yymsp[0].minor.yy0.z, yymsp[0].minor.yy0.n); 5609 } 5610 } 5611 #line 5636 "parse.sql" 5612 break; 5613 case 341: /* filter_clause ::= FILTER LP WHERE expr RP */ 5614 #line 1886 "parse.y" 5615 { yymsp[-4].minor.yy528 = yymsp[-1].minor.yy528; } 5616 #line 5641 "parse.sql" 5617 break; 5618 default: 5619 /* (342) input ::= cmdlist */ yytestcase(yyruleno==342); 5620 /* (343) cmdlist ::= cmdlist ecmd */ yytestcase(yyruleno==343); 5621 /* (344) cmdlist ::= ecmd (OPTIMIZED OUT) */ assert(yyruleno!=344); 5622 /* (345) ecmd ::= SEMI */ yytestcase(yyruleno==345); 5623 /* (346) ecmd ::= cmdx SEMI */ yytestcase(yyruleno==346); 5624 /* (347) ecmd ::= explain cmdx SEMI (NEVER REDUCES) */ assert(yyruleno!=347); 5625 /* (348) trans_opt ::= */ yytestcase(yyruleno==348); 5626 /* (349) trans_opt ::= TRANSACTION */ yytestcase(yyruleno==349); 5627 /* (350) trans_opt ::= TRANSACTION nm */ yytestcase(yyruleno==350); 5628 /* (351) savepoint_opt ::= SAVEPOINT */ yytestcase(yyruleno==351); 5629 /* (352) savepoint_opt ::= */ yytestcase(yyruleno==352); 5630 /* (353) cmd ::= create_table create_table_args */ yytestcase(yyruleno==353); 5631 /* (354) table_option_set ::= table_option (OPTIMIZED OUT) */ assert(yyruleno!=354); 5632 /* (355) columnlist ::= columnlist COMMA columnname carglist */ yytestcase(yyruleno==355); 5633 /* (356) columnlist ::= columnname carglist */ yytestcase(yyruleno==356); 5634 /* (357) nm ::= ID|INDEXED */ yytestcase(yyruleno==357); 5635 /* (358) nm ::= STRING */ yytestcase(yyruleno==358); 5636 /* (359) nm ::= JOIN_KW */ yytestcase(yyruleno==359); 5637 /* (360) typetoken ::= typename */ yytestcase(yyruleno==360); 5638 /* (361) typename ::= ID|STRING */ yytestcase(yyruleno==361); 5639 /* (362) signed ::= plus_num (OPTIMIZED OUT) */ assert(yyruleno!=362); 5640 /* (363) signed ::= minus_num (OPTIMIZED OUT) */ assert(yyruleno!=363); 5641 /* (364) carglist ::= carglist ccons */ yytestcase(yyruleno==364); 5642 /* (365) carglist ::= */ yytestcase(yyruleno==365); 5643 /* (366) ccons ::= NULL onconf */ yytestcase(yyruleno==366); 5644 /* (367) ccons ::= GENERATED ALWAYS AS generated */ yytestcase(yyruleno==367); 5645 /* (368) ccons ::= AS generated */ yytestcase(yyruleno==368); 5646 /* (369) conslist_opt ::= COMMA conslist */ yytestcase(yyruleno==369); 5647 /* (370) conslist ::= conslist tconscomma tcons */ yytestcase(yyruleno==370); 5648 /* (371) conslist ::= tcons (OPTIMIZED OUT) */ assert(yyruleno!=371); 5649 /* (372) tconscomma ::= */ yytestcase(yyruleno==372); 5650 /* (373) defer_subclause_opt ::= defer_subclause (OPTIMIZED OUT) */ assert(yyruleno!=373); 5651 /* (374) resolvetype ::= raisetype (OPTIMIZED OUT) */ assert(yyruleno!=374); 5652 /* (375) selectnowith ::= oneselect (OPTIMIZED OUT) */ assert(yyruleno!=375); 5653 /* (376) oneselect ::= values */ yytestcase(yyruleno==376); 5654 /* (377) sclp ::= selcollist COMMA */ yytestcase(yyruleno==377); 5655 /* (378) as ::= ID|STRING */ yytestcase(yyruleno==378); 5656 /* (379) indexed_opt ::= indexed_by (OPTIMIZED OUT) */ assert(yyruleno!=379); 5657 /* (380) returning ::= */ yytestcase(yyruleno==380); 5658 /* (381) expr ::= term (OPTIMIZED OUT) */ assert(yyruleno!=381); 5659 /* (382) likeop ::= LIKE_KW|MATCH */ yytestcase(yyruleno==382); 5660 /* (383) exprlist ::= nexprlist */ yytestcase(yyruleno==383); 5661 /* (384) nmnum ::= plus_num (OPTIMIZED OUT) */ assert(yyruleno!=384); 5662 /* (385) nmnum ::= nm (OPTIMIZED OUT) */ assert(yyruleno!=385); 5663 /* (386) nmnum ::= ON */ yytestcase(yyruleno==386); 5664 /* (387) nmnum ::= DELETE */ yytestcase(yyruleno==387); 5665 /* (388) nmnum ::= DEFAULT */ yytestcase(yyruleno==388); 5666 /* (389) plus_num ::= INTEGER|FLOAT */ yytestcase(yyruleno==389); 5667 /* (390) foreach_clause ::= */ yytestcase(yyruleno==390); 5668 /* (391) foreach_clause ::= FOR EACH ROW */ yytestcase(yyruleno==391); 5669 /* (392) trnm ::= nm */ yytestcase(yyruleno==392); 5670 /* (393) tridxby ::= */ yytestcase(yyruleno==393); 5671 /* (394) database_kw_opt ::= DATABASE */ yytestcase(yyruleno==394); 5672 /* (395) database_kw_opt ::= */ yytestcase(yyruleno==395); 5673 /* (396) kwcolumn_opt ::= */ yytestcase(yyruleno==396); 5674 /* (397) kwcolumn_opt ::= COLUMNKW */ yytestcase(yyruleno==397); 5675 /* (398) vtabarglist ::= vtabarg */ yytestcase(yyruleno==398); 5676 /* (399) vtabarglist ::= vtabarglist COMMA vtabarg */ yytestcase(yyruleno==399); 5677 /* (400) vtabarg ::= vtabarg vtabargtoken */ yytestcase(yyruleno==400); 5678 /* (401) anylist ::= */ yytestcase(yyruleno==401); 5679 /* (402) anylist ::= anylist LP anylist RP */ yytestcase(yyruleno==402); 5680 /* (403) anylist ::= anylist ANY */ yytestcase(yyruleno==403); 5681 /* (404) with ::= */ yytestcase(yyruleno==404); 5682 break; 5683 /********** End reduce actions ************************************************/ 5684 }; 5685 assert( yyruleno<sizeof(yyRuleInfoLhs)/sizeof(yyRuleInfoLhs[0]) ); 5686 yygoto = yyRuleInfoLhs[yyruleno]; 5687 yysize = yyRuleInfoNRhs[yyruleno]; 5688 yyact = yy_find_reduce_action(yymsp[yysize].stateno,(YYCODETYPE)yygoto); 5689 5690 /* There are no SHIFTREDUCE actions on nonterminals because the table 5691 ** generator has simplified them to pure REDUCE actions. */ 5692 assert( !(yyact>YY_MAX_SHIFT && yyact<=YY_MAX_SHIFTREDUCE) ); 5693 5694 /* It is not possible for a REDUCE to be followed by an error */ 5695 assert( yyact!=YY_ERROR_ACTION ); 5696 5697 yymsp += yysize+1; 5698 yypParser->yytos = yymsp; 5699 yymsp->stateno = (YYACTIONTYPE)yyact; 5700 yymsp->major = (YYCODETYPE)yygoto; 5701 yyTraceShift(yypParser, yyact, "... then shift"); 5702 return yyact; 5703 } 5704 5705 /* 5706 ** The following code executes when the parse fails 5707 */ 5708 #ifndef YYNOERRORRECOVERY 5709 static void yy_parse_failed( 5710 yyParser *yypParser /* The parser */ 5711 ){ 5712 sqlite3ParserARG_FETCH 5713 sqlite3ParserCTX_FETCH 5714 #ifndef NDEBUG 5715 if( yyTraceFILE ){ 5716 fprintf(yyTraceFILE,"%sFail!\n",yyTracePrompt); 5717 } 5718 #endif 5719 while( yypParser->yytos>yypParser->yystack ) yy_pop_parser_stack(yypParser); 5720 /* Here code is inserted which will be executed whenever the 5721 ** parser fails */ 5722 /************ Begin %parse_failure code ***************************************/ 5723 /************ End %parse_failure code *****************************************/ 5724 sqlite3ParserARG_STORE /* Suppress warning about unused %extra_argument variable */ 5725 sqlite3ParserCTX_STORE 5726 } 5727 #endif /* YYNOERRORRECOVERY */ 5728 5729 /* 5730 ** The following code executes when a syntax error first occurs. 5731 */ 5732 static void yy_syntax_error( 5733 yyParser *yypParser, /* The parser */ 5734 int yymajor, /* The major type of the error token */ 5735 sqlite3ParserTOKENTYPE yyminor /* The minor type of the error token */ 5736 ){ 5737 sqlite3ParserARG_FETCH 5738 sqlite3ParserCTX_FETCH 5739 #define TOKEN yyminor 5740 /************ Begin %syntax_error code ****************************************/ 5741 #line 39 "parse.y" 5742 5743 UNUSED_PARAMETER(yymajor); /* Silence some compiler warnings */ 5744 if( TOKEN.z[0] ){ 5745 sqlite3ErrorMsg(pParse, "near \"%T\": syntax error", &TOKEN); 5746 }else{ 5747 sqlite3ErrorMsg(pParse, "incomplete input"); 5748 } 5749 #line 5774 "parse.sql" 5750 /************ End %syntax_error code ******************************************/ 5751 sqlite3ParserARG_STORE /* Suppress warning about unused %extra_argument variable */ 5752 sqlite3ParserCTX_STORE 5753 } 5754 5755 /* 5756 ** The following is executed when the parser accepts 5757 */ 5758 static void yy_accept( 5759 yyParser *yypParser /* The parser */ 5760 ){ 5761 sqlite3ParserARG_FETCH 5762 sqlite3ParserCTX_FETCH 5763 #ifndef NDEBUG 5764 if( yyTraceFILE ){ 5765 fprintf(yyTraceFILE,"%sAccept!\n",yyTracePrompt); 5766 } 5767 #endif 5768 #ifndef YYNOERRORRECOVERY 5769 yypParser->yyerrcnt = -1; 5770 #endif 5771 assert( yypParser->yytos==yypParser->yystack ); 5772 /* Here code is inserted which will be executed whenever the 5773 ** parser accepts */ 5774 /*********** Begin %parse_accept code *****************************************/ 5775 /*********** End %parse_accept code *******************************************/ 5776 sqlite3ParserARG_STORE /* Suppress warning about unused %extra_argument variable */ 5777 sqlite3ParserCTX_STORE 5778 } 5779 5780 /* The main parser program. 5781 ** The first argument is a pointer to a structure obtained from 5782 ** "sqlite3ParserAlloc" which describes the current state of the parser. 5783 ** The second argument is the major token number. The third is 5784 ** the minor token. The fourth optional argument is whatever the 5785 ** user wants (and specified in the grammar) and is available for 5786 ** use by the action routines. 5787 ** 5788 ** Inputs: 5789 ** <ul> 5790 ** <li> A pointer to the parser (an opaque structure.) 5791 ** <li> The major token number. 5792 ** <li> The minor token number. 5793 ** <li> An option argument of a grammar-specified type. 5794 ** </ul> 5795 ** 5796 ** Outputs: 5797 ** None. 5798 */ 5799 void sqlite3Parser( 5800 void *yyp, /* The parser */ 5801 int yymajor, /* The major token code number */ 5802 sqlite3ParserTOKENTYPE yyminor /* The value for the token */ 5803 sqlite3ParserARG_PDECL /* Optional %extra_argument parameter */ 5804 ){ 5805 YYMINORTYPE yyminorunion; 5806 YYACTIONTYPE yyact; /* The parser action. */ 5807 #if !defined(YYERRORSYMBOL) && !defined(YYNOERRORRECOVERY) 5808 int yyendofinput; /* True if we are at the end of input */ 5809 #endif 5810 #ifdef YYERRORSYMBOL 5811 int yyerrorhit = 0; /* True if yymajor has invoked an error */ 5812 #endif 5813 yyParser *yypParser = (yyParser*)yyp; /* The parser */ 5814 sqlite3ParserCTX_FETCH 5815 sqlite3ParserARG_STORE 5816 5817 assert( yypParser->yytos!=0 ); 5818 #if !defined(YYERRORSYMBOL) && !defined(YYNOERRORRECOVERY) 5819 yyendofinput = (yymajor==0); 5820 #endif 5821 5822 yyact = yypParser->yytos->stateno; 5823 #ifndef NDEBUG 5824 if( yyTraceFILE ){ 5825 if( yyact < YY_MIN_REDUCE ){ 5826 fprintf(yyTraceFILE,"%sInput '%s' in state %d\n", 5827 yyTracePrompt,yyTokenName[yymajor],yyact); 5828 }else{ 5829 fprintf(yyTraceFILE,"%sInput '%s' with pending reduce %d\n", 5830 yyTracePrompt,yyTokenName[yymajor],yyact-YY_MIN_REDUCE); 5831 } 5832 } 5833 #endif 5834 5835 while(1){ /* Exit by "break" */ 5836 assert( yypParser->yytos>=yypParser->yystack ); 5837 assert( yyact==yypParser->yytos->stateno ); 5838 yyact = yy_find_shift_action((YYCODETYPE)yymajor,yyact); 5839 if( yyact >= YY_MIN_REDUCE ){ 5840 unsigned int yyruleno = yyact - YY_MIN_REDUCE; /* Reduce by this rule */ 5841 #ifndef NDEBUG 5842 assert( yyruleno<(int)(sizeof(yyRuleName)/sizeof(yyRuleName[0])) ); 5843 if( yyTraceFILE ){ 5844 int yysize = yyRuleInfoNRhs[yyruleno]; 5845 if( yysize ){ 5846 fprintf(yyTraceFILE, "%sReduce %d [%s]%s, pop back to state %d.\n", 5847 yyTracePrompt, 5848 yyruleno, yyRuleName[yyruleno], 5849 yyruleno<YYNRULE_WITH_ACTION ? "" : " without external action", 5850 yypParser->yytos[yysize].stateno); 5851 }else{ 5852 fprintf(yyTraceFILE, "%sReduce %d [%s]%s.\n", 5853 yyTracePrompt, yyruleno, yyRuleName[yyruleno], 5854 yyruleno<YYNRULE_WITH_ACTION ? "" : " without external action"); 5855 } 5856 } 5857 #endif /* NDEBUG */ 5858 5859 /* Check that the stack is large enough to grow by a single entry 5860 ** if the RHS of the rule is empty. This ensures that there is room 5861 ** enough on the stack to push the LHS value */ 5862 if( yyRuleInfoNRhs[yyruleno]==0 ){ 5863 #ifdef YYTRACKMAXSTACKDEPTH 5864 if( (int)(yypParser->yytos - yypParser->yystack)>yypParser->yyhwm ){ 5865 yypParser->yyhwm++; 5866 assert( yypParser->yyhwm == 5867 (int)(yypParser->yytos - yypParser->yystack)); 5868 } 5869 #endif 5870 #if YYSTACKDEPTH>0 5871 if( yypParser->yytos>=yypParser->yystackEnd ){ 5872 yyStackOverflow(yypParser); 5873 break; 5874 } 5875 #else 5876 if( yypParser->yytos>=&yypParser->yystack[yypParser->yystksz-1] ){ 5877 if( yyGrowStack(yypParser) ){ 5878 yyStackOverflow(yypParser); 5879 break; 5880 } 5881 } 5882 #endif 5883 } 5884 yyact = yy_reduce(yypParser,yyruleno,yymajor,yyminor sqlite3ParserCTX_PARAM); 5885 }else if( yyact <= YY_MAX_SHIFTREDUCE ){ 5886 yy_shift(yypParser,yyact,(YYCODETYPE)yymajor,yyminor); 5887 #ifndef YYNOERRORRECOVERY 5888 yypParser->yyerrcnt--; 5889 #endif 5890 break; 5891 }else if( yyact==YY_ACCEPT_ACTION ){ 5892 yypParser->yytos--; 5893 yy_accept(yypParser); 5894 return; 5895 }else{ 5896 assert( yyact == YY_ERROR_ACTION ); 5897 yyminorunion.yy0 = yyminor; 5898 #ifdef YYERRORSYMBOL 5899 int yymx; 5900 #endif 5901 #ifndef NDEBUG 5902 if( yyTraceFILE ){ 5903 fprintf(yyTraceFILE,"%sSyntax Error!\n",yyTracePrompt); 5904 } 5905 #endif 5906 #ifdef YYERRORSYMBOL 5907 /* A syntax error has occurred. 5908 ** The response to an error depends upon whether or not the 5909 ** grammar defines an error token "ERROR". 5910 ** 5911 ** This is what we do if the grammar does define ERROR: 5912 ** 5913 ** * Call the %syntax_error function. 5914 ** 5915 ** * Begin popping the stack until we enter a state where 5916 ** it is legal to shift the error symbol, then shift 5917 ** the error symbol. 5918 ** 5919 ** * Set the error count to three. 5920 ** 5921 ** * Begin accepting and shifting new tokens. No new error 5922 ** processing will occur until three tokens have been 5923 ** shifted successfully. 5924 ** 5925 */ 5926 if( yypParser->yyerrcnt<0 ){ 5927 yy_syntax_error(yypParser,yymajor,yyminor); 5928 } 5929 yymx = yypParser->yytos->major; 5930 if( yymx==YYERRORSYMBOL || yyerrorhit ){ 5931 #ifndef NDEBUG 5932 if( yyTraceFILE ){ 5933 fprintf(yyTraceFILE,"%sDiscard input token %s\n", 5934 yyTracePrompt,yyTokenName[yymajor]); 5935 } 5936 #endif 5937 yy_destructor(yypParser, (YYCODETYPE)yymajor, &yyminorunion); 5938 yymajor = YYNOCODE; 5939 }else{ 5940 while( yypParser->yytos > yypParser->yystack ){ 5941 yyact = yy_find_reduce_action(yypParser->yytos->stateno, 5942 YYERRORSYMBOL); 5943 if( yyact<=YY_MAX_SHIFTREDUCE ) break; 5944 yy_pop_parser_stack(yypParser); 5945 } 5946 if( yypParser->yytos <= yypParser->yystack || yymajor==0 ){ 5947 yy_destructor(yypParser,(YYCODETYPE)yymajor,&yyminorunion); 5948 yy_parse_failed(yypParser); 5949 #ifndef YYNOERRORRECOVERY 5950 yypParser->yyerrcnt = -1; 5951 #endif 5952 yymajor = YYNOCODE; 5953 }else if( yymx!=YYERRORSYMBOL ){ 5954 yy_shift(yypParser,yyact,YYERRORSYMBOL,yyminor); 5955 } 5956 } 5957 yypParser->yyerrcnt = 3; 5958 yyerrorhit = 1; 5959 if( yymajor==YYNOCODE ) break; 5960 yyact = yypParser->yytos->stateno; 5961 #elif defined(YYNOERRORRECOVERY) 5962 /* If the YYNOERRORRECOVERY macro is defined, then do not attempt to 5963 ** do any kind of error recovery. Instead, simply invoke the syntax 5964 ** error routine and continue going as if nothing had happened. 5965 ** 5966 ** Applications can set this macro (for example inside %include) if 5967 ** they intend to abandon the parse upon the first syntax error seen. 5968 */ 5969 yy_syntax_error(yypParser,yymajor, yyminor); 5970 yy_destructor(yypParser,(YYCODETYPE)yymajor,&yyminorunion); 5971 break; 5972 #else /* YYERRORSYMBOL is not defined */ 5973 /* This is what we do if the grammar does not define ERROR: 5974 ** 5975 ** * Report an error message, and throw away the input token. 5976 ** 5977 ** * If the input token is $, then fail the parse. 5978 ** 5979 ** As before, subsequent error messages are suppressed until 5980 ** three input tokens have been successfully shifted. 5981 */ 5982 if( yypParser->yyerrcnt<=0 ){ 5983 yy_syntax_error(yypParser,yymajor, yyminor); 5984 } 5985 yypParser->yyerrcnt = 3; 5986 yy_destructor(yypParser,(YYCODETYPE)yymajor,&yyminorunion); 5987 if( yyendofinput ){ 5988 yy_parse_failed(yypParser); 5989 #ifndef YYNOERRORRECOVERY 5990 yypParser->yyerrcnt = -1; 5991 #endif 5992 } 5993 break; 5994 #endif 5995 } 5996 } 5997 #ifndef NDEBUG 5998 if( yyTraceFILE ){ 5999 yyStackEntry *i; 6000 char cDiv = '['; 6001 fprintf(yyTraceFILE,"%sReturn. Stack=",yyTracePrompt); 6002 for(i=&yypParser->yystack[1]; i<=yypParser->yytos; i++){ 6003 fprintf(yyTraceFILE,"%c%s", cDiv, yyTokenName[i->major]); 6004 cDiv = ' '; 6005 } 6006 fprintf(yyTraceFILE,"]\n"); 6007 } 6008 #endif 6009 return; 6010 } 6011 6012 /* 6013 ** Return the fallback token corresponding to canonical token iToken, or 6014 ** 0 if iToken has no fallback. 6015 */ 6016 int sqlite3ParserFallback(int iToken){ 6017 #ifdef YYFALLBACK 6018 assert( iToken<(int)(sizeof(yyFallback)/sizeof(yyFallback[0])) ); 6019 return yyFallback[iToken]; 6020 #else 6021 (void)iToken; 6022 return 0; 6023 #endif 6024 } 6025