# # # patch "sqlite/btree.c" # from [51aef6a4b18df165b83b332befd1447c011b4389] # to [4d4bef16fbf4f53ec3b161cfe5bb19bbc27a281d] # # patch "sqlite/build.c" # from [02aedde724dc73295d6e9b8dc29afb5dd38de507] # to [6bd68dc730b01c1727738f8e4b5c730eb0ddb421] # # patch "sqlite/callback.c" # from [fd9bb39f7ff6b52bad8365617abc61c720640429] # to [31d22b4919c7645cbcbb1591ce2453e8c677c558] # # patch "sqlite/delete.c" # from [804384761144fe1a5035b99f4bd7d706976831bd] # to [151d08386bf9c9e7f92f6b9106c71efec2def184] # # patch "sqlite/expr.c" # from [3d2cf15fd9aa6b60b67f45504782cce72cd07963] # to [dfd25ae8f8f2ebf3d8dea605a5cea959946aabb7] # # patch "sqlite/func.c" # from [af537156dfeb91dbac8ffed4db6c4fa1a3164cc9] # to [b7e1e220a6795ecae7649815145ea5f8644dfa5f] # # patch "sqlite/opcodes.c" # from [b7b90245b9f102a608f7c3472acd5b99610b60e4] # to [89763333d47d401e5b32d2a5fe456a49414b4544] # # patch "sqlite/opcodes.h" # from [fd07578003f350722aa5df4d053fed9d5c4ea80d] # to [2a03d6171b53b07d4b9db8a68943cb44da8191e7] # # patch "sqlite/os_os2.c" # from [1ece434c4817e2925318954336cfe1731713beb0] # to [8ee8207fe218a1acf3a31d59753e165e5c23bb95] # # patch "sqlite/os_unix.c" # from [9fbbd8ab0a6b3992370ba0f3aae11feff2a78c96] # to [2f7f7dbb95bbfa109f951c828b248102ab75b621] # # patch "sqlite/parse.c" # from [53d5ca8f9ac031afc639aab84b2a1178423b3992] # to [c0428566a80239da0b429390988f0fec4351e148] # # patch "sqlite/parse.h" # from [70bbcc29884b07839cf2618ed6021b7b2323a445] # to [6f6a83f5cf2575172e44744ed9ffeacbbe812531] # # patch "sqlite/select.c" # from [628f49827d5a94ed9b6246efb8dc9f5c24e413f1] # to [63b2163f35fd2570a02dab5759979644c4405f1c] # # patch "sqlite/sqlite3.h" # from [f6d447ccc3b195fcf1048058cfb5f6632fd5d577] # to [c17a4ef52a78c0ca61df95965c1ce3c2192b98de] # # patch "sqlite/sqliteInt.h" # from [f15bb7b1bcf750a3202bfae85d6d3beb4e5f64e1] # to [409dfff7f08135017aa2dfb65245dfc7b1db7099] # # patch "sqlite/update.c" # from [951f95ef044cf6d28557c48dc35cb0711a0b9129] # to [bdfcf3600f129bd5f06094781ab41cd7b7f5ab25] # # patch "sqlite/vdbemem.c" # from [26623176bf1c616aa478da958fac49502491a921] # to [ff2424bee9eaf7c61d1f28bc0e711bebddebd653] # # patch "sqlite/where.c" # from [23dc1c7535c96770d214762ed0bc3c655de5061c] # to [2a919a3fbaff2e55604119f7c60133db459b404c] # ============================================================ --- sqlite/btree.c 51aef6a4b18df165b83b332befd1447c011b4389 +++ sqlite/btree.c 4d4bef16fbf4f53ec3b161cfe5bb19bbc27a281d @@ -9,7 +9,7 @@ ** May you share freely, never taking more than you give. ** ************************************************************************* -** $Id: btree.c,v 1.334 2007/01/27 02:24:55 drh Exp $ +** $Id: btree.c,v 1.335 2007/02/10 19:22:36 drh Exp $ ** ** This file implements a external (disk-based) database using BTrees. ** For a detailed discussion of BTrees, refer to @@ -5890,6 +5890,7 @@ int sqlite3BtreePageDump(Btree *p, int p ** 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 *pCu }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; } ============================================================ --- sqlite/build.c 02aedde724dc73295d6e9b8dc29afb5dd38de507 +++ sqlite/build.c 6bd68dc730b01c1727738f8e4b5c730eb0ddb421 @@ -22,7 +22,7 @@ ** COMMIT ** ROLLBACK ** -** $Id: build.c,v 1.412 2006/12/16 16:25:15 drh Exp $ +** $Id: build.c,v 1.413 2007/02/02 12:44:37 drh Exp $ */ #include "sqliteInt.h" #include @@ -1222,6 +1222,10 @@ void sqlite3AddCollateType(Parse *pParse ** 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; jnCol; 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 ); ============================================================ --- sqlite/callback.c fd9bb39f7ff6b52bad8365617abc61c720640429 +++ sqlite/callback.c 31d22b4919c7645cbcbb1591ce2453e8c677c558 @@ -13,7 +13,7 @@ ** This file contains functions used to access the internal hash tables ** of user defined functions and collation sequences. ** -** $Id: callback.c,v 1.15 2006/05/24 12:43:27 drh Exp $ +** $Id: callback.c,v 1.16 2007/02/02 12:44:37 drh Exp $ */ #include "sqliteInt.h" @@ -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, ============================================================ --- sqlite/delete.c 804384761144fe1a5035b99f4bd7d706976831bd +++ sqlite/delete.c 151d08386bf9c9e7f92f6b9106c71efec2def184 @@ -12,7 +12,7 @@ ** This file contains C code routines that are called by the parser ** in order to generate code for DELETE FROM statements. ** -** $Id: delete.c,v 1.127 2006/06/19 03:05:10 danielk1977 Exp $ +** $Id: delete.c,v 1.128 2007/02/07 01:06:53 drh Exp $ */ #include "sqliteInt.h" @@ -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); ============================================================ --- sqlite/expr.c 3d2cf15fd9aa6b60b67f45504782cce72cd07963 +++ sqlite/expr.c dfd25ae8f8f2ebf3d8dea605a5cea959946aabb7 @@ -12,7 +12,7 @@ ** This file contains routines used for analyzing expressions and ** for generating VDBE code that evaluates expressions in SQLite. ** -** $Id: expr.c,v 1.271 2007/01/04 01:20:29 drh Exp $ +** $Id: expr.c,v 1.275 2007/02/07 13:09:46 drh Exp $ */ #include "sqliteInt.h" #include @@ -50,6 +50,24 @@ char sqlite3ExprAffinity(Expr *pExpr){ } /* +** 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 CollSeq* binaryCompareCollSeq(Par ** 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, E 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( inSrc-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<colUsed |= ((Bitmask)1)< @@ -273,6 +273,25 @@ static void randomFunc( } /* +** 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. */ @@ -548,6 +567,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 @@ -573,10 +598,6 @@ static void quoteFunc(sqlite3_context *c 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]); @@ -622,11 +643,41 @@ static void quoteFunc(sqlite3_context *c } } +/* +** 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>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; @@ -1022,8 +1073,10 @@ void sqlite3RegisterBuiltinFunctions(sql { "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 }, ============================================================ --- sqlite/opcodes.c b7b90245b9f102a608f7c3472acd5b99610b60e4 +++ sqlite/opcodes.c 89763333d47d401e5b32d2a5fe456a49414b4544 @@ -86,11 +86,11 @@ const char *const sqlite3OpcodeNames[] = /* 82 */ "Divide", /* 83 */ "Remainder", /* 84 */ "Concat", - /* 85 */ "Negative", - /* 86 */ "IfNot", - /* 87 */ "BitNot", - /* 88 */ "String8", - /* 89 */ "DropTable", + /* 85 */ "IfNot", + /* 86 */ "Negative", + /* 87 */ "DropTable", + /* 88 */ "BitNot", + /* 89 */ "String8", /* 90 */ "MakeRecord", /* 91 */ "Delete", /* 92 */ "AggFinal", ============================================================ --- sqlite/opcodes.h fd07578003f350722aa5df4d053fed9d5c4ea80d +++ sqlite/opcodes.h 2a03d6171b53b07d4b9db8a68943cb44da8191e7 @@ -16,7 +16,7 @@ #define OP_NotNull 67 /* same as TK_NOTNULL */ #define OP_If 10 #define OP_ToInt 142 /* same as TK_TO_INT */ -#define OP_String8 88 /* same as TK_STRING */ +#define OP_String8 89 /* same as TK_STRING */ #define OP_Pop 11 #define OP_VRowid 12 #define OP_CollSeq 13 @@ -82,8 +82,8 @@ #define OP_IdxDelete 64 #define OP_Vacuum 65 #define OP_MoveLe 74 -#define OP_IfNot 86 -#define OP_DropTable 89 +#define OP_IfNot 85 +#define OP_DropTable 87 #define OP_MakeRecord 90 #define OP_ToBlob 140 /* same as TK_TO_BLOB */ #define OP_Delete 91 @@ -107,7 +107,7 @@ #define OP_AbsValue 104 #define OP_Transaction 105 #define OP_VFilter 106 -#define OP_Negative 85 /* same as TK_UMINUS */ +#define OP_Negative 86 /* same as TK_UMINUS */ #define OP_Ne 68 /* same as TK_NE */ #define OP_VDestroy 107 #define OP_ContextPop 108 @@ -133,7 +133,7 @@ #define OP_MoveGe 125 #define OP_VBegin 128 #define OP_VUpdate 129 -#define OP_BitNot 87 /* same as TK_BITNOT */ +#define OP_BitNot 88 /* same as TK_BITNOT */ #define OP_VCreate 130 #define OP_MemMove 131 #define OP_MemNull 132 @@ -154,7 +154,7 @@ #define NOPUSH_MASK_2 0x7ddb #define NOPUSH_MASK_3 0xff92 #define NOPUSH_MASK_4 0xffff -#define NOPUSH_MASK_5 0xdaef +#define NOPUSH_MASK_5 0xd9ef #define NOPUSH_MASK_6 0xfefe #define NOPUSH_MASK_7 0x39d9 #define NOPUSH_MASK_8 0xf867 ============================================================ --- sqlite/os_os2.c 1ece434c4817e2925318954336cfe1731713beb0 +++ sqlite/os_os2.c 8ee8207fe218a1acf3a31d59753e165e5c23bb95 @@ -296,7 +296,14 @@ int os2Read( OsFile *id, void *pBuf, int SimulateIOError( return SQLITE_IOERR ); TRACE3( "READ %d lock=%d\n", ((os2File*)id)->h, ((os2File*)id)->locktype ); DosRead( ((os2File*)id)->h, pBuf, amt, &got ); - return (got == (ULONG)amt) ? SQLITE_OK : SQLITE_IOERR_SHORT_READ; + if (got == (ULONG)amt) + return SQLITE_OK; + else if (got < 0) + return SQLITE_IOERR_READ; + else { + memset(&((char*)pBuf)[got], 0, amt-got); + return SQLITE_IOERR_SHORT_READ; + } } /* @@ -780,13 +787,30 @@ void *sqlite3Os2Dlopen(const char *zFile ** within the shared library, and closing the shared library. */ void *sqlite3Os2Dlopen(const char *zFilename){ - return 0; + UCHAR loadErr[256]; + HMODULE hmod; + APIRET rc; + rc = DosLoadModule(loadErr, sizeof(loadErr), zFilename, &hmod); + if (rc != NO_ERROR) return 0; + return (void*)hmod; } void *sqlite3Os2Dlsym(void *pHandle, const char *zSymbol){ - return 0; + PFN pfn; + APIRET rc; + rc = DosQueryProcAddr((HMODULE)pHandle, 0L, zSymbol, &pfn); + if (rc != NO_ERROR) { + /* if the symbol itself was not found, search again for the same + * symbol with an extra underscore, that might be needed depending + * on the calling convention */ + char _zSymbol[256] = "_"; + strncat(_zSymbol, zSymbol, 255); + rc = DosQueryProcAddr((HMODULE)pHandle, 0L, _zSymbol, &pfn); + } + if (rc != NO_ERROR) return 0; + return pfn; } int sqlite3Os2Dlclose(void *pHandle){ - return 0; + return DosFreeModule((HMODULE)pHandle); } #endif /* SQLITE_OMIT_LOAD_EXTENSION */ ============================================================ --- sqlite/os_unix.c 9fbbd8ab0a6b3992370ba0f3aae11feff2a78c96 +++ sqlite/os_unix.c 2f7f7dbb95bbfa109f951c828b248102ab75b621 @@ -565,7 +565,7 @@ static sqlite3LockingStyle sqlite3TestLo 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 @@ static int seekAndRead(unixFile *id, voi */ 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 seekAndWrite(unixFile *id, co */ 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 fullSy #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; ============================================================ --- sqlite/parse.c 53d5ca8f9ac031afc639aab84b2a1178423b3992 +++ sqlite/parse.c c0428566a80239da0b429390988f0fec4351e148 @@ -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 @@ static const YYACTIONTYPE yy_action[] = ** 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 yym case 156: case 190: case 207: -#line 374 "parse.y" +#line 375 "parse.y" {sqlite3SelectDelete((yypminor->yy43));} -#line 1252 "parse.c" +#line 1257 "parse.c" break; case 170: case 171: @@ -1255,14 +1260,14 @@ static void yy_destructor(YYCODETYPE yym case 197: case 205: case 211: - case 219: - case 222: + case 218: + case 221: + case 223: case 224: - case 225: case 236: -#line 618 "parse.y" +#line 616 "parse.y" {sqlite3ExprDelete((yypminor->yy450));} -#line 1267 "parse.c" +#line 1272 "parse.c" break; case 175: case 183: @@ -1271,52 +1276,52 @@ static void yy_destructor(YYCODETYPE yym case 198: case 200: case 210: + case 212: case 213: - case 214: - case 217: - case 223: -#line 855 "parse.y" + case 216: + case 222: +#line 856 "parse.y" {sqlite3ExprListDelete((yypminor->yy242));} -#line 1282 "parse.c" +#line 1287 "parse.c" break; case 189: case 194: case 202: case 203: -#line 487 "parse.y" +#line 488 "parse.y" {sqlite3SrcListDelete((yypminor->yy419));} -#line 1290 "parse.c" +#line 1295 "parse.c" break; case 199: -#line 548 "parse.y" +#line 546 "parse.y" { sqlite3ExprDelete((yypminor->yy84).pLimit); sqlite3ExprDelete((yypminor->yy84).pOffset); } -#line 1298 "parse.c" +#line 1303 "parse.c" break; case 206: case 209: - case 216: -#line 504 "parse.y" + case 215: +#line 505 "parse.y" {sqlite3IdListDelete((yypminor->yy352));} -#line 1305 "parse.c" +#line 1310 "parse.c" break; case 232: case 237: -#line 952 "parse.y" +#line 957 "parse.y" {sqlite3DeleteTriggerStep((yypminor->yy75));} -#line 1311 "parse.c" +#line 1316 "parse.c" break; case 234: -#line 936 "parse.y" +#line 941 "parse.y" {sqlite3IdListDelete((yypminor->yy354).b);} -#line 1316 "parse.c" +#line 1321 "parse.c" break; case 239: -#line 1020 "parse.y" +#line 1025 "parse.y" {sqlite3ExprDelete((yypminor->yy158));} -#line 1321 "parse.c" +#line 1326 "parse.c" break; default: break; /* If no destructor action specified: do nothing */ } @@ -1484,7 +1489,7 @@ static void yy_shift( sqlite3ErrorMsg(pParse, "parser stack overflow"); pParse->parseError = 1; -#line 1490 "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 }, + { 217, 1 }, + { 217, 2 }, + { 217, 1 }, + { 217, 2 }, { 218, 2 }, - { 218, 1 }, - { 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 }, @@ -1878,32 +1884,32 @@ static void yy_reduce( case 3: #line 100 "parse.y" { sqlite3FinishCoding(pParse); } -#line 1884 "parse.c" +#line 1890 "parse.c" break; case 6: #line 103 "parse.y" { sqlite3BeginParse(pParse, 0); } -#line 1889 "parse.c" +#line 1895 "parse.c" break; case 7: #line 105 "parse.y" { sqlite3BeginParse(pParse, 1); } -#line 1894 "parse.c" +#line 1900 "parse.c" break; case 8: #line 106 "parse.y" { sqlite3BeginParse(pParse, 2); } -#line 1899 "parse.c" +#line 1905 "parse.c" break; case 9: #line 112 "parse.y" {sqlite3BeginTransaction(pParse, yymsp[-1].minor.yy316);} -#line 1904 "parse.c" +#line 1910 "parse.c" break; case 13: #line 117 "parse.y" {yygotominor.yy316 = TK_DEFERRED;} -#line 1909 "parse.c" +#line 1915 "parse.c" break; case 14: case 15: @@ -1912,25 +1918,25 @@ static void yy_reduce( case 109: #line 118 "parse.y" {yygotominor.yy316 = yymsp[0].major;} -#line 1918 "parse.c" +#line 1924 "parse.c" break; case 17: case 18: #line 121 "parse.y" {sqlite3CommitTransaction(pParse);} -#line 1924 "parse.c" +#line 1930 "parse.c" break; case 19: #line 123 "parse.y" {sqlite3RollbackTransaction(pParse);} -#line 1929 "parse.c" +#line 1935 "parse.c" break; case 21: #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 "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: + case 212: + case 215: #line 132 "parse.y" {yygotominor.yy316 = 0;} -#line 1951 "parse.c" +#line 1957 "parse.c" break; case 23: case 24: @@ -1953,18 +1959,18 @@ static void yy_reduce( case 78: case 100: case 111: - case 214: - case 217: + case 213: + case 216: #line 133 "parse.y" {yygotominor.yy316 = 1;} -#line 1963 "parse.c" +#line 1969 "parse.c" break; case 26: #line 139 "parse.y" { sqlite3EndTable(pParse,&yymsp[-1].minor.yy178,&yymsp[0].minor.yy0,0); } -#line 1970 "parse.c" +#line 1976 "parse.c" break; case 27: #line 142 "parse.y" @@ -1972,7 +1978,7 @@ static void yy_reduce( sqlite3EndTable(pParse,0,0,yymsp[0].minor.yy43); sqlite3SelectDelete(yymsp[0].minor.yy43); } -#line 1978 "parse.c" +#line 1984 "parse.c" break; case 30: #line 154 "parse.y" @@ -1980,7 +1986,7 @@ static void yy_reduce( yygotominor.yy178.z = yymsp[-2].minor.yy178.z; yygotominor.yy178.n = (pParse->sLastToken.z-yymsp[-2].minor.yy178.z) + pParse->sLastToken.n; } -#line 1986 "parse.c" +#line 1992 "parse.c" break; case 31: #line 158 "parse.y" @@ -1988,180 +1994,180 @@ static void yy_reduce( sqlite3AddColumn(pParse,&yymsp[0].minor.yy178); yygotominor.yy178 = yymsp[0].minor.yy178; } -#line 1994 "parse.c" +#line 2000 "parse.c" break; case 32: case 33: case 34: case 35: case 36: - case 254: + case 255: #line 168 "parse.y" {yygotominor.yy178 = yymsp[0].minor.yy0;} -#line 2004 "parse.c" +#line 2010 "parse.c" break; case 38: -#line 228 "parse.y" +#line 229 "parse.y" {sqlite3AddColumnType(pParse,&yymsp[0].minor.yy178);} -#line 2009 "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 "parse.y" + case 254: +#line 230 "parse.y" {yygotominor.yy178 = yymsp[0].minor.yy178;} -#line 2024 "parse.c" +#line 2030 "parse.c" break; case 40: -#line 230 "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 "parse.c" +#line 2038 "parse.c" break; case 41: -#line 234 "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 "parse.c" +#line 2046 "parse.c" break; case 43: -#line 240 "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 "parse.c" +#line 2051 "parse.c" break; case 44: -#line 242 "parse.y" +#line 243 "parse.y" { yygotominor.yy316 = atoi((char*)yymsp[0].minor.yy178.z); } -#line 2050 "parse.c" +#line 2056 "parse.c" break; case 45: -#line 243 "parse.y" +#line 244 "parse.y" { yygotominor.yy316 = -atoi((char*)yymsp[0].minor.yy178.z); } -#line 2055 "parse.c" +#line 2061 "parse.c" break; case 50: case 52: -#line 252 "parse.y" +#line 253 "parse.y" {sqlite3AddDefaultValue(pParse,yymsp[0].minor.yy450);} -#line 2061 "parse.c" +#line 2067 "parse.c" break; case 51: -#line 253 "parse.y" +#line 254 "parse.y" {sqlite3AddDefaultValue(pParse,yymsp[-1].minor.yy450);} -#line 2066 "parse.c" +#line 2072 "parse.c" break; case 53: -#line 255 "parse.y" +#line 256 "parse.y" { Expr *p = sqlite3Expr(TK_UMINUS, yymsp[0].minor.yy450, 0, 0); sqlite3AddDefaultValue(pParse,p); } -#line 2074 "parse.c" +#line 2080 "parse.c" break; case 54: -#line 259 "parse.y" +#line 260 "parse.y" { Expr *p = sqlite3Expr(TK_STRING, 0, 0, &yymsp[0].minor.yy178); sqlite3AddDefaultValue(pParse,p); } -#line 2082 "parse.c" +#line 2088 "parse.c" break; case 56: -#line 268 "parse.y" +#line 269 "parse.y" {sqlite3AddNotNull(pParse, yymsp[0].minor.yy316);} -#line 2087 "parse.c" +#line 2093 "parse.c" break; case 57: -#line 270 "parse.y" +#line 271 "parse.y" {sqlite3AddPrimaryKey(pParse,0,yymsp[-1].minor.yy316,yymsp[0].minor.yy316,yymsp[-2].minor.yy316);} -#line 2092 "parse.c" +#line 2098 "parse.c" break; case 58: -#line 271 "parse.y" +#line 272 "parse.y" {sqlite3CreateIndex(pParse,0,0,0,0,yymsp[0].minor.yy316,0,0,0,0);} -#line 2097 "parse.c" +#line 2103 "parse.c" break; case 59: -#line 272 "parse.y" +#line 273 "parse.y" {sqlite3AddCheckConstraint(pParse,yymsp[-1].minor.yy450);} -#line 2102 "parse.c" +#line 2108 "parse.c" break; case 60: -#line 274 "parse.y" +#line 275 "parse.y" {sqlite3CreateForeignKey(pParse,0,&yymsp[-2].minor.yy178,yymsp[-1].minor.yy242,yymsp[0].minor.yy316);} -#line 2107 "parse.c" +#line 2113 "parse.c" break; case 61: -#line 275 "parse.y" +#line 276 "parse.y" {sqlite3DeferForeignKey(pParse,yymsp[0].minor.yy316);} -#line 2112 "parse.c" +#line 2118 "parse.c" break; case 62: -#line 276 "parse.y" +#line 277 "parse.y" {sqlite3AddCollateType(pParse, (char*)yymsp[0].minor.yy178.z, yymsp[0].minor.yy178.n);} -#line 2117 "parse.c" +#line 2123 "parse.c" break; case 65: -#line 289 "parse.y" +#line 290 "parse.y" { yygotominor.yy316 = OE_Restrict * 0x010101; } -#line 2122 "parse.c" +#line 2128 "parse.c" break; case 66: -#line 290 "parse.y" +#line 291 "parse.y" { yygotominor.yy316 = (yymsp[-1].minor.yy316 & yymsp[0].minor.yy207.mask) | yymsp[0].minor.yy207.value; } -#line 2127 "parse.c" +#line 2133 "parse.c" break; case 67: -#line 292 "parse.y" +#line 293 "parse.y" { yygotominor.yy207.value = 0; yygotominor.yy207.mask = 0x000000; } -#line 2132 "parse.c" +#line 2138 "parse.c" break; case 68: -#line 293 "parse.y" +#line 294 "parse.y" { yygotominor.yy207.value = yymsp[0].minor.yy316; yygotominor.yy207.mask = 0x0000ff; } -#line 2137 "parse.c" +#line 2143 "parse.c" break; case 69: -#line 294 "parse.y" +#line 295 "parse.y" { yygotominor.yy207.value = yymsp[0].minor.yy316<<8; yygotominor.yy207.mask = 0x00ff00; } -#line 2142 "parse.c" +#line 2148 "parse.c" break; case 70: -#line 295 "parse.y" +#line 296 "parse.y" { yygotominor.yy207.value = yymsp[0].minor.yy316<<16; yygotominor.yy207.mask = 0xff0000; } -#line 2147 "parse.c" +#line 2153 "parse.c" break; case 71: -#line 297 "parse.y" +#line 298 "parse.y" { yygotominor.yy316 = OE_SetNull; } -#line 2152 "parse.c" +#line 2158 "parse.c" break; case 72: -#line 298 "parse.y" +#line 299 "parse.y" { yygotominor.yy316 = OE_SetDflt; } -#line 2157 "parse.c" +#line 2163 "parse.c" break; case 73: -#line 299 "parse.y" +#line 300 "parse.y" { yygotominor.yy316 = OE_Cascade; } -#line 2162 "parse.c" +#line 2168 "parse.c" break; case 74: -#line 300 "parse.y" +#line 301 "parse.y" { yygotominor.yy316 = OE_Restrict; } -#line 2167 "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 "parse.y" + case 166: +#line 303 "parse.y" {yygotominor.yy316 = yymsp[0].minor.yy316;} -#line 2178 "parse.c" +#line 2184 "parse.c" break; case 80: -#line 312 "parse.y" +#line 313 "parse.y" {yygotominor.yy178.n = 0; yygotominor.yy178.z = 0;} -#line 2183 "parse.c" +#line 2189 "parse.c" break; case 81: -#line 313 "parse.y" +#line 314 "parse.y" {yygotominor.yy178 = yymsp[-1].minor.yy0;} -#line 2188 "parse.c" +#line 2194 "parse.c" break; case 86: -#line 319 "parse.y" +#line 320 "parse.y" {sqlite3AddPrimaryKey(pParse,yymsp[-3].minor.yy242,yymsp[0].minor.yy316,yymsp[-2].minor.yy316,0);} -#line 2193 "parse.c" +#line 2199 "parse.c" break; case 87: -#line 321 "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 "parse.c" +#line 2204 "parse.c" break; case 88: -#line 322 "parse.y" +#line 323 "parse.y" {sqlite3AddCheckConstraint(pParse,yymsp[-2].minor.yy450);} -#line 2203 "parse.c" +#line 2209 "parse.c" break; case 89: -#line 324 "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 "parse.c" +#line 2217 "parse.c" break; case 92: case 94: -#line 338 "parse.y" +#line 339 "parse.y" {yygotominor.yy316 = OE_Default;} -#line 2217 "parse.c" +#line 2223 "parse.c" break; case 97: -#line 343 "parse.y" +#line 344 "parse.y" {yygotominor.yy316 = OE_Ignore;} -#line 2222 "parse.c" +#line 2228 "parse.c" break; case 98: - case 169: -#line 344 "parse.y" + case 167: +#line 345 "parse.y" {yygotominor.yy316 = OE_Replace;} -#line 2228 "parse.c" +#line 2234 "parse.c" break; case 99: -#line 348 "parse.y" +#line 349 "parse.y" { sqlite3DropTable(pParse, yymsp[0].minor.yy419, 0, yymsp[-1].minor.yy316); } -#line 2235 "parse.c" +#line 2241 "parse.c" break; case 102: -#line 358 "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 "parse.c" +#line 2248 "parse.c" break; case 103: -#line 361 "parse.y" +#line 362 "parse.y" { sqlite3DropTable(pParse, yymsp[0].minor.yy419, 1, yymsp[-1].minor.yy316); } -#line 2249 "parse.c" +#line 2255 "parse.c" break; case 104: -#line 368 "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 "parse.c" +#line 2263 "parse.c" break; case 105: case 128: -#line 378 "parse.y" +#line 379 "parse.y" {yygotominor.yy43 = yymsp[0].minor.yy43;} -#line 2263 "parse.c" +#line 2269 "parse.c" break; case 106: -#line 380 "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 "parse.c" +#line 2280 "parse.c" break; case 108: -#line 389 "parse.y" +#line 390 "parse.y" {yygotominor.yy316 = TK_ALL;} -#line 2279 "parse.c" +#line 2285 "parse.c" break; case 110: -#line 393 "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 "parse.c" +#line 2292 "parse.c" break; case 114: - case 238: -#line 414 "parse.y" + case 237: +#line 415 "parse.y" {yygotominor.yy242 = yymsp[-1].minor.yy242;} -#line 2292 "parse.c" +#line 2298 "parse.c" break; case 115: case 141: - case 151: - case 237: -#line 415 "parse.y" + case 149: + case 236: +#line 416 "parse.y" {yygotominor.yy242 = 0;} -#line 2300 "parse.c" +#line 2306 "parse.c" break; case 116: -#line 416 "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 "parse.c" +#line 2313 "parse.c" break; case 117: -#line 419 "parse.y" +#line 420 "parse.y" { yygotominor.yy242 = sqlite3ExprListAppend(yymsp[-1].minor.yy242, sqlite3Expr(TK_ALL, 0, 0, 0), 0); } -#line 2314 "parse.c" +#line 2320 "parse.c" break; case 118: -#line 422 "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 "parse.c" +#line 2329 "parse.c" break; case 121: -#line 434 "parse.y" +#line 435 "parse.y" {yygotominor.yy178.n = 0;} -#line 2328 "parse.c" +#line 2334 "parse.c" break; case 122: -#line 446 "parse.y" +#line 447 "parse.y" {yygotominor.yy419 = sqliteMalloc(sizeof(*yygotominor.yy419));} -#line 2333 "parse.c" +#line 2339 "parse.c" break; case 123: -#line 447 "parse.y" +#line 448 "parse.y" { yygotominor.yy419 = yymsp[0].minor.yy419; sqlite3SrcListShiftJoinType(yygotominor.yy419); } -#line 2341 "parse.c" +#line 2347 "parse.c" break; case 124: -#line 455 "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 "parse.c" +#line 2355 "parse.c" break; case 125: -#line 459 "parse.y" +#line 460 "parse.y" {yygotominor.yy419 = 0;} -#line 2354 "parse.c" +#line 2360 "parse.c" break; case 126: -#line 460 "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 "parse.c" +#line 2367 "parse.c" break; case 127: -#line 465 "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 "parse.c" +#line 2374 "parse.c" break; case 129: -#line 476 "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 "parse.c" +#line 2382 "parse.c" break; case 130: -#line 483 "parse.y" +#line 484 "parse.y" {yygotominor.yy178.z=0; yygotominor.yy178.n=0;} -#line 2381 "parse.c" +#line 2387 "parse.c" break; case 132: -#line 488 "parse.y" +#line 489 "parse.y" {yygotominor.yy419 = sqlite3SrcListAppend(0,&yymsp[-1].minor.yy178,&yymsp[0].minor.yy178);} -#line 2386 "parse.c" +#line 2392 "parse.c" break; case 133: -#line 492 "parse.y" +#line 493 "parse.y" { yygotominor.yy316 = JT_INNER; } -#line 2391 "parse.c" +#line 2397 "parse.c" break; case 134: -#line 493 "parse.y" +#line 494 "parse.y" { yygotominor.yy316 = sqlite3JoinType(pParse,&yymsp[-1].minor.yy0,0,0); } -#line 2396 "parse.c" +#line 2402 "parse.c" break; case 135: -#line 494 "parse.y" +#line 495 "parse.y" { yygotominor.yy316 = sqlite3JoinType(pParse,&yymsp[-2].minor.yy0,&yymsp[-1].minor.yy178,0); } -#line 2401 "parse.c" +#line 2407 "parse.c" break; case 136: -#line 496 "parse.y" +#line 497 "parse.y" { yygotominor.yy316 = sqlite3JoinType(pParse,&yymsp[-3].minor.yy0,&yymsp[-2].minor.yy178,&yymsp[-1].minor.yy178); } -#line 2406 "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 "parse.y" -{yygotominor.yy450 = yymsp[0].minor.yy450;} -#line 2419 "parse.c" - break; - case 138: - case 153: - case 160: - case 204: - case 227: - case 229: - case 233: -#line 501 "parse.y" +#line 502 "parse.y" {yygotominor.yy450 = 0;} -#line 2430 "parse.c" +#line 2436 "parse.c" break; case 139: - case 173: -#line 505 "parse.y" + case 171: +#line 506 "parse.y" {yygotominor.yy352 = yymsp[-1].minor.yy352;} -#line 2436 "parse.c" +#line 2442 "parse.c" break; case 140: - case 172: -#line 506 "parse.y" + case 170: +#line 507 "parse.y" {yygotominor.yy352 = 0;} -#line 2442 "parse.c" +#line 2448 "parse.c" break; case 142: - case 152: -#line 517 "parse.y" + case 150: +#line 518 "parse.y" {yygotominor.yy242 = yymsp[0].minor.yy242;} -#line 2448 "parse.c" +#line 2454 "parse.c" break; case 143: -#line 518 "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 "parse.c" +#line 2462 "parse.c" break; case 144: -#line 522 "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 "parse.c" +#line 2470 "parse.c" break; case 146: case 148: #line 531 "parse.y" {yygotominor.yy316 = SQLITE_SO_ASC;} -#line 2470 "parse.c" +#line 2476 "parse.c" break; case 147: #line 532 "parse.y" {yygotominor.yy316 = SQLITE_SO_DESC;} -#line 2475 "parse.c" +#line 2481 "parse.c" break; - case 149: -#line 534 "parse.y" -{yygotominor.yy178.z = 0; yygotominor.yy178.n = 0;} -#line 2480 "parse.c" - break; - case 155: -#line 552 "parse.y" + case 153: +#line 550 "parse.y" {yygotominor.yy84.pLimit = 0; yygotominor.yy84.pOffset = 0;} -#line 2485 "parse.c" +#line 2486 "parse.c" break; - case 156: -#line 553 "parse.y" + case 154: +#line 551 "parse.y" {yygotominor.yy84.pLimit = yymsp[0].minor.yy450; yygotominor.yy84.pOffset = 0;} -#line 2490 "parse.c" +#line 2491 "parse.c" break; - case 157: -#line 555 "parse.y" + case 155: +#line 553 "parse.y" {yygotominor.yy84.pLimit = yymsp[-2].minor.yy450; yygotominor.yy84.pOffset = yymsp[0].minor.yy450;} -#line 2495 "parse.c" +#line 2496 "parse.c" break; - case 158: -#line 557 "parse.y" + case 156: +#line 555 "parse.y" {yygotominor.yy84.pOffset = yymsp[-2].minor.yy450; yygotominor.yy84.pLimit = yymsp[0].minor.yy450;} -#line 2500 "parse.c" +#line 2501 "parse.c" break; - case 159: -#line 561 "parse.y" + case 157: +#line 559 "parse.y" {sqlite3DeleteFrom(pParse,yymsp[-1].minor.yy419,yymsp[0].minor.yy450);} -#line 2505 "parse.c" +#line 2506 "parse.c" break; - case 162: -#line 572 "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 "parse.c" +#line 2511 "parse.c" break; - case 163: -#line 578 "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 "parse.c" +#line 2516 "parse.c" break; - case 164: -#line 579 "parse.y" + case 162: +#line 577 "parse.y" {yygotominor.yy242 = sqlite3ExprListAppend(0,yymsp[0].minor.yy450,&yymsp[-2].minor.yy178);} -#line 2520 "parse.c" +#line 2521 "parse.c" break; - case 165: -#line 585 "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 "parse.c" +#line 2526 "parse.c" break; - case 166: -#line 587 "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 "parse.c" +#line 2531 "parse.c" break; - case 167: -#line 589 "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 "parse.c" +#line 2536 "parse.c" break; - case 170: - case 230: -#line 599 "parse.y" + case 168: + case 229: +#line 597 "parse.y" {yygotominor.yy242 = sqlite3ExprListAppend(yymsp[-2].minor.yy242,yymsp[0].minor.yy450,0);} -#line 2541 "parse.c" +#line 2542 "parse.c" break; - case 171: - case 231: -#line 600 "parse.y" + case 169: + case 230: +#line 598 "parse.y" {yygotominor.yy242 = sqlite3ExprListAppend(0,yymsp[0].minor.yy450,0);} -#line 2547 "parse.c" +#line 2548 "parse.c" break; - case 174: -#line 609 "parse.y" + case 172: +#line 607 "parse.y" {yygotominor.yy352 = sqlite3IdListAppend(yymsp[-2].minor.yy352,&yymsp[0].minor.yy178);} -#line 2552 "parse.c" +#line 2553 "parse.c" break; - case 175: -#line 610 "parse.y" + case 173: +#line 608 "parse.y" {yygotominor.yy352 = sqlite3IdListAppend(0,&yymsp[0].minor.yy178);} -#line 2557 "parse.c" +#line 2558 "parse.c" break; - case 177: -#line 621 "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 "parse.c" +#line 2563 "parse.c" break; + case 176: + case 181: + case 182: +#line 620 "parse.y" +{yygotominor.yy450 = sqlite3Expr(yymsp[0].major, 0, 0, &yymsp[0].minor.yy0);} +#line 2570 "parse.c" + break; + case 177: case 178: - case 183: - case 184: -#line 622 "parse.y" -{yygotominor.yy450 = sqlite3Expr(yymsp[0].major, 0, 0, &yymsp[0].minor.yy0);} -#line 2569 "parse.c" +#line 621 "parse.y" +{yygotominor.yy450 = sqlite3Expr(TK_ID, 0, 0, &yymsp[0].minor.yy0);} +#line 2576 "parse.c" break; case 179: - case 180: #line 623 "parse.y" -{yygotominor.yy450 = sqlite3Expr(TK_ID, 0, 0, &yymsp[0].minor.yy0);} -#line 2575 "parse.c" - break; - case 181: -#line 625 "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 "parse.c" +#line 2585 "parse.c" break; - case 182: -#line 630 "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 "parse.c" +#line 2596 "parse.c" break; - case 185: -#line 639 "parse.y" + case 183: +#line 637 "parse.y" {yygotominor.yy450 = sqlite3RegisterExpr(pParse, &yymsp[0].minor.yy0);} -#line 2600 "parse.c" +#line 2601 "parse.c" break; - case 186: -#line 640 "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 "parse.c" +#line 2610 "parse.c" break; - case 187: -#line 646 "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 "parse.c" +#line 2625 "parse.c" break; - case 188: -#line 651 "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 "parse.c" +#line 2636 "parse.c" break; - case 189: -#line 658 "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 "parse.c" +#line 2644 "parse.c" break; - case 190: -#line 662 "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 "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 "parse.y" +#line 672 "parse.y" {yygotominor.yy450 = sqlite3Expr(yymsp[-1].major, yymsp[-2].minor.yy450, yymsp[0].minor.yy450, 0);} -#line 2661 "parse.c" +#line 2669 "parse.c" break; - case 199: - case 201: -#line 681 "parse.y" + case 198: + case 200: +#line 682 "parse.y" {yygotominor.yy86.eOperator = yymsp[0].minor.yy0; yygotominor.yy86.not = 0;} -#line 2667 "parse.c" +#line 2675 "parse.c" break; - case 200: - case 202: -#line 682 "parse.y" + case 199: + case 201: +#line 683 "parse.y" {yygotominor.yy86.eOperator = yymsp[0].minor.yy0; yygotominor.yy86.not = 1;} -#line 2673 "parse.c" +#line 2681 "parse.c" break; - case 205: -#line 689 "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 "parse.c" +#line 2697 "parse.c" break; - case 206: -#line 702 "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 "parse.c" +#line 2705 "parse.c" break; - case 207: -#line 706 "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 "parse.c" +#line 2713 "parse.c" break; - case 208: -#line 710 "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 "parse.c" +#line 2721 "parse.c" break; - case 209: -#line 714 "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 "parse.c" +#line 2729 "parse.c" break; - case 210: -#line 718 "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 "parse.c" +#line 2737 "parse.c" break; - case 211: -#line 722 "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 "parse.c" +#line 2745 "parse.c" break; - case 212: -#line 726 "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 "parse.c" +#line 2753 "parse.c" break; - case 215: -#line 733 "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 "parse.c" +#line 2769 "parse.c" break; - case 218: -#line 749 "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 "parse.c" +#line 2783 "parse.c" break; - case 219: -#line 759 "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 "parse.c" +#line 2796 "parse.c" break; - case 220: -#line 768 "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 "parse.c" +#line 2810 "parse.c" break; - case 221: -#line 778 "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 "parse.c" +#line 2825 "parse.c" break; - case 222: -#line 789 "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 "parse.c" +#line 2838 "parse.c" break; - case 223: -#line 801 "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 "parse.c" +#line 2851 "parse.c" break; - case 224: -#line 812 "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 "parse.c" +#line 2859 "parse.c" break; - case 225: -#line 816 "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 "parse.c" +#line 2867 "parse.c" break; - case 234: -#line 843 "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 "parse.c" +#line 2875 "parse.c" break; - case 235: - case 281: -#line 849 "parse.y" + case 234: + case 282: +#line 850 "parse.y" {yygotominor.yy316 = OE_Abort;} -#line 2873 "parse.c" +#line 2881 "parse.c" break; - case 236: -#line 850 "parse.y" + case 235: +#line 851 "parse.y" {yygotominor.yy316 = OE_None;} -#line 2878 "parse.c" +#line 2886 "parse.c" break; - case 239: -#line 860 "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 "parse.c" +#line 2899 "parse.c" break; - case 240: -#line 869 "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 "parse.c" +#line 2912 "parse.c" break; - case 242: -#line 883 "parse.y" -{sqlite3DropIndex(pParse, yymsp[0].minor.yy419, yymsp[-1].minor.yy316);} -#line 2909 "parse.c" + case 241: +#line 882 "parse.y" +{yygotominor.yy178.z = 0; yygotominor.yy178.n = 0;} +#line 2917 "parse.c" break; case 243: - case 244: #line 888 "parse.y" +{sqlite3DropIndex(pParse, yymsp[0].minor.yy419, yymsp[-1].minor.yy316);} +#line 2922 "parse.c" + break; + case 244: + case 245: +#line 893 "parse.y" {sqlite3Vacuum(pParse);} -#line 2915 "parse.c" +#line 2928 "parse.c" break; - case 245: -#line 895 "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 "parse.c" +#line 2933 "parse.c" break; - case 246: -#line 896 "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 "parse.c" +#line 2938 "parse.c" break; - case 247: -#line 897 "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 "parse.c" +#line 2945 "parse.c" break; - case 248: -#line 900 "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 "parse.c" +#line 2950 "parse.c" break; - case 249: -#line 901 "parse.y" + case 250: +#line 906 "parse.y" {sqlite3Pragma(pParse,&yymsp[-1].minor.yy178,&yymsp[0].minor.yy178,0,0);} -#line 2942 "parse.c" +#line 2955 "parse.c" break; - case 257: -#line 915 "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 "parse.c" +#line 2965 "parse.c" break; - case 258: -#line 924 "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 "parse.c" +#line 2973 "parse.c" break; - case 259: - case 262: -#line 930 "parse.y" + case 260: + case 263: +#line 935 "parse.y" { yygotominor.yy316 = TK_BEFORE; } -#line 2966 "parse.c" +#line 2979 "parse.c" break; - case 260: -#line 931 "parse.y" + case 261: +#line 936 "parse.y" { yygotominor.yy316 = TK_AFTER; } -#line 2971 "parse.c" +#line 2984 "parse.c" break; - case 261: -#line 932 "parse.y" + case 262: +#line 937 "parse.y" { yygotominor.yy316 = TK_INSTEAD;} -#line 2976 "parse.c" +#line 2989 "parse.c" break; - case 263: case 264: -#line 937 "parse.y" + case 265: +#line 942 "parse.y" {yygotominor.yy354.a = yymsp[0].major; yygotominor.yy354.b = 0;} -#line 2982 "parse.c" +#line 2995 "parse.c" break; - case 265: -#line 939 "parse.y" + case 266: +#line 944 "parse.y" {yygotominor.yy354.a = TK_UPDATE; yygotominor.yy354.b = yymsp[0].minor.yy352;} -#line 2987 "parse.c" +#line 3000 "parse.c" break; - case 266: case 267: -#line 942 "parse.y" + case 268: +#line 947 "parse.y" { yygotominor.yy316 = TK_ROW; } -#line 2993 "parse.c" +#line 3006 "parse.c" break; - case 268: -#line 944 "parse.y" + case 269: +#line 949 "parse.y" { yygotominor.yy316 = TK_STATEMENT; } -#line 2998 "parse.c" +#line 3011 "parse.c" break; - case 269: -#line 948 "parse.y" + case 270: +#line 953 "parse.y" { yygotominor.yy450 = 0; } -#line 3003 "parse.c" +#line 3016 "parse.c" break; - case 270: -#line 949 "parse.y" + case 271: +#line 954 "parse.y" { yygotominor.yy450 = yymsp[0].minor.yy450; } -#line 3008 "parse.c" +#line 3021 "parse.c" break; - case 271: -#line 953 "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 "parse.c" +#line 3034 "parse.c" break; - case 272: -#line 962 "parse.y" + case 273: +#line 967 "parse.y" { yygotominor.yy75 = 0; } -#line 3026 "parse.c" +#line 3039 "parse.c" break; - case 273: -#line 968 "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 "parse.c" +#line 3044 "parse.c" break; - case 274: -#line 973 "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 "parse.c" +#line 3049 "parse.c" break; - case 275: -#line 976 "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 "parse.c" +#line 3054 "parse.c" break; - case 276: -#line 980 "parse.y" + case 277: +#line 985 "parse.y" {yygotominor.yy75 = sqlite3TriggerDeleteStep(&yymsp[-1].minor.yy178, yymsp[0].minor.yy450);} -#line 3046 "parse.c" +#line 3059 "parse.c" break; - case 277: -#line 983 "parse.y" + case 278: +#line 988 "parse.y" {yygotominor.yy75 = sqlite3TriggerSelectStep(yymsp[0].minor.yy43); } -#line 3051 "parse.c" +#line 3064 "parse.c" break; - case 278: -#line 986 "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 "parse.c" +#line 3075 "parse.c" break; - case 279: -#line 993 "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 "parse.c" +#line 3086 "parse.c" break; - case 280: -#line 1003 "parse.y" + case 281: +#line 1008 "parse.y" {yygotominor.yy316 = OE_Rollback;} -#line 3078 "parse.c" +#line 3091 "parse.c" break; - case 282: -#line 1005 "parse.y" + case 283: +#line 1010 "parse.y" {yygotominor.yy316 = OE_Fail;} -#line 3083 "parse.c" +#line 3096 "parse.c" break; - case 283: -#line 1010 "parse.y" + case 284: +#line 1015 "parse.y" { sqlite3DropTrigger(pParse,yymsp[0].minor.yy419,yymsp[-1].minor.yy316); } -#line 3090 "parse.c" +#line 3103 "parse.c" break; - case 284: -#line 1016 "parse.y" + case 285: +#line 1021 "parse.y" { sqlite3Attach(pParse, yymsp[-3].minor.yy450, yymsp[-1].minor.yy450, yymsp[0].minor.yy158); } -#line 3097 "parse.c" +#line 3110 "parse.c" break; - case 285: -#line 1021 "parse.y" + case 286: +#line 1026 "parse.y" { yygotominor.yy158 = 0; } -#line 3102 "parse.c" +#line 3115 "parse.c" break; - case 286: -#line 1022 "parse.y" + case 287: +#line 1027 "parse.y" { yygotominor.yy158 = yymsp[0].minor.yy450; } -#line 3107 "parse.c" +#line 3120 "parse.c" break; - case 289: -#line 1028 "parse.y" + case 290: +#line 1033 "parse.y" { sqlite3Detach(pParse, yymsp[0].minor.yy450); } -#line 3114 "parse.c" +#line 3127 "parse.c" break; - case 290: -#line 1034 "parse.y" + case 291: +#line 1039 "parse.y" {sqlite3Reindex(pParse, 0, 0);} -#line 3119 "parse.c" +#line 3132 "parse.c" break; - case 291: -#line 1035 "parse.y" -{sqlite3Reindex(pParse, &yymsp[-1].minor.yy178, &yymsp[0].minor.yy178);} -#line 3124 "parse.c" - break; case 292: #line 1040 "parse.y" -{sqlite3Analyze(pParse, 0, 0);} -#line 3129 "parse.c" +{sqlite3Reindex(pParse, &yymsp[-1].minor.yy178, &yymsp[0].minor.yy178);} +#line 3137 "parse.c" break; case 293: -#line 1041 "parse.y" -{sqlite3Analyze(pParse, &yymsp[-1].minor.yy178, &yymsp[0].minor.yy178);} -#line 3134 "parse.c" +#line 1045 "parse.y" +{sqlite3Analyze(pParse, 0, 0);} +#line 3142 "parse.c" break; case 294: #line 1046 "parse.y" +{sqlite3Analyze(pParse, &yymsp[-1].minor.yy178, &yymsp[0].minor.yy178);} +#line 3147 "parse.c" + break; + case 295: +#line 1051 "parse.y" { sqlite3AlterRenameTable(pParse,yymsp[-3].minor.yy419,&yymsp[0].minor.yy178); } -#line 3141 "parse.c" +#line 3154 "parse.c" break; - case 295: -#line 1049 "parse.y" + case 296: +#line 1054 "parse.y" { sqlite3AlterFinishAddColumn(pParse, &yymsp[0].minor.yy178); } -#line 3148 "parse.c" +#line 3161 "parse.c" break; - case 296: -#line 1052 "parse.y" + case 297: +#line 1057 "parse.y" { sqlite3AlterBeginAddColumn(pParse, yymsp[0].minor.yy419); } -#line 3155 "parse.c" +#line 3168 "parse.c" break; - case 299: -#line 1061 "parse.y" + case 300: +#line 1066 "parse.y" {sqlite3VtabFinishParse(pParse,0);} -#line 3160 "parse.c" +#line 3173 "parse.c" break; - case 300: -#line 1062 "parse.y" + case 301: +#line 1067 "parse.y" {sqlite3VtabFinishParse(pParse,&yymsp[0].minor.yy0);} -#line 3165 "parse.c" +#line 3178 "parse.c" break; - case 301: -#line 1063 "parse.y" + case 302: +#line 1068 "parse.y" { sqlite3VtabBeginParse(pParse, &yymsp[-3].minor.yy178, &yymsp[-2].minor.yy178, &yymsp[0].minor.yy178); } -#line 3172 "parse.c" +#line 3185 "parse.c" break; - case 304: -#line 1068 "parse.y" + case 305: +#line 1073 "parse.y" {sqlite3VtabArgInit(pParse);} -#line 3177 "parse.c" +#line 3190 "parse.c" break; - case 306: case 307: case 308: - case 310: -#line 1070 "parse.y" + case 309: + case 311: +#line 1075 "parse.y" {sqlite3VtabArgExtend(pParse,&yymsp[0].minor.yy0);} -#line 3185 "parse.c" +#line 3198 "parse.c" break; }; yygoto = yyRuleInfo[yyruleno].lhs; @@ -3246,7 +3259,7 @@ static void yy_syntax_error( } pParse->parseError = 1; } -#line 3253 "parse.c" +#line 3266 "parse.c" sqlite3ParserARG_STORE; /* Suppress warning about unused %extra_argument variable */ } ============================================================ --- sqlite/parse.h 70bbcc29884b07839cf2618ed6021b7b2323a445 +++ sqlite/parse.h 6f6a83f5cf2575172e44744ed9ffeacbbe812531 @@ -82,19 +82,19 @@ #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 ============================================================ --- sqlite/select.c 628f49827d5a94ed9b6246efb8dc9f5c24e413f1 +++ sqlite/select.c 63b2163f35fd2570a02dab5759979644c4405f1c @@ -12,7 +12,7 @@ ** This file contains C code routines that are called by the parser ** to handle SELECT statements in SQLite. ** -** $Id: select.c,v 1.325 2007/01/26 19:23:33 drh Exp $ +** $Id: select.c,v 1.326 2007/02/01 23:02:45 drh Exp $ */ #include "sqliteInt.h" @@ -1952,10 +1952,9 @@ static int multiSelect( apColl = pKeyInfo->aColl; for(i=0; ipExpr; - char *zName = pOTerm->zName; - assert( pExpr->op==TK_COLUMN && pExpr->iColumnflags & EP_ExpCollate) ){ + assert( pExpr->pColl!=0 ); + *apColl = pExpr->pColl; }else{ *apColl = aCopy[pExpr->iColumn]; } @@ -2478,8 +2477,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 " @@ -2914,23 +2919,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; inExpr; i++, pTerm++){ - if( pTerm->zName ){ - pTerm->pExpr->pColl = sqlite3LocateCollSeq(pParse, pTerm->zName, -1); - } - } if( pParse->nErr ){ goto select_end; } ============================================================ --- sqlite/sqlite3.h f6d447ccc3b195fcf1048058cfb5f6632fd5d577 +++ sqlite/sqlite3.h c17a4ef52a78c0ca61df95965c1ce3c2192b98de @@ -31,7 +31,7 @@ extern "C" { #ifdef SQLITE_VERSION # undef SQLITE_VERSION #endif -#define SQLITE_VERSION "3.3.12" +#define SQLITE_VERSION "3.3.13" /* ** The format of the version string is "X.Y.Z", where @@ -48,7 +48,7 @@ extern "C" { #ifdef SQLITE_VERSION_NUMBER # undef SQLITE_VERSION_NUMBER #endif -#define SQLITE_VERSION_NUMBER 3003012 +#define SQLITE_VERSION_NUMBER 3003013 /* ** The version string is also compiled into the library so that a program ============================================================ --- sqlite/sqliteInt.h f15bb7b1bcf750a3202bfae85d6d3beb4e5f64e1 +++ sqlite/sqliteInt.h 409dfff7f08135017aa2dfb65245dfc7b1db7099 @@ -11,7 +11,7 @@ ************************************************************************* ** Internal interface definitions for SQLite. ** -** @(#) $Id: sqliteInt.h,v 1.533 2007/01/19 01:06:02 drh Exp $ +** @(#) $Id: sqliteInt.h,v 1.536 2007/02/13 12:49:24 drh Exp $ */ #ifndef _SQLITEINT_H_ #define _SQLITEINT_H_ @@ -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<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); ============================================================ --- sqlite/vdbemem.c 26623176bf1c616aa478da958fac49502491a921 +++ sqlite/vdbemem.c ff2424bee9eaf7c61d1f28bc0e711bebddebd653 @@ -137,6 +137,7 @@ int sqlite3VdbeMemNulTerminate(Mem *pMem } pMem->xDel = 0; pMem->z = z; + pMem->flags |= MEM_Term; } return SQLITE_OK; } ============================================================ --- sqlite/where.c 23dc1c7535c96770d214762ed0bc3c655de5061c +++ sqlite/where.c 2a919a3fbaff2e55604119f7c60133db459b404c @@ -16,7 +16,7 @@ ** so is applicable. Because this module is responsible for selecting ** indices, you might also think of this module as the "query optimizer". ** -** $Id: where.c,v 1.236 2007/01/25 16:56:07 drh Exp $ +** $Id: where.c,v 1.237 2007/02/06 13:26:33 drh Exp $ */ #include "sqliteInt.h" @@ -43,6 +43,7 @@ typedef struct WhereClause WhereClause; /* 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 WhereClause { */ 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 exprAnalyzeAll( */ 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 exprAnalyze( */ 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,7 +841,26 @@ 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( iFirstnExpr ){ + 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 ** clause. If it can, it returns 1. If pIdx cannot satisfy the @@ -858,6 +882,7 @@ static int isSortingIndex( */ 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 sortableByRowid( 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; inSrc; i++){ createMask(&maskSet, pTabList->a[i].iCursor); } - exprAnalyzeAll(pTabList, &maskSet, &wc); + exprAnalyzeAll(pTabList, &wc); if( sqlite3MallocFailed() ){ goto whereBeginNoMem; }