1
0
mirror of https://github.com/sqlite/sqlite.git synced 2025-08-08 14:02:16 +03:00

Enable the use of shared cache for an in-memory database, so that separate

database connections can share the same in-memory database.

FossilOrigin-Name: 4590e433f2a595bb80fb061024b0a3d2ca25b7b2
This commit is contained in:
drh
2012-05-26 18:06:38 +00:00
parent 3773b29167
commit afc8b7f0c1
6 changed files with 52 additions and 22 deletions

View File

@@ -1,5 +1,5 @@
C Version\s3.7.12.1 C Enable\sthe\suse\sof\sshared\scache\sfor\san\sin-memory\sdatabase,\sso\sthat\sseparate\ndatabase\sconnections\scan\sshare\sthe\ssame\sin-memory\sdatabase.
D 2012-05-22T02:45:53.459 D 2012-05-26T18:06:38.341
F Makefile.arm-wince-mingw32ce-gcc d6df77f1f48d690bd73162294bbba7f59507c72f F Makefile.arm-wince-mingw32ce-gcc d6df77f1f48d690bd73162294bbba7f59507c72f
F Makefile.in 2f37e468503dbe79d35c9f6dffcf3fae1ae9ec20 F Makefile.in 2f37e468503dbe79d35c9f6dffcf3fae1ae9ec20
F Makefile.linux-gcc 91d710bdc4998cb015f39edf3cb314ec4f4d7e23 F Makefile.linux-gcc 91d710bdc4998cb015f39edf3cb314ec4f4d7e23
@@ -118,7 +118,7 @@ F src/auth.c 523da7fb4979469955d822ff9298352d6b31de34
F src/backup.c 6be23a344d3301ae38e92fddb3a33b91c309fce4 F src/backup.c 6be23a344d3301ae38e92fddb3a33b91c309fce4
F src/bitvec.c af50f1c8c0ff54d6bdb7a80e2fceca5a93670bef F src/bitvec.c af50f1c8c0ff54d6bdb7a80e2fceca5a93670bef
F src/btmutex.c 976f45a12e37293e32cae0281b15a21d48a8aaa7 F src/btmutex.c 976f45a12e37293e32cae0281b15a21d48a8aaa7
F src/btree.c df800f10896bc2ddaa1125c532d6e7a7b9efc532 F src/btree.c 23e2d21f1fda37e5addc11935c78b97c7e467d0c
F src/btree.h 48a013f8964f12d944d90e4700df47b72dd6d923 F src/btree.h 48a013f8964f12d944d90e4700df47b72dd6d923
F src/btreeInt.h 38a639c0542c29fe8331a221c4aed0cb8686249e F src/btreeInt.h 38a639c0542c29fe8331a221c4aed0cb8686249e
F src/build.c 2bb2163bb1e69f59e9f36a9413079ead42fa1d2c F src/build.c 2bb2163bb1e69f59e9f36a9413079ead42fa1d2c
@@ -161,7 +161,7 @@ F src/os_common.h 92815ed65f805560b66166e3583470ff94478f04
F src/os_os2.c 4a75888ba3dfc820ad5e8177025972d74d7f2440 F src/os_os2.c 4a75888ba3dfc820ad5e8177025972d74d7f2440
F src/os_unix.c 424d46e0edab969293c2223f09923b2178171f47 F src/os_unix.c 424d46e0edab969293c2223f09923b2178171f47
F src/os_win.c 412d6434133c7c81dc48b7702f3ea5e61c309e5c F src/os_win.c 412d6434133c7c81dc48b7702f3ea5e61c309e5c
F src/pager.c bb5635dde0b152797836d1c72275284724bb563c F src/pager.c 5b14be810f26eeab807d50c5d26b8c8e34a0e6e0
F src/pager.h ef1eaf8593e78f73885c1dfac27ad83bee23bdc5 F src/pager.h ef1eaf8593e78f73885c1dfac27ad83bee23bdc5
F src/parse.y f29df90bd3adc64b33114ab1de9fb7768fcf2099 F src/parse.y f29df90bd3adc64b33114ab1de9fb7768fcf2099
F src/pcache.c f8043b433a57aba85384a531e3937a804432a346 F src/pcache.c f8043b433a57aba85384a531e3937a804432a346
@@ -269,7 +269,7 @@ F test/async2.test c0a9bd20816d7d6a2ceca7b8c03d3d69c28ffb8b
F test/async3.test d73a062002376d7edc1fe3edff493edbec1fc2f7 F test/async3.test d73a062002376d7edc1fe3edff493edbec1fc2f7
F test/async4.test 1787e3952128aa10238bf39945126de7ca23685a F test/async4.test 1787e3952128aa10238bf39945126de7ca23685a
F test/async5.test 0dd8701bd588bf6e70c2557a22ae3f22b2567b4c F test/async5.test 0dd8701bd588bf6e70c2557a22ae3f22b2567b4c
F test/attach.test 0d112b7713611fdf0340260192749737135fda5f F test/attach.test 29cf17b5793ad345f97fbfedcaabe6c06a0b5e8e
F test/attach2.test e54436ed956d3d88bdee61221da59bf3935a0966 F test/attach2.test e54436ed956d3d88bdee61221da59bf3935a0966
F test/attach3.test d89ccfe4fe6e2b5e368d480fcdfe4b496c54cf4e F test/attach3.test d89ccfe4fe6e2b5e368d480fcdfe4b496c54cf4e
F test/attach4.test 53bf502f17647c6d6c5add46dda6bac8b6f4665c F test/attach4.test 53bf502f17647c6d6c5add46dda6bac8b6f4665c
@@ -683,7 +683,7 @@ F test/selectA.test 06d1032fa9009314c95394f2ca2e60d9f7ae8532
F test/selectB.test 954e4e49cf1f896d61794e440669e03a27ceea25 F test/selectB.test 954e4e49cf1f896d61794e440669e03a27ceea25
F test/selectC.test 871fb55d884d3de5943c4057ebd22c2459e71977 F test/selectC.test 871fb55d884d3de5943c4057ebd22c2459e71977
F test/server1.test 46803bd3fe8b99b30dbc5ff38ffc756f5c13a118 F test/server1.test 46803bd3fe8b99b30dbc5ff38ffc756f5c13a118
F test/shared.test 34945a516532b11182c3eb26e31247eee3c9ae48 F test/shared.test 4526441129635d89e185dd66a74123dc696264a0
F test/shared2.test 03eb4a8d372e290107d34b6ce1809919a698e879 F test/shared2.test 03eb4a8d372e290107d34b6ce1809919a698e879
F test/shared3.test ebf77f023f4bdaa8f74f65822b559e86ce5c6257 F test/shared3.test ebf77f023f4bdaa8f74f65822b559e86ce5c6257
F test/shared4.test 72d90821e8d2fc918a08f16d32880868d8ee8e9d F test/shared4.test 72d90821e8d2fc918a08f16d32880868d8ee8e9d
@@ -998,10 +998,10 @@ F tool/tostr.awk e75472c2f98dd76e06b8c9c1367f4ab07e122d06
F tool/vdbe-compress.tcl d70ea6d8a19e3571d7ab8c9b75cba86d1173ff0f F tool/vdbe-compress.tcl d70ea6d8a19e3571d7ab8c9b75cba86d1173ff0f
F tool/warnings-clang.sh a8a0a3babda96dfb1ff51adda3cbbf3dfb7266c2 F tool/warnings-clang.sh a8a0a3babda96dfb1ff51adda3cbbf3dfb7266c2
F tool/warnings.sh fbc018d67fd7395f440c28f33ef0f94420226381 F tool/warnings.sh fbc018d67fd7395f440c28f33ef0f94420226381
P 5519cc5ef471e32a59995a34be811b46478dca1e P 6d326d44fd1d626aae0e8456e5fa2049f1ce0789
R f9f0e59804fa7e60869ace7ace22bd3d R 6a33795d9ed8fa1d5cb60e0ecabf9128
T +bgcolor * #d0c0ff T *branch * shared-cache-memdb
T +sym-release * T *sym-shared-cache-memdb *
T +sym-version-3.7.12.1 * T -sym-trunk *
U drh U drh
Z a30e57621f706278c1c64a3624297cbb Z e102daae56ebdb7d93ce4a259efb516f

View File

@@ -1 +1 @@
6d326d44fd1d626aae0e8456e5fa2049f1ce0789 4590e433f2a595bb80fb061024b0a3d2ca25b7b2

View File

@@ -1757,7 +1757,7 @@ int sqlite3BtreeOpen(
** If this Btree is a candidate for shared cache, try to find an ** If this Btree is a candidate for shared cache, try to find an
** existing BtShared object that we can share with ** existing BtShared object that we can share with
*/ */
if( isMemdb==0 && isTempDb==0 ){ if( isTempDb==0 ){
if( vfsFlags & SQLITE_OPEN_SHAREDCACHE ){ if( vfsFlags & SQLITE_OPEN_SHAREDCACHE ){
int nFullPathname = pVfs->mxPathname+1; int nFullPathname = pVfs->mxPathname+1;
char *zFullPathname = sqlite3Malloc(nFullPathname); char *zFullPathname = sqlite3Malloc(nFullPathname);
@@ -1767,11 +1767,16 @@ int sqlite3BtreeOpen(
sqlite3_free(p); sqlite3_free(p);
return SQLITE_NOMEM; return SQLITE_NOMEM;
} }
rc = sqlite3OsFullPathname(pVfs, zFilename, nFullPathname, zFullPathname); if( isMemdb ){
if( rc ){ memcpy(zFullPathname, zFilename, sqlite3Strlen30(zFilename)+1);
sqlite3_free(zFullPathname); }else{
sqlite3_free(p); rc = sqlite3OsFullPathname(pVfs, zFilename,
return rc; nFullPathname, zFullPathname);
if( rc ){
sqlite3_free(zFullPathname);
sqlite3_free(p);
return rc;
}
} }
#if SQLITE_THREADSAFE #if SQLITE_THREADSAFE
mutexOpen = sqlite3MutexAlloc(SQLITE_MUTEX_STATIC_OPEN); mutexOpen = sqlite3MutexAlloc(SQLITE_MUTEX_STATIC_OPEN);

View File

@@ -4360,6 +4360,8 @@ int sqlite3PagerOpen(
#ifndef SQLITE_OMIT_MEMORYDB #ifndef SQLITE_OMIT_MEMORYDB
if( flags & PAGER_MEMORY ){ if( flags & PAGER_MEMORY ){
memDb = 1; memDb = 1;
zPathname = sqlite3DbStrDup(0, zFilename);
nPathname = sqlite3Strlen30(zPathname);
zFilename = 0; zFilename = 0;
} }
#endif #endif
@@ -6743,7 +6745,8 @@ int sqlite3PagerWalCallback(Pager *pPager){
*/ */
int sqlite3PagerWalSupported(Pager *pPager){ int sqlite3PagerWalSupported(Pager *pPager){
const sqlite3_io_methods *pMethods = pPager->fd->pMethods; const sqlite3_io_methods *pMethods = pPager->fd->pMethods;
return pPager->exclusiveMode || (pMethods->iVersion>=2 && pMethods->xShmMap); return pPager->memDb==0 &&
(pPager->exclusiveMode || (pMethods->iVersion>=2 && pMethods->xShmMap));
} }
/* /*

View File

@@ -857,6 +857,6 @@ do_test attach-10.2 {
lrange [execsql { lrange [execsql {
PRAGMA database_list; PRAGMA database_list;
}] 9 end }] 9 end
} {4 noname {} 5 inmem {}} } {4 noname {} 5 inmem :memory:}
finish_test finish_test

View File

@@ -1056,7 +1056,29 @@ do_test shared-$av-15.2 {
db close db close
db2 close db2 close
} # Shared cache on a :memory: database.
#
do_test shared-$av-16.1 {
sqlite3 db1 :memory:
sqlite3 db2 :memory:
db1 eval {
CREATE TABLE t1(x); INSERT INTO t1 VALUES(1),(2),(3);
}
db2 eval {
SELECT x FROM t1 ORDER BY x;
}
} {1 2 3}
do_test shared-$av-16.2 {
db2 eval {
INSERT INTO t1 VALUES(99);
DELETE FROM t1 WHERE x=2;
}
db1 eval {
SELECT x FROM t1 ORDER BY x;
}
} {1 3 99}
} ;# end of autovacuum on/off loop
sqlite3_enable_shared_cache $::enable_shared_cache sqlite3_enable_shared_cache $::enable_shared_cache
finish_test finish_test