From ffbb02a36169fddc4eec4dc156b1b23bb1c2744b Mon Sep 17 00:00:00 2001 From: drh Date: Fri, 11 Mar 2016 23:07:30 +0000 Subject: [PATCH] Do not allow the use of WAL mode with nolock=1 because it does not work. FossilOrigin-Name: 74f5d3b07f6e5e977858c73957c6f9337ae3ca3e --- manifest | 16 ++++++++-------- manifest.uuid | 2 +- src/pager.c | 1 + test/nolock.test | 32 ++++++++++++++++++++++++++++++++ 4 files changed, 42 insertions(+), 9 deletions(-) diff --git a/manifest b/manifest index 5e5214e2d2..eb0ce7dd6e 100644 --- a/manifest +++ b/manifest @@ -1,5 +1,5 @@ -C Tweak\sthe\samalgamation\sautoconf\sfiles\sso\sthat\sthe\s--disable-static-shell\soption\sworks\sagain. -D 2016-03-11T15:25:13.462 +C Do\snot\sallow\sthe\suse\sof\sWAL\smode\swith\snolock=1\sbecause\sit\sdoes\snot\swork. +D 2016-03-11T23:07:30.911 F Makefile.in f53429fb2f313c099283659d0df6f20f932c861f F Makefile.linux-gcc 7bc79876b875010e8c8f9502eb935ca92aa3c434 F Makefile.msc df0bf9ff7f8b3f4dd9fb4cc43f92fe58f6ec5c66 @@ -336,7 +336,7 @@ F src/os_setup.h c9d4553b5aaa6f73391448b265b89bed0b890faa F src/os_unix.c f5bac8e74aaefc4ea520e43b4540793c3b8a9e8f F src/os_win.c f0d7aa603eb6262143d7169a222aea07c4fca91d F src/os_win.h eb7a47aa17b26b77eb97e4823f20a00b8bda12ca -F src/pager.c 2d950142528e5d9b291a1160443d7ade0d90700d +F src/pager.c 38718a019ca762ba4f6795425d5a54db70d1790d F src/pager.h e1d38a2f14849e219df0f91f8323504d134c8a56 F src/parse.y 5ea8c81c5c41b27887f41b4a7e1c58470d7d3821 F src/pcache.c 647bb53a86b7bbcf55ad88089b3ea5a9170b90df @@ -915,7 +915,7 @@ F test/multiplex4.test e8ae4c4bd70606a5727743241f13b5701990abe4 F test/mutex1.test e0a44072d98189003deae4b091106f085d94bea8 F test/mutex2.test bfeaeac2e73095b2ac32285d2756e3a65e681660 F test/nan.test e9648b9d007c7045242af35e11a984d4b169443a -F test/nolock.test 0540dd96f39b8876e3ffdd8814fad0ea425efeee +F test/nolock.test 96e922d2d3db71c2dd6557c98e8027a28277b415 F test/notify1.test 669b2b743618efdc18ca4b02f45423d5d2304abf F test/notify2.test 2ecabaa1305083856b7c39cf32816b612740c161 F test/notify3.test 10ff25cde502e72a92053a2f215d64bece4ef934 @@ -1455,7 +1455,7 @@ F vsixtest/vsixtest.tcl 6a9a6ab600c25a91a7acc6293828957a386a8a93 F vsixtest/vsixtest.vcxproj.data 2ed517e100c66dc455b492e1a33350c1b20fbcdc F vsixtest/vsixtest.vcxproj.filters 37e51ffedcdb064aad6ff33b6148725226cd608e F vsixtest/vsixtest_TemporaryKey.pfx e5b1b036facdb453873e7084e1cae9102ccc67a0 -P df44308b862e932ff0ad25b6328d13be22047b96 -R 19b1fa38a58d00a667be85fd411c2202 -U dan -Z bd858a2f3f6240bb0acfbf97ee308bf8 +P 83efcdebfa255cd0663ecc6b74eb99183e2f3a10 +R 95ba30529f9bfc1f4da2d6ab93334cdc +U drh +Z 5b477c118f77a96b5b851b408af856c1 diff --git a/manifest.uuid b/manifest.uuid index d06900f0e6..3b0b773e3e 100644 --- a/manifest.uuid +++ b/manifest.uuid @@ -1 +1 @@ -83efcdebfa255cd0663ecc6b74eb99183e2f3a10 \ No newline at end of file +74f5d3b07f6e5e977858c73957c6f9337ae3ca3e \ No newline at end of file diff --git a/src/pager.c b/src/pager.c index 316a5e8ec0..c18b3a32f7 100644 --- a/src/pager.c +++ b/src/pager.c @@ -7167,6 +7167,7 @@ int sqlite3PagerWalCallback(Pager *pPager){ */ int sqlite3PagerWalSupported(Pager *pPager){ const sqlite3_io_methods *pMethods = pPager->fd->pMethods; + if( pPager->noLock ) return 0; return pPager->exclusiveMode || (pMethods->iVersion>=2 && pMethods->xShmMap); } diff --git a/test/nolock.test b/test/nolock.test index 331af08ad7..fdaef6ef07 100644 --- a/test/nolock.test +++ b/test/nolock.test @@ -182,4 +182,36 @@ do_test nolock-3.12 { db2 close db close tvfs delete + +# 2016-03-11: Make sure all works when transitioning to WAL mode under nolock. +# +do_test nolock-4.1 { + forcedelete test.db + sqlite3 db file:test.db?nolock=1 -uri 1 + db eval { + PRAGMA journal_mode=WAL; + CREATE TABLE t1(x); + INSERT INTO t1 VALUES('youngling'); + SELECT * FROM t1; + } +} {delete youngling} +db close + +do_test nolock-4.2 { + forcedelete test.db + sqlite3 db test.db + db eval { + PRAGMA journal_mode=WAL; + CREATE TABLE t1(x); + INSERT INTO t1 VALUES('catbird'); + SELECT * FROM t1; + } +} {wal catbird} +do_test nolock-4.3 { + db close + sqlite3 db file:test.db?nolock=1 -uri 1 + set rc [catch {db eval {SELECT * FROM t1}} msg] + lappend rc $msg +} {1 {unable to open database file}} + finish_test