diff options
author | drh <> | 2024-10-02 16:55:27 +0000 |
---|---|---|
committer | drh <> | 2024-10-02 16:55:27 +0000 |
commit | 3b3f230d9511162e7d8ab00253fb9f515ec1b8fe (patch) | |
tree | 950c9704e1aa908303f3189156445f52cf0e9f13 /src | |
parent | 92e71573ce9a2895c5948a2dc304c5be3cd3f986 (diff) | |
download | sqlite-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.c | 5 |
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"; |