aboutsummaryrefslogtreecommitdiff
path: root/src/vdbeaux.c
diff options
context:
space:
mode:
authordrh <drh@noemail.net>2020-05-26 20:31:17 +0000
committerdrh <drh@noemail.net>2020-05-26 20:31:17 +0000
commited505ce3e47b971ced26b585506d0efa5efffc85 (patch)
treea98f717663b4375aa260737f20a8560dc9d21447 /src/vdbeaux.c
parent47937cfd8defac2d926a863dabb3ec0232ca0eb5 (diff)
downloadsqlite-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.c12
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;