diff --git a/manifest b/manifest index 9eda2d1148..489da51109 100644 --- a/manifest +++ b/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 diff --git a/manifest.uuid b/manifest.uuid index 2d1072716a..a2008beefe 100644 --- a/manifest.uuid +++ b/manifest.uuid @@ -1 +1 @@ -d12481f09cbe51c7ea499bc22afec5de3af14ad4 \ No newline at end of file +c33b34dbe9657b151b9ab00a6b50a255fae623f8 \ No newline at end of file diff --git a/src/btree.c b/src/btree.c index b7d804c580..7f250b7451 100644 --- a/src/btree.c +++ b/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); diff --git a/test/pagesize.test b/test/pagesize.test index 7fe6b8b509..6d59fb0faf 100644 --- a/test/pagesize.test +++ b/test/pagesize.test @@ -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