diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/vdbe.c | 14 | ||||
-rw-r--r-- | src/vdbeapi.c | 8 |
2 files changed, 15 insertions, 7 deletions
diff --git a/src/vdbe.c b/src/vdbe.c index c1d3c5173..7a875634e 100644 --- a/src/vdbe.c +++ b/src/vdbe.c @@ -43,7 +43,7 @@ ** in this file for details. If in doubt, do not deviate from existing ** commenting and indentation practices when changing or adding code. ** -** $Id: vdbe.c,v 1.762 2008/07/23 18:17:32 drh Exp $ +** $Id: vdbe.c,v 1.763 2008/07/23 21:07:25 drh Exp $ */ #include "sqliteInt.h" #include <ctype.h> @@ -4621,7 +4621,9 @@ case OP_VOpen: { assert(pVtab && pModule); if( sqlite3SafetyOff(db) ) goto abort_due_to_misuse; rc = pModule->xOpen(pVtab, &pVtabCursor); - sqlite3VtabTransferError(db, rc, pVtab); + sqlite3_free(p->zErrMsg); + p->zErrMsg = pVtab->zErrMsg; + pVtab->zErrMsg = 0; if( sqlite3SafetyOn(db) ) goto abort_due_to_misuse; if( SQLITE_OK==rc ){ /* Initialize sqlite3_vtab_cursor base class */ @@ -4851,8 +4853,10 @@ case OP_VRename: { if( sqlite3SafetyOff(db) ) goto abort_due_to_misuse; sqlite3VtabLock(pVtab); rc = pVtab->pModule->xRename(pVtab, pName->z); + sqlite3_free(p->zErrMsg); + p->zErrMsg = pVtab->zErrMsg; + pVtab->zErrMsg = 0; sqlite3VtabUnlock(db, pVtab); - sqlite3VtabTransferError(db, rc, pVtab); if( sqlite3SafetyOn(db) ) goto abort_due_to_misuse; break; @@ -4904,8 +4908,10 @@ case OP_VUpdate: { if( sqlite3SafetyOff(db) ) goto abort_due_to_misuse; sqlite3VtabLock(pVtab); rc = pModule->xUpdate(pVtab, nArg, apArg, &rowid); + sqlite3_free(p->zErrMsg); + p->zErrMsg = pVtab->zErrMsg; + pVtab->zErrMsg = 0; sqlite3VtabUnlock(db, pVtab); - sqlite3VtabTransferError(db, rc, pVtab); if( sqlite3SafetyOn(db) ) goto abort_due_to_misuse; if( pOp->p1 && rc==SQLITE_OK ){ assert( nArg>1 && apArg[0] && (apArg[0]->flags&MEM_Null) ); diff --git a/src/vdbeapi.c b/src/vdbeapi.c index fea540f43..1539c5bd7 100644 --- a/src/vdbeapi.c +++ b/src/vdbeapi.c @@ -13,7 +13,7 @@ ** This file contains code use to implement APIs that are part of the ** VDBE. ** -** $Id: vdbeapi.c,v 1.134 2008/06/19 02:52:25 drh Exp $ +** $Id: vdbeapi.c,v 1.135 2008/07/23 21:07:25 drh Exp $ */ #include "sqliteInt.h" #include "vdbeInt.h" @@ -497,14 +497,16 @@ static int sqlite3Step(Vdbe *p){ } #endif - sqlite3Error(p->db, rc, 0); + db->errCode = rc; + /*sqlite3Error(p->db, rc, 0);*/ p->rc = sqlite3ApiExit(p->db, p->rc); end_of_step: assert( (rc&0xff)==rc ); if( p->zSql && (rc&0xff)<SQLITE_ROW ){ /* This behavior occurs if sqlite3_prepare_v2() was used to build ** the prepared statement. Return error codes directly */ - sqlite3Error(p->db, p->rc, 0); + p->db->errCode = p->rc; + /* sqlite3Error(p->db, p->rc, 0); */ return p->rc; }else{ /* This is for legacy sqlite3_prepare() builds and when the code |