]> git.ipfire.org Git - thirdparty/sqlite.git/commitdiff
Require that the page size be a power of 2. (CVS 2038)
authordrh <drh@noemail.net>
Tue, 2 Nov 2004 14:24:33 +0000 (14:24 +0000)
committerdrh <drh@noemail.net>
Tue, 2 Nov 2004 14:24:33 +0000 (14:24 +0000)
FossilOrigin-Name: c33b34dbe9657b151b9ab00a6b50a255fae623f8

manifest
manifest.uuid
src/btree.c
test/pagesize.test

index 9eda2d1148335954781878c23d7b19af27b8675b..489da511099ca977c034472bdffa0b41640331c9 100644 (file)
--- 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
index 2d1072716a4694f78f80e380b4a330a0c35b502e..a2008beefeb13d6c3cc1a1c3ac35523af2115be8 100644 (file)
@@ -1 +1 @@
-d12481f09cbe51c7ea499bc22afec5de3af14ad4
\ No newline at end of file
+c33b34dbe9657b151b9ab00a6b50a255fae623f8
\ No newline at end of file
index b7d804c5801e4b71642e48f4103da88347042bd0..7f250b74513cde418877b95a8ccfb68f8fc4e611 100644 (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);
index 7fe6b8b509876a0447ca4dd5777b7de640f83bf5..6d59fb0fafc0dc3a2af2b3967544a0a88c090d3d 100644 (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