in sqlite/sqlite3_debug.c [158432:160461]
static YYACTIONTYPE yy_reduce(
yyParser *yypParser, /* The parser */
unsigned int yyruleno, /* Number of the rule by which to reduce */
int yyLookahead, /* Lookahead token, or YYNOCODE if none */
sqlite3ParserTOKENTYPE yyLookaheadToken /* Value of the lookahead token */
sqlite3ParserCTX_PDECL /* %extra_context */
){
int yygoto; /* The next state */
YYACTIONTYPE yyact; /* The next action */
yyStackEntry *yymsp; /* The top of the parser's stack */
int yysize; /* Amount to pop the stack */
sqlite3ParserARG_FETCH
(void)yyLookahead;
(void)yyLookaheadToken;
yymsp = yypParser->yytos;
assert( yyruleno<(int)(sizeof(yyRuleName)/sizeof(yyRuleName[0])) );
#ifndef NDEBUG
if( yyTraceFILE ){
yysize = yyRuleInfoNRhs[yyruleno];
if( yysize ){
fprintf(yyTraceFILE, "%sReduce %d [%s]%s, pop back to state %d.\n",
yyTracePrompt,
yyruleno, yyRuleName[yyruleno],
yyruleno<YYNRULE_WITH_ACTION ? "" : " without external action",
yymsp[yysize].stateno);
}else{
fprintf(yyTraceFILE, "%sReduce %d [%s]%s.\n",
yyTracePrompt, yyruleno, yyRuleName[yyruleno],
yyruleno<YYNRULE_WITH_ACTION ? "" : " without external action");
}
}
#endif /* NDEBUG */
/* Check that the stack is large enough to grow by a single entry
** if the RHS of the rule is empty. This ensures that there is room
** enough on the stack to push the LHS value */
if( yyRuleInfoNRhs[yyruleno]==0 ){
#ifdef YYTRACKMAXSTACKDEPTH
if( (int)(yypParser->yytos - yypParser->yystack)>yypParser->yyhwm ){
yypParser->yyhwm++;
assert( yypParser->yyhwm == (int)(yypParser->yytos - yypParser->yystack));
}
#endif
#if YYSTACKDEPTH>0
if( yypParser->yytos>=yypParser->yystackEnd ){
yyStackOverflow(yypParser);
/* The call to yyStackOverflow() above pops the stack until it is
** empty, causing the main parser loop to exit. So the return value
** is never used and does not matter. */
return 0;
}
#else
if( yypParser->yytos>=&yypParser->yystack[yypParser->yystksz-1] ){
if( yyGrowStack(yypParser) ){
yyStackOverflow(yypParser);
/* The call to yyStackOverflow() above pops the stack until it is
** empty, causing the main parser loop to exit. So the return value
** is never used and does not matter. */
return 0;
}
yymsp = yypParser->yytos;
}
#endif
}
switch( yyruleno ){
/* Beginning here are the reduction cases. A typical example
** follows:
** case 0:
** #line <lineno> <grammarfile>
** { ... } // User supplied code
** #line <lineno> <thisfile>
** break;
*/
/********** Begin reduce actions **********************************************/
YYMINORTYPE yylhsminor;
case 0: /* explain ::= EXPLAIN */
#line 151 "parse.y"
{ pParse->explain = 1; }
#line 3564 "parse.sql"
break;
case 1: /* explain ::= EXPLAIN QUERY PLAN */
#line 152 "parse.y"
{ pParse->explain = 2; }
#line 3569 "parse.sql"
break;
case 2: /* cmdx ::= cmd */
#line 154 "parse.y"
{ sqlite3FinishCoding(pParse); }
#line 3574 "parse.sql"
break;
case 3: /* cmd ::= BEGIN transtype trans_opt */
#line 159 "parse.y"
{sqlite3BeginTransaction(pParse, yymsp[-1].minor.yy192);}
#line 3579 "parse.sql"
break;
case 4: /* transtype ::= */
#line 164 "parse.y"
{yymsp[1].minor.yy192 = TK_DEFERRED;}
#line 3584 "parse.sql"
break;
case 5: /* transtype ::= DEFERRED */
case 6: /* transtype ::= IMMEDIATE */ yytestcase(yyruleno==6);
case 7: /* transtype ::= EXCLUSIVE */ yytestcase(yyruleno==7);
case 306: /* range_or_rows ::= RANGE|ROWS|GROUPS */ yytestcase(yyruleno==306);
#line 165 "parse.y"
{yymsp[0].minor.yy192 = yymsp[0].major; /*A-overwrites-X*/}
#line 3592 "parse.sql"
break;
case 8: /* cmd ::= COMMIT|END trans_opt */
case 9: /* cmd ::= ROLLBACK trans_opt */ yytestcase(yyruleno==9);
#line 168 "parse.y"
{sqlite3EndTransaction(pParse,yymsp[-1].major);}
#line 3598 "parse.sql"
break;
case 10: /* cmd ::= SAVEPOINT nm */
#line 173 "parse.y"
{
sqlite3Savepoint(pParse, SAVEPOINT_BEGIN, &yymsp[0].minor.yy0);
}
#line 3605 "parse.sql"
break;
case 11: /* cmd ::= RELEASE savepoint_opt nm */
#line 176 "parse.y"
{
sqlite3Savepoint(pParse, SAVEPOINT_RELEASE, &yymsp[0].minor.yy0);
}
#line 3612 "parse.sql"
break;
case 12: /* cmd ::= ROLLBACK trans_opt TO savepoint_opt nm */
#line 179 "parse.y"
{
sqlite3Savepoint(pParse, SAVEPOINT_ROLLBACK, &yymsp[0].minor.yy0);
}
#line 3619 "parse.sql"
break;
case 13: /* create_table ::= createkw temp TABLE ifnotexists nm dbnm */
#line 186 "parse.y"
{
sqlite3StartTable(pParse,&yymsp[-1].minor.yy0,&yymsp[0].minor.yy0,yymsp[-4].minor.yy192,0,0,yymsp[-2].minor.yy192);
}
#line 3626 "parse.sql"
break;
case 14: /* createkw ::= CREATE */
#line 189 "parse.y"
{disableLookaside(pParse);}
#line 3631 "parse.sql"
break;
case 15: /* ifnotexists ::= */
case 18: /* temp ::= */ yytestcase(yyruleno==18);
case 21: /* table_options ::= */ yytestcase(yyruleno==21);
case 45: /* autoinc ::= */ yytestcase(yyruleno==45);
case 60: /* init_deferred_pred_opt ::= */ yytestcase(yyruleno==60);
case 70: /* defer_subclause_opt ::= */ yytestcase(yyruleno==70);
case 79: /* ifexists ::= */ yytestcase(yyruleno==79);
case 96: /* distinct ::= */ yytestcase(yyruleno==96);
case 232: /* collate ::= */ yytestcase(yyruleno==232);
#line 192 "parse.y"
{yymsp[1].minor.yy192 = 0;}
#line 3644 "parse.sql"
break;
case 16: /* ifnotexists ::= IF NOT EXISTS */
#line 193 "parse.y"
{yymsp[-2].minor.yy192 = 1;}
#line 3649 "parse.sql"
break;
case 17: /* temp ::= TEMP */
case 46: /* autoinc ::= AUTOINCR */ yytestcase(yyruleno==46);
#line 196 "parse.y"
{yymsp[0].minor.yy192 = 1;}
#line 3655 "parse.sql"
break;
case 19: /* create_table_args ::= LP columnlist conslist_opt RP table_options */
#line 199 "parse.y"
{
sqlite3EndTable(pParse,&yymsp[-2].minor.yy0,&yymsp[-1].minor.yy0,yymsp[0].minor.yy192,0);
}
#line 3662 "parse.sql"
break;
case 20: /* create_table_args ::= AS select */
#line 202 "parse.y"
{
sqlite3EndTable(pParse,0,0,0,yymsp[0].minor.yy539);
sqlite3SelectDelete(pParse->db, yymsp[0].minor.yy539);
}
#line 3670 "parse.sql"
break;
case 22: /* table_options ::= WITHOUT nm */
#line 208 "parse.y"
{
if( yymsp[0].minor.yy0.n==5 && sqlite3_strnicmp(yymsp[0].minor.yy0.z,"rowid",5)==0 ){
yymsp[-1].minor.yy192 = TF_WithoutRowid | TF_NoVisibleRowid;
}else{
yymsp[-1].minor.yy192 = 0;
sqlite3ErrorMsg(pParse, "unknown table option: %.*s", yymsp[0].minor.yy0.n, yymsp[0].minor.yy0.z);
}
}
#line 3682 "parse.sql"
break;
case 23: /* columnname ::= nm typetoken */
#line 218 "parse.y"
{sqlite3AddColumn(pParse,&yymsp[-1].minor.yy0,&yymsp[0].minor.yy0);}
#line 3687 "parse.sql"
break;
case 24: /* typetoken ::= */
case 63: /* conslist_opt ::= */ yytestcase(yyruleno==63);
case 102: /* as ::= */ yytestcase(yyruleno==102);
#line 304 "parse.y"
{yymsp[1].minor.yy0.n = 0; yymsp[1].minor.yy0.z = 0;}
#line 3694 "parse.sql"
break;
case 25: /* typetoken ::= typename LP signed RP */
#line 306 "parse.y"
{
yymsp[-3].minor.yy0.n = (int)(&yymsp[0].minor.yy0.z[yymsp[0].minor.yy0.n] - yymsp[-3].minor.yy0.z);
}
#line 3701 "parse.sql"
break;
case 26: /* typetoken ::= typename LP signed COMMA signed RP */
#line 309 "parse.y"
{
yymsp[-5].minor.yy0.n = (int)(&yymsp[0].minor.yy0.z[yymsp[0].minor.yy0.n] - yymsp[-5].minor.yy0.z);
}
#line 3708 "parse.sql"
break;
case 27: /* typename ::= typename ID|STRING */
#line 314 "parse.y"
{yymsp[-1].minor.yy0.n=yymsp[0].minor.yy0.n+(int)(yymsp[0].minor.yy0.z-yymsp[-1].minor.yy0.z);}
#line 3713 "parse.sql"
break;
case 28: /* scanpt ::= */
#line 332 "parse.y"
{
assert( yyLookahead!=YYNOCODE );
yymsp[1].minor.yy436 = yyLookaheadToken.z;
}
#line 3721 "parse.sql"
break;
case 29: /* scantok ::= */
#line 336 "parse.y"
{
assert( yyLookahead!=YYNOCODE );
yymsp[1].minor.yy0 = yyLookaheadToken;
}
#line 3729 "parse.sql"
break;
case 30: /* ccons ::= CONSTRAINT nm */
case 65: /* tcons ::= CONSTRAINT nm */ yytestcase(yyruleno==65);
#line 346 "parse.y"
{pParse->constraintName = yymsp[0].minor.yy0;}
#line 3735 "parse.sql"
break;
case 31: /* ccons ::= DEFAULT scantok term */
#line 348 "parse.y"
{sqlite3AddDefaultValue(pParse,yymsp[0].minor.yy202,yymsp[-1].minor.yy0.z,&yymsp[-1].minor.yy0.z[yymsp[-1].minor.yy0.n]);}
#line 3740 "parse.sql"
break;
case 32: /* ccons ::= DEFAULT LP expr RP */
#line 350 "parse.y"
{sqlite3AddDefaultValue(pParse,yymsp[-1].minor.yy202,yymsp[-2].minor.yy0.z+1,yymsp[0].minor.yy0.z);}
#line 3745 "parse.sql"
break;
case 33: /* ccons ::= DEFAULT PLUS scantok term */
#line 352 "parse.y"
{sqlite3AddDefaultValue(pParse,yymsp[0].minor.yy202,yymsp[-2].minor.yy0.z,&yymsp[-1].minor.yy0.z[yymsp[-1].minor.yy0.n]);}
#line 3750 "parse.sql"
break;
case 34: /* ccons ::= DEFAULT MINUS scantok term */
#line 353 "parse.y"
{
Expr *p = sqlite3PExpr(pParse, TK_UMINUS, yymsp[0].minor.yy202, 0);
sqlite3AddDefaultValue(pParse,p,yymsp[-2].minor.yy0.z,&yymsp[-1].minor.yy0.z[yymsp[-1].minor.yy0.n]);
}
#line 3758 "parse.sql"
break;
case 35: /* ccons ::= DEFAULT scantok ID|INDEXED */
#line 357 "parse.y"
{
Expr *p = tokenExpr(pParse, TK_STRING, yymsp[0].minor.yy0);
if( p ){
sqlite3ExprIdToTrueFalse(p);
testcase( p->op==TK_TRUEFALSE && sqlite3ExprTruthValue(p) );
}
sqlite3AddDefaultValue(pParse,p,yymsp[0].minor.yy0.z,yymsp[0].minor.yy0.z+yymsp[0].minor.yy0.n);
}
#line 3770 "parse.sql"
break;
case 36: /* ccons ::= NOT NULL onconf */
#line 370 "parse.y"
{sqlite3AddNotNull(pParse, yymsp[0].minor.yy192);}
#line 3775 "parse.sql"
break;
case 37: /* ccons ::= PRIMARY KEY sortorder onconf autoinc */
#line 372 "parse.y"
{sqlite3AddPrimaryKey(pParse,0,yymsp[-1].minor.yy192,yymsp[0].minor.yy192,yymsp[-2].minor.yy192);}
#line 3780 "parse.sql"
break;
case 38: /* ccons ::= UNIQUE onconf */
#line 373 "parse.y"
{sqlite3CreateIndex(pParse,0,0,0,0,yymsp[0].minor.yy192,0,0,0,0,
SQLITE_IDXTYPE_UNIQUE);}
#line 3786 "parse.sql"
break;
case 39: /* ccons ::= CHECK LP expr RP */
#line 375 "parse.y"
{sqlite3AddCheckConstraint(pParse,yymsp[-1].minor.yy202,yymsp[-2].minor.yy0.z,yymsp[0].minor.yy0.z);}
#line 3791 "parse.sql"
break;
case 40: /* ccons ::= REFERENCES nm eidlist_opt refargs */
#line 377 "parse.y"
{sqlite3CreateForeignKey(pParse,0,&yymsp[-2].minor.yy0,yymsp[-1].minor.yy242,yymsp[0].minor.yy192);}
#line 3796 "parse.sql"
break;
case 41: /* ccons ::= defer_subclause */
#line 378 "parse.y"
{sqlite3DeferForeignKey(pParse,yymsp[0].minor.yy192);}
#line 3801 "parse.sql"
break;
case 42: /* ccons ::= COLLATE ID|STRING */
#line 379 "parse.y"
{sqlite3AddCollateType(pParse, &yymsp[0].minor.yy0);}
#line 3806 "parse.sql"
break;
case 43: /* generated ::= LP expr RP */
#line 382 "parse.y"
{sqlite3AddGenerated(pParse,yymsp[-1].minor.yy202,0);}
#line 3811 "parse.sql"
break;
case 44: /* generated ::= LP expr RP ID */
#line 383 "parse.y"
{sqlite3AddGenerated(pParse,yymsp[-2].minor.yy202,&yymsp[0].minor.yy0);}
#line 3816 "parse.sql"
break;
case 47: /* refargs ::= */
#line 396 "parse.y"
{ yymsp[1].minor.yy192 = OE_None*0x0101; /* EV: R-19803-45884 */}
#line 3821 "parse.sql"
break;
case 48: /* refargs ::= refargs refarg */
#line 397 "parse.y"
{ yymsp[-1].minor.yy192 = (yymsp[-1].minor.yy192 & ~yymsp[0].minor.yy207.mask) | yymsp[0].minor.yy207.value; }
#line 3826 "parse.sql"
break;
case 49: /* refarg ::= MATCH nm */
#line 399 "parse.y"
{ yymsp[-1].minor.yy207.value = 0; yymsp[-1].minor.yy207.mask = 0x000000; }
#line 3831 "parse.sql"
break;
case 50: /* refarg ::= ON INSERT refact */
#line 400 "parse.y"
{ yymsp[-2].minor.yy207.value = 0; yymsp[-2].minor.yy207.mask = 0x000000; }
#line 3836 "parse.sql"
break;
case 51: /* refarg ::= ON DELETE refact */
#line 401 "parse.y"
{ yymsp[-2].minor.yy207.value = yymsp[0].minor.yy192; yymsp[-2].minor.yy207.mask = 0x0000ff; }
#line 3841 "parse.sql"
break;
case 52: /* refarg ::= ON UPDATE refact */
#line 402 "parse.y"
{ yymsp[-2].minor.yy207.value = yymsp[0].minor.yy192<<8; yymsp[-2].minor.yy207.mask = 0x00ff00; }
#line 3846 "parse.sql"
break;
case 53: /* refact ::= SET NULL */
#line 404 "parse.y"
{ yymsp[-1].minor.yy192 = OE_SetNull; /* EV: R-33326-45252 */}
#line 3851 "parse.sql"
break;
case 54: /* refact ::= SET DEFAULT */
#line 405 "parse.y"
{ yymsp[-1].minor.yy192 = OE_SetDflt; /* EV: R-33326-45252 */}
#line 3856 "parse.sql"
break;
case 55: /* refact ::= CASCADE */
#line 406 "parse.y"
{ yymsp[0].minor.yy192 = OE_Cascade; /* EV: R-33326-45252 */}
#line 3861 "parse.sql"
break;
case 56: /* refact ::= RESTRICT */
#line 407 "parse.y"
{ yymsp[0].minor.yy192 = OE_Restrict; /* EV: R-33326-45252 */}
#line 3866 "parse.sql"
break;
case 57: /* refact ::= NO ACTION */
#line 408 "parse.y"
{ yymsp[-1].minor.yy192 = OE_None; /* EV: R-33326-45252 */}
#line 3871 "parse.sql"
break;
case 58: /* defer_subclause ::= NOT DEFERRABLE init_deferred_pred_opt */
#line 410 "parse.y"
{yymsp[-2].minor.yy192 = 0;}
#line 3876 "parse.sql"
break;
case 59: /* defer_subclause ::= DEFERRABLE init_deferred_pred_opt */
case 74: /* orconf ::= OR resolvetype */ yytestcase(yyruleno==74);
case 162: /* insert_cmd ::= INSERT orconf */ yytestcase(yyruleno==162);
#line 411 "parse.y"
{yymsp[-1].minor.yy192 = yymsp[0].minor.yy192;}
#line 3883 "parse.sql"
break;
case 61: /* init_deferred_pred_opt ::= INITIALLY DEFERRED */
case 78: /* ifexists ::= IF EXISTS */ yytestcase(yyruleno==78);
case 204: /* between_op ::= NOT BETWEEN */ yytestcase(yyruleno==204);
case 207: /* in_op ::= NOT IN */ yytestcase(yyruleno==207);
case 233: /* collate ::= COLLATE ID|STRING */ yytestcase(yyruleno==233);
#line 414 "parse.y"
{yymsp[-1].minor.yy192 = 1;}
#line 3892 "parse.sql"
break;
case 62: /* init_deferred_pred_opt ::= INITIALLY IMMEDIATE */
#line 415 "parse.y"
{yymsp[-1].minor.yy192 = 0;}
#line 3897 "parse.sql"
break;
case 64: /* tconscomma ::= COMMA */
#line 421 "parse.y"
{pParse->constraintName.n = 0;}
#line 3902 "parse.sql"
break;
case 66: /* tcons ::= PRIMARY KEY LP sortlist autoinc RP onconf */
#line 425 "parse.y"
{sqlite3AddPrimaryKey(pParse,yymsp[-3].minor.yy242,yymsp[0].minor.yy192,yymsp[-2].minor.yy192,0);}
#line 3907 "parse.sql"
break;
case 67: /* tcons ::= UNIQUE LP sortlist RP onconf */
#line 427 "parse.y"
{sqlite3CreateIndex(pParse,0,0,0,yymsp[-2].minor.yy242,yymsp[0].minor.yy192,0,0,0,0,
SQLITE_IDXTYPE_UNIQUE);}
#line 3913 "parse.sql"
break;
case 68: /* tcons ::= CHECK LP expr RP onconf */
#line 430 "parse.y"
{sqlite3AddCheckConstraint(pParse,yymsp[-2].minor.yy202,yymsp[-3].minor.yy0.z,yymsp[-1].minor.yy0.z);}
#line 3918 "parse.sql"
break;
case 69: /* tcons ::= FOREIGN KEY LP eidlist RP REFERENCES nm eidlist_opt refargs defer_subclause_opt */
#line 432 "parse.y"
{
sqlite3CreateForeignKey(pParse, yymsp[-6].minor.yy242, &yymsp[-3].minor.yy0, yymsp[-2].minor.yy242, yymsp[-1].minor.yy192);
sqlite3DeferForeignKey(pParse, yymsp[0].minor.yy192);
}
#line 3926 "parse.sql"
break;
case 71: /* onconf ::= */
case 73: /* orconf ::= */ yytestcase(yyruleno==73);
#line 446 "parse.y"
{yymsp[1].minor.yy192 = OE_Default;}
#line 3932 "parse.sql"
break;
case 72: /* onconf ::= ON CONFLICT resolvetype */
#line 447 "parse.y"
{yymsp[-2].minor.yy192 = yymsp[0].minor.yy192;}
#line 3937 "parse.sql"
break;
case 75: /* resolvetype ::= IGNORE */
#line 451 "parse.y"
{yymsp[0].minor.yy192 = OE_Ignore;}
#line 3942 "parse.sql"
break;
case 76: /* resolvetype ::= REPLACE */
case 163: /* insert_cmd ::= REPLACE */ yytestcase(yyruleno==163);
#line 452 "parse.y"
{yymsp[0].minor.yy192 = OE_Replace;}
#line 3948 "parse.sql"
break;
case 77: /* cmd ::= DROP TABLE ifexists fullname */
#line 456 "parse.y"
{
sqlite3DropTable(pParse, yymsp[0].minor.yy47, 0, yymsp[-1].minor.yy192);
}
#line 3955 "parse.sql"
break;
case 80: /* cmd ::= createkw temp VIEW ifnotexists nm dbnm eidlist_opt AS select */
#line 467 "parse.y"
{
sqlite3CreateView(pParse, &yymsp[-8].minor.yy0, &yymsp[-4].minor.yy0, &yymsp[-3].minor.yy0, yymsp[-2].minor.yy242, yymsp[0].minor.yy539, yymsp[-7].minor.yy192, yymsp[-5].minor.yy192);
}
#line 3962 "parse.sql"
break;
case 81: /* cmd ::= DROP VIEW ifexists fullname */
#line 470 "parse.y"
{
sqlite3DropTable(pParse, yymsp[0].minor.yy47, 1, yymsp[-1].minor.yy192);
}
#line 3969 "parse.sql"
break;
case 82: /* cmd ::= select */
#line 477 "parse.y"
{
SelectDest dest = {SRT_Output, 0, 0, 0, 0, 0, 0};
sqlite3Select(pParse, yymsp[0].minor.yy539, &dest);
sqlite3SelectDelete(pParse->db, yymsp[0].minor.yy539);
}
#line 3978 "parse.sql"
break;
case 83: /* select ::= WITH wqlist selectnowith */
#line 516 "parse.y"
{
Select *p = yymsp[0].minor.yy539;
if( p ){
p->pWith = yymsp[-1].minor.yy131;
parserDoubleLinkSelect(pParse, p);
}else{
sqlite3WithDelete(pParse->db, yymsp[-1].minor.yy131);
}
yymsp[-2].minor.yy539 = p;
}
#line 3992 "parse.sql"
break;
case 84: /* select ::= WITH RECURSIVE wqlist selectnowith */
#line 526 "parse.y"
{
Select *p = yymsp[0].minor.yy539;
if( p ){
p->pWith = yymsp[-1].minor.yy131;
parserDoubleLinkSelect(pParse, p);
}else{
sqlite3WithDelete(pParse->db, yymsp[-1].minor.yy131);
}
yymsp[-3].minor.yy539 = p;
}
#line 4006 "parse.sql"
break;
case 85: /* select ::= selectnowith */
#line 537 "parse.y"
{
Select *p = yymsp[0].minor.yy539;
if( p ){
parserDoubleLinkSelect(pParse, p);
}
yymsp[0].minor.yy539 = p; /*A-overwrites-X*/
}
#line 4017 "parse.sql"
break;
case 86: /* selectnowith ::= selectnowith multiselect_op oneselect */
#line 547 "parse.y"
{
Select *pRhs = yymsp[0].minor.yy539;
Select *pLhs = yymsp[-2].minor.yy539;
if( pRhs && pRhs->pPrior ){
SrcList *pFrom;
Token x;
x.n = 0;
parserDoubleLinkSelect(pParse, pRhs);
pFrom = sqlite3SrcListAppendFromTerm(pParse,0,0,0,&x,pRhs,0,0);
pRhs = sqlite3SelectNew(pParse,0,pFrom,0,0,0,0,0,0);
}
if( pRhs ){
pRhs->op = (u8)yymsp[-1].minor.yy192;
pRhs->pPrior = pLhs;
if( ALWAYS(pLhs) ) pLhs->selFlags &= ~SF_MultiValue;
pRhs->selFlags &= ~SF_MultiValue;
if( yymsp[-1].minor.yy192!=TK_ALL ) pParse->hasCompound = 1;
}else{
sqlite3SelectDelete(pParse->db, pLhs);
}
yymsp[-2].minor.yy539 = pRhs;
}
#line 4043 "parse.sql"
break;
case 87: /* multiselect_op ::= UNION */
case 89: /* multiselect_op ::= EXCEPT|INTERSECT */ yytestcase(yyruleno==89);
#line 570 "parse.y"
{yymsp[0].minor.yy192 = yymsp[0].major; /*A-overwrites-OP*/}
#line 4049 "parse.sql"
break;
case 88: /* multiselect_op ::= UNION ALL */
#line 571 "parse.y"
{yymsp[-1].minor.yy192 = TK_ALL;}
#line 4054 "parse.sql"
break;
case 90: /* oneselect ::= SELECT distinct selcollist from where_opt groupby_opt having_opt orderby_opt limit_opt */
#line 577 "parse.y"
{
yymsp[-8].minor.yy539 = sqlite3SelectNew(pParse,yymsp[-6].minor.yy242,yymsp[-5].minor.yy47,yymsp[-4].minor.yy202,yymsp[-3].minor.yy242,yymsp[-2].minor.yy202,yymsp[-1].minor.yy242,yymsp[-7].minor.yy192,yymsp[0].minor.yy202);
}
#line 4061 "parse.sql"
break;
case 91: /* oneselect ::= SELECT distinct selcollist from where_opt groupby_opt having_opt window_clause orderby_opt limit_opt */
#line 583 "parse.y"
{
yymsp[-9].minor.yy539 = sqlite3SelectNew(pParse,yymsp[-7].minor.yy242,yymsp[-6].minor.yy47,yymsp[-5].minor.yy202,yymsp[-4].minor.yy242,yymsp[-3].minor.yy202,yymsp[-1].minor.yy242,yymsp[-8].minor.yy192,yymsp[0].minor.yy202);
if( yymsp[-9].minor.yy539 ){
yymsp[-9].minor.yy539->pWinDefn = yymsp[-2].minor.yy303;
}else{
sqlite3WindowListDelete(pParse->db, yymsp[-2].minor.yy303);
}
}
#line 4073 "parse.sql"
break;
case 92: /* values ::= VALUES LP nexprlist RP */
#line 598 "parse.y"
{
yymsp[-3].minor.yy539 = sqlite3SelectNew(pParse,yymsp[-1].minor.yy242,0,0,0,0,0,SF_Values,0);
}
#line 4080 "parse.sql"
break;
case 93: /* values ::= values COMMA LP nexprlist RP */
#line 601 "parse.y"
{
Select *pRight, *pLeft = yymsp[-4].minor.yy539;
pRight = sqlite3SelectNew(pParse,yymsp[-1].minor.yy242,0,0,0,0,0,SF_Values|SF_MultiValue,0);
if( ALWAYS(pLeft) ) pLeft->selFlags &= ~SF_MultiValue;
if( pRight ){
pRight->op = TK_ALL;
pRight->pPrior = pLeft;
yymsp[-4].minor.yy539 = pRight;
}else{
yymsp[-4].minor.yy539 = pLeft;
}
}
#line 4096 "parse.sql"
break;
case 94: /* distinct ::= DISTINCT */
#line 618 "parse.y"
{yymsp[0].minor.yy192 = SF_Distinct;}
#line 4101 "parse.sql"
break;
case 95: /* distinct ::= ALL */
#line 619 "parse.y"
{yymsp[0].minor.yy192 = SF_All;}
#line 4106 "parse.sql"
break;
case 97: /* sclp ::= */
case 130: /* orderby_opt ::= */ yytestcase(yyruleno==130);
case 140: /* groupby_opt ::= */ yytestcase(yyruleno==140);
case 220: /* exprlist ::= */ yytestcase(yyruleno==220);
case 223: /* paren_exprlist ::= */ yytestcase(yyruleno==223);
case 228: /* eidlist_opt ::= */ yytestcase(yyruleno==228);
#line 632 "parse.y"
{yymsp[1].minor.yy242 = 0;}
#line 4116 "parse.sql"
break;
case 98: /* selcollist ::= sclp scanpt expr scanpt as */
#line 633 "parse.y"
{
yymsp[-4].minor.yy242 = sqlite3ExprListAppend(pParse, yymsp[-4].minor.yy242, yymsp[-2].minor.yy202);
if( yymsp[0].minor.yy0.n>0 ) sqlite3ExprListSetName(pParse, yymsp[-4].minor.yy242, &yymsp[0].minor.yy0, 1);
sqlite3ExprListSetSpan(pParse,yymsp[-4].minor.yy242,yymsp[-3].minor.yy436,yymsp[-1].minor.yy436);
}
#line 4125 "parse.sql"
break;
case 99: /* selcollist ::= sclp scanpt STAR */
#line 638 "parse.y"
{
Expr *p = sqlite3Expr(pParse->db, TK_ASTERISK, 0);
yymsp[-2].minor.yy242 = sqlite3ExprListAppend(pParse, yymsp[-2].minor.yy242, p);
}
#line 4133 "parse.sql"
break;
case 100: /* selcollist ::= sclp scanpt nm DOT STAR */
#line 642 "parse.y"
{
Expr *pRight = sqlite3PExpr(pParse, TK_ASTERISK, 0, 0);
Expr *pLeft = sqlite3ExprAlloc(pParse->db, TK_ID, &yymsp[-2].minor.yy0, 1);
Expr *pDot = sqlite3PExpr(pParse, TK_DOT, pLeft, pRight);
yymsp[-4].minor.yy242 = sqlite3ExprListAppend(pParse,yymsp[-4].minor.yy242, pDot);
}
#line 4143 "parse.sql"
break;
case 101: /* as ::= AS nm */
case 112: /* dbnm ::= DOT nm */ yytestcase(yyruleno==112);
case 244: /* plus_num ::= PLUS INTEGER|FLOAT */ yytestcase(yyruleno==244);
case 245: /* minus_num ::= MINUS INTEGER|FLOAT */ yytestcase(yyruleno==245);
#line 653 "parse.y"
{yymsp[-1].minor.yy0 = yymsp[0].minor.yy0;}
#line 4151 "parse.sql"
break;
case 103: /* from ::= */
case 106: /* stl_prefix ::= */ yytestcase(yyruleno==106);
#line 667 "parse.y"
{yymsp[1].minor.yy47 = 0;}
#line 4157 "parse.sql"
break;
case 104: /* from ::= FROM seltablist */
#line 668 "parse.y"
{
yymsp[-1].minor.yy47 = yymsp[0].minor.yy47;
sqlite3SrcListShiftJoinType(yymsp[-1].minor.yy47);
}
#line 4165 "parse.sql"
break;
case 105: /* stl_prefix ::= seltablist joinop */
#line 676 "parse.y"
{
if( ALWAYS(yymsp[-1].minor.yy47 && yymsp[-1].minor.yy47->nSrc>0) ) yymsp[-1].minor.yy47->a[yymsp[-1].minor.yy47->nSrc-1].fg.jointype = (u8)yymsp[0].minor.yy192;
}
#line 4172 "parse.sql"
break;
case 107: /* seltablist ::= stl_prefix nm dbnm as indexed_opt on_opt using_opt */
#line 681 "parse.y"
{
yymsp[-6].minor.yy47 = sqlite3SrcListAppendFromTerm(pParse,yymsp[-6].minor.yy47,&yymsp[-5].minor.yy0,&yymsp[-4].minor.yy0,&yymsp[-3].minor.yy0,0,yymsp[-1].minor.yy202,yymsp[0].minor.yy600);
sqlite3SrcListIndexedBy(pParse, yymsp[-6].minor.yy47, &yymsp[-2].minor.yy0);
}
#line 4180 "parse.sql"
break;
case 108: /* seltablist ::= stl_prefix nm dbnm LP exprlist RP as on_opt using_opt */
#line 686 "parse.y"
{
yymsp[-8].minor.yy47 = sqlite3SrcListAppendFromTerm(pParse,yymsp[-8].minor.yy47,&yymsp[-7].minor.yy0,&yymsp[-6].minor.yy0,&yymsp[-2].minor.yy0,0,yymsp[-1].minor.yy202,yymsp[0].minor.yy600);
sqlite3SrcListFuncArgs(pParse, yymsp[-8].minor.yy47, yymsp[-4].minor.yy242);
}
#line 4188 "parse.sql"
break;
case 109: /* seltablist ::= stl_prefix LP select RP as on_opt using_opt */
#line 692 "parse.y"
{
yymsp[-6].minor.yy47 = sqlite3SrcListAppendFromTerm(pParse,yymsp[-6].minor.yy47,0,0,&yymsp[-2].minor.yy0,yymsp[-4].minor.yy539,yymsp[-1].minor.yy202,yymsp[0].minor.yy600);
}
#line 4195 "parse.sql"
break;
case 110: /* seltablist ::= stl_prefix LP seltablist RP as on_opt using_opt */
#line 696 "parse.y"
{
if( yymsp[-6].minor.yy47==0 && yymsp[-2].minor.yy0.n==0 && yymsp[-1].minor.yy202==0 && yymsp[0].minor.yy600==0 ){
yymsp[-6].minor.yy47 = yymsp[-4].minor.yy47;
}else if( yymsp[-4].minor.yy47->nSrc==1 ){
yymsp[-6].minor.yy47 = sqlite3SrcListAppendFromTerm(pParse,yymsp[-6].minor.yy47,0,0,&yymsp[-2].minor.yy0,0,yymsp[-1].minor.yy202,yymsp[0].minor.yy600);
if( yymsp[-6].minor.yy47 ){
struct SrcList_item *pNew = &yymsp[-6].minor.yy47->a[yymsp[-6].minor.yy47->nSrc-1];
struct SrcList_item *pOld = yymsp[-4].minor.yy47->a;
pNew->zName = pOld->zName;
pNew->zDatabase = pOld->zDatabase;
pNew->pSelect = pOld->pSelect;
if( pOld->fg.isTabFunc ){
pNew->u1.pFuncArg = pOld->u1.pFuncArg;
pOld->u1.pFuncArg = 0;
pOld->fg.isTabFunc = 0;
pNew->fg.isTabFunc = 1;
}
pOld->zName = pOld->zDatabase = 0;
pOld->pSelect = 0;
}
sqlite3SrcListDelete(pParse->db, yymsp[-4].minor.yy47);
}else{
Select *pSubquery;
sqlite3SrcListShiftJoinType(yymsp[-4].minor.yy47);
pSubquery = sqlite3SelectNew(pParse,0,yymsp[-4].minor.yy47,0,0,0,0,SF_NestedFrom,0);
yymsp[-6].minor.yy47 = sqlite3SrcListAppendFromTerm(pParse,yymsp[-6].minor.yy47,0,0,&yymsp[-2].minor.yy0,pSubquery,yymsp[-1].minor.yy202,yymsp[0].minor.yy600);
}
}
#line 4227 "parse.sql"
break;
case 111: /* dbnm ::= */
case 125: /* indexed_opt ::= */ yytestcase(yyruleno==125);
#line 727 "parse.y"
{yymsp[1].minor.yy0.z=0; yymsp[1].minor.yy0.n=0;}
#line 4233 "parse.sql"
break;
case 113: /* fullname ::= nm */
#line 732 "parse.y"
{
yylhsminor.yy47 = sqlite3SrcListAppend(pParse,0,&yymsp[0].minor.yy0,0);
if( IN_RENAME_OBJECT && yylhsminor.yy47 ) sqlite3RenameTokenMap(pParse, yylhsminor.yy47->a[0].zName, &yymsp[0].minor.yy0);
}
#line 4241 "parse.sql"
yymsp[0].minor.yy47 = yylhsminor.yy47;
break;
case 114: /* fullname ::= nm DOT nm */
#line 736 "parse.y"
{
yylhsminor.yy47 = sqlite3SrcListAppend(pParse,0,&yymsp[-2].minor.yy0,&yymsp[0].minor.yy0);
if( IN_RENAME_OBJECT && yylhsminor.yy47 ) sqlite3RenameTokenMap(pParse, yylhsminor.yy47->a[0].zName, &yymsp[0].minor.yy0);
}
#line 4250 "parse.sql"
yymsp[-2].minor.yy47 = yylhsminor.yy47;
break;
case 115: /* xfullname ::= nm */
#line 744 "parse.y"
{yymsp[0].minor.yy47 = sqlite3SrcListAppend(pParse,0,&yymsp[0].minor.yy0,0); /*A-overwrites-X*/}
#line 4256 "parse.sql"
break;
case 116: /* xfullname ::= nm DOT nm */
#line 746 "parse.y"
{yymsp[-2].minor.yy47 = sqlite3SrcListAppend(pParse,0,&yymsp[-2].minor.yy0,&yymsp[0].minor.yy0); /*A-overwrites-X*/}
#line 4261 "parse.sql"
break;
case 117: /* xfullname ::= nm DOT nm AS nm */
#line 747 "parse.y"
{
yymsp[-4].minor.yy47 = sqlite3SrcListAppend(pParse,0,&yymsp[-4].minor.yy0,&yymsp[-2].minor.yy0); /*A-overwrites-X*/
if( yymsp[-4].minor.yy47 ) yymsp[-4].minor.yy47->a[0].zAlias = sqlite3NameFromToken(pParse->db, &yymsp[0].minor.yy0);
}
#line 4269 "parse.sql"
break;
case 118: /* xfullname ::= nm AS nm */
#line 751 "parse.y"
{
yymsp[-2].minor.yy47 = sqlite3SrcListAppend(pParse,0,&yymsp[-2].minor.yy0,0); /*A-overwrites-X*/
if( yymsp[-2].minor.yy47 ) yymsp[-2].minor.yy47->a[0].zAlias = sqlite3NameFromToken(pParse->db, &yymsp[0].minor.yy0);
}
#line 4277 "parse.sql"
break;
case 119: /* joinop ::= COMMA|JOIN */
#line 757 "parse.y"
{ yymsp[0].minor.yy192 = JT_INNER; }
#line 4282 "parse.sql"
break;
case 120: /* joinop ::= JOIN_KW JOIN */
#line 759 "parse.y"
{yymsp[-1].minor.yy192 = sqlite3JoinType(pParse,&yymsp[-1].minor.yy0,0,0); /*X-overwrites-A*/}
#line 4287 "parse.sql"
break;
case 121: /* joinop ::= JOIN_KW nm JOIN */
#line 761 "parse.y"
{yymsp[-2].minor.yy192 = sqlite3JoinType(pParse,&yymsp[-2].minor.yy0,&yymsp[-1].minor.yy0,0); /*X-overwrites-A*/}
#line 4292 "parse.sql"
break;
case 122: /* joinop ::= JOIN_KW nm nm JOIN */
#line 763 "parse.y"
{yymsp[-3].minor.yy192 = sqlite3JoinType(pParse,&yymsp[-3].minor.yy0,&yymsp[-2].minor.yy0,&yymsp[-1].minor.yy0);/*X-overwrites-A*/}
#line 4297 "parse.sql"
break;
case 123: /* on_opt ::= ON expr */
case 143: /* having_opt ::= HAVING expr */ yytestcase(yyruleno==143);
case 150: /* where_opt ::= WHERE expr */ yytestcase(yyruleno==150);
case 216: /* case_else ::= ELSE expr */ yytestcase(yyruleno==216);
case 237: /* vinto ::= INTO expr */ yytestcase(yyruleno==237);
#line 784 "parse.y"
{yymsp[-1].minor.yy202 = yymsp[0].minor.yy202;}
#line 4306 "parse.sql"
break;
case 124: /* on_opt ::= */
case 142: /* having_opt ::= */ yytestcase(yyruleno==142);
case 144: /* limit_opt ::= */ yytestcase(yyruleno==144);
case 149: /* where_opt ::= */ yytestcase(yyruleno==149);
case 217: /* case_else ::= */ yytestcase(yyruleno==217);
case 219: /* case_operand ::= */ yytestcase(yyruleno==219);
case 238: /* vinto ::= */ yytestcase(yyruleno==238);
#line 785 "parse.y"
{yymsp[1].minor.yy202 = 0;}
#line 4317 "parse.sql"
break;
case 126: /* indexed_opt ::= INDEXED BY nm */
#line 799 "parse.y"
{yymsp[-2].minor.yy0 = yymsp[0].minor.yy0;}
#line 4322 "parse.sql"
break;
case 127: /* indexed_opt ::= NOT INDEXED */
#line 800 "parse.y"
{yymsp[-1].minor.yy0.z=0; yymsp[-1].minor.yy0.n=1;}
#line 4327 "parse.sql"
break;
case 128: /* using_opt ::= USING LP idlist RP */
#line 804 "parse.y"
{yymsp[-3].minor.yy600 = yymsp[-1].minor.yy600;}
#line 4332 "parse.sql"
break;
case 129: /* using_opt ::= */
case 164: /* idlist_opt ::= */ yytestcase(yyruleno==164);
#line 805 "parse.y"
{yymsp[1].minor.yy600 = 0;}
#line 4338 "parse.sql"
break;
case 131: /* orderby_opt ::= ORDER BY sortlist */
case 141: /* groupby_opt ::= GROUP BY nexprlist */ yytestcase(yyruleno==141);
#line 819 "parse.y"
{yymsp[-2].minor.yy242 = yymsp[0].minor.yy242;}
#line 4344 "parse.sql"
break;
case 132: /* sortlist ::= sortlist COMMA expr sortorder nulls */
#line 820 "parse.y"
{
yymsp[-4].minor.yy242 = sqlite3ExprListAppend(pParse,yymsp[-4].minor.yy242,yymsp[-2].minor.yy202);
sqlite3ExprListSetSortOrder(yymsp[-4].minor.yy242,yymsp[-1].minor.yy192,yymsp[0].minor.yy192);
}
#line 4352 "parse.sql"
break;
case 133: /* sortlist ::= expr sortorder nulls */
#line 824 "parse.y"
{
yymsp[-2].minor.yy242 = sqlite3ExprListAppend(pParse,0,yymsp[-2].minor.yy202); /*A-overwrites-Y*/
sqlite3ExprListSetSortOrder(yymsp[-2].minor.yy242,yymsp[-1].minor.yy192,yymsp[0].minor.yy192);
}
#line 4360 "parse.sql"
break;
case 134: /* sortorder ::= ASC */
#line 831 "parse.y"
{yymsp[0].minor.yy192 = SQLITE_SO_ASC;}
#line 4365 "parse.sql"
break;
case 135: /* sortorder ::= DESC */
#line 832 "parse.y"
{yymsp[0].minor.yy192 = SQLITE_SO_DESC;}
#line 4370 "parse.sql"
break;
case 136: /* sortorder ::= */
case 139: /* nulls ::= */ yytestcase(yyruleno==139);
#line 833 "parse.y"
{yymsp[1].minor.yy192 = SQLITE_SO_UNDEFINED;}
#line 4376 "parse.sql"
break;
case 137: /* nulls ::= NULLS FIRST */
#line 836 "parse.y"
{yymsp[-1].minor.yy192 = SQLITE_SO_ASC;}
#line 4381 "parse.sql"
break;
case 138: /* nulls ::= NULLS LAST */
#line 837 "parse.y"
{yymsp[-1].minor.yy192 = SQLITE_SO_DESC;}
#line 4386 "parse.sql"
break;
case 145: /* limit_opt ::= LIMIT expr */
#line 862 "parse.y"
{yymsp[-1].minor.yy202 = sqlite3PExpr(pParse,TK_LIMIT,yymsp[0].minor.yy202,0);}
#line 4391 "parse.sql"
break;
case 146: /* limit_opt ::= LIMIT expr OFFSET expr */
#line 864 "parse.y"
{yymsp[-3].minor.yy202 = sqlite3PExpr(pParse,TK_LIMIT,yymsp[-2].minor.yy202,yymsp[0].minor.yy202);}
#line 4396 "parse.sql"
break;
case 147: /* limit_opt ::= LIMIT expr COMMA expr */
#line 866 "parse.y"
{yymsp[-3].minor.yy202 = sqlite3PExpr(pParse,TK_LIMIT,yymsp[0].minor.yy202,yymsp[-2].minor.yy202);}
#line 4401 "parse.sql"
break;
case 148: /* cmd ::= with DELETE FROM xfullname indexed_opt where_opt */
#line 884 "parse.y"
{
sqlite3SrcListIndexedBy(pParse, yymsp[-2].minor.yy47, &yymsp[-1].minor.yy0);
sqlite3DeleteFrom(pParse,yymsp[-2].minor.yy47,yymsp[0].minor.yy202,0,0);
}
#line 4409 "parse.sql"
break;
case 151: /* cmd ::= with UPDATE orconf xfullname indexed_opt SET setlist from where_opt */
#line 915 "parse.y"
{
sqlite3SrcListIndexedBy(pParse, yymsp[-5].minor.yy47, &yymsp[-4].minor.yy0);
sqlite3ExprListCheckLength(pParse,yymsp[-2].minor.yy242,"set list");
yymsp[-5].minor.yy47 = sqlite3SrcListAppendList(pParse, yymsp[-5].minor.yy47, yymsp[-1].minor.yy47);
sqlite3Update(pParse,yymsp[-5].minor.yy47,yymsp[-2].minor.yy242,yymsp[0].minor.yy202,yymsp[-6].minor.yy192,0,0,0);
}
#line 4419 "parse.sql"
break;
case 152: /* setlist ::= setlist COMMA nm EQ expr */
#line 928 "parse.y"
{
yymsp[-4].minor.yy242 = sqlite3ExprListAppend(pParse, yymsp[-4].minor.yy242, yymsp[0].minor.yy202);
sqlite3ExprListSetName(pParse, yymsp[-4].minor.yy242, &yymsp[-2].minor.yy0, 1);
}
#line 4427 "parse.sql"
break;
case 153: /* setlist ::= setlist COMMA LP idlist RP EQ expr */
#line 932 "parse.y"
{
yymsp[-6].minor.yy242 = sqlite3ExprListAppendVector(pParse, yymsp[-6].minor.yy242, yymsp[-3].minor.yy600, yymsp[0].minor.yy202);
}
#line 4434 "parse.sql"
break;
case 154: /* setlist ::= nm EQ expr */
#line 935 "parse.y"
{
yylhsminor.yy242 = sqlite3ExprListAppend(pParse, 0, yymsp[0].minor.yy202);
sqlite3ExprListSetName(pParse, yylhsminor.yy242, &yymsp[-2].minor.yy0, 1);
}
#line 4442 "parse.sql"
yymsp[-2].minor.yy242 = yylhsminor.yy242;
break;
case 155: /* setlist ::= LP idlist RP EQ expr */
#line 939 "parse.y"
{
yymsp[-4].minor.yy242 = sqlite3ExprListAppendVector(pParse, 0, yymsp[-3].minor.yy600, yymsp[0].minor.yy202);
}
#line 4450 "parse.sql"
break;
case 156: /* cmd ::= with insert_cmd INTO xfullname idlist_opt select upsert */
#line 946 "parse.y"
{
sqlite3Insert(pParse, yymsp[-3].minor.yy47, yymsp[-1].minor.yy539, yymsp[-2].minor.yy600, yymsp[-5].minor.yy192, yymsp[0].minor.yy318);
}
#line 4457 "parse.sql"
break;
case 157: /* cmd ::= with insert_cmd INTO xfullname idlist_opt DEFAULT VALUES */
#line 950 "parse.y"
{
sqlite3Insert(pParse, yymsp[-3].minor.yy47, 0, yymsp[-2].minor.yy600, yymsp[-5].minor.yy192, 0);
}
#line 4464 "parse.sql"
break;
case 158: /* upsert ::= */
#line 961 "parse.y"
{ yymsp[1].minor.yy318 = 0; }
#line 4469 "parse.sql"
break;
case 159: /* upsert ::= ON CONFLICT LP sortlist RP where_opt DO UPDATE SET setlist where_opt */
#line 964 "parse.y"
{ yymsp[-10].minor.yy318 = sqlite3UpsertNew(pParse->db,yymsp[-7].minor.yy242,yymsp[-5].minor.yy202,yymsp[-1].minor.yy242,yymsp[0].minor.yy202);}
#line 4474 "parse.sql"
break;
case 160: /* upsert ::= ON CONFLICT LP sortlist RP where_opt DO NOTHING */
#line 966 "parse.y"
{ yymsp[-7].minor.yy318 = sqlite3UpsertNew(pParse->db,yymsp[-4].minor.yy242,yymsp[-2].minor.yy202,0,0); }
#line 4479 "parse.sql"
break;
case 161: /* upsert ::= ON CONFLICT DO NOTHING */
#line 968 "parse.y"
{ yymsp[-3].minor.yy318 = sqlite3UpsertNew(pParse->db,0,0,0,0); }
#line 4484 "parse.sql"
break;
case 165: /* idlist_opt ::= LP idlist RP */
#line 980 "parse.y"
{yymsp[-2].minor.yy600 = yymsp[-1].minor.yy600;}
#line 4489 "parse.sql"
break;
case 166: /* idlist ::= idlist COMMA nm */
#line 982 "parse.y"
{yymsp[-2].minor.yy600 = sqlite3IdListAppend(pParse,yymsp[-2].minor.yy600,&yymsp[0].minor.yy0);}
#line 4494 "parse.sql"
break;
case 167: /* idlist ::= nm */
#line 984 "parse.y"
{yymsp[0].minor.yy600 = sqlite3IdListAppend(pParse,0,&yymsp[0].minor.yy0); /*A-overwrites-Y*/}
#line 4499 "parse.sql"
break;
case 168: /* expr ::= LP expr RP */
#line 1035 "parse.y"
{yymsp[-2].minor.yy202 = yymsp[-1].minor.yy202;}
#line 4504 "parse.sql"
break;
case 169: /* expr ::= ID|INDEXED */
case 170: /* expr ::= JOIN_KW */ yytestcase(yyruleno==170);
#line 1036 "parse.y"
{yymsp[0].minor.yy202=tokenExpr(pParse,TK_ID,yymsp[0].minor.yy0); /*A-overwrites-X*/}
#line 4510 "parse.sql"
break;
case 171: /* expr ::= nm DOT nm */
#line 1038 "parse.y"
{
Expr *temp1 = sqlite3ExprAlloc(pParse->db, TK_ID, &yymsp[-2].minor.yy0, 1);
Expr *temp2 = sqlite3ExprAlloc(pParse->db, TK_ID, &yymsp[0].minor.yy0, 1);
if( IN_RENAME_OBJECT ){
sqlite3RenameTokenMap(pParse, (void*)temp2, &yymsp[0].minor.yy0);
sqlite3RenameTokenMap(pParse, (void*)temp1, &yymsp[-2].minor.yy0);
}
yylhsminor.yy202 = sqlite3PExpr(pParse, TK_DOT, temp1, temp2);
}
#line 4523 "parse.sql"
yymsp[-2].minor.yy202 = yylhsminor.yy202;
break;
case 172: /* expr ::= nm DOT nm DOT nm */
#line 1047 "parse.y"
{
Expr *temp1 = sqlite3ExprAlloc(pParse->db, TK_ID, &yymsp[-4].minor.yy0, 1);
Expr *temp2 = sqlite3ExprAlloc(pParse->db, TK_ID, &yymsp[-2].minor.yy0, 1);
Expr *temp3 = sqlite3ExprAlloc(pParse->db, TK_ID, &yymsp[0].minor.yy0, 1);
Expr *temp4 = sqlite3PExpr(pParse, TK_DOT, temp2, temp3);
if( IN_RENAME_OBJECT ){
sqlite3RenameTokenMap(pParse, (void*)temp3, &yymsp[0].minor.yy0);
sqlite3RenameTokenMap(pParse, (void*)temp2, &yymsp[-2].minor.yy0);
}
yylhsminor.yy202 = sqlite3PExpr(pParse, TK_DOT, temp1, temp4);
}
#line 4539 "parse.sql"
yymsp[-4].minor.yy202 = yylhsminor.yy202;
break;
case 173: /* term ::= NULL|FLOAT|BLOB */
case 174: /* term ::= STRING */ yytestcase(yyruleno==174);
#line 1058 "parse.y"
{yymsp[0].minor.yy202=tokenExpr(pParse,yymsp[0].major,yymsp[0].minor.yy0); /*A-overwrites-X*/}
#line 4546 "parse.sql"
break;
case 175: /* term ::= INTEGER */
#line 1060 "parse.y"
{
yylhsminor.yy202 = sqlite3ExprAlloc(pParse->db, TK_INTEGER, &yymsp[0].minor.yy0, 1);
}
#line 4553 "parse.sql"
yymsp[0].minor.yy202 = yylhsminor.yy202;
break;
case 176: /* expr ::= VARIABLE */
#line 1063 "parse.y"
{
if( !(yymsp[0].minor.yy0.z[0]=='#' && sqlite3Isdigit(yymsp[0].minor.yy0.z[1])) ){
u32 n = yymsp[0].minor.yy0.n;
yymsp[0].minor.yy202 = tokenExpr(pParse, TK_VARIABLE, yymsp[0].minor.yy0);
sqlite3ExprAssignVarNumber(pParse, yymsp[0].minor.yy202, n);
}else{
/* When doing a nested parse, one can include terms in an expression
** that look like this: #1 #2 ... These terms refer to registers
** in the virtual machine. #N is the N-th register. */
Token t = yymsp[0].minor.yy0; /*A-overwrites-X*/
assert( t.n>=2 );
if( pParse->nested==0 ){
sqlite3ErrorMsg(pParse, "near \"%T\": syntax error", &t);
yymsp[0].minor.yy202 = 0;
}else{
yymsp[0].minor.yy202 = sqlite3PExpr(pParse, TK_REGISTER, 0, 0);
if( yymsp[0].minor.yy202 ) sqlite3GetInt32(&t.z[1], &yymsp[0].minor.yy202->iTable);
}
}
}
#line 4578 "parse.sql"
break;
case 177: /* expr ::= expr COLLATE ID|STRING */
#line 1083 "parse.y"
{
yymsp[-2].minor.yy202 = sqlite3ExprAddCollateToken(pParse, yymsp[-2].minor.yy202, &yymsp[0].minor.yy0, 1);
}
#line 4585 "parse.sql"
break;
case 178: /* expr ::= CAST LP expr AS typetoken RP */
#line 1087 "parse.y"
{
yymsp[-5].minor.yy202 = sqlite3ExprAlloc(pParse->db, TK_CAST, &yymsp[-1].minor.yy0, 1);
sqlite3ExprAttachSubtrees(pParse->db, yymsp[-5].minor.yy202, yymsp[-3].minor.yy202, 0);
}
#line 4593 "parse.sql"
break;
case 179: /* expr ::= ID|INDEXED LP distinct exprlist RP */
#line 1094 "parse.y"
{
yylhsminor.yy202 = sqlite3ExprFunction(pParse, yymsp[-1].minor.yy242, &yymsp[-4].minor.yy0, yymsp[-2].minor.yy192);
}
#line 4600 "parse.sql"
yymsp[-4].minor.yy202 = yylhsminor.yy202;
break;
case 180: /* expr ::= ID|INDEXED LP STAR RP */
#line 1097 "parse.y"
{
yylhsminor.yy202 = sqlite3ExprFunction(pParse, 0, &yymsp[-3].minor.yy0, 0);
}
#line 4608 "parse.sql"
yymsp[-3].minor.yy202 = yylhsminor.yy202;
break;
case 181: /* expr ::= ID|INDEXED LP distinct exprlist RP filter_over */
#line 1102 "parse.y"
{
yylhsminor.yy202 = sqlite3ExprFunction(pParse, yymsp[-2].minor.yy242, &yymsp[-5].minor.yy0, yymsp[-3].minor.yy192);
sqlite3WindowAttach(pParse, yylhsminor.yy202, yymsp[0].minor.yy303);
}
#line 4617 "parse.sql"
yymsp[-5].minor.yy202 = yylhsminor.yy202;
break;
case 182: /* expr ::= ID|INDEXED LP STAR RP filter_over */
#line 1106 "parse.y"
{
yylhsminor.yy202 = sqlite3ExprFunction(pParse, 0, &yymsp[-4].minor.yy0, 0);
sqlite3WindowAttach(pParse, yylhsminor.yy202, yymsp[0].minor.yy303);
}
#line 4626 "parse.sql"
yymsp[-4].minor.yy202 = yylhsminor.yy202;
break;
case 183: /* term ::= CTIME_KW */
#line 1112 "parse.y"
{
yylhsminor.yy202 = sqlite3ExprFunction(pParse, 0, &yymsp[0].minor.yy0, 0);
}
#line 4634 "parse.sql"
yymsp[0].minor.yy202 = yylhsminor.yy202;
break;
case 184: /* expr ::= LP nexprlist COMMA expr RP */
#line 1116 "parse.y"
{
ExprList *pList = sqlite3ExprListAppend(pParse, yymsp[-3].minor.yy242, yymsp[-1].minor.yy202);
yymsp[-4].minor.yy202 = sqlite3PExpr(pParse, TK_VECTOR, 0, 0);
if( yymsp[-4].minor.yy202 ){
yymsp[-4].minor.yy202->x.pList = pList;
if( ALWAYS(pList->nExpr) ){
yymsp[-4].minor.yy202->flags |= pList->a[0].pExpr->flags & EP_Propagate;
}
}else{
sqlite3ExprListDelete(pParse->db, pList);
}
}
#line 4651 "parse.sql"
break;
case 185: /* expr ::= expr AND expr */
#line 1129 "parse.y"
{yymsp[-2].minor.yy202=sqlite3ExprAnd(pParse,yymsp[-2].minor.yy202,yymsp[0].minor.yy202);}
#line 4656 "parse.sql"
break;
case 186: /* expr ::= expr OR expr */
case 187: /* expr ::= expr LT|GT|GE|LE expr */ yytestcase(yyruleno==187);
case 188: /* expr ::= expr EQ|NE expr */ yytestcase(yyruleno==188);
case 189: /* expr ::= expr BITAND|BITOR|LSHIFT|RSHIFT expr */ yytestcase(yyruleno==189);
case 190: /* expr ::= expr PLUS|MINUS expr */ yytestcase(yyruleno==190);
case 191: /* expr ::= expr STAR|SLASH|REM expr */ yytestcase(yyruleno==191);
case 192: /* expr ::= expr CONCAT expr */ yytestcase(yyruleno==192);
#line 1130 "parse.y"
{yymsp[-2].minor.yy202=sqlite3PExpr(pParse,yymsp[-1].major,yymsp[-2].minor.yy202,yymsp[0].minor.yy202);}
#line 4667 "parse.sql"
break;
case 193: /* likeop ::= NOT LIKE_KW|MATCH */
#line 1143 "parse.y"
{yymsp[-1].minor.yy0=yymsp[0].minor.yy0; yymsp[-1].minor.yy0.n|=0x80000000; /*yymsp[-1].minor.yy0-overwrite-yymsp[0].minor.yy0*/}
#line 4672 "parse.sql"
break;
case 194: /* expr ::= expr likeop expr */
#line 1144 "parse.y"
{
ExprList *pList;
int bNot = yymsp[-1].minor.yy0.n & 0x80000000;
yymsp[-1].minor.yy0.n &= 0x7fffffff;
pList = sqlite3ExprListAppend(pParse,0, yymsp[0].minor.yy202);
pList = sqlite3ExprListAppend(pParse,pList, yymsp[-2].minor.yy202);
yymsp[-2].minor.yy202 = sqlite3ExprFunction(pParse, pList, &yymsp[-1].minor.yy0, 0);
if( bNot ) yymsp[-2].minor.yy202 = sqlite3PExpr(pParse, TK_NOT, yymsp[-2].minor.yy202, 0);
if( yymsp[-2].minor.yy202 ) yymsp[-2].minor.yy202->flags |= EP_InfixFunc;
}
#line 4686 "parse.sql"
break;
case 195: /* expr ::= expr likeop expr ESCAPE expr */
#line 1154 "parse.y"
{
ExprList *pList;
int bNot = yymsp[-3].minor.yy0.n & 0x80000000;
yymsp[-3].minor.yy0.n &= 0x7fffffff;
pList = sqlite3ExprListAppend(pParse,0, yymsp[-2].minor.yy202);
pList = sqlite3ExprListAppend(pParse,pList, yymsp[-4].minor.yy202);
pList = sqlite3ExprListAppend(pParse,pList, yymsp[0].minor.yy202);
yymsp[-4].minor.yy202 = sqlite3ExprFunction(pParse, pList, &yymsp[-3].minor.yy0, 0);
if( bNot ) yymsp[-4].minor.yy202 = sqlite3PExpr(pParse, TK_NOT, yymsp[-4].minor.yy202, 0);
if( yymsp[-4].minor.yy202 ) yymsp[-4].minor.yy202->flags |= EP_InfixFunc;
}
#line 4701 "parse.sql"
break;
case 196: /* expr ::= expr ISNULL|NOTNULL */
#line 1166 "parse.y"
{yymsp[-1].minor.yy202 = sqlite3PExpr(pParse,yymsp[0].major,yymsp[-1].minor.yy202,0);}
#line 4706 "parse.sql"
break;
case 197: /* expr ::= expr NOT NULL */
#line 1167 "parse.y"
{yymsp[-2].minor.yy202 = sqlite3PExpr(pParse,TK_NOTNULL,yymsp[-2].minor.yy202,0);}
#line 4711 "parse.sql"
break;
case 198: /* expr ::= expr IS expr */
#line 1188 "parse.y"
{
yymsp[-2].minor.yy202 = sqlite3PExpr(pParse,TK_IS,yymsp[-2].minor.yy202,yymsp[0].minor.yy202);
binaryToUnaryIfNull(pParse, yymsp[0].minor.yy202, yymsp[-2].minor.yy202, TK_ISNULL);
}
#line 4719 "parse.sql"
break;
case 199: /* expr ::= expr IS NOT expr */
#line 1192 "parse.y"
{
yymsp[-3].minor.yy202 = sqlite3PExpr(pParse,TK_ISNOT,yymsp[-3].minor.yy202,yymsp[0].minor.yy202);
binaryToUnaryIfNull(pParse, yymsp[0].minor.yy202, yymsp[-3].minor.yy202, TK_NOTNULL);
}
#line 4727 "parse.sql"
break;
case 200: /* expr ::= NOT expr */
case 201: /* expr ::= BITNOT expr */ yytestcase(yyruleno==201);
#line 1198 "parse.y"
{yymsp[-1].minor.yy202 = sqlite3PExpr(pParse, yymsp[-1].major, yymsp[0].minor.yy202, 0);/*A-overwrites-B*/}
#line 4733 "parse.sql"
break;
case 202: /* expr ::= PLUS|MINUS expr */
#line 1201 "parse.y"
{
yymsp[-1].minor.yy202 = sqlite3PExpr(pParse, yymsp[-1].major==TK_PLUS ? TK_UPLUS : TK_UMINUS, yymsp[0].minor.yy202, 0);
/*A-overwrites-B*/
}
#line 4741 "parse.sql"
break;
case 203: /* between_op ::= BETWEEN */
case 206: /* in_op ::= IN */ yytestcase(yyruleno==206);
#line 1207 "parse.y"
{yymsp[0].minor.yy192 = 0;}
#line 4747 "parse.sql"
break;
case 205: /* expr ::= expr between_op expr AND expr */
#line 1209 "parse.y"
{
ExprList *pList = sqlite3ExprListAppend(pParse,0, yymsp[-2].minor.yy202);
pList = sqlite3ExprListAppend(pParse,pList, yymsp[0].minor.yy202);
yymsp[-4].minor.yy202 = sqlite3PExpr(pParse, TK_BETWEEN, yymsp[-4].minor.yy202, 0);
if( yymsp[-4].minor.yy202 ){
yymsp[-4].minor.yy202->x.pList = pList;
}else{
sqlite3ExprListDelete(pParse->db, pList);
}
if( yymsp[-3].minor.yy192 ) yymsp[-4].minor.yy202 = sqlite3PExpr(pParse, TK_NOT, yymsp[-4].minor.yy202, 0);
}
#line 4762 "parse.sql"
break;
case 208: /* expr ::= expr in_op LP exprlist RP */
#line 1224 "parse.y"
{
if( yymsp[-1].minor.yy242==0 ){
/* Expressions of the form
**
** expr1 IN ()
** expr1 NOT IN ()
**
** simplify to constants 0 (false) and 1 (true), respectively,
** regardless of the value of expr1.
*/
sqlite3ExprUnmapAndDelete(pParse, yymsp[-4].minor.yy202);
yymsp[-4].minor.yy202 = sqlite3Expr(pParse->db, TK_INTEGER, yymsp[-3].minor.yy192 ? "1" : "0");
}else if( yymsp[-1].minor.yy242->nExpr==1 && sqlite3ExprIsConstant(yymsp[-1].minor.yy242->a[0].pExpr) ){
Expr *pRHS = yymsp[-1].minor.yy242->a[0].pExpr;
yymsp[-1].minor.yy242->a[0].pExpr = 0;
sqlite3ExprListDelete(pParse->db, yymsp[-1].minor.yy242);
pRHS = sqlite3PExpr(pParse, TK_UPLUS, pRHS, 0);
yymsp[-4].minor.yy202 = sqlite3PExpr(pParse, TK_EQ, yymsp[-4].minor.yy202, pRHS);
if( yymsp[-3].minor.yy192 ) yymsp[-4].minor.yy202 = sqlite3PExpr(pParse, TK_NOT, yymsp[-4].minor.yy202, 0);
}else{
yymsp[-4].minor.yy202 = sqlite3PExpr(pParse, TK_IN, yymsp[-4].minor.yy202, 0);
if( yymsp[-4].minor.yy202 ){
yymsp[-4].minor.yy202->x.pList = yymsp[-1].minor.yy242;
sqlite3ExprSetHeightAndFlags(pParse, yymsp[-4].minor.yy202);
}else{
sqlite3ExprListDelete(pParse->db, yymsp[-1].minor.yy242);
}
if( yymsp[-3].minor.yy192 ) yymsp[-4].minor.yy202 = sqlite3PExpr(pParse, TK_NOT, yymsp[-4].minor.yy202, 0);
}
}
#line 4796 "parse.sql"
break;
case 209: /* expr ::= LP select RP */
#line 1254 "parse.y"
{
yymsp[-2].minor.yy202 = sqlite3PExpr(pParse, TK_SELECT, 0, 0);
sqlite3PExprAddSelect(pParse, yymsp[-2].minor.yy202, yymsp[-1].minor.yy539);
}
#line 4804 "parse.sql"
break;
case 210: /* expr ::= expr in_op LP select RP */
#line 1258 "parse.y"
{
yymsp[-4].minor.yy202 = sqlite3PExpr(pParse, TK_IN, yymsp[-4].minor.yy202, 0);
sqlite3PExprAddSelect(pParse, yymsp[-4].minor.yy202, yymsp[-1].minor.yy539);
if( yymsp[-3].minor.yy192 ) yymsp[-4].minor.yy202 = sqlite3PExpr(pParse, TK_NOT, yymsp[-4].minor.yy202, 0);
}
#line 4813 "parse.sql"
break;
case 211: /* expr ::= expr in_op nm dbnm paren_exprlist */
#line 1263 "parse.y"
{
SrcList *pSrc = sqlite3SrcListAppend(pParse, 0,&yymsp[-2].minor.yy0,&yymsp[-1].minor.yy0);
Select *pSelect = sqlite3SelectNew(pParse, 0,pSrc,0,0,0,0,0,0);
if( yymsp[0].minor.yy242 ) sqlite3SrcListFuncArgs(pParse, pSelect ? pSrc : 0, yymsp[0].minor.yy242);
yymsp[-4].minor.yy202 = sqlite3PExpr(pParse, TK_IN, yymsp[-4].minor.yy202, 0);
sqlite3PExprAddSelect(pParse, yymsp[-4].minor.yy202, pSelect);
if( yymsp[-3].minor.yy192 ) yymsp[-4].minor.yy202 = sqlite3PExpr(pParse, TK_NOT, yymsp[-4].minor.yy202, 0);
}
#line 4825 "parse.sql"
break;
case 212: /* expr ::= EXISTS LP select RP */
#line 1271 "parse.y"
{
Expr *p;
p = yymsp[-3].minor.yy202 = sqlite3PExpr(pParse, TK_EXISTS, 0, 0);
sqlite3PExprAddSelect(pParse, p, yymsp[-1].minor.yy539);
}
#line 4834 "parse.sql"
break;
case 213: /* expr ::= CASE case_operand case_exprlist case_else END */
#line 1279 "parse.y"
{
yymsp[-4].minor.yy202 = sqlite3PExpr(pParse, TK_CASE, yymsp[-3].minor.yy202, 0);
if( yymsp[-4].minor.yy202 ){
yymsp[-4].minor.yy202->x.pList = yymsp[-1].minor.yy202 ? sqlite3ExprListAppend(pParse,yymsp[-2].minor.yy242,yymsp[-1].minor.yy202) : yymsp[-2].minor.yy242;
sqlite3ExprSetHeightAndFlags(pParse, yymsp[-4].minor.yy202);
}else{
sqlite3ExprListDelete(pParse->db, yymsp[-2].minor.yy242);
sqlite3ExprDelete(pParse->db, yymsp[-1].minor.yy202);
}
}
#line 4848 "parse.sql"
break;
case 214: /* case_exprlist ::= case_exprlist WHEN expr THEN expr */
#line 1291 "parse.y"
{
yymsp[-4].minor.yy242 = sqlite3ExprListAppend(pParse,yymsp[-4].minor.yy242, yymsp[-2].minor.yy202);
yymsp[-4].minor.yy242 = sqlite3ExprListAppend(pParse,yymsp[-4].minor.yy242, yymsp[0].minor.yy202);
}
#line 4856 "parse.sql"
break;
case 215: /* case_exprlist ::= WHEN expr THEN expr */
#line 1295 "parse.y"
{
yymsp[-3].minor.yy242 = sqlite3ExprListAppend(pParse,0, yymsp[-2].minor.yy202);
yymsp[-3].minor.yy242 = sqlite3ExprListAppend(pParse,yymsp[-3].minor.yy242, yymsp[0].minor.yy202);
}
#line 4864 "parse.sql"
break;
case 218: /* case_operand ::= expr */
#line 1305 "parse.y"
{yymsp[0].minor.yy202 = yymsp[0].minor.yy202; /*A-overwrites-X*/}
#line 4869 "parse.sql"
break;
case 221: /* nexprlist ::= nexprlist COMMA expr */
#line 1316 "parse.y"
{yymsp[-2].minor.yy242 = sqlite3ExprListAppend(pParse,yymsp[-2].minor.yy242,yymsp[0].minor.yy202);}
#line 4874 "parse.sql"
break;
case 222: /* nexprlist ::= expr */
#line 1318 "parse.y"
{yymsp[0].minor.yy242 = sqlite3ExprListAppend(pParse,0,yymsp[0].minor.yy202); /*A-overwrites-Y*/}
#line 4879 "parse.sql"
break;
case 224: /* paren_exprlist ::= LP exprlist RP */
case 229: /* eidlist_opt ::= LP eidlist RP */ yytestcase(yyruleno==229);
#line 1326 "parse.y"
{yymsp[-2].minor.yy242 = yymsp[-1].minor.yy242;}
#line 4885 "parse.sql"
break;
case 225: /* cmd ::= createkw uniqueflag INDEX ifnotexists nm dbnm ON nm LP sortlist RP where_opt */
#line 1333 "parse.y"
{
sqlite3CreateIndex(pParse, &yymsp[-7].minor.yy0, &yymsp[-6].minor.yy0,
sqlite3SrcListAppend(pParse,0,&yymsp[-4].minor.yy0,0), yymsp[-2].minor.yy242, yymsp[-10].minor.yy192,
&yymsp[-11].minor.yy0, yymsp[0].minor.yy202, SQLITE_SO_ASC, yymsp[-8].minor.yy192, SQLITE_IDXTYPE_APPDEF);
if( IN_RENAME_OBJECT && pParse->pNewIndex ){
sqlite3RenameTokenMap(pParse, pParse->pNewIndex->zName, &yymsp[-4].minor.yy0);
}
}
#line 4897 "parse.sql"
break;
case 226: /* uniqueflag ::= UNIQUE */
case 268: /* raisetype ::= ABORT */ yytestcase(yyruleno==268);
#line 1343 "parse.y"
{yymsp[0].minor.yy192 = OE_Abort;}
#line 4903 "parse.sql"
break;
case 227: /* uniqueflag ::= */
#line 1344 "parse.y"
{yymsp[1].minor.yy192 = OE_None;}
#line 4908 "parse.sql"
break;
case 230: /* eidlist ::= eidlist COMMA nm collate sortorder */
#line 1394 "parse.y"
{
yymsp[-4].minor.yy242 = parserAddExprIdListTerm(pParse, yymsp[-4].minor.yy242, &yymsp[-2].minor.yy0, yymsp[-1].minor.yy192, yymsp[0].minor.yy192);
}
#line 4915 "parse.sql"
break;
case 231: /* eidlist ::= nm collate sortorder */
#line 1397 "parse.y"
{
yymsp[-2].minor.yy242 = parserAddExprIdListTerm(pParse, 0, &yymsp[-2].minor.yy0, yymsp[-1].minor.yy192, yymsp[0].minor.yy192); /*A-overwrites-Y*/
}
#line 4922 "parse.sql"
break;
case 234: /* cmd ::= DROP INDEX ifexists fullname */
#line 1408 "parse.y"
{sqlite3DropIndex(pParse, yymsp[0].minor.yy47, yymsp[-1].minor.yy192);}
#line 4927 "parse.sql"
break;
case 235: /* cmd ::= VACUUM vinto */
#line 1415 "parse.y"
{sqlite3Vacuum(pParse,0,yymsp[0].minor.yy202);}
#line 4932 "parse.sql"
break;
case 236: /* cmd ::= VACUUM nm vinto */
#line 1416 "parse.y"
{sqlite3Vacuum(pParse,&yymsp[-1].minor.yy0,yymsp[0].minor.yy202);}
#line 4937 "parse.sql"
break;
case 239: /* cmd ::= PRAGMA nm dbnm */
#line 1424 "parse.y"
{sqlite3Pragma(pParse,&yymsp[-1].minor.yy0,&yymsp[0].minor.yy0,0,0);}
#line 4942 "parse.sql"
break;
case 240: /* cmd ::= PRAGMA nm dbnm EQ nmnum */
#line 1425 "parse.y"
{sqlite3Pragma(pParse,&yymsp[-3].minor.yy0,&yymsp[-2].minor.yy0,&yymsp[0].minor.yy0,0);}
#line 4947 "parse.sql"
break;
case 241: /* cmd ::= PRAGMA nm dbnm LP nmnum RP */
#line 1426 "parse.y"
{sqlite3Pragma(pParse,&yymsp[-4].minor.yy0,&yymsp[-3].minor.yy0,&yymsp[-1].minor.yy0,0);}
#line 4952 "parse.sql"
break;
case 242: /* cmd ::= PRAGMA nm dbnm EQ minus_num */
#line 1428 "parse.y"
{sqlite3Pragma(pParse,&yymsp[-3].minor.yy0,&yymsp[-2].minor.yy0,&yymsp[0].minor.yy0,1);}
#line 4957 "parse.sql"
break;
case 243: /* cmd ::= PRAGMA nm dbnm LP minus_num RP */
#line 1430 "parse.y"
{sqlite3Pragma(pParse,&yymsp[-4].minor.yy0,&yymsp[-3].minor.yy0,&yymsp[-1].minor.yy0,1);}
#line 4962 "parse.sql"
break;
case 246: /* cmd ::= createkw trigger_decl BEGIN trigger_cmd_list END */
#line 1446 "parse.y"
{
Token all;
all.z = yymsp[-3].minor.yy0.z;
all.n = (int)(yymsp[0].minor.yy0.z - yymsp[-3].minor.yy0.z) + yymsp[0].minor.yy0.n;
sqlite3FinishTrigger(pParse, yymsp[-1].minor.yy447, &all);
}
#line 4972 "parse.sql"
break;
case 247: /* trigger_decl ::= temp TRIGGER ifnotexists nm dbnm trigger_time trigger_event ON fullname foreach_clause when_clause */
#line 1455 "parse.y"
{
sqlite3BeginTrigger(pParse, &yymsp[-7].minor.yy0, &yymsp[-6].minor.yy0, yymsp[-5].minor.yy192, yymsp[-4].minor.yy230.a, yymsp[-4].minor.yy230.b, yymsp[-2].minor.yy47, yymsp[0].minor.yy202, yymsp[-10].minor.yy192, yymsp[-8].minor.yy192);
yymsp[-10].minor.yy0 = (yymsp[-6].minor.yy0.n==0?yymsp[-7].minor.yy0:yymsp[-6].minor.yy0); /*A-overwrites-T*/
}
#line 4980 "parse.sql"
break;
case 248: /* trigger_time ::= BEFORE|AFTER */
#line 1461 "parse.y"
{ yymsp[0].minor.yy192 = yymsp[0].major; /*A-overwrites-X*/ }
#line 4985 "parse.sql"
break;
case 249: /* trigger_time ::= INSTEAD OF */
#line 1462 "parse.y"
{ yymsp[-1].minor.yy192 = TK_INSTEAD;}
#line 4990 "parse.sql"
break;
case 250: /* trigger_time ::= */
#line 1463 "parse.y"
{ yymsp[1].minor.yy192 = TK_BEFORE; }
#line 4995 "parse.sql"
break;
case 251: /* trigger_event ::= DELETE|INSERT */
case 252: /* trigger_event ::= UPDATE */ yytestcase(yyruleno==252);
#line 1467 "parse.y"
{yymsp[0].minor.yy230.a = yymsp[0].major; /*A-overwrites-X*/ yymsp[0].minor.yy230.b = 0;}
#line 5001 "parse.sql"
break;
case 253: /* trigger_event ::= UPDATE OF idlist */
#line 1469 "parse.y"
{yymsp[-2].minor.yy230.a = TK_UPDATE; yymsp[-2].minor.yy230.b = yymsp[0].minor.yy600;}
#line 5006 "parse.sql"
break;
case 254: /* when_clause ::= */
case 273: /* key_opt ::= */ yytestcase(yyruleno==273);
#line 1476 "parse.y"
{ yymsp[1].minor.yy202 = 0; }
#line 5012 "parse.sql"
break;
case 255: /* when_clause ::= WHEN expr */
case 274: /* key_opt ::= KEY expr */ yytestcase(yyruleno==274);
#line 1477 "parse.y"
{ yymsp[-1].minor.yy202 = yymsp[0].minor.yy202; }
#line 5018 "parse.sql"
break;
case 256: /* trigger_cmd_list ::= trigger_cmd_list trigger_cmd SEMI */
#line 1481 "parse.y"
{
assert( yymsp[-2].minor.yy447!=0 );
yymsp[-2].minor.yy447->pLast->pNext = yymsp[-1].minor.yy447;
yymsp[-2].minor.yy447->pLast = yymsp[-1].minor.yy447;
}
#line 5027 "parse.sql"
break;
case 257: /* trigger_cmd_list ::= trigger_cmd SEMI */
#line 1486 "parse.y"
{
assert( yymsp[-1].minor.yy447!=0 );
yymsp[-1].minor.yy447->pLast = yymsp[-1].minor.yy447;
}
#line 5035 "parse.sql"
break;
case 258: /* trnm ::= nm DOT nm */
#line 1497 "parse.y"
{
yymsp[-2].minor.yy0 = yymsp[0].minor.yy0;
sqlite3ErrorMsg(pParse,
"qualified table names are not allowed on INSERT, UPDATE, and DELETE "
"statements within triggers");
}
#line 5045 "parse.sql"
break;
case 259: /* tridxby ::= INDEXED BY nm */
#line 1509 "parse.y"
{
sqlite3ErrorMsg(pParse,
"the INDEXED BY clause is not allowed on UPDATE or DELETE statements "
"within triggers");
}
#line 5054 "parse.sql"
break;
case 260: /* tridxby ::= NOT INDEXED */
#line 1514 "parse.y"
{
sqlite3ErrorMsg(pParse,
"the NOT INDEXED clause is not allowed on UPDATE or DELETE statements "
"within triggers");
}
#line 5063 "parse.sql"
break;
case 261: /* trigger_cmd ::= UPDATE orconf trnm tridxby SET setlist from where_opt scanpt */
#line 1527 "parse.y"
{yylhsminor.yy447 = sqlite3TriggerUpdateStep(pParse, &yymsp[-6].minor.yy0, yymsp[-2].minor.yy47, yymsp[-3].minor.yy242, yymsp[-1].minor.yy202, yymsp[-7].minor.yy192, yymsp[-8].minor.yy0.z, yymsp[0].minor.yy436);}
#line 5068 "parse.sql"
yymsp[-8].minor.yy447 = yylhsminor.yy447;
break;
case 262: /* trigger_cmd ::= scanpt insert_cmd INTO trnm idlist_opt select upsert scanpt */
#line 1531 "parse.y"
{
yylhsminor.yy447 = sqlite3TriggerInsertStep(pParse,&yymsp[-4].minor.yy0,yymsp[-3].minor.yy600,yymsp[-2].minor.yy539,yymsp[-6].minor.yy192,yymsp[-1].minor.yy318,yymsp[-7].minor.yy436,yymsp[0].minor.yy436);/*yylhsminor.yy447-overwrites-yymsp[-6].minor.yy192*/
}
#line 5076 "parse.sql"
yymsp[-7].minor.yy447 = yylhsminor.yy447;
break;
case 263: /* trigger_cmd ::= DELETE FROM trnm tridxby where_opt scanpt */
#line 1536 "parse.y"
{yylhsminor.yy447 = sqlite3TriggerDeleteStep(pParse, &yymsp[-3].minor.yy0, yymsp[-1].minor.yy202, yymsp[-5].minor.yy0.z, yymsp[0].minor.yy436);}
#line 5082 "parse.sql"
yymsp[-5].minor.yy447 = yylhsminor.yy447;
break;
case 264: /* trigger_cmd ::= scanpt select scanpt */
#line 1540 "parse.y"
{yylhsminor.yy447 = sqlite3TriggerSelectStep(pParse->db, yymsp[-1].minor.yy539, yymsp[-2].minor.yy436, yymsp[0].minor.yy436); /*yylhsminor.yy447-overwrites-yymsp[-1].minor.yy539*/}
#line 5088 "parse.sql"
yymsp[-2].minor.yy447 = yylhsminor.yy447;
break;
case 265: /* expr ::= RAISE LP IGNORE RP */
#line 1543 "parse.y"
{
yymsp[-3].minor.yy202 = sqlite3PExpr(pParse, TK_RAISE, 0, 0);
if( yymsp[-3].minor.yy202 ){
yymsp[-3].minor.yy202->affExpr = OE_Ignore;
}
}
#line 5099 "parse.sql"
break;
case 266: /* expr ::= RAISE LP raisetype COMMA nm RP */
#line 1549 "parse.y"
{
yymsp[-5].minor.yy202 = sqlite3ExprAlloc(pParse->db, TK_RAISE, &yymsp[-1].minor.yy0, 1);
if( yymsp[-5].minor.yy202 ) {
yymsp[-5].minor.yy202->affExpr = (char)yymsp[-3].minor.yy192;
}
}
#line 5109 "parse.sql"
break;
case 267: /* raisetype ::= ROLLBACK */
#line 1558 "parse.y"
{yymsp[0].minor.yy192 = OE_Rollback;}
#line 5114 "parse.sql"
break;
case 269: /* raisetype ::= FAIL */
#line 1560 "parse.y"
{yymsp[0].minor.yy192 = OE_Fail;}
#line 5119 "parse.sql"
break;
case 270: /* cmd ::= DROP TRIGGER ifexists fullname */
#line 1565 "parse.y"
{
sqlite3DropTrigger(pParse,yymsp[0].minor.yy47,yymsp[-1].minor.yy192);
}
#line 5126 "parse.sql"
break;
case 271: /* cmd ::= ATTACH database_kw_opt expr AS expr key_opt */
#line 1572 "parse.y"
{
sqlite3Attach(pParse, yymsp[-3].minor.yy202, yymsp[-1].minor.yy202, yymsp[0].minor.yy202);
}
#line 5133 "parse.sql"
break;
case 272: /* cmd ::= DETACH database_kw_opt expr */
#line 1575 "parse.y"
{
sqlite3Detach(pParse, yymsp[0].minor.yy202);
}
#line 5140 "parse.sql"
break;
case 275: /* cmd ::= REINDEX */
#line 1590 "parse.y"
{sqlite3Reindex(pParse, 0, 0);}
#line 5145 "parse.sql"
break;
case 276: /* cmd ::= REINDEX nm dbnm */
#line 1591 "parse.y"
{sqlite3Reindex(pParse, &yymsp[-1].minor.yy0, &yymsp[0].minor.yy0);}
#line 5150 "parse.sql"
break;
case 277: /* cmd ::= ANALYZE */
#line 1596 "parse.y"
{sqlite3Analyze(pParse, 0, 0);}
#line 5155 "parse.sql"
break;
case 278: /* cmd ::= ANALYZE nm dbnm */
#line 1597 "parse.y"
{sqlite3Analyze(pParse, &yymsp[-1].minor.yy0, &yymsp[0].minor.yy0);}
#line 5160 "parse.sql"
break;
case 279: /* cmd ::= ALTER TABLE fullname RENAME TO nm */
#line 1602 "parse.y"
{
sqlite3AlterRenameTable(pParse,yymsp[-3].minor.yy47,&yymsp[0].minor.yy0);
}
#line 5167 "parse.sql"
break;
case 280: /* cmd ::= ALTER TABLE add_column_fullname ADD kwcolumn_opt columnname carglist */
#line 1606 "parse.y"
{
yymsp[-1].minor.yy0.n = (int)(pParse->sLastToken.z-yymsp[-1].minor.yy0.z) + pParse->sLastToken.n;
sqlite3AlterFinishAddColumn(pParse, &yymsp[-1].minor.yy0);
}
#line 5175 "parse.sql"
break;
case 281: /* add_column_fullname ::= fullname */
#line 1610 "parse.y"
{
disableLookaside(pParse);
sqlite3AlterBeginAddColumn(pParse, yymsp[0].minor.yy47);
}
#line 5183 "parse.sql"
break;
case 282: /* cmd ::= ALTER TABLE fullname RENAME kwcolumn_opt nm TO nm */
#line 1614 "parse.y"
{
sqlite3AlterRenameColumn(pParse, yymsp[-5].minor.yy47, &yymsp[-2].minor.yy0, &yymsp[0].minor.yy0);
}
#line 5190 "parse.sql"
break;
case 283: /* cmd ::= create_vtab */
#line 1625 "parse.y"
{sqlite3VtabFinishParse(pParse,0);}
#line 5195 "parse.sql"
break;
case 284: /* cmd ::= create_vtab LP vtabarglist RP */
#line 1626 "parse.y"
{sqlite3VtabFinishParse(pParse,&yymsp[0].minor.yy0);}
#line 5200 "parse.sql"
break;
case 285: /* create_vtab ::= createkw VIRTUAL TABLE ifnotexists nm dbnm USING nm */
#line 1628 "parse.y"
{
sqlite3VtabBeginParse(pParse, &yymsp[-3].minor.yy0, &yymsp[-2].minor.yy0, &yymsp[0].minor.yy0, yymsp[-4].minor.yy192);
}
#line 5207 "parse.sql"
break;
case 286: /* vtabarg ::= */
#line 1633 "parse.y"
{sqlite3VtabArgInit(pParse);}
#line 5212 "parse.sql"
break;
case 287: /* vtabargtoken ::= ANY */
case 288: /* vtabargtoken ::= lp anylist RP */ yytestcase(yyruleno==288);
case 289: /* lp ::= LP */ yytestcase(yyruleno==289);
#line 1635 "parse.y"
{sqlite3VtabArgExtend(pParse,&yymsp[0].minor.yy0);}
#line 5219 "parse.sql"
break;
case 290: /* with ::= WITH wqlist */
case 291: /* with ::= WITH RECURSIVE wqlist */ yytestcase(yyruleno==291);
#line 1650 "parse.y"
{ sqlite3WithPush(pParse, yymsp[0].minor.yy131, 1); }
#line 5225 "parse.sql"
break;
case 292: /* wqlist ::= nm eidlist_opt AS LP select RP */
#line 1653 "parse.y"
{
yymsp[-5].minor.yy131 = sqlite3WithAdd(pParse, 0, &yymsp[-5].minor.yy0, yymsp[-4].minor.yy242, yymsp[-1].minor.yy539); /*A-overwrites-X*/
}
#line 5232 "parse.sql"
break;
case 293: /* wqlist ::= wqlist COMMA nm eidlist_opt AS LP select RP */
#line 1656 "parse.y"
{
yymsp[-7].minor.yy131 = sqlite3WithAdd(pParse, yymsp[-7].minor.yy131, &yymsp[-5].minor.yy0, yymsp[-4].minor.yy242, yymsp[-1].minor.yy539);
}
#line 5239 "parse.sql"
break;
case 294: /* windowdefn_list ::= windowdefn */
#line 1670 "parse.y"
{ yylhsminor.yy303 = yymsp[0].minor.yy303; }
#line 5244 "parse.sql"
yymsp[0].minor.yy303 = yylhsminor.yy303;
break;
case 295: /* windowdefn_list ::= windowdefn_list COMMA windowdefn */
#line 1671 "parse.y"
{
assert( yymsp[0].minor.yy303!=0 );
sqlite3WindowChain(pParse, yymsp[0].minor.yy303, yymsp[-2].minor.yy303);
yymsp[0].minor.yy303->pNextWin = yymsp[-2].minor.yy303;
yylhsminor.yy303 = yymsp[0].minor.yy303;
}
#line 5255 "parse.sql"
yymsp[-2].minor.yy303 = yylhsminor.yy303;
break;
case 296: /* windowdefn ::= nm AS LP window RP */
#line 1680 "parse.y"
{
if( ALWAYS(yymsp[-1].minor.yy303) ){
yymsp[-1].minor.yy303->zName = sqlite3DbStrNDup(pParse->db, yymsp[-4].minor.yy0.z, yymsp[-4].minor.yy0.n);
}
yylhsminor.yy303 = yymsp[-1].minor.yy303;
}
#line 5266 "parse.sql"
yymsp[-4].minor.yy303 = yylhsminor.yy303;
break;
case 297: /* window ::= PARTITION BY nexprlist orderby_opt frame_opt */
#line 1714 "parse.y"
{
yymsp[-4].minor.yy303 = sqlite3WindowAssemble(pParse, yymsp[0].minor.yy303, yymsp[-2].minor.yy242, yymsp[-1].minor.yy242, 0);
}
#line 5274 "parse.sql"
break;
case 298: /* window ::= nm PARTITION BY nexprlist orderby_opt frame_opt */
#line 1717 "parse.y"
{
yylhsminor.yy303 = sqlite3WindowAssemble(pParse, yymsp[0].minor.yy303, yymsp[-2].minor.yy242, yymsp[-1].minor.yy242, &yymsp[-5].minor.yy0);
}
#line 5281 "parse.sql"
yymsp[-5].minor.yy303 = yylhsminor.yy303;
break;
case 299: /* window ::= ORDER BY sortlist frame_opt */
#line 1720 "parse.y"
{
yymsp[-3].minor.yy303 = sqlite3WindowAssemble(pParse, yymsp[0].minor.yy303, 0, yymsp[-1].minor.yy242, 0);
}
#line 5289 "parse.sql"
break;
case 300: /* window ::= nm ORDER BY sortlist frame_opt */
#line 1723 "parse.y"
{
yylhsminor.yy303 = sqlite3WindowAssemble(pParse, yymsp[0].minor.yy303, 0, yymsp[-1].minor.yy242, &yymsp[-4].minor.yy0);
}
#line 5296 "parse.sql"
yymsp[-4].minor.yy303 = yylhsminor.yy303;
break;
case 301: /* window ::= frame_opt */
case 320: /* filter_over ::= over_clause */ yytestcase(yyruleno==320);
#line 1726 "parse.y"
{
yylhsminor.yy303 = yymsp[0].minor.yy303;
}
#line 5305 "parse.sql"
yymsp[0].minor.yy303 = yylhsminor.yy303;
break;
case 302: /* window ::= nm frame_opt */
#line 1729 "parse.y"
{
yylhsminor.yy303 = sqlite3WindowAssemble(pParse, yymsp[0].minor.yy303, 0, 0, &yymsp[-1].minor.yy0);
}
#line 5313 "parse.sql"
yymsp[-1].minor.yy303 = yylhsminor.yy303;
break;
case 303: /* frame_opt ::= */
#line 1733 "parse.y"
{
yymsp[1].minor.yy303 = sqlite3WindowAlloc(pParse, 0, TK_UNBOUNDED, 0, TK_CURRENT, 0, 0);
}
#line 5321 "parse.sql"
break;
case 304: /* frame_opt ::= range_or_rows frame_bound_s frame_exclude_opt */
#line 1736 "parse.y"
{
yylhsminor.yy303 = sqlite3WindowAlloc(pParse, yymsp[-2].minor.yy192, yymsp[-1].minor.yy77.eType, yymsp[-1].minor.yy77.pExpr, TK_CURRENT, 0, yymsp[0].minor.yy58);
}
#line 5328 "parse.sql"
yymsp[-2].minor.yy303 = yylhsminor.yy303;
break;
case 305: /* frame_opt ::= range_or_rows BETWEEN frame_bound_s AND frame_bound_e frame_exclude_opt */
#line 1740 "parse.y"
{
yylhsminor.yy303 = sqlite3WindowAlloc(pParse, yymsp[-5].minor.yy192, yymsp[-3].minor.yy77.eType, yymsp[-3].minor.yy77.pExpr, yymsp[-1].minor.yy77.eType, yymsp[-1].minor.yy77.pExpr, yymsp[0].minor.yy58);
}
#line 5336 "parse.sql"
yymsp[-5].minor.yy303 = yylhsminor.yy303;
break;
case 307: /* frame_bound_s ::= frame_bound */
case 309: /* frame_bound_e ::= frame_bound */ yytestcase(yyruleno==309);
#line 1746 "parse.y"
{yylhsminor.yy77 = yymsp[0].minor.yy77;}
#line 5343 "parse.sql"
yymsp[0].minor.yy77 = yylhsminor.yy77;
break;
case 308: /* frame_bound_s ::= UNBOUNDED PRECEDING */
case 310: /* frame_bound_e ::= UNBOUNDED FOLLOWING */ yytestcase(yyruleno==310);
case 312: /* frame_bound ::= CURRENT ROW */ yytestcase(yyruleno==312);
#line 1747 "parse.y"
{yylhsminor.yy77.eType = yymsp[-1].major; yylhsminor.yy77.pExpr = 0;}
#line 5351 "parse.sql"
yymsp[-1].minor.yy77 = yylhsminor.yy77;
break;
case 311: /* frame_bound ::= expr PRECEDING|FOLLOWING */
#line 1752 "parse.y"
{yylhsminor.yy77.eType = yymsp[0].major; yylhsminor.yy77.pExpr = yymsp[-1].minor.yy202;}
#line 5357 "parse.sql"
yymsp[-1].minor.yy77 = yylhsminor.yy77;
break;
case 313: /* frame_exclude_opt ::= */
#line 1756 "parse.y"
{yymsp[1].minor.yy58 = 0;}
#line 5363 "parse.sql"
break;
case 314: /* frame_exclude_opt ::= EXCLUDE frame_exclude */
#line 1757 "parse.y"
{yymsp[-1].minor.yy58 = yymsp[0].minor.yy58;}
#line 5368 "parse.sql"
break;
case 315: /* frame_exclude ::= NO OTHERS */
case 316: /* frame_exclude ::= CURRENT ROW */ yytestcase(yyruleno==316);
#line 1760 "parse.y"
{yymsp[-1].minor.yy58 = yymsp[-1].major; /*A-overwrites-X*/}
#line 5374 "parse.sql"
break;
case 317: /* frame_exclude ::= GROUP|TIES */
#line 1762 "parse.y"
{yymsp[0].minor.yy58 = yymsp[0].major; /*A-overwrites-X*/}
#line 5379 "parse.sql"
break;
case 318: /* window_clause ::= WINDOW windowdefn_list */
#line 1767 "parse.y"
{ yymsp[-1].minor.yy303 = yymsp[0].minor.yy303; }
#line 5384 "parse.sql"
break;
case 319: /* filter_over ::= filter_clause over_clause */
#line 1769 "parse.y"
{
yymsp[0].minor.yy303->pFilter = yymsp[-1].minor.yy202;
yylhsminor.yy303 = yymsp[0].minor.yy303;
}
#line 5392 "parse.sql"
yymsp[-1].minor.yy303 = yylhsminor.yy303;
break;
case 321: /* filter_over ::= filter_clause */
#line 1776 "parse.y"
{
yylhsminor.yy303 = (Window*)sqlite3DbMallocZero(pParse->db, sizeof(Window));
if( yylhsminor.yy303 ){
yylhsminor.yy303->eFrmType = TK_FILTER;
yylhsminor.yy303->pFilter = yymsp[0].minor.yy202;
}else{
sqlite3ExprDelete(pParse->db, yymsp[0].minor.yy202);
}
}
#line 5406 "parse.sql"
yymsp[0].minor.yy303 = yylhsminor.yy303;
break;
case 322: /* over_clause ::= OVER LP window RP */
#line 1786 "parse.y"
{
yymsp[-3].minor.yy303 = yymsp[-1].minor.yy303;
assert( yymsp[-3].minor.yy303!=0 );
}
#line 5415 "parse.sql"
break;
case 323: /* over_clause ::= OVER nm */
#line 1790 "parse.y"
{
yymsp[-1].minor.yy303 = (Window*)sqlite3DbMallocZero(pParse->db, sizeof(Window));
if( yymsp[-1].minor.yy303 ){
yymsp[-1].minor.yy303->zName = sqlite3DbStrNDup(pParse->db, yymsp[0].minor.yy0.z, yymsp[0].minor.yy0.n);
}
}
#line 5425 "parse.sql"
break;
case 324: /* filter_clause ::= FILTER LP WHERE expr RP */
#line 1797 "parse.y"
{ yymsp[-4].minor.yy202 = yymsp[-1].minor.yy202; }
#line 5430 "parse.sql"
break;
default:
/* (325) input ::= cmdlist */ yytestcase(yyruleno==325);
/* (326) cmdlist ::= cmdlist ecmd */ yytestcase(yyruleno==326);
/* (327) cmdlist ::= ecmd (OPTIMIZED OUT) */ assert(yyruleno!=327);
/* (328) ecmd ::= SEMI */ yytestcase(yyruleno==328);
/* (329) ecmd ::= cmdx SEMI */ yytestcase(yyruleno==329);
/* (330) ecmd ::= explain cmdx SEMI (NEVER REDUCES) */ assert(yyruleno!=330);
/* (331) trans_opt ::= */ yytestcase(yyruleno==331);
/* (332) trans_opt ::= TRANSACTION */ yytestcase(yyruleno==332);
/* (333) trans_opt ::= TRANSACTION nm */ yytestcase(yyruleno==333);
/* (334) savepoint_opt ::= SAVEPOINT */ yytestcase(yyruleno==334);
/* (335) savepoint_opt ::= */ yytestcase(yyruleno==335);
/* (336) cmd ::= create_table create_table_args */ yytestcase(yyruleno==336);
/* (337) columnlist ::= columnlist COMMA columnname carglist */ yytestcase(yyruleno==337);
/* (338) columnlist ::= columnname carglist */ yytestcase(yyruleno==338);
/* (339) nm ::= ID|INDEXED */ yytestcase(yyruleno==339);
/* (340) nm ::= STRING */ yytestcase(yyruleno==340);
/* (341) nm ::= JOIN_KW */ yytestcase(yyruleno==341);
/* (342) typetoken ::= typename */ yytestcase(yyruleno==342);
/* (343) typename ::= ID|STRING */ yytestcase(yyruleno==343);
/* (344) signed ::= plus_num (OPTIMIZED OUT) */ assert(yyruleno!=344);
/* (345) signed ::= minus_num (OPTIMIZED OUT) */ assert(yyruleno!=345);
/* (346) carglist ::= carglist ccons */ yytestcase(yyruleno==346);
/* (347) carglist ::= */ yytestcase(yyruleno==347);
/* (348) ccons ::= NULL onconf */ yytestcase(yyruleno==348);
/* (349) ccons ::= GENERATED ALWAYS AS generated */ yytestcase(yyruleno==349);
/* (350) ccons ::= AS generated */ yytestcase(yyruleno==350);
/* (351) conslist_opt ::= COMMA conslist */ yytestcase(yyruleno==351);
/* (352) conslist ::= conslist tconscomma tcons */ yytestcase(yyruleno==352);
/* (353) conslist ::= tcons (OPTIMIZED OUT) */ assert(yyruleno!=353);
/* (354) tconscomma ::= */ yytestcase(yyruleno==354);
/* (355) defer_subclause_opt ::= defer_subclause (OPTIMIZED OUT) */ assert(yyruleno!=355);
/* (356) resolvetype ::= raisetype (OPTIMIZED OUT) */ assert(yyruleno!=356);
/* (357) selectnowith ::= oneselect (OPTIMIZED OUT) */ assert(yyruleno!=357);
/* (358) oneselect ::= values */ yytestcase(yyruleno==358);
/* (359) sclp ::= selcollist COMMA */ yytestcase(yyruleno==359);
/* (360) as ::= ID|STRING */ yytestcase(yyruleno==360);
/* (361) expr ::= term (OPTIMIZED OUT) */ assert(yyruleno!=361);
/* (362) likeop ::= LIKE_KW|MATCH */ yytestcase(yyruleno==362);
/* (363) exprlist ::= nexprlist */ yytestcase(yyruleno==363);
/* (364) nmnum ::= plus_num (OPTIMIZED OUT) */ assert(yyruleno!=364);
/* (365) nmnum ::= nm (OPTIMIZED OUT) */ assert(yyruleno!=365);
/* (366) nmnum ::= ON */ yytestcase(yyruleno==366);
/* (367) nmnum ::= DELETE */ yytestcase(yyruleno==367);
/* (368) nmnum ::= DEFAULT */ yytestcase(yyruleno==368);
/* (369) plus_num ::= INTEGER|FLOAT */ yytestcase(yyruleno==369);
/* (370) foreach_clause ::= */ yytestcase(yyruleno==370);
/* (371) foreach_clause ::= FOR EACH ROW */ yytestcase(yyruleno==371);
/* (372) trnm ::= nm */ yytestcase(yyruleno==372);
/* (373) tridxby ::= */ yytestcase(yyruleno==373);
/* (374) database_kw_opt ::= DATABASE */ yytestcase(yyruleno==374);
/* (375) database_kw_opt ::= */ yytestcase(yyruleno==375);
/* (376) kwcolumn_opt ::= */ yytestcase(yyruleno==376);
/* (377) kwcolumn_opt ::= COLUMNKW */ yytestcase(yyruleno==377);
/* (378) vtabarglist ::= vtabarg */ yytestcase(yyruleno==378);
/* (379) vtabarglist ::= vtabarglist COMMA vtabarg */ yytestcase(yyruleno==379);
/* (380) vtabarg ::= vtabarg vtabargtoken */ yytestcase(yyruleno==380);
/* (381) anylist ::= */ yytestcase(yyruleno==381);
/* (382) anylist ::= anylist LP anylist RP */ yytestcase(yyruleno==382);
/* (383) anylist ::= anylist ANY */ yytestcase(yyruleno==383);
/* (384) with ::= */ yytestcase(yyruleno==384);
break;
/********** End reduce actions ************************************************/
};
assert( yyruleno<sizeof(yyRuleInfoLhs)/sizeof(yyRuleInfoLhs[0]) );
yygoto = yyRuleInfoLhs[yyruleno];
yysize = yyRuleInfoNRhs[yyruleno];
yyact = yy_find_reduce_action(yymsp[yysize].stateno,(YYCODETYPE)yygoto);
/* There are no SHIFTREDUCE actions on nonterminals because the table
** generator has simplified them to pure REDUCE actions. */
assert( !(yyact>YY_MAX_SHIFT && yyact<=YY_MAX_SHIFTREDUCE) );
/* It is not possible for a REDUCE to be followed by an error */
assert( yyact!=YY_ERROR_ACTION );
yymsp += yysize+1;
yypParser->yytos = yymsp;
yymsp->stateno = (YYACTIONTYPE)yyact;
yymsp->major = (YYCODETYPE)yygoto;
yyTraceShift(yypParser, yyact, "... then shift");
return yyact;
}