]> git.ipfire.org Git - thirdparty/sqlite.git/commitdiff
Only allow :memory: databases to share cache if there are created using a
authordrh <drh@noemail.net>
Sat, 26 May 2012 20:08:49 +0000 (20:08 +0000)
committerdrh <drh@noemail.net>
Sat, 26 May 2012 20:08:49 +0000 (20:08 +0000)
URI filename.  This minimizes the risk of breakages in legacy applications
that have shared-cache enabled but also use :memory: databases which they
expect to keep separate.

FossilOrigin-Name: e3ad61e0308a8442c2bdb7cdb3465576cd39ed4a

manifest
manifest.uuid
src/btree.c
src/main.c
src/pager.c
test/shared.test

index f6549180ff57860f1bb206846ac54ffd1a496e2d..1c29c833156157b9a78f2a85ee49e521395e3a1e 100644 (file)
--- a/manifest
+++ b/manifest
@@ -1,5 +1,5 @@
-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-26T18:06:38.341
+C Only\sallow\s:memory:\sdatabases\sto\sshare\scache\sif\sthere\sare\screated\susing\sa\nURI\sfilename.\s\sThis\sminimizes\sthe\srisk\sof\sbreakages\sin\slegacy\sapplications\nthat\shave\sshared-cache\senabled\sbut\salso\suse\s:memory:\sdatabases\swhich\sthey\nexpect\sto\skeep\sseparate.
+D 2012-05-26T20:08:49.030
 F Makefile.arm-wince-mingw32ce-gcc d6df77f1f48d690bd73162294bbba7f59507c72f
 F Makefile.in 2f37e468503dbe79d35c9f6dffcf3fae1ae9ec20
 F Makefile.linux-gcc 91d710bdc4998cb015f39edf3cb314ec4f4d7e23
@@ -118,7 +118,7 @@ F src/auth.c 523da7fb4979469955d822ff9298352d6b31de34
 F src/backup.c 6be23a344d3301ae38e92fddb3a33b91c309fce4
 F src/bitvec.c af50f1c8c0ff54d6bdb7a80e2fceca5a93670bef
 F src/btmutex.c 976f45a12e37293e32cae0281b15a21d48a8aaa7
-F src/btree.c 23e2d21f1fda37e5addc11935c78b97c7e467d0c
+F src/btree.c e5e992199f1368343071a22dbebd467f4009f6a5
 F src/btree.h 48a013f8964f12d944d90e4700df47b72dd6d923
 F src/btreeInt.h 38a639c0542c29fe8331a221c4aed0cb8686249e
 F src/build.c 2bb2163bb1e69f59e9f36a9413079ead42fa1d2c
@@ -140,7 +140,7 @@ F src/journal.c 552839e54d1bf76fb8f7abe51868b66acacf6a0e
 F src/legacy.c a199d7683d60cef73089e892409113e69c23a99f
 F src/lempar.c 0ee69fca0be54cd93939df98d2aca4ca46f44416
 F src/loadext.c f20382fbaeec832438a1ba7797bee3d3c8a6d51d
-F src/main.c 91458c713e9b7f8dbc98d79e78f1150f0ca9c2a1
+F src/main.c a2cfba189be2c653eb274c39fc12f169bbb9baa3
 F src/malloc.c fe085aa851b666b7c375c1ff957643dc20a04bf6
 F src/mem0.c 6a55ebe57c46ca1a7d98da93aaa07f99f1059645
 F src/mem1.c b3677415e69603d6a0e7c5410a1b3731d55beda1
@@ -161,7 +161,7 @@ F src/os_common.h 92815ed65f805560b66166e3583470ff94478f04
 F src/os_os2.c 4a75888ba3dfc820ad5e8177025972d74d7f2440
 F src/os_unix.c 424d46e0edab969293c2223f09923b2178171f47
 F src/os_win.c 412d6434133c7c81dc48b7702f3ea5e61c309e5c
-F src/pager.c 5b14be810f26eeab807d50c5d26b8c8e34a0e6e0
+F src/pager.c 5a86e85e393705d09fd60e9e525cfb9ff59a8022
 F src/pager.h ef1eaf8593e78f73885c1dfac27ad83bee23bdc5
 F src/parse.y f29df90bd3adc64b33114ab1de9fb7768fcf2099
 F src/pcache.c f8043b433a57aba85384a531e3937a804432a346
@@ -683,7 +683,7 @@ F test/selectA.test 06d1032fa9009314c95394f2ca2e60d9f7ae8532
 F test/selectB.test 954e4e49cf1f896d61794e440669e03a27ceea25
 F test/selectC.test 871fb55d884d3de5943c4057ebd22c2459e71977
 F test/server1.test 46803bd3fe8b99b30dbc5ff38ffc756f5c13a118
-F test/shared.test 4526441129635d89e185dd66a74123dc696264a0
+F test/shared.test 930104c2a6c173a8e21a850163c9e0475846a127
 F test/shared2.test 03eb4a8d372e290107d34b6ce1809919a698e879
 F test/shared3.test ebf77f023f4bdaa8f74f65822b559e86ce5c6257
 F test/shared4.test 72d90821e8d2fc918a08f16d32880868d8ee8e9d
@@ -998,10 +998,7 @@ F tool/tostr.awk e75472c2f98dd76e06b8c9c1367f4ab07e122d06
 F tool/vdbe-compress.tcl d70ea6d8a19e3571d7ab8c9b75cba86d1173ff0f
 F tool/warnings-clang.sh a8a0a3babda96dfb1ff51adda3cbbf3dfb7266c2
 F tool/warnings.sh fbc018d67fd7395f440c28f33ef0f94420226381
-P 6d326d44fd1d626aae0e8456e5fa2049f1ce0789
-R 6a33795d9ed8fa1d5cb60e0ecabf9128
-T *branch * shared-cache-memdb
-T *sym-shared-cache-memdb *
-T -sym-trunk *
+P 4590e433f2a595bb80fb061024b0a3d2ca25b7b2
+R 150ee74d31f8ee4186fa530c4e755088
 U drh
-Z e102daae56ebdb7d93ce4a259efb516f
+Z d012f21feec13fdb57a1a9d954ad6a98
index 3875f95ceced05c1bed42874a50c7f7f3920ab1f..d36bcf291c33c6af38b9c3b5ca39ce5a06f1916a 100644 (file)
@@ -1 +1 @@
-4590e433f2a595bb80fb061024b0a3d2ca25b7b2
\ No newline at end of file
+e3ad61e0308a8442c2bdb7cdb3465576cd39ed4a
\ No newline at end of file
index a59e6d10cff9b7e45278c2204c5be7e4323c47ab..136cc196a8e30d04369e2083c6e62d387720ae45 100644 (file)
@@ -1757,7 +1757,7 @@ int sqlite3BtreeOpen(
   ** If this Btree is a candidate for shared cache, try to find an
   ** existing BtShared object that we can share with
   */
-  if( isTempDb==0 ){
+  if( isTempDb==0 && (isMemdb==0 || (vfsFlags&SQLITE_OPEN_URI)!=0) ){
     if( vfsFlags & SQLITE_OPEN_SHAREDCACHE ){
       int nFullPathname = pVfs->mxPathname+1;
       char *zFullPathname = sqlite3Malloc(nFullPathname);
index d148b4b42cd4bd1170a515fd7865ce6a03c299c2..c8fda4787a3bdbf79afc008590da88d4794fb9e4 100644 (file)
@@ -2055,6 +2055,7 @@ int sqlite3ParseUri(
     memcpy(zFile, zUri, nUri);
     zFile[nUri] = '\0';
     zFile[nUri+1] = '\0';
+    flags &= ~SQLITE_OPEN_URI;
   }
 
   *ppVfs = sqlite3_vfs_find(zVfs);
index 43c00c7ec4d7baf75f96f683e220d949789106ad..0154a5d7f6a5e23c4f0fa849f221775981a9ad07 100644 (file)
@@ -4360,9 +4360,12 @@ int sqlite3PagerOpen(
 #ifndef SQLITE_OMIT_MEMORYDB
   if( flags & PAGER_MEMORY ){
     memDb = 1;
-    zPathname = sqlite3DbStrDup(0, zFilename);
-    nPathname = sqlite3Strlen30(zPathname);
-    zFilename = 0;
+    if( zFilename ){
+      zPathname = sqlite3DbStrDup(0, zFilename);
+      if( zPathname==0  ) return SQLITE_NOMEM;
+      nPathname = sqlite3Strlen30(zPathname);
+      zFilename = 0;
+    }
   }
 #endif
 
index 156f894a1148ec43df769cafdf4340d7c97acdbd..0c5c408b34f4e918941f0def702754a4b00e2872 100644 (file)
@@ -1056,11 +1056,11 @@ do_test shared-$av-15.2 {
 db close
 db2 close
 
-# Shared cache on a :memory: database.
+# Shared cache on a :memory: database.  This only works for URI filenames.
 #
 do_test shared-$av-16.1 {
-  sqlite3 db1 :memory:
-  sqlite3 db2 :memory:
+  sqlite3 db1 file::memory: -uri 1
+  sqlite3 db2 file::memory: -uri 1
   db1 eval {
     CREATE TABLE t1(x); INSERT INTO t1 VALUES(1),(2),(3);
   }
@@ -1078,6 +1078,24 @@ do_test shared-$av-16.2 {
   }
 } {1 3 99}
 
+# Verify that there is no cache sharing ordinary (non-URI) filenames are
+# used.
+#
+do_test shared-$av-16.3 {
+  db1 close
+  db2 close
+  sqlite3 db1 :memory:
+  sqlite3 db2 :memory:
+  db1 eval {
+    CREATE TABLE t1(x); INSERT INTO t1 VALUES(4),(5),(6);
+  }
+  catchsql {
+    SELECT * FROM t1;
+  } db2
+} {1 {no such table: t1}}
+db1 close
+db2 close
+
 }  ;# end of autovacuum on/off loop
 
 sqlite3_enable_shared_cache $::enable_shared_cache