]> git.ipfire.org Git - thirdparty/sqlite.git/commitdiff
All the page_size pragma to change the page size on a new :memory: database,
authordrh <drh@noemail.net>
Tue, 26 Aug 2008 21:07:26 +0000 (21:07 +0000)
committerdrh <drh@noemail.net>
Tue, 26 Aug 2008 21:07:26 +0000 (21:07 +0000)
but not a vacuumed :memory: database.  Ticket #3335 (CVS 5617)

FossilOrigin-Name: 226a9056783247679fcf442e10807a1f2707f463

manifest
manifest.uuid
src/pager.c
src/vacuum.c
test/pagesize.test
test/vacuum3.test

index 7ec632c3c2297a9debb02b8cf8ac90d2d94d3c97..54e367be3271f4509993889b628aefd3ded5c9a0 100644 (file)
--- a/manifest
+++ b/manifest
@@ -1,5 +1,5 @@
-C Disable\ssome\svery\sexpensive\sasserts\sin\spcache.c\sthat\sare\stoo\sslow\sfor\sall.test.\s(CVS\s5616)
-D 2008-08-26T19:08:00
+C All\sthe\spage_size\spragma\sto\schange\sthe\spage\ssize\son\sa\snew\s:memory:\sdatabase,\nbut\snot\sa\svacuumed\s:memory:\sdatabase.\s\sTicket\s#3335\s(CVS\s5617)
+D 2008-08-26T21:07:27
 F Makefile.arm-wince-mingw32ce-gcc fcd5e9cd67fe88836360bb4f9ef4cb7f8e2fb5a0
 F Makefile.in 689e14735f862a5553bceef206d8c13e29504e44
 F Makefile.linux-gcc d53183f4aa6a9192d249731c90dbdffbd2c68654
@@ -135,7 +135,7 @@ F src/os_common.h 24525d8b7bce66c374dfc1810a6c9043f3359b60
 F src/os_os2.c e391fc95adc744bbdcefd4d11e3066998185a0a0
 F src/os_unix.c 4665cef7639dd937893c3ea076f0e8a8f215bb32
 F src/os_win.c aefe9ee26430678a19a058a874e4e2bd91398142
-F src/pager.c 9dfaca6cd443228326b1837fbb712b9cbde9a0e0
+F src/pager.c 66836244eac6b1a46e8c26e3dd3c143031bf28e5
 F src/pager.h 3b9c138d2e744b9d6e61d4c2742301e3bf464864
 F src/parse.y d0f76d2cb8d6883d5600dc20beb961a6022b94b8
 F src/pcache.c 006714ad89db3c488526246e6ed6b130e457f01b
@@ -185,7 +185,7 @@ F src/trigger.c 649940b5bf5838a33721fb72372e7c9d1faf56a9
 F src/update.c f2cf6f00d542956bd49ba4b9815c2900d9225bf2
 F src/utf.c c63e6f69082f85c19ab88d62dedaf91d71ac1a50
 F src/util.c afe659ccc05d1f8af9e8631dabfec3ee3a7144af
-F src/vacuum.c a5b10ae21ffbb73c79b7fa17e2ff40dc8ff33440
+F src/vacuum.c fd77433d0c26d3ff1eb96eab017a1787ac5aa642
 F src/vdbe.c adcc179a31d71466b7b4f20ab77555e1e137bfe5
 F src/vdbe.h 41c99aaad9167c1b5431993db446de74b2f71fc3
 F src/vdbeInt.h b48c74d86a9fb62b707a3186ccca76bb32f1c6be
@@ -444,7 +444,7 @@ F test/pager.test 1e1832795e9e07a359c959ffdddcf7275a88f54c
 F test/pager2.test 070983b89a308adaba525a2f9c1ba0592c72fa3d
 F test/pager3.test 2323bf27fd5bd887b580247e5bce500ceee994b4
 F test/pageropt.test 3ee6578891baaca967f0bd349e4abfa736229e1a
-F test/pagesize.test e0a8b3fe80f8b8e808d94a00734c7a18c76c407e
+F test/pagesize.test 0d9ff3fedfce6e5ffe8fa7aca9b6d3433a2e843b
 F test/permutations.test cd043a0e8eb1487aa8486c5d9b75ad7a88128041
 F test/pragma.test b55931bbd5dd543e56fd942dbf4b7439619b09a6
 F test/pragma2.test 5364893491b9231dd170e3459bfc2e2342658b47
@@ -574,7 +574,7 @@ F test/update.test 8bc86fd7ef1a00014f76dc6a6a7c974df4aef172
 F test/utf16align.test 7360e84472095518c56746f76b1f9d4dce99fb4d
 F test/vacuum.test 0bc75ee74ab9c69322d6563aa2287375697e630b
 F test/vacuum2.test e7c5f5bf5e1f2266ca668d420393820cf501fdfc
-F test/vacuum3.test 54a7152f004fb1647702c2f7be9a7e7abfafd70e
+F test/vacuum3.test f39ad1428347c5808cd2da7578c470f186a4d0ce
 F test/varint.test ab7b110089a08b9926ed7390e7e97bdefeb74102
 F test/veryquick.test e265401afefa994cdf2fe4b6f286b1e87c2f9b9d
 F test/view.test 7fba28a47f76541f6aea9542f62f3412e3519bad
@@ -624,7 +624,7 @@ F tool/speedtest16.c c8a9c793df96db7e4933f0852abb7a03d48f2e81
 F tool/speedtest2.tcl ee2149167303ba8e95af97873c575c3e0fab58ff
 F tool/speedtest8.c 1dbced29de5f59ba2ebf877edcadf171540374d1
 F tool/speedtest8inst1.c 293327bc76823f473684d589a8160bde1f52c14e
-P 9e511e161bcb077450d31fca5dd20c2557f103b3
-R 1ce47647904dad33d524c97e4b2f240b
-U danielk1977
-Z 36ed8c7bfd4a032646271d9bbcb5d47b
+P 555dad900fad874099556d44c464ea9f64687ca0
+R 13266d9013275d3da810529c8b3c4107
+U drh
+Z 5391d7f9c881bbaeba1d5a1fec437229
index 607e867da1ab3bc7cf7e6f0f84d575305484bb70..ec18d1d2019ec02a9783b69ba7a69651f44818bf 100644 (file)
@@ -1 +1 @@
-555dad900fad874099556d44c464ea9f64687ca0
\ No newline at end of file
+226a9056783247679fcf442e10807a1f2707f463
\ No newline at end of file
index 69c3ee7c36b1b31fe9a88188596cb8b4b370805e..ec4a9be5598d8c23614b2afae1467806460813f6 100644 (file)
@@ -18,7 +18,7 @@
 ** file simultaneously, or one process from reading the database while
 ** another is writing.
 **
-** @(#) $Id: pager.c,v 1.480 2008/08/26 18:05:48 danielk1977 Exp $
+** @(#) $Id: pager.c,v 1.481 2008/08/26 21:07:27 drh Exp $
 */
 #ifndef SQLITE_OMIT_DISKIO
 #include "sqliteInt.h"
@@ -1945,7 +1945,8 @@ int sqlite3PagerSetPagesize(Pager *pPager, u16 *pPageSize){
   u16 pageSize = *pPageSize;
   assert( pageSize==0 || (pageSize>=512 && pageSize<=SQLITE_MAX_PAGE_SIZE) );
   if( pageSize && pageSize!=pPager->pageSize 
-   && !pPager->memDb && sqlite3PcacheRefCount(pPager->pPCache)==0 
+   && (pPager->memDb==0 || pPager->dbSize==0)
+   && sqlite3PcacheRefCount(pPager->pPCache)==0 
   ){
     char *pNew = (char *)sqlite3PageMalloc(pageSize);
     if( !pNew ){
@@ -1953,7 +1954,7 @@ int sqlite3PagerSetPagesize(Pager *pPager, u16 *pPageSize){
     }else{
       pager_reset(pPager);
       pPager->pageSize = pageSize;
-      setSectorSize(pPager);
+      if( !pPager->memDb ) setSectorSize(pPager);
       sqlite3PageFree(pPager->pTmpSpace);
       pPager->pTmpSpace = pNew;
       sqlite3PcacheSetPageSize(pPager->pPCache, pageSize);
@@ -3572,7 +3573,11 @@ static int pager_incr_changecounter(Pager *pPager, int isDirect){
 */
 int sqlite3PagerSync(Pager *pPager){
   int rc;
-  rc = sqlite3OsSync(pPager->fd, pPager->sync_flags);
+  if( MEMDB ){
+    rc = SQLITE_OK;
+  }else{
+    rc = sqlite3OsSync(pPager->fd, pPager->sync_flags);
+  }
   return rc;
 }
 
index e2fb42e84d50c254ed3b738bf548062c3ef3a4f1..5157c97431397f7fe9b391082ae459a0c9ee8217 100644 (file)
@@ -14,7 +14,7 @@
 ** Most of the code in this file may be omitted by defining the
 ** SQLITE_OMIT_VACUUM macro.
 **
-** $Id: vacuum.c,v 1.82 2008/08/23 16:17:56 danielk1977 Exp $
+** $Id: vacuum.c,v 1.83 2008/08/26 21:07:27 drh Exp $
 */
 #include "sqliteInt.h"
 #include "vdbeInt.h"
@@ -81,12 +81,14 @@ void sqlite3Vacuum(Parse *pParse){
 int sqlite3RunVacuum(char **pzErrMsg, sqlite3 *db){
   int rc = SQLITE_OK;     /* Return code from service routines */
   Btree *pMain;           /* The database being vacuumed */
+  Pager *pMainPager;      /* Pager for database being vacuumed */
   Btree *pTemp;           /* The temporary database we vacuum into */
   char *zSql = 0;         /* SQL statements */
   int saved_flags;        /* Saved value of the db->flags */
   int saved_nChange;      /* Saved value of db->nChange */
   int saved_nTotalChange; /* Saved value of db->nTotalChange */
   Db *pDb = 0;            /* Database to detach at end of vacuum */
+  int isMemDb;            /* True is vacuuming a :memory: database */
   int nRes;
 
   /* Save the current value of the write-schema flag before setting it. */
@@ -101,6 +103,8 @@ int sqlite3RunVacuum(char **pzErrMsg, sqlite3 *db){
     goto end_of_vacuum;
   }
   pMain = db->aDb[0].pBt;
+  pMainPager = sqlite3BtreePager(pMain);
+  isMemDb = sqlite3PagerFile(pMainPager)->pMethods==0;
 
   /* Attach the temporary database as 'vacuum_db'. The synchronous pragma
   ** can be set to 'off' for this file, as it is not recovered if a crash
@@ -137,7 +141,7 @@ int sqlite3RunVacuum(char **pzErrMsg, sqlite3 *db){
 #endif
 
   if( sqlite3BtreeSetPageSize(pTemp, sqlite3BtreeGetPageSize(pMain), nRes)
-   || sqlite3BtreeSetPageSize(pTemp, db->nextPagesize, nRes)
+   || (!isMemDb && sqlite3BtreeSetPageSize(pTemp, db->nextPagesize, nRes))
    || db->mallocFailed 
   ){
     rc = SQLITE_NOMEM;
index a598b9f860d4f7d7cec50d5a5b64dc6a85949374..b676df94922cc1da1818466eb8d969450bf8a8e8 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.12 2007/04/06 21:42:22 drh Exp $
+# $Id: pagesize.test,v 1.13 2008/08/26 21:07:27 drh Exp $
 
 
 set testdir [file dirname $argv0]
@@ -79,12 +79,23 @@ foreach PGSZ {512 2048 4096 8192} {
   if {[info exists SQLITE_MAX_PAGE_SIZE]
            && $SQLITE_MAX_PAGE_SIZE<$PGSZ} continue
   ifcapable memorydb {
-    do_test pagesize-2.$PGSZ.0 {
+    do_test pagesize-2.$PGSZ.0.1 {
       db close
       sqlite3 db :memory:
       execsql "PRAGMA page_size=$PGSZ;"
       execsql {PRAGMA page_size}
-    } 1024
+    } $PGSZ
+    do_test pagesize-2.$PGSZ.0.2 {
+      execsql {CREATE TABLE t1(x UNIQUE, y UNIQUE, z UNIQUE)}
+      execsql {PRAGMA page_size}
+    } $PGSZ
+    do_test pagesize-2.$PGSZ.0.3 {
+      execsql {
+        INSERT INTO t1 VALUES(1,2,3);
+        INSERT INTO t1 VALUES(2,3,4);
+        SELECT * FROM t1;
+      }
+    } {1 2 3 2 3 4}
   }
   do_test pagesize-2.$PGSZ.1 {
     db close
index eac3f0b5d75468e931bc56306fd56b53db2f6be1..f6b75d7070fdda7da384b9f14909d12f536a297d 100644 (file)
@@ -12,7 +12,7 @@
 # focus of this file is changing the database page size using a 
 # VACUUM statement.
 #
-# $Id: vacuum3.test,v 1.8 2008/08/23 16:17:56 danielk1977 Exp $
+# $Id: vacuum3.test,v 1.9 2008/08/26 21:07:27 drh Exp $
 
 set testdir [file dirname $argv0]
 source $testdir/tester.tcl
@@ -235,7 +235,23 @@ do_test vacuum3-4.6 {
   execsql { SELECT * FROM abc } db2
 } {1 2 3 4 5 6}
 
+# Unable to change the page-size of an in-memory using vacuum.
 db2 close
+sqlite3 db2 :memory:
+do_test vacuum3-5.1 {
+  db2 eval {
+    CREATE TABLE t1(x);
+    INSERT INTO t1 VALUES(1234);
+    PRAGMA page_size=4096;
+    VACUUM;
+    SELECT * FROM t1;
+  }
+} {1234}
+do_test vacuum3-5.2 {
+  db2 eval {
+    PRAGMA page_size
+  }
+} {1024}
 
 set create_database_sql {
   BEGIN;