Index: third_party/sqlite/src/src/legacy.c |
diff --git a/third_party/sqlite/src/src/legacy.c b/third_party/sqlite/src/src/legacy.c |
index ebab2de37d996e1bb4a4d9a84caec76a5eff99ea..a10006e55847d4f78cd2912db44d5de48ab9129a 100644 |
--- a/third_party/sqlite/src/src/legacy.c |
+++ b/third_party/sqlite/src/src/legacy.c |
@@ -38,20 +38,19 @@ int sqlite3_exec( |
const char *zLeftover; /* Tail of unprocessed SQL */ |
sqlite3_stmt *pStmt = 0; /* The current SQL statement */ |
char **azCols = 0; /* Names of result columns */ |
- int nRetry = 0; /* Number of retry attempts */ |
int callbackIsInit; /* True if callback data is initialized */ |
if( !sqlite3SafetyCheckOk(db) ) return SQLITE_MISUSE_BKPT; |
if( zSql==0 ) zSql = ""; |
sqlite3_mutex_enter(db->mutex); |
- sqlite3Error(db, SQLITE_OK, 0); |
- while( (rc==SQLITE_OK || (rc==SQLITE_SCHEMA && (++nRetry)<2)) && zSql[0] ){ |
+ sqlite3Error(db, SQLITE_OK); |
+ while( rc==SQLITE_OK && zSql[0] ){ |
int nCol; |
char **azVals = 0; |
pStmt = 0; |
- rc = sqlite3_prepare(db, zSql, -1, &pStmt, &zLeftover); |
+ rc = sqlite3_prepare_v2(db, zSql, -1, &pStmt, &zLeftover); |
assert( rc==SQLITE_OK || pStmt==0 ); |
if( rc!=SQLITE_OK ){ |
continue; |
@@ -97,10 +96,13 @@ int sqlite3_exec( |
} |
} |
if( xCallback(pArg, nCol, azVals, azCols) ){ |
+ /* EVIDENCE-OF: R-38229-40159 If the callback function to |
+ ** sqlite3_exec() returns non-zero, then sqlite3_exec() will |
+ ** return SQLITE_ABORT. */ |
rc = SQLITE_ABORT; |
sqlite3VdbeFinalize((Vdbe *)pStmt); |
pStmt = 0; |
- sqlite3Error(db, SQLITE_ABORT, 0); |
+ sqlite3Error(db, SQLITE_ABORT); |
goto exec_out; |
} |
} |
@@ -108,11 +110,8 @@ int sqlite3_exec( |
if( rc!=SQLITE_ROW ){ |
rc = sqlite3VdbeFinalize((Vdbe *)pStmt); |
pStmt = 0; |
- if( rc!=SQLITE_SCHEMA ){ |
- nRetry = 0; |
- zSql = zLeftover; |
- while( sqlite3Isspace(zSql[0]) ) zSql++; |
- } |
+ zSql = zLeftover; |
+ while( sqlite3Isspace(zSql[0]) ) zSql++; |
break; |
} |
} |
@@ -126,14 +125,14 @@ exec_out: |
sqlite3DbFree(db, azCols); |
rc = sqlite3ApiExit(db, rc); |
- if( rc!=SQLITE_OK && ALWAYS(rc==sqlite3_errcode(db)) && pzErrMsg ){ |
+ if( rc!=SQLITE_OK && pzErrMsg ){ |
int nErrMsg = 1 + sqlite3Strlen30(sqlite3_errmsg(db)); |
*pzErrMsg = sqlite3Malloc(nErrMsg); |
if( *pzErrMsg ){ |
memcpy(*pzErrMsg, sqlite3_errmsg(db), nErrMsg); |
}else{ |
rc = SQLITE_NOMEM; |
- sqlite3Error(db, SQLITE_NOMEM, 0); |
+ sqlite3Error(db, SQLITE_NOMEM); |
} |
}else if( pzErrMsg ){ |
*pzErrMsg = 0; |