mirror of
https://github.com/sqlite/sqlite.git
synced 2025-08-08 14:02:16 +03:00
Do not allow the pagesize of :memory: databases to be changed. Silently
ignore PRAGMA page_size=N requests for :memory: databases. Ticket #1144 and #1252. (CVS 2466) FossilOrigin-Name: f29a1d882623d8ff14f35a302aef63a16388bcb3
This commit is contained in:
18
manifest
18
manifest
@@ -1,5 +1,5 @@
|
|||||||
C Comment\schanges\sin\svdbeapi.c\s(CVS\s2465)
|
C Do\snot\sallow\sthe\spagesize\sof\s:memory:\sdatabases\sto\sbe\schanged.\s\sSilently\nignore\sPRAGMA\spage_size=N\srequests\sfor\s:memory:\sdatabases.\nTicket\s#1144\sand\s#1252.\s(CVS\s2466)
|
||||||
D 2005-05-20T19:36:01
|
D 2005-05-20T20:01:56
|
||||||
F Makefile.in 5c00d0037104de2a50ac7647a5f12769795957a3
|
F Makefile.in 5c00d0037104de2a50ac7647a5f12769795957a3
|
||||||
F Makefile.linux-gcc 06be33b2a9ad4f005a5f42b22c4a19dab3cbb5c7
|
F Makefile.linux-gcc 06be33b2a9ad4f005a5f42b22c4a19dab3cbb5c7
|
||||||
F README 9c4e2d6706bdcc3efdd773ce752a8cdab4f90028
|
F README 9c4e2d6706bdcc3efdd773ce752a8cdab4f90028
|
||||||
@@ -30,7 +30,7 @@ F sqlite3.pc.in 985b9bf34192a549d7d370e0f0b6b34a4f61369a
|
|||||||
F src/alter.c 9570af388bc99471ea6e1258817fbf06e3120030
|
F src/alter.c 9570af388bc99471ea6e1258817fbf06e3120030
|
||||||
F src/attach.c 3615dbe960cbee4aa5ea300b8a213dad36527b0f
|
F src/attach.c 3615dbe960cbee4aa5ea300b8a213dad36527b0f
|
||||||
F src/auth.c 18c5a0befe20f3a58a41e3ddd78f372faeeefe1f
|
F src/auth.c 18c5a0befe20f3a58a41e3ddd78f372faeeefe1f
|
||||||
F src/btree.c 0d62614c54516222e639b30ab1cad37222d2dd70
|
F src/btree.c 85ee452bf378f297054aded9ea6eaed846fa4855
|
||||||
F src/btree.h 41a71ce027db9ddee72cb43df2316bbe3a1d92af
|
F src/btree.h 41a71ce027db9ddee72cb43df2316bbe3a1d92af
|
||||||
F src/build.c 61a0beac459a495f05622132559926d88757e20c
|
F src/build.c 61a0beac459a495f05622132559926d88757e20c
|
||||||
F src/date.c 2134ef4388256e8247405178df8a61bd60dc180a
|
F src/date.c 2134ef4388256e8247405178df8a61bd60dc180a
|
||||||
@@ -52,8 +52,8 @@ F src/os_unix.c cb8a39901b8eb920372c2e42f7ea9ab40f2e47ae
|
|||||||
F src/os_unix.h 39a393252e69e72b06715c9958df05ddbc4aa971
|
F src/os_unix.h 39a393252e69e72b06715c9958df05ddbc4aa971
|
||||||
F src/os_win.c 2bbbe6fbb010763c3fa79d5e951afca9b138c6b5
|
F src/os_win.c 2bbbe6fbb010763c3fa79d5e951afca9b138c6b5
|
||||||
F src/os_win.h 41a946bea10f61c158ce8645e7646b29d44f122b
|
F src/os_win.h 41a946bea10f61c158ce8645e7646b29d44f122b
|
||||||
F src/pager.c a48f537db37de0433fd1b527e64d08c1a5bcce19
|
F src/pager.c d16a1499385e630396321e48fdebb8eb9f54f362
|
||||||
F src/pager.h 94bb42704ae861036a3bf3bbbe04dd3f0c6a690d
|
F src/pager.h 0d9153d6269d60d04af3dd84a0cc0a96253cf4a4
|
||||||
F src/parse.y 3e314b3a96b199b0501ed426f2cee3392ffce806
|
F src/parse.y 3e314b3a96b199b0501ed426f2cee3392ffce806
|
||||||
F src/pragma.c 93d447670b367e7aec9191ed952fe04f6a052eb5
|
F src/pragma.c 93d447670b367e7aec9191ed952fe04f6a052eb5
|
||||||
F src/printf.c 3d20b21cfecadacecac3fb7274e746cb81d3d357
|
F src/printf.c 3d20b21cfecadacecac3fb7274e746cb81d3d357
|
||||||
@@ -170,7 +170,7 @@ F test/null.test 69c62daf1630bf54c87bbc7ef2e22012e58d6da8
|
|||||||
F test/pager.test 1579e8f07291ae8e24db62ffade5c101c3e76597
|
F test/pager.test 1579e8f07291ae8e24db62ffade5c101c3e76597
|
||||||
F test/pager2.test 49c0f57c7da0b060f0486b85fdd074025caa694e
|
F test/pager2.test 49c0f57c7da0b060f0486b85fdd074025caa694e
|
||||||
F test/pager3.test 2323bf27fd5bd887b580247e5bce500ceee994b4
|
F test/pager3.test 2323bf27fd5bd887b580247e5bce500ceee994b4
|
||||||
F test/pagesize.test 1b826d1608fd86d2303aa895b5586052ad07eba1
|
F test/pagesize.test cbc6a312b6f6c0f02619b189985df2a14164b690
|
||||||
F test/pragma.test effcf2f0dea35223cbaa6bf40c47d0796ba39e40
|
F test/pragma.test effcf2f0dea35223cbaa6bf40c47d0796ba39e40
|
||||||
F test/printf.test 92ba4c510b4fc61120ffa4a01820446ed917ae57
|
F test/printf.test 92ba4c510b4fc61120ffa4a01820446ed917ae57
|
||||||
F test/progress.test 16496001da445e6534afb94562c286708316d82f x
|
F test/progress.test 16496001da445e6534afb94562c286708316d82f x
|
||||||
@@ -279,7 +279,7 @@ F www/tclsqlite.tcl 425be741b8ae664f55cb1ef2371aab0a75109cf9
|
|||||||
F www/vdbe.tcl 87a31ace769f20d3627a64fa1fade7fed47b90d0
|
F www/vdbe.tcl 87a31ace769f20d3627a64fa1fade7fed47b90d0
|
||||||
F www/version3.tcl a99cf5f6d8bd4d5537584a2b342f0fb9fa601d8b
|
F www/version3.tcl a99cf5f6d8bd4d5537584a2b342f0fb9fa601d8b
|
||||||
F www/whentouse.tcl 528299b8316726dbcc5548e9aa0648c8b1bd055b
|
F www/whentouse.tcl 528299b8316726dbcc5548e9aa0648c8b1bd055b
|
||||||
P f5d9a8061a6d650f207669b121243abb8dd28be2
|
P ab7805fb2fb29abc1311e23a93ba03883db7b30e
|
||||||
R e99cd950c0217d760e240a513f735555
|
R 02045e8d824498610299441d325bab9a
|
||||||
U drh
|
U drh
|
||||||
Z a74284c22e055fdde82da0a235079120
|
Z 27e3fe2bf2728abf9eb44db83a10e0ac
|
||||||
|
@@ -1 +1 @@
|
|||||||
ab7805fb2fb29abc1311e23a93ba03883db7b30e
|
f29a1d882623d8ff14f35a302aef63a16388bcb3
|
@@ -9,7 +9,7 @@
|
|||||||
** May you share freely, never taking more than you give.
|
** May you share freely, never taking more than you give.
|
||||||
**
|
**
|
||||||
*************************************************************************
|
*************************************************************************
|
||||||
** $Id: btree.c,v 1.259 2005/05/05 18:14:14 drh Exp $
|
** $Id: btree.c,v 1.260 2005/05/20 20:01:56 drh Exp $
|
||||||
**
|
**
|
||||||
** This file implements a external (disk-based) database using BTrees.
|
** This file implements a external (disk-based) database using BTrees.
|
||||||
** For a detailed discussion of BTrees, refer to
|
** For a detailed discussion of BTrees, refer to
|
||||||
@@ -1362,8 +1362,7 @@ int sqlite3BtreeSetPageSize(Btree *pBt, int pageSize, int nReserve){
|
|||||||
if( pageSize>=512 && pageSize<=SQLITE_MAX_PAGE_SIZE &&
|
if( pageSize>=512 && pageSize<=SQLITE_MAX_PAGE_SIZE &&
|
||||||
((pageSize-1)&pageSize)==0 ){
|
((pageSize-1)&pageSize)==0 ){
|
||||||
assert( (pageSize & 7)==0 );
|
assert( (pageSize & 7)==0 );
|
||||||
pBt->pageSize = pageSize;
|
pBt->pageSize = sqlite3pager_set_pagesize(pBt->pPager, pageSize);
|
||||||
sqlite3pager_set_pagesize(pBt->pPager, pageSize);
|
|
||||||
}
|
}
|
||||||
pBt->usableSize = pBt->pageSize - nReserve;
|
pBt->usableSize = pBt->pageSize - nReserve;
|
||||||
return SQLITE_OK;
|
return SQLITE_OK;
|
||||||
|
26
src/pager.c
26
src/pager.c
@@ -18,7 +18,7 @@
|
|||||||
** file simultaneously, or one process from reading the database while
|
** file simultaneously, or one process from reading the database while
|
||||||
** another is writing.
|
** another is writing.
|
||||||
**
|
**
|
||||||
** @(#) $Id: pager.c,v 1.202 2005/04/28 17:18:48 drh Exp $
|
** @(#) $Id: pager.c,v 1.203 2005/05/20 20:01:56 drh Exp $
|
||||||
*/
|
*/
|
||||||
#ifndef SQLITE_OMIT_DISKIO
|
#ifndef SQLITE_OMIT_DISKIO
|
||||||
#include "sqliteInt.h"
|
#include "sqliteInt.h"
|
||||||
@@ -172,7 +172,7 @@ struct PgHdr {
|
|||||||
#ifdef SQLITE_CHECK_PAGES
|
#ifdef SQLITE_CHECK_PAGES
|
||||||
u32 pageHash;
|
u32 pageHash;
|
||||||
#endif
|
#endif
|
||||||
/* pPager->psAligned bytes of page data follow this header */
|
/* pPager->pageSize bytes of page data follow this header */
|
||||||
/* Pager.nExtra bytes of local data follow the page data */
|
/* Pager.nExtra bytes of local data follow the page data */
|
||||||
};
|
};
|
||||||
|
|
||||||
@@ -208,9 +208,9 @@ struct PgHistory {
|
|||||||
*/
|
*/
|
||||||
#define PGHDR_TO_DATA(P) ((void*)(&(P)[1]))
|
#define PGHDR_TO_DATA(P) ((void*)(&(P)[1]))
|
||||||
#define DATA_TO_PGHDR(D) (&((PgHdr*)(D))[-1])
|
#define DATA_TO_PGHDR(D) (&((PgHdr*)(D))[-1])
|
||||||
#define PGHDR_TO_EXTRA(G,P) ((void*)&((char*)(&(G)[1]))[(P)->psAligned])
|
#define PGHDR_TO_EXTRA(G,P) ((void*)&((char*)(&(G)[1]))[(P)->pageSize])
|
||||||
#define PGHDR_TO_HIST(P,PGR) \
|
#define PGHDR_TO_HIST(P,PGR) \
|
||||||
((PgHistory*)&((char*)(&(P)[1]))[(PGR)->psAligned+(PGR)->nExtra])
|
((PgHistory*)&((char*)(&(P)[1]))[(PGR)->pageSize+(PGR)->nExtra])
|
||||||
|
|
||||||
/*
|
/*
|
||||||
** How big to make the hash table used for locating in-memory pages
|
** How big to make the hash table used for locating in-memory pages
|
||||||
@@ -250,7 +250,6 @@ struct Pager {
|
|||||||
void (*xDestructor)(void*,int); /* Call this routine when freeing pages */
|
void (*xDestructor)(void*,int); /* Call this routine when freeing pages */
|
||||||
void (*xReiniter)(void*,int); /* Call this routine when reloading pages */
|
void (*xReiniter)(void*,int); /* Call this routine when reloading pages */
|
||||||
int pageSize; /* Number of bytes in a page */
|
int pageSize; /* Number of bytes in a page */
|
||||||
int psAligned; /* pageSize rounded up to a multiple of 8 */
|
|
||||||
int nPage; /* Total number of in-memory pages */
|
int nPage; /* Total number of in-memory pages */
|
||||||
int nMaxPage; /* High water mark of nPage */
|
int nMaxPage; /* High water mark of nPage */
|
||||||
int nRef; /* Number of in-memory pages with PgHdr.nRef>0 */
|
int nRef; /* Number of in-memory pages with PgHdr.nRef>0 */
|
||||||
@@ -1660,7 +1659,6 @@ int sqlite3pager_open(
|
|||||||
pPager->nRef = 0;
|
pPager->nRef = 0;
|
||||||
pPager->dbSize = memDb-1;
|
pPager->dbSize = memDb-1;
|
||||||
pPager->pageSize = SQLITE_DEFAULT_PAGE_SIZE;
|
pPager->pageSize = SQLITE_DEFAULT_PAGE_SIZE;
|
||||||
pPager->psAligned = FORCE_ALIGNMENT(pPager->pageSize);
|
|
||||||
pPager->stmtSize = 0;
|
pPager->stmtSize = 0;
|
||||||
pPager->stmtJSize = 0;
|
pPager->stmtJSize = 0;
|
||||||
pPager->nPage = 0;
|
pPager->nPage = 0;
|
||||||
@@ -1716,14 +1714,16 @@ void sqlite3pager_set_reiniter(Pager *pPager, void (*xReinit)(void*,int)){
|
|||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
** Set the page size.
|
** Set the page size. Return the new size. If the suggest new page
|
||||||
**
|
** size is inappropriate, then an alternative page size is selected
|
||||||
** The page size must only be changed when the cache is empty.
|
** and returned.
|
||||||
*/
|
*/
|
||||||
void sqlite3pager_set_pagesize(Pager *pPager, int pageSize){
|
int sqlite3pager_set_pagesize(Pager *pPager, int pageSize){
|
||||||
assert( pageSize>=512 && pageSize<=SQLITE_MAX_PAGE_SIZE );
|
assert( pageSize>=512 && pageSize<=SQLITE_MAX_PAGE_SIZE );
|
||||||
pPager->pageSize = pageSize;
|
if( !pPager->memDb ){
|
||||||
pPager->psAligned = FORCE_ALIGNMENT(pageSize);
|
pPager->pageSize = pageSize;
|
||||||
|
}
|
||||||
|
return pPager->pageSize;
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
@@ -2376,7 +2376,7 @@ int sqlite3pager_get(Pager *pPager, Pgno pgno, void **ppPage){
|
|||||||
pPager->nMiss++;
|
pPager->nMiss++;
|
||||||
if( pPager->nPage<pPager->mxPage || pPager->pFirst==0 || MEMDB ){
|
if( pPager->nPage<pPager->mxPage || pPager->pFirst==0 || MEMDB ){
|
||||||
/* Create a new page */
|
/* Create a new page */
|
||||||
pPg = sqliteMallocRaw( sizeof(*pPg) + pPager->psAligned
|
pPg = sqliteMallocRaw( sizeof(*pPg) + pPager->pageSize
|
||||||
+ sizeof(u32) + pPager->nExtra
|
+ sizeof(u32) + pPager->nExtra
|
||||||
+ MEMDB*sizeof(PgHistory) );
|
+ MEMDB*sizeof(PgHistory) );
|
||||||
if( pPg==0 ){
|
if( pPg==0 ){
|
||||||
|
@@ -13,7 +13,7 @@
|
|||||||
** subsystem. The page cache subsystem reads and writes a file a page
|
** subsystem. The page cache subsystem reads and writes a file a page
|
||||||
** at a time and provides a journal for rollback.
|
** at a time and provides a journal for rollback.
|
||||||
**
|
**
|
||||||
** @(#) $Id: pager.h,v 1.43 2005/03/31 21:02:46 drh Exp $
|
** @(#) $Id: pager.h,v 1.44 2005/05/20 20:01:56 drh Exp $
|
||||||
*/
|
*/
|
||||||
|
|
||||||
/*
|
/*
|
||||||
@@ -71,7 +71,7 @@ int sqlite3pager_open(Pager **ppPager, const char *zFilename,
|
|||||||
void sqlite3pager_set_busyhandler(Pager*, BusyHandler *pBusyHandler);
|
void sqlite3pager_set_busyhandler(Pager*, BusyHandler *pBusyHandler);
|
||||||
void sqlite3pager_set_destructor(Pager*, void(*)(void*,int));
|
void sqlite3pager_set_destructor(Pager*, void(*)(void*,int));
|
||||||
void sqlite3pager_set_reiniter(Pager*, void(*)(void*,int));
|
void sqlite3pager_set_reiniter(Pager*, void(*)(void*,int));
|
||||||
void sqlite3pager_set_pagesize(Pager*, int);
|
int sqlite3pager_set_pagesize(Pager*, int);
|
||||||
void sqlite3pager_read_fileheader(Pager*, int, unsigned char*);
|
void sqlite3pager_read_fileheader(Pager*, int, unsigned char*);
|
||||||
void sqlite3pager_set_cachesize(Pager*, int);
|
void sqlite3pager_set_cachesize(Pager*, int);
|
||||||
int sqlite3pager_close(Pager *pPager);
|
int sqlite3pager_close(Pager *pPager);
|
||||||
|
@@ -11,7 +11,7 @@
|
|||||||
# This file implements regression tests for SQLite library.
|
# This file implements regression tests for SQLite library.
|
||||||
# This file implements tests for the page_size PRAGMA.
|
# This file implements tests for the page_size PRAGMA.
|
||||||
#
|
#
|
||||||
# $Id: pagesize.test,v 1.9 2004/11/23 10:52:51 danielk1977 Exp $
|
# $Id: pagesize.test,v 1.10 2005/05/20 20:01:56 drh Exp $
|
||||||
|
|
||||||
|
|
||||||
set testdir [file dirname $argv0]
|
set testdir [file dirname $argv0]
|
||||||
@@ -75,6 +75,12 @@ do_test pagesize-1.8 {
|
|||||||
} 8192
|
} 8192
|
||||||
|
|
||||||
foreach PGSZ {512 2048 4096 8192} {
|
foreach PGSZ {512 2048 4096 8192} {
|
||||||
|
do_test pagesize-2.$PGSZ.0 {
|
||||||
|
db close
|
||||||
|
sqlite3 db :memory:
|
||||||
|
execsql "PRAGMA page_size=$PGSZ;"
|
||||||
|
execsql {PRAGMA page_size}
|
||||||
|
} 1024
|
||||||
do_test pagesize-2.$PGSZ.1 {
|
do_test pagesize-2.$PGSZ.1 {
|
||||||
db close
|
db close
|
||||||
file delete -force test.db
|
file delete -force test.db
|
||||||
|
Reference in New Issue
Block a user