All the page_size pragma to change the page size on a new :memory: database,
but not a vacuumed :memory: database. Ticket #3335 (CVS 5617) FossilOrigin-Name: 226a9056783247679fcf442e10807a1f2707f463
This commit is contained in:
parent
29f55ae1e4
commit
7426f864ae
20
manifest
20
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
|
||||
|
@ -1 +1 @@
|
||||
555dad900fad874099556d44c464ea9f64687ca0
|
||||
226a9056783247679fcf442e10807a1f2707f463
|
13
src/pager.c
13
src/pager.c
@ -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;
|
||||
}
|
||||
|
||||
|
@ -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;
|
||||
|
@ -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
|
||||
|
@ -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;
|
||||
|
Loading…
x
Reference in New Issue
Block a user