]> git.ipfire.org Git - thirdparty/sqlite.git/commitdiff
Do not allow journal_mode=WAL if the underlying VFS does not support xShmOpen.
authordrh <drh@noemail.net>
Sat, 1 May 2010 00:59:37 +0000 (00:59 +0000)
committerdrh <drh@noemail.net>
Sat, 1 May 2010 00:59:37 +0000 (00:59 +0000)
FossilOrigin-Name: d1fcccecdc8e9ac5d0d022914e51c545f4e1b04f

manifest
manifest.uuid
src/vdbe.c
test/walmode.test

index 8bd0968857a4cd987b631901d00e55f3438a13d1..15a349d662411ee82d233963246c030190b5cfd7 100644 (file)
--- a/manifest
+++ b/manifest
@@ -1,8 +1,8 @@
 -----BEGIN PGP SIGNED MESSAGE-----
 Hash: SHA1
 
-C Merge\sin\schanges\sfrom\sthe\strunk.
-D 2010-04-30T22:28:06
+C Do\snot\sallow\sjournal_mode=WAL\sif\sthe\sunderlying\sVFS\sdoes\snot\ssupport\sxShmOpen.
+D 2010-05-01T00:59:38
 F Makefile.arm-wince-mingw32ce-gcc fcd5e9cd67fe88836360bb4f9ef4cb7f8e2fb5a0
 F Makefile.in d83a0ffef3dcbfb08b410a6c6dd6c009ec9167fb
 F Makefile.linux-gcc d53183f4aa6a9192d249731c90dbdffbd2c68654
@@ -215,7 +215,7 @@ F src/update.c c0dc6b75ad28b76b619042d934f337b02acee208
 F src/utf.c 1baeeac91707a4df97ccc6141ec0f808278af685
 F src/util.c 32aebf04c10e51ad3977a928b7416bed671b620b
 F src/vacuum.c 8e7d9a6fd076774bb6e211cad335c7337948a164
-F src/vdbe.c 21a96eeeb43dedd40072028db0b42e137296a81a
+F src/vdbe.c 2a5ccf3a760498d16ff3869162d3422f165bfb1d
 F src/vdbe.h 471f6a3dcec4817ca33596fe7f6654d56c0e75f3
 F src/vdbeInt.h 19ebc8c2a2e938340051ee65af3f377fb99102d1
 F src/vdbeapi.c 85e448c7d1d6dde7226c721cd8da8f9b5286699d
@@ -765,7 +765,7 @@ F test/wal.test 830fc2d723fc4c55ef5666141e3a54e0cedd87e5
 F test/walbak.test f6fde9a5f59d0c697cb1f4af7876178c2f69a7ba
 F test/walcrash.test f022cee7eb7baa5fb898726120a6a4073dd831d1
 F test/walhook.test 287a69d662939604f2e0452dace2cec8ef634d5e
-F test/walmode.test 40119078da084e6a7403ba57485d5a86ee0e2646
+F test/walmode.test 999be0fbee266ed618de780a6dadfca662d0f763
 F test/walslow.test 38076d5fad49e3678027be0f8110e6a32d531dc2
 F test/walthread.test c9c3b5d19eeb4968254d93f61a7ccd6e8b63f554
 F test/where.test de337a3fe0a459ec7c93db16a519657a90552330
@@ -811,14 +811,14 @@ F tool/speedtest2.tcl ee2149167303ba8e95af97873c575c3e0fab58ff
 F tool/speedtest8.c 2902c46588c40b55661e471d7a86e4dd71a18224
 F tool/speedtest8inst1.c 293327bc76823f473684d589a8160bde1f52c14e
 F tool/vdbe-compress.tcl d70ea6d8a19e3571d7ab8c9b75cba86d1173ff0f
-P 8660cda6f8ef43bd276897ef3b5fc2376b5684dc 946e06cd2a2cc209b0786b7e9d28c0746320d646
-R 34e37e2e07b357ad442391f6d6aea47a
+P 76bf0eee1fd4003a3f1c39922f8f059611d41dd0
+R 9dfde34976e5276ea286640fcc12ec63
 U drh
-Z f36c3392b22f93b3ce95c9951a47e7e6
+Z 32ec43d929a1f569787f34775d6f160c
 -----BEGIN PGP SIGNATURE-----
 Version: GnuPG v1.4.6 (GNU/Linux)
 
-iD8DBQFL21l5oxKgR168RlERAqNRAJ906Wol3RyZLztZzmkcpokv0+CtRgCfbeMz
-ohrTG6i1s6JqVvmqdQdSCDg=
-=50x7
+iD4DBQFL23z+oxKgR168RlERAhO3AJ90Nf9l23uNBBZGi//1U+RT1mFhmQCWLU5N
+/Vu6AuAN53A7nGU5H1J5Vg==
+=7uDR
 -----END PGP SIGNATURE-----
index 695f751f0863788d9e23d35f94bb65f83df7220c..2ccd280d279a039a151f8cd646c31c34c78b48d1 100644 (file)
@@ -1 +1 @@
-76bf0eee1fd4003a3f1c39922f8f059611d41dd0
\ No newline at end of file
+d1fcccecdc8e9ac5d0d022914e51c545f4e1b04f
\ No newline at end of file
index 60e72fadd2e03a6420af1929d0c27249be825380..c6a38c5ba64f25e0941904a66bfc2fec61c8b0ae 100644 (file)
@@ -5212,11 +5212,15 @@ case OP_Checkpoint: {
 **
 ** Write a string containing the final journal-mode to register P2.
 */
-case OP_JournalMode: {
+case OP_JournalMode: {    /* out2-prerelease */
   Btree *pBt;                     /* Btree to change journal mode of */
   Pager *pPager;                  /* Pager associated with pBt */
-  int eNew = pOp->p3;             /* New journal mode */
+  int eNew;                       /* New journal mode */
+  int eOld;                       /* The old journal mode */
+  const sqlite3_vfs *pVfs;        /* The VFS of pPager */
+  const char *zFilename;          /* Name of database file for pPager */
 
+  eNew = pOp->p3;
   assert( eNew==PAGER_JOURNALMODE_DELETE 
        || eNew==PAGER_JOURNALMODE_TRUNCATE 
        || eNew==PAGER_JOURNALMODE_PERSIST 
@@ -5230,15 +5234,21 @@ case OP_JournalMode: {
 
   pBt = db->aDb[pOp->p1].pBt;
   pPager = sqlite3BtreePager(pBt);
+  zFilename = sqlite3PagerFilename(pPager);
+  pVfs = sqlite3PagerVfs(pPager);
 
-  if( 0==sqlite3Strlen30(sqlite3BtreeGetFilename(pBt)) 
-   && eNew==PAGER_JOURNALMODE_WAL 
+  /* Do not allow a transition to journal_mode=WAL for a database
+  ** in temporary storage or if the VFS does not support xShmOpen.
+  */
+  if( eNew==PAGER_JOURNALMODE_WAL
+   && (zFilename[0]==0                               /* Temp file */
+         || pVfs->iVersion<2 || pVfs->xShmOpen==0)   /* No xShmOpen support */
   ){
     eNew = PAGER_JOURNALMODE_QUERY;
   }
 
   if( eNew!=PAGER_JOURNALMODE_QUERY ){
-    int eOld = sqlite3PagerJournalMode(pPager, PAGER_JOURNALMODE_QUERY);
+    eOld = sqlite3PagerJournalMode(pPager, PAGER_JOURNALMODE_QUERY);
     if( (eNew!=eOld)
      && (eOld==PAGER_JOURNALMODE_WAL || eNew==PAGER_JOURNALMODE_WAL)
     ){
index 3af72d91c05151847eb41e04f0353e28a8eb3fe4..4df00a350a8ff2049ca087014b4fba507e2978cf 100644 (file)
@@ -153,6 +153,7 @@ do_test walmode-5.1.1 {
   sqlite3 db :memory:
   execsql { PRAGMA main.journal_mode }
 } {memory}
+breakpoint
 do_test walmode-5.1.2 {
   execsql { PRAGMA main.journal_mode = wal }
 } {memory}
@@ -205,13 +206,18 @@ do_test walmode-5.2.5 {
   }
 } {1 2 3 4 delete}
 
+if {$TEMP_STORE>=2} {
+  set tempJrnlMode memory
+} else {
+  set tempJrnlMode
+}
 do_test walmode-5.3.1 {
   sqlite3 db test.db
   execsql { PRAGMA temp.journal_mode }
-} {delete}
+} $tempJrnlMode
 do_test walmode-5.3.2 {
   execsql { PRAGMA temp.journal_mode = wal }
-} {delete}
+} $tempJrnlMode
 do_test walmode-5.3.3 {
   execsql {
     BEGIN;
@@ -221,17 +227,16 @@ do_test walmode-5.3.3 {
     SELECT * FROM t1;
     PRAGMA temp.journal_mode;
   }
-} {1 2 delete}
+} [list 1 2 $tempJrnlMode]
 do_test walmode-5.3.4 {
   execsql { PRAGMA temp.journal_mode = wal }
-} {delete}
+} $tempJrnlMode
 do_test walmode-5.3.5 {
   execsql { 
     INSERT INTO t1 VALUES(3, 4);
     SELECT * FROM t1;
     PRAGMA temp.journal_mode;
   }
-} {1 2 3 4 delete}
+} [list 1 2 3 4 $tempJrnlMode]
 
 finish_test
-