1
0
mirror of https://github.com/sqlite/sqlite.git synced 2025-08-08 14:02:16 +03:00

Require that the page size be a power of 2. (CVS 2038)

FossilOrigin-Name: c33b34dbe9657b151b9ab00a6b50a255fae623f8
This commit is contained in:
drh
2004-11-02 14:24:33 +00:00
parent 687566d786
commit 06f502170e
4 changed files with 29 additions and 15 deletions

View File

@@ -1,5 +1,5 @@
C Code\sto\sauto-vacuum\sthe\sdatabase\sif\sall\sroot\spages\shappen\sto\sbe\sin\sthe\sright\splace.\sNot\sactive\sby\sdefault\sand\slargely\suntested.\s(CVS\s2037)
D 2004-11-02T12:56:41
C Require\sthat\sthe\spage\ssize\sbe\sa\spower\sof\s2.\s(CVS\s2038)
D 2004-11-02T14:24:34
F Makefile.in 9e90c685d69f09039015a6b1f3b0a48e9738c9e5
F Makefile.linux-gcc a9e5a0d309fa7c38e7c14d3ecf7690879d3a5457
F README a01693e454a00cc117967e3f9fdab2d4d52e9bc1
@@ -29,7 +29,7 @@ F sqlite3.def dbaeb20c153e1d366e8f421b55a573f5dfc00863
F sqlite3.pc.in 985b9bf34192a549d7d370e0f0b6b34a4f61369a
F src/attach.c e49d09dad9f5f9fb10b4b0c1be5a70ae4c45e689
F src/auth.c 3b81f2a42f48a62c2c9c9b0eda31a157c681edea
F src/btree.c 92713a104c11abe0826a33590f1d4147332fd9a5
F src/btree.c 057e97744f4e9ca02d4815db554fd95fdabd60d5
F src/btree.h 94dfec0a1722d33359b23e7e310f2b64ffedf029
F src/build.c bb896c5f85ab749d17ae5d730235134c12c08033
F src/date.c 34bdb0082db7ec2a83ef00063f7b44e61ee19dad
@@ -154,7 +154,7 @@ F test/null.test 642428b6a5408cc5b954b49e1b6e5025e4458b2b
F test/pager.test 394455707a079804e8a4e431d12edce831a065f0
F test/pager2.test c7e731ac56a2984a605b032ffd19b9deee820377
F test/pager3.test 16f546293bb751b8151dc17df613fca938bbec8b
F test/pagesize.test 56d11f4d6df9949d646bf87da1d6d995ed37cd78
F test/pagesize.test f4b97dc161c99f9712ffa8ebe6c0eb62c2209ee6
F test/pragma.test 66a66b7f3b273b93325c9a5794acb418f52fdcbf
F test/printf.test 92ba4c510b4fc61120ffa4a01820446ed917ae57
F test/progress.test 5ddba78cb6011fba36093973cfb3ac473b8fb96a x
@@ -252,7 +252,7 @@ F www/tclsqlite.tcl 560ecd6a916b320e59f2917317398f3d59b7cc25
F www/vdbe.tcl 59288db1ac5c0616296b26dce071c36cb611dfe9
F www/version3.tcl 092a01f5ef430d2c4acc0ae558d74c4bb89638a0
F www/whentouse.tcl fdacb0ba2d39831e8a6240d05a490026ad4c4e4c
P 5515accee348c6364cd58903a19029519797e123
R d09732475e8e7fd32816b925d21968c5
U danielk1977
Z 3ba6d76f77fb940670c05d63aad699f9
P d12481f09cbe51c7ea499bc22afec5de3af14ad4
R ce7547bdb8b99a29e1e65ec61753f1b6
U drh
Z ac7564dbdf799e2f506094e004f86e98

View File

@@ -1 +1 @@
d12481f09cbe51c7ea499bc22afec5de3af14ad4
c33b34dbe9657b151b9ab00a6b50a255fae623f8

View File

@@ -9,7 +9,7 @@
** May you share freely, never taking more than you give.
**
*************************************************************************
** $Id: btree.c,v 1.196 2004/11/02 12:56:41 danielk1977 Exp $
** $Id: btree.c,v 1.197 2004/11/02 14:24:34 drh Exp $
**
** This file implements a external (disk-based) database using BTrees.
** For a detailed discussion of BTrees, refer to
@@ -1266,6 +1266,15 @@ int sqlite3BtreeSetSafetyLevel(Btree *pBt, int level){
/*
** Change the default pages size and the number of reserved bytes per page.
**
** The page size must be a power of 2 between 512 and 65536. If the page
** size supplied does not meet this constraint then the page size is not
** changed.
**
** Page sizes are constrained to be a power of two so that the region
** of the database file used for locking (beginning at PENDING_BYTE,
** the first byte past the 1GB boundary, 0x40000000) needs to occur
** at the beginning of a page.
*/
int sqlite3BtreeSetPageSize(Btree *pBt, int pageSize, int nReserve){
if( pBt->pageSizeFixed ){
@@ -1274,7 +1283,8 @@ int sqlite3BtreeSetPageSize(Btree *pBt, int pageSize, int nReserve){
if( nReserve<0 ){
nReserve = pBt->pageSize - pBt->usableSize;
}
if( pageSize>=512 && pageSize<=SQLITE_MAX_PAGE_SIZE ){
if( pageSize>=512 && pageSize<=SQLITE_MAX_PAGE_SIZE &&
((pageSize-1)&pageSize)==0 ){
pBt->pageSize = pageSize;
pBt->psAligned = FORCE_ALIGNMENT(pageSize);
sqlite3pager_set_pagesize(pBt->pPager, pageSize);

View File

@@ -11,7 +11,7 @@
# This file implements regression tests for SQLite library.
# This file implements tests for the page_size PRAGMA.
#
# $Id: pagesize.test,v 1.4 2004/10/22 16:22:59 drh Exp $
# $Id: pagesize.test,v 1.5 2004/11/02 14:24:35 drh Exp $
set testdir [file dirname $argv0]
@@ -58,10 +58,14 @@ do_test pagesize-1.7 {
PRAGMA page_size;
}
} 8192
do_test pagesize-1.8 {
execsql {
PRAGMA page_size=1234;
PRAGMA page_size
}
} 8192
foreach PGSZ {512 515 516 751 2000 2001 2002 2003 2004 2048 3000 4096} {
foreach PGSZ {512 2048 4096 8192} {
do_test pagesize-2.$PGSZ.1 {
db close
file delete -force test.db