aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authordrh <drh@noemail.net>2014-08-19 20:27:40 +0000
committerdrh <drh@noemail.net>2014-08-19 20:27:40 +0000
commit2c7946a485b6e19072506e40203af4cc10b0848d (patch)
tree5bab5952949c545611ba9c99c840460e45dd7585 /src
parent4b2590e44b422eb0445220624c2438d74d17ed06 (diff)
downloadsqlite-2c7946a485b6e19072506e40203af4cc10b0848d.tar.gz
sqlite-2c7946a485b6e19072506e40203af4cc10b0848d.zip
Make sure the sqlite3_trace() callback is invoked, even if the prepared
statement was marked "expired" before it ever entered sqlite3_step(). Ticket [11d5aa455e0d98f3c1e6a08]. FossilOrigin-Name: 0d4d3df4bc5e75ce1543b5539a1e9e279d2a062f
Diffstat (limited to 'src')
-rw-r--r--src/vdbeapi.c8
1 files changed, 5 insertions, 3 deletions
diff --git a/src/vdbeapi.c b/src/vdbeapi.c
index 5e5bb8136..568f67296 100644
--- a/src/vdbeapi.c
+++ b/src/vdbeapi.c
@@ -513,10 +513,12 @@ int sqlite3_step(sqlite3_stmt *pStmt){
sqlite3_mutex_enter(db->mutex);
v->doingRerun = 0;
while( (rc = sqlite3Step(v))==SQLITE_SCHEMA
- && cnt++ < SQLITE_MAX_SCHEMA_RETRY
- && (rc2 = rc = sqlite3Reprepare(v))==SQLITE_OK ){
+ && cnt++ < SQLITE_MAX_SCHEMA_RETRY ){
+ int savedPc = v->pc;
+ rc2 = rc = sqlite3Reprepare(v);
+ if( rc!=SQLITE_OK) break;
sqlite3_reset(pStmt);
- v->doingRerun = 1;
+ v->doingRerun = savedPc>=0;
assert( v->expired==0 );
}
if( rc2!=SQLITE_OK ){