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:
16
manifest
16
manifest
@@ -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
|
||||
|
@@ -1 +1 @@
|
||||
d12481f09cbe51c7ea499bc22afec5de3af14ad4
|
||||
c33b34dbe9657b151b9ab00a6b50a255fae623f8
|
14
src/btree.c
14
src/btree.c
@@ -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);
|
||||
|
@@ -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
|
||||
|
Reference in New Issue
Block a user