]> granicus.if.org Git - php/commitdiff
Upgraded SQLite 3 library to version 3.3.13
authorIlia Alshanetsky <iliaa@php.net>
Tue, 20 Feb 2007 00:09:43 +0000 (00:09 +0000)
committerIlia Alshanetsky <iliaa@php.net>
Tue, 20 Feb 2007 00:09:43 +0000 (00:09 +0000)
21 files changed:
NEWS
ext/pdo_sqlite/sqlite/VERSION
ext/pdo_sqlite/sqlite/src/btree.c
ext/pdo_sqlite/sqlite/src/build.c
ext/pdo_sqlite/sqlite/src/callback.c
ext/pdo_sqlite/sqlite/src/delete.c
ext/pdo_sqlite/sqlite/src/expr.c
ext/pdo_sqlite/sqlite/src/func.c
ext/pdo_sqlite/sqlite/src/opcodes.h
ext/pdo_sqlite/sqlite/src/os_unix.c
ext/pdo_sqlite/sqlite/src/parse.c
ext/pdo_sqlite/sqlite/src/parse.h
ext/pdo_sqlite/sqlite/src/parse.y
ext/pdo_sqlite/sqlite/src/select.c
ext/pdo_sqlite/sqlite/src/sqliteInt.h
ext/pdo_sqlite/sqlite/src/tclsqlite.c
ext/pdo_sqlite/sqlite/src/test1.c
ext/pdo_sqlite/sqlite/src/test3.c
ext/pdo_sqlite/sqlite/src/update.c
ext/pdo_sqlite/sqlite/src/vdbemem.c
ext/pdo_sqlite/sqlite/src/where.c

diff --git a/NEWS b/NEWS
index 75b672701f358d4b2ad25015460e69cc64c7166a..71cbcb40d86247eaccb8ad9be14733ca8c459ce6 100644 (file)
--- a/NEWS
+++ b/NEWS
@@ -4,7 +4,7 @@ PHP                                                                        NEWS
 - Upgraded libraries bundled in the Windows distribution. (Edin)
   . c-client (imap) to version 2006e
   . libpq (PostgreSQL) to version 8.2.3
-- Upgraded SQLite 3 to version 3.3.12 (Ilia)
+- Upgraded SQLite 3 to version 3.3.13 (Ilia)
 - Upgraded PCRE to version 7.0 (Nuno)
 - Added --ri switch to CLI which allows to check extension information. (Marcus)
 - Added tidyNode::getParent() method (John, Nuno)
index 4d541eb209657e03bd0ba8c44e6c3041e2ca97c0..6c165c2846c7a7e9e680f98ec22b0708255043a2 100644 (file)
@@ -1 +1 @@
-3.3.12
+3.3.13
index 595f19ffa1aa79dbe6dd723eb8cc61af4d1012f1..d3a6694fe72302ba12323014472b22df5120e2ee 100644 (file)
@@ -5890,6 +5890,7 @@ int sqlite3BtreePageDump(Btree *p, int pgno, int recursive){
 **   aResult[7] =  Header size in bytes
 **   aResult[8] =  Local payload size
 **   aResult[9] =  Parent page number
+**   aResult[10]=  Page number of the first overflow page
 **
 ** This routine is used for testing and debugging only.
 */
@@ -5938,6 +5939,11 @@ int sqlite3BtreeCursorInfo(BtCursor *pCur, int *aResult, int upCnt){
   }else{
     aResult[9] = pPage->pParent->pgno;
   }
+  if( tmpCur.info.iOverflow ){
+    aResult[10] = get4byte(&tmpCur.info.pCell[tmpCur.info.iOverflow]);
+  }else{
+    aResult[10] = 0;
+  }
   releaseTempCursor(&tmpCur);
   return SQLITE_OK;
 }
index f600395b480decb1f1f08973de0b172be101329d..b2da7fb548e258bc3ec2deea8b01d956e4e5556d 100644 (file)
@@ -1222,6 +1222,10 @@ void sqlite3AddCollateType(Parse *pParse, const char *zType, int nType){
 ** If no versions of the requested collations sequence are available, or
 ** another error occurs, NULL is returned and an error message written into
 ** pParse.
+**
+** This routine is a wrapper around sqlite3FindCollSeq().  This routine
+** invokes the collation factory if the named collation cannot be found
+** and generates an error message.
 */
 CollSeq *sqlite3LocateCollSeq(Parse *pParse, const char *zName, int nName){
   sqlite3 *db = pParse->db;
@@ -2457,7 +2461,7 @@ void sqlite3CreateIndex(
     const char *zColName = pListItem->zName;
     Column *pTabCol;
     int requestedSortOrder;
-    char *zColl;                   /* Collation sequence */
+    char *zColl;                   /* Collation sequence name */
 
     for(j=0, pTabCol=pTab->aCol; j<pTab->nCol; j++, pTabCol++){
       if( sqlite3StrICmp(zColName, pTabCol->zName)==0 ) break;
@@ -2467,6 +2471,12 @@ void sqlite3CreateIndex(
         pTab->zName, zColName);
       goto exit_create_index;
     }
+    /* TODO:  Add a test to make sure that the same column is not named
+    ** more than once within the same index.  Only the first instance of
+    ** the column will ever be used by the optimizer.  Note that using the
+    ** same column more than once cannot be an error because that would 
+    ** break backwards compatibility - it needs to be a warning.
+    */
     pIndex->aiColumn[i] = j;
     if( pListItem->pExpr ){
       assert( pListItem->pExpr->pColl );
index ac748361bbfc5468e596eeb1f901e95eddc27b09..788b622109207a7204df3bdac791b3e67bc923e1 100644 (file)
@@ -195,6 +195,11 @@ static CollSeq *findCollSeqEntry(
 **
 ** If the entry specified is not found and 'create' is true, then create a
 ** new entry.  Otherwise return NULL.
+**
+** A separate function sqlite3LocateCollSeq() is a wrapper around
+** this routine.  sqlite3LocateCollSeq() invokes the collation factory
+** if necessary and generates an error message if the collating sequence
+** cannot be found.
 */
 CollSeq *sqlite3FindCollSeq(
   sqlite3 *db,
index ee1bc930b20d765a248cb7e2912534d0e204a1b1..ea9e99b877c791daf5f669fd9d80ee41182bdd9c 100644 (file)
@@ -106,7 +106,8 @@ void sqlite3DeleteFrom(
   AuthContext sContext;  /* Authorization context */
   int oldIdx = -1;       /* Cursor for the OLD table of AFTER triggers */
   NameContext sNC;       /* Name context to resolve expressions in */
-  int iDb;
+  int iDb;               /* Database number */
+  int memCnt = 0;        /* Memory cell used for change counting */
 
 #ifndef SQLITE_OMIT_TRIGGER
   int isView;                  /* True if attempting to delete from a view */
@@ -204,7 +205,8 @@ void sqlite3DeleteFrom(
   ** we are counting rows.
   */
   if( db->flags & SQLITE_CountRows ){
-    sqlite3VdbeAddOp(v, OP_Integer, 0, 0);
+    memCnt = pParse->nMem++;
+    sqlite3VdbeAddOp(v, OP_MemInt, 0, memCnt);
   }
 
   /* Special case: A DELETE without a WHERE clause deletes everything.
@@ -221,7 +223,7 @@ void sqlite3DeleteFrom(
         sqlite3OpenTable(pParse, iCur, iDb, pTab, OP_OpenRead);
       }
       sqlite3VdbeAddOp(v, OP_Rewind, iCur, sqlite3VdbeCurrentAddr(v)+2);
-      addr2 = sqlite3VdbeAddOp(v, OP_AddImm, 1, 0);
+      addr2 = sqlite3VdbeAddOp(v, OP_MemIncr, 1, memCnt);
       sqlite3VdbeAddOp(v, OP_Next, iCur, addr2);
       sqlite3VdbeResolveLabel(v, endOfLoop);
       sqlite3VdbeAddOp(v, OP_Close, iCur, 0);
@@ -251,7 +253,7 @@ void sqlite3DeleteFrom(
     sqlite3VdbeAddOp(v, IsVirtual(pTab) ? OP_VRowid : OP_Rowid, iCur, 0);
     sqlite3VdbeAddOp(v, OP_FifoWrite, 0, 0);
     if( db->flags & SQLITE_CountRows ){
-      sqlite3VdbeAddOp(v, OP_AddImm, 1, 0);
+      sqlite3VdbeAddOp(v, OP_MemIncr, 1, memCnt);
     }
 
     /* End the database scan loop.
@@ -354,6 +356,7 @@ void sqlite3DeleteFrom(
   ** invoke the callback function.
   */
   if( db->flags & SQLITE_CountRows && pParse->nested==0 && !pParse->trigStack ){
+    sqlite3VdbeAddOp(v, OP_MemLoad, memCnt, 0);
     sqlite3VdbeAddOp(v, OP_Callback, 1, 0);
     sqlite3VdbeSetNumCols(v, 1);
     sqlite3VdbeSetColName(v, 0, COLNAME_NAME, "rows deleted", P3_STATIC);
index 22c267cf957def7561c8310ae66e6c43bd03ca64..6d21918cd08fbb17743b76a41d6ccd4772a11fe2 100644 (file)
@@ -49,6 +49,24 @@ char sqlite3ExprAffinity(Expr *pExpr){
   return pExpr->affinity;
 }
 
+/*
+** Set the collating sequence for expression pExpr to be the collating
+** sequence named by pToken.   Return a pointer to the revised expression.
+** The collating sequence is marked as "explicit" using the EP_ExpCollate
+** flag.  An explicit collating sequence will override implicit
+** collating sequences.
+*/
+Expr *sqlite3ExprSetColl(Parse *pParse, Expr *pExpr, Token *pName){
+  CollSeq *pColl;
+  if( pExpr==0 ) return 0;
+  pColl = sqlite3LocateCollSeq(pParse, (char*)pName->z, pName->n);
+  if( pColl ){
+    pExpr->pColl = pColl;
+    pExpr->flags |= EP_ExpCollate;
+  }
+  return pExpr;
+}
+
 /*
 ** Return the default collation sequence for the expression pExpr. If
 ** there is no default collation type, return 0.
@@ -158,9 +176,20 @@ static int binaryCompareP1(Expr *pExpr1, Expr *pExpr2, int jumpIfNull){
 ** type.
 */
 static CollSeq* binaryCompareCollSeq(Parse *pParse, Expr *pLeft, Expr *pRight){
-  CollSeq *pColl = sqlite3ExprCollSeq(pParse, pLeft);
-  if( !pColl ){
-    pColl = sqlite3ExprCollSeq(pParse, pRight);
+  CollSeq *pColl;
+  assert( pLeft );
+  assert( pRight );
+  if( pLeft->flags & EP_ExpCollate ){
+    assert( pLeft->pColl );
+    pColl = pLeft->pColl;
+  }else if( pRight->flags & EP_ExpCollate ){
+    assert( pRight->pColl );
+    pColl = pRight->pColl;
+  }else{
+    pColl = sqlite3ExprCollSeq(pParse, pLeft);
+    if( !pColl ){
+      pColl = sqlite3ExprCollSeq(pParse, pRight);
+    }
   }
   return pColl;
 }
@@ -205,8 +234,18 @@ Expr *sqlite3Expr(int op, Expr *pLeft, Expr *pRight, const Token *pToken){
   if( pToken ){
     assert( pToken->dyn==0 );
     pNew->span = pNew->token = *pToken;
-  }else if( pLeft && pRight ){
-    sqlite3ExprSpan(pNew, &pLeft->span, &pRight->span);
+  }else if( pLeft ){
+    if( pRight ){
+      sqlite3ExprSpan(pNew, &pLeft->span, &pRight->span);
+      if( pRight->flags && EP_ExpCollate ){
+        pNew->flags |= EP_ExpCollate;
+        pNew->pColl = pRight->pColl;
+      }
+    }
+    if( pLeft->flags && EP_ExpCollate ){
+      pNew->flags |= EP_ExpCollate;
+      pNew->pColl = pLeft->pColl;
+    }
   }
   return pNew;
 }
@@ -890,7 +929,9 @@ static int lookupName(
             /* Substitute the rowid (column -1) for the INTEGER PRIMARY KEY */
             pExpr->iColumn = j==pTab->iPKey ? -1 : j;
             pExpr->affinity = pTab->aCol[j].affinity;
-            pExpr->pColl = sqlite3FindCollSeq(db, ENC(db), zColl,-1, 0);
+            if( (pExpr->flags & EP_ExpCollate)==0 ){
+              pExpr->pColl = sqlite3FindCollSeq(db, ENC(db), zColl,-1, 0);
+            }
             if( i<pSrcList->nSrc-1 ){
               if( pItem[1].jointype & JT_NATURAL ){
                 /* If this match occurred in the left table of a natural join,
@@ -946,7 +987,9 @@ static int lookupName(
             cnt++;
             pExpr->iColumn = iCol==pTab->iPKey ? -1 : iCol;
             pExpr->affinity = pTab->aCol[iCol].affinity;
-            pExpr->pColl = sqlite3FindCollSeq(db, ENC(db), zColl,-1, 0);
+            if( (pExpr->flags & EP_ExpCollate)==0 ){
+              pExpr->pColl = sqlite3FindCollSeq(db, ENC(db), zColl,-1, 0);
+            }
             pExpr->pTab = pTab;
             break;
           }
@@ -1046,7 +1089,7 @@ static int lookupName(
       n = sizeof(Bitmask)*8-1;
     }
     assert( pMatch->iCursor==pExpr->iTable );
-    pMatch->colUsed |= 1<<n;
+    pMatch->colUsed |= ((Bitmask)1)<<n;
   }
 
 lookupname_end:
index c3444baa0e44c52479097012a0509017815d9d6e..455bd2beb0a0d7f360e845044675a08055e12092 100644 (file)
@@ -271,6 +271,25 @@ static void randomFunc(
   sqlite3_result_int64(context, r);
 }
 
+/*
+** Implementation of randomblob(N).  Return a random blob
+** that is N bytes long.
+*/
+static void randomBlob(
+  sqlite3_context *context,
+  int argc,
+  sqlite3_value **argv
+){
+  int n;
+  unsigned char *p;
+  assert( argc==1 );
+  n = sqlite3_value_int(argv[0]);
+  if( n<1 ) n = 1;
+  p = sqlite3_malloc(n);
+  sqlite3Randomness(n, p);
+  sqlite3_result_blob(context, (char*)p, n, sqlite3_free);
+}
+
 /*
 ** Implementation of the last_insert_rowid() SQL function.  The return
 ** value is the same as the sqlite3_last_insert_rowid() API function.
@@ -547,6 +566,12 @@ static void versionFunc(
   sqlite3_result_text(context, sqlite3_version, -1, SQLITE_STATIC);
 }
 
+/* Array for converting from half-bytes (nybbles) into ASCII hex
+** digits. */
+static const char hexdigits[] = {
+  '0', '1', '2', '3', '4', '5', '6', '7',
+  '8', '9', 'A', 'B', 'C', 'D', 'E', 'F' 
+};
 
 /*
 ** EXPERIMENTAL - This is not an official function.  The interface may
@@ -572,10 +597,6 @@ static void quoteFunc(sqlite3_context *context, int argc, sqlite3_value **argv){
       break;
     }
     case SQLITE_BLOB: {
-      static const char hexdigits[] = { 
-        '0', '1', '2', '3', '4', '5', '6', '7',
-        '8', '9', 'A', 'B', 'C', 'D', 'E', 'F' 
-      };
       char *zText = 0;
       int nBlob = sqlite3_value_bytes(argv[0]);
       char const *zBlob = sqlite3_value_blob(argv[0]);
@@ -621,11 +642,41 @@ static void quoteFunc(sqlite3_context *context, int argc, sqlite3_value **argv){
   }
 }
 
+/*
+** The hex() function.  Interpret the argument as a blob.  Return
+** a hexadecimal rendering as text.
+*/
+static void hexFunc(
+  sqlite3_context *context,
+  int argc,
+  sqlite3_value **argv
+){
+  int i, n;
+  const unsigned char *pBlob;
+  char *zHex, *z;
+  assert( argc==1 );
+  pBlob = sqlite3_value_blob(argv[0]);
+  n = sqlite3_value_bytes(argv[0]);
+  z = zHex = sqlite3_malloc(n*2 + 1);
+  if( zHex==0 ) return;
+  for(i=0; i<n; i++, pBlob++){
+    unsigned char c = *pBlob;
+    *(z++) = hexdigits[(c>>4)&0xf];
+    *(z++) = hexdigits[c&0xf];
+  }
+  *z = 0;
+  sqlite3_result_text(context, zHex, n*2, sqlite3_free);
+}
+
 #ifdef SQLITE_SOUNDEX
 /*
 ** Compute the soundex encoding of a word.
 */
-static void soundexFunc(sqlite3_context *context, int argc, sqlite3_value **argv){
+static void soundexFunc(
+  sqlite3_context *context,
+  int argc,
+  sqlite3_value **argv
+){
   char zResult[8];
   const u8 *zIn;
   int i, j;
@@ -1021,8 +1072,10 @@ void sqlite3RegisterBuiltinFunctions(sqlite3 *db){
     { "coalesce",          -1, 0, SQLITE_UTF8,    0, ifnullFunc },
     { "coalesce",           0, 0, SQLITE_UTF8,    0, 0          },
     { "coalesce",           1, 0, SQLITE_UTF8,    0, 0          },
+    { "hex",                1, 0, SQLITE_UTF8,    0, hexFunc    },
     { "ifnull",             2, 0, SQLITE_UTF8,    1, ifnullFunc },
     { "random",            -1, 0, SQLITE_UTF8,    0, randomFunc },
+    { "randomblob",         1, 0, SQLITE_UTF8,    0, randomBlob },
     { "nullif",             2, 0, SQLITE_UTF8,    1, nullifFunc },
     { "sqlite_version",     0, 0, SQLITE_UTF8,    0, versionFunc},
     { "quote",              1, 0, SQLITE_UTF8,    0, quoteFunc  },
index 80598e2a6fbce58f2f7aa728a09b30f1fab094c6..2e18d8342572389452bf1c19a1d9490ac9afb430 100644 (file)
@@ -28,9 +28,9 @@
 #define OP_NotNull                             67   /* same as TK_NOTNULL  */
 #define OP_Rowid                               23
 #define OP_Real                               126   /* same as TK_FLOAT    */
-#define OP_String8                             88   /* same as TK_STRING   */
+#define OP_String8                             89   /* same as TK_STRING   */
 #define OP_And                                 62   /* same as TK_AND      */
-#define OP_BitNot                              87   /* same as TK_BITNOT   */
+#define OP_BitNot                              88   /* same as TK_BITNOT   */
 #define OP_VFilter                             24
 #define OP_NullRow                             25
 #define OP_Noop                                26
@@ -84,8 +84,8 @@
 #define OP_Halt                                65
 #define OP_Expire                              74
 #define OP_Or                                  61   /* same as TK_OR       */
-#define OP_DropIndex                           86
-#define OP_IdxInsert                           89
+#define OP_DropIndex                           85
+#define OP_IdxInsert                           87
 #define OP_ShiftLeft                           77   /* same as TK_LSHIFT   */
 #define OP_FifoRead                            90
 #define OP_Column                              91
 #define OP_VOpen                              114
 #define OP_AggFinal                           115
 #define OP_OpenWrite                          116
-#define OP_Negative                            85   /* same as TK_UMINUS   */
+#define OP_Negative                            86   /* same as TK_UMINUS   */
 #define OP_Le                                  71   /* same as TK_LE       */
 #define OP_VNext                              117
 #define OP_AbsValue                           118
 #define NOPUSH_MASK_2 0xedaf
 #define NOPUSH_MASK_3 0xf1eb
 #define NOPUSH_MASK_4 0xfffe
-#define NOPUSH_MASK_5 0x62ef
+#define NOPUSH_MASK_5 0x61ef
 #define NOPUSH_MASK_6 0xbfcf
 #define NOPUSH_MASK_7 0x23bf
 #define NOPUSH_MASK_8 0xf87b
index d7f05ac14bf36b176b2a1b9cae11114a1dbaf1fd..8ac272e5e258c44255a06439d22ea8feac580f7e 100644 (file)
@@ -565,7 +565,7 @@ static sqlite3LockingStyle sqlite3TestLockingStyle(const char *filePath,
   lockInfo.l_whence = SEEK_SET;
   lockInfo.l_type = F_RDLCK;
   
-  if (fcntl(fd, F_GETLK, (int) &lockInfo) != -1) {
+  if (fcntl(fd, F_GETLK, &lockInfo) != -1) {
     return posixLockingStyle;
   } 
   
@@ -1000,10 +1000,14 @@ int sqlite3UnixIsDirWritable(char *zBuf){
 */
 static int seekAndRead(unixFile *id, void *pBuf, int cnt){
   int got;
+  i64 newOffset;
 #ifdef USE_PREAD
   got = pread(id->h, pBuf, cnt, id->offset);
 #else
-  lseek(id->h, id->offset, SEEK_SET);
+  newOffset = lseek(id->h, id->offset, SEEK_SET);
+  if( newOffset!=id->offset ){
+    return -1;
+  }
   got = read(id->h, pBuf, cnt);
 #endif
   if( got>0 ){
@@ -1043,10 +1047,14 @@ static int unixRead(OsFile *id, void *pBuf, int amt){
 */
 static int seekAndWrite(unixFile *id, const void *pBuf, int cnt){
   int got;
+  i64 newOffset;
 #ifdef USE_PREAD
   got = pwrite(id->h, pBuf, cnt, id->offset);
 #else
-  lseek(id->h, id->offset, SEEK_SET);
+  newOffset = lseek(id->h, id->offset, SEEK_SET);
+  if( newOffset!=id->offset ){
+    return -1;
+  }
   got = write(id->h, pBuf, cnt);
 #endif
   if( got>0 ){
@@ -1160,13 +1168,26 @@ static int full_fsync(int fd, int fullSync, int dataOnly){
 #if HAVE_FULLFSYNC
   if( fullSync ){
     rc = fcntl(fd, F_FULLFSYNC, 0);
-  }else
-#endif /* HAVE_FULLFSYNC */
+  }else{
+    rc = 1;
+  }
+  /* If the FULLFSYNC failed, fall back to attempting an fsync().
+   * It shouldn't be possible for fullfsync to fail on the local 
+   * file system (on OSX), so failure indicates that FULLFSYNC
+   * isn't supported for this file system. So, attempt an fsync 
+   * and (for now) ignore the overhead of a superfluous fcntl call.  
+   * It'd be better to detect fullfsync support once and avoid 
+   * the fcntl call every time sync is called.
+   */
+  if( rc ) rc = fsync(fd);
+
+#else 
   if( dataOnly ){
     rc = fdatasync(fd);
   }else{
     rc = fsync(fd);
   }
+#endif /* HAVE_FULLFSYNC */
 #endif /* defined(SQLITE_NO_SYNC) */
 
   return rc;
index a861619ce1928cad5cc65fd13d94a3b481d2a34a..524803948ddf789b4aa31c7c2be792fc4c71fb06 100644 (file)
@@ -4,7 +4,7 @@
 /* First off, code is include which follows the "include" declaration
 ** in the input file. */
 #include <stdio.h>
-#line 56 "ext/pdo_sqlite/sqlite/src/parse.y"
+#line 56 "parse.y"
 
 #include "sqliteInt.h"
 #include "parse.h"
@@ -43,7 +43,7 @@ struct TrigEvent { int a; IdList * b; };
 */
 struct AttachKey { int type;  Token key; };
 
-#line 48 "ext/pdo_sqlite/sqlite/src/parse.c"
+#line 48 "parse.c"
 /* Next is all token values, in a form suitable for use by makeheaders.
 ** This section will be null unless lemon is run with the -m switch.
 */
@@ -120,7 +120,7 @@ typedef union {
 #define sqlite3ParserARG_FETCH Parse *pParse = yypParser->pParse
 #define sqlite3ParserARG_STORE yypParser->pParse = pParse
 #define YYNSTATE 587
-#define YYNRULE 311
+#define YYNRULE 312
 #define YYERRORSYMBOL 139
 #define YYERRSYMDT yy497
 #define YYFALLBACK 1
@@ -176,411 +176,415 @@ typedef union {
 **  yy_default[]       Default action for each state.
 */
 static const YYACTIONTYPE yy_action[] = {
- /*     0 */   290,   68,  300,   70,  151,  169,  570,  420,   62,   62,
- /*    10 */    62,   62,  205,   64,   64,   64,   64,   65,   65,   66,
- /*    20 */    66,   66,   67,  477,  569,  568,  433,  439,   69,   64,
- /*    30 */    64,   64,   64,   65,   65,   66,   66,   66,   67,   65,
- /*    40 */    65,   66,   66,   66,   67,   61,   59,  296,  443,  444,
- /*    50 */   440,  440,   63,   63,   62,   62,   62,   62,  582,   64,
- /*    60 */    64,   64,   64,   65,   65,   66,   66,   66,   67,  290,
- /*    70 */   570,  387,  420,  149,    2,   80,  161,  115,  240,  341,
- /*    80 */   245,  342,  173,  249,  298,    1,  566,  207,  569,  393,
- /*    90 */   250,  522,  899,  121,  586,  433,  439,    2,  583,   58,
- /*   100 */   577,   21,   64,   64,   64,   64,   65,   65,   66,   66,
- /*   110 */    66,   67,  290,  473,   61,   59,  296,  443,  444,  440,
- /*   120 */   440,   63,   63,   62,   62,   62,   62,  393,   64,   64,
- /*   130 */    64,   64,   65,   65,   66,   66,   66,   67,  433,  439,
- /*   140 */    92,  178,   67,  473,  343,  346,  347,  388,  385,   56,
- /*   150 */   379,  207,  236,  407,  394,  395,  348,   61,   59,  296,
- /*   160 */   443,  444,  440,  440,   63,   63,   62,   62,   62,   62,
- /*   170 */   171,   64,   64,   64,   64,   65,   65,   66,   66,   66,
- /*   180 */    67,  290,  479,  428,  208,  522,  110,  490,  452,  432,
- /*   190 */   406,  223,  394,  395,  532,   21,  408,  318,  517,   68,
- /*   200 */   453,   70,  151,  567,  412,  150,  487,  433,  439,  146,
- /*   210 */   147,  584,  890,  454,  890,  494,  172,  157,  488,  411,
- /*   220 */    28,  337,  415,  261,  290,  495,   61,   59,  296,  443,
- /*   230 */   444,  440,  440,   63,   63,   62,   62,   62,   62,  412,
- /*   240 */    64,   64,   64,   64,   65,   65,   66,   66,   66,   67,
- /*   250 */   433,  439,  581,  314,  389,  417,  417,  417,  549,  204,
- /*   260 */    68,  460,   70,  151,  262,  261,  197,  290,  339,   61,
- /*   270 */    59,  296,  443,  444,  440,  440,   63,   63,   62,   62,
- /*   280 */    62,   62,  318,   64,   64,   64,   64,   65,   65,   66,
- /*   290 */    66,   66,   67,  433,  439,  410,  548,  393,  284,  409,
- /*   300 */   412,  430,  521,  165,  411,   41,  381,  473,  432,  295,
- /*   310 */   423,  424,   61,   59,  296,  443,  444,  440,  440,   63,
- /*   320 */    63,   62,   62,   62,   62,  376,   64,   64,   64,   64,
- /*   330 */    65,   65,   66,   66,   66,   67,  477,  488,  300,  290,
- /*   340 */    76,  415,  205,  483,  332,  234,  238,  370,  267,  266,
- /*   350 */   489,   68,  384,   70,  151,  369,  393,  383,  205,  434,
- /*   360 */   435,  367,  394,  395,  178,  433,  439,  343,  346,  347,
- /*   370 */   529,  504,  572,  207,  417,  417,  417,  528,  169,  348,
- /*   380 */   420,  437,  438,   79,   61,   59,  296,  443,  444,  440,
- /*   390 */   440,   63,   63,   62,   62,   62,   62,  358,   64,   64,
- /*   400 */    64,   64,   65,   65,   66,   66,   66,   67,  290,  436,
- /*   410 */   428,  208,  486,  115,  240,  341,  245,  342,  173,  249,
- /*   420 */   318,  394,  395,  530,  318,  393,  250,  217,  318,  509,
- /*   430 */   405,  520,  152,  224,  433,  439,  321,  423,  424,  517,
- /*   440 */   492,  493,  411,   35,  231,  420,  411,   35,  469,  510,
- /*   450 */   411,   35,  477,   61,   59,  296,  443,  444,  440,  440,
- /*   460 */    63,   63,   62,   62,   62,   62,  412,   64,   64,   64,
- /*   470 */    64,   65,   65,   66,   66,   66,   67,  290,  522,  178,
- /*   480 */   351,  503,  343,  346,  347,  299,  318,  404,   21,  297,
- /*   490 */   394,  395,  318,  334,  348,  482,  318,  457,  318,  393,
- /*   500 */   207,  457,  302,  433,  439,  457,   22,  174,  411,   36,
- /*   510 */   420,  148,  531,  308,  411,   35,  523,  470,  411,   41,
- /*   520 */   411,   49,   61,   59,  296,  443,  444,  440,  440,   63,
- /*   530 */    63,   62,   62,   62,   62,  318,   64,   64,   64,   64,
- /*   540 */    65,   65,   66,   66,   66,   67,  290,  447,  338,  452,
- /*   550 */   253,   66,   66,   66,   67,  428,  448,  411,   49,  232,
- /*   560 */   230,  453,   10,  292,  394,  395,  393,  309,  250,  456,
- /*   570 */   411,    3,  433,  439,  454,  420,  328,   20,  543,  141,
- /*   580 */   584,  889,  324,  889,  446,  446,  393,  430,  322,  165,
- /*   590 */   393,   61,   59,  296,  443,  444,  440,  440,   63,   63,
- /*   600 */    62,   62,   62,   62,  310,   64,   64,   64,   64,   65,
- /*   610 */    65,   66,   66,   66,   67,  290,  371,  318,  271,  541,
- /*   620 */    91,  581,  293,  540,  466,  318,  206,  318,  587,  388,
- /*   630 */   385,  394,  395,   55,  324,  359,  446,  446,  329,  411,
- /*   640 */    29,  433,  439,  324,  481,  446,  446,  411,   24,  411,
- /*   650 */    33,  394,  395,  515,  545,  394,  395,  274,  290,  272,
- /*   660 */    61,   59,  296,  443,  444,  440,  440,   63,   63,   62,
- /*   670 */    62,   62,   62,  318,   64,   64,   64,   64,   65,   65,
- /*   680 */    66,   66,   66,   67,  433,  439,  546,  493,  303,  396,
- /*   690 */   397,  398,  580,  289,  823,  411,   54,  360,  515,  515,
- /*   700 */   189,  290,  363,   61,   59,  296,  443,  444,  440,  440,
- /*   710 */    63,   63,   62,   62,   62,   62,  144,   64,   64,   64,
- /*   720 */    64,   65,   65,   66,   66,   66,   67,  433,  439,  539,
- /*   730 */   357,  539,  248,  216,  412,  468,  168,  157,  273,  515,
- /*   740 */   515,  515,  312,  120,  290,  198,   61,   71,  296,  443,
- /*   750 */   444,  440,  440,   63,   63,   62,   62,   62,   62,  368,
- /*   760 */    64,   64,   64,   64,   65,   65,   66,   66,   66,   67,
- /*   770 */   433,  439,  426,  426,  304,  305,  307,  248,  247,  412,
- /*   780 */   324,  364,  446,  446,  175,  176,  177,  290,  261,  261,
- /*   790 */    59,  296,  443,  444,  440,  440,   63,   63,   62,   62,
- /*   800 */    62,   62,  155,   64,   64,   64,   64,   65,   65,   66,
- /*   810 */    66,   66,   67,  433,  439,  462,  156,  125,  248,  248,
- /*   820 */   248,  420,  463,  367,  261,  255,  335,  193,  468,  556,
- /*   830 */   558,   75,  162,   77,  296,  443,  444,  440,  440,   63,
- /*   840 */    63,   62,   62,   62,   62,  318,   64,   64,   64,   64,
- /*   850 */    65,   65,   66,   66,   66,   67,   72,  325,  318,    4,
- /*   860 */   318,  412,  318,  294,  259,  559,  257,  411,   25,  318,
- /*   870 */   219,  320,   72,  325,  318,    4,  153,  235,  180,  294,
- /*   880 */   411,   52,  411,   97,  411,   94,  420,  320,  327,  218,
- /*   890 */   410,  411,   99,  501,  409,  318,  411,  100,  319,  432,
- /*   900 */   318,  261,  318,  174,  327,  392,  191,  183,  318,  116,
- /*   910 */   412,  318,  412,  416,  261,  432,  318,  411,  111,   74,
- /*   920 */    73,  429,  411,  112,  411,   17,  621,   72,  316,  317,
- /*   930 */   411,   98,  415,  411,   34,   74,   73,  480,  411,   95,
- /*   940 */   318,  412,  560,   72,  316,  317,   72,  325,  415,    4,
- /*   950 */   318,  205,  318,  294,  318,  275,    5,  318,  261,  292,
- /*   960 */   323,  320,  411,   53,  330,  417,  417,  417,  418,  419,
- /*   970 */    12,  378,  411,  113,  411,  114,  411,   26,  327,  411,
- /*   980 */    37,  417,  417,  417,  418,  419,   12,  508,  507,  432,
- /*   990 */   159,  205,  318,  458,  261,  220,  221,  222,  102,  375,
- /*  1000 */   421,  318,   23,  318,  377,  318,   82,  318,  506,   74,
- /*  1010 */    73,  202,  467,  279,  411,   38,  472,   72,  316,  317,
- /*  1020 */   280,  318,  415,  411,   27,  411,   39,  411,   40,  411,
- /*  1030 */    42,  318,  200,  476,  548,  277,  441,  246,  505,  199,
- /*  1040 */   318,  511,  201,  411,   43,  318,  512,  455,  318,   13,
- /*  1050 */   475,  318,  170,  411,   44,  417,  417,  417,  418,  419,
- /*  1060 */    12,  524,  411,   30,  498,  499,  318,  411,   31,   19,
- /*  1070 */   411,   45,  318,  411,   46,  484,  318,   13,  241,  318,
- /*  1080 */   513,  318,  125,  318,  254,  374,  276,  266,  411,   47,
- /*  1090 */   242,  291,  537,  538,  411,   48,  205,  256,  411,   32,
- /*  1100 */   258,  411,   11,  411,   50,  411,   51,  252,  350,  125,
- /*  1110 */   125,  544,  552,  125,  170,  553,  563,   89,   89,    9,
- /*  1120 */   380,  260,  579,  265,  288,  355,  186,  362,  402,  365,
- /*  1130 */   366,  268,  269,  143,  225,  270,  555,  565,  278,  281,
- /*  1140 */   282,  576,  425,  326,  427,  461,  504,  465,  551,  243,
- /*  1150 */   514,  562,  160,  391,  399,  400,  401,    8,  315,  413,
- /*  1160 */    82,  226,  333,  227,   81,  331,   57,  516,  228,  345,
- /*  1170 */    78,  209,  167,  459,  233,  210,  407,  464,  122,   83,
- /*  1180 */   336,  340,  211,  491,  496,  301,  244,  501,  103,  500,
- /*  1190 */   497,  502,  285,  518,  229,  525,  414,  286,  519,  352,
- /*  1200 */   526,  527,  533,  237,  181,  474,  239,  354,  478,  185,
- /*  1210 */   182,  356,  214,  184,   86,  535,  215,  187,  118,  361,
- /*  1220 */   547,  190,  129,  372,  373,  130,  554,  311,  131,  561,
- /*  1230 */   132,  573,  135,   96,  133,  578,  390,  139,  574,  575,
- /*  1240 */   263,  403,  138,  213,  101,  622,  623,  163,   60,  536,
- /*  1250 */   164,  422,  431,  442,  449,  445,  140,  154,  166,  450,
- /*  1260 */   451,    6,   90,   14,   13,  471,    7,  123,  158,  124,
- /*  1270 */   485,   93,  212,   84,  344,  104,  117,  251,  105,   85,
- /*  1280 */   106,  179,  242,  353,  142,   18,  534,  126,  306,  349,
- /*  1290 */   170,  127,  109,  264,  188,  107,  542,  287,  550,  128,
- /*  1300 */   192,   15,   87,   88,  194,  195,  557,  119,  196,  136,
- /*  1310 */   137,  134,   16,  564,  571,  108,  313,  203,  145,  283,
- /*  1320 */   382,  386,  900,  585,
+ /*     0 */   289,  900,  121,  586,  205,  169,    2,  435,   61,   61,
+ /*    10 */    61,   61,  435,   63,   63,   63,   63,   64,   64,   65,
+ /*    20 */    65,   65,   66,  230,  198,  299,  420,  426,   68,   63,
+ /*    30 */    63,   63,   63,   64,   64,   65,   65,   65,   66,  230,
+ /*    40 */    67,  447,   69,  151,  230,   60,   59,  294,  430,  431,
+ /*    50 */   427,  427,   62,   62,   61,   61,   61,   61,  411,   63,
+ /*    60 */    63,   63,   63,   64,   64,   65,   65,   65,   66,  230,
+ /*    70 */   289,  487,  515,  435,  570,  415,   80,   67,  435,   69,
+ /*    80 */   151,   63,   63,   63,   63,   64,   64,   65,   65,   65,
+ /*    90 */    66,  230,  569,  568,  248,  386,  420,  426,    2,  572,
+ /*   100 */    58,  115,  238,  340,  243,  341,  173,  417,  417,  417,
+ /*   110 */   570,  387,  384,  249,  289,   60,   59,  294,  430,  431,
+ /*   120 */   427,  427,   62,   62,   61,   61,   61,   61,  569,   63,
+ /*   130 */    63,   63,   63,   64,   64,   65,   65,   65,   66,  230,
+ /*   140 */   420,  426,   92,   64,   64,   65,   65,   65,   66,  230,
+ /*   150 */   245,  392,   56,  171,  566,  207,  406,  443,  208,   60,
+ /*   160 */    59,  294,  430,  431,  427,  427,   62,   62,   61,   61,
+ /*   170 */    61,   61,  205,   63,   63,   63,   63,   64,   64,   65,
+ /*   180 */    65,   65,   66,  230,  289,  368,  522,  411,  522,  111,
+ /*   190 */   378,  207,  447,  467,  223,  403,   21,  532,   21,  172,
+ /*   200 */   157,  317,   66,  230,  336,  404,  520,  443,  208,  486,
+ /*   210 */   420,  426,  146,  147,  517,  488,  489,  393,  394,  148,
+ /*   220 */   531,  224,  487,  410,   41,  407,  415,  567,  289,   60,
+ /*   230 */    59,  294,  430,  431,  427,  427,   62,   62,   61,   61,
+ /*   240 */    61,   61,  476,   63,   63,   63,   63,   64,   64,   65,
+ /*   250 */    65,   65,   66,  230,  420,  426,  491,  492,  417,  417,
+ /*   260 */   417,  155,  549,  331,  211,   65,   65,   65,   66,  230,
+ /*   270 */   546,  492,  289,   60,   59,  294,  430,  431,  427,  427,
+ /*   280 */    62,   62,   61,   61,   61,   61,  467,   63,   63,   63,
+ /*   290 */    63,   64,   64,   65,   65,   65,   66,  230,  420,  426,
+ /*   300 */   548,  299,  178,  297,  522,  342,  345,  346,  472,   67,
+ /*   310 */   460,   69,  151,  577,   21,  338,  347,   60,   59,  294,
+ /*   320 */   430,  431,  427,  427,   62,   62,   61,   61,   61,   61,
+ /*   330 */   530,   63,   63,   63,   63,   64,   64,   65,   65,   65,
+ /*   340 */    66,  230,  409,  523,   76,  289,  408,  478,  452,  482,
+ /*   350 */   392,  369,  266,  265,  283,  149,  405,  445,  521,  165,
+ /*   360 */   453,  317,  205,   67,  517,   69,  151,  529,  503,  152,
+ /*   370 */   248,  420,  426,  454,  528,  493,  161,  115,  238,  340,
+ /*   380 */   243,  341,  173,  410,   35,  494,  580,  288,   79,  249,
+ /*   390 */    60,   59,  294,  430,  431,  427,  427,   62,   62,   61,
+ /*   400 */    61,   61,   61,  411,   63,   63,   63,   63,   64,   64,
+ /*   410 */    65,   65,   65,   66,  230,  289,  393,  394,  178,  485,
+ /*   420 */   508,  342,  345,  346,  178,  296,  317,  342,  345,  346,
+ /*   430 */   366,  317,  347,   20,  317,  141,  317,  457,  347,  150,
+ /*   440 */   509,  420,  426,   22,  295,  438,  439,  435,  410,   35,
+ /*   450 */   328,  260,  472,  410,   28,  232,  410,   35,  410,   36,
+ /*   460 */    60,   59,  294,  430,  431,  427,  427,   62,   62,   61,
+ /*   470 */    61,   61,   61,  411,   63,   63,   63,   63,   64,   64,
+ /*   480 */    65,   65,   65,   66,  230,  289,  436,  481,   23,  502,
+ /*   490 */   298,  234,  380,  301,  317,  217,  317,  476,  333,  317,
+ /*   500 */   392,  317,  457,  337,  168,  157,  421,  422,  207,  231,
+ /*   510 */   457,  420,  426,  435,  313,  388,  410,   35,  410,   49,
+ /*   520 */   204,  410,   41,  410,   49,  410,    3,  197,  424,  425,
+ /*   530 */    60,   59,  294,  430,  431,  427,  427,   62,   62,   61,
+ /*   540 */    61,   61,   61,  382,   63,   63,   63,   63,   64,   64,
+ /*   550 */    65,   65,   65,   66,  230,  289,  443,  423,  357,  252,
+ /*   560 */   434,  411,  210,  292,  308,  350,  393,  394,  448,  309,
+ /*   570 */   456,  322,  438,  439,  320,    1,  433,  433,   19,  392,
+ /*   580 */   541,  420,  426,  191,  540,  375,  584,  891,  543,  891,
+ /*   590 */   584,  890,  174,  890,  472,  392,  358,  445,  323,  165,
+ /*   600 */    60,   59,  294,  430,  431,  427,  427,   62,   62,   61,
+ /*   610 */    61,   61,   61,  383,   63,   63,   63,   63,   64,   64,
+ /*   620 */    65,   65,   65,   66,  230,  289,  370,  581,    9,  452,
+ /*   630 */    91,  581,   10,  236,  409,  207,  392,  359,  408,  392,
+ /*   640 */   156,  453,  169,  362,  435,  393,  394,  320,  291,  433,
+ /*   650 */   433,  420,  426,  249,  454,  320,  327,  433,  433,  260,
+ /*   660 */   462,  393,  394,  515,  515,  545,  515,  463,  270,  289,
+ /*   670 */    60,   59,  294,  430,  431,  427,  427,   62,   62,   61,
+ /*   680 */    61,   61,   61,   82,   63,   63,   63,   63,   64,   64,
+ /*   690 */    65,   65,   65,   66,  230,  420,  426,  480,  302,  216,
+ /*   700 */   261,  303,  393,  394,  822,  393,  394,  273,  515,  271,
+ /*   710 */   435,  515,  334,  289,   60,   59,  294,  430,  431,  427,
+ /*   720 */   427,   62,   62,   61,   61,   61,   61,  233,   63,   63,
+ /*   730 */    63,   63,   64,   64,   65,   65,   65,   66,  230,  420,
+ /*   740 */   426,  247,  247,  304,  247,  318,  306,  587,  387,  384,
+ /*   750 */   395,  396,  397,  320,  219,  433,  433,  289,   60,   70,
+ /*   760 */   294,  430,  431,  427,  427,   62,   62,   61,   61,   61,
+ /*   770 */    61,  317,   63,   63,   63,   63,   64,   64,   65,   65,
+ /*   780 */    65,   66,  230,  420,  426,  476,  247,  391,  272,  247,
+ /*   790 */   539,  356,  539,  410,   29,  175,  176,  177,  162,  260,
+ /*   800 */   260,  289,    5,   59,  294,  430,  431,  427,  427,   62,
+ /*   810 */    62,   61,   61,   61,   61,  377,   63,   63,   63,   63,
+ /*   820 */    64,   64,   65,   65,   65,   66,  230,  420,  426,  392,
+ /*   830 */   311,  120,  392,  319,  205,  260,  366,  465,  254,  189,
+ /*   840 */   556,  558,  260,   75,  260,   77,  307,  376,  294,  430,
+ /*   850 */   431,  427,  427,   62,   62,   61,   61,   61,   61,  260,
+ /*   860 */    63,   63,   63,   63,   64,   64,   65,   65,   65,   66,
+ /*   870 */   230,   72,  324,  411,    4,  260,  559,  258,  293,  256,
+ /*   880 */   174,  125,  317,  560,  317,  274,  321,   72,  324,  193,
+ /*   890 */     4,  153,  621,  180,  293,  393,  394,  367,  393,  394,
+ /*   900 */   374,  218,  321,  326,  410,   24,  410,   33,  183,  317,
+ /*   910 */   428,  206,  441,  441,  447,  317,  276,  317,   55,  326,
+ /*   920 */   363,  468,  239,  411,  469,  411,  455,  411,   13,  144,
+ /*   930 */   447,  410,   53,  240,   74,   73,  291,  410,   52,  410,
+ /*   940 */    96,  116,  411,   72,  315,  316,  582,  474,  415,  170,
+ /*   950 */    74,   73,  479,  317,  507,  506,  317,  500,  416,   72,
+ /*   960 */   315,  316,   72,  324,  415,    4,  205,  317,  329,  293,
+ /*   970 */   317,  458,  483,  444,   13,  410,   94,  321,  410,   99,
+ /*   980 */   417,  417,  417,  418,  419,   12,  583,  466,  317,  410,
+ /*   990 */   100,  471,  410,  110,  326,  475,  417,  417,  417,  418,
+ /*  1000 */   419,   12,  497,  498,  512,  447,  125,  159,  244,  317,
+ /*  1010 */   410,  112,  220,  221,  222,  102,  537,  538,  317,  251,
+ /*  1020 */   317,  125,  317,  504,  505,   74,   73,  349,  202,  125,
+ /*  1030 */   278,  410,   17,  510,   72,  315,  316,  279,  524,  415,
+ /*  1040 */   410,   97,  410,   34,  410,   95,  317,  511,  544,  200,
+ /*  1050 */   125,  548,  552,  253,  170,  317,  199,  255,  317,  201,
+ /*  1060 */   553,  257,   89,  317,  259,  563,  317,   89,  410,   25,
+ /*  1070 */   317,  417,  417,  417,  418,  419,   12,  410,   54,  186,
+ /*  1080 */   410,  113,  354,  317,  264,  410,  114,  317,  410,   26,
+ /*  1090 */   361,  364,  410,   37,  579,  365,  287,  317,  267,  317,
+ /*  1100 */   143,  317,  373,  275,  265,  410,   38,  268,  290,  410,
+ /*  1110 */    27,  317,  269,  205,  555,  565,  317,  277,  317,  410,
+ /*  1120 */    39,  410,   40,  410,   42,  317,  280,  317,  281,  317,
+ /*  1130 */   576,  317,  225,  410,   43,  401,  503,  379,  410,   44,
+ /*  1140 */   410,   30,  317,  325,  440,  317,  461,  410,   31,  410,
+ /*  1150 */    45,  410,   46,  410,   47,  442,  317,  551,  317,  464,
+ /*  1160 */   317,  241,  513,  516,  410,   48,  344,  410,   32,  562,
+ /*  1170 */   160,  390,  398,  399,  400,    8,  314,  412,  410,   11,
+ /*  1180 */   410,   50,  410,   51,   82,  332,  226,   81,  330,  227,
+ /*  1190 */    57,  406,  414,  228,   78,  167,  229,  209,   83,  413,
+ /*  1200 */   459,  122,  335,  339,  500,  490,  235,  495,  242,  473,
+ /*  1210 */   237,  300,  477,  499,  496,  501,  103,  284,  246,  514,
+ /*  1220 */   518,  519,  525,  526,  527,  351,  533,  181,  285,  182,
+ /*  1230 */   184,  214,  353,  185,  535,  187,  215,  355,   86,  118,
+ /*  1240 */   360,  547,  190,  129,  139,  371,  262,  372,  130,  536,
+ /*  1250 */   554,  310,  131,  132,  573,   90,  133,  135,   93,  138,
+ /*  1260 */   578,  574,  575,  109,  213,  561,  101,  119,  389,   18,
+ /*  1270 */    98,  402,  622,  623,  163,  164,  429,  312,  432,   71,
+ /*  1280 */   449,  437,  446,  140,  154,  166,  450,    6,  451,  470,
+ /*  1290 */     7,  123,   14,   13,  124,  158,  484,  212,   84,  343,
+ /*  1300 */   104,  348,  250,  105,   85,  117,  106,  240,  179,  352,
+ /*  1310 */   142,  534,  126,  305,  170,  263,  188,  107,  286,  550,
+ /*  1320 */   127,  128,   15,  542,  192,   87,  194,   88,  195,  557,
+ /*  1330 */   196,  136,  137,  134,   16,  108,  571,  282,  381,  564,
+ /*  1340 */   203,  145,  385,  901,  585,
 };
 static const YYCODETYPE yy_lookahead[] = {
- /*     0 */    16,  218,   16,  220,  221,   21,  148,   23,   70,   71,
- /*    10 */    72,   73,  111,   75,   76,   77,   78,   79,   80,   81,
- /*    20 */    82,   83,   84,  148,  166,  167,   42,   43,   74,   75,
- /*    30 */    76,   77,   78,   79,   80,   81,   82,   83,   84,   79,
- /*    40 */    80,   81,   82,   83,   84,   61,   62,   63,   64,   65,
- /*    50 */    66,   67,   68,   69,   70,   71,   72,   73,   20,   75,
- /*    60 */    76,   77,   78,   79,   80,   81,   82,   83,   84,   16,
- /*    70 */   148,  142,   88,   22,  145,   22,   90,   91,   92,   93,
- /*    80 */    94,   95,   96,   97,  209,   19,  228,  229,  166,   23,
- /*    90 */   104,  148,  140,  141,  142,   42,   43,  145,   60,   46,
- /*   100 */   157,  158,   75,   76,   77,   78,   79,   80,   81,   82,
- /*   110 */    83,   84,   16,  162,   61,   62,   63,   64,   65,   66,
- /*   120 */    67,   68,   69,   70,   71,   72,   73,   23,   75,   76,
- /*   130 */    77,   78,   79,   80,   81,   82,   83,   84,   42,   43,
- /*   140 */    44,   90,   84,  162,   93,   94,   95,    1,    2,   19,
- /*   150 */   228,  229,  201,   23,   88,   89,  105,   61,   62,   63,
- /*   160 */    64,   65,   66,   67,   68,   69,   70,   71,   72,   73,
- /*   170 */   156,   75,   76,   77,   78,   79,   80,   81,   82,   83,
- /*   180 */    84,   16,  201,   79,   80,  148,   21,  161,   12,   59,
- /*   190 */   169,  154,   88,   89,  157,  158,  170,  148,  177,  218,
- /*   200 */    24,  220,  221,   99,  190,  156,  170,   42,   43,   79,
- /*   210 */    80,   19,   20,   37,   22,   39,  202,  203,   88,  170,
- /*   220 */   171,  207,   92,  148,   16,   49,   61,   62,   63,   64,
- /*   230 */    65,   66,   67,   68,   69,   70,   71,   72,   73,  190,
- /*   240 */    75,   76,   77,   78,   79,   80,   81,   82,   83,   84,
- /*   250 */    42,   43,   60,  143,  144,  125,  126,  127,   11,  149,
- /*   260 */   218,  219,  220,  221,  189,  148,  156,   16,   81,   61,
- /*   270 */    62,   63,   64,   65,   66,   67,   68,   69,   70,   71,
- /*   280 */    72,   73,  148,   75,   76,   77,   78,   79,   80,   81,
- /*   290 */    82,   83,   84,   42,   43,  108,   49,   23,  159,  112,
- /*   300 */   190,  162,  163,  164,  170,  171,  189,  162,   59,  165,
- /*   310 */   166,  167,   61,   62,   63,   64,   65,   66,   67,   68,
- /*   320 */    69,   70,   71,   72,   73,  215,   75,   76,   77,   78,
- /*   330 */    79,   80,   81,   82,   83,   84,  148,   88,   16,   16,
- /*   340 */   132,   92,  111,   20,  210,  211,  201,  100,  101,  102,
- /*   350 */   170,  218,  242,  220,  221,  124,   23,  240,  111,   42,
- /*   360 */    43,  148,   88,   89,   90,   42,   43,   93,   94,   95,
- /*   370 */   177,  178,  239,  229,  125,  126,  127,  184,   21,  105,
- /*   380 */    23,   64,   65,  132,   61,   62,   63,   64,   65,   66,
- /*   390 */    67,   68,   69,   70,   71,   72,   73,  209,   75,   76,
- /*   400 */    77,   78,   79,   80,   81,   82,   83,   84,   16,   92,
- /*   410 */    79,   80,   20,   91,   92,   93,   94,   95,   96,   97,
- /*   420 */   148,   88,   89,  182,  148,   23,  104,  214,  148,   30,
- /*   430 */   168,  169,  156,  191,   42,   43,  165,  166,  167,  177,
- /*   440 */   186,  187,  170,  171,  148,   88,  170,  171,  115,   50,
- /*   450 */   170,  171,  148,   61,   62,   63,   64,   65,   66,   67,
- /*   460 */    68,   69,   70,   71,   72,   73,  190,   75,   76,   77,
- /*   470 */    78,   79,   80,   81,   82,   83,   84,   16,  148,   90,
- /*   480 */    16,   20,   93,   94,   95,  213,  148,  157,  158,  213,
- /*   490 */    88,   89,  148,  213,  105,   20,  148,  225,  148,   23,
- /*   500 */   229,  225,  103,   42,   43,  225,   19,   43,  170,  171,
- /*   510 */    23,  181,  182,  209,  170,  171,  182,  115,  170,  171,
- /*   520 */   170,  171,   61,   62,   63,   64,   65,   66,   67,   68,
- /*   530 */    69,   70,   71,   72,   73,  148,   75,   76,   77,   78,
- /*   540 */    79,   80,   81,   82,   83,   84,   16,   20,  148,   12,
- /*   550 */    20,   81,   82,   83,   84,   79,   20,  170,  171,  211,
- /*   560 */   222,   24,   19,   99,   88,   89,   23,  217,  104,  225,
- /*   570 */   170,  171,   42,   43,   37,   88,   39,   19,   18,   21,
- /*   580 */    19,   20,  107,   22,  109,  110,   23,  162,  163,  164,
- /*   590 */    23,   61,   62,   63,   64,   65,   66,   67,   68,   69,
- /*   600 */    70,   71,   72,   73,  217,   75,   76,   77,   78,   79,
- /*   610 */    80,   81,   82,   83,   84,   16,   56,  148,   14,   25,
- /*   620 */    21,   60,  151,   29,   22,  148,  193,  148,    0,    1,
- /*   630 */     2,   88,   89,  200,  107,   41,  109,  110,  187,  170,
- /*   640 */   171,   42,   43,  107,   81,  109,  110,  170,  171,  170,
- /*   650 */   171,   88,   89,  148,   94,   88,   89,   53,   16,   55,
- /*   660 */    61,   62,   63,   64,   65,   66,   67,   68,   69,   70,
- /*   670 */    71,   72,   73,  148,   75,   76,   77,   78,   79,   80,
- /*   680 */    81,   82,   83,   84,   42,   43,  186,  187,  183,    7,
- /*   690 */     8,    9,  245,  246,  134,  170,  171,  226,  148,  148,
- /*   700 */   156,   16,  231,   61,   62,   63,   64,   65,   66,   67,
- /*   710 */    68,   69,   70,   71,   72,   73,  114,   75,   76,   77,
- /*   720 */    78,   79,   80,   81,   82,   83,   84,   42,   43,  100,
- /*   730 */   101,  102,  227,  183,  190,   22,  202,  203,  134,  148,
- /*   740 */   148,  148,  243,  244,   16,  156,   61,   62,   63,   64,
- /*   750 */    65,   66,   67,   68,   69,   70,   71,   72,   73,  215,
- /*   760 */    75,   76,   77,   78,   79,   80,   81,   82,   83,   84,
- /*   770 */    42,   43,  125,  126,  183,  183,  183,  227,  227,  190,
- /*   780 */   107,  237,  109,  110,  100,  101,  102,   16,  148,  148,
- /*   790 */    62,   63,   64,   65,   66,   67,   68,   69,   70,   71,
- /*   800 */    72,   73,   89,   75,   76,   77,   78,   79,   80,   81,
- /*   810 */    82,   83,   84,   42,   43,   27,  148,   22,  227,  227,
- /*   820 */   227,   23,   34,  148,  148,   14,  148,  156,  115,  189,
- /*   830 */   189,  131,   19,  133,   63,   64,   65,   66,   67,   68,
- /*   840 */    69,   70,   71,   72,   73,  148,   75,   76,   77,   78,
- /*   850 */    79,   80,   81,   82,   83,   84,   16,   17,  148,   19,
- /*   860 */   148,  190,  148,   23,   53,  189,   55,  170,  171,  148,
- /*   870 */   146,   31,   16,   17,  148,   19,  156,  148,  156,   23,
- /*   880 */   170,  171,  170,  171,  170,  171,   88,   31,   48,  214,
- /*   890 */   108,  170,  171,   98,  112,  148,  170,  171,  148,   59,
- /*   900 */   148,  148,  148,   43,   48,  148,   22,  156,  148,  148,
- /*   910 */   190,  148,  190,  148,  148,   59,  148,  170,  171,   79,
- /*   920 */    80,  162,  170,  171,  170,  171,  113,   87,   88,   89,
- /*   930 */   170,  171,   92,  170,  171,   79,   80,   81,  170,  171,
- /*   940 */   148,  190,  189,   87,   88,   89,   16,   17,   92,   19,
- /*   950 */   148,  111,  148,   23,  148,  189,  192,  148,  148,   99,
- /*   960 */    16,   31,  170,  171,  148,  125,  126,  127,  128,  129,
- /*   970 */   130,   91,  170,  171,  170,  171,  170,  171,   48,  170,
- /*   980 */   171,  125,  126,  127,  128,  129,  130,   91,   92,   59,
- /*   990 */     5,  111,  148,  148,  148,   10,   11,   12,   13,  189,
- /*  1000 */    20,  148,   22,  148,  124,  148,  122,  148,  179,   79,
- /*  1010 */    80,   26,  204,   28,  170,  171,  148,   87,   88,   89,
- /*  1020 */    35,  148,   92,  170,  171,  170,  171,  170,  171,  170,
- /*  1030 */   171,  148,   47,  148,   49,  189,   92,  148,  148,   54,
- /*  1040 */   148,  179,   57,  170,  171,  148,  179,   20,  148,   22,
- /*  1050 */    20,  148,   22,  170,  171,  125,  126,  127,  128,  129,
- /*  1060 */   130,  148,  170,  171,    7,    8,  148,  170,  171,   19,
- /*  1070 */   170,  171,  148,  170,  171,   20,  148,   22,   92,  148,
- /*  1080 */    20,  148,   22,  148,  148,  100,  101,  102,  170,  171,
- /*  1090 */   104,  106,   51,   52,  170,  171,  111,  148,  170,  171,
- /*  1100 */   148,  170,  171,  170,  171,  170,  171,   20,   20,   22,
- /*  1110 */    22,   20,   20,   22,   22,   20,   20,   22,   22,   69,
- /*  1120 */   135,  148,   20,  148,   22,  234,  233,  148,  150,  148,
- /*  1130 */   148,  148,  148,  192,  194,  148,  148,  148,  148,  148,
- /*  1140 */   148,  148,  230,  224,  230,  173,  178,  173,  195,  173,
- /*  1150 */   173,  195,    6,  147,  147,  147,  147,   22,  155,  190,
- /*  1160 */   122,  195,  119,  196,  120,  117,  121,  173,  197,  174,
- /*  1170 */   131,  223,  113,  153,   97,  212,   23,  161,  153,   99,
- /*  1180 */   116,   99,  212,  172,  172,   40,  172,   98,   19,  174,
- /*  1190 */   180,  172,  175,  161,  198,  172,  199,  175,  180,   15,
- /*  1200 */   172,  172,  153,  205,  152,  206,  205,  153,  206,  153,
- /*  1210 */   152,   38,  212,  152,  131,  153,  212,  152,   61,  153,
- /*  1220 */   185,  185,   19,  153,   15,  188,  195,  153,  188,  195,
- /*  1230 */   188,   33,  185,  160,  188,  138,    1,  216,  153,  153,
- /*  1240 */   235,   20,  216,  176,  176,  113,  113,  113,   19,  236,
- /*  1250 */   113,   20,   20,   92,   11,  108,   19,   19,   22,   20,
- /*  1260 */    20,  118,  238,   22,   22,  115,  118,   19,  113,   20,
- /*  1270 */    20,  238,   44,   19,   44,   19,   32,   20,   19,   19,
- /*  1280 */    19,   96,  104,   16,   21,  232,   17,   99,   36,   44,
- /*  1290 */    22,   45,  241,  134,   99,   19,   45,    5,    1,  103,
- /*  1300 */   123,   19,   69,   69,  114,   14,   17,  244,  116,  103,
- /*  1310 */   123,  114,   19,  124,   20,   14,  247,  136,   19,  137,
- /*  1320 */    58,    3,  248,    4,
+ /*     0 */    16,  140,  141,  142,  111,   21,  145,   23,   70,   71,
+ /*    10 */    72,   73,   23,   75,   76,   77,   78,   79,   80,   81,
+ /*    20 */    82,   83,   84,   85,  156,   16,   42,   43,   74,   75,
+ /*    30 */    76,   77,   78,   79,   80,   81,   82,   83,   84,   85,
+ /*    40 */   217,   59,  219,  220,   85,   61,   62,   63,   64,   65,
+ /*    50 */    66,   67,   68,   69,   70,   71,   72,   73,  190,   75,
+ /*    60 */    76,   77,   78,   79,   80,   81,   82,   83,   84,   85,
+ /*    70 */    16,   89,  148,   89,  148,   93,   22,  217,   89,  219,
+ /*    80 */   220,   75,   76,   77,   78,   79,   80,   81,   82,   83,
+ /*    90 */    84,   85,  166,  167,   85,  142,   42,   43,  145,  239,
+ /*   100 */    46,   92,   93,   94,   95,   96,   97,  125,  126,  127,
+ /*   110 */   148,    1,    2,  104,   16,   61,   62,   63,   64,   65,
+ /*   120 */    66,   67,   68,   69,   70,   71,   72,   73,  166,   75,
+ /*   130 */    76,   77,   78,   79,   80,   81,   82,   83,   84,   85,
+ /*   140 */    42,   43,   44,   79,   80,   81,   82,   83,   84,   85,
+ /*   150 */   226,   23,   19,  156,  228,  229,   23,   79,   80,   61,
+ /*   160 */    62,   63,   64,   65,   66,   67,   68,   69,   70,   71,
+ /*   170 */    72,   73,  111,   75,   76,   77,   78,   79,   80,   81,
+ /*   180 */    82,   83,   84,   85,   16,  124,  148,  190,  148,   21,
+ /*   190 */   228,  229,   59,   22,  154,  157,  158,  157,  158,  202,
+ /*   200 */   203,  148,   84,   85,  207,  168,  169,   79,   80,  170,
+ /*   210 */    42,   43,   79,   80,  177,  170,  161,   89,   90,  181,
+ /*   220 */   182,  191,   89,  170,  171,  170,   93,   99,   16,   61,
+ /*   230 */    62,   63,   64,   65,   66,   67,   68,   69,   70,   71,
+ /*   240 */    72,   73,  148,   75,   76,   77,   78,   79,   80,   81,
+ /*   250 */    82,   83,   84,   85,   42,   43,  186,  187,  125,  126,
+ /*   260 */   127,   90,   11,  210,  211,   81,   82,   83,   84,   85,
+ /*   270 */   186,  187,   16,   61,   62,   63,   64,   65,   66,   67,
+ /*   280 */    68,   69,   70,   71,   72,   73,  115,   75,   76,   77,
+ /*   290 */    78,   79,   80,   81,   82,   83,   84,   85,   42,   43,
+ /*   300 */    49,   16,   91,  209,  148,   94,   95,   96,  162,  217,
+ /*   310 */   218,  219,  220,  157,  158,   81,  105,   61,   62,   63,
+ /*   320 */    64,   65,   66,   67,   68,   69,   70,   71,   72,   73,
+ /*   330 */   182,   75,   76,   77,   78,   79,   80,   81,   82,   83,
+ /*   340 */    84,   85,  108,  182,  132,   16,  112,  201,   12,   20,
+ /*   350 */    23,  100,  101,  102,  159,   22,  169,  162,  163,  164,
+ /*   360 */    24,  148,  111,  217,  177,  219,  220,  177,  178,  156,
+ /*   370 */    85,   42,   43,   37,  184,   39,   91,   92,   93,   94,
+ /*   380 */    95,   96,   97,  170,  171,   49,  245,  246,  132,  104,
+ /*   390 */    61,   62,   63,   64,   65,   66,   67,   68,   69,   70,
+ /*   400 */    71,   72,   73,  190,   75,   76,   77,   78,   79,   80,
+ /*   410 */    81,   82,   83,   84,   85,   16,   89,   90,   91,   20,
+ /*   420 */    30,   94,   95,   96,   91,  212,  148,   94,   95,   96,
+ /*   430 */   148,  148,  105,   19,  148,   21,  148,  224,  105,  156,
+ /*   440 */    50,   42,   43,   19,  165,  166,  167,   23,  170,  171,
+ /*   450 */   187,  148,  162,  170,  171,  148,  170,  171,  170,  171,
+ /*   460 */    61,   62,   63,   64,   65,   66,   67,   68,   69,   70,
+ /*   470 */    71,   72,   73,  190,   75,   76,   77,   78,   79,   80,
+ /*   480 */    81,   82,   83,   84,   85,   16,   20,   20,   22,   20,
+ /*   490 */   212,  201,  189,  103,  148,  213,  148,  148,  212,  148,
+ /*   500 */    23,  148,  224,  148,  202,  203,   42,   43,  229,  221,
+ /*   510 */   224,   42,   43,   89,  143,  144,  170,  171,  170,  171,
+ /*   520 */   149,  170,  171,  170,  171,  170,  171,  156,   64,   65,
+ /*   530 */    61,   62,   63,   64,   65,   66,   67,   68,   69,   70,
+ /*   540 */    71,   72,   73,  240,   75,   76,   77,   78,   79,   80,
+ /*   550 */    81,   82,   83,   84,   85,   16,   79,   93,  209,   20,
+ /*   560 */    20,  190,  211,  151,  216,   16,   89,   90,   20,  216,
+ /*   570 */   224,  165,  166,  167,  107,   19,  109,  110,   19,   23,
+ /*   580 */    25,   42,   43,   22,   29,  214,   19,   20,   18,   22,
+ /*   590 */    19,   20,   43,   22,  162,   23,   41,  162,  163,  164,
+ /*   600 */    61,   62,   63,   64,   65,   66,   67,   68,   69,   70,
+ /*   610 */    71,   72,   73,  242,   75,   76,   77,   78,   79,   80,
+ /*   620 */    81,   82,   83,   84,   85,   16,   56,   60,   69,   12,
+ /*   630 */    21,   60,   19,  201,  108,  229,   23,  225,  112,   23,
+ /*   640 */   148,   24,   21,  231,   23,   89,   90,  107,   99,  109,
+ /*   650 */   110,   42,   43,  104,   37,  107,   39,  109,  110,  148,
+ /*   660 */    27,   89,   90,  148,  148,   95,  148,   34,   14,   16,
+ /*   670 */    61,   62,   63,   64,   65,   66,   67,   68,   69,   70,
+ /*   680 */    71,   72,   73,  122,   75,   76,   77,   78,   79,   80,
+ /*   690 */    81,   82,   83,   84,   85,   42,   43,   81,  183,  183,
+ /*   700 */   189,  183,   89,   90,  134,   89,   90,   53,  148,   55,
+ /*   710 */    89,  148,  148,   16,   61,   62,   63,   64,   65,   66,
+ /*   720 */    67,   68,   69,   70,   71,   72,   73,  148,   75,   76,
+ /*   730 */    77,   78,   79,   80,   81,   82,   83,   84,   85,   42,
+ /*   740 */    43,  226,  226,  183,  226,  148,  183,    0,    1,    2,
+ /*   750 */     7,    8,    9,  107,  146,  109,  110,   16,   61,   62,
+ /*   760 */    63,   64,   65,   66,   67,   68,   69,   70,   71,   72,
+ /*   770 */    73,  148,   75,   76,   77,   78,   79,   80,   81,   82,
+ /*   780 */    83,   84,   85,   42,   43,  148,  226,  148,  134,  226,
+ /*   790 */   100,  101,  102,  170,  171,  100,  101,  102,   19,  148,
+ /*   800 */   148,   16,  192,   62,   63,   64,   65,   66,   67,   68,
+ /*   810 */    69,   70,   71,   72,   73,   92,   75,   76,   77,   78,
+ /*   820 */    79,   80,   81,   82,   83,   84,   85,   42,   43,   23,
+ /*   830 */   243,  244,   23,   16,  111,  148,  148,   22,   14,  156,
+ /*   840 */   189,  189,  148,  131,  148,  133,  209,  124,   63,   64,
+ /*   850 */    65,   66,   67,   68,   69,   70,   71,   72,   73,  148,
+ /*   860 */    75,   76,   77,   78,   79,   80,   81,   82,   83,   84,
+ /*   870 */    85,   16,   17,  190,   19,  148,  189,   53,   23,   55,
+ /*   880 */    43,   22,  148,  189,  148,  189,   31,   16,   17,  156,
+ /*   890 */    19,  156,  113,  156,   23,   89,   90,  214,   89,   90,
+ /*   900 */   189,  213,   31,   48,  170,  171,  170,  171,  156,  148,
+ /*   910 */    93,  193,  125,  126,   59,  148,  189,  148,  200,   48,
+ /*   920 */   237,  115,   93,  190,  115,  190,   20,  190,   22,  114,
+ /*   930 */    59,  170,  171,  104,   79,   80,   99,  170,  171,  170,
+ /*   940 */   171,  148,  190,   88,   89,   90,   20,   20,   93,   22,
+ /*   950 */    79,   80,   81,  148,   92,   93,  148,   98,  148,   88,
+ /*   960 */    89,   90,   16,   17,   93,   19,  111,  148,  148,   23,
+ /*   970 */   148,  148,   20,  162,   22,  170,  171,   31,  170,  171,
+ /*   980 */   125,  126,  127,  128,  129,  130,   60,  204,  148,  170,
+ /*   990 */   171,  148,  170,  171,   48,  148,  125,  126,  127,  128,
+ /*  1000 */   129,  130,    7,    8,   20,   59,   22,    5,  148,  148,
+ /*  1010 */   170,  171,   10,   11,   12,   13,   51,   52,  148,   20,
+ /*  1020 */   148,   22,  148,  148,  179,   79,   80,   20,   26,   22,
+ /*  1030 */    28,  170,  171,  179,   88,   89,   90,   35,  148,   93,
+ /*  1040 */   170,  171,  170,  171,  170,  171,  148,  179,   20,   47,
+ /*  1050 */    22,   49,   20,  148,   22,  148,   54,  148,  148,   57,
+ /*  1060 */    20,  148,   22,  148,  148,   20,  148,   22,  170,  171,
+ /*  1070 */   148,  125,  126,  127,  128,  129,  130,  170,  171,  233,
+ /*  1080 */   170,  171,  234,  148,  148,  170,  171,  148,  170,  171,
+ /*  1090 */   148,  148,  170,  171,   20,  148,   22,  148,  148,  148,
+ /*  1100 */   192,  148,  100,  101,  102,  170,  171,  148,  106,  170,
+ /*  1110 */   171,  148,  148,  111,  148,  148,  148,  148,  148,  170,
+ /*  1120 */   171,  170,  171,  170,  171,  148,  148,  148,  148,  148,
+ /*  1130 */   148,  148,  194,  170,  171,  150,  178,  135,  170,  171,
+ /*  1140 */   170,  171,  148,  223,  230,  148,  173,  170,  171,  170,
+ /*  1150 */   171,  170,  171,  170,  171,  230,  148,  195,  148,  173,
+ /*  1160 */   148,  173,  173,  173,  170,  171,  174,  170,  171,  195,
+ /*  1170 */     6,  147,  147,  147,  147,   22,  155,  190,  170,  171,
+ /*  1180 */   170,  171,  170,  171,  122,  119,  195,  120,  117,  196,
+ /*  1190 */   121,   23,  161,  197,  131,  113,  198,  222,   99,  199,
+ /*  1200 */   153,  153,  116,   99,   98,  172,  205,  172,  172,  206,
+ /*  1210 */   205,   40,  206,  174,  180,  172,   19,  175,   85,  161,
+ /*  1220 */   161,  180,  172,  172,  172,   15,  153,  152,  175,  152,
+ /*  1230 */   152,  227,  153,  153,  153,  152,  227,   38,  131,   61,
+ /*  1240 */   153,  185,  185,   19,  215,  153,  235,   15,  188,  236,
+ /*  1250 */   195,  153,  188,  188,   33,  238,  188,  185,  238,  215,
+ /*  1260 */   138,  153,  153,  241,  176,  195,  176,  244,    1,  232,
+ /*  1270 */   160,   20,  113,  113,  113,  113,   93,  247,  108,   19,
+ /*  1280 */    11,   20,   20,   19,   19,   22,   20,  118,   20,  115,
+ /*  1290 */   118,   19,   22,   22,   20,  113,   20,   44,   19,   44,
+ /*  1300 */    19,   44,   20,   19,   19,   32,   19,  104,   97,   16,
+ /*  1310 */    21,   17,   99,   36,   22,  134,   99,   19,    5,    1,
+ /*  1320 */    45,  103,   19,   45,  123,   69,  114,   69,   14,   17,
+ /*  1330 */   116,  103,  123,  114,   19,   14,   20,  137,   58,  124,
+ /*  1340 */   136,   19,    3,  248,    4,
 };
-#define YY_SHIFT_USE_DFLT (-100)
-#define YY_SHIFT_MAX 386
+#define YY_SHIFT_USE_DFLT (-108)
+#define YY_SHIFT_MAX 385
 static const short yy_shift_ofst[] = {
- /*     0 */   146,  840,  985,  -16,  840,  930,  930,  930,  274,  104,
- /*    10 */   -99,   96,  930,  930,  930,  930,  930,  -46,  247,  476,
- /*    20 */   567,  798,  331,  331,   53,  165,  208,  251,  323,  392,
- /*    30 */   461,  530,  599,  642,  685,  642,  642,  642,  642,  642,
- /*    40 */   642,  642,  642,  642,  642,  642,  642,  642,  642,  642,
- /*    50 */   642,  642,  728,  771,  771,  856,  930,  930,  930,  930,
- /*    60 */   930,  930,  930,  930,  930,  930,  930,  930,  930,  930,
- /*    70 */   930,  930,  930,  930,  930,  930,  930,  930,  930,  930,
- /*    80 */   930,  930,  930,  930,  930,  930,  930,  930,  930,  930,
- /*    90 */   930,  930,  930,  930,  -62,  -62,  -14,   27,   27,  -40,
- /*   100 */   470,  464,  560,  567,  567,  567,  567,  567,  567,  567,
- /*   110 */   798,   58, -100, -100, -100,  130,  322,  176,  176,  192,
- /*   120 */   561,  628,  357,  567,  357,  567,  567,  567,  567,  567,
- /*   130 */   567,  567,  567,  567,  567,  567,  567,  567,  880,  231,
- /*   140 */   -99,  -99,  -99, -100, -100, -100,  249,  249,   51,  389,
- /*   150 */   475,   66,  527,  536,  537,  333,  402,  543,  563,  682,
- /*   160 */   567,  567,  187,  567,  567,  487,  567,  567,  713,  567,
- /*   170 */   567,  673,  713,  567,  567,  399,  399,  399,  567,  567,
- /*   180 */   673,  567,  567,  673,  567,  594,  629,  567,  567,  673,
- /*   190 */   567,  567,  567,  673,  567,  567,  567,  673,  673,  567,
- /*   200 */   567,  567,  567,  567,  558,  782,  602,  647,  647,  700,
- /*   210 */   788,  788,  788,  860,  788,  788,  795,  884,  884, 1146,
- /*   220 */  1146, 1146, 1146, 1135,  -99, 1038, 1043, 1044, 1048, 1045,
- /*   230 */  1039, 1059, 1077, 1153, 1077, 1059, 1080, 1064, 1080, 1064,
- /*   240 */  1082, 1082, 1145, 1082, 1089, 1082, 1169, 1077, 1077, 1153,
- /*   250 */  1145, 1082, 1082, 1082, 1169, 1184, 1059, 1184, 1059, 1184,
- /*   260 */  1059, 1059, 1173, 1083, 1184, 1059, 1157, 1157, 1203, 1038,
- /*   270 */  1059, 1209, 1209, 1209, 1209, 1038, 1157, 1203, 1059, 1198,
- /*   280 */  1198, 1059, 1059, 1097, -100, -100, -100, -100, -100, -100,
- /*   290 */   317,  604,  684,  811,  813,  980,  944, 1027, 1030, 1055,
- /*   300 */   986, 1057,  896, 1060, 1087, 1088, 1041, 1091, 1092, 1095,
- /*   310 */  1096, 1050, 1102,   38, 1235, 1221, 1132, 1133, 1134, 1137,
- /*   320 */  1229, 1231, 1232, 1161, 1147, 1237, 1243, 1238, 1239, 1236,
- /*   330 */  1240, 1143, 1241, 1148, 1242, 1150, 1248, 1249, 1155, 1250,
- /*   340 */  1244, 1228, 1254, 1230, 1256, 1257, 1259, 1260, 1245, 1261,
- /*   350 */  1185, 1178, 1267, 1269, 1263, 1188, 1252, 1246, 1268, 1251,
- /*   360 */  1159, 1195, 1276, 1292, 1297, 1196, 1233, 1234, 1177, 1282,
- /*   370 */  1190, 1291, 1192, 1289, 1197, 1206, 1187, 1293, 1189, 1294,
- /*   380 */  1301, 1262, 1181, 1182, 1299, 1318, 1319,
+ /*     0 */   110,  855, 1002,  -16,  855,  946,  946,  946,  327,  128,
+ /*    10 */  -107,   98,  946,  946,  946,  946,  946,  -46,  251,  477,
+ /*    20 */   572,  -11,   78,   78,   54,  168,  212,  256,  329,  399,
+ /*    30 */   469,  539,  609,  653,  697,  653,  653,  653,  653,  653,
+ /*    40 */   653,  653,  653,  653,  653,  653,  653,  653,  653,  653,
+ /*    50 */   653,  653,  741,  785,  785,  871,  946,  946,  946,  946,
+ /*    60 */   946,  946,  946,  946,  946,  946,  946,  946,  946,  946,
+ /*    70 */   946,  946,  946,  946,  946,  946,  946,  946,  946,  946,
+ /*    80 */   946,  946,  946,  946,  946,  946,  946,  946,  946,  946,
+ /*    90 */   946,  946,  946,  946,  -62,  -62,    6,    6,  285,   64,
+ /*   100 */   184,  549,  570,  572,  572,  572,  572,  572,  572,  572,
+ /*   110 */   118,  -11,  -41, -108, -108,  133,    9,  336,  336,  567,
+ /*   120 */   571,  747,  621,  572,  621,  572,  572,  572,  572,  572,
+ /*   130 */   572,  572,  572,  572,  572,  572,  572,  572,  723,   61,
+ /*   140 */  -107, -107, -107, -108, -108, -108,  -18,  -18,  333,  211,
+ /*   150 */   467,  556,  540,  548,  617,  806,  809,  613,  616,  743,
+ /*   160 */   572,  572,  234,  572,  572,  424,  572,  572,  171,  572,
+ /*   170 */   572,  646,  171,  572,  572,  390,  390,  390,  572,  572,
+ /*   180 */   646,  572,  572,  646,  572,  555,  690,  572,  572,  646,
+ /*   190 */   572,  572,  572,  646,  572,  572,  572,  646,  646,  572,
+ /*   200 */   572,  572,  572,  572,  414,  526,  815,  787,  787,  712,
+ /*   210 */   633,  633,  633,  837,  633,  633,  859,  561,  561, 1164,
+ /*   220 */  1164, 1164, 1164, 1153, -107, 1062, 1066, 1067, 1071, 1069,
+ /*   230 */  1168, 1063, 1082, 1082, 1099, 1086, 1099, 1086, 1104, 1104,
+ /*   240 */  1171, 1104, 1106, 1104, 1197, 1133, 1168, 1133, 1168, 1171,
+ /*   250 */  1104, 1104, 1104, 1197, 1210, 1082, 1210, 1082, 1210, 1082,
+ /*   260 */  1082, 1199, 1107, 1210, 1082, 1178, 1178, 1224, 1062, 1082,
+ /*   270 */  1232, 1232, 1232, 1232, 1062, 1178, 1224, 1082, 1221, 1221,
+ /*   280 */  1082, 1082, 1122, -108, -108, -108, -108, -108, -108,  464,
+ /*   290 */   654,  695,  824,  779,  817,  466,  906,  927,  952,  829,
+ /*   300 */   995,  862,  984,  999, 1007,  965, 1028, 1032, 1040, 1045,
+ /*   310 */   559, 1074,  926, 1267, 1251, 1159, 1160, 1161, 1162, 1183,
+ /*   320 */  1170, 1260, 1261, 1262, 1264, 1269, 1265, 1266, 1263, 1268,
+ /*   330 */  1169, 1270, 1172, 1271, 1174, 1272, 1274, 1182, 1276, 1273,
+ /*   340 */  1253, 1279, 1255, 1281, 1282, 1284, 1285, 1257, 1287, 1211,
+ /*   350 */  1203, 1293, 1294, 1289, 1213, 1277, 1275, 1292, 1278, 1181,
+ /*   360 */  1217, 1298, 1313, 1318, 1218, 1256, 1258, 1201, 1303, 1212,
+ /*   370 */  1314, 1214, 1312, 1219, 1228, 1209, 1315, 1215, 1316, 1321,
+ /*   380 */  1280, 1204, 1200, 1322, 1339, 1340,
 };
-#define YY_REDUCE_USE_DFLT (-218)
-#define YY_REDUCE_MAX 289
+#define YY_REDUCE_USE_DFLT (-178)
+#define YY_REDUCE_MAX 288
 static const short yy_reduce_ofst[] = {
- /*     0 */   -48,  276,  110,  -19,   49,  272,  134,  280,  330, -142,
- /*    10 */    14,  133,  338,  344,  348,  350,  387,   42,  544,  -78,
- /*    20 */    37,  139,  144,  271, -217, -217, -217, -217, -217, -217,
- /*    30 */  -217, -217, -217, -217, -217, -217, -217, -217, -217, -217,
- /*    40 */  -217, -217, -217, -217, -217, -217, -217, -217, -217, -217,
- /*    50 */  -217, -217, -217, -217, -217,  400,  469,  477,  479,  525,
- /*    60 */   697,  710,  712,  714,  721,  726,  747,  752,  754,  760,
- /*    70 */   763,  768,  792,  802,  804,  806,  809,  844,  853,  855,
- /*    80 */   857,  859,  873,  883,  892,  897,  900,  903,  918,  924,
- /*    90 */   928,  931,  933,  935, -217, -217,  262, -217, -217, -217,
- /*   100 */  -217,  193,  471,  505,  550,  591,  592,  593,  117,  -57,
- /*   110 */   425, -217, -217, -217, -217,   26,   21,  254,  500,  447,
- /*   120 */   447,  -71,  -49, -125,  145,  551,   75,  188,  213,  304,
- /*   130 */   640,  641,  676,  753,  766,  810,  675,  846,  589,  671,
- /*   140 */   720,  722,  751,  433,  534,  499,   36,  180,  241,  334,
- /*   150 */   242,  296,  242,  242,  451,  668,  678,  729,  750,  724,
- /*   160 */   757,  761,  764,  750,  765,  759,  816,  845,  808,  868,
- /*   170 */   885,  242,  808,  889,  890,  829,  862,  867,  913,  936,
- /*   180 */   242,  949,  952,  242,  973,  893,  891,  975,  979,  242,
- /*   190 */   981,  982,  983,  242,  984,  987,  988,  242,  242,  989,
- /*   200 */   990,  991,  992,  993,  978,  941,  940,  912,  914,  919,
- /*   210 */   972,  974,  976,  968,  977,  994,  995,  953,  956, 1006,
- /*   220 */  1007, 1008, 1009, 1003,  969,  966,  967,  971,  996,  997,
- /*   230 */   948, 1020,  963, 1016,  970, 1025,  998,  999, 1001, 1002,
- /*   240 */  1011, 1012, 1010, 1014, 1015, 1019, 1017, 1000, 1004, 1032,
- /*   250 */  1018, 1023, 1028, 1029, 1022, 1052, 1049, 1058, 1054, 1061,
- /*   260 */  1056, 1062, 1005, 1013, 1065, 1066, 1035, 1036, 1021, 1031,
- /*   270 */  1070, 1037, 1040, 1042, 1046, 1034, 1047, 1026, 1074, 1024,
- /*   280 */  1033, 1085, 1086, 1051, 1073, 1067, 1068, 1053, 1063, 1069,
+ /*     0 */  -139,  213,  371,  146,  283,  278,   53,  286,   38,  -74,
+ /*    10 */    -3, -140,  288,  346,  351,  348,  353,   92,  683,  -38,
+ /*    20 */    40,  195,  279,  406, -177, -177, -177, -177, -177, -177,
+ /*    30 */  -177, -177, -177, -177, -177, -177, -177, -177, -177, -177,
+ /*    40 */  -177, -177, -177, -177, -177, -177, -177, -177, -177, -177,
+ /*    50 */  -177, -177, -177, -177, -177,  355,  623,  734,  736,  761,
+ /*    60 */   767,  769,  805,  808,  819,  822,  840,  861,  870,  872,
+ /*    70 */   874,  898,  907,  910,  915,  918,  922,  935,  939,  949,
+ /*    80 */   951,  953,  963,  968,  970,  977,  979,  981,  983,  994,
+ /*    90 */   997, 1008, 1010, 1012, -177, -177, -177, -177,   37, -177,
+ /*   100 */  -177,  190,  412,  515,  516,  518,  560,  563,  303,  156,
+ /*   110 */  -177,  435, -177, -177, -177,   55,  187,   70,   84,  141,
+ /*   120 */   141,  -47,  290,   94,  432,  -76,  511,  349,  282,  637,
+ /*   130 */   651,  652,  687,  694,  696,  711,  688,  727, -132,  733,
+ /*   140 */   735,  737,  752,  718,  302,  587,   39,   45,  148,  161,
+ /*   150 */    30,  307,   30,   30,  263,  492,  564,  579,  597,  608,
+ /*   160 */   639,  793,  610,  597,  810,  811,  820,  823,  783,  843,
+ /*   170 */   847,   30,  783,  860,  875,  845,  854,  868,  890,  905,
+ /*   180 */    30,  909,  913,   30,  916,  846,  848,  936,  942,   30,
+ /*   190 */   943,  947,  950,   30,  959,  964,  966,   30,   30,  967,
+ /*   200 */   969,  978,  980,  982,  985,  908,  938,  914,  925,  920,
+ /*   210 */   973,  986,  988,  958,  989,  990,  992,  962,  974, 1024,
+ /*   220 */  1025, 1026, 1027, 1021,  987,  991,  993,  996,  998, 1000,
+ /*   230 */  1031,  975, 1047, 1048, 1001, 1003, 1005, 1006, 1033, 1035,
+ /*   240 */  1034, 1036, 1039, 1043, 1042, 1004, 1058, 1009, 1059, 1041,
+ /*   250 */  1050, 1051, 1052, 1053, 1075, 1073, 1077, 1079, 1078, 1080,
+ /*   260 */  1081, 1011, 1013, 1083, 1087, 1056, 1057, 1029, 1055, 1092,
+ /*   270 */  1060, 1064, 1065, 1068, 1070, 1072, 1044, 1098, 1017, 1020,
+ /*   280 */  1108, 1109, 1022, 1110, 1088, 1090, 1037, 1023, 1030,
 };
 static const YYACTIONTYPE yy_default[] = {
- /*     0 */   593,  820,  898,  708,  898,  820,  898,  820,  898,  843,
- /*    10 */   712,  872,  816,  820,  898,  898,  898,  791,  898,  843,
- /*    20 */   898,  624,  843,  843,  743,  898,  898,  898,  898,  898,
- /*    30 */   898,  898,  898,  744,  898,  819,  815,  811,  813,  812,
- /*    40 */   745,  732,  741,  748,  724,  857,  750,  751,  757,  758,
- /*    50 */   873,  876,  779,  797,  778,  898,  898,  898,  898,  898,
- /*    60 */   898,  898,  898,  898,  898,  898,  898,  898,  898,  898,
- /*    70 */   898,  898,  898,  898,  898,  898,  898,  898,  898,  898,
- /*    80 */   898,  898,  898,  898,  898,  898,  898,  898,  898,  898,
- /*    90 */   898,  898,  898,  898,  781,  802,  617,  780,  790,  782,
- /*   100 */   783,  677,  612,  898,  898,  898,  898,  898,  898,  898,
- /*   110 */   898,  784,  785,  798,  799,  898,  898,  898,  898,  898,
- /*   120 */   898,  593,  708,  898,  708,  898,  898,  898,  898,  898,
- /*   130 */   898,  898,  898,  898,  898,  898,  898,  898,  898,  898,
- /*   140 */   898,  898,  898,  702,  712,  891,  898,  898,  668,  898,
- /*   150 */   898,  898,  898,  898,  898,  898,  898,  898,  898,  600,
- /*   160 */   598,  898,  700,  898,  898,  626,  898,  898,  710,  898,
- /*   170 */   898,  715,  716,  898,  898,  898,  898,  898,  898,  898,
- /*   180 */   614,  898,  898,  689,  898,  849,  898,  898,  898,  864,
- /*   190 */   898,  898,  898,  862,  898,  898,  898,  691,  753,  830,
- /*   200 */   898,  877,  879,  898,  898,  700,  709,  898,  898,  814,
- /*   210 */   735,  735,  735,  647,  735,  735,  650,  747,  747,  597,
- /*   220 */   597,  597,  597,  667,  898,  747,  738,  740,  728,  742,
- /*   230 */   898,  717,  736,  898,  736,  717,  725,  727,  725,  727,
- /*   240 */   679,  679,  664,  679,  650,  679,  824,  736,  736,  898,
- /*   250 */   664,  679,  679,  679,  824,  609,  717,  609,  717,  609,
- /*   260 */   717,  717,  853,  856,  609,  717,  681,  681,  759,  747,
- /*   270 */   717,  688,  688,  688,  688,  747,  681,  759,  717,  875,
- /*   280 */   875,  717,  717,  884,  634,  652,  652,  859,  891,  896,
- /*   290 */   898,  898,  898,  898,  766,  898,  898,  898,  898,  898,
- /*   300 */   898,  898,  898,  898,  898,  898,  898,  898,  898,  898,
- /*   310 */   898,  836,  898,  898,  898,  898,  771,  767,  898,  768,
- /*   320 */   898,  898,  898,  898,  694,  898,  898,  898,  898,  898,
- /*   330 */   898,  898,  729,  898,  739,  898,  898,  898,  898,  898,
- /*   340 */   898,  898,  898,  898,  898,  898,  898,  898,  898,  898,
- /*   350 */   898,  898,  898,  898,  898,  898,  898,  851,  852,  898,
- /*   360 */   898,  898,  898,  898,  898,  898,  898,  898,  898,  898,
- /*   370 */   898,  898,  898,  898,  898,  898,  898,  898,  898,  898,
- /*   380 */   898,  883,  898,  898,  886,  594,  898,  588,  591,  590,
- /*   390 */   592,  596,  599,  621,  622,  623,  601,  602,  603,  604,
- /*   400 */   605,  606,  607,  613,  615,  633,  635,  619,  637,  698,
- /*   410 */   699,  763,  692,  693,  697,  765,  769,  770,  772,  773,
- /*   420 */   620,  627,  628,  631,  632,  839,  841,  840,  842,  630,
- /*   430 */   629,  774,  777,  786,  787,  789,  795,  801,  804,  788,
- /*   440 */   793,  794,  796,  800,  803,  695,  696,  807,  809,  810,
- /*   450 */   865,  866,  867,  868,  869,  805,  817,  818,  718,  808,
- /*   460 */   792,  730,  733,  734,  737,  731,  701,  711,  720,  721,
- /*   470 */   722,  723,  706,  707,  713,  726,  761,  762,  714,  703,
- /*   480 */   704,  705,  806,  764,  775,  776,  638,  639,  771,  640,
- /*   490 */   641,  642,  680,  683,  684,  685,  643,  662,  665,  666,
- /*   500 */   644,  651,  645,  646,  653,  654,  655,  658,  659,  660,
- /*   510 */   661,  656,  657,  825,  826,  828,  827,  648,  649,  663,
+ /*     0 */   593,  819,  899,  708,  899,  819,  899,  819,  899,  844,
+ /*    10 */   712,  873,  815,  819,  899,  899,  899,  790,  899,  844,
+ /*    20 */   899,  624,  844,  844,  741,  899,  899,  899,  899,  899,
+ /*    30 */   899,  899,  899,  742,  899,  818,  814,  810,  812,  811,
+ /*    40 */   743,  732,  739,  746,  724,  858,  748,  749,  755,  756,
+ /*    50 */   874,  877,  778,  777,  796,  899,  899,  899,  899,  899,
+ /*    60 */   899,  899,  899,  899,  899,  899,  899,  899,  899,  899,
+ /*    70 */   899,  899,  899,  899,  899,  899,  899,  899,  899,  899,
+ /*    80 */   899,  899,  899,  899,  899,  899,  899,  899,  899,  899,
+ /*    90 */   899,  899,  899,  899,  780,  801,  779,  789,  617,  781,
+ /*   100 */   782,  677,  612,  899,  899,  899,  899,  899,  899,  899,
+ /*   110 */   783,  899,  784,  797,  798,  899,  899,  899,  899,  899,
+ /*   120 */   899,  593,  708,  899,  708,  899,  899,  899,  899,  899,
+ /*   130 */   899,  899,  899,  899,  899,  899,  899,  899,  899,  899,
+ /*   140 */   899,  899,  899,  702,  712,  892,  899,  899,  668,  899,
+ /*   150 */   899,  899,  899,  899,  899,  899,  899,  899,  899,  600,
+ /*   160 */   598,  899,  700,  899,  899,  626,  899,  899,  710,  899,
+ /*   170 */   899,  715,  716,  899,  899,  899,  899,  899,  899,  899,
+ /*   180 */   614,  899,  899,  689,  899,  850,  899,  899,  899,  865,
+ /*   190 */   899,  899,  899,  863,  899,  899,  899,  691,  751,  831,
+ /*   200 */   899,  878,  880,  899,  899,  700,  709,  899,  899,  813,
+ /*   210 */   735,  735,  735,  647,  735,  735,  650,  745,  745,  597,
+ /*   220 */   597,  597,  597,  667,  899,  745,  736,  738,  728,  740,
+ /*   230 */   899,  899,  717,  717,  725,  727,  725,  727,  679,  679,
+ /*   240 */   664,  679,  650,  679,  823,  828,  899,  828,  899,  664,
+ /*   250 */   679,  679,  679,  823,  609,  717,  609,  717,  609,  717,
+ /*   260 */   717,  854,  857,  609,  717,  681,  681,  757,  745,  717,
+ /*   270 */   688,  688,  688,  688,  745,  681,  757,  717,  876,  876,
+ /*   280 */   717,  717,  885,  634,  652,  652,  860,  892,  897,  899,
+ /*   290 */   899,  899,  899,  764,  899,  899,  899,  899,  899,  899,
+ /*   300 */   899,  899,  899,  899,  899,  899,  899,  899,  899,  899,
+ /*   310 */   837,  899,  899,  899,  899,  769,  765,  899,  766,  899,
+ /*   320 */   694,  899,  899,  899,  899,  899,  899,  899,  899,  899,
+ /*   330 */   899,  729,  899,  737,  899,  899,  899,  899,  899,  899,
+ /*   340 */   899,  899,  899,  899,  899,  899,  899,  899,  899,  899,
+ /*   350 */   899,  899,  899,  899,  899,  899,  852,  853,  899,  899,
+ /*   360 */   899,  899,  899,  899,  899,  899,  899,  899,  899,  899,
+ /*   370 */   899,  899,  899,  899,  899,  899,  899,  899,  899,  899,
+ /*   380 */   884,  899,  899,  887,  594,  899,  588,  591,  590,  592,
+ /*   390 */   596,  599,  621,  622,  623,  601,  602,  603,  604,  605,
+ /*   400 */   606,  607,  613,  615,  633,  635,  619,  637,  698,  699,
+ /*   410 */   761,  692,  693,  697,  772,  763,  767,  768,  770,  771,
+ /*   420 */   785,  786,  788,  794,  800,  803,  787,  792,  793,  795,
+ /*   430 */   799,  802,  695,  696,  806,  620,  627,  628,  631,  632,
+ /*   440 */   840,  842,  841,  843,  630,  629,  773,  776,  808,  809,
+ /*   450 */   866,  867,  868,  869,  870,  804,  816,  817,  718,  807,
+ /*   460 */   791,  730,  733,  734,  731,  701,  711,  720,  721,  722,
+ /*   470 */   723,  706,  707,  713,  726,  759,  760,  714,  703,  704,
+ /*   480 */   705,  805,  762,  774,  775,  638,  639,  769,  640,  641,
+ /*   490 */   642,  680,  683,  684,  685,  643,  662,  665,  666,  644,
+ /*   500 */   651,  645,  646,  653,  654,  655,  658,  659,  660,  661,
+ /*   510 */   656,  657,  824,  825,  829,  827,  826,  648,  649,  663,
  /*   520 */   636,  625,  618,  669,  672,  673,  674,  675,  676,  678,
- /*   530 */   670,  671,  616,  608,  610,  719,  845,  854,  855,  850,
- /*   540 */   846,  847,  848,  611,  821,  822,  682,  755,  756,  844,
- /*   550 */   858,  860,  760,  861,  863,  888,  686,  687,  690,  829,
- /*   560 */   870,  746,  749,  752,  754,  831,  832,  833,  834,  837,
- /*   570 */   838,  835,  871,  874,  878,  880,  881,  882,  885,  887,
- /*   580 */   892,  893,  894,  897,  895,  595,  589,
+ /*   530 */   670,  671,  616,  608,  610,  719,  846,  855,  856,  851,
+ /*   540 */   847,  848,  849,  611,  820,  821,  682,  753,  754,  845,
+ /*   550 */   859,  861,  758,  862,  864,  889,  686,  687,  690,  830,
+ /*   560 */   871,  744,  747,  750,  752,  832,  833,  834,  835,  838,
+ /*   570 */   839,  836,  872,  875,  879,  881,  882,  883,  886,  888,
+ /*   580 */   893,  894,  895,  898,  896,  595,  589,
 };
 #define YY_SZ_ACTTAB (int)(sizeof(yy_action)/sizeof(yy_action[0]))
 
@@ -681,6 +685,7 @@ static const YYCODETYPE yyFallback[] = {
     0,  /*      SLASH => nothing */
     0,  /*        REM => nothing */
     0,  /*     CONCAT => nothing */
+    0,  /*    COLLATE => nothing */
     0,  /*     UMINUS => nothing */
     0,  /*      UPLUS => nothing */
     0,  /*     BITNOT => nothing */
@@ -693,7 +698,6 @@ static const YYCODETYPE yyFallback[] = {
     0,  /*     UNIQUE => nothing */
     0,  /*      CHECK => nothing */
     0,  /* REFERENCES => nothing */
-    0,  /*    COLLATE => nothing */
     0,  /*   AUTOINCR => nothing */
     0,  /*         ON => nothing */
     0,  /*     DELETE => nothing */
@@ -826,10 +830,10 @@ static const char *const yyTokenName[] = {
   "LT",            "GE",            "ESCAPE",        "BITAND",      
   "BITOR",         "LSHIFT",        "RSHIFT",        "PLUS",        
   "MINUS",         "STAR",          "SLASH",         "REM",         
-  "CONCAT",        "UMINUS",        "UPLUS",         "BITNOT",      
-  "STRING",        "JOIN_KW",       "CONSTRAINT",    "DEFAULT",     
-  "NULL",          "PRIMARY",       "UNIQUE",        "CHECK",       
-  "REFERENCES",    "COLLATE",       "AUTOINCR",      "ON",          
+  "CONCAT",        "COLLATE",       "UMINUS",        "UPLUS",       
+  "BITNOT",        "STRING",        "JOIN_KW",       "CONSTRAINT",  
+  "DEFAULT",       "NULL",          "PRIMARY",       "UNIQUE",      
+  "CHECK",         "REFERENCES",    "AUTOINCR",      "ON",          
   "DELETE",        "UPDATE",        "INSERT",        "SET",         
   "DEFERRABLE",    "FOREIGN",       "DROP",          "UNION",       
   "ALL",           "EXCEPT",        "INTERSECT",     "SELECT",      
@@ -858,10 +862,10 @@ static const char *const yyTokenName[] = {
   "sclp",          "as",            "seltablist",    "stl_prefix",  
   "joinop",        "on_opt",        "using_opt",     "seltablist_paren",
   "joinop2",       "inscollist",    "sortlist",      "sortitem",    
-  "collate",       "exprlist",      "setlist",       "insert_cmd",  
-  "inscollist_opt",  "itemlist",      "likeop",        "escape",      
-  "between_op",    "in_op",         "case_operand",  "case_exprlist",
-  "case_else",     "expritem",      "uniqueflag",    "idxitem",     
+  "exprlist",      "setlist",       "insert_cmd",    "inscollist_opt",
+  "itemlist",      "likeop",        "escape",        "between_op",  
+  "in_op",         "case_operand",  "case_exprlist",  "case_else",   
+  "expritem",      "uniqueflag",    "idxitem",       "collate",     
   "nmnum",         "plus_opt",      "number",        "trigger_decl",
   "trigger_cmd_list",  "trigger_time",  "trigger_event",  "foreach_clause",
   "when_clause",   "trigger_cmd",   "database_kw_opt",  "key_opt",     
@@ -1017,174 +1021,175 @@ static const char *const yyRuleName[] = {
  /* 140 */ "using_opt ::=",
  /* 141 */ "orderby_opt ::=",
  /* 142 */ "orderby_opt ::= ORDER BY sortlist",
- /* 143 */ "sortlist ::= sortlist COMMA sortitem collate sortorder",
- /* 144 */ "sortlist ::= sortitem collate sortorder",
+ /* 143 */ "sortlist ::= sortlist COMMA sortitem sortorder",
+ /* 144 */ "sortlist ::= sortitem sortorder",
  /* 145 */ "sortitem ::= expr",
  /* 146 */ "sortorder ::= ASC",
  /* 147 */ "sortorder ::= DESC",
  /* 148 */ "sortorder ::=",
- /* 149 */ "collate ::=",
- /* 150 */ "collate ::= COLLATE id",
- /* 151 */ "groupby_opt ::=",
- /* 152 */ "groupby_opt ::= GROUP BY exprlist",
- /* 153 */ "having_opt ::=",
- /* 154 */ "having_opt ::= HAVING expr",
- /* 155 */ "limit_opt ::=",
- /* 156 */ "limit_opt ::= LIMIT expr",
- /* 157 */ "limit_opt ::= LIMIT expr OFFSET expr",
- /* 158 */ "limit_opt ::= LIMIT expr COMMA expr",
- /* 159 */ "cmd ::= DELETE FROM fullname where_opt",
- /* 160 */ "where_opt ::=",
- /* 161 */ "where_opt ::= WHERE expr",
- /* 162 */ "cmd ::= UPDATE orconf fullname SET setlist where_opt",
- /* 163 */ "setlist ::= setlist COMMA nm EQ expr",
- /* 164 */ "setlist ::= nm EQ expr",
- /* 165 */ "cmd ::= insert_cmd INTO fullname inscollist_opt VALUES LP itemlist RP",
- /* 166 */ "cmd ::= insert_cmd INTO fullname inscollist_opt select",
- /* 167 */ "cmd ::= insert_cmd INTO fullname inscollist_opt DEFAULT VALUES",
- /* 168 */ "insert_cmd ::= INSERT orconf",
- /* 169 */ "insert_cmd ::= REPLACE",
- /* 170 */ "itemlist ::= itemlist COMMA expr",
- /* 171 */ "itemlist ::= expr",
- /* 172 */ "inscollist_opt ::=",
- /* 173 */ "inscollist_opt ::= LP inscollist RP",
- /* 174 */ "inscollist ::= inscollist COMMA nm",
- /* 175 */ "inscollist ::= nm",
- /* 176 */ "expr ::= term",
- /* 177 */ "expr ::= LP expr RP",
- /* 178 */ "term ::= NULL",
- /* 179 */ "expr ::= ID",
- /* 180 */ "expr ::= JOIN_KW",
- /* 181 */ "expr ::= nm DOT nm",
- /* 182 */ "expr ::= nm DOT nm DOT nm",
- /* 183 */ "term ::= INTEGER|FLOAT|BLOB",
- /* 184 */ "term ::= STRING",
- /* 185 */ "expr ::= REGISTER",
- /* 186 */ "expr ::= VARIABLE",
- /* 187 */ "expr ::= CAST LP expr AS typetoken RP",
- /* 188 */ "expr ::= ID LP distinct exprlist RP",
- /* 189 */ "expr ::= ID LP STAR RP",
- /* 190 */ "term ::= CTIME_KW",
- /* 191 */ "expr ::= expr AND expr",
- /* 192 */ "expr ::= expr OR expr",
- /* 193 */ "expr ::= expr LT|GT|GE|LE expr",
- /* 194 */ "expr ::= expr EQ|NE expr",
- /* 195 */ "expr ::= expr BITAND|BITOR|LSHIFT|RSHIFT expr",
- /* 196 */ "expr ::= expr PLUS|MINUS expr",
- /* 197 */ "expr ::= expr STAR|SLASH|REM expr",
- /* 198 */ "expr ::= expr CONCAT expr",
- /* 199 */ "likeop ::= LIKE_KW",
- /* 200 */ "likeop ::= NOT LIKE_KW",
- /* 201 */ "likeop ::= MATCH",
- /* 202 */ "likeop ::= NOT MATCH",
- /* 203 */ "escape ::= ESCAPE expr",
- /* 204 */ "escape ::=",
- /* 205 */ "expr ::= expr likeop expr escape",
- /* 206 */ "expr ::= expr ISNULL|NOTNULL",
- /* 207 */ "expr ::= expr IS NULL",
- /* 208 */ "expr ::= expr NOT NULL",
- /* 209 */ "expr ::= expr IS NOT NULL",
- /* 210 */ "expr ::= NOT|BITNOT expr",
- /* 211 */ "expr ::= MINUS expr",
- /* 212 */ "expr ::= PLUS expr",
- /* 213 */ "between_op ::= BETWEEN",
- /* 214 */ "between_op ::= NOT BETWEEN",
- /* 215 */ "expr ::= expr between_op expr AND expr",
- /* 216 */ "in_op ::= IN",
- /* 217 */ "in_op ::= NOT IN",
- /* 218 */ "expr ::= expr in_op LP exprlist RP",
- /* 219 */ "expr ::= LP select RP",
- /* 220 */ "expr ::= expr in_op LP select RP",
- /* 221 */ "expr ::= expr in_op nm dbnm",
- /* 222 */ "expr ::= EXISTS LP select RP",
- /* 223 */ "expr ::= CASE case_operand case_exprlist case_else END",
- /* 224 */ "case_exprlist ::= case_exprlist WHEN expr THEN expr",
- /* 225 */ "case_exprlist ::= WHEN expr THEN expr",
- /* 226 */ "case_else ::= ELSE expr",
- /* 227 */ "case_else ::=",
- /* 228 */ "case_operand ::= expr",
- /* 229 */ "case_operand ::=",
- /* 230 */ "exprlist ::= exprlist COMMA expritem",
- /* 231 */ "exprlist ::= expritem",
- /* 232 */ "expritem ::= expr",
- /* 233 */ "expritem ::=",
- /* 234 */ "cmd ::= CREATE uniqueflag INDEX ifnotexists nm dbnm ON nm LP idxlist RP",
- /* 235 */ "uniqueflag ::= UNIQUE",
- /* 236 */ "uniqueflag ::=",
- /* 237 */ "idxlist_opt ::=",
- /* 238 */ "idxlist_opt ::= LP idxlist RP",
- /* 239 */ "idxlist ::= idxlist COMMA idxitem collate sortorder",
- /* 240 */ "idxlist ::= idxitem collate sortorder",
- /* 241 */ "idxitem ::= nm",
- /* 242 */ "cmd ::= DROP INDEX ifexists fullname",
- /* 243 */ "cmd ::= VACUUM",
- /* 244 */ "cmd ::= VACUUM nm",
- /* 245 */ "cmd ::= PRAGMA nm dbnm EQ nmnum",
- /* 246 */ "cmd ::= PRAGMA nm dbnm EQ ON",
- /* 247 */ "cmd ::= PRAGMA nm dbnm EQ minus_num",
- /* 248 */ "cmd ::= PRAGMA nm dbnm LP nmnum RP",
- /* 249 */ "cmd ::= PRAGMA nm dbnm",
- /* 250 */ "nmnum ::= plus_num",
- /* 251 */ "nmnum ::= nm",
- /* 252 */ "plus_num ::= plus_opt number",
- /* 253 */ "minus_num ::= MINUS number",
- /* 254 */ "number ::= INTEGER|FLOAT",
- /* 255 */ "plus_opt ::= PLUS",
- /* 256 */ "plus_opt ::=",
- /* 257 */ "cmd ::= CREATE trigger_decl BEGIN trigger_cmd_list END",
- /* 258 */ "trigger_decl ::= temp TRIGGER ifnotexists nm dbnm trigger_time trigger_event ON fullname foreach_clause when_clause",
- /* 259 */ "trigger_time ::= BEFORE",
- /* 260 */ "trigger_time ::= AFTER",
- /* 261 */ "trigger_time ::= INSTEAD OF",
- /* 262 */ "trigger_time ::=",
- /* 263 */ "trigger_event ::= DELETE|INSERT",
- /* 264 */ "trigger_event ::= UPDATE",
- /* 265 */ "trigger_event ::= UPDATE OF inscollist",
- /* 266 */ "foreach_clause ::=",
- /* 267 */ "foreach_clause ::= FOR EACH ROW",
- /* 268 */ "foreach_clause ::= FOR EACH STATEMENT",
- /* 269 */ "when_clause ::=",
- /* 270 */ "when_clause ::= WHEN expr",
- /* 271 */ "trigger_cmd_list ::= trigger_cmd_list trigger_cmd SEMI",
- /* 272 */ "trigger_cmd_list ::=",
- /* 273 */ "trigger_cmd ::= UPDATE orconf nm SET setlist where_opt",
- /* 274 */ "trigger_cmd ::= insert_cmd INTO nm inscollist_opt VALUES LP itemlist RP",
- /* 275 */ "trigger_cmd ::= insert_cmd INTO nm inscollist_opt select",
- /* 276 */ "trigger_cmd ::= DELETE FROM nm where_opt",
- /* 277 */ "trigger_cmd ::= select",
- /* 278 */ "expr ::= RAISE LP IGNORE RP",
- /* 279 */ "expr ::= RAISE LP raisetype COMMA nm RP",
- /* 280 */ "raisetype ::= ROLLBACK",
- /* 281 */ "raisetype ::= ABORT",
- /* 282 */ "raisetype ::= FAIL",
- /* 283 */ "cmd ::= DROP TRIGGER ifexists fullname",
- /* 284 */ "cmd ::= ATTACH database_kw_opt expr AS expr key_opt",
- /* 285 */ "key_opt ::=",
- /* 286 */ "key_opt ::= KEY expr",
- /* 287 */ "database_kw_opt ::= DATABASE",
- /* 288 */ "database_kw_opt ::=",
- /* 289 */ "cmd ::= DETACH database_kw_opt expr",
- /* 290 */ "cmd ::= REINDEX",
- /* 291 */ "cmd ::= REINDEX nm dbnm",
- /* 292 */ "cmd ::= ANALYZE",
- /* 293 */ "cmd ::= ANALYZE nm dbnm",
- /* 294 */ "cmd ::= ALTER TABLE fullname RENAME TO nm",
- /* 295 */ "cmd ::= ALTER TABLE add_column_fullname ADD kwcolumn_opt column",
- /* 296 */ "add_column_fullname ::= fullname",
- /* 297 */ "kwcolumn_opt ::=",
- /* 298 */ "kwcolumn_opt ::= COLUMNKW",
- /* 299 */ "cmd ::= create_vtab",
- /* 300 */ "cmd ::= create_vtab LP vtabarglist RP",
- /* 301 */ "create_vtab ::= CREATE VIRTUAL TABLE nm dbnm USING nm",
- /* 302 */ "vtabarglist ::= vtabarg",
- /* 303 */ "vtabarglist ::= vtabarglist COMMA vtabarg",
- /* 304 */ "vtabarg ::=",
- /* 305 */ "vtabarg ::= vtabarg vtabargtoken",
- /* 306 */ "vtabargtoken ::= ANY",
- /* 307 */ "vtabargtoken ::= lp anylist RP",
- /* 308 */ "lp ::= LP",
- /* 309 */ "anylist ::=",
- /* 310 */ "anylist ::= anylist ANY",
+ /* 149 */ "groupby_opt ::=",
+ /* 150 */ "groupby_opt ::= GROUP BY exprlist",
+ /* 151 */ "having_opt ::=",
+ /* 152 */ "having_opt ::= HAVING expr",
+ /* 153 */ "limit_opt ::=",
+ /* 154 */ "limit_opt ::= LIMIT expr",
+ /* 155 */ "limit_opt ::= LIMIT expr OFFSET expr",
+ /* 156 */ "limit_opt ::= LIMIT expr COMMA expr",
+ /* 157 */ "cmd ::= DELETE FROM fullname where_opt",
+ /* 158 */ "where_opt ::=",
+ /* 159 */ "where_opt ::= WHERE expr",
+ /* 160 */ "cmd ::= UPDATE orconf fullname SET setlist where_opt",
+ /* 161 */ "setlist ::= setlist COMMA nm EQ expr",
+ /* 162 */ "setlist ::= nm EQ expr",
+ /* 163 */ "cmd ::= insert_cmd INTO fullname inscollist_opt VALUES LP itemlist RP",
+ /* 164 */ "cmd ::= insert_cmd INTO fullname inscollist_opt select",
+ /* 165 */ "cmd ::= insert_cmd INTO fullname inscollist_opt DEFAULT VALUES",
+ /* 166 */ "insert_cmd ::= INSERT orconf",
+ /* 167 */ "insert_cmd ::= REPLACE",
+ /* 168 */ "itemlist ::= itemlist COMMA expr",
+ /* 169 */ "itemlist ::= expr",
+ /* 170 */ "inscollist_opt ::=",
+ /* 171 */ "inscollist_opt ::= LP inscollist RP",
+ /* 172 */ "inscollist ::= inscollist COMMA nm",
+ /* 173 */ "inscollist ::= nm",
+ /* 174 */ "expr ::= term",
+ /* 175 */ "expr ::= LP expr RP",
+ /* 176 */ "term ::= NULL",
+ /* 177 */ "expr ::= ID",
+ /* 178 */ "expr ::= JOIN_KW",
+ /* 179 */ "expr ::= nm DOT nm",
+ /* 180 */ "expr ::= nm DOT nm DOT nm",
+ /* 181 */ "term ::= INTEGER|FLOAT|BLOB",
+ /* 182 */ "term ::= STRING",
+ /* 183 */ "expr ::= REGISTER",
+ /* 184 */ "expr ::= VARIABLE",
+ /* 185 */ "expr ::= expr COLLATE id",
+ /* 186 */ "expr ::= CAST LP expr AS typetoken RP",
+ /* 187 */ "expr ::= ID LP distinct exprlist RP",
+ /* 188 */ "expr ::= ID LP STAR RP",
+ /* 189 */ "term ::= CTIME_KW",
+ /* 190 */ "expr ::= expr AND expr",
+ /* 191 */ "expr ::= expr OR expr",
+ /* 192 */ "expr ::= expr LT|GT|GE|LE expr",
+ /* 193 */ "expr ::= expr EQ|NE expr",
+ /* 194 */ "expr ::= expr BITAND|BITOR|LSHIFT|RSHIFT expr",
+ /* 195 */ "expr ::= expr PLUS|MINUS expr",
+ /* 196 */ "expr ::= expr STAR|SLASH|REM expr",
+ /* 197 */ "expr ::= expr CONCAT expr",
+ /* 198 */ "likeop ::= LIKE_KW",
+ /* 199 */ "likeop ::= NOT LIKE_KW",
+ /* 200 */ "likeop ::= MATCH",
+ /* 201 */ "likeop ::= NOT MATCH",
+ /* 202 */ "escape ::= ESCAPE expr",
+ /* 203 */ "escape ::=",
+ /* 204 */ "expr ::= expr likeop expr escape",
+ /* 205 */ "expr ::= expr ISNULL|NOTNULL",
+ /* 206 */ "expr ::= expr IS NULL",
+ /* 207 */ "expr ::= expr NOT NULL",
+ /* 208 */ "expr ::= expr IS NOT NULL",
+ /* 209 */ "expr ::= NOT|BITNOT expr",
+ /* 210 */ "expr ::= MINUS expr",
+ /* 211 */ "expr ::= PLUS expr",
+ /* 212 */ "between_op ::= BETWEEN",
+ /* 213 */ "between_op ::= NOT BETWEEN",
+ /* 214 */ "expr ::= expr between_op expr AND expr",
+ /* 215 */ "in_op ::= IN",
+ /* 216 */ "in_op ::= NOT IN",
+ /* 217 */ "expr ::= expr in_op LP exprlist RP",
+ /* 218 */ "expr ::= LP select RP",
+ /* 219 */ "expr ::= expr in_op LP select RP",
+ /* 220 */ "expr ::= expr in_op nm dbnm",
+ /* 221 */ "expr ::= EXISTS LP select RP",
+ /* 222 */ "expr ::= CASE case_operand case_exprlist case_else END",
+ /* 223 */ "case_exprlist ::= case_exprlist WHEN expr THEN expr",
+ /* 224 */ "case_exprlist ::= WHEN expr THEN expr",
+ /* 225 */ "case_else ::= ELSE expr",
+ /* 226 */ "case_else ::=",
+ /* 227 */ "case_operand ::= expr",
+ /* 228 */ "case_operand ::=",
+ /* 229 */ "exprlist ::= exprlist COMMA expritem",
+ /* 230 */ "exprlist ::= expritem",
+ /* 231 */ "expritem ::= expr",
+ /* 232 */ "expritem ::=",
+ /* 233 */ "cmd ::= CREATE uniqueflag INDEX ifnotexists nm dbnm ON nm LP idxlist RP",
+ /* 234 */ "uniqueflag ::= UNIQUE",
+ /* 235 */ "uniqueflag ::=",
+ /* 236 */ "idxlist_opt ::=",
+ /* 237 */ "idxlist_opt ::= LP idxlist RP",
+ /* 238 */ "idxlist ::= idxlist COMMA idxitem collate sortorder",
+ /* 239 */ "idxlist ::= idxitem collate sortorder",
+ /* 240 */ "idxitem ::= nm",
+ /* 241 */ "collate ::=",
+ /* 242 */ "collate ::= COLLATE id",
+ /* 243 */ "cmd ::= DROP INDEX ifexists fullname",
+ /* 244 */ "cmd ::= VACUUM",
+ /* 245 */ "cmd ::= VACUUM nm",
+ /* 246 */ "cmd ::= PRAGMA nm dbnm EQ nmnum",
+ /* 247 */ "cmd ::= PRAGMA nm dbnm EQ ON",
+ /* 248 */ "cmd ::= PRAGMA nm dbnm EQ minus_num",
+ /* 249 */ "cmd ::= PRAGMA nm dbnm LP nmnum RP",
+ /* 250 */ "cmd ::= PRAGMA nm dbnm",
+ /* 251 */ "nmnum ::= plus_num",
+ /* 252 */ "nmnum ::= nm",
+ /* 253 */ "plus_num ::= plus_opt number",
+ /* 254 */ "minus_num ::= MINUS number",
+ /* 255 */ "number ::= INTEGER|FLOAT",
+ /* 256 */ "plus_opt ::= PLUS",
+ /* 257 */ "plus_opt ::=",
+ /* 258 */ "cmd ::= CREATE trigger_decl BEGIN trigger_cmd_list END",
+ /* 259 */ "trigger_decl ::= temp TRIGGER ifnotexists nm dbnm trigger_time trigger_event ON fullname foreach_clause when_clause",
+ /* 260 */ "trigger_time ::= BEFORE",
+ /* 261 */ "trigger_time ::= AFTER",
+ /* 262 */ "trigger_time ::= INSTEAD OF",
+ /* 263 */ "trigger_time ::=",
+ /* 264 */ "trigger_event ::= DELETE|INSERT",
+ /* 265 */ "trigger_event ::= UPDATE",
+ /* 266 */ "trigger_event ::= UPDATE OF inscollist",
+ /* 267 */ "foreach_clause ::=",
+ /* 268 */ "foreach_clause ::= FOR EACH ROW",
+ /* 269 */ "foreach_clause ::= FOR EACH STATEMENT",
+ /* 270 */ "when_clause ::=",
+ /* 271 */ "when_clause ::= WHEN expr",
+ /* 272 */ "trigger_cmd_list ::= trigger_cmd_list trigger_cmd SEMI",
+ /* 273 */ "trigger_cmd_list ::=",
+ /* 274 */ "trigger_cmd ::= UPDATE orconf nm SET setlist where_opt",
+ /* 275 */ "trigger_cmd ::= insert_cmd INTO nm inscollist_opt VALUES LP itemlist RP",
+ /* 276 */ "trigger_cmd ::= insert_cmd INTO nm inscollist_opt select",
+ /* 277 */ "trigger_cmd ::= DELETE FROM nm where_opt",
+ /* 278 */ "trigger_cmd ::= select",
+ /* 279 */ "expr ::= RAISE LP IGNORE RP",
+ /* 280 */ "expr ::= RAISE LP raisetype COMMA nm RP",
+ /* 281 */ "raisetype ::= ROLLBACK",
+ /* 282 */ "raisetype ::= ABORT",
+ /* 283 */ "raisetype ::= FAIL",
+ /* 284 */ "cmd ::= DROP TRIGGER ifexists fullname",
+ /* 285 */ "cmd ::= ATTACH database_kw_opt expr AS expr key_opt",
+ /* 286 */ "key_opt ::=",
+ /* 287 */ "key_opt ::= KEY expr",
+ /* 288 */ "database_kw_opt ::= DATABASE",
+ /* 289 */ "database_kw_opt ::=",
+ /* 290 */ "cmd ::= DETACH database_kw_opt expr",
+ /* 291 */ "cmd ::= REINDEX",
+ /* 292 */ "cmd ::= REINDEX nm dbnm",
+ /* 293 */ "cmd ::= ANALYZE",
+ /* 294 */ "cmd ::= ANALYZE nm dbnm",
+ /* 295 */ "cmd ::= ALTER TABLE fullname RENAME TO nm",
+ /* 296 */ "cmd ::= ALTER TABLE add_column_fullname ADD kwcolumn_opt column",
+ /* 297 */ "add_column_fullname ::= fullname",
+ /* 298 */ "kwcolumn_opt ::=",
+ /* 299 */ "kwcolumn_opt ::= COLUMNKW",
+ /* 300 */ "cmd ::= create_vtab",
+ /* 301 */ "cmd ::= create_vtab LP vtabarglist RP",
+ /* 302 */ "create_vtab ::= CREATE VIRTUAL TABLE nm dbnm USING nm",
+ /* 303 */ "vtabarglist ::= vtabarg",
+ /* 304 */ "vtabarglist ::= vtabarglist COMMA vtabarg",
+ /* 305 */ "vtabarg ::=",
+ /* 306 */ "vtabarg ::= vtabarg vtabargtoken",
+ /* 307 */ "vtabargtoken ::= ANY",
+ /* 308 */ "vtabargtoken ::= lp anylist RP",
+ /* 309 */ "lp ::= LP",
+ /* 310 */ "anylist ::=",
+ /* 311 */ "anylist ::= anylist ANY",
 };
 #endif /* NDEBUG */
 
@@ -1245,9 +1250,9 @@ static void yy_destructor(YYCODETYPE yymajor, YYMINORTYPE *yypminor){
     case 156:
     case 190:
     case 207:
-#line 374 "ext/pdo_sqlite/sqlite/src/parse.y"
+#line 375 "parse.y"
 {sqlite3SelectDelete((yypminor->yy43));}
-#line 1252 "ext/pdo_sqlite/sqlite/src/parse.c"
+#line 1257 "parse.c"
       break;
     case 170:
     case 171:
@@ -1255,14 +1260,14 @@ static void yy_destructor(YYCODETYPE yymajor, YYMINORTYPE *yypminor){
     case 197:
     case 205:
     case 211:
-    case 219:
-    case 222:
+    case 218:
+    case 221:
+    case 223:
     case 224:
-    case 225:
     case 236:
-#line 618 "ext/pdo_sqlite/sqlite/src/parse.y"
+#line 616 "parse.y"
 {sqlite3ExprDelete((yypminor->yy450));}
-#line 1267 "ext/pdo_sqlite/sqlite/src/parse.c"
+#line 1272 "parse.c"
       break;
     case 175:
     case 183:
@@ -1271,52 +1276,52 @@ static void yy_destructor(YYCODETYPE yymajor, YYMINORTYPE *yypminor){
     case 198:
     case 200:
     case 210:
+    case 212:
     case 213:
-    case 214:
-    case 217:
-    case 223:
-#line 855 "ext/pdo_sqlite/sqlite/src/parse.y"
+    case 216:
+    case 222:
+#line 856 "parse.y"
 {sqlite3ExprListDelete((yypminor->yy242));}
-#line 1282 "ext/pdo_sqlite/sqlite/src/parse.c"
+#line 1287 "parse.c"
       break;
     case 189:
     case 194:
     case 202:
     case 203:
-#line 487 "ext/pdo_sqlite/sqlite/src/parse.y"
+#line 488 "parse.y"
 {sqlite3SrcListDelete((yypminor->yy419));}
-#line 1290 "ext/pdo_sqlite/sqlite/src/parse.c"
+#line 1295 "parse.c"
       break;
     case 199:
-#line 548 "ext/pdo_sqlite/sqlite/src/parse.y"
+#line 546 "parse.y"
 {
   sqlite3ExprDelete((yypminor->yy84).pLimit);
   sqlite3ExprDelete((yypminor->yy84).pOffset);
 }
-#line 1298 "ext/pdo_sqlite/sqlite/src/parse.c"
+#line 1303 "parse.c"
       break;
     case 206:
     case 209:
-    case 216:
-#line 504 "ext/pdo_sqlite/sqlite/src/parse.y"
+    case 215:
+#line 505 "parse.y"
 {sqlite3IdListDelete((yypminor->yy352));}
-#line 1305 "ext/pdo_sqlite/sqlite/src/parse.c"
+#line 1310 "parse.c"
       break;
     case 232:
     case 237:
-#line 952 "ext/pdo_sqlite/sqlite/src/parse.y"
+#line 957 "parse.y"
 {sqlite3DeleteTriggerStep((yypminor->yy75));}
-#line 1311 "ext/pdo_sqlite/sqlite/src/parse.c"
+#line 1316 "parse.c"
       break;
     case 234:
-#line 936 "ext/pdo_sqlite/sqlite/src/parse.y"
+#line 941 "parse.y"
 {sqlite3IdListDelete((yypminor->yy354).b);}
-#line 1316 "ext/pdo_sqlite/sqlite/src/parse.c"
+#line 1321 "parse.c"
       break;
     case 239:
-#line 1020 "ext/pdo_sqlite/sqlite/src/parse.y"
+#line 1025 "parse.y"
 {sqlite3ExprDelete((yypminor->yy158));}
-#line 1321 "ext/pdo_sqlite/sqlite/src/parse.c"
+#line 1326 "parse.c"
       break;
     default:  break;   /* If no destructor action specified: do nothing */
   }
@@ -1480,11 +1485,11 @@ static void yy_shift(
      while( yypParser->yyidx>=0 ) yy_pop_parser_stack(yypParser);
      /* Here code is inserted which will execute if the parser
      ** stack every overflows */
-#line 44 "ext/pdo_sqlite/sqlite/src/parse.y"
+#line 44 "parse.y"
 
   sqlite3ErrorMsg(pParse, "parser stack overflow");
   pParse->parseError = 1;
-#line 1490 "ext/pdo_sqlite/sqlite/src/parse.c"
+#line 1495 "parse.c"
      sqlite3ParserARG_STORE; /* Suppress warning about unused %extra_argument var */
      return;
   }
@@ -1654,14 +1659,12 @@ static const struct {
   { 206, 0 },
   { 198, 0 },
   { 198, 3 },
-  { 210, 5 },
-  { 210, 3 },
+  { 210, 4 },
+  { 210, 2 },
   { 211, 1 },
   { 173, 1 },
   { 173, 1 },
   { 173, 0 },
-  { 212, 0 },
-  { 212, 2 },
   { 196, 0 },
   { 196, 3 },
   { 197, 0 },
@@ -1674,17 +1677,17 @@ static const struct {
   { 195, 0 },
   { 195, 2 },
   { 144, 6 },
-  { 214, 5 },
-  { 214, 3 },
+  { 213, 5 },
+  { 213, 3 },
   { 144, 8 },
   { 144, 5 },
   { 144, 6 },
-  { 215, 2 },
-  { 215, 1 },
-  { 217, 3 },
-  { 217, 1 },
-  { 216, 0 },
+  { 214, 2 },
+  { 214, 1 },
   { 216, 3 },
+  { 216, 1 },
+  { 215, 0 },
+  { 215, 3 },
   { 209, 3 },
   { 209, 1 },
   { 171, 1 },
@@ -1698,6 +1701,7 @@ static const struct {
   { 170, 1 },
   { 171, 1 },
   { 171, 1 },
+  { 171, 3 },
   { 171, 6 },
   { 171, 5 },
   { 171, 4 },
@@ -1710,12 +1714,12 @@ static const struct {
   { 171, 3 },
   { 171, 3 },
   { 171, 3 },
-  { 218, 1 },
-  { 218, 2 },
-  { 218, 1 },
+  { 217, 1 },
+  { 217, 2 },
+  { 217, 1 },
+  { 217, 2 },
   { 218, 2 },
-  { 219, 2 },
-  { 219, 0 },
+  { 218, 0 },
   { 171, 4 },
   { 171, 2 },
   { 171, 3 },
@@ -1724,35 +1728,37 @@ static const struct {
   { 171, 2 },
   { 171, 2 },
   { 171, 2 },
+  { 219, 1 },
+  { 219, 2 },
+  { 171, 5 },
   { 220, 1 },
   { 220, 2 },
   { 171, 5 },
-  { 221, 1 },
-  { 221, 2 },
-  { 171, 5 },
   { 171, 3 },
   { 171, 5 },
   { 171, 4 },
   { 171, 4 },
   { 171, 5 },
-  { 223, 5 },
-  { 223, 4 },
-  { 224, 2 },
+  { 222, 5 },
+  { 222, 4 },
+  { 223, 2 },
+  { 223, 0 },
+  { 221, 1 },
+  { 221, 0 },
+  { 212, 3 },
+  { 212, 1 },
+  { 224, 1 },
   { 224, 0 },
-  { 222, 1 },
-  { 222, 0 },
-  { 213, 3 },
-  { 213, 1 },
+  { 144, 11 },
   { 225, 1 },
   { 225, 0 },
-  { 144, 11 },
-  { 226, 1 },
-  { 226, 0 },
   { 175, 0 },
   { 175, 3 },
   { 183, 5 },
   { 183, 3 },
-  { 227, 1 },
+  { 226, 1 },
+  { 227, 0 },
+  { 227, 2 },
   { 144, 4 },
   { 144, 1 },
   { 144, 2 },
@@ -1876,61 +1882,61 @@ static void yy_reduce(
   **     break;
   */
       case 3:
-#line 100 "ext/pdo_sqlite/sqlite/src/parse.y"
+#line 100 "parse.y"
 { sqlite3FinishCoding(pParse); }
-#line 1884 "ext/pdo_sqlite/sqlite/src/parse.c"
+#line 1890 "parse.c"
         break;
       case 6:
-#line 103 "ext/pdo_sqlite/sqlite/src/parse.y"
+#line 103 "parse.y"
 { sqlite3BeginParse(pParse, 0); }
-#line 1889 "ext/pdo_sqlite/sqlite/src/parse.c"
+#line 1895 "parse.c"
         break;
       case 7:
-#line 105 "ext/pdo_sqlite/sqlite/src/parse.y"
+#line 105 "parse.y"
 { sqlite3BeginParse(pParse, 1); }
-#line 1894 "ext/pdo_sqlite/sqlite/src/parse.c"
+#line 1900 "parse.c"
         break;
       case 8:
-#line 106 "ext/pdo_sqlite/sqlite/src/parse.y"
+#line 106 "parse.y"
 { sqlite3BeginParse(pParse, 2); }
-#line 1899 "ext/pdo_sqlite/sqlite/src/parse.c"
+#line 1905 "parse.c"
         break;
       case 9:
-#line 112 "ext/pdo_sqlite/sqlite/src/parse.y"
+#line 112 "parse.y"
 {sqlite3BeginTransaction(pParse, yymsp[-1].minor.yy316);}
-#line 1904 "ext/pdo_sqlite/sqlite/src/parse.c"
+#line 1910 "parse.c"
         break;
       case 13:
-#line 117 "ext/pdo_sqlite/sqlite/src/parse.y"
+#line 117 "parse.y"
 {yygotominor.yy316 = TK_DEFERRED;}
-#line 1909 "ext/pdo_sqlite/sqlite/src/parse.c"
+#line 1915 "parse.c"
         break;
       case 14:
       case 15:
       case 16:
       case 107:
       case 109:
-#line 118 "ext/pdo_sqlite/sqlite/src/parse.y"
+#line 118 "parse.y"
 {yygotominor.yy316 = yymsp[0].major;}
-#line 1918 "ext/pdo_sqlite/sqlite/src/parse.c"
+#line 1924 "parse.c"
         break;
       case 17:
       case 18:
-#line 121 "ext/pdo_sqlite/sqlite/src/parse.y"
+#line 121 "parse.y"
 {sqlite3CommitTransaction(pParse);}
-#line 1924 "ext/pdo_sqlite/sqlite/src/parse.c"
+#line 1930 "parse.c"
         break;
       case 19:
-#line 123 "ext/pdo_sqlite/sqlite/src/parse.y"
+#line 123 "parse.y"
 {sqlite3RollbackTransaction(pParse);}
-#line 1929 "ext/pdo_sqlite/sqlite/src/parse.c"
+#line 1935 "parse.c"
         break;
       case 21:
-#line 128 "ext/pdo_sqlite/sqlite/src/parse.y"
+#line 128 "parse.y"
 {
    sqlite3StartTable(pParse,&yymsp[-1].minor.yy178,&yymsp[0].minor.yy178,yymsp[-4].minor.yy316,0,0,yymsp[-2].minor.yy316);
 }
-#line 1936 "ext/pdo_sqlite/sqlite/src/parse.c"
+#line 1942 "parse.c"
         break;
       case 22:
       case 25:
@@ -1941,11 +1947,11 @@ static void yy_reduce(
       case 101:
       case 112:
       case 113:
-      case 213:
-      case 216:
-#line 132 "ext/pdo_sqlite/sqlite/src/parse.y"
+      case 212:
+      case 215:
+#line 132 "parse.y"
 {yygotominor.yy316 = 0;}
-#line 1951 "ext/pdo_sqlite/sqlite/src/parse.c"
+#line 1957 "parse.c"
         break;
       case 23:
       case 24:
@@ -1953,215 +1959,215 @@ static void yy_reduce(
       case 78:
       case 100:
       case 111:
-      case 214:
-      case 217:
-#line 133 "ext/pdo_sqlite/sqlite/src/parse.y"
+      case 213:
+      case 216:
+#line 133 "parse.y"
 {yygotominor.yy316 = 1;}
-#line 1963 "ext/pdo_sqlite/sqlite/src/parse.c"
+#line 1969 "parse.c"
         break;
       case 26:
-#line 139 "ext/pdo_sqlite/sqlite/src/parse.y"
+#line 139 "parse.y"
 {
   sqlite3EndTable(pParse,&yymsp[-1].minor.yy178,&yymsp[0].minor.yy0,0);
 }
-#line 1970 "ext/pdo_sqlite/sqlite/src/parse.c"
+#line 1976 "parse.c"
         break;
       case 27:
-#line 142 "ext/pdo_sqlite/sqlite/src/parse.y"
+#line 142 "parse.y"
 {
   sqlite3EndTable(pParse,0,0,yymsp[0].minor.yy43);
   sqlite3SelectDelete(yymsp[0].minor.yy43);
 }
-#line 1978 "ext/pdo_sqlite/sqlite/src/parse.c"
+#line 1984 "parse.c"
         break;
       case 30:
-#line 154 "ext/pdo_sqlite/sqlite/src/parse.y"
+#line 154 "parse.y"
 {
   yygotominor.yy178.z = yymsp[-2].minor.yy178.z;
   yygotominor.yy178.n = (pParse->sLastToken.z-yymsp[-2].minor.yy178.z) + pParse->sLastToken.n;
 }
-#line 1986 "ext/pdo_sqlite/sqlite/src/parse.c"
+#line 1992 "parse.c"
         break;
       case 31:
-#line 158 "ext/pdo_sqlite/sqlite/src/parse.y"
+#line 158 "parse.y"
 {
   sqlite3AddColumn(pParse,&yymsp[0].minor.yy178);
   yygotominor.yy178 = yymsp[0].minor.yy178;
 }
-#line 1994 "ext/pdo_sqlite/sqlite/src/parse.c"
+#line 2000 "parse.c"
         break;
       case 32:
       case 33:
       case 34:
       case 35:
       case 36:
-      case 254:
-#line 168 "ext/pdo_sqlite/sqlite/src/parse.y"
+      case 255:
+#line 168 "parse.y"
 {yygotominor.yy178 = yymsp[0].minor.yy0;}
-#line 2004 "ext/pdo_sqlite/sqlite/src/parse.c"
+#line 2010 "parse.c"
         break;
       case 38:
-#line 228 "ext/pdo_sqlite/sqlite/src/parse.y"
+#line 229 "parse.y"
 {sqlite3AddColumnType(pParse,&yymsp[0].minor.yy178);}
-#line 2009 "ext/pdo_sqlite/sqlite/src/parse.c"
+#line 2015 "parse.c"
         break;
       case 39:
       case 42:
       case 119:
       case 120:
       case 131:
-      case 150:
-      case 241:
-      case 250:
+      case 240:
+      case 242:
       case 251:
       case 252:
       case 253:
-#line 229 "ext/pdo_sqlite/sqlite/src/parse.y"
+      case 254:
+#line 230 "parse.y"
 {yygotominor.yy178 = yymsp[0].minor.yy178;}
-#line 2024 "ext/pdo_sqlite/sqlite/src/parse.c"
+#line 2030 "parse.c"
         break;
       case 40:
-#line 230 "ext/pdo_sqlite/sqlite/src/parse.y"
+#line 231 "parse.y"
 {
   yygotominor.yy178.z = yymsp[-3].minor.yy178.z;
   yygotominor.yy178.n = &yymsp[0].minor.yy0.z[yymsp[0].minor.yy0.n] - yymsp[-3].minor.yy178.z;
 }
-#line 2032 "ext/pdo_sqlite/sqlite/src/parse.c"
+#line 2038 "parse.c"
         break;
       case 41:
-#line 234 "ext/pdo_sqlite/sqlite/src/parse.y"
+#line 235 "parse.y"
 {
   yygotominor.yy178.z = yymsp[-5].minor.yy178.z;
   yygotominor.yy178.n = &yymsp[0].minor.yy0.z[yymsp[0].minor.yy0.n] - yymsp[-5].minor.yy178.z;
 }
-#line 2040 "ext/pdo_sqlite/sqlite/src/parse.c"
+#line 2046 "parse.c"
         break;
       case 43:
-#line 240 "ext/pdo_sqlite/sqlite/src/parse.y"
+#line 241 "parse.y"
 {yygotominor.yy178.z=yymsp[-1].minor.yy178.z; yygotominor.yy178.n=yymsp[0].minor.yy178.n+(yymsp[0].minor.yy178.z-yymsp[-1].minor.yy178.z);}
-#line 2045 "ext/pdo_sqlite/sqlite/src/parse.c"
+#line 2051 "parse.c"
         break;
       case 44:
-#line 242 "ext/pdo_sqlite/sqlite/src/parse.y"
+#line 243 "parse.y"
 { yygotominor.yy316 = atoi((char*)yymsp[0].minor.yy178.z); }
-#line 2050 "ext/pdo_sqlite/sqlite/src/parse.c"
+#line 2056 "parse.c"
         break;
       case 45:
-#line 243 "ext/pdo_sqlite/sqlite/src/parse.y"
+#line 244 "parse.y"
 { yygotominor.yy316 = -atoi((char*)yymsp[0].minor.yy178.z); }
-#line 2055 "ext/pdo_sqlite/sqlite/src/parse.c"
+#line 2061 "parse.c"
         break;
       case 50:
       case 52:
-#line 252 "ext/pdo_sqlite/sqlite/src/parse.y"
+#line 253 "parse.y"
 {sqlite3AddDefaultValue(pParse,yymsp[0].minor.yy450);}
-#line 2061 "ext/pdo_sqlite/sqlite/src/parse.c"
+#line 2067 "parse.c"
         break;
       case 51:
-#line 253 "ext/pdo_sqlite/sqlite/src/parse.y"
+#line 254 "parse.y"
 {sqlite3AddDefaultValue(pParse,yymsp[-1].minor.yy450);}
-#line 2066 "ext/pdo_sqlite/sqlite/src/parse.c"
+#line 2072 "parse.c"
         break;
       case 53:
-#line 255 "ext/pdo_sqlite/sqlite/src/parse.y"
+#line 256 "parse.y"
 {
   Expr *p = sqlite3Expr(TK_UMINUS, yymsp[0].minor.yy450, 0, 0);
   sqlite3AddDefaultValue(pParse,p);
 }
-#line 2074 "ext/pdo_sqlite/sqlite/src/parse.c"
+#line 2080 "parse.c"
         break;
       case 54:
-#line 259 "ext/pdo_sqlite/sqlite/src/parse.y"
+#line 260 "parse.y"
 {
   Expr *p = sqlite3Expr(TK_STRING, 0, 0, &yymsp[0].minor.yy178);
   sqlite3AddDefaultValue(pParse,p);
 }
-#line 2082 "ext/pdo_sqlite/sqlite/src/parse.c"
+#line 2088 "parse.c"
         break;
       case 56:
-#line 268 "ext/pdo_sqlite/sqlite/src/parse.y"
+#line 269 "parse.y"
 {sqlite3AddNotNull(pParse, yymsp[0].minor.yy316);}
-#line 2087 "ext/pdo_sqlite/sqlite/src/parse.c"
+#line 2093 "parse.c"
         break;
       case 57:
-#line 270 "ext/pdo_sqlite/sqlite/src/parse.y"
+#line 271 "parse.y"
 {sqlite3AddPrimaryKey(pParse,0,yymsp[-1].minor.yy316,yymsp[0].minor.yy316,yymsp[-2].minor.yy316);}
-#line 2092 "ext/pdo_sqlite/sqlite/src/parse.c"
+#line 2098 "parse.c"
         break;
       case 58:
-#line 271 "ext/pdo_sqlite/sqlite/src/parse.y"
+#line 272 "parse.y"
 {sqlite3CreateIndex(pParse,0,0,0,0,yymsp[0].minor.yy316,0,0,0,0);}
-#line 2097 "ext/pdo_sqlite/sqlite/src/parse.c"
+#line 2103 "parse.c"
         break;
       case 59:
-#line 272 "ext/pdo_sqlite/sqlite/src/parse.y"
+#line 273 "parse.y"
 {sqlite3AddCheckConstraint(pParse,yymsp[-1].minor.yy450);}
-#line 2102 "ext/pdo_sqlite/sqlite/src/parse.c"
+#line 2108 "parse.c"
         break;
       case 60:
-#line 274 "ext/pdo_sqlite/sqlite/src/parse.y"
+#line 275 "parse.y"
 {sqlite3CreateForeignKey(pParse,0,&yymsp[-2].minor.yy178,yymsp[-1].minor.yy242,yymsp[0].minor.yy316);}
-#line 2107 "ext/pdo_sqlite/sqlite/src/parse.c"
+#line 2113 "parse.c"
         break;
       case 61:
-#line 275 "ext/pdo_sqlite/sqlite/src/parse.y"
+#line 276 "parse.y"
 {sqlite3DeferForeignKey(pParse,yymsp[0].minor.yy316);}
-#line 2112 "ext/pdo_sqlite/sqlite/src/parse.c"
+#line 2118 "parse.c"
         break;
       case 62:
-#line 276 "ext/pdo_sqlite/sqlite/src/parse.y"
+#line 277 "parse.y"
 {sqlite3AddCollateType(pParse, (char*)yymsp[0].minor.yy178.z, yymsp[0].minor.yy178.n);}
-#line 2117 "ext/pdo_sqlite/sqlite/src/parse.c"
+#line 2123 "parse.c"
         break;
       case 65:
-#line 289 "ext/pdo_sqlite/sqlite/src/parse.y"
+#line 290 "parse.y"
 { yygotominor.yy316 = OE_Restrict * 0x010101; }
-#line 2122 "ext/pdo_sqlite/sqlite/src/parse.c"
+#line 2128 "parse.c"
         break;
       case 66:
-#line 290 "ext/pdo_sqlite/sqlite/src/parse.y"
+#line 291 "parse.y"
 { yygotominor.yy316 = (yymsp[-1].minor.yy316 & yymsp[0].minor.yy207.mask) | yymsp[0].minor.yy207.value; }
-#line 2127 "ext/pdo_sqlite/sqlite/src/parse.c"
+#line 2133 "parse.c"
         break;
       case 67:
-#line 292 "ext/pdo_sqlite/sqlite/src/parse.y"
+#line 293 "parse.y"
 { yygotominor.yy207.value = 0;     yygotominor.yy207.mask = 0x000000; }
-#line 2132 "ext/pdo_sqlite/sqlite/src/parse.c"
+#line 2138 "parse.c"
         break;
       case 68:
-#line 293 "ext/pdo_sqlite/sqlite/src/parse.y"
+#line 294 "parse.y"
 { yygotominor.yy207.value = yymsp[0].minor.yy316;     yygotominor.yy207.mask = 0x0000ff; }
-#line 2137 "ext/pdo_sqlite/sqlite/src/parse.c"
+#line 2143 "parse.c"
         break;
       case 69:
-#line 294 "ext/pdo_sqlite/sqlite/src/parse.y"
+#line 295 "parse.y"
 { yygotominor.yy207.value = yymsp[0].minor.yy316<<8;  yygotominor.yy207.mask = 0x00ff00; }
-#line 2142 "ext/pdo_sqlite/sqlite/src/parse.c"
+#line 2148 "parse.c"
         break;
       case 70:
-#line 295 "ext/pdo_sqlite/sqlite/src/parse.y"
+#line 296 "parse.y"
 { yygotominor.yy207.value = yymsp[0].minor.yy316<<16; yygotominor.yy207.mask = 0xff0000; }
-#line 2147 "ext/pdo_sqlite/sqlite/src/parse.c"
+#line 2153 "parse.c"
         break;
       case 71:
-#line 297 "ext/pdo_sqlite/sqlite/src/parse.y"
+#line 298 "parse.y"
 { yygotominor.yy316 = OE_SetNull; }
-#line 2152 "ext/pdo_sqlite/sqlite/src/parse.c"
+#line 2158 "parse.c"
         break;
       case 72:
-#line 298 "ext/pdo_sqlite/sqlite/src/parse.y"
+#line 299 "parse.y"
 { yygotominor.yy316 = OE_SetDflt; }
-#line 2157 "ext/pdo_sqlite/sqlite/src/parse.c"
+#line 2163 "parse.c"
         break;
       case 73:
-#line 299 "ext/pdo_sqlite/sqlite/src/parse.y"
+#line 300 "parse.y"
 { yygotominor.yy316 = OE_Cascade; }
-#line 2162 "ext/pdo_sqlite/sqlite/src/parse.c"
+#line 2168 "parse.c"
         break;
       case 74:
-#line 300 "ext/pdo_sqlite/sqlite/src/parse.y"
+#line 301 "parse.y"
 { yygotominor.yy316 = OE_Restrict; }
-#line 2167 "ext/pdo_sqlite/sqlite/src/parse.c"
+#line 2173 "parse.c"
         break;
       case 75:
       case 76:
@@ -2169,98 +2175,98 @@ static void yy_reduce(
       case 93:
       case 95:
       case 96:
-      case 168:
-#line 302 "ext/pdo_sqlite/sqlite/src/parse.y"
+      case 166:
+#line 303 "parse.y"
 {yygotominor.yy316 = yymsp[0].minor.yy316;}
-#line 2178 "ext/pdo_sqlite/sqlite/src/parse.c"
+#line 2184 "parse.c"
         break;
       case 80:
-#line 312 "ext/pdo_sqlite/sqlite/src/parse.y"
+#line 313 "parse.y"
 {yygotominor.yy178.n = 0; yygotominor.yy178.z = 0;}
-#line 2183 "ext/pdo_sqlite/sqlite/src/parse.c"
+#line 2189 "parse.c"
         break;
       case 81:
-#line 313 "ext/pdo_sqlite/sqlite/src/parse.y"
+#line 314 "parse.y"
 {yygotominor.yy178 = yymsp[-1].minor.yy0;}
-#line 2188 "ext/pdo_sqlite/sqlite/src/parse.c"
+#line 2194 "parse.c"
         break;
       case 86:
-#line 319 "ext/pdo_sqlite/sqlite/src/parse.y"
+#line 320 "parse.y"
 {sqlite3AddPrimaryKey(pParse,yymsp[-3].minor.yy242,yymsp[0].minor.yy316,yymsp[-2].minor.yy316,0);}
-#line 2193 "ext/pdo_sqlite/sqlite/src/parse.c"
+#line 2199 "parse.c"
         break;
       case 87:
-#line 321 "ext/pdo_sqlite/sqlite/src/parse.y"
+#line 322 "parse.y"
 {sqlite3CreateIndex(pParse,0,0,0,yymsp[-2].minor.yy242,yymsp[0].minor.yy316,0,0,0,0);}
-#line 2198 "ext/pdo_sqlite/sqlite/src/parse.c"
+#line 2204 "parse.c"
         break;
       case 88:
-#line 322 "ext/pdo_sqlite/sqlite/src/parse.y"
+#line 323 "parse.y"
 {sqlite3AddCheckConstraint(pParse,yymsp[-2].minor.yy450);}
-#line 2203 "ext/pdo_sqlite/sqlite/src/parse.c"
+#line 2209 "parse.c"
         break;
       case 89:
-#line 324 "ext/pdo_sqlite/sqlite/src/parse.y"
+#line 325 "parse.y"
 {
     sqlite3CreateForeignKey(pParse, yymsp[-6].minor.yy242, &yymsp[-3].minor.yy178, yymsp[-2].minor.yy242, yymsp[-1].minor.yy316);
     sqlite3DeferForeignKey(pParse, yymsp[0].minor.yy316);
 }
-#line 2211 "ext/pdo_sqlite/sqlite/src/parse.c"
+#line 2217 "parse.c"
         break;
       case 92:
       case 94:
-#line 338 "ext/pdo_sqlite/sqlite/src/parse.y"
+#line 339 "parse.y"
 {yygotominor.yy316 = OE_Default;}
-#line 2217 "ext/pdo_sqlite/sqlite/src/parse.c"
+#line 2223 "parse.c"
         break;
       case 97:
-#line 343 "ext/pdo_sqlite/sqlite/src/parse.y"
+#line 344 "parse.y"
 {yygotominor.yy316 = OE_Ignore;}
-#line 2222 "ext/pdo_sqlite/sqlite/src/parse.c"
+#line 2228 "parse.c"
         break;
       case 98:
-      case 169:
-#line 344 "ext/pdo_sqlite/sqlite/src/parse.y"
+      case 167:
+#line 345 "parse.y"
 {yygotominor.yy316 = OE_Replace;}
-#line 2228 "ext/pdo_sqlite/sqlite/src/parse.c"
+#line 2234 "parse.c"
         break;
       case 99:
-#line 348 "ext/pdo_sqlite/sqlite/src/parse.y"
+#line 349 "parse.y"
 {
   sqlite3DropTable(pParse, yymsp[0].minor.yy419, 0, yymsp[-1].minor.yy316);
 }
-#line 2235 "ext/pdo_sqlite/sqlite/src/parse.c"
+#line 2241 "parse.c"
         break;
       case 102:
-#line 358 "ext/pdo_sqlite/sqlite/src/parse.y"
+#line 359 "parse.y"
 {
   sqlite3CreateView(pParse, &yymsp[-7].minor.yy0, &yymsp[-3].minor.yy178, &yymsp[-2].minor.yy178, yymsp[0].minor.yy43, yymsp[-6].minor.yy316, yymsp[-4].minor.yy316);
 }
-#line 2242 "ext/pdo_sqlite/sqlite/src/parse.c"
+#line 2248 "parse.c"
         break;
       case 103:
-#line 361 "ext/pdo_sqlite/sqlite/src/parse.y"
+#line 362 "parse.y"
 {
   sqlite3DropTable(pParse, yymsp[0].minor.yy419, 1, yymsp[-1].minor.yy316);
 }
-#line 2249 "ext/pdo_sqlite/sqlite/src/parse.c"
+#line 2255 "parse.c"
         break;
       case 104:
-#line 368 "ext/pdo_sqlite/sqlite/src/parse.y"
+#line 369 "parse.y"
 {
   sqlite3Select(pParse, yymsp[0].minor.yy43, SRT_Callback, 0, 0, 0, 0, 0);
   sqlite3SelectDelete(yymsp[0].minor.yy43);
 }
-#line 2257 "ext/pdo_sqlite/sqlite/src/parse.c"
+#line 2263 "parse.c"
         break;
       case 105:
       case 128:
-#line 378 "ext/pdo_sqlite/sqlite/src/parse.y"
+#line 379 "parse.y"
 {yygotominor.yy43 = yymsp[0].minor.yy43;}
-#line 2263 "ext/pdo_sqlite/sqlite/src/parse.c"
+#line 2269 "parse.c"
         break;
       case 106:
-#line 380 "ext/pdo_sqlite/sqlite/src/parse.y"
+#line 381 "parse.y"
 {
   if( yymsp[0].minor.yy43 ){
     yymsp[0].minor.yy43->op = yymsp[-1].minor.yy316;
@@ -2268,320 +2274,315 @@ static void yy_reduce(
   }
   yygotominor.yy43 = yymsp[0].minor.yy43;
 }
-#line 2274 "ext/pdo_sqlite/sqlite/src/parse.c"
+#line 2280 "parse.c"
         break;
       case 108:
-#line 389 "ext/pdo_sqlite/sqlite/src/parse.y"
+#line 390 "parse.y"
 {yygotominor.yy316 = TK_ALL;}
-#line 2279 "ext/pdo_sqlite/sqlite/src/parse.c"
+#line 2285 "parse.c"
         break;
       case 110:
-#line 393 "ext/pdo_sqlite/sqlite/src/parse.y"
+#line 394 "parse.y"
 {
   yygotominor.yy43 = sqlite3SelectNew(yymsp[-6].minor.yy242,yymsp[-5].minor.yy419,yymsp[-4].minor.yy450,yymsp[-3].minor.yy242,yymsp[-2].minor.yy450,yymsp[-1].minor.yy242,yymsp[-7].minor.yy316,yymsp[0].minor.yy84.pLimit,yymsp[0].minor.yy84.pOffset);
 }
-#line 2286 "ext/pdo_sqlite/sqlite/src/parse.c"
+#line 2292 "parse.c"
         break;
       case 114:
-      case 238:
-#line 414 "ext/pdo_sqlite/sqlite/src/parse.y"
+      case 237:
+#line 415 "parse.y"
 {yygotominor.yy242 = yymsp[-1].minor.yy242;}
-#line 2292 "ext/pdo_sqlite/sqlite/src/parse.c"
+#line 2298 "parse.c"
         break;
       case 115:
       case 141:
-      case 151:
-      case 237:
-#line 415 "ext/pdo_sqlite/sqlite/src/parse.y"
+      case 149:
+      case 236:
+#line 416 "parse.y"
 {yygotominor.yy242 = 0;}
-#line 2300 "ext/pdo_sqlite/sqlite/src/parse.c"
+#line 2306 "parse.c"
         break;
       case 116:
-#line 416 "ext/pdo_sqlite/sqlite/src/parse.y"
+#line 417 "parse.y"
 {
    yygotominor.yy242 = sqlite3ExprListAppend(yymsp[-2].minor.yy242,yymsp[-1].minor.yy450,yymsp[0].minor.yy178.n?&yymsp[0].minor.yy178:0);
 }
-#line 2307 "ext/pdo_sqlite/sqlite/src/parse.c"
+#line 2313 "parse.c"
         break;
       case 117:
-#line 419 "ext/pdo_sqlite/sqlite/src/parse.y"
+#line 420 "parse.y"
 {
   yygotominor.yy242 = sqlite3ExprListAppend(yymsp[-1].minor.yy242, sqlite3Expr(TK_ALL, 0, 0, 0), 0);
 }
-#line 2314 "ext/pdo_sqlite/sqlite/src/parse.c"
+#line 2320 "parse.c"
         break;
       case 118:
-#line 422 "ext/pdo_sqlite/sqlite/src/parse.y"
+#line 423 "parse.y"
 {
   Expr *pRight = sqlite3Expr(TK_ALL, 0, 0, 0);
   Expr *pLeft = sqlite3Expr(TK_ID, 0, 0, &yymsp[-2].minor.yy178);
   yygotominor.yy242 = sqlite3ExprListAppend(yymsp[-3].minor.yy242, sqlite3Expr(TK_DOT, pLeft, pRight, 0), 0);
 }
-#line 2323 "ext/pdo_sqlite/sqlite/src/parse.c"
+#line 2329 "parse.c"
         break;
       case 121:
-#line 434 "ext/pdo_sqlite/sqlite/src/parse.y"
+#line 435 "parse.y"
 {yygotominor.yy178.n = 0;}
-#line 2328 "ext/pdo_sqlite/sqlite/src/parse.c"
+#line 2334 "parse.c"
         break;
       case 122:
-#line 446 "ext/pdo_sqlite/sqlite/src/parse.y"
+#line 447 "parse.y"
 {yygotominor.yy419 = sqliteMalloc(sizeof(*yygotominor.yy419));}
-#line 2333 "ext/pdo_sqlite/sqlite/src/parse.c"
+#line 2339 "parse.c"
         break;
       case 123:
-#line 447 "ext/pdo_sqlite/sqlite/src/parse.y"
+#line 448 "parse.y"
 {
   yygotominor.yy419 = yymsp[0].minor.yy419;
   sqlite3SrcListShiftJoinType(yygotominor.yy419);
 }
-#line 2341 "ext/pdo_sqlite/sqlite/src/parse.c"
+#line 2347 "parse.c"
         break;
       case 124:
-#line 455 "ext/pdo_sqlite/sqlite/src/parse.y"
+#line 456 "parse.y"
 {
    yygotominor.yy419 = yymsp[-1].minor.yy419;
    if( yygotominor.yy419 && yygotominor.yy419->nSrc>0 ) yygotominor.yy419->a[yygotominor.yy419->nSrc-1].jointype = yymsp[0].minor.yy316;
 }
-#line 2349 "ext/pdo_sqlite/sqlite/src/parse.c"
+#line 2355 "parse.c"
         break;
       case 125:
-#line 459 "ext/pdo_sqlite/sqlite/src/parse.y"
+#line 460 "parse.y"
 {yygotominor.yy419 = 0;}
-#line 2354 "ext/pdo_sqlite/sqlite/src/parse.c"
+#line 2360 "parse.c"
         break;
       case 126:
-#line 460 "ext/pdo_sqlite/sqlite/src/parse.y"
+#line 461 "parse.y"
 {
   yygotominor.yy419 = sqlite3SrcListAppendFromTerm(yymsp[-5].minor.yy419,&yymsp[-4].minor.yy178,&yymsp[-3].minor.yy178,&yymsp[-2].minor.yy178,0,yymsp[-1].minor.yy450,yymsp[0].minor.yy352);
 }
-#line 2361 "ext/pdo_sqlite/sqlite/src/parse.c"
+#line 2367 "parse.c"
         break;
       case 127:
-#line 465 "ext/pdo_sqlite/sqlite/src/parse.y"
+#line 466 "parse.y"
 {
     yygotominor.yy419 = sqlite3SrcListAppendFromTerm(yymsp[-6].minor.yy419,0,0,&yymsp[-2].minor.yy178,yymsp[-4].minor.yy43,yymsp[-1].minor.yy450,yymsp[0].minor.yy352);
   }
-#line 2368 "ext/pdo_sqlite/sqlite/src/parse.c"
+#line 2374 "parse.c"
         break;
       case 129:
-#line 476 "ext/pdo_sqlite/sqlite/src/parse.y"
+#line 477 "parse.y"
 {
      sqlite3SrcListShiftJoinType(yymsp[0].minor.yy419);
      yygotominor.yy43 = sqlite3SelectNew(0,yymsp[0].minor.yy419,0,0,0,0,0,0,0);
   }
-#line 2376 "ext/pdo_sqlite/sqlite/src/parse.c"
+#line 2382 "parse.c"
         break;
       case 130:
-#line 483 "ext/pdo_sqlite/sqlite/src/parse.y"
+#line 484 "parse.y"
 {yygotominor.yy178.z=0; yygotominor.yy178.n=0;}
-#line 2381 "ext/pdo_sqlite/sqlite/src/parse.c"
+#line 2387 "parse.c"
         break;
       case 132:
-#line 488 "ext/pdo_sqlite/sqlite/src/parse.y"
+#line 489 "parse.y"
 {yygotominor.yy419 = sqlite3SrcListAppend(0,&yymsp[-1].minor.yy178,&yymsp[0].minor.yy178);}
-#line 2386 "ext/pdo_sqlite/sqlite/src/parse.c"
+#line 2392 "parse.c"
         break;
       case 133:
-#line 492 "ext/pdo_sqlite/sqlite/src/parse.y"
+#line 493 "parse.y"
 { yygotominor.yy316 = JT_INNER; }
-#line 2391 "ext/pdo_sqlite/sqlite/src/parse.c"
+#line 2397 "parse.c"
         break;
       case 134:
-#line 493 "ext/pdo_sqlite/sqlite/src/parse.y"
+#line 494 "parse.y"
 { yygotominor.yy316 = sqlite3JoinType(pParse,&yymsp[-1].minor.yy0,0,0); }
-#line 2396 "ext/pdo_sqlite/sqlite/src/parse.c"
+#line 2402 "parse.c"
         break;
       case 135:
-#line 494 "ext/pdo_sqlite/sqlite/src/parse.y"
+#line 495 "parse.y"
 { yygotominor.yy316 = sqlite3JoinType(pParse,&yymsp[-2].minor.yy0,&yymsp[-1].minor.yy178,0); }
-#line 2401 "ext/pdo_sqlite/sqlite/src/parse.c"
+#line 2407 "parse.c"
         break;
       case 136:
-#line 496 "ext/pdo_sqlite/sqlite/src/parse.y"
+#line 497 "parse.y"
 { yygotominor.yy316 = sqlite3JoinType(pParse,&yymsp[-3].minor.yy0,&yymsp[-2].minor.yy178,&yymsp[-1].minor.yy178); }
-#line 2406 "ext/pdo_sqlite/sqlite/src/parse.c"
+#line 2412 "parse.c"
         break;
       case 137:
       case 145:
-      case 154:
-      case 161:
-      case 176:
+      case 152:
+      case 159:
+      case 174:
+      case 202:
+      case 225:
+      case 227:
+      case 231:
+#line 501 "parse.y"
+{yygotominor.yy450 = yymsp[0].minor.yy450;}
+#line 2425 "parse.c"
+        break;
+      case 138:
+      case 151:
+      case 158:
       case 203:
       case 226:
       case 228:
       case 232:
-#line 500 "ext/pdo_sqlite/sqlite/src/parse.y"
-{yygotominor.yy450 = yymsp[0].minor.yy450;}
-#line 2419 "ext/pdo_sqlite/sqlite/src/parse.c"
-        break;
-      case 138:
-      case 153:
-      case 160:
-      case 204:
-      case 227:
-      case 229:
-      case 233:
-#line 501 "ext/pdo_sqlite/sqlite/src/parse.y"
+#line 502 "parse.y"
 {yygotominor.yy450 = 0;}
-#line 2430 "ext/pdo_sqlite/sqlite/src/parse.c"
+#line 2436 "parse.c"
         break;
       case 139:
-      case 173:
-#line 505 "ext/pdo_sqlite/sqlite/src/parse.y"
+      case 171:
+#line 506 "parse.y"
 {yygotominor.yy352 = yymsp[-1].minor.yy352;}
-#line 2436 "ext/pdo_sqlite/sqlite/src/parse.c"
+#line 2442 "parse.c"
         break;
       case 140:
-      case 172:
-#line 506 "ext/pdo_sqlite/sqlite/src/parse.y"
+      case 170:
+#line 507 "parse.y"
 {yygotominor.yy352 = 0;}
-#line 2442 "ext/pdo_sqlite/sqlite/src/parse.c"
+#line 2448 "parse.c"
         break;
       case 142:
-      case 152:
-#line 517 "ext/pdo_sqlite/sqlite/src/parse.y"
+      case 150:
+#line 518 "parse.y"
 {yygotominor.yy242 = yymsp[0].minor.yy242;}
-#line 2448 "ext/pdo_sqlite/sqlite/src/parse.c"
+#line 2454 "parse.c"
         break;
       case 143:
-#line 518 "ext/pdo_sqlite/sqlite/src/parse.y"
+#line 519 "parse.y"
 {
-  yygotominor.yy242 = sqlite3ExprListAppend(yymsp[-4].minor.yy242,yymsp[-2].minor.yy450,yymsp[-1].minor.yy178.n>0?&yymsp[-1].minor.yy178:0);
+  yygotominor.yy242 = sqlite3ExprListAppend(yymsp[-3].minor.yy242,yymsp[-1].minor.yy450,0);
   if( yygotominor.yy242 ) yygotominor.yy242->a[yygotominor.yy242->nExpr-1].sortOrder = yymsp[0].minor.yy316;
 }
-#line 2456 "ext/pdo_sqlite/sqlite/src/parse.c"
+#line 2462 "parse.c"
         break;
       case 144:
-#line 522 "ext/pdo_sqlite/sqlite/src/parse.y"
+#line 523 "parse.y"
 {
-  yygotominor.yy242 = sqlite3ExprListAppend(0,yymsp[-2].minor.yy450,yymsp[-1].minor.yy178.n>0?&yymsp[-1].minor.yy178:0);
+  yygotominor.yy242 = sqlite3ExprListAppend(0,yymsp[-1].minor.yy450,0);
   if( yygotominor.yy242 && yygotominor.yy242->a ) yygotominor.yy242->a[0].sortOrder = yymsp[0].minor.yy316;
 }
-#line 2464 "ext/pdo_sqlite/sqlite/src/parse.c"
+#line 2470 "parse.c"
         break;
       case 146:
       case 148:
-#line 531 "ext/pdo_sqlite/sqlite/src/parse.y"
+#line 531 "parse.y"
 {yygotominor.yy316 = SQLITE_SO_ASC;}
-#line 2470 "ext/pdo_sqlite/sqlite/src/parse.c"
+#line 2476 "parse.c"
         break;
       case 147:
-#line 532 "ext/pdo_sqlite/sqlite/src/parse.y"
+#line 532 "parse.y"
 {yygotominor.yy316 = SQLITE_SO_DESC;}
-#line 2475 "ext/pdo_sqlite/sqlite/src/parse.c"
-        break;
-      case 149:
-#line 534 "ext/pdo_sqlite/sqlite/src/parse.y"
-{yygotominor.yy178.z = 0; yygotominor.yy178.n = 0;}
-#line 2480 "ext/pdo_sqlite/sqlite/src/parse.c"
+#line 2481 "parse.c"
         break;
-      case 155:
-#line 552 "ext/pdo_sqlite/sqlite/src/parse.y"
+      case 153:
+#line 550 "parse.y"
 {yygotominor.yy84.pLimit = 0; yygotominor.yy84.pOffset = 0;}
-#line 2485 "ext/pdo_sqlite/sqlite/src/parse.c"
+#line 2486 "parse.c"
         break;
-      case 156:
-#line 553 "ext/pdo_sqlite/sqlite/src/parse.y"
+      case 154:
+#line 551 "parse.y"
 {yygotominor.yy84.pLimit = yymsp[0].minor.yy450; yygotominor.yy84.pOffset = 0;}
-#line 2490 "ext/pdo_sqlite/sqlite/src/parse.c"
+#line 2491 "parse.c"
         break;
-      case 157:
-#line 555 "ext/pdo_sqlite/sqlite/src/parse.y"
+      case 155:
+#line 553 "parse.y"
 {yygotominor.yy84.pLimit = yymsp[-2].minor.yy450; yygotominor.yy84.pOffset = yymsp[0].minor.yy450;}
-#line 2495 "ext/pdo_sqlite/sqlite/src/parse.c"
+#line 2496 "parse.c"
         break;
-      case 158:
-#line 557 "ext/pdo_sqlite/sqlite/src/parse.y"
+      case 156:
+#line 555 "parse.y"
 {yygotominor.yy84.pOffset = yymsp[-2].minor.yy450; yygotominor.yy84.pLimit = yymsp[0].minor.yy450;}
-#line 2500 "ext/pdo_sqlite/sqlite/src/parse.c"
+#line 2501 "parse.c"
         break;
-      case 159:
-#line 561 "ext/pdo_sqlite/sqlite/src/parse.y"
+      case 157:
+#line 559 "parse.y"
 {sqlite3DeleteFrom(pParse,yymsp[-1].minor.yy419,yymsp[0].minor.yy450);}
-#line 2505 "ext/pdo_sqlite/sqlite/src/parse.c"
+#line 2506 "parse.c"
         break;
-      case 162:
-#line 572 "ext/pdo_sqlite/sqlite/src/parse.y"
+      case 160:
+#line 570 "parse.y"
 {sqlite3Update(pParse,yymsp[-3].minor.yy419,yymsp[-1].minor.yy242,yymsp[0].minor.yy450,yymsp[-4].minor.yy316);}
-#line 2510 "ext/pdo_sqlite/sqlite/src/parse.c"
+#line 2511 "parse.c"
         break;
-      case 163:
-#line 578 "ext/pdo_sqlite/sqlite/src/parse.y"
+      case 161:
+#line 576 "parse.y"
 {yygotominor.yy242 = sqlite3ExprListAppend(yymsp[-4].minor.yy242,yymsp[0].minor.yy450,&yymsp[-2].minor.yy178);}
-#line 2515 "ext/pdo_sqlite/sqlite/src/parse.c"
+#line 2516 "parse.c"
         break;
-      case 164:
-#line 579 "ext/pdo_sqlite/sqlite/src/parse.y"
+      case 162:
+#line 577 "parse.y"
 {yygotominor.yy242 = sqlite3ExprListAppend(0,yymsp[0].minor.yy450,&yymsp[-2].minor.yy178);}
-#line 2520 "ext/pdo_sqlite/sqlite/src/parse.c"
+#line 2521 "parse.c"
         break;
-      case 165:
-#line 585 "ext/pdo_sqlite/sqlite/src/parse.y"
+      case 163:
+#line 583 "parse.y"
 {sqlite3Insert(pParse, yymsp[-5].minor.yy419, yymsp[-1].minor.yy242, 0, yymsp[-4].minor.yy352, yymsp[-7].minor.yy316);}
-#line 2525 "ext/pdo_sqlite/sqlite/src/parse.c"
+#line 2526 "parse.c"
         break;
-      case 166:
-#line 587 "ext/pdo_sqlite/sqlite/src/parse.y"
+      case 164:
+#line 585 "parse.y"
 {sqlite3Insert(pParse, yymsp[-2].minor.yy419, 0, yymsp[0].minor.yy43, yymsp[-1].minor.yy352, yymsp[-4].minor.yy316);}
-#line 2530 "ext/pdo_sqlite/sqlite/src/parse.c"
+#line 2531 "parse.c"
         break;
-      case 167:
-#line 589 "ext/pdo_sqlite/sqlite/src/parse.y"
+      case 165:
+#line 587 "parse.y"
 {sqlite3Insert(pParse, yymsp[-3].minor.yy419, 0, 0, yymsp[-2].minor.yy352, yymsp[-5].minor.yy316);}
-#line 2535 "ext/pdo_sqlite/sqlite/src/parse.c"
+#line 2536 "parse.c"
         break;
-      case 170:
-      case 230:
-#line 599 "ext/pdo_sqlite/sqlite/src/parse.y"
+      case 168:
+      case 229:
+#line 597 "parse.y"
 {yygotominor.yy242 = sqlite3ExprListAppend(yymsp[-2].minor.yy242,yymsp[0].minor.yy450,0);}
-#line 2541 "ext/pdo_sqlite/sqlite/src/parse.c"
+#line 2542 "parse.c"
         break;
-      case 171:
-      case 231:
-#line 600 "ext/pdo_sqlite/sqlite/src/parse.y"
+      case 169:
+      case 230:
+#line 598 "parse.y"
 {yygotominor.yy242 = sqlite3ExprListAppend(0,yymsp[0].minor.yy450,0);}
-#line 2547 "ext/pdo_sqlite/sqlite/src/parse.c"
+#line 2548 "parse.c"
         break;
-      case 174:
-#line 609 "ext/pdo_sqlite/sqlite/src/parse.y"
+      case 172:
+#line 607 "parse.y"
 {yygotominor.yy352 = sqlite3IdListAppend(yymsp[-2].minor.yy352,&yymsp[0].minor.yy178);}
-#line 2552 "ext/pdo_sqlite/sqlite/src/parse.c"
+#line 2553 "parse.c"
         break;
-      case 175:
-#line 610 "ext/pdo_sqlite/sqlite/src/parse.y"
+      case 173:
+#line 608 "parse.y"
 {yygotominor.yy352 = sqlite3IdListAppend(0,&yymsp[0].minor.yy178);}
-#line 2557 "ext/pdo_sqlite/sqlite/src/parse.c"
+#line 2558 "parse.c"
         break;
-      case 177:
-#line 621 "ext/pdo_sqlite/sqlite/src/parse.y"
+      case 175:
+#line 619 "parse.y"
 {yygotominor.yy450 = yymsp[-1].minor.yy450; sqlite3ExprSpan(yygotominor.yy450,&yymsp[-2].minor.yy0,&yymsp[0].minor.yy0); }
-#line 2562 "ext/pdo_sqlite/sqlite/src/parse.c"
+#line 2563 "parse.c"
         break;
-      case 178:
-      case 183:
-      case 184:
-#line 622 "ext/pdo_sqlite/sqlite/src/parse.y"
+      case 176:
+      case 181:
+      case 182:
+#line 620 "parse.y"
 {yygotominor.yy450 = sqlite3Expr(yymsp[0].major, 0, 0, &yymsp[0].minor.yy0);}
-#line 2569 "ext/pdo_sqlite/sqlite/src/parse.c"
+#line 2570 "parse.c"
         break;
-      case 179:
-      case 180:
-#line 623 "ext/pdo_sqlite/sqlite/src/parse.y"
+      case 177:
+      case 178:
+#line 621 "parse.y"
 {yygotominor.yy450 = sqlite3Expr(TK_ID, 0, 0, &yymsp[0].minor.yy0);}
-#line 2575 "ext/pdo_sqlite/sqlite/src/parse.c"
+#line 2576 "parse.c"
         break;
-      case 181:
-#line 625 "ext/pdo_sqlite/sqlite/src/parse.y"
+      case 179:
+#line 623 "parse.y"
 {
   Expr *temp1 = sqlite3Expr(TK_ID, 0, 0, &yymsp[-2].minor.yy178);
   Expr *temp2 = sqlite3Expr(TK_ID, 0, 0, &yymsp[0].minor.yy178);
   yygotominor.yy450 = sqlite3Expr(TK_DOT, temp1, temp2, 0);
 }
-#line 2584 "ext/pdo_sqlite/sqlite/src/parse.c"
+#line 2585 "parse.c"
         break;
-      case 182:
-#line 630 "ext/pdo_sqlite/sqlite/src/parse.y"
+      case 180:
+#line 628 "parse.y"
 {
   Expr *temp1 = sqlite3Expr(TK_ID, 0, 0, &yymsp[-4].minor.yy178);
   Expr *temp2 = sqlite3Expr(TK_ID, 0, 0, &yymsp[-2].minor.yy178);
@@ -2589,32 +2590,39 @@ static void yy_reduce(
   Expr *temp4 = sqlite3Expr(TK_DOT, temp2, temp3, 0);
   yygotominor.yy450 = sqlite3Expr(TK_DOT, temp1, temp4, 0);
 }
-#line 2595 "ext/pdo_sqlite/sqlite/src/parse.c"
+#line 2596 "parse.c"
         break;
-      case 185:
-#line 639 "ext/pdo_sqlite/sqlite/src/parse.y"
+      case 183:
+#line 637 "parse.y"
 {yygotominor.yy450 = sqlite3RegisterExpr(pParse, &yymsp[0].minor.yy0);}
-#line 2600 "ext/pdo_sqlite/sqlite/src/parse.c"
+#line 2601 "parse.c"
         break;
-      case 186:
-#line 640 "ext/pdo_sqlite/sqlite/src/parse.y"
+      case 184:
+#line 638 "parse.y"
 {
   Token *pToken = &yymsp[0].minor.yy0;
   Expr *pExpr = yygotominor.yy450 = sqlite3Expr(TK_VARIABLE, 0, 0, pToken);
   sqlite3ExprAssignVarNumber(pParse, pExpr);
 }
-#line 2609 "ext/pdo_sqlite/sqlite/src/parse.c"
+#line 2610 "parse.c"
         break;
-      case 187:
-#line 646 "ext/pdo_sqlite/sqlite/src/parse.y"
+      case 185:
+#line 643 "parse.y"
+{
+  yygotominor.yy450 = sqlite3ExprSetColl(pParse, yymsp[-2].minor.yy450, &yymsp[0].minor.yy178);
+}
+#line 2617 "parse.c"
+        break;
+      case 186:
+#line 647 "parse.y"
 {
   yygotominor.yy450 = sqlite3Expr(TK_CAST, yymsp[-3].minor.yy450, 0, &yymsp[-1].minor.yy178);
   sqlite3ExprSpan(yygotominor.yy450,&yymsp[-5].minor.yy0,&yymsp[0].minor.yy0);
 }
-#line 2617 "ext/pdo_sqlite/sqlite/src/parse.c"
+#line 2625 "parse.c"
         break;
-      case 188:
-#line 651 "ext/pdo_sqlite/sqlite/src/parse.y"
+      case 187:
+#line 652 "parse.y"
 {
   yygotominor.yy450 = sqlite3ExprFunction(yymsp[-1].minor.yy242, &yymsp[-4].minor.yy0);
   sqlite3ExprSpan(yygotominor.yy450,&yymsp[-4].minor.yy0,&yymsp[0].minor.yy0);
@@ -2622,18 +2630,18 @@ static void yy_reduce(
     yygotominor.yy450->flags |= EP_Distinct;
   }
 }
-#line 2628 "ext/pdo_sqlite/sqlite/src/parse.c"
+#line 2636 "parse.c"
         break;
-      case 189:
-#line 658 "ext/pdo_sqlite/sqlite/src/parse.y"
+      case 188:
+#line 659 "parse.y"
 {
   yygotominor.yy450 = sqlite3ExprFunction(0, &yymsp[-3].minor.yy0);
   sqlite3ExprSpan(yygotominor.yy450,&yymsp[-3].minor.yy0,&yymsp[0].minor.yy0);
 }
-#line 2636 "ext/pdo_sqlite/sqlite/src/parse.c"
+#line 2644 "parse.c"
         break;
-      case 190:
-#line 662 "ext/pdo_sqlite/sqlite/src/parse.y"
+      case 189:
+#line 663 "parse.y"
 {
   /* The CURRENT_TIME, CURRENT_DATE, and CURRENT_TIMESTAMP values are
   ** treated as functions that return constants */
@@ -2643,8 +2651,9 @@ static void yy_reduce(
     yygotominor.yy450->span = yymsp[0].minor.yy0;
   }
 }
-#line 2649 "ext/pdo_sqlite/sqlite/src/parse.c"
+#line 2657 "parse.c"
         break;
+      case 190:
       case 191:
       case 192:
       case 193:
@@ -2652,25 +2661,24 @@ static void yy_reduce(
       case 195:
       case 196:
       case 197:
-      case 198:
-#line 671 "ext/pdo_sqlite/sqlite/src/parse.y"
+#line 672 "parse.y"
 {yygotominor.yy450 = sqlite3Expr(yymsp[-1].major, yymsp[-2].minor.yy450, yymsp[0].minor.yy450, 0);}
-#line 2661 "ext/pdo_sqlite/sqlite/src/parse.c"
+#line 2669 "parse.c"
         break;
-      case 199:
-      case 201:
-#line 681 "ext/pdo_sqlite/sqlite/src/parse.y"
+      case 198:
+      case 200:
+#line 682 "parse.y"
 {yygotominor.yy86.eOperator = yymsp[0].minor.yy0; yygotominor.yy86.not = 0;}
-#line 2667 "ext/pdo_sqlite/sqlite/src/parse.c"
+#line 2675 "parse.c"
         break;
-      case 200:
-      case 202:
-#line 682 "ext/pdo_sqlite/sqlite/src/parse.y"
+      case 199:
+      case 201:
+#line 683 "parse.y"
 {yygotominor.yy86.eOperator = yymsp[0].minor.yy0; yygotominor.yy86.not = 1;}
-#line 2673 "ext/pdo_sqlite/sqlite/src/parse.c"
+#line 2681 "parse.c"
         break;
-      case 205:
-#line 689 "ext/pdo_sqlite/sqlite/src/parse.y"
+      case 204:
+#line 690 "parse.y"
 {
   ExprList *pList;
   pList = sqlite3ExprListAppend(0, yymsp[-1].minor.yy450, 0);
@@ -2683,66 +2691,66 @@ static void yy_reduce(
   sqlite3ExprSpan(yygotominor.yy450, &yymsp[-3].minor.yy450->span, &yymsp[-1].minor.yy450->span);
   if( yygotominor.yy450 ) yygotominor.yy450->flags |= EP_InfixFunc;
 }
-#line 2689 "ext/pdo_sqlite/sqlite/src/parse.c"
+#line 2697 "parse.c"
         break;
-      case 206:
-#line 702 "ext/pdo_sqlite/sqlite/src/parse.y"
+      case 205:
+#line 703 "parse.y"
 {
   yygotominor.yy450 = sqlite3Expr(yymsp[0].major, yymsp[-1].minor.yy450, 0, 0);
   sqlite3ExprSpan(yygotominor.yy450,&yymsp[-1].minor.yy450->span,&yymsp[0].minor.yy0);
 }
-#line 2697 "ext/pdo_sqlite/sqlite/src/parse.c"
+#line 2705 "parse.c"
         break;
-      case 207:
-#line 706 "ext/pdo_sqlite/sqlite/src/parse.y"
+      case 206:
+#line 707 "parse.y"
 {
   yygotominor.yy450 = sqlite3Expr(TK_ISNULL, yymsp[-2].minor.yy450, 0, 0);
   sqlite3ExprSpan(yygotominor.yy450,&yymsp[-2].minor.yy450->span,&yymsp[0].minor.yy0);
 }
-#line 2705 "ext/pdo_sqlite/sqlite/src/parse.c"
+#line 2713 "parse.c"
         break;
-      case 208:
-#line 710 "ext/pdo_sqlite/sqlite/src/parse.y"
+      case 207:
+#line 711 "parse.y"
 {
   yygotominor.yy450 = sqlite3Expr(TK_NOTNULL, yymsp[-2].minor.yy450, 0, 0);
   sqlite3ExprSpan(yygotominor.yy450,&yymsp[-2].minor.yy450->span,&yymsp[0].minor.yy0);
 }
-#line 2713 "ext/pdo_sqlite/sqlite/src/parse.c"
+#line 2721 "parse.c"
         break;
-      case 209:
-#line 714 "ext/pdo_sqlite/sqlite/src/parse.y"
+      case 208:
+#line 715 "parse.y"
 {
   yygotominor.yy450 = sqlite3Expr(TK_NOTNULL, yymsp[-3].minor.yy450, 0, 0);
   sqlite3ExprSpan(yygotominor.yy450,&yymsp[-3].minor.yy450->span,&yymsp[0].minor.yy0);
 }
-#line 2721 "ext/pdo_sqlite/sqlite/src/parse.c"
+#line 2729 "parse.c"
         break;
-      case 210:
-#line 718 "ext/pdo_sqlite/sqlite/src/parse.y"
+      case 209:
+#line 719 "parse.y"
 {
   yygotominor.yy450 = sqlite3Expr(yymsp[-1].major, yymsp[0].minor.yy450, 0, 0);
   sqlite3ExprSpan(yygotominor.yy450,&yymsp[-1].minor.yy0,&yymsp[0].minor.yy450->span);
 }
-#line 2729 "ext/pdo_sqlite/sqlite/src/parse.c"
+#line 2737 "parse.c"
         break;
-      case 211:
-#line 722 "ext/pdo_sqlite/sqlite/src/parse.y"
+      case 210:
+#line 723 "parse.y"
 {
   yygotominor.yy450 = sqlite3Expr(TK_UMINUS, yymsp[0].minor.yy450, 0, 0);
   sqlite3ExprSpan(yygotominor.yy450,&yymsp[-1].minor.yy0,&yymsp[0].minor.yy450->span);
 }
-#line 2737 "ext/pdo_sqlite/sqlite/src/parse.c"
+#line 2745 "parse.c"
         break;
-      case 212:
-#line 726 "ext/pdo_sqlite/sqlite/src/parse.y"
+      case 211:
+#line 727 "parse.y"
 {
   yygotominor.yy450 = sqlite3Expr(TK_UPLUS, yymsp[0].minor.yy450, 0, 0);
   sqlite3ExprSpan(yygotominor.yy450,&yymsp[-1].minor.yy0,&yymsp[0].minor.yy450->span);
 }
-#line 2745 "ext/pdo_sqlite/sqlite/src/parse.c"
+#line 2753 "parse.c"
         break;
-      case 215:
-#line 733 "ext/pdo_sqlite/sqlite/src/parse.y"
+      case 214:
+#line 734 "parse.y"
 {
   ExprList *pList = sqlite3ExprListAppend(0, yymsp[-2].minor.yy450, 0);
   pList = sqlite3ExprListAppend(pList, yymsp[0].minor.yy450, 0);
@@ -2755,10 +2763,10 @@ static void yy_reduce(
   if( yymsp[-3].minor.yy316 ) yygotominor.yy450 = sqlite3Expr(TK_NOT, yygotominor.yy450, 0, 0);
   sqlite3ExprSpan(yygotominor.yy450,&yymsp[-4].minor.yy450->span,&yymsp[0].minor.yy450->span);
 }
-#line 2761 "ext/pdo_sqlite/sqlite/src/parse.c"
+#line 2769 "parse.c"
         break;
-      case 218:
-#line 749 "ext/pdo_sqlite/sqlite/src/parse.y"
+      case 217:
+#line 750 "parse.y"
 {
     yygotominor.yy450 = sqlite3Expr(TK_IN, yymsp[-4].minor.yy450, 0, 0);
     if( yygotominor.yy450 ){
@@ -2769,10 +2777,10 @@ static void yy_reduce(
     if( yymsp[-3].minor.yy316 ) yygotominor.yy450 = sqlite3Expr(TK_NOT, yygotominor.yy450, 0, 0);
     sqlite3ExprSpan(yygotominor.yy450,&yymsp[-4].minor.yy450->span,&yymsp[0].minor.yy0);
   }
-#line 2775 "ext/pdo_sqlite/sqlite/src/parse.c"
+#line 2783 "parse.c"
         break;
-      case 219:
-#line 759 "ext/pdo_sqlite/sqlite/src/parse.y"
+      case 218:
+#line 760 "parse.y"
 {
     yygotominor.yy450 = sqlite3Expr(TK_SELECT, 0, 0, 0);
     if( yygotominor.yy450 ){
@@ -2782,10 +2790,10 @@ static void yy_reduce(
     }
     sqlite3ExprSpan(yygotominor.yy450,&yymsp[-2].minor.yy0,&yymsp[0].minor.yy0);
   }
-#line 2788 "ext/pdo_sqlite/sqlite/src/parse.c"
+#line 2796 "parse.c"
         break;
-      case 220:
-#line 768 "ext/pdo_sqlite/sqlite/src/parse.y"
+      case 219:
+#line 769 "parse.y"
 {
     yygotominor.yy450 = sqlite3Expr(TK_IN, yymsp[-4].minor.yy450, 0, 0);
     if( yygotominor.yy450 ){
@@ -2796,10 +2804,10 @@ static void yy_reduce(
     if( yymsp[-3].minor.yy316 ) yygotominor.yy450 = sqlite3Expr(TK_NOT, yygotominor.yy450, 0, 0);
     sqlite3ExprSpan(yygotominor.yy450,&yymsp[-4].minor.yy450->span,&yymsp[0].minor.yy0);
   }
-#line 2802 "ext/pdo_sqlite/sqlite/src/parse.c"
+#line 2810 "parse.c"
         break;
-      case 221:
-#line 778 "ext/pdo_sqlite/sqlite/src/parse.y"
+      case 220:
+#line 779 "parse.y"
 {
     SrcList *pSrc = sqlite3SrcListAppend(0,&yymsp[-1].minor.yy178,&yymsp[0].minor.yy178);
     yygotominor.yy450 = sqlite3Expr(TK_IN, yymsp[-3].minor.yy450, 0, 0);
@@ -2811,10 +2819,10 @@ static void yy_reduce(
     if( yymsp[-2].minor.yy316 ) yygotominor.yy450 = sqlite3Expr(TK_NOT, yygotominor.yy450, 0, 0);
     sqlite3ExprSpan(yygotominor.yy450,&yymsp[-3].minor.yy450->span,yymsp[0].minor.yy178.z?&yymsp[0].minor.yy178:&yymsp[-1].minor.yy178);
   }
-#line 2817 "ext/pdo_sqlite/sqlite/src/parse.c"
+#line 2825 "parse.c"
         break;
-      case 222:
-#line 789 "ext/pdo_sqlite/sqlite/src/parse.y"
+      case 221:
+#line 790 "parse.y"
 {
     Expr *p = yygotominor.yy450 = sqlite3Expr(TK_EXISTS, 0, 0, 0);
     if( p ){
@@ -2824,10 +2832,10 @@ static void yy_reduce(
       sqlite3SelectDelete(yymsp[-1].minor.yy43);
     }
   }
-#line 2830 "ext/pdo_sqlite/sqlite/src/parse.c"
+#line 2838 "parse.c"
         break;
-      case 223:
-#line 801 "ext/pdo_sqlite/sqlite/src/parse.y"
+      case 222:
+#line 802 "parse.y"
 {
   yygotominor.yy450 = sqlite3Expr(TK_CASE, yymsp[-3].minor.yy450, yymsp[-1].minor.yy450, 0);
   if( yygotominor.yy450 ){
@@ -2837,45 +2845,45 @@ static void yy_reduce(
   }
   sqlite3ExprSpan(yygotominor.yy450, &yymsp[-4].minor.yy0, &yymsp[0].minor.yy0);
 }
-#line 2843 "ext/pdo_sqlite/sqlite/src/parse.c"
+#line 2851 "parse.c"
         break;
-      case 224:
-#line 812 "ext/pdo_sqlite/sqlite/src/parse.y"
+      case 223:
+#line 813 "parse.y"
 {
   yygotominor.yy242 = sqlite3ExprListAppend(yymsp[-4].minor.yy242, yymsp[-2].minor.yy450, 0);
   yygotominor.yy242 = sqlite3ExprListAppend(yygotominor.yy242, yymsp[0].minor.yy450, 0);
 }
-#line 2851 "ext/pdo_sqlite/sqlite/src/parse.c"
+#line 2859 "parse.c"
         break;
-      case 225:
-#line 816 "ext/pdo_sqlite/sqlite/src/parse.y"
+      case 224:
+#line 817 "parse.y"
 {
   yygotominor.yy242 = sqlite3ExprListAppend(0, yymsp[-2].minor.yy450, 0);
   yygotominor.yy242 = sqlite3ExprListAppend(yygotominor.yy242, yymsp[0].minor.yy450, 0);
 }
-#line 2859 "ext/pdo_sqlite/sqlite/src/parse.c"
+#line 2867 "parse.c"
         break;
-      case 234:
-#line 843 "ext/pdo_sqlite/sqlite/src/parse.y"
+      case 233:
+#line 844 "parse.y"
 {
   sqlite3CreateIndex(pParse, &yymsp[-6].minor.yy178, &yymsp[-5].minor.yy178, sqlite3SrcListAppend(0,&yymsp[-3].minor.yy178,0), yymsp[-1].minor.yy242, yymsp[-9].minor.yy316,
                       &yymsp[-10].minor.yy0, &yymsp[0].minor.yy0, SQLITE_SO_ASC, yymsp[-7].minor.yy316);
 }
-#line 2867 "ext/pdo_sqlite/sqlite/src/parse.c"
+#line 2875 "parse.c"
         break;
-      case 235:
-      case 281:
-#line 849 "ext/pdo_sqlite/sqlite/src/parse.y"
+      case 234:
+      case 282:
+#line 850 "parse.y"
 {yygotominor.yy316 = OE_Abort;}
-#line 2873 "ext/pdo_sqlite/sqlite/src/parse.c"
+#line 2881 "parse.c"
         break;
-      case 236:
-#line 850 "ext/pdo_sqlite/sqlite/src/parse.y"
+      case 235:
+#line 851 "parse.y"
 {yygotominor.yy316 = OE_None;}
-#line 2878 "ext/pdo_sqlite/sqlite/src/parse.c"
+#line 2886 "parse.c"
         break;
-      case 239:
-#line 860 "ext/pdo_sqlite/sqlite/src/parse.y"
+      case 238:
+#line 861 "parse.y"
 {
   Expr *p = 0;
   if( yymsp[-1].minor.yy178.n>0 ){
@@ -2885,10 +2893,10 @@ static void yy_reduce(
   yygotominor.yy242 = sqlite3ExprListAppend(yymsp[-4].minor.yy242, p, &yymsp[-2].minor.yy178);
   if( yygotominor.yy242 ) yygotominor.yy242->a[yygotominor.yy242->nExpr-1].sortOrder = yymsp[0].minor.yy316;
 }
-#line 2891 "ext/pdo_sqlite/sqlite/src/parse.c"
+#line 2899 "parse.c"
         break;
-      case 240:
-#line 869 "ext/pdo_sqlite/sqlite/src/parse.y"
+      case 239:
+#line 870 "parse.y"
 {
   Expr *p = 0;
   if( yymsp[-1].minor.yy178.n>0 ){
@@ -2898,114 +2906,119 @@ static void yy_reduce(
   yygotominor.yy242 = sqlite3ExprListAppend(0, p, &yymsp[-2].minor.yy178);
   if( yygotominor.yy242 ) yygotominor.yy242->a[yygotominor.yy242->nExpr-1].sortOrder = yymsp[0].minor.yy316;
 }
-#line 2904 "ext/pdo_sqlite/sqlite/src/parse.c"
+#line 2912 "parse.c"
         break;
-      case 242:
-#line 883 "ext/pdo_sqlite/sqlite/src/parse.y"
-{sqlite3DropIndex(pParse, yymsp[0].minor.yy419, yymsp[-1].minor.yy316);}
-#line 2909 "ext/pdo_sqlite/sqlite/src/parse.c"
+      case 241:
+#line 882 "parse.y"
+{yygotominor.yy178.z = 0; yygotominor.yy178.n = 0;}
+#line 2917 "parse.c"
         break;
       case 243:
+#line 888 "parse.y"
+{sqlite3DropIndex(pParse, yymsp[0].minor.yy419, yymsp[-1].minor.yy316);}
+#line 2922 "parse.c"
+        break;
       case 244:
-#line 888 "ext/pdo_sqlite/sqlite/src/parse.y"
+      case 245:
+#line 893 "parse.y"
 {sqlite3Vacuum(pParse);}
-#line 2915 "ext/pdo_sqlite/sqlite/src/parse.c"
+#line 2928 "parse.c"
         break;
-      case 245:
-#line 895 "ext/pdo_sqlite/sqlite/src/parse.y"
+      case 246:
+#line 900 "parse.y"
 {sqlite3Pragma(pParse,&yymsp[-3].minor.yy178,&yymsp[-2].minor.yy178,&yymsp[0].minor.yy178,0);}
-#line 2920 "ext/pdo_sqlite/sqlite/src/parse.c"
+#line 2933 "parse.c"
         break;
-      case 246:
-#line 896 "ext/pdo_sqlite/sqlite/src/parse.y"
+      case 247:
+#line 901 "parse.y"
 {sqlite3Pragma(pParse,&yymsp[-3].minor.yy178,&yymsp[-2].minor.yy178,&yymsp[0].minor.yy0,0);}
-#line 2925 "ext/pdo_sqlite/sqlite/src/parse.c"
+#line 2938 "parse.c"
         break;
-      case 247:
-#line 897 "ext/pdo_sqlite/sqlite/src/parse.y"
+      case 248:
+#line 902 "parse.y"
 {
   sqlite3Pragma(pParse,&yymsp[-3].minor.yy178,&yymsp[-2].minor.yy178,&yymsp[0].minor.yy178,1);
 }
-#line 2932 "ext/pdo_sqlite/sqlite/src/parse.c"
+#line 2945 "parse.c"
         break;
-      case 248:
-#line 900 "ext/pdo_sqlite/sqlite/src/parse.y"
+      case 249:
+#line 905 "parse.y"
 {sqlite3Pragma(pParse,&yymsp[-4].minor.yy178,&yymsp[-3].minor.yy178,&yymsp[-1].minor.yy178,0);}
-#line 2937 "ext/pdo_sqlite/sqlite/src/parse.c"
+#line 2950 "parse.c"
         break;
-      case 249:
-#line 901 "ext/pdo_sqlite/sqlite/src/parse.y"
+      case 250:
+#line 906 "parse.y"
 {sqlite3Pragma(pParse,&yymsp[-1].minor.yy178,&yymsp[0].minor.yy178,0,0);}
-#line 2942 "ext/pdo_sqlite/sqlite/src/parse.c"
+#line 2955 "parse.c"
         break;
-      case 257:
-#line 915 "ext/pdo_sqlite/sqlite/src/parse.y"
+      case 258:
+#line 920 "parse.y"
 {
   Token all;
   all.z = yymsp[-3].minor.yy178.z;
   all.n = (yymsp[0].minor.yy0.z - yymsp[-3].minor.yy178.z) + yymsp[0].minor.yy0.n;
   sqlite3FinishTrigger(pParse, yymsp[-1].minor.yy75, &all);
 }
-#line 2952 "ext/pdo_sqlite/sqlite/src/parse.c"
+#line 2965 "parse.c"
         break;
-      case 258:
-#line 924 "ext/pdo_sqlite/sqlite/src/parse.y"
+      case 259:
+#line 929 "parse.y"
 {
   sqlite3BeginTrigger(pParse, &yymsp[-7].minor.yy178, &yymsp[-6].minor.yy178, yymsp[-5].minor.yy316, yymsp[-4].minor.yy354.a, yymsp[-4].minor.yy354.b, yymsp[-2].minor.yy419, yymsp[-1].minor.yy316, yymsp[0].minor.yy450, yymsp[-10].minor.yy316, yymsp[-8].minor.yy316);
   yygotominor.yy178 = (yymsp[-6].minor.yy178.n==0?yymsp[-7].minor.yy178:yymsp[-6].minor.yy178);
 }
-#line 2960 "ext/pdo_sqlite/sqlite/src/parse.c"
+#line 2973 "parse.c"
         break;
-      case 259:
-      case 262:
-#line 930 "ext/pdo_sqlite/sqlite/src/parse.y"
+      case 260:
+      case 263:
+#line 935 "parse.y"
 { yygotominor.yy316 = TK_BEFORE; }
-#line 2966 "ext/pdo_sqlite/sqlite/src/parse.c"
+#line 2979 "parse.c"
         break;
-      case 260:
-#line 931 "ext/pdo_sqlite/sqlite/src/parse.y"
+      case 261:
+#line 936 "parse.y"
 { yygotominor.yy316 = TK_AFTER;  }
-#line 2971 "ext/pdo_sqlite/sqlite/src/parse.c"
+#line 2984 "parse.c"
         break;
-      case 261:
-#line 932 "ext/pdo_sqlite/sqlite/src/parse.y"
+      case 262:
+#line 937 "parse.y"
 { yygotominor.yy316 = TK_INSTEAD;}
-#line 2976 "ext/pdo_sqlite/sqlite/src/parse.c"
+#line 2989 "parse.c"
         break;
-      case 263:
       case 264:
-#line 937 "ext/pdo_sqlite/sqlite/src/parse.y"
+      case 265:
+#line 942 "parse.y"
 {yygotominor.yy354.a = yymsp[0].major; yygotominor.yy354.b = 0;}
-#line 2982 "ext/pdo_sqlite/sqlite/src/parse.c"
+#line 2995 "parse.c"
         break;
-      case 265:
-#line 939 "ext/pdo_sqlite/sqlite/src/parse.y"
+      case 266:
+#line 944 "parse.y"
 {yygotominor.yy354.a = TK_UPDATE; yygotominor.yy354.b = yymsp[0].minor.yy352;}
-#line 2987 "ext/pdo_sqlite/sqlite/src/parse.c"
+#line 3000 "parse.c"
         break;
-      case 266:
       case 267:
-#line 942 "ext/pdo_sqlite/sqlite/src/parse.y"
+      case 268:
+#line 947 "parse.y"
 { yygotominor.yy316 = TK_ROW; }
-#line 2993 "ext/pdo_sqlite/sqlite/src/parse.c"
+#line 3006 "parse.c"
         break;
-      case 268:
-#line 944 "ext/pdo_sqlite/sqlite/src/parse.y"
+      case 269:
+#line 949 "parse.y"
 { yygotominor.yy316 = TK_STATEMENT; }
-#line 2998 "ext/pdo_sqlite/sqlite/src/parse.c"
+#line 3011 "parse.c"
         break;
-      case 269:
-#line 948 "ext/pdo_sqlite/sqlite/src/parse.y"
+      case 270:
+#line 953 "parse.y"
 { yygotominor.yy450 = 0; }
-#line 3003 "ext/pdo_sqlite/sqlite/src/parse.c"
+#line 3016 "parse.c"
         break;
-      case 270:
-#line 949 "ext/pdo_sqlite/sqlite/src/parse.y"
+      case 271:
+#line 954 "parse.y"
 { yygotominor.yy450 = yymsp[0].minor.yy450; }
-#line 3008 "ext/pdo_sqlite/sqlite/src/parse.c"
+#line 3021 "parse.c"
         break;
-      case 271:
-#line 953 "ext/pdo_sqlite/sqlite/src/parse.y"
+      case 272:
+#line 958 "parse.y"
 {
   if( yymsp[-2].minor.yy75 ){
     yymsp[-2].minor.yy75->pLast->pNext = yymsp[-1].minor.yy75;
@@ -3015,40 +3028,40 @@ static void yy_reduce(
   yymsp[-2].minor.yy75->pLast = yymsp[-1].minor.yy75;
   yygotominor.yy75 = yymsp[-2].minor.yy75;
 }
-#line 3021 "ext/pdo_sqlite/sqlite/src/parse.c"
+#line 3034 "parse.c"
         break;
-      case 272:
-#line 962 "ext/pdo_sqlite/sqlite/src/parse.y"
+      case 273:
+#line 967 "parse.y"
 { yygotominor.yy75 = 0; }
-#line 3026 "ext/pdo_sqlite/sqlite/src/parse.c"
+#line 3039 "parse.c"
         break;
-      case 273:
-#line 968 "ext/pdo_sqlite/sqlite/src/parse.y"
+      case 274:
+#line 973 "parse.y"
 { yygotominor.yy75 = sqlite3TriggerUpdateStep(&yymsp[-3].minor.yy178, yymsp[-1].minor.yy242, yymsp[0].minor.yy450, yymsp[-4].minor.yy316); }
-#line 3031 "ext/pdo_sqlite/sqlite/src/parse.c"
+#line 3044 "parse.c"
         break;
-      case 274:
-#line 973 "ext/pdo_sqlite/sqlite/src/parse.y"
+      case 275:
+#line 978 "parse.y"
 {yygotominor.yy75 = sqlite3TriggerInsertStep(&yymsp[-5].minor.yy178, yymsp[-4].minor.yy352, yymsp[-1].minor.yy242, 0, yymsp[-7].minor.yy316);}
-#line 3036 "ext/pdo_sqlite/sqlite/src/parse.c"
+#line 3049 "parse.c"
         break;
-      case 275:
-#line 976 "ext/pdo_sqlite/sqlite/src/parse.y"
+      case 276:
+#line 981 "parse.y"
 {yygotominor.yy75 = sqlite3TriggerInsertStep(&yymsp[-2].minor.yy178, yymsp[-1].minor.yy352, 0, yymsp[0].minor.yy43, yymsp[-4].minor.yy316);}
-#line 3041 "ext/pdo_sqlite/sqlite/src/parse.c"
+#line 3054 "parse.c"
         break;
-      case 276:
-#line 980 "ext/pdo_sqlite/sqlite/src/parse.y"
+      case 277:
+#line 985 "parse.y"
 {yygotominor.yy75 = sqlite3TriggerDeleteStep(&yymsp[-1].minor.yy178, yymsp[0].minor.yy450);}
-#line 3046 "ext/pdo_sqlite/sqlite/src/parse.c"
+#line 3059 "parse.c"
         break;
-      case 277:
-#line 983 "ext/pdo_sqlite/sqlite/src/parse.y"
+      case 278:
+#line 988 "parse.y"
 {yygotominor.yy75 = sqlite3TriggerSelectStep(yymsp[0].minor.yy43); }
-#line 3051 "ext/pdo_sqlite/sqlite/src/parse.c"
+#line 3064 "parse.c"
         break;
-      case 278:
-#line 986 "ext/pdo_sqlite/sqlite/src/parse.y"
+      case 279:
+#line 991 "parse.y"
 {
   yygotominor.yy450 = sqlite3Expr(TK_RAISE, 0, 0, 0); 
   if( yygotominor.yy450 ){
@@ -3056,10 +3069,10 @@ static void yy_reduce(
     sqlite3ExprSpan(yygotominor.yy450, &yymsp[-3].minor.yy0, &yymsp[0].minor.yy0);
   }
 }
-#line 3062 "ext/pdo_sqlite/sqlite/src/parse.c"
+#line 3075 "parse.c"
         break;
-      case 279:
-#line 993 "ext/pdo_sqlite/sqlite/src/parse.y"
+      case 280:
+#line 998 "parse.y"
 {
   yygotominor.yy450 = sqlite3Expr(TK_RAISE, 0, 0, &yymsp[-1].minor.yy178); 
   if( yygotominor.yy450 ) {
@@ -3067,119 +3080,119 @@ static void yy_reduce(
     sqlite3ExprSpan(yygotominor.yy450, &yymsp[-5].minor.yy0, &yymsp[0].minor.yy0);
   }
 }
-#line 3073 "ext/pdo_sqlite/sqlite/src/parse.c"
+#line 3086 "parse.c"
         break;
-      case 280:
-#line 1003 "ext/pdo_sqlite/sqlite/src/parse.y"
+      case 281:
+#line 1008 "parse.y"
 {yygotominor.yy316 = OE_Rollback;}
-#line 3078 "ext/pdo_sqlite/sqlite/src/parse.c"
+#line 3091 "parse.c"
         break;
-      case 282:
-#line 1005 "ext/pdo_sqlite/sqlite/src/parse.y"
+      case 283:
+#line 1010 "parse.y"
 {yygotominor.yy316 = OE_Fail;}
-#line 3083 "ext/pdo_sqlite/sqlite/src/parse.c"
+#line 3096 "parse.c"
         break;
-      case 283:
-#line 1010 "ext/pdo_sqlite/sqlite/src/parse.y"
+      case 284:
+#line 1015 "parse.y"
 {
   sqlite3DropTrigger(pParse,yymsp[0].minor.yy419,yymsp[-1].minor.yy316);
 }
-#line 3090 "ext/pdo_sqlite/sqlite/src/parse.c"
+#line 3103 "parse.c"
         break;
-      case 284:
-#line 1016 "ext/pdo_sqlite/sqlite/src/parse.y"
+      case 285:
+#line 1021 "parse.y"
 {
   sqlite3Attach(pParse, yymsp[-3].minor.yy450, yymsp[-1].minor.yy450, yymsp[0].minor.yy158);
 }
-#line 3097 "ext/pdo_sqlite/sqlite/src/parse.c"
+#line 3110 "parse.c"
         break;
-      case 285:
-#line 1021 "ext/pdo_sqlite/sqlite/src/parse.y"
+      case 286:
+#line 1026 "parse.y"
 { yygotominor.yy158 = 0; }
-#line 3102 "ext/pdo_sqlite/sqlite/src/parse.c"
+#line 3115 "parse.c"
         break;
-      case 286:
-#line 1022 "ext/pdo_sqlite/sqlite/src/parse.y"
+      case 287:
+#line 1027 "parse.y"
 { yygotominor.yy158 = yymsp[0].minor.yy450; }
-#line 3107 "ext/pdo_sqlite/sqlite/src/parse.c"
+#line 3120 "parse.c"
         break;
-      case 289:
-#line 1028 "ext/pdo_sqlite/sqlite/src/parse.y"
+      case 290:
+#line 1033 "parse.y"
 {
   sqlite3Detach(pParse, yymsp[0].minor.yy450);
 }
-#line 3114 "ext/pdo_sqlite/sqlite/src/parse.c"
+#line 3127 "parse.c"
         break;
-      case 290:
-#line 1034 "ext/pdo_sqlite/sqlite/src/parse.y"
+      case 291:
+#line 1039 "parse.y"
 {sqlite3Reindex(pParse, 0, 0);}
-#line 3119 "ext/pdo_sqlite/sqlite/src/parse.c"
+#line 3132 "parse.c"
         break;
-      case 291:
-#line 1035 "ext/pdo_sqlite/sqlite/src/parse.y"
+      case 292:
+#line 1040 "parse.y"
 {sqlite3Reindex(pParse, &yymsp[-1].minor.yy178, &yymsp[0].minor.yy178);}
-#line 3124 "ext/pdo_sqlite/sqlite/src/parse.c"
+#line 3137 "parse.c"
         break;
-      case 292:
-#line 1040 "ext/pdo_sqlite/sqlite/src/parse.y"
+      case 293:
+#line 1045 "parse.y"
 {sqlite3Analyze(pParse, 0, 0);}
-#line 3129 "ext/pdo_sqlite/sqlite/src/parse.c"
+#line 3142 "parse.c"
         break;
-      case 293:
-#line 1041 "ext/pdo_sqlite/sqlite/src/parse.y"
+      case 294:
+#line 1046 "parse.y"
 {sqlite3Analyze(pParse, &yymsp[-1].minor.yy178, &yymsp[0].minor.yy178);}
-#line 3134 "ext/pdo_sqlite/sqlite/src/parse.c"
+#line 3147 "parse.c"
         break;
-      case 294:
-#line 1046 "ext/pdo_sqlite/sqlite/src/parse.y"
+      case 295:
+#line 1051 "parse.y"
 {
   sqlite3AlterRenameTable(pParse,yymsp[-3].minor.yy419,&yymsp[0].minor.yy178);
 }
-#line 3141 "ext/pdo_sqlite/sqlite/src/parse.c"
+#line 3154 "parse.c"
         break;
-      case 295:
-#line 1049 "ext/pdo_sqlite/sqlite/src/parse.y"
+      case 296:
+#line 1054 "parse.y"
 {
   sqlite3AlterFinishAddColumn(pParse, &yymsp[0].minor.yy178);
 }
-#line 3148 "ext/pdo_sqlite/sqlite/src/parse.c"
+#line 3161 "parse.c"
         break;
-      case 296:
-#line 1052 "ext/pdo_sqlite/sqlite/src/parse.y"
+      case 297:
+#line 1057 "parse.y"
 {
   sqlite3AlterBeginAddColumn(pParse, yymsp[0].minor.yy419);
 }
-#line 3155 "ext/pdo_sqlite/sqlite/src/parse.c"
+#line 3168 "parse.c"
         break;
-      case 299:
-#line 1061 "ext/pdo_sqlite/sqlite/src/parse.y"
+      case 300:
+#line 1066 "parse.y"
 {sqlite3VtabFinishParse(pParse,0);}
-#line 3160 "ext/pdo_sqlite/sqlite/src/parse.c"
+#line 3173 "parse.c"
         break;
-      case 300:
-#line 1062 "ext/pdo_sqlite/sqlite/src/parse.y"
+      case 301:
+#line 1067 "parse.y"
 {sqlite3VtabFinishParse(pParse,&yymsp[0].minor.yy0);}
-#line 3165 "ext/pdo_sqlite/sqlite/src/parse.c"
+#line 3178 "parse.c"
         break;
-      case 301:
-#line 1063 "ext/pdo_sqlite/sqlite/src/parse.y"
+      case 302:
+#line 1068 "parse.y"
 {
     sqlite3VtabBeginParse(pParse, &yymsp[-3].minor.yy178, &yymsp[-2].minor.yy178, &yymsp[0].minor.yy178);
 }
-#line 3172 "ext/pdo_sqlite/sqlite/src/parse.c"
+#line 3185 "parse.c"
         break;
-      case 304:
-#line 1068 "ext/pdo_sqlite/sqlite/src/parse.y"
+      case 305:
+#line 1073 "parse.y"
 {sqlite3VtabArgInit(pParse);}
-#line 3177 "ext/pdo_sqlite/sqlite/src/parse.c"
+#line 3190 "parse.c"
         break;
-      case 306:
       case 307:
       case 308:
-      case 310:
-#line 1070 "ext/pdo_sqlite/sqlite/src/parse.y"
+      case 309:
+      case 311:
+#line 1075 "parse.y"
 {sqlite3VtabArgExtend(pParse,&yymsp[0].minor.yy0);}
-#line 3185 "ext/pdo_sqlite/sqlite/src/parse.c"
+#line 3198 "parse.c"
         break;
   };
   yygoto = yyRuleInfo[yyruleno].lhs;
@@ -3236,7 +3249,7 @@ static void yy_syntax_error(
 ){
   sqlite3ParserARG_FETCH;
 #define TOKEN (yyminor.yy0)
-#line 34 "ext/pdo_sqlite/sqlite/src/parse.y"
+#line 34 "parse.y"
 
   if( !pParse->parseError ){
     if( TOKEN.z[0] ){
@@ -3246,7 +3259,7 @@ static void yy_syntax_error(
     }
     pParse->parseError = 1;
   }
-#line 3253 "ext/pdo_sqlite/sqlite/src/parse.c"
+#line 3266 "parse.c"
   sqlite3ParserARG_STORE; /* Suppress warning about unused %extra_argument variable */
 }
 
index 65c9a5ce90547dccd5f8d67dac9e7a37d430cd32..3a71be199d2d0024208c9d41e1a29f364b71ab53 100644 (file)
 #define TK_SLASH                          82
 #define TK_REM                            83
 #define TK_CONCAT                         84
-#define TK_UMINUS                         85
-#define TK_UPLUS                          86
-#define TK_BITNOT                         87
-#define TK_STRING                         88
-#define TK_JOIN_KW                        89
-#define TK_CONSTRAINT                     90
-#define TK_DEFAULT                        91
-#define TK_NULL                           92
-#define TK_PRIMARY                        93
-#define TK_UNIQUE                         94
-#define TK_CHECK                          95
-#define TK_REFERENCES                     96
-#define TK_COLLATE                        97
+#define TK_COLLATE                        85
+#define TK_UMINUS                         86
+#define TK_UPLUS                          87
+#define TK_BITNOT                         88
+#define TK_STRING                         89
+#define TK_JOIN_KW                        90
+#define TK_CONSTRAINT                     91
+#define TK_DEFAULT                        92
+#define TK_NULL                           93
+#define TK_PRIMARY                        94
+#define TK_UNIQUE                         95
+#define TK_CHECK                          96
+#define TK_REFERENCES                     97
 #define TK_AUTOINCR                       98
 #define TK_ON                             99
 #define TK_DELETE                         100
index 479f94b16d2164b7194240630cdf7fcf03ffa952..4380a9b76f14297763920ea230137d0706525334 100644 (file)
@@ -205,6 +205,7 @@ id(A) ::= ID(X).         {A = X;}
 %left PLUS MINUS.
 %left STAR SLASH REM.
 %left CONCAT.
+%left COLLATE.
 %right UMINUS UPLUS BITNOT.
 
 // And "ids" is an identifer-or-string.
@@ -515,24 +516,21 @@ using_opt(U) ::= .                        {U = 0;}
 
 orderby_opt(A) ::= .                          {A = 0;}
 orderby_opt(A) ::= ORDER BY sortlist(X).      {A = X;}
-sortlist(A) ::= sortlist(X) COMMA sortitem(Y) collate(C) sortorder(Z). {
-  A = sqlite3ExprListAppend(X,Y,C.n>0?&C:0);
+sortlist(A) ::= sortlist(X) COMMA sortitem(Y) sortorder(Z). {
+  A = sqlite3ExprListAppend(X,Y,0);
   if( A ) A->a[A->nExpr-1].sortOrder = Z;
 }
-sortlist(A) ::= sortitem(Y) collate(C) sortorder(Z). {
-  A = sqlite3ExprListAppend(0,Y,C.n>0?&C:0);
+sortlist(A) ::= sortitem(Y) sortorder(Z). {
+  A = sqlite3ExprListAppend(0,Y,0);
   if( A && A->a ) A->a[0].sortOrder = Z;
 }
 sortitem(A) ::= expr(X).   {A = X;}
 
 %type sortorder {int}
-%type collate {Token}
 
 sortorder(A) ::= ASC.           {A = SQLITE_SO_ASC;}
 sortorder(A) ::= DESC.          {A = SQLITE_SO_DESC;}
 sortorder(A) ::= .              {A = SQLITE_SO_ASC;}
-collate(C) ::= .                {C.z = 0; C.n = 0;}
-collate(C) ::= COLLATE id(X).   {C = X;}
 
 %type groupby_opt {ExprList*}
 %destructor groupby_opt {sqlite3ExprListDelete($$);}
@@ -642,6 +640,9 @@ expr(A) ::= VARIABLE(X).     {
   Expr *pExpr = A = sqlite3Expr(TK_VARIABLE, 0, 0, pToken);
   sqlite3ExprAssignVarNumber(pParse, pExpr);
 }
+expr(A) ::= expr(E) COLLATE id(C). {
+  A = sqlite3ExprSetColl(pParse, E, &C);
+}
 %ifndef SQLITE_OMIT_CAST
 expr(A) ::= CAST(X) LP expr(E) AS typetoken(T) RP(Y). {
   A = sqlite3Expr(TK_CAST, E, 0, &T);
@@ -877,6 +878,10 @@ idxlist(A) ::= idxitem(Y) collate(C) sortorder(Z). {
 }
 idxitem(A) ::= nm(X).              {A = X;}
 
+%type collate {Token}
+collate(C) ::= .                {C.z = 0; C.n = 0;}
+collate(C) ::= COLLATE id(X).   {C = X;}
+
 
 ///////////////////////////// The DROP INDEX command /////////////////////////
 //
index 9fda4c8bf3cdd7b31c97f90722d78e1b733a53f8..f5252d2e0d29e2f476d6031b8a484f92e16b3548 100644 (file)
@@ -1950,10 +1950,9 @@ static int multiSelect(
       apColl = pKeyInfo->aColl;
       for(i=0; i<nOrderByExpr; i++, pOTerm++, apColl++, pSortOrder++){
         Expr *pExpr = pOTerm->pExpr;
-        char *zName = pOTerm->zName;
-        assert( pExpr->op==TK_COLUMN && pExpr->iColumn<nCol );
-        if( zName ){
-          *apColl = sqlite3LocateCollSeq(pParse, zName, -1);
+        if( (pExpr->flags & EP_ExpCollate) ){
+          assert( pExpr->pColl!=0 );
+          *apColl = pExpr->pColl;
         }else{
           *apColl = aCopy[pExpr->iColumn];
         }
@@ -2476,8 +2475,14 @@ static int processOrderGroupBy(
     Expr *pE = pOrderBy->a[i].pExpr;
     if( sqlite3ExprIsInteger(pE, &iCol) ){
       if( iCol>0 && iCol<=pEList->nExpr ){
+        CollSeq *pColl = pE->pColl;
+        int flags = pE->flags & EP_ExpCollate;
         sqlite3ExprDelete(pE);
         pE = pOrderBy->a[i].pExpr = sqlite3ExprDup(pEList->a[iCol-1].pExpr);
+        if( pColl && flags ){
+          pE->pColl = pColl;
+          pE->flags |= flags;
+        }
       }else{
         sqlite3ErrorMsg(pParse, 
            "%s BY column number %d out of range - should be "
@@ -2912,23 +2917,15 @@ int sqlite3Select(
   }
 #endif
 
-  /* If there is an ORDER BY clause, resolve any collation sequences
-  ** names that have been explicitly specified and create a sorting index.
-  **
-  ** This sorting index might end up being unused if the data can be 
+  /* If there is an ORDER BY clause, then this sorting
+  ** index might end up being unused if the data can be 
   ** extracted in pre-sorted order.  If that is the case, then the
   ** OP_OpenEphemeral instruction will be changed to an OP_Noop once
   ** we figure out that the sorting index is not needed.  The addrSortIndex
   ** variable is used to facilitate that change.
   */
   if( pOrderBy ){
-    struct ExprList_item *pTerm;
     KeyInfo *pKeyInfo;
-    for(i=0, pTerm=pOrderBy->a; i<pOrderBy->nExpr; i++, pTerm++){
-      if( pTerm->zName ){
-        pTerm->pExpr->pColl = sqlite3LocateCollSeq(pParse, pTerm->zName, -1);
-      }
-    }
     if( pParse->nErr ){
       goto select_end;
     }
index 0f6dfd04f568a18eaa127391d9d4d88b6770a863..efe84f0f1dbba2bc8953315ac2db951118c98a3f 100644 (file)
@@ -1021,6 +1021,7 @@ struct Expr {
 #define EP_VarSelect    0x20  /* pSelect is correlated, not constant */
 #define EP_Dequoted     0x40  /* True if the string has been dequoted */
 #define EP_InfixFunc    0x80  /* True for an infix function: LIKE, GLOB, etc */
+#define EP_ExpCollate  0x100  /* Collating sequence specified explicitly */
 
 /*
 ** These macros can be used to test, set, or clear bits in the 
@@ -1078,8 +1079,12 @@ struct IdList {
 
 /*
 ** The bitmask datatype defined below is used for various optimizations.
+**
+** Changing this from a 64-bit to a 32-bit type limits the number of
+** tables in a join to 32 instead of 64.  But it also reduces the size
+** of the library by 738 bytes on ix86.
 */
-typedef unsigned int Bitmask;
+typedef u64 Bitmask;
 
 /*
 ** The following structure describes the FROM clause of a SELECT statement.
@@ -1108,7 +1113,7 @@ struct SrcList {
     Select *pSelect;  /* A SELECT statement used in place of a table name */
     u8 isPopulated;   /* Temporary table associated with SELECT is populated */
     u8 jointype;      /* Type of join between this able and the previous */
-    i16 iCursor;      /* The VDBE cursor number used to access this table */
+    int iCursor;      /* The VDBE cursor number used to access this table */
     Expr *pOn;        /* The ON clause of a join */
     IdList *pUsing;   /* The USING clause of a join */
     Bitmask colUsed;  /* Bit N (1<<N) set if column N or pTab is used */
@@ -1773,6 +1778,7 @@ int sqlite3ReadSchema(Parse *pParse);
 CollSeq *sqlite3FindCollSeq(sqlite3*,u8 enc, const char *,int,int);
 CollSeq *sqlite3LocateCollSeq(Parse *pParse, const char *zName, int nName);
 CollSeq *sqlite3ExprCollSeq(Parse *pParse, Expr *pExpr);
+Expr *sqlite3ExprSetColl(Parse *pParse, Expr *, Token *);
 int sqlite3CheckCollSeq(Parse *, CollSeq *);
 int sqlite3CheckIndexCollSeq(Parse *, Index *);
 int sqlite3CheckObjectName(Parse *, const char *);
index 2f33307c93c1015b6962f4c0a3ad684acedcaa62..e1c1c67901a11f7960aff61fd72587b7159d699c 100644 (file)
@@ -1055,7 +1055,7 @@ static int DbObjCmd(void *cd, Tcl_Interp *interp, int objc,Tcl_Obj *const*objv){
       return TCL_ERROR;
     }
     nByte = strlen(zSql);
-    rc = sqlite3_prepare(pDb->db, zSql, 0, &pStmt, 0);
+    rc = sqlite3_prepare(pDb->db, zSql, -1, &pStmt, 0);
     sqlite3_free(zSql);
     if( rc ){
       Tcl_AppendResult(interp, "Error: ", sqlite3_errmsg(pDb->db), 0);
@@ -1081,7 +1081,7 @@ static int DbObjCmd(void *cd, Tcl_Interp *interp, int objc,Tcl_Obj *const*objv){
     }
     zSql[j++] = ')';
     zSql[j] = 0;
-    rc = sqlite3_prepare(pDb->db, zSql, 0, &pStmt, 0);
+    rc = sqlite3_prepare(pDb->db, zSql, -1, &pStmt, 0);
     free(zSql);
     if( rc ){
       Tcl_AppendResult(interp, "Error: ", sqlite3_errmsg(pDb->db), 0);
index 7402956dd3b2390c5b7de8c029a592328552550e..af15a2db6711963016266b5d8119772c3787b00e 100644 (file)
@@ -610,6 +610,46 @@ static void sqlite3ExecFunc(
   sqliteFree(x.z);
 }
 
+/*
+** Implementation of tkt2213func(), a scalar function that takes exactly
+** one argument. It has two interesting features:
+**
+** * It calls sqlite3_value_text() 3 times on the argument sqlite3_value*.
+**   If the three pointers returned are not the same an SQL error is raised.
+**
+** * Otherwise it returns a copy of the text representation of it's 
+**   argument in such a way as the VDBE representation is a Mem* cell 
+**   with the MEM_Term flag clear. 
+**
+** Ticket #2213 can therefore be tested by evaluating the following
+** SQL expression:
+**
+**   tkt2213func(tkt2213func('a string'));
+*/
+static void tkt2213Function(
+  sqlite3_context *context, 
+  int argc,  
+  sqlite3_value **argv
+){
+  int nText;
+  unsigned char const *zText1;
+  unsigned char const *zText2;
+  unsigned char const *zText3;
+
+  nText = sqlite3_value_bytes(argv[0]);
+  zText1 = sqlite3_value_text(argv[0]);
+  zText2 = sqlite3_value_text(argv[0]);
+  zText3 = sqlite3_value_text(argv[0]);
+
+  if( zText1!=zText2 || zText2!=zText3 ){
+    sqlite3_result_error(context, "tkt2213 is not fixed", -1);
+  }else{
+    char *zCopy = (char *)sqlite3_malloc(nText);
+    memcpy(zCopy, zText1, nText);
+    sqlite3_result_text(context, zCopy, nText, sqlite3_free);
+  }
+}
+
 /*
 ** Usage:  sqlite_test_create_function DB
 **
@@ -651,6 +691,10 @@ static int test_create_function(
     rc = sqlite3_create_function(db, "hex16", 1, SQLITE_ANY, 0, 
           hex16Func, 0, 0);
   }
+  if( rc==SQLITE_OK ){
+    rc = sqlite3_create_function(db, "tkt2213func", 1, SQLITE_ANY, 0, 
+          tkt2213Function, 0, 0);
+  }
 
 #ifndef SQLITE_OMIT_UTF16
   /* Use the sqlite3_create_function16() API here. Mainly for fun, but also 
index ebf357e121f9f72b9438b76f79b161c3bb2b6f64..5483abaf75b950fa088486a3a969b627f1158f0d 100644 (file)
@@ -577,7 +577,7 @@ static int btree_integrity_check(
   }
   pBt = sqlite3TextToPtr(argv[1]);
   nRoot = argc-2;
-  aRoot = malloc( sizeof(int)*(argc-2) );
+  aRoot = (int*)malloc( sizeof(int)*(argc-2) );
   for(i=0; i<argc-2; i++){
     if( Tcl_GetInt(interp, argv[i+2], &aRoot[i]) ) return TCL_ERROR;
   }
@@ -586,7 +586,7 @@ static int btree_integrity_check(
 #else
   zResult = 0;
 #endif
-  free(aRoot);
+  free((void*)aRoot);
   if( zResult ){
     Tcl_AppendResult(interp, zResult, 0);
     sqliteFree(zResult); 
@@ -1186,6 +1186,7 @@ static int btree_payload_size(
 **   aResult[7] =  Header size in bytes
 **   aResult[8] =  Local payload size
 **   aResult[9] =  Parent page number
+**   aResult[10]=  Page number of the first overflow page
 */
 static int btree_cursor_info(
   void *NotUsed,
@@ -1197,7 +1198,7 @@ static int btree_cursor_info(
   int rc;
   int i, j;
   int up;
-  int aResult[10];
+  int aResult[11];
   char zBuf[400];
 
   if( argc!=2 && argc!=3 ){
@@ -1225,6 +1226,76 @@ static int btree_cursor_info(
   return SQLITE_OK;
 }
 
+/*
+** Copied from btree.c:
+*/
+static u32 get4byte(unsigned char *p){
+  return (p[0]<<24) | (p[1]<<16) | (p[2]<<8) | p[3];
+}
+
+/*
+**   btree_ovfl_info  BTREE  CURSOR
+**
+** Given a cursor, return the sequence of pages number that form the
+** overflow pages for the data of the entry that the cursor is point
+** to.
+*/ 
+static int btree_ovfl_info(
+  void *NotUsed,
+  Tcl_Interp *interp,    /* The TCL interpreter that invoked this command */
+  int argc,              /* Number of arguments */
+  const char **argv      /* Text of each argument */
+){
+  Btree *pBt;
+  BtCursor *pCur;
+  Pager *pPager;
+  int rc;
+  int n;
+  int dataSize;
+  u32 pgno;
+  void *pPage;
+  int aResult[11];
+  char zElem[100];
+  Tcl_DString str;
+
+  if( argc!=3 ){
+    Tcl_AppendResult(interp, "wrong # args: should be \"", argv[0], 
+                    " BTREE CURSOR", 0);
+    return TCL_ERROR;
+  }
+  pBt = sqlite3TextToPtr(argv[1]);
+  pCur = sqlite3TextToPtr(argv[2]);
+  if( (*(void**)pCur) != (void*)pBt ){
+    Tcl_AppendResult(interp, "Cursor ", argv[2], " does not belong to btree ",
+       argv[1], 0);
+    return TCL_ERROR;
+  }
+  pPager = sqlite3BtreePager(pBt);
+  rc = sqlite3BtreeCursorInfo(pCur, aResult, 0);
+  if( rc ){
+    Tcl_AppendResult(interp, errorName(rc), 0);
+    return TCL_ERROR;
+  }
+  dataSize = sqlite3BtreeGetPageSize(pBt) - sqlite3BtreeGetReserve(pBt);
+  Tcl_DStringInit(&str);
+  n = aResult[6] - aResult[8];
+  n = (n + dataSize - 1)/dataSize;
+  pgno = (u32)aResult[10];
+  while( pgno && n-- ){
+    sprintf(zElem, "%d", pgno);
+    Tcl_DStringAppendElement(&str, zElem);
+    if( sqlite3pager_get(pPager, pgno, &pPage)!=SQLITE_OK ){
+      Tcl_DStringFree(&str);
+      Tcl_AppendResult(interp, "unable to get page ", zElem, 0);
+      return TCL_ERROR;
+    }
+    pgno = get4byte((unsigned char*)pPage);
+    sqlite3pager_unref(pPage);
+  }
+  Tcl_DStringResult(interp, &str);
+  return SQLITE_OK;
+}
+
 /*
 ** The command is provided for the purpose of setting breakpoints.
 ** in regression test scripts.
@@ -1440,6 +1511,7 @@ int Sqlitetest3_Init(Tcl_Interp *interp){
      { "btree_from_db",            (Tcl_CmdProc*)btree_from_db            },
      { "btree_set_cache_size",     (Tcl_CmdProc*)btree_set_cache_size     },
      { "btree_cursor_info",        (Tcl_CmdProc*)btree_cursor_info        },
+     { "btree_ovfl_info",          (Tcl_CmdProc*)btree_ovfl_info          },
      { "btree_cursor_list",        (Tcl_CmdProc*)btree_cursor_list        },
   };
   int i;
index 2565787f0402d739098bd833c0fb89e5b4a4b033..f1cd038b217fd0976fd7305bebfaccf35ddfd910 100644 (file)
@@ -103,6 +103,7 @@ void sqlite3Update(
   AuthContext sContext;  /* The authorization context */
   NameContext sNC;       /* The name-context to resolve expressions in */
   int iDb;               /* Database containing the table being updated */
+  int memCnt = 0;        /* Memory cell used for counting rows changed */
 
 #ifndef SQLITE_OMIT_TRIGGER
   int isView;                  /* Trying to update a view */
@@ -311,7 +312,8 @@ void sqlite3Update(
   /* Initialize the count of updated rows
   */
   if( db->flags & SQLITE_CountRows && !pParse->trigStack ){
-    sqlite3VdbeAddOp(v, OP_Integer, 0, 0);
+    memCnt = pParse->nMem++;
+    sqlite3VdbeAddOp(v, OP_MemInt, 0, memCnt);
   }
 
   if( triggers_exist ){
@@ -469,7 +471,7 @@ void sqlite3Update(
   /* Increment the row counter 
   */
   if( db->flags & SQLITE_CountRows && !pParse->trigStack){
-    sqlite3VdbeAddOp(v, OP_AddImm, 1, 0);
+    sqlite3VdbeAddOp(v, OP_MemIncr, 1, memCnt);
   }
 
   /* If there are triggers, close all the cursors after each iteration
@@ -514,6 +516,7 @@ void sqlite3Update(
   ** invoke the callback function.
   */
   if( db->flags & SQLITE_CountRows && !pParse->trigStack && pParse->nested==0 ){
+    sqlite3VdbeAddOp(v, OP_MemLoad, memCnt, 0);
     sqlite3VdbeAddOp(v, OP_Callback, 1, 0);
     sqlite3VdbeSetNumCols(v, 1);
     sqlite3VdbeSetColName(v, 0, COLNAME_NAME, "rows updated", P3_STATIC);
index 18aef149b629a7714b5bd628df92fc89bd7fb4a8..87059c8a8d6b5bbfe0e4c9a5516426a193d7ee9d 100644 (file)
@@ -137,6 +137,7 @@ int sqlite3VdbeMemNulTerminate(Mem *pMem){
     }
     pMem->xDel = 0;
     pMem->z = z;
+    pMem->flags |= MEM_Term;
   }
   return SQLITE_OK;
 }
index d783a115523502e650a2effdea5e5e1bf0ceb85a..f603dfc9242da3dc47fcb381aa6dc7ef9954021d 100644 (file)
@@ -43,6 +43,7 @@ int sqlite3_where_trace = 0;
 /* Forward reference
 */
 typedef struct WhereClause WhereClause;
+typedef struct ExprMaskSet ExprMaskSet;
 
 /*
 ** The query generator uses an array of instances of this structure to
@@ -106,6 +107,7 @@ struct WhereTerm {
 */
 struct WhereClause {
   Parse *pParse;           /* The parser context */
+  ExprMaskSet *pMaskSet;   /* Mapping of table indices to bitmasks */
   int nTerm;               /* Number of terms */
   int nSlot;               /* Number of entries in a[] */
   WhereTerm *a;            /* Each a[] describes a term of the WHERE cluase */
@@ -138,7 +140,6 @@ struct WhereClause {
 ** numbers all get mapped into bit numbers that begin with 0 and contain
 ** no gaps.
 */
-typedef struct ExprMaskSet ExprMaskSet;
 struct ExprMaskSet {
   int n;                        /* Number of assigned cursor values */
   int ix[sizeof(Bitmask)*8];    /* Cursor assigned to each bit */
@@ -186,8 +187,13 @@ struct ExprMaskSet {
 /*
 ** Initialize a preallocated WhereClause structure.
 */
-static void whereClauseInit(WhereClause *pWC, Parse *pParse){
+static void whereClauseInit(
+  WhereClause *pWC,        /* The WhereClause to be initialized */
+  Parse *pParse,           /* The parsing context */
+  ExprMaskSet *pMaskSet    /* Mapping from table indices to bitmasks */
+){
   pWC->pParse = pParse;
+  pWC->pMaskSet = pMaskSet;
   pWC->nTerm = 0;
   pWC->nSlot = ARRAYSIZE(pWC->aStatic);
   pWC->a = pWC->aStatic;
@@ -463,7 +469,7 @@ static WhereTerm *findTerm(
 }
 
 /* Forward reference */
-static void exprAnalyze(SrcList*, ExprMaskSet*, WhereClause*, int);
+static void exprAnalyze(SrcList*, WhereClause*, int);
 
 /*
 ** Call exprAnalyze on all terms in a WHERE clause.  
@@ -472,12 +478,11 @@ static void exprAnalyze(SrcList*, ExprMaskSet*, WhereClause*, int);
 */
 static void exprAnalyzeAll(
   SrcList *pTabList,       /* the FROM clause */
-  ExprMaskSet *pMaskSet,   /* table masks */
   WhereClause *pWC         /* the WHERE clause to be analyzed */
 ){
   int i;
   for(i=pWC->nTerm-1; i>=0; i--){
-    exprAnalyze(pTabList, pMaskSet, pWC, i);
+    exprAnalyze(pTabList, pWC, i);
   }
 }
 
@@ -592,11 +597,11 @@ static void transferJoinMarkings(Expr *pDerived, Expr *pBase){
 */
 static void exprAnalyze(
   SrcList *pSrc,            /* the FROM clause */
-  ExprMaskSet *pMaskSet,    /* table masks */
   WhereClause *pWC,         /* the WHERE clause */
   int idxTerm               /* Index of the term to be analyzed */
 ){
   WhereTerm *pTerm = &pWC->a[idxTerm];
+  ExprMaskSet *pMaskSet = pWC->pMaskSet;
   Expr *pExpr = pTerm->pExpr;
   Bitmask prereqLeft;
   Bitmask prereqAll;
@@ -679,7 +684,7 @@ static void exprAnalyze(
       pNewExpr = sqlite3Expr(ops[i], sqlite3ExprDup(pExpr->pLeft),
                              sqlite3ExprDup(pList->a[i].pExpr), 0);
       idxNew = whereClauseInsert(pWC, pNewExpr, TERM_VIRTUAL|TERM_DYNAMIC);
-      exprAnalyze(pSrc, pMaskSet, pWC, idxNew);
+      exprAnalyze(pSrc, pWC, idxNew);
       pTerm = &pWC->a[idxTerm];
       pWC->a[idxNew].iParent = idxTerm;
     }
@@ -708,9 +713,9 @@ static void exprAnalyze(
     WhereTerm *pOrTerm;
 
     assert( (pTerm->flags & TERM_DYNAMIC)==0 );
-    whereClauseInit(&sOr, pWC->pParse);
+    whereClauseInit(&sOr, pWC->pParse, pMaskSet);
     whereSplit(&sOr, pExpr, TK_OR);
-    exprAnalyzeAll(pSrc, pMaskSet, &sOr);
+    exprAnalyzeAll(pSrc, &sOr);
     assert( sOr.nTerm>0 );
     j = 0;
     do{
@@ -750,7 +755,7 @@ static void exprAnalyze(
         transferJoinMarkings(pNew, pExpr);
         pNew->pList = pList;
         idxNew = whereClauseInsert(pWC, pNew, TERM_VIRTUAL|TERM_DYNAMIC);
-        exprAnalyze(pSrc, pMaskSet, pWC, idxNew);
+        exprAnalyze(pSrc, pWC, idxNew);
         pTerm = &pWC->a[idxTerm];
         pWC->a[idxNew].iParent = idxTerm;
         pTerm->nChild = 1;
@@ -787,10 +792,10 @@ or_not_possible:
     }
     pNewExpr1 = sqlite3Expr(TK_GE, sqlite3ExprDup(pLeft), pStr1, 0);
     idxNew1 = whereClauseInsert(pWC, pNewExpr1, TERM_VIRTUAL|TERM_DYNAMIC);
-    exprAnalyze(pSrc, pMaskSet, pWC, idxNew1);
+    exprAnalyze(pSrc, pWC, idxNew1);
     pNewExpr2 = sqlite3Expr(TK_LT, sqlite3ExprDup(pLeft), pStr2, 0);
     idxNew2 = whereClauseInsert(pWC, pNewExpr2, TERM_VIRTUAL|TERM_DYNAMIC);
-    exprAnalyze(pSrc, pMaskSet, pWC, idxNew2);
+    exprAnalyze(pSrc, pWC, idxNew2);
     pTerm = &pWC->a[idxTerm];
     if( isComplete ){
       pWC->a[idxNew1].iParent = idxTerm;
@@ -836,6 +841,25 @@ or_not_possible:
 #endif /* SQLITE_OMIT_VIRTUALTABLE */
 }
 
+/*
+** Return TRUE if any of the expressions in pList->a[iFirst...] contain
+** a reference to any table other than the iBase table.
+*/
+static int referencesOtherTables(
+  ExprList *pList,          /* Search expressions in ths list */
+  ExprMaskSet *pMaskSet,    /* Mapping from tables to bitmaps */
+  int iFirst,               /* Be searching with the iFirst-th expression */
+  int iBase                 /* Ignore references to this table */
+){
+  Bitmask allowed = ~getMask(pMaskSet, iBase);
+  while( iFirst<pList->nExpr ){
+    if( (exprTableUsage(pMaskSet, pList->a[iFirst++].pExpr)&allowed)!=0 ){
+      return 1;
+    }
+  }
+  return 0;
+}
+
 
 /*
 ** This routine decides if pIdx can be used to satisfy the ORDER BY
@@ -858,6 +882,7 @@ or_not_possible:
 */
 static int isSortingIndex(
   Parse *pParse,          /* Parsing context */
+  ExprMaskSet *pMaskSet,  /* Mapping from table indices to bitmaps */
   Index *pIdx,            /* The index we are testing */
   int base,               /* Cursor number for the table to be sorted */
   ExprList *pOrderBy,     /* The ORDER BY clause */
@@ -894,7 +919,7 @@ static int isSortingIndex(
     if( pExpr->op!=TK_COLUMN || pExpr->iTable!=base ){
       /* Can not use an index sort on anything that is not a column in the
       ** left-most table of the FROM clause */
-      return 0;
+      break;
     }
     pColl = sqlite3ExprCollSeq(pParse, pExpr);
     if( !pColl ){
@@ -941,11 +966,12 @@ static int isSortingIndex(
     }
     j++;
     pTerm++;
-    if( iColumn<0 ){
+    if( iColumn<0 && !referencesOtherTables(pOrderBy, pMaskSet, j, base) ){
       /* If the indexed column is the primary key and everything matches
-      ** so far, then we are assured that the index can be used to sort
-      ** because the primary key is unique and so none of the other columns
-      ** will make any difference
+      ** so far and none of the ORDER BY terms to the right reference other
+      ** tables in the join, then we are assured that the index can be used 
+      ** to sort because the primary key is unique and so none of the other
+      ** columns will make any difference
       */
       j = nTerm;
     }
@@ -957,9 +983,12 @@ static int isSortingIndex(
     ** this index can be used for sorting. */
     return 1;
   }
-  if( j==pIdx->nColumn && pIdx->onError!=OE_None ){
+  if( pIdx->onError!=OE_None && i==pIdx->nColumn
+      && !referencesOtherTables(pOrderBy, pMaskSet, j, base) ){
     /* All terms of this index match some prefix of the ORDER BY clause
-    ** and this index is UNIQUE, so this index can be used for sorting. */
+    ** and the index is UNIQUE and no terms on the tail of the ORDER BY
+    ** clause reference other tables in a join.  If this is all true then
+    ** the order by clause is superfluous. */
     return 1;
   }
   return 0;
@@ -973,6 +1002,7 @@ static int isSortingIndex(
 static int sortableByRowid(
   int base,               /* Cursor number for table to be sorted */
   ExprList *pOrderBy,     /* The ORDER BY clause */
+  ExprMaskSet *pMaskSet,  /* Mapping from tables to bitmaps */
   int *pbRev              /* Set to 1 if ORDER BY is DESC */
 ){
   Expr *p;
@@ -980,7 +1010,8 @@ static int sortableByRowid(
   assert( pOrderBy!=0 );
   assert( pOrderBy->nExpr>0 );
   p = pOrderBy->a[0].pExpr;
-  if( p->op==TK_COLUMN && p->iTable==base && p->iColumn==-1 ){
+  if( p->op==TK_COLUMN && p->iTable==base && p->iColumn==-1
+    && !referencesOtherTables(pOrderBy, pMaskSet, 1, base) ){
     *pbRev = pOrderBy->a[0].sortOrder;
     return 1;
   }
@@ -1298,7 +1329,7 @@ static double bestIndex(
   */
   if( pProbe==0 &&
      findTerm(pWC, iCur, -1, 0, WO_EQ|WO_IN|WO_LT|WO_LE|WO_GT|WO_GE,0)==0 &&
-     (pOrderBy==0 || !sortableByRowid(iCur, pOrderBy, &rev)) ){
+     (pOrderBy==0 || !sortableByRowid(iCur, pOrderBy, pWC->pMaskSet, &rev)) ){
     *pFlags = 0;
     *ppIndex = 0;
     *pnEq = 0;
@@ -1360,7 +1391,7 @@ static double bestIndex(
   /* If the table scan does not satisfy the ORDER BY clause, increase
   ** the cost by NlogN to cover the expense of sorting. */
   if( pOrderBy ){
-    if( sortableByRowid(iCur, pOrderBy, &rev) ){
+    if( sortableByRowid(iCur, pOrderBy, pWC->pMaskSet, &rev) ){
       flags |= WHERE_ORDERBY|WHERE_ROWID_RANGE;
       if( rev ){
         flags |= WHERE_REVERSE;
@@ -1444,7 +1475,7 @@ static double bestIndex(
     */
     if( pOrderBy ){
       if( (flags & WHERE_COLUMN_IN)==0 &&
-           isSortingIndex(pParse,pProbe,iCur,pOrderBy,nEq,&rev) ){
+           isSortingIndex(pParse,pWC->pMaskSet,pProbe,iCur,pOrderBy,nEq,&rev) ){
         if( flags==0 ){
           flags = WHERE_COLUMN_RANGE;
         }
@@ -1832,7 +1863,7 @@ WhereInfo *sqlite3WhereBegin(
   ** subexpression is separated by an AND operator.
   */
   initMaskSet(&maskSet);
-  whereClauseInit(&wc, pParse);
+  whereClauseInit(&wc, pParse, &maskSet);
   whereSplit(&wc, pWhere, TK_AND);
     
   /* Allocate and initialize the WhereInfo structure that will become the
@@ -1863,7 +1894,7 @@ WhereInfo *sqlite3WhereBegin(
   for(i=0; i<pTabList->nSrc; i++){
     createMask(&maskSet, pTabList->a[i].iCursor);
   }
-  exprAnalyzeAll(pTabList, &maskSet, &wc);
+  exprAnalyzeAll(pTabList, &wc);
   if( sqlite3MallocFailed() ){
     goto whereBeginNoMem;
   }