aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authordrh <>2024-10-02 16:55:27 +0000
committerdrh <>2024-10-02 16:55:27 +0000
commit3b3f230d9511162e7d8ab00253fb9f515ec1b8fe (patch)
tree950c9704e1aa908303f3189156445f52cf0e9f13 /src
parent92e71573ce9a2895c5948a2dc304c5be3cd3f986 (diff)
downloadsqlite-3b3f230d9511162e7d8ab00253fb9f515ec1b8fe.tar.gz
sqlite-3b3f230d9511162e7d8ab00253fb9f515ec1b8fe.zip
Adjust the new truncation behavior of sqlite_dbpage(N,null) such that it causes
the database to be truncated to N-1 pages. This makes more since. An error is raised if N is less than 2. FossilOrigin-Name: 7d5ff86ef7386f4f7f6a956dc0de607e61040d335c9f98d1f71e76a39f4f5e03
Diffstat (limited to 'src')
-rw-r--r--src/dbpage.c5
1 files changed, 4 insertions, 1 deletions
diff --git a/src/dbpage.c b/src/dbpage.c
index 42b24f9b8..136c8b0b3 100644
--- a/src/dbpage.c
+++ b/src/dbpage.c
@@ -375,7 +375,9 @@ static int dbpageUpdate(
if( sqlite3_value_type(argv[3])!=SQLITE_BLOB
|| sqlite3_value_bytes(argv[3])!=szPage
){
- if( sqlite3_value_type(argv[3])==SQLITE_NULL && isInsert ){
+ if( sqlite3_value_type(argv[3])==SQLITE_NULL && isInsert && pgno>1 ){
+ /* "INSERT INTO dbpage($PGNO,NULL)" causes page number $PGNO and
+ ** all subsequent pages to be deleted. */
if( iDb>=pTab->nTrunc ){
testcase( pTab->aTrunc!=0 );
pTab->aTrunc = sqlite3_realloc(pTab->aTrunc, (iDb+1)*sizeof(Pgno));
@@ -387,6 +389,7 @@ static int dbpageUpdate(
return SQLITE_NOMEM;
}
}
+ pgno--;
pTab->aTrunc[iDb] = pgno;
}else{
zErr = "bad page value";