summaryrefslogtreecommitdiff
path: root/ext/pdo_sqlite/sqlite/src/legacy.c
diff options
context:
space:
mode:
Diffstat (limited to 'ext/pdo_sqlite/sqlite/src/legacy.c')
-rw-r--r--ext/pdo_sqlite/sqlite/src/legacy.c23
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;
}