diff options
author | drh <> | 2024-09-13 21:47:57 +0000 |
---|---|---|
committer | drh <> | 2024-09-13 21:47:57 +0000 |
commit | 762946b236eacb00f3c545adca5a6aa5beea736f (patch) | |
tree | 925199b60db87f962d28926d77d5c770497766a9 /src | |
parent | 38b26d82e6009bf58b150311a2038e1bdc3c7065 (diff) | |
download | sqlite-762946b236eacb00f3c545adca5a6aa5beea736f.tar.gz sqlite-762946b236eacb00f3c545adca5a6aa5beea736f.zip |
Bug fix in the enhanced sqlite_dbpage for when truncating two or more
ATTACH-ed databases within the same transaction.
FossilOrigin-Name: 6aa9c8e79b440c6419e65990d9ceba8f00a6f975455138cf2aa82b113daec825
Diffstat (limited to 'src')
-rw-r--r-- | src/dbpage.c | 5 |
1 files changed, 4 insertions, 1 deletions
diff --git a/src/dbpage.c b/src/dbpage.c index 4da81f8ca..42b24f9b8 100644 --- a/src/dbpage.c +++ b/src/dbpage.c @@ -360,7 +360,7 @@ static int dbpageUpdate( iDb = 0; }else{ const char *zSchema = (const char*)sqlite3_value_text(argv[4]); - iDb = zSchema ? sqlite3FindDbName(pTab->db, zSchema) : -1; + iDb = sqlite3FindDbName(pTab->db, zSchema); if( iDb<0 ){ zErr = "no such schema"; goto update_fail; @@ -377,8 +377,11 @@ static int dbpageUpdate( ){ if( sqlite3_value_type(argv[3])==SQLITE_NULL && isInsert ){ if( iDb>=pTab->nTrunc ){ + testcase( pTab->aTrunc!=0 ); pTab->aTrunc = sqlite3_realloc(pTab->aTrunc, (iDb+1)*sizeof(Pgno)); if( pTab->aTrunc ){ + int j; + for(j=pTab->nTrunc; j<iDb; j++) pTab->aTrunc[j] = 0; pTab->nTrunc = iDb+1; }else{ return SQLITE_NOMEM; |