static YYACTIONTYPE yy_reduce()

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;
}