| Index: third_party/sqlite/src/src/prepare.c | 
| diff --git a/third_party/sqlite/src/src/prepare.c b/third_party/sqlite/src/src/prepare.c | 
| index fc45b8e6aa46dbd307fb1609e8eab28e0e2c3714..a05e619f3ed596c360ebd2f829a1b0d2d4fa6ee3 100644 | 
| --- a/third_party/sqlite/src/src/prepare.c | 
| +++ b/third_party/sqlite/src/src/prepare.c | 
| @@ -134,7 +134,9 @@ int sqlite3InitCallback(void *pInit, int argc, char **argv, char **NotUsed){ | 
| static int sqlite3InitOne(sqlite3 *db, int iDb, char **pzErrMsg){ | 
| int rc; | 
| int i; | 
| +#ifndef SQLITE_OMIT_DEPRECATED | 
| int size; | 
| +#endif | 
| Table *pTab; | 
| Db *pDb; | 
| char const *azArg[4]; | 
| @@ -177,7 +179,7 @@ static int sqlite3InitOne(sqlite3 *db, int iDb, char **pzErrMsg){ | 
|  | 
| /* zMasterSchema and zInitScript are set to point at the master schema | 
| ** and initialisation script appropriate for the database being | 
| -  ** initialised. zMasterName is the name of the master table. | 
| +  ** initialized. zMasterName is the name of the master table. | 
| */ | 
| if( !OMIT_TEMPDB && iDb==1 ){ | 
| zMasterSchema = temp_master_schema; | 
| @@ -257,12 +259,15 @@ static int sqlite3InitOne(sqlite3 *db, int iDb, char **pzErrMsg){ | 
| */ | 
| if( meta[BTREE_TEXT_ENCODING-1] ){  /* text encoding */ | 
| if( iDb==0 ){ | 
| +#ifndef SQLITE_OMIT_UTF16 | 
| u8 encoding; | 
| /* If opening the main database, set ENC(db). */ | 
| encoding = (u8)meta[BTREE_TEXT_ENCODING-1] & 3; | 
| if( encoding==0 ) encoding = SQLITE_UTF8; | 
| ENC(db) = encoding; | 
| -      db->pDfltColl = sqlite3FindCollSeq(db, SQLITE_UTF8, "BINARY", 0); | 
| +#else | 
| +      ENC(db) = SQLITE_UTF8; | 
| +#endif | 
| }else{ | 
| /* If opening an attached database, the encoding much match ENC(db) */ | 
| if( meta[BTREE_TEXT_ENCODING-1]!=ENC(db) ){ | 
| @@ -278,9 +283,13 @@ static int sqlite3InitOne(sqlite3 *db, int iDb, char **pzErrMsg){ | 
| pDb->pSchema->enc = ENC(db); | 
|  | 
| if( pDb->pSchema->cache_size==0 ){ | 
| +#ifndef SQLITE_OMIT_DEPRECATED | 
| size = sqlite3AbsInt32(meta[BTREE_DEFAULT_CACHE_SIZE-1]); | 
| if( size==0 ){ size = SQLITE_DEFAULT_CACHE_SIZE; } | 
| pDb->pSchema->cache_size = size; | 
| +#else | 
| +    pDb->pSchema->cache_size = SQLITE_DEFAULT_CACHE_SIZE; | 
| +#endif | 
| sqlite3BtreeSetCacheSize(pDb->pBt, pDb->pSchema->cache_size); | 
| } | 
|  | 
| @@ -319,7 +328,7 @@ static int sqlite3InitOne(sqlite3 *db, int iDb, char **pzErrMsg){ | 
| db->aDb[iDb].zName, zMasterName); | 
| #ifndef SQLITE_OMIT_AUTHORIZATION | 
| { | 
| -      int (*xAuth)(void*,int,const char*,const char*,const char*,const char*); | 
| +      sqlite3_xauth xAuth; | 
| xAuth = db->xAuth; | 
| db->xAuth = 0; | 
| #endif | 
| @@ -338,7 +347,7 @@ static int sqlite3InitOne(sqlite3 *db, int iDb, char **pzErrMsg){ | 
| } | 
| if( db->mallocFailed ){ | 
| rc = SQLITE_NOMEM; | 
| -    sqlite3ResetInternalSchema(db, -1); | 
| +    sqlite3ResetAllSchemasOfConnection(db); | 
| } | 
| if( rc==SQLITE_OK || (db->flags&SQLITE_RecoveryMode)){ | 
| /* Black magic: If the SQLITE_RecoveryMode flag is set, then consider | 
| @@ -385,26 +394,27 @@ int sqlite3Init(sqlite3 *db, char **pzErrMsg){ | 
| int commit_internal = !(db->flags&SQLITE_InternChanges); | 
|  | 
| assert( sqlite3_mutex_held(db->mutex) ); | 
| +  assert( db->init.busy==0 ); | 
| rc = SQLITE_OK; | 
| db->init.busy = 1; | 
| for(i=0; rc==SQLITE_OK && i<db->nDb; i++){ | 
| if( DbHasProperty(db, i, DB_SchemaLoaded) || i==1 ) continue; | 
| rc = sqlite3InitOne(db, i, pzErrMsg); | 
| if( rc ){ | 
| -      sqlite3ResetInternalSchema(db, i); | 
| +      sqlite3ResetOneSchema(db, i); | 
| } | 
| } | 
|  | 
| -  /* Once all the other databases have been initialised, load the schema | 
| +  /* Once all the other databases have been initialized, load the schema | 
| ** for the TEMP database. This is loaded last, as the TEMP database | 
| ** schema may contain references to objects in other databases. | 
| */ | 
| #ifndef SQLITE_OMIT_TEMPDB | 
| -  if( rc==SQLITE_OK && ALWAYS(db->nDb>1) | 
| -                    && !DbHasProperty(db, 1, DB_SchemaLoaded) ){ | 
| +  assert( db->nDb>1 ); | 
| +  if( rc==SQLITE_OK && !DbHasProperty(db, 1, DB_SchemaLoaded) ){ | 
| rc = sqlite3InitOne(db, 1, pzErrMsg); | 
| if( rc ){ | 
| -      sqlite3ResetInternalSchema(db, 1); | 
| +      sqlite3ResetOneSchema(db, 1); | 
| } | 
| } | 
| #endif | 
| @@ -418,7 +428,7 @@ int sqlite3Init(sqlite3 *db, char **pzErrMsg){ | 
| } | 
|  | 
| /* | 
| -** This routine is a no-op if the database schema is already initialised. | 
| +** This routine is a no-op if the database schema is already initialized. | 
| ** Otherwise, the schema is loaded. An error code is returned. | 
| */ | 
| int sqlite3ReadSchema(Parse *pParse){ | 
| @@ -472,7 +482,7 @@ static void schemaIsValid(Parse *pParse){ | 
| sqlite3BtreeGetMeta(pBt, BTREE_SCHEMA_VERSION, (u32 *)&cookie); | 
| assert( sqlite3SchemaMutexHeld(db, iDb, 0) ); | 
| if( cookie!=db->aDb[iDb].pSchema->schema_cookie ){ | 
| -      sqlite3ResetInternalSchema(db, iDb); | 
| +      sqlite3ResetOneSchema(db, iDb); | 
| pParse->rc = SQLITE_SCHEMA; | 
| } | 
|  | 
| @@ -516,6 +526,17 @@ int sqlite3SchemaToIndex(sqlite3 *db, Schema *pSchema){ | 
| } | 
|  | 
| /* | 
| +** Free all memory allocations in the pParse object | 
| +*/ | 
| +void sqlite3ParserReset(Parse *pParse){ | 
| +  if( pParse ){ | 
| +    sqlite3 *db = pParse->db; | 
| +    sqlite3DbFree(db, pParse->aLabel); | 
| +    sqlite3ExprListDelete(db, pParse->pConstExpr); | 
| +  } | 
| +} | 
| + | 
| +/* | 
| ** Compile the UTF-8 encoded SQL statement zSql into a statement handle. | 
| */ | 
| static int sqlite3Prepare( | 
| @@ -573,7 +594,7 @@ static int sqlite3Prepare( | 
| rc = sqlite3BtreeSchemaLocked(pBt); | 
| if( rc ){ | 
| const char *zDb = db->aDb[i].zName; | 
| -        sqlite3Error(db, rc, "database schema is locked: %s", zDb); | 
| +        sqlite3ErrorWithMsg(db, rc, "database schema is locked: %s", zDb); | 
| testcase( db->flags & SQLITE_ReadUncommitted ); | 
| goto end_prepare; | 
| } | 
| @@ -583,14 +604,14 @@ static int sqlite3Prepare( | 
| sqlite3VtabUnlockList(db); | 
|  | 
| pParse->db = db; | 
| -  pParse->nQueryLoop = (double)1; | 
| +  pParse->nQueryLoop = 0;  /* Logarithmic, so 0 really means 1 */ | 
| if( nBytes>=0 && (nBytes==0 || zSql[nBytes-1]!=0) ){ | 
| char *zSqlCopy; | 
| int mxLen = db->aLimit[SQLITE_LIMIT_SQL_LENGTH]; | 
| testcase( nBytes==mxLen ); | 
| testcase( nBytes==mxLen+1 ); | 
| if( nBytes>mxLen ){ | 
| -      sqlite3Error(db, SQLITE_TOOBIG, "statement too long"); | 
| +      sqlite3ErrorWithMsg(db, SQLITE_TOOBIG, "statement too long"); | 
| rc = sqlite3ApiExit(db, SQLITE_TOOBIG); | 
| goto end_prepare; | 
| } | 
| @@ -605,7 +626,7 @@ static int sqlite3Prepare( | 
| }else{ | 
| sqlite3RunParser(pParse, zSql, &zErrMsg); | 
| } | 
| -  assert( 1==(int)pParse->nQueryLoop ); | 
| +  assert( 0==pParse->nQueryLoop ); | 
|  | 
| if( db->mallocFailed ){ | 
| pParse->rc = SQLITE_NOMEM; | 
| @@ -645,7 +666,6 @@ static int sqlite3Prepare( | 
| } | 
| #endif | 
|  | 
| -  assert( db->init.busy==0 || saveSqlFlag==0 ); | 
| if( db->init.busy==0 ){ | 
| Vdbe *pVdbe = pParse->pVdbe; | 
| sqlite3VdbeSetSql(pVdbe, zSql, (int)(pParse->zTail-zSql), saveSqlFlag); | 
| @@ -658,10 +678,10 @@ static int sqlite3Prepare( | 
| } | 
|  | 
| if( zErrMsg ){ | 
| -    sqlite3Error(db, rc, "%s", zErrMsg); | 
| +    sqlite3ErrorWithMsg(db, rc, "%s", zErrMsg); | 
| sqlite3DbFree(db, zErrMsg); | 
| }else{ | 
| -    sqlite3Error(db, rc, 0); | 
| +    sqlite3Error(db, rc); | 
| } | 
|  | 
| /* Delete any TriggerPrg structures allocated while parsing this statement. */ | 
| @@ -673,6 +693,7 @@ static int sqlite3Prepare( | 
|  | 
| end_prepare: | 
|  | 
| +  sqlite3ParserReset(pParse); | 
| sqlite3StackFree(db, pParse); | 
| rc = sqlite3ApiExit(db, rc); | 
| assert( (rc&db->errMask)==rc ); | 
| @@ -702,6 +723,7 @@ static int sqlite3LockAndPrepare( | 
| } | 
| sqlite3BtreeLeaveAll(db); | 
| sqlite3_mutex_leave(db->mutex); | 
| +  assert( rc==SQLITE_OK || *ppStmt==0 ); | 
| return rc; | 
| } | 
|  | 
| @@ -801,6 +823,12 @@ static int sqlite3Prepare16( | 
| if( !sqlite3SafetyCheckOk(db) ){ | 
| return SQLITE_MISUSE_BKPT; | 
| } | 
| +  if( nBytes>=0 ){ | 
| +    int sz; | 
| +    const char *z = (const char*)zSql; | 
| +    for(sz=0; sz<nBytes && (z[sz]!=0 || z[sz+1]!=0); sz += 2){} | 
| +    nBytes = sz; | 
| +  } | 
| sqlite3_mutex_enter(db->mutex); | 
| zSql8 = sqlite3Utf16to8(db, zSql, nBytes, SQLITE_UTF16NATIVE); | 
| if( zSql8 ){ | 
|  |