diff options
author | drh <drh@noemail.net> | 2020-05-26 20:31:17 +0000 |
---|---|---|
committer | drh <drh@noemail.net> | 2020-05-26 20:31:17 +0000 |
commit | ed505ce3e47b971ced26b585506d0efa5efffc85 (patch) | |
tree | a98f717663b4375aa260737f20a8560dc9d21447 /src/vdbeaux.c | |
parent | 47937cfd8defac2d926a863dabb3ec0232ca0eb5 (diff) | |
download | sqlite-ed505ce3e47b971ced26b585506d0efa5efffc85.tar.gz sqlite-ed505ce3e47b971ced26b585506d0efa5efffc85.zip |
Performance optimization in the transfer of error messages from statements
to connections.
FossilOrigin-Name: 0e898f4fed1c851cb90f940175110e632a20668a285d39f5f94f7358c3064882
Diffstat (limited to 'src/vdbeaux.c')
-rw-r--r-- | src/vdbeaux.c | 12 |
1 files changed, 9 insertions, 3 deletions
diff --git a/src/vdbeaux.c b/src/vdbeaux.c index 38dc7cd86..af4fa3789 100644 --- a/src/vdbeaux.c +++ b/src/vdbeaux.c @@ -3302,7 +3302,11 @@ int sqlite3VdbeReset(Vdbe *p){ */ if( p->pc>=0 ){ vdbeInvokeSqllog(p); - sqlite3VdbeTransferError(p); + if( db->pErr || p->zErrMsg ){ + sqlite3VdbeTransferError(p); + }else{ + db->errCode = p->rc; + } if( p->runOnlyOnce ) p->expired = 1; }else if( p->rc && p->expired ){ /* The expired flag was set on the VDBE before the first call @@ -3322,8 +3326,10 @@ int sqlite3VdbeReset(Vdbe *p){ for(i=0; i<p->nMem; i++) assert( p->aMem[i].flags==MEM_Undefined ); } #endif - sqlite3DbFree(db, p->zErrMsg); - p->zErrMsg = 0; + if( p->zErrMsg ){ + sqlite3DbFree(db, p->zErrMsg); + p->zErrMsg = 0; + } p->pResultSet = 0; #ifdef SQLITE_DEBUG p->nWrite = 0; |