modernc.org/cc@v1.0.1/v2/testdata/_sqlite/src/parse.y (about)

     1  /*
     2  ** 2001 September 15
     3  **
     4  ** The author disclaims copyright to this source code.  In place of
     5  ** a legal notice, here is a blessing:
     6  **
     7  **    May you do good and not evil.
     8  **    May you find forgiveness for yourself and forgive others.
     9  **    May you share freely, never taking more than you give.
    10  **
    11  *************************************************************************
    12  ** This file contains SQLite's grammar for SQL.  Process this file
    13  ** using the lemon parser generator to generate C code that runs
    14  ** the parser.  Lemon will also generate a header file containing
    15  ** numeric codes for all of the tokens.
    16  */
    17  
    18  // All token codes are small integers with #defines that begin with "TK_"
    19  %token_prefix TK_
    20  
    21  // The type of the data attached to each token is Token.  This is also the
    22  // default type for non-terminals.
    23  //
    24  %token_type {Token}
    25  %default_type {Token}
    26  
    27  // The generated parser function takes a 4th argument as follows:
    28  %extra_argument {Parse *pParse}
    29  
    30  // This code runs whenever there is a syntax error
    31  //
    32  %syntax_error {
    33    UNUSED_PARAMETER(yymajor);  /* Silence some compiler warnings */
    34    assert( TOKEN.z[0] );  /* The tokenizer always gives us a token */
    35    sqlite3ErrorMsg(pParse, "near \"%T\": syntax error", &TOKEN);
    36  }
    37  %stack_overflow {
    38    sqlite3ErrorMsg(pParse, "parser stack overflow");
    39  }
    40  
    41  // The name of the generated procedure that implements the parser
    42  // is as follows:
    43  %name sqlite3Parser
    44  
    45  // The following text is included near the beginning of the C source
    46  // code file that implements the parser.
    47  //
    48  %include {
    49  #include "sqliteInt.h"
    50  
    51  /*
    52  ** Disable all error recovery processing in the parser push-down
    53  ** automaton.
    54  */
    55  #define YYNOERRORRECOVERY 1
    56  
    57  /*
    58  ** Make yytestcase() the same as testcase()
    59  */
    60  #define yytestcase(X) testcase(X)
    61  
    62  /*
    63  ** Indicate that sqlite3ParserFree() will never be called with a null
    64  ** pointer.
    65  */
    66  #define YYPARSEFREENEVERNULL 1
    67  
    68  /*
    69  ** In the amalgamation, the parse.c file generated by lemon and the
    70  ** tokenize.c file are concatenated.  In that case, sqlite3RunParser()
    71  ** has access to the the size of the yyParser object and so the parser
    72  ** engine can be allocated from stack.  In that case, only the
    73  ** sqlite3ParserInit() and sqlite3ParserFinalize() routines are invoked
    74  ** and the sqlite3ParserAlloc() and sqlite3ParserFree() routines can be
    75  ** omitted.
    76  */
    77  #ifdef SQLITE_AMALGAMATION
    78  # define sqlite3Parser_ENGINEALWAYSONSTACK 1
    79  #endif
    80  
    81  /*
    82  ** Alternative datatype for the argument to the malloc() routine passed
    83  ** into sqlite3ParserAlloc().  The default is size_t.
    84  */
    85  #define YYMALLOCARGTYPE  u64
    86  
    87  /*
    88  ** An instance of this structure holds information about the
    89  ** LIMIT clause of a SELECT statement.
    90  */
    91  struct LimitVal {
    92    Expr *pLimit;    /* The LIMIT expression.  NULL if there is no limit */
    93    Expr *pOffset;   /* The OFFSET expression.  NULL if there is none */
    94  };
    95  
    96  /*
    97  ** An instance of the following structure describes the event of a
    98  ** TRIGGER.  "a" is the event type, one of TK_UPDATE, TK_INSERT,
    99  ** TK_DELETE, or TK_INSTEAD.  If the event is of the form
   100  **
   101  **      UPDATE ON (a,b,c)
   102  **
   103  ** Then the "b" IdList records the list "a,b,c".
   104  */
   105  struct TrigEvent { int a; IdList * b; };
   106  
   107  /*
   108  ** Disable lookaside memory allocation for objects that might be
   109  ** shared across database connections.
   110  */
   111  static void disableLookaside(Parse *pParse){
   112    pParse->disableLookaside++;
   113    pParse->db->lookaside.bDisable++;
   114  }
   115  
   116  } // end %include
   117  
   118  // Input is a single SQL command
   119  input ::= cmdlist.
   120  cmdlist ::= cmdlist ecmd.
   121  cmdlist ::= ecmd.
   122  ecmd ::= SEMI.
   123  ecmd ::= explain cmdx SEMI.
   124  explain ::= .
   125  %ifndef SQLITE_OMIT_EXPLAIN
   126  explain ::= EXPLAIN.              { pParse->explain = 1; }
   127  explain ::= EXPLAIN QUERY PLAN.   { pParse->explain = 2; }
   128  %endif  SQLITE_OMIT_EXPLAIN
   129  cmdx ::= cmd.           { sqlite3FinishCoding(pParse); }
   130  
   131  ///////////////////// Begin and end transactions. ////////////////////////////
   132  //
   133  
   134  cmd ::= BEGIN transtype(Y) trans_opt.  {sqlite3BeginTransaction(pParse, Y);}
   135  trans_opt ::= .
   136  trans_opt ::= TRANSACTION.
   137  trans_opt ::= TRANSACTION nm.
   138  %type transtype {int}
   139  transtype(A) ::= .             {A = TK_DEFERRED;}
   140  transtype(A) ::= DEFERRED(X).  {A = @X; /*A-overwrites-X*/}
   141  transtype(A) ::= IMMEDIATE(X). {A = @X; /*A-overwrites-X*/}
   142  transtype(A) ::= EXCLUSIVE(X). {A = @X; /*A-overwrites-X*/}
   143  cmd ::= COMMIT|END(X) trans_opt.   {sqlite3EndTransaction(pParse,@X);}
   144  cmd ::= ROLLBACK(X) trans_opt.     {sqlite3EndTransaction(pParse,@X);}
   145  
   146  savepoint_opt ::= SAVEPOINT.
   147  savepoint_opt ::= .
   148  cmd ::= SAVEPOINT nm(X). {
   149    sqlite3Savepoint(pParse, SAVEPOINT_BEGIN, &X);
   150  }
   151  cmd ::= RELEASE savepoint_opt nm(X). {
   152    sqlite3Savepoint(pParse, SAVEPOINT_RELEASE, &X);
   153  }
   154  cmd ::= ROLLBACK trans_opt TO savepoint_opt nm(X). {
   155    sqlite3Savepoint(pParse, SAVEPOINT_ROLLBACK, &X);
   156  }
   157  
   158  ///////////////////// The CREATE TABLE statement ////////////////////////////
   159  //
   160  cmd ::= create_table create_table_args.
   161  create_table ::= createkw temp(T) TABLE ifnotexists(E) nm(Y) dbnm(Z). {
   162     sqlite3StartTable(pParse,&Y,&Z,T,0,0,E);
   163  }
   164  createkw(A) ::= CREATE(A).  {disableLookaside(pParse);}
   165  
   166  %type ifnotexists {int}
   167  ifnotexists(A) ::= .              {A = 0;}
   168  ifnotexists(A) ::= IF NOT EXISTS. {A = 1;}
   169  %type temp {int}
   170  %ifndef SQLITE_OMIT_TEMPDB
   171  temp(A) ::= TEMP.  {A = 1;}
   172  %endif  SQLITE_OMIT_TEMPDB
   173  temp(A) ::= .      {A = 0;}
   174  create_table_args ::= LP columnlist conslist_opt(X) RP(E) table_options(F). {
   175    sqlite3EndTable(pParse,&X,&E,F,0);
   176  }
   177  create_table_args ::= AS select(S). {
   178    sqlite3EndTable(pParse,0,0,0,S);
   179    sqlite3SelectDelete(pParse->db, S);
   180  }
   181  %type table_options {int}
   182  table_options(A) ::= .    {A = 0;}
   183  table_options(A) ::= WITHOUT nm(X). {
   184    if( X.n==5 && sqlite3_strnicmp(X.z,"rowid",5)==0 ){
   185      A = TF_WithoutRowid | TF_NoVisibleRowid;
   186    }else{
   187      A = 0;
   188      sqlite3ErrorMsg(pParse, "unknown table option: %.*s", X.n, X.z);
   189    }
   190  }
   191  columnlist ::= columnlist COMMA columnname carglist.
   192  columnlist ::= columnname carglist.
   193  columnname(A) ::= nm(A) typetoken(Y). {sqlite3AddColumn(pParse,&A,&Y);}
   194  
   195  // Declare some tokens early in order to influence their values, to 
   196  // improve performance and reduce the executable size.  The goal here is
   197  // to get the "jump" operations in ISNULL through ESCAPE to have numeric
   198  // values that are early enough so that all jump operations are clustered
   199  // at the beginning, but also so that the comparison tokens NE through GE
   200  // are as large as possible so that they are near to FUNCTION, which is a
   201  // token synthesized by addopcodes.tcl.
   202  //
   203  %token ABORT ACTION AFTER ANALYZE ASC ATTACH BEFORE BEGIN BY CASCADE CAST.
   204  %token CONFLICT DATABASE DEFERRED DESC DETACH EACH END EXCLUSIVE EXPLAIN FAIL.
   205  %token OR AND NOT IS MATCH LIKE_KW BETWEEN IN ISNULL NOTNULL NE EQ.
   206  %token GT LE LT GE ESCAPE.
   207  
   208  // The following directive causes tokens ABORT, AFTER, ASC, etc. to
   209  // fallback to ID if they will not parse as their original value.
   210  // This obviates the need for the "id" nonterminal.
   211  //
   212  %fallback ID
   213    ABORT ACTION AFTER ANALYZE ASC ATTACH BEFORE BEGIN BY CASCADE CAST COLUMNKW
   214    CONFLICT DATABASE DEFERRED DESC DETACH EACH END EXCLUSIVE EXPLAIN FAIL FOR
   215    IGNORE IMMEDIATE INITIALLY INSTEAD LIKE_KW MATCH NO PLAN
   216    QUERY KEY OF OFFSET PRAGMA RAISE RECURSIVE RELEASE REPLACE RESTRICT ROW
   217    ROLLBACK SAVEPOINT TEMP TRIGGER VACUUM VIEW VIRTUAL WITH WITHOUT
   218  %ifdef SQLITE_OMIT_COMPOUND_SELECT
   219    EXCEPT INTERSECT UNION
   220  %endif SQLITE_OMIT_COMPOUND_SELECT
   221    REINDEX RENAME CTIME_KW IF
   222    .
   223  %wildcard ANY.
   224  
   225  // Define operator precedence early so that this is the first occurrence
   226  // of the operator tokens in the grammer.  Keeping the operators together
   227  // causes them to be assigned integer values that are close together,
   228  // which keeps parser tables smaller.
   229  //
   230  // The token values assigned to these symbols is determined by the order
   231  // in which lemon first sees them.  It must be the case that ISNULL/NOTNULL,
   232  // NE/EQ, GT/LE, and GE/LT are separated by only a single value.  See
   233  // the sqlite3ExprIfFalse() routine for additional information on this
   234  // constraint.
   235  //
   236  %left OR.
   237  %left AND.
   238  %right NOT.
   239  %left IS MATCH LIKE_KW BETWEEN IN ISNULL NOTNULL NE EQ.
   240  %left GT LE LT GE.
   241  %right ESCAPE.
   242  %left BITAND BITOR LSHIFT RSHIFT.
   243  %left PLUS MINUS.
   244  %left STAR SLASH REM.
   245  %left CONCAT.
   246  %left COLLATE.
   247  %right BITNOT.
   248  
   249  // An IDENTIFIER can be a generic identifier, or one of several
   250  // keywords.  Any non-standard keyword can also be an identifier.
   251  //
   252  %token_class id  ID|INDEXED.
   253  
   254  
   255  // And "ids" is an identifer-or-string.
   256  //
   257  %token_class ids  ID|STRING.
   258  
   259  // The name of a column or table can be any of the following:
   260  //
   261  %type nm {Token}
   262  nm(A) ::= id(A).
   263  nm(A) ::= STRING(A).
   264  nm(A) ::= JOIN_KW(A).
   265  
   266  // A typetoken is really zero or more tokens that form a type name such
   267  // as can be found after the column name in a CREATE TABLE statement.
   268  // Multiple tokens are concatenated to form the value of the typetoken.
   269  //
   270  %type typetoken {Token}
   271  typetoken(A) ::= .   {A.n = 0; A.z = 0;}
   272  typetoken(A) ::= typename(A).
   273  typetoken(A) ::= typename(A) LP signed RP(Y). {
   274    A.n = (int)(&Y.z[Y.n] - A.z);
   275  }
   276  typetoken(A) ::= typename(A) LP signed COMMA signed RP(Y). {
   277    A.n = (int)(&Y.z[Y.n] - A.z);
   278  }
   279  %type typename {Token}
   280  typename(A) ::= ids(A).
   281  typename(A) ::= typename(A) ids(Y). {A.n=Y.n+(int)(Y.z-A.z);}
   282  signed ::= plus_num.
   283  signed ::= minus_num.
   284  
   285  // "carglist" is a list of additional constraints that come after the
   286  // column name and column type in a CREATE TABLE statement.
   287  //
   288  carglist ::= carglist ccons.
   289  carglist ::= .
   290  ccons ::= CONSTRAINT nm(X).           {pParse->constraintName = X;}
   291  ccons ::= DEFAULT term(X).            {sqlite3AddDefaultValue(pParse,&X);}
   292  ccons ::= DEFAULT LP expr(X) RP.      {sqlite3AddDefaultValue(pParse,&X);}
   293  ccons ::= DEFAULT PLUS term(X).       {sqlite3AddDefaultValue(pParse,&X);}
   294  ccons ::= DEFAULT MINUS(A) term(X).      {
   295    ExprSpan v;
   296    v.pExpr = sqlite3PExpr(pParse, TK_UMINUS, X.pExpr, 0);
   297    v.zStart = A.z;
   298    v.zEnd = X.zEnd;
   299    sqlite3AddDefaultValue(pParse,&v);
   300  }
   301  ccons ::= DEFAULT id(X).              {
   302    ExprSpan v;
   303    spanExpr(&v, pParse, TK_STRING, X);
   304    sqlite3AddDefaultValue(pParse,&v);
   305  }
   306  
   307  // In addition to the type name, we also care about the primary key and
   308  // UNIQUE constraints.
   309  //
   310  ccons ::= NULL onconf.
   311  ccons ::= NOT NULL onconf(R).    {sqlite3AddNotNull(pParse, R);}
   312  ccons ::= PRIMARY KEY sortorder(Z) onconf(R) autoinc(I).
   313                                   {sqlite3AddPrimaryKey(pParse,0,R,I,Z);}
   314  ccons ::= UNIQUE onconf(R).      {sqlite3CreateIndex(pParse,0,0,0,0,R,0,0,0,0,
   315                                     SQLITE_IDXTYPE_UNIQUE);}
   316  ccons ::= CHECK LP expr(X) RP.   {sqlite3AddCheckConstraint(pParse,X.pExpr);}
   317  ccons ::= REFERENCES nm(T) eidlist_opt(TA) refargs(R).
   318                                   {sqlite3CreateForeignKey(pParse,0,&T,TA,R);}
   319  ccons ::= defer_subclause(D).    {sqlite3DeferForeignKey(pParse,D);}
   320  ccons ::= COLLATE ids(C).        {sqlite3AddCollateType(pParse, &C);}
   321  
   322  // The optional AUTOINCREMENT keyword
   323  %type autoinc {int}
   324  autoinc(X) ::= .          {X = 0;}
   325  autoinc(X) ::= AUTOINCR.  {X = 1;}
   326  
   327  // The next group of rules parses the arguments to a REFERENCES clause
   328  // that determine if the referential integrity checking is deferred or
   329  // or immediate and which determine what action to take if a ref-integ
   330  // check fails.
   331  //
   332  %type refargs {int}
   333  refargs(A) ::= .                  { A = OE_None*0x0101; /* EV: R-19803-45884 */}
   334  refargs(A) ::= refargs(A) refarg(Y). { A = (A & ~Y.mask) | Y.value; }
   335  %type refarg {struct {int value; int mask;}}
   336  refarg(A) ::= MATCH nm.              { A.value = 0;     A.mask = 0x000000; }
   337  refarg(A) ::= ON INSERT refact.      { A.value = 0;     A.mask = 0x000000; }
   338  refarg(A) ::= ON DELETE refact(X).   { A.value = X;     A.mask = 0x0000ff; }
   339  refarg(A) ::= ON UPDATE refact(X).   { A.value = X<<8;  A.mask = 0x00ff00; }
   340  %type refact {int}
   341  refact(A) ::= SET NULL.              { A = OE_SetNull;  /* EV: R-33326-45252 */}
   342  refact(A) ::= SET DEFAULT.           { A = OE_SetDflt;  /* EV: R-33326-45252 */}
   343  refact(A) ::= CASCADE.               { A = OE_Cascade;  /* EV: R-33326-45252 */}
   344  refact(A) ::= RESTRICT.              { A = OE_Restrict; /* EV: R-33326-45252 */}
   345  refact(A) ::= NO ACTION.             { A = OE_None;     /* EV: R-33326-45252 */}
   346  %type defer_subclause {int}
   347  defer_subclause(A) ::= NOT DEFERRABLE init_deferred_pred_opt.     {A = 0;}
   348  defer_subclause(A) ::= DEFERRABLE init_deferred_pred_opt(X).      {A = X;}
   349  %type init_deferred_pred_opt {int}
   350  init_deferred_pred_opt(A) ::= .                       {A = 0;}
   351  init_deferred_pred_opt(A) ::= INITIALLY DEFERRED.     {A = 1;}
   352  init_deferred_pred_opt(A) ::= INITIALLY IMMEDIATE.    {A = 0;}
   353  
   354  conslist_opt(A) ::= .                         {A.n = 0; A.z = 0;}
   355  conslist_opt(A) ::= COMMA(A) conslist.
   356  conslist ::= conslist tconscomma tcons.
   357  conslist ::= tcons.
   358  tconscomma ::= COMMA.            {pParse->constraintName.n = 0;}
   359  tconscomma ::= .
   360  tcons ::= CONSTRAINT nm(X).      {pParse->constraintName = X;}
   361  tcons ::= PRIMARY KEY LP sortlist(X) autoinc(I) RP onconf(R).
   362                                   {sqlite3AddPrimaryKey(pParse,X,R,I,0);}
   363  tcons ::= UNIQUE LP sortlist(X) RP onconf(R).
   364                                   {sqlite3CreateIndex(pParse,0,0,0,X,R,0,0,0,0,
   365                                         SQLITE_IDXTYPE_UNIQUE);}
   366  tcons ::= CHECK LP expr(E) RP onconf.
   367                                   {sqlite3AddCheckConstraint(pParse,E.pExpr);}
   368  tcons ::= FOREIGN KEY LP eidlist(FA) RP
   369            REFERENCES nm(T) eidlist_opt(TA) refargs(R) defer_subclause_opt(D). {
   370      sqlite3CreateForeignKey(pParse, FA, &T, TA, R);
   371      sqlite3DeferForeignKey(pParse, D);
   372  }
   373  %type defer_subclause_opt {int}
   374  defer_subclause_opt(A) ::= .                    {A = 0;}
   375  defer_subclause_opt(A) ::= defer_subclause(A).
   376  
   377  // The following is a non-standard extension that allows us to declare the
   378  // default behavior when there is a constraint conflict.
   379  //
   380  %type onconf {int}
   381  %type orconf {int}
   382  %type resolvetype {int}
   383  onconf(A) ::= .                              {A = OE_Default;}
   384  onconf(A) ::= ON CONFLICT resolvetype(X).    {A = X;}
   385  orconf(A) ::= .                              {A = OE_Default;}
   386  orconf(A) ::= OR resolvetype(X).             {A = X;}
   387  resolvetype(A) ::= raisetype(A).
   388  resolvetype(A) ::= IGNORE.                   {A = OE_Ignore;}
   389  resolvetype(A) ::= REPLACE.                  {A = OE_Replace;}
   390  
   391  ////////////////////////// The DROP TABLE /////////////////////////////////////
   392  //
   393  cmd ::= DROP TABLE ifexists(E) fullname(X). {
   394    sqlite3DropTable(pParse, X, 0, E);
   395  }
   396  %type ifexists {int}
   397  ifexists(A) ::= IF EXISTS.   {A = 1;}
   398  ifexists(A) ::= .            {A = 0;}
   399  
   400  ///////////////////// The CREATE VIEW statement /////////////////////////////
   401  //
   402  %ifndef SQLITE_OMIT_VIEW
   403  cmd ::= createkw(X) temp(T) VIEW ifnotexists(E) nm(Y) dbnm(Z) eidlist_opt(C)
   404            AS select(S). {
   405    sqlite3CreateView(pParse, &X, &Y, &Z, C, S, T, E);
   406  }
   407  cmd ::= DROP VIEW ifexists(E) fullname(X). {
   408    sqlite3DropTable(pParse, X, 1, E);
   409  }
   410  %endif  SQLITE_OMIT_VIEW
   411  
   412  //////////////////////// The SELECT statement /////////////////////////////////
   413  //
   414  cmd ::= select(X).  {
   415    SelectDest dest = {SRT_Output, 0, 0, 0, 0, 0};
   416    sqlite3Select(pParse, X, &dest);
   417    sqlite3SelectDelete(pParse->db, X);
   418  }
   419  
   420  %type select {Select*}
   421  %destructor select {sqlite3SelectDelete(pParse->db, $$);}
   422  %type selectnowith {Select*}
   423  %destructor selectnowith {sqlite3SelectDelete(pParse->db, $$);}
   424  %type oneselect {Select*}
   425  %destructor oneselect {sqlite3SelectDelete(pParse->db, $$);}
   426  
   427  %include {
   428    /*
   429    ** For a compound SELECT statement, make sure p->pPrior->pNext==p for
   430    ** all elements in the list.  And make sure list length does not exceed
   431    ** SQLITE_LIMIT_COMPOUND_SELECT.
   432    */
   433    static void parserDoubleLinkSelect(Parse *pParse, Select *p){
   434      if( p->pPrior ){
   435        Select *pNext = 0, *pLoop;
   436        int mxSelect, cnt = 0;
   437        for(pLoop=p; pLoop; pNext=pLoop, pLoop=pLoop->pPrior, cnt++){
   438          pLoop->pNext = pNext;
   439          pLoop->selFlags |= SF_Compound;
   440        }
   441        if( (p->selFlags & SF_MultiValue)==0 && 
   442          (mxSelect = pParse->db->aLimit[SQLITE_LIMIT_COMPOUND_SELECT])>0 &&
   443          cnt>mxSelect
   444        ){
   445          sqlite3ErrorMsg(pParse, "too many terms in compound SELECT");
   446        }
   447      }
   448    }
   449  }
   450  
   451  select(A) ::= with(W) selectnowith(X). {
   452    Select *p = X;
   453    if( p ){
   454      p->pWith = W;
   455      parserDoubleLinkSelect(pParse, p);
   456    }else{
   457      sqlite3WithDelete(pParse->db, W);
   458    }
   459    A = p; /*A-overwrites-W*/
   460  }
   461  
   462  selectnowith(A) ::= oneselect(A).
   463  %ifndef SQLITE_OMIT_COMPOUND_SELECT
   464  selectnowith(A) ::= selectnowith(A) multiselect_op(Y) oneselect(Z).  {
   465    Select *pRhs = Z;
   466    Select *pLhs = A;
   467    if( pRhs && pRhs->pPrior ){
   468      SrcList *pFrom;
   469      Token x;
   470      x.n = 0;
   471      parserDoubleLinkSelect(pParse, pRhs);
   472      pFrom = sqlite3SrcListAppendFromTerm(pParse,0,0,0,&x,pRhs,0,0);
   473      pRhs = sqlite3SelectNew(pParse,0,pFrom,0,0,0,0,0,0,0);
   474    }
   475    if( pRhs ){
   476      pRhs->op = (u8)Y;
   477      pRhs->pPrior = pLhs;
   478      if( ALWAYS(pLhs) ) pLhs->selFlags &= ~SF_MultiValue;
   479      pRhs->selFlags &= ~SF_MultiValue;
   480      if( Y!=TK_ALL ) pParse->hasCompound = 1;
   481    }else{
   482      sqlite3SelectDelete(pParse->db, pLhs);
   483    }
   484    A = pRhs;
   485  }
   486  %type multiselect_op {int}
   487  multiselect_op(A) ::= UNION(OP).             {A = @OP; /*A-overwrites-OP*/}
   488  multiselect_op(A) ::= UNION ALL.             {A = TK_ALL;}
   489  multiselect_op(A) ::= EXCEPT|INTERSECT(OP).  {A = @OP; /*A-overwrites-OP*/}
   490  %endif SQLITE_OMIT_COMPOUND_SELECT
   491  oneselect(A) ::= SELECT(S) distinct(D) selcollist(W) from(X) where_opt(Y)
   492                   groupby_opt(P) having_opt(Q) orderby_opt(Z) limit_opt(L). {
   493  #if SELECTTRACE_ENABLED
   494    Token s = S; /*A-overwrites-S*/
   495  #endif
   496    A = sqlite3SelectNew(pParse,W,X,Y,P,Q,Z,D,L.pLimit,L.pOffset);
   497  #if SELECTTRACE_ENABLED
   498    /* Populate the Select.zSelName[] string that is used to help with
   499    ** query planner debugging, to differentiate between multiple Select
   500    ** objects in a complex query.
   501    **
   502    ** If the SELECT keyword is immediately followed by a C-style comment
   503    ** then extract the first few alphanumeric characters from within that
   504    ** comment to be the zSelName value.  Otherwise, the label is #N where
   505    ** is an integer that is incremented with each SELECT statement seen.
   506    */
   507    if( A!=0 ){
   508      const char *z = s.z+6;
   509      int i;
   510      sqlite3_snprintf(sizeof(A->zSelName), A->zSelName, "#%d",
   511                       ++pParse->nSelect);
   512      while( z[0]==' ' ) z++;
   513      if( z[0]=='/' && z[1]=='*' ){
   514        z += 2;
   515        while( z[0]==' ' ) z++;
   516        for(i=0; sqlite3Isalnum(z[i]); i++){}
   517        sqlite3_snprintf(sizeof(A->zSelName), A->zSelName, "%.*s", i, z);
   518      }
   519    }
   520  #endif /* SELECTRACE_ENABLED */
   521  }
   522  oneselect(A) ::= values(A).
   523  
   524  %type values {Select*}
   525  %destructor values {sqlite3SelectDelete(pParse->db, $$);}
   526  values(A) ::= VALUES LP nexprlist(X) RP. {
   527    A = sqlite3SelectNew(pParse,X,0,0,0,0,0,SF_Values,0,0);
   528  }
   529  values(A) ::= values(A) COMMA LP exprlist(Y) RP. {
   530    Select *pRight, *pLeft = A;
   531    pRight = sqlite3SelectNew(pParse,Y,0,0,0,0,0,SF_Values|SF_MultiValue,0,0);
   532    if( ALWAYS(pLeft) ) pLeft->selFlags &= ~SF_MultiValue;
   533    if( pRight ){
   534      pRight->op = TK_ALL;
   535      pRight->pPrior = pLeft;
   536      A = pRight;
   537    }else{
   538      A = pLeft;
   539    }
   540  }
   541  
   542  // The "distinct" nonterminal is true (1) if the DISTINCT keyword is
   543  // present and false (0) if it is not.
   544  //
   545  %type distinct {int}
   546  distinct(A) ::= DISTINCT.   {A = SF_Distinct;}
   547  distinct(A) ::= ALL.        {A = SF_All;}
   548  distinct(A) ::= .           {A = 0;}
   549  
   550  // selcollist is a list of expressions that are to become the return
   551  // values of the SELECT statement.  The "*" in statements like
   552  // "SELECT * FROM ..." is encoded as a special expression with an
   553  // opcode of TK_ASTERISK.
   554  //
   555  %type selcollist {ExprList*}
   556  %destructor selcollist {sqlite3ExprListDelete(pParse->db, $$);}
   557  %type sclp {ExprList*}
   558  %destructor sclp {sqlite3ExprListDelete(pParse->db, $$);}
   559  sclp(A) ::= selcollist(A) COMMA.
   560  sclp(A) ::= .                                {A = 0;}
   561  selcollist(A) ::= sclp(A) expr(X) as(Y).     {
   562     A = sqlite3ExprListAppend(pParse, A, X.pExpr);
   563     if( Y.n>0 ) sqlite3ExprListSetName(pParse, A, &Y, 1);
   564     sqlite3ExprListSetSpan(pParse,A,&X);
   565  }
   566  selcollist(A) ::= sclp(A) STAR. {
   567    Expr *p = sqlite3Expr(pParse->db, TK_ASTERISK, 0);
   568    A = sqlite3ExprListAppend(pParse, A, p);
   569  }
   570  selcollist(A) ::= sclp(A) nm(X) DOT STAR. {
   571    Expr *pRight = sqlite3PExpr(pParse, TK_ASTERISK, 0, 0);
   572    Expr *pLeft = sqlite3ExprAlloc(pParse->db, TK_ID, &X, 1);
   573    Expr *pDot = sqlite3PExpr(pParse, TK_DOT, pLeft, pRight);
   574    A = sqlite3ExprListAppend(pParse,A, pDot);
   575  }
   576  
   577  // An option "AS <id>" phrase that can follow one of the expressions that
   578  // define the result set, or one of the tables in the FROM clause.
   579  //
   580  %type as {Token}
   581  as(X) ::= AS nm(Y).    {X = Y;}
   582  as(X) ::= ids(X).
   583  as(X) ::= .            {X.n = 0; X.z = 0;}
   584  
   585  
   586  %type seltablist {SrcList*}
   587  %destructor seltablist {sqlite3SrcListDelete(pParse->db, $$);}
   588  %type stl_prefix {SrcList*}
   589  %destructor stl_prefix {sqlite3SrcListDelete(pParse->db, $$);}
   590  %type from {SrcList*}
   591  %destructor from {sqlite3SrcListDelete(pParse->db, $$);}
   592  
   593  // A complete FROM clause.
   594  //
   595  from(A) ::= .                {A = sqlite3DbMallocZero(pParse->db, sizeof(*A));}
   596  from(A) ::= FROM seltablist(X). {
   597    A = X;
   598    sqlite3SrcListShiftJoinType(A);
   599  }
   600  
   601  // "seltablist" is a "Select Table List" - the content of the FROM clause
   602  // in a SELECT statement.  "stl_prefix" is a prefix of this list.
   603  //
   604  stl_prefix(A) ::= seltablist(A) joinop(Y).    {
   605     if( ALWAYS(A && A->nSrc>0) ) A->a[A->nSrc-1].fg.jointype = (u8)Y;
   606  }
   607  stl_prefix(A) ::= .                           {A = 0;}
   608  seltablist(A) ::= stl_prefix(A) nm(Y) dbnm(D) as(Z) indexed_opt(I)
   609                    on_opt(N) using_opt(U). {
   610    A = sqlite3SrcListAppendFromTerm(pParse,A,&Y,&D,&Z,0,N,U);
   611    sqlite3SrcListIndexedBy(pParse, A, &I);
   612  }
   613  seltablist(A) ::= stl_prefix(A) nm(Y) dbnm(D) LP exprlist(E) RP as(Z)
   614                    on_opt(N) using_opt(U). {
   615    A = sqlite3SrcListAppendFromTerm(pParse,A,&Y,&D,&Z,0,N,U);
   616    sqlite3SrcListFuncArgs(pParse, A, E);
   617  }
   618  %ifndef SQLITE_OMIT_SUBQUERY
   619    seltablist(A) ::= stl_prefix(A) LP select(S) RP
   620                      as(Z) on_opt(N) using_opt(U). {
   621      A = sqlite3SrcListAppendFromTerm(pParse,A,0,0,&Z,S,N,U);
   622    }
   623    seltablist(A) ::= stl_prefix(A) LP seltablist(F) RP
   624                      as(Z) on_opt(N) using_opt(U). {
   625      if( A==0 && Z.n==0 && N==0 && U==0 ){
   626        A = F;
   627      }else if( F->nSrc==1 ){
   628        A = sqlite3SrcListAppendFromTerm(pParse,A,0,0,&Z,0,N,U);
   629        if( A ){
   630          struct SrcList_item *pNew = &A->a[A->nSrc-1];
   631          struct SrcList_item *pOld = F->a;
   632          pNew->zName = pOld->zName;
   633          pNew->zDatabase = pOld->zDatabase;
   634          pNew->pSelect = pOld->pSelect;
   635          pOld->zName = pOld->zDatabase = 0;
   636          pOld->pSelect = 0;
   637        }
   638        sqlite3SrcListDelete(pParse->db, F);
   639      }else{
   640        Select *pSubquery;
   641        sqlite3SrcListShiftJoinType(F);
   642        pSubquery = sqlite3SelectNew(pParse,0,F,0,0,0,0,SF_NestedFrom,0,0);
   643        A = sqlite3SrcListAppendFromTerm(pParse,A,0,0,&Z,pSubquery,N,U);
   644      }
   645    }
   646  %endif  SQLITE_OMIT_SUBQUERY
   647  
   648  %type dbnm {Token}
   649  dbnm(A) ::= .          {A.z=0; A.n=0;}
   650  dbnm(A) ::= DOT nm(X). {A = X;}
   651  
   652  %type fullname {SrcList*}
   653  %destructor fullname {sqlite3SrcListDelete(pParse->db, $$);}
   654  fullname(A) ::= nm(X) dbnm(Y).  
   655     {A = sqlite3SrcListAppend(pParse->db,0,&X,&Y); /*A-overwrites-X*/}
   656  
   657  %type joinop {int}
   658  joinop(X) ::= COMMA|JOIN.              { X = JT_INNER; }
   659  joinop(X) ::= JOIN_KW(A) JOIN.
   660                    {X = sqlite3JoinType(pParse,&A,0,0);  /*X-overwrites-A*/}
   661  joinop(X) ::= JOIN_KW(A) nm(B) JOIN.
   662                    {X = sqlite3JoinType(pParse,&A,&B,0); /*X-overwrites-A*/}
   663  joinop(X) ::= JOIN_KW(A) nm(B) nm(C) JOIN.
   664                    {X = sqlite3JoinType(pParse,&A,&B,&C);/*X-overwrites-A*/}
   665  
   666  %type on_opt {Expr*}
   667  %destructor on_opt {sqlite3ExprDelete(pParse->db, $$);}
   668  on_opt(N) ::= ON expr(E).   {N = E.pExpr;}
   669  on_opt(N) ::= .             {N = 0;}
   670  
   671  // Note that this block abuses the Token type just a little. If there is
   672  // no "INDEXED BY" clause, the returned token is empty (z==0 && n==0). If
   673  // there is an INDEXED BY clause, then the token is populated as per normal,
   674  // with z pointing to the token data and n containing the number of bytes
   675  // in the token.
   676  //
   677  // If there is a "NOT INDEXED" clause, then (z==0 && n==1), which is 
   678  // normally illegal. The sqlite3SrcListIndexedBy() function 
   679  // recognizes and interprets this as a special case.
   680  //
   681  %type indexed_opt {Token}
   682  indexed_opt(A) ::= .                 {A.z=0; A.n=0;}
   683  indexed_opt(A) ::= INDEXED BY nm(X). {A = X;}
   684  indexed_opt(A) ::= NOT INDEXED.      {A.z=0; A.n=1;}
   685  
   686  %type using_opt {IdList*}
   687  %destructor using_opt {sqlite3IdListDelete(pParse->db, $$);}
   688  using_opt(U) ::= USING LP idlist(L) RP.  {U = L;}
   689  using_opt(U) ::= .                        {U = 0;}
   690  
   691  
   692  %type orderby_opt {ExprList*}
   693  %destructor orderby_opt {sqlite3ExprListDelete(pParse->db, $$);}
   694  
   695  // the sortlist non-terminal stores a list of expression where each
   696  // expression is optionally followed by ASC or DESC to indicate the
   697  // sort order.
   698  //
   699  %type sortlist {ExprList*}
   700  %destructor sortlist {sqlite3ExprListDelete(pParse->db, $$);}
   701  
   702  orderby_opt(A) ::= .                          {A = 0;}
   703  orderby_opt(A) ::= ORDER BY sortlist(X).      {A = X;}
   704  sortlist(A) ::= sortlist(A) COMMA expr(Y) sortorder(Z). {
   705    A = sqlite3ExprListAppend(pParse,A,Y.pExpr);
   706    sqlite3ExprListSetSortOrder(A,Z);
   707  }
   708  sortlist(A) ::= expr(Y) sortorder(Z). {
   709    A = sqlite3ExprListAppend(pParse,0,Y.pExpr); /*A-overwrites-Y*/
   710    sqlite3ExprListSetSortOrder(A,Z);
   711  }
   712  
   713  %type sortorder {int}
   714  
   715  sortorder(A) ::= ASC.           {A = SQLITE_SO_ASC;}
   716  sortorder(A) ::= DESC.          {A = SQLITE_SO_DESC;}
   717  sortorder(A) ::= .              {A = SQLITE_SO_UNDEFINED;}
   718  
   719  %type groupby_opt {ExprList*}
   720  %destructor groupby_opt {sqlite3ExprListDelete(pParse->db, $$);}
   721  groupby_opt(A) ::= .                      {A = 0;}
   722  groupby_opt(A) ::= GROUP BY nexprlist(X). {A = X;}
   723  
   724  %type having_opt {Expr*}
   725  %destructor having_opt {sqlite3ExprDelete(pParse->db, $$);}
   726  having_opt(A) ::= .                {A = 0;}
   727  having_opt(A) ::= HAVING expr(X).  {A = X.pExpr;}
   728  
   729  %type limit_opt {struct LimitVal}
   730  
   731  // The destructor for limit_opt will never fire in the current grammar.
   732  // The limit_opt non-terminal only occurs at the end of a single production
   733  // rule for SELECT statements.  As soon as the rule that create the 
   734  // limit_opt non-terminal reduces, the SELECT statement rule will also
   735  // reduce.  So there is never a limit_opt non-terminal on the stack 
   736  // except as a transient.  So there is never anything to destroy.
   737  //
   738  //%destructor limit_opt {
   739  //  sqlite3ExprDelete(pParse->db, $$.pLimit);
   740  //  sqlite3ExprDelete(pParse->db, $$.pOffset);
   741  //}
   742  limit_opt(A) ::= .                    {A.pLimit = 0; A.pOffset = 0;}
   743  limit_opt(A) ::= LIMIT expr(X).       {A.pLimit = X.pExpr; A.pOffset = 0;}
   744  limit_opt(A) ::= LIMIT expr(X) OFFSET expr(Y). 
   745                                        {A.pLimit = X.pExpr; A.pOffset = Y.pExpr;}
   746  limit_opt(A) ::= LIMIT expr(X) COMMA expr(Y). 
   747                                        {A.pOffset = X.pExpr; A.pLimit = Y.pExpr;}
   748  
   749  /////////////////////////// The DELETE statement /////////////////////////////
   750  //
   751  %ifdef SQLITE_ENABLE_UPDATE_DELETE_LIMIT
   752  cmd ::= with(C) DELETE FROM fullname(X) indexed_opt(I) where_opt(W) 
   753          orderby_opt(O) limit_opt(L). {
   754    sqlite3WithPush(pParse, C, 1);
   755    sqlite3SrcListIndexedBy(pParse, X, &I);
   756    W = sqlite3LimitWhere(pParse, X, W, O, L.pLimit, L.pOffset, "DELETE");
   757    sqlite3DeleteFrom(pParse,X,W);
   758  }
   759  %endif
   760  %ifndef SQLITE_ENABLE_UPDATE_DELETE_LIMIT
   761  cmd ::= with(C) DELETE FROM fullname(X) indexed_opt(I) where_opt(W). {
   762    sqlite3WithPush(pParse, C, 1);
   763    sqlite3SrcListIndexedBy(pParse, X, &I);
   764    sqlite3DeleteFrom(pParse,X,W);
   765  }
   766  %endif
   767  
   768  %type where_opt {Expr*}
   769  %destructor where_opt {sqlite3ExprDelete(pParse->db, $$);}
   770  
   771  where_opt(A) ::= .                    {A = 0;}
   772  where_opt(A) ::= WHERE expr(X).       {A = X.pExpr;}
   773  
   774  ////////////////////////// The UPDATE command ////////////////////////////////
   775  //
   776  %ifdef SQLITE_ENABLE_UPDATE_DELETE_LIMIT
   777  cmd ::= with(C) UPDATE orconf(R) fullname(X) indexed_opt(I) SET setlist(Y)
   778          where_opt(W) orderby_opt(O) limit_opt(L).  {
   779    sqlite3WithPush(pParse, C, 1);
   780    sqlite3SrcListIndexedBy(pParse, X, &I);
   781    sqlite3ExprListCheckLength(pParse,Y,"set list"); 
   782    W = sqlite3LimitWhere(pParse, X, W, O, L.pLimit, L.pOffset, "UPDATE");
   783    sqlite3Update(pParse,X,Y,W,R);
   784  }
   785  %endif
   786  %ifndef SQLITE_ENABLE_UPDATE_DELETE_LIMIT
   787  cmd ::= with(C) UPDATE orconf(R) fullname(X) indexed_opt(I) SET setlist(Y)
   788          where_opt(W).  {
   789    sqlite3WithPush(pParse, C, 1);
   790    sqlite3SrcListIndexedBy(pParse, X, &I);
   791    sqlite3ExprListCheckLength(pParse,Y,"set list"); 
   792    sqlite3Update(pParse,X,Y,W,R);
   793  }
   794  %endif
   795  
   796  %type setlist {ExprList*}
   797  %destructor setlist {sqlite3ExprListDelete(pParse->db, $$);}
   798  
   799  setlist(A) ::= setlist(A) COMMA nm(X) EQ expr(Y). {
   800    A = sqlite3ExprListAppend(pParse, A, Y.pExpr);
   801    sqlite3ExprListSetName(pParse, A, &X, 1);
   802  }
   803  setlist(A) ::= setlist(A) COMMA LP idlist(X) RP EQ expr(Y). {
   804    A = sqlite3ExprListAppendVector(pParse, A, X, Y.pExpr);
   805  }
   806  setlist(A) ::= nm(X) EQ expr(Y). {
   807    A = sqlite3ExprListAppend(pParse, 0, Y.pExpr);
   808    sqlite3ExprListSetName(pParse, A, &X, 1);
   809  }
   810  setlist(A) ::= LP idlist(X) RP EQ expr(Y). {
   811    A = sqlite3ExprListAppendVector(pParse, 0, X, Y.pExpr);
   812  }
   813  
   814  ////////////////////////// The INSERT command /////////////////////////////////
   815  //
   816  cmd ::= with(W) insert_cmd(R) INTO fullname(X) idlist_opt(F) select(S). {
   817    sqlite3WithPush(pParse, W, 1);
   818    sqlite3Insert(pParse, X, S, F, R);
   819  }
   820  cmd ::= with(W) insert_cmd(R) INTO fullname(X) idlist_opt(F) DEFAULT VALUES.
   821  {
   822    sqlite3WithPush(pParse, W, 1);
   823    sqlite3Insert(pParse, X, 0, F, R);
   824  }
   825  
   826  %type insert_cmd {int}
   827  insert_cmd(A) ::= INSERT orconf(R).   {A = R;}
   828  insert_cmd(A) ::= REPLACE.            {A = OE_Replace;}
   829  
   830  %type idlist_opt {IdList*}
   831  %destructor idlist_opt {sqlite3IdListDelete(pParse->db, $$);}
   832  %type idlist {IdList*}
   833  %destructor idlist {sqlite3IdListDelete(pParse->db, $$);}
   834  
   835  idlist_opt(A) ::= .                       {A = 0;}
   836  idlist_opt(A) ::= LP idlist(X) RP.    {A = X;}
   837  idlist(A) ::= idlist(A) COMMA nm(Y).
   838      {A = sqlite3IdListAppend(pParse->db,A,&Y);}
   839  idlist(A) ::= nm(Y).
   840      {A = sqlite3IdListAppend(pParse->db,0,&Y); /*A-overwrites-Y*/}
   841  
   842  /////////////////////////// Expression Processing /////////////////////////////
   843  //
   844  
   845  %type expr {ExprSpan}
   846  %destructor expr {sqlite3ExprDelete(pParse->db, $$.pExpr);}
   847  %type term {ExprSpan}
   848  %destructor term {sqlite3ExprDelete(pParse->db, $$.pExpr);}
   849  
   850  %include {
   851    /* This is a utility routine used to set the ExprSpan.zStart and
   852    ** ExprSpan.zEnd values of pOut so that the span covers the complete
   853    ** range of text beginning with pStart and going to the end of pEnd.
   854    */
   855    static void spanSet(ExprSpan *pOut, Token *pStart, Token *pEnd){
   856      pOut->zStart = pStart->z;
   857      pOut->zEnd = &pEnd->z[pEnd->n];
   858    }
   859  
   860    /* Construct a new Expr object from a single identifier.  Use the
   861    ** new Expr to populate pOut.  Set the span of pOut to be the identifier
   862    ** that created the expression.
   863    */
   864    static void spanExpr(ExprSpan *pOut, Parse *pParse, int op, Token t){
   865      Expr *p = sqlite3DbMallocRawNN(pParse->db, sizeof(Expr)+t.n+1);
   866      if( p ){
   867        memset(p, 0, sizeof(Expr));
   868        p->op = (u8)op;
   869        p->flags = EP_Leaf;
   870        p->iAgg = -1;
   871        p->u.zToken = (char*)&p[1];
   872        memcpy(p->u.zToken, t.z, t.n);
   873        p->u.zToken[t.n] = 0;
   874        if( sqlite3Isquote(p->u.zToken[0]) ){
   875          if( p->u.zToken[0]=='"' ) p->flags |= EP_DblQuoted;
   876          sqlite3Dequote(p->u.zToken);
   877        }
   878  #if SQLITE_MAX_EXPR_DEPTH>0
   879        p->nHeight = 1;
   880  #endif  
   881      }
   882      pOut->pExpr = p;
   883      pOut->zStart = t.z;
   884      pOut->zEnd = &t.z[t.n];
   885    }
   886  }
   887  
   888  expr(A) ::= term(A).
   889  expr(A) ::= LP(B) expr(X) RP(E).
   890              {spanSet(&A,&B,&E); /*A-overwrites-B*/  A.pExpr = X.pExpr;}
   891  expr(A) ::= id(X).          {spanExpr(&A,pParse,TK_ID,X); /*A-overwrites-X*/}
   892  expr(A) ::= JOIN_KW(X).     {spanExpr(&A,pParse,TK_ID,X); /*A-overwrites-X*/}
   893  expr(A) ::= nm(X) DOT nm(Y). {
   894    Expr *temp1 = sqlite3ExprAlloc(pParse->db, TK_ID, &X, 1);
   895    Expr *temp2 = sqlite3ExprAlloc(pParse->db, TK_ID, &Y, 1);
   896    spanSet(&A,&X,&Y); /*A-overwrites-X*/
   897    A.pExpr = sqlite3PExpr(pParse, TK_DOT, temp1, temp2);
   898  }
   899  expr(A) ::= nm(X) DOT nm(Y) DOT nm(Z). {
   900    Expr *temp1 = sqlite3ExprAlloc(pParse->db, TK_ID, &X, 1);
   901    Expr *temp2 = sqlite3ExprAlloc(pParse->db, TK_ID, &Y, 1);
   902    Expr *temp3 = sqlite3ExprAlloc(pParse->db, TK_ID, &Z, 1);
   903    Expr *temp4 = sqlite3PExpr(pParse, TK_DOT, temp2, temp3);
   904    spanSet(&A,&X,&Z); /*A-overwrites-X*/
   905    A.pExpr = sqlite3PExpr(pParse, TK_DOT, temp1, temp4);
   906  }
   907  term(A) ::= NULL|FLOAT|BLOB(X). {spanExpr(&A,pParse,@X,X); /*A-overwrites-X*/}
   908  term(A) ::= STRING(X).          {spanExpr(&A,pParse,@X,X); /*A-overwrites-X*/}
   909  term(A) ::= INTEGER(X). {
   910    A.pExpr = sqlite3ExprAlloc(pParse->db, TK_INTEGER, &X, 1);
   911    A.zStart = X.z;
   912    A.zEnd = X.z + X.n;
   913  }
   914  expr(A) ::= VARIABLE(X).     {
   915    if( !(X.z[0]=='#' && sqlite3Isdigit(X.z[1])) ){
   916      u32 n = X.n;
   917      spanExpr(&A, pParse, TK_VARIABLE, X);
   918      sqlite3ExprAssignVarNumber(pParse, A.pExpr, n);
   919    }else{
   920      /* When doing a nested parse, one can include terms in an expression
   921      ** that look like this:   #1 #2 ...  These terms refer to registers
   922      ** in the virtual machine.  #N is the N-th register. */
   923      Token t = X; /*A-overwrites-X*/
   924      assert( t.n>=2 );
   925      spanSet(&A, &t, &t);
   926      if( pParse->nested==0 ){
   927        sqlite3ErrorMsg(pParse, "near \"%T\": syntax error", &t);
   928        A.pExpr = 0;
   929      }else{
   930        A.pExpr = sqlite3PExpr(pParse, TK_REGISTER, 0, 0);
   931        if( A.pExpr ) sqlite3GetInt32(&t.z[1], &A.pExpr->iTable);
   932      }
   933    }
   934  }
   935  expr(A) ::= expr(A) COLLATE ids(C). {
   936    A.pExpr = sqlite3ExprAddCollateToken(pParse, A.pExpr, &C, 1);
   937    A.zEnd = &C.z[C.n];
   938  }
   939  %ifndef SQLITE_OMIT_CAST
   940  expr(A) ::= CAST(X) LP expr(E) AS typetoken(T) RP(Y). {
   941    spanSet(&A,&X,&Y); /*A-overwrites-X*/
   942    A.pExpr = sqlite3ExprAlloc(pParse->db, TK_CAST, &T, 1);
   943    sqlite3ExprAttachSubtrees(pParse->db, A.pExpr, E.pExpr, 0);
   944  }
   945  %endif  SQLITE_OMIT_CAST
   946  expr(A) ::= id(X) LP distinct(D) exprlist(Y) RP(E). {
   947    if( Y && Y->nExpr>pParse->db->aLimit[SQLITE_LIMIT_FUNCTION_ARG] ){
   948      sqlite3ErrorMsg(pParse, "too many arguments on function %T", &X);
   949    }
   950    A.pExpr = sqlite3ExprFunction(pParse, Y, &X);
   951    spanSet(&A,&X,&E);
   952    if( D==SF_Distinct && A.pExpr ){
   953      A.pExpr->flags |= EP_Distinct;
   954    }
   955  }
   956  expr(A) ::= id(X) LP STAR RP(E). {
   957    A.pExpr = sqlite3ExprFunction(pParse, 0, &X);
   958    spanSet(&A,&X,&E);
   959  }
   960  term(A) ::= CTIME_KW(OP). {
   961    A.pExpr = sqlite3ExprFunction(pParse, 0, &OP);
   962    spanSet(&A, &OP, &OP);
   963  }
   964  
   965  %include {
   966    /* This routine constructs a binary expression node out of two ExprSpan
   967    ** objects and uses the result to populate a new ExprSpan object.
   968    */
   969    static void spanBinaryExpr(
   970      Parse *pParse,      /* The parsing context.  Errors accumulate here */
   971      int op,             /* The binary operation */
   972      ExprSpan *pLeft,    /* The left operand, and output */
   973      ExprSpan *pRight    /* The right operand */
   974    ){
   975      pLeft->pExpr = sqlite3PExpr(pParse, op, pLeft->pExpr, pRight->pExpr);
   976      pLeft->zEnd = pRight->zEnd;
   977    }
   978  
   979    /* If doNot is true, then add a TK_NOT Expr-node wrapper around the
   980    ** outside of *ppExpr.
   981    */
   982    static void exprNot(Parse *pParse, int doNot, ExprSpan *pSpan){
   983      if( doNot ){
   984        pSpan->pExpr = sqlite3PExpr(pParse, TK_NOT, pSpan->pExpr, 0);
   985      }
   986    }
   987  }
   988  
   989  expr(A) ::= LP(L) nexprlist(X) COMMA expr(Y) RP(R). {
   990    ExprList *pList = sqlite3ExprListAppend(pParse, X, Y.pExpr);
   991    A.pExpr = sqlite3PExpr(pParse, TK_VECTOR, 0, 0);
   992    if( A.pExpr ){
   993      A.pExpr->x.pList = pList;
   994      spanSet(&A, &L, &R);
   995    }else{
   996      sqlite3ExprListDelete(pParse->db, pList);
   997    }
   998  }
   999  
  1000  expr(A) ::= expr(A) AND(OP) expr(Y).    {spanBinaryExpr(pParse,@OP,&A,&Y);}
  1001  expr(A) ::= expr(A) OR(OP) expr(Y).     {spanBinaryExpr(pParse,@OP,&A,&Y);}
  1002  expr(A) ::= expr(A) LT|GT|GE|LE(OP) expr(Y).
  1003                                          {spanBinaryExpr(pParse,@OP,&A,&Y);}
  1004  expr(A) ::= expr(A) EQ|NE(OP) expr(Y).  {spanBinaryExpr(pParse,@OP,&A,&Y);}
  1005  expr(A) ::= expr(A) BITAND|BITOR|LSHIFT|RSHIFT(OP) expr(Y).
  1006                                          {spanBinaryExpr(pParse,@OP,&A,&Y);}
  1007  expr(A) ::= expr(A) PLUS|MINUS(OP) expr(Y).
  1008                                          {spanBinaryExpr(pParse,@OP,&A,&Y);}
  1009  expr(A) ::= expr(A) STAR|SLASH|REM(OP) expr(Y).
  1010                                          {spanBinaryExpr(pParse,@OP,&A,&Y);}
  1011  expr(A) ::= expr(A) CONCAT(OP) expr(Y). {spanBinaryExpr(pParse,@OP,&A,&Y);}
  1012  %type likeop {Token}
  1013  likeop(A) ::= LIKE_KW|MATCH(A).
  1014  likeop(A) ::= NOT LIKE_KW|MATCH(X). {A=X; A.n|=0x80000000; /*A-overwrite-X*/}
  1015  expr(A) ::= expr(A) likeop(OP) expr(Y).  [LIKE_KW]  {
  1016    ExprList *pList;
  1017    int bNot = OP.n & 0x80000000;
  1018    OP.n &= 0x7fffffff;
  1019    pList = sqlite3ExprListAppend(pParse,0, Y.pExpr);
  1020    pList = sqlite3ExprListAppend(pParse,pList, A.pExpr);
  1021    A.pExpr = sqlite3ExprFunction(pParse, pList, &OP);
  1022    exprNot(pParse, bNot, &A);
  1023    A.zEnd = Y.zEnd;
  1024    if( A.pExpr ) A.pExpr->flags |= EP_InfixFunc;
  1025  }
  1026  expr(A) ::= expr(A) likeop(OP) expr(Y) ESCAPE expr(E).  [LIKE_KW]  {
  1027    ExprList *pList;
  1028    int bNot = OP.n & 0x80000000;
  1029    OP.n &= 0x7fffffff;
  1030    pList = sqlite3ExprListAppend(pParse,0, Y.pExpr);
  1031    pList = sqlite3ExprListAppend(pParse,pList, A.pExpr);
  1032    pList = sqlite3ExprListAppend(pParse,pList, E.pExpr);
  1033    A.pExpr = sqlite3ExprFunction(pParse, pList, &OP);
  1034    exprNot(pParse, bNot, &A);
  1035    A.zEnd = E.zEnd;
  1036    if( A.pExpr ) A.pExpr->flags |= EP_InfixFunc;
  1037  }
  1038  
  1039  %include {
  1040    /* Construct an expression node for a unary postfix operator
  1041    */
  1042    static void spanUnaryPostfix(
  1043      Parse *pParse,         /* Parsing context to record errors */
  1044      int op,                /* The operator */
  1045      ExprSpan *pOperand,    /* The operand, and output */
  1046      Token *pPostOp         /* The operand token for setting the span */
  1047    ){
  1048      pOperand->pExpr = sqlite3PExpr(pParse, op, pOperand->pExpr, 0);
  1049      pOperand->zEnd = &pPostOp->z[pPostOp->n];
  1050    }                           
  1051  }
  1052  
  1053  expr(A) ::= expr(A) ISNULL|NOTNULL(E).   {spanUnaryPostfix(pParse,@E,&A,&E);}
  1054  expr(A) ::= expr(A) NOT NULL(E). {spanUnaryPostfix(pParse,TK_NOTNULL,&A,&E);}
  1055  
  1056  %include {
  1057    /* A routine to convert a binary TK_IS or TK_ISNOT expression into a
  1058    ** unary TK_ISNULL or TK_NOTNULL expression. */
  1059    static void binaryToUnaryIfNull(Parse *pParse, Expr *pY, Expr *pA, int op){
  1060      sqlite3 *db = pParse->db;
  1061      if( pA && pY && pY->op==TK_NULL ){
  1062        pA->op = (u8)op;
  1063        sqlite3ExprDelete(db, pA->pRight);
  1064        pA->pRight = 0;
  1065      }
  1066    }
  1067  }
  1068  
  1069  //    expr1 IS expr2
  1070  //    expr1 IS NOT expr2
  1071  //
  1072  // If expr2 is NULL then code as TK_ISNULL or TK_NOTNULL.  If expr2
  1073  // is any other expression, code as TK_IS or TK_ISNOT.
  1074  // 
  1075  expr(A) ::= expr(A) IS expr(Y).     {
  1076    spanBinaryExpr(pParse,TK_IS,&A,&Y);
  1077    binaryToUnaryIfNull(pParse, Y.pExpr, A.pExpr, TK_ISNULL);
  1078  }
  1079  expr(A) ::= expr(A) IS NOT expr(Y). {
  1080    spanBinaryExpr(pParse,TK_ISNOT,&A,&Y);
  1081    binaryToUnaryIfNull(pParse, Y.pExpr, A.pExpr, TK_NOTNULL);
  1082  }
  1083  
  1084  %include {
  1085    /* Construct an expression node for a unary prefix operator
  1086    */
  1087    static void spanUnaryPrefix(
  1088      ExprSpan *pOut,        /* Write the new expression node here */
  1089      Parse *pParse,         /* Parsing context to record errors */
  1090      int op,                /* The operator */
  1091      ExprSpan *pOperand,    /* The operand */
  1092      Token *pPreOp         /* The operand token for setting the span */
  1093    ){
  1094      pOut->zStart = pPreOp->z;
  1095      pOut->pExpr = sqlite3PExpr(pParse, op, pOperand->pExpr, 0);
  1096      pOut->zEnd = pOperand->zEnd;
  1097    }
  1098  }
  1099  
  1100  
  1101  
  1102  expr(A) ::= NOT(B) expr(X).  
  1103                {spanUnaryPrefix(&A,pParse,@B,&X,&B);/*A-overwrites-B*/}
  1104  expr(A) ::= BITNOT(B) expr(X).
  1105                {spanUnaryPrefix(&A,pParse,@B,&X,&B);/*A-overwrites-B*/}
  1106  expr(A) ::= MINUS(B) expr(X). [BITNOT]
  1107                {spanUnaryPrefix(&A,pParse,TK_UMINUS,&X,&B);/*A-overwrites-B*/}
  1108  expr(A) ::= PLUS(B) expr(X). [BITNOT]
  1109                {spanUnaryPrefix(&A,pParse,TK_UPLUS,&X,&B);/*A-overwrites-B*/}
  1110  
  1111  %type between_op {int}
  1112  between_op(A) ::= BETWEEN.     {A = 0;}
  1113  between_op(A) ::= NOT BETWEEN. {A = 1;}
  1114  expr(A) ::= expr(A) between_op(N) expr(X) AND expr(Y). [BETWEEN] {
  1115    ExprList *pList = sqlite3ExprListAppend(pParse,0, X.pExpr);
  1116    pList = sqlite3ExprListAppend(pParse,pList, Y.pExpr);
  1117    A.pExpr = sqlite3PExpr(pParse, TK_BETWEEN, A.pExpr, 0);
  1118    if( A.pExpr ){
  1119      A.pExpr->x.pList = pList;
  1120    }else{
  1121      sqlite3ExprListDelete(pParse->db, pList);
  1122    } 
  1123    exprNot(pParse, N, &A);
  1124    A.zEnd = Y.zEnd;
  1125  }
  1126  %ifndef SQLITE_OMIT_SUBQUERY
  1127    %type in_op {int}
  1128    in_op(A) ::= IN.      {A = 0;}
  1129    in_op(A) ::= NOT IN.  {A = 1;}
  1130    expr(A) ::= expr(A) in_op(N) LP exprlist(Y) RP(E). [IN] {
  1131      if( Y==0 ){
  1132        /* Expressions of the form
  1133        **
  1134        **      expr1 IN ()
  1135        **      expr1 NOT IN ()
  1136        **
  1137        ** simplify to constants 0 (false) and 1 (true), respectively,
  1138        ** regardless of the value of expr1.
  1139        */
  1140        sqlite3ExprDelete(pParse->db, A.pExpr);
  1141        A.pExpr = sqlite3ExprAlloc(pParse->db, TK_INTEGER,&sqlite3IntTokens[N],1);
  1142      }else if( Y->nExpr==1 ){
  1143        /* Expressions of the form:
  1144        **
  1145        **      expr1 IN (?1)
  1146        **      expr1 NOT IN (?2)
  1147        **
  1148        ** with exactly one value on the RHS can be simplified to something
  1149        ** like this:
  1150        **
  1151        **      expr1 == ?1
  1152        **      expr1 <> ?2
  1153        **
  1154        ** But, the RHS of the == or <> is marked with the EP_Generic flag
  1155        ** so that it may not contribute to the computation of comparison
  1156        ** affinity or the collating sequence to use for comparison.  Otherwise,
  1157        ** the semantics would be subtly different from IN or NOT IN.
  1158        */
  1159        Expr *pRHS = Y->a[0].pExpr;
  1160        Y->a[0].pExpr = 0;
  1161        sqlite3ExprListDelete(pParse->db, Y);
  1162        /* pRHS cannot be NULL because a malloc error would have been detected
  1163        ** before now and control would have never reached this point */
  1164        if( ALWAYS(pRHS) ){
  1165          pRHS->flags &= ~EP_Collate;
  1166          pRHS->flags |= EP_Generic;
  1167        }
  1168        A.pExpr = sqlite3PExpr(pParse, N ? TK_NE : TK_EQ, A.pExpr, pRHS);
  1169      }else{
  1170        A.pExpr = sqlite3PExpr(pParse, TK_IN, A.pExpr, 0);
  1171        if( A.pExpr ){
  1172          A.pExpr->x.pList = Y;
  1173          sqlite3ExprSetHeightAndFlags(pParse, A.pExpr);
  1174        }else{
  1175          sqlite3ExprListDelete(pParse->db, Y);
  1176        }
  1177        exprNot(pParse, N, &A);
  1178      }
  1179      A.zEnd = &E.z[E.n];
  1180    }
  1181    expr(A) ::= LP(B) select(X) RP(E). {
  1182      spanSet(&A,&B,&E); /*A-overwrites-B*/
  1183      A.pExpr = sqlite3PExpr(pParse, TK_SELECT, 0, 0);
  1184      sqlite3PExprAddSelect(pParse, A.pExpr, X);
  1185    }
  1186    expr(A) ::= expr(A) in_op(N) LP select(Y) RP(E).  [IN] {
  1187      A.pExpr = sqlite3PExpr(pParse, TK_IN, A.pExpr, 0);
  1188      sqlite3PExprAddSelect(pParse, A.pExpr, Y);
  1189      exprNot(pParse, N, &A);
  1190      A.zEnd = &E.z[E.n];
  1191    }
  1192    expr(A) ::= expr(A) in_op(N) nm(Y) dbnm(Z) paren_exprlist(E). [IN] {
  1193      SrcList *pSrc = sqlite3SrcListAppend(pParse->db, 0,&Y,&Z);
  1194      Select *pSelect = sqlite3SelectNew(pParse, 0,pSrc,0,0,0,0,0,0,0);
  1195      if( E )  sqlite3SrcListFuncArgs(pParse, pSelect ? pSrc : 0, E);
  1196      A.pExpr = sqlite3PExpr(pParse, TK_IN, A.pExpr, 0);
  1197      sqlite3PExprAddSelect(pParse, A.pExpr, pSelect);
  1198      exprNot(pParse, N, &A);
  1199      A.zEnd = Z.z ? &Z.z[Z.n] : &Y.z[Y.n];
  1200    }
  1201    expr(A) ::= EXISTS(B) LP select(Y) RP(E). {
  1202      Expr *p;
  1203      spanSet(&A,&B,&E); /*A-overwrites-B*/
  1204      p = A.pExpr = sqlite3PExpr(pParse, TK_EXISTS, 0, 0);
  1205      sqlite3PExprAddSelect(pParse, p, Y);
  1206    }
  1207  %endif SQLITE_OMIT_SUBQUERY
  1208  
  1209  /* CASE expressions */
  1210  expr(A) ::= CASE(C) case_operand(X) case_exprlist(Y) case_else(Z) END(E). {
  1211    spanSet(&A,&C,&E);  /*A-overwrites-C*/
  1212    A.pExpr = sqlite3PExpr(pParse, TK_CASE, X, 0);
  1213    if( A.pExpr ){
  1214      A.pExpr->x.pList = Z ? sqlite3ExprListAppend(pParse,Y,Z) : Y;
  1215      sqlite3ExprSetHeightAndFlags(pParse, A.pExpr);
  1216    }else{
  1217      sqlite3ExprListDelete(pParse->db, Y);
  1218      sqlite3ExprDelete(pParse->db, Z);
  1219    }
  1220  }
  1221  %type case_exprlist {ExprList*}
  1222  %destructor case_exprlist {sqlite3ExprListDelete(pParse->db, $$);}
  1223  case_exprlist(A) ::= case_exprlist(A) WHEN expr(Y) THEN expr(Z). {
  1224    A = sqlite3ExprListAppend(pParse,A, Y.pExpr);
  1225    A = sqlite3ExprListAppend(pParse,A, Z.pExpr);
  1226  }
  1227  case_exprlist(A) ::= WHEN expr(Y) THEN expr(Z). {
  1228    A = sqlite3ExprListAppend(pParse,0, Y.pExpr);
  1229    A = sqlite3ExprListAppend(pParse,A, Z.pExpr);
  1230  }
  1231  %type case_else {Expr*}
  1232  %destructor case_else {sqlite3ExprDelete(pParse->db, $$);}
  1233  case_else(A) ::=  ELSE expr(X).         {A = X.pExpr;}
  1234  case_else(A) ::=  .                     {A = 0;} 
  1235  %type case_operand {Expr*}
  1236  %destructor case_operand {sqlite3ExprDelete(pParse->db, $$);}
  1237  case_operand(A) ::= expr(X).            {A = X.pExpr; /*A-overwrites-X*/} 
  1238  case_operand(A) ::= .                   {A = 0;} 
  1239  
  1240  %type exprlist {ExprList*}
  1241  %destructor exprlist {sqlite3ExprListDelete(pParse->db, $$);}
  1242  %type nexprlist {ExprList*}
  1243  %destructor nexprlist {sqlite3ExprListDelete(pParse->db, $$);}
  1244  
  1245  exprlist(A) ::= nexprlist(A).
  1246  exprlist(A) ::= .                            {A = 0;}
  1247  nexprlist(A) ::= nexprlist(A) COMMA expr(Y).
  1248      {A = sqlite3ExprListAppend(pParse,A,Y.pExpr);}
  1249  nexprlist(A) ::= expr(Y).
  1250      {A = sqlite3ExprListAppend(pParse,0,Y.pExpr); /*A-overwrites-Y*/}
  1251  
  1252  %ifndef SQLITE_OMIT_SUBQUERY
  1253  /* A paren_exprlist is an optional expression list contained inside
  1254  ** of parenthesis */
  1255  %type paren_exprlist {ExprList*}
  1256  %destructor paren_exprlist {sqlite3ExprListDelete(pParse->db, $$);}
  1257  paren_exprlist(A) ::= .   {A = 0;}
  1258  paren_exprlist(A) ::= LP exprlist(X) RP.  {A = X;}
  1259  %endif SQLITE_OMIT_SUBQUERY
  1260  
  1261  
  1262  ///////////////////////////// The CREATE INDEX command ///////////////////////
  1263  //
  1264  cmd ::= createkw(S) uniqueflag(U) INDEX ifnotexists(NE) nm(X) dbnm(D)
  1265          ON nm(Y) LP sortlist(Z) RP where_opt(W). {
  1266    sqlite3CreateIndex(pParse, &X, &D, 
  1267                       sqlite3SrcListAppend(pParse->db,0,&Y,0), Z, U,
  1268                        &S, W, SQLITE_SO_ASC, NE, SQLITE_IDXTYPE_APPDEF);
  1269  }
  1270  
  1271  %type uniqueflag {int}
  1272  uniqueflag(A) ::= UNIQUE.  {A = OE_Abort;}
  1273  uniqueflag(A) ::= .        {A = OE_None;}
  1274  
  1275  
  1276  // The eidlist non-terminal (Expression Id List) generates an ExprList
  1277  // from a list of identifiers.  The identifier names are in ExprList.a[].zName.
  1278  // This list is stored in an ExprList rather than an IdList so that it
  1279  // can be easily sent to sqlite3ColumnsExprList().
  1280  //
  1281  // eidlist is grouped with CREATE INDEX because it used to be the non-terminal
  1282  // used for the arguments to an index.  That is just an historical accident.
  1283  //
  1284  // IMPORTANT COMPATIBILITY NOTE:  Some prior versions of SQLite accepted
  1285  // COLLATE clauses and ASC or DESC keywords on ID lists in inappropriate
  1286  // places - places that might have been stored in the sqlite_master schema.
  1287  // Those extra features were ignored.  But because they might be in some
  1288  // (busted) old databases, we need to continue parsing them when loading
  1289  // historical schemas.
  1290  //
  1291  %type eidlist {ExprList*}
  1292  %destructor eidlist {sqlite3ExprListDelete(pParse->db, $$);}
  1293  %type eidlist_opt {ExprList*}
  1294  %destructor eidlist_opt {sqlite3ExprListDelete(pParse->db, $$);}
  1295  
  1296  %include {
  1297    /* Add a single new term to an ExprList that is used to store a
  1298    ** list of identifiers.  Report an error if the ID list contains
  1299    ** a COLLATE clause or an ASC or DESC keyword, except ignore the
  1300    ** error while parsing a legacy schema.
  1301    */
  1302    static ExprList *parserAddExprIdListTerm(
  1303      Parse *pParse,
  1304      ExprList *pPrior,
  1305      Token *pIdToken,
  1306      int hasCollate,
  1307      int sortOrder
  1308    ){
  1309      ExprList *p = sqlite3ExprListAppend(pParse, pPrior, 0);
  1310      if( (hasCollate || sortOrder!=SQLITE_SO_UNDEFINED)
  1311          && pParse->db->init.busy==0
  1312      ){
  1313        sqlite3ErrorMsg(pParse, "syntax error after column name \"%.*s\"",
  1314                           pIdToken->n, pIdToken->z);
  1315      }
  1316      sqlite3ExprListSetName(pParse, p, pIdToken, 1);
  1317      return p;
  1318    }
  1319  } // end %include
  1320  
  1321  eidlist_opt(A) ::= .                         {A = 0;}
  1322  eidlist_opt(A) ::= LP eidlist(X) RP.         {A = X;}
  1323  eidlist(A) ::= eidlist(A) COMMA nm(Y) collate(C) sortorder(Z).  {
  1324    A = parserAddExprIdListTerm(pParse, A, &Y, C, Z);
  1325  }
  1326  eidlist(A) ::= nm(Y) collate(C) sortorder(Z). {
  1327    A = parserAddExprIdListTerm(pParse, 0, &Y, C, Z); /*A-overwrites-Y*/
  1328  }
  1329  
  1330  %type collate {int}
  1331  collate(C) ::= .              {C = 0;}
  1332  collate(C) ::= COLLATE ids.   {C = 1;}
  1333  
  1334  
  1335  ///////////////////////////// The DROP INDEX command /////////////////////////
  1336  //
  1337  cmd ::= DROP INDEX ifexists(E) fullname(X).   {sqlite3DropIndex(pParse, X, E);}
  1338  
  1339  ///////////////////////////// The VACUUM command /////////////////////////////
  1340  //
  1341  %ifndef SQLITE_OMIT_VACUUM
  1342  %ifndef SQLITE_OMIT_ATTACH
  1343  cmd ::= VACUUM.                {sqlite3Vacuum(pParse,0);}
  1344  cmd ::= VACUUM nm(X).          {sqlite3Vacuum(pParse,&X);}
  1345  %endif  SQLITE_OMIT_ATTACH
  1346  %endif  SQLITE_OMIT_VACUUM
  1347  
  1348  ///////////////////////////// The PRAGMA command /////////////////////////////
  1349  //
  1350  %ifndef SQLITE_OMIT_PRAGMA
  1351  cmd ::= PRAGMA nm(X) dbnm(Z).                {sqlite3Pragma(pParse,&X,&Z,0,0);}
  1352  cmd ::= PRAGMA nm(X) dbnm(Z) EQ nmnum(Y).    {sqlite3Pragma(pParse,&X,&Z,&Y,0);}
  1353  cmd ::= PRAGMA nm(X) dbnm(Z) LP nmnum(Y) RP. {sqlite3Pragma(pParse,&X,&Z,&Y,0);}
  1354  cmd ::= PRAGMA nm(X) dbnm(Z) EQ minus_num(Y). 
  1355                                               {sqlite3Pragma(pParse,&X,&Z,&Y,1);}
  1356  cmd ::= PRAGMA nm(X) dbnm(Z) LP minus_num(Y) RP.
  1357                                               {sqlite3Pragma(pParse,&X,&Z,&Y,1);}
  1358  
  1359  nmnum(A) ::= plus_num(A).
  1360  nmnum(A) ::= nm(A).
  1361  nmnum(A) ::= ON(A).
  1362  nmnum(A) ::= DELETE(A).
  1363  nmnum(A) ::= DEFAULT(A).
  1364  %endif SQLITE_OMIT_PRAGMA
  1365  %token_class number INTEGER|FLOAT.
  1366  plus_num(A) ::= PLUS number(X).       {A = X;}
  1367  plus_num(A) ::= number(A).
  1368  minus_num(A) ::= MINUS number(X).     {A = X;}
  1369  //////////////////////////// The CREATE TRIGGER command /////////////////////
  1370  
  1371  %ifndef SQLITE_OMIT_TRIGGER
  1372  
  1373  cmd ::= createkw trigger_decl(A) BEGIN trigger_cmd_list(S) END(Z). {
  1374    Token all;
  1375    all.z = A.z;
  1376    all.n = (int)(Z.z - A.z) + Z.n;
  1377    sqlite3FinishTrigger(pParse, S, &all);
  1378  }
  1379  
  1380  trigger_decl(A) ::= temp(T) TRIGGER ifnotexists(NOERR) nm(B) dbnm(Z) 
  1381                      trigger_time(C) trigger_event(D)
  1382                      ON fullname(E) foreach_clause when_clause(G). {
  1383    sqlite3BeginTrigger(pParse, &B, &Z, C, D.a, D.b, E, G, T, NOERR);
  1384    A = (Z.n==0?B:Z); /*A-overwrites-T*/
  1385  }
  1386  
  1387  %type trigger_time {int}
  1388  trigger_time(A) ::= BEFORE|AFTER(X).  { A = @X; /*A-overwrites-X*/ }
  1389  trigger_time(A) ::= INSTEAD OF.  { A = TK_INSTEAD;}
  1390  trigger_time(A) ::= .            { A = TK_BEFORE; }
  1391  
  1392  %type trigger_event {struct TrigEvent}
  1393  %destructor trigger_event {sqlite3IdListDelete(pParse->db, $$.b);}
  1394  trigger_event(A) ::= DELETE|INSERT(X).   {A.a = @X; /*A-overwrites-X*/ A.b = 0;}
  1395  trigger_event(A) ::= UPDATE(X).          {A.a = @X; /*A-overwrites-X*/ A.b = 0;}
  1396  trigger_event(A) ::= UPDATE OF idlist(X).{A.a = TK_UPDATE; A.b = X;}
  1397  
  1398  foreach_clause ::= .
  1399  foreach_clause ::= FOR EACH ROW.
  1400  
  1401  %type when_clause {Expr*}
  1402  %destructor when_clause {sqlite3ExprDelete(pParse->db, $$);}
  1403  when_clause(A) ::= .             { A = 0; }
  1404  when_clause(A) ::= WHEN expr(X). { A = X.pExpr; }
  1405  
  1406  %type trigger_cmd_list {TriggerStep*}
  1407  %destructor trigger_cmd_list {sqlite3DeleteTriggerStep(pParse->db, $$);}
  1408  trigger_cmd_list(A) ::= trigger_cmd_list(A) trigger_cmd(X) SEMI. {
  1409    assert( A!=0 );
  1410    A->pLast->pNext = X;
  1411    A->pLast = X;
  1412  }
  1413  trigger_cmd_list(A) ::= trigger_cmd(A) SEMI. { 
  1414    assert( A!=0 );
  1415    A->pLast = A;
  1416  }
  1417  
  1418  // Disallow qualified table names on INSERT, UPDATE, and DELETE statements
  1419  // within a trigger.  The table to INSERT, UPDATE, or DELETE is always in 
  1420  // the same database as the table that the trigger fires on.
  1421  //
  1422  %type trnm {Token}
  1423  trnm(A) ::= nm(A).
  1424  trnm(A) ::= nm DOT nm(X). {
  1425    A = X;
  1426    sqlite3ErrorMsg(pParse, 
  1427          "qualified table names are not allowed on INSERT, UPDATE, and DELETE "
  1428          "statements within triggers");
  1429  }
  1430  
  1431  // Disallow the INDEX BY and NOT INDEXED clauses on UPDATE and DELETE
  1432  // statements within triggers.  We make a specific error message for this
  1433  // since it is an exception to the default grammar rules.
  1434  //
  1435  tridxby ::= .
  1436  tridxby ::= INDEXED BY nm. {
  1437    sqlite3ErrorMsg(pParse,
  1438          "the INDEXED BY clause is not allowed on UPDATE or DELETE statements "
  1439          "within triggers");
  1440  }
  1441  tridxby ::= NOT INDEXED. {
  1442    sqlite3ErrorMsg(pParse,
  1443          "the NOT INDEXED clause is not allowed on UPDATE or DELETE statements "
  1444          "within triggers");
  1445  }
  1446  
  1447  
  1448  
  1449  %type trigger_cmd {TriggerStep*}
  1450  %destructor trigger_cmd {sqlite3DeleteTriggerStep(pParse->db, $$);}
  1451  // UPDATE 
  1452  trigger_cmd(A) ::=
  1453     UPDATE orconf(R) trnm(X) tridxby SET setlist(Y) where_opt(Z).  
  1454     {A = sqlite3TriggerUpdateStep(pParse->db, &X, Y, Z, R);}
  1455  
  1456  // INSERT
  1457  trigger_cmd(A) ::= insert_cmd(R) INTO trnm(X) idlist_opt(F) select(S).
  1458     {A = sqlite3TriggerInsertStep(pParse->db, &X, F, S, R);/*A-overwrites-R*/}
  1459  
  1460  // DELETE
  1461  trigger_cmd(A) ::= DELETE FROM trnm(X) tridxby where_opt(Y).
  1462     {A = sqlite3TriggerDeleteStep(pParse->db, &X, Y);}
  1463  
  1464  // SELECT
  1465  trigger_cmd(A) ::= select(X).
  1466     {A = sqlite3TriggerSelectStep(pParse->db, X); /*A-overwrites-X*/}
  1467  
  1468  // The special RAISE expression that may occur in trigger programs
  1469  expr(A) ::= RAISE(X) LP IGNORE RP(Y).  {
  1470    spanSet(&A,&X,&Y);  /*A-overwrites-X*/
  1471    A.pExpr = sqlite3PExpr(pParse, TK_RAISE, 0, 0); 
  1472    if( A.pExpr ){
  1473      A.pExpr->affinity = OE_Ignore;
  1474    }
  1475  }
  1476  expr(A) ::= RAISE(X) LP raisetype(T) COMMA nm(Z) RP(Y).  {
  1477    spanSet(&A,&X,&Y);  /*A-overwrites-X*/
  1478    A.pExpr = sqlite3ExprAlloc(pParse->db, TK_RAISE, &Z, 1); 
  1479    if( A.pExpr ) {
  1480      A.pExpr->affinity = (char)T;
  1481    }
  1482  }
  1483  %endif  !SQLITE_OMIT_TRIGGER
  1484  
  1485  %type raisetype {int}
  1486  raisetype(A) ::= ROLLBACK.  {A = OE_Rollback;}
  1487  raisetype(A) ::= ABORT.     {A = OE_Abort;}
  1488  raisetype(A) ::= FAIL.      {A = OE_Fail;}
  1489  
  1490  
  1491  ////////////////////////  DROP TRIGGER statement //////////////////////////////
  1492  %ifndef SQLITE_OMIT_TRIGGER
  1493  cmd ::= DROP TRIGGER ifexists(NOERR) fullname(X). {
  1494    sqlite3DropTrigger(pParse,X,NOERR);
  1495  }
  1496  %endif  !SQLITE_OMIT_TRIGGER
  1497  
  1498  //////////////////////// ATTACH DATABASE file AS name /////////////////////////
  1499  %ifndef SQLITE_OMIT_ATTACH
  1500  cmd ::= ATTACH database_kw_opt expr(F) AS expr(D) key_opt(K). {
  1501    sqlite3Attach(pParse, F.pExpr, D.pExpr, K);
  1502  }
  1503  cmd ::= DETACH database_kw_opt expr(D). {
  1504    sqlite3Detach(pParse, D.pExpr);
  1505  }
  1506  
  1507  %type key_opt {Expr*}
  1508  %destructor key_opt {sqlite3ExprDelete(pParse->db, $$);}
  1509  key_opt(A) ::= .                     { A = 0; }
  1510  key_opt(A) ::= KEY expr(X).          { A = X.pExpr; }
  1511  
  1512  database_kw_opt ::= DATABASE.
  1513  database_kw_opt ::= .
  1514  %endif SQLITE_OMIT_ATTACH
  1515  
  1516  ////////////////////////// REINDEX collation //////////////////////////////////
  1517  %ifndef SQLITE_OMIT_REINDEX
  1518  cmd ::= REINDEX.                {sqlite3Reindex(pParse, 0, 0);}
  1519  cmd ::= REINDEX nm(X) dbnm(Y).  {sqlite3Reindex(pParse, &X, &Y);}
  1520  %endif  SQLITE_OMIT_REINDEX
  1521  
  1522  /////////////////////////////////// ANALYZE ///////////////////////////////////
  1523  %ifndef SQLITE_OMIT_ANALYZE
  1524  cmd ::= ANALYZE.                {sqlite3Analyze(pParse, 0, 0);}
  1525  cmd ::= ANALYZE nm(X) dbnm(Y).  {sqlite3Analyze(pParse, &X, &Y);}
  1526  %endif
  1527  
  1528  //////////////////////// ALTER TABLE table ... ////////////////////////////////
  1529  %ifndef SQLITE_OMIT_ALTERTABLE
  1530  cmd ::= ALTER TABLE fullname(X) RENAME TO nm(Z). {
  1531    sqlite3AlterRenameTable(pParse,X,&Z);
  1532  }
  1533  cmd ::= ALTER TABLE add_column_fullname
  1534          ADD kwcolumn_opt columnname(Y) carglist. {
  1535    Y.n = (int)(pParse->sLastToken.z-Y.z) + pParse->sLastToken.n;
  1536    sqlite3AlterFinishAddColumn(pParse, &Y);
  1537  }
  1538  add_column_fullname ::= fullname(X). {
  1539    disableLookaside(pParse);
  1540    sqlite3AlterBeginAddColumn(pParse, X);
  1541  }
  1542  kwcolumn_opt ::= .
  1543  kwcolumn_opt ::= COLUMNKW.
  1544  %endif  SQLITE_OMIT_ALTERTABLE
  1545  
  1546  //////////////////////// CREATE VIRTUAL TABLE ... /////////////////////////////
  1547  %ifndef SQLITE_OMIT_VIRTUALTABLE
  1548  cmd ::= create_vtab.                       {sqlite3VtabFinishParse(pParse,0);}
  1549  cmd ::= create_vtab LP vtabarglist RP(X).  {sqlite3VtabFinishParse(pParse,&X);}
  1550  create_vtab ::= createkw VIRTUAL TABLE ifnotexists(E)
  1551                  nm(X) dbnm(Y) USING nm(Z). {
  1552      sqlite3VtabBeginParse(pParse, &X, &Y, &Z, E);
  1553  }
  1554  vtabarglist ::= vtabarg.
  1555  vtabarglist ::= vtabarglist COMMA vtabarg.
  1556  vtabarg ::= .                       {sqlite3VtabArgInit(pParse);}
  1557  vtabarg ::= vtabarg vtabargtoken.
  1558  vtabargtoken ::= ANY(X).            {sqlite3VtabArgExtend(pParse,&X);}
  1559  vtabargtoken ::= lp anylist RP(X).  {sqlite3VtabArgExtend(pParse,&X);}
  1560  lp ::= LP(X).                       {sqlite3VtabArgExtend(pParse,&X);}
  1561  anylist ::= .
  1562  anylist ::= anylist LP anylist RP.
  1563  anylist ::= anylist ANY.
  1564  %endif  SQLITE_OMIT_VIRTUALTABLE
  1565  
  1566  
  1567  //////////////////////// COMMON TABLE EXPRESSIONS ////////////////////////////
  1568  %type with {With*}
  1569  %type wqlist {With*}
  1570  %destructor with {sqlite3WithDelete(pParse->db, $$);}
  1571  %destructor wqlist {sqlite3WithDelete(pParse->db, $$);}
  1572  
  1573  with(A) ::= . {A = 0;}
  1574  %ifndef SQLITE_OMIT_CTE
  1575  with(A) ::= WITH wqlist(W).              { A = W; }
  1576  with(A) ::= WITH RECURSIVE wqlist(W).    { A = W; }
  1577  
  1578  wqlist(A) ::= nm(X) eidlist_opt(Y) AS LP select(Z) RP. {
  1579    A = sqlite3WithAdd(pParse, 0, &X, Y, Z); /*A-overwrites-X*/
  1580  }
  1581  wqlist(A) ::= wqlist(A) COMMA nm(X) eidlist_opt(Y) AS LP select(Z) RP. {
  1582    A = sqlite3WithAdd(pParse, A, &X, Y, Z);
  1583  }
  1584  %endif  SQLITE_OMIT_CTE