diff options
Diffstat (limited to 'ext/pdo_sqlite/sqlite/src/legacy.c')
| -rw-r--r-- | ext/pdo_sqlite/sqlite/src/legacy.c | 23 |
1 files changed, 11 insertions, 12 deletions
diff --git a/ext/pdo_sqlite/sqlite/src/legacy.c b/ext/pdo_sqlite/sqlite/src/legacy.c index c75791e1bd..4f23ede0c2 100644 --- a/ext/pdo_sqlite/sqlite/src/legacy.c +++ b/ext/pdo_sqlite/sqlite/src/legacy.c @@ -18,7 +18,6 @@ */ #include "sqliteInt.h" -#include "os.h" #include <ctype.h> /* @@ -44,10 +43,11 @@ int sqlite3_exec( char **azCols = 0; int nRetry = 0; - int nChange = 0; int nCallback; if( zSql==0 ) return SQLITE_OK; + + sqlite3_mutex_enter(db->mutex); while( (rc==SQLITE_OK || (rc==SQLITE_SCHEMA && (++nRetry)<2)) && zSql[0] ){ int nCol; char **azVals = 0; @@ -64,11 +64,10 @@ int sqlite3_exec( continue; } - db->nChange += nChange; nCallback = 0; nCol = sqlite3_column_count(pStmt); - azCols = sqliteMalloc(2*nCol*sizeof(const char *) + 1); + azCols = sqlite3DbMallocZero(db, 2*nCol*sizeof(const char *) + 1); if( azCols==0 ){ goto exec_out; } @@ -101,9 +100,6 @@ int sqlite3_exec( if( rc!=SQLITE_ROW ){ rc = sqlite3_finalize(pStmt); pStmt = 0; - if( db->pVdbe==0 ){ - nChange = db->nChange; - } if( rc!=SQLITE_SCHEMA ){ nRetry = 0; zSql = zLeftover; @@ -113,23 +109,26 @@ int sqlite3_exec( } } - sqliteFree(azCols); + sqlite3_free(azCols); azCols = 0; } exec_out: if( pStmt ) sqlite3_finalize(pStmt); - if( azCols ) sqliteFree(azCols); + if( azCols ) sqlite3_free(azCols); - rc = sqlite3ApiExit(0, rc); + rc = sqlite3ApiExit(db, rc); if( rc!=SQLITE_OK && rc==sqlite3_errcode(db) && pzErrMsg ){ - *pzErrMsg = sqlite3_malloc(1+strlen(sqlite3_errmsg(db))); + int nErrMsg = 1 + strlen(sqlite3_errmsg(db)); + *pzErrMsg = sqlite3_malloc(nErrMsg); if( *pzErrMsg ){ - strcpy(*pzErrMsg, sqlite3_errmsg(db)); + memcpy(*pzErrMsg, sqlite3_errmsg(db), nErrMsg); } }else if( pzErrMsg ){ *pzErrMsg = 0; } + assert( (rc&db->errMask)==rc ); + sqlite3_mutex_leave(db->mutex); return rc; } |
