]> git.ipfire.org Git - thirdparty/sqlite.git/commitdiff
Fix nolock and immutable so that they work even if READONLY is requested. win32-none
authordrh <drh@noemail.net>
Wed, 7 May 2014 15:32:03 +0000 (15:32 +0000)
committerdrh <drh@noemail.net>
Wed, 7 May 2014 15:32:03 +0000 (15:32 +0000)
FossilOrigin-Name: e193aced2942e7405d0f45f90d4954b5663b4ba5

manifest
manifest.uuid
src/pager.c
test/nolock.test

index f945a392c464fac39df1459f6c9640b611bc3cb6..4823bece17b3c6eeff5606be0db843eca750a00a 100644 (file)
--- a/manifest
+++ b/manifest
@@ -1,5 +1,5 @@
-C Add\stest\scases\sand\sdocumentation\sfor\sthe\snolock\sand\simmutable\squery\nparameters.
-D 2014-05-07T15:09:24.618
+C Fix\snolock\sand\simmutable\sso\sthat\sthey\swork\seven\sif\sREADONLY\sis\srequested.
+D 2014-05-07T15:32:03.879
 F Makefile.arm-wince-mingw32ce-gcc d6df77f1f48d690bd73162294bbba7f59507c72f
 F Makefile.in 2ef13430cd359f7b361bb863504e227b25cc7f81
 F Makefile.linux-gcc 91d710bdc4998cb015f39edf3cb314ec4f4d7e23
@@ -206,7 +206,7 @@ F src/os.h 4a46270a64e9193af4a0aaa3bc2c66dc07c29b3f
 F src/os_common.h 92815ed65f805560b66166e3583470ff94478f04
 F src/os_unix.c ae4b5240af4619d711301d7992396e182585269f
 F src/os_win.c e71678ac927d0a0fb11d993db20a9748eabf808e
-F src/pager.c 6ed54e169933200b8d113674d5da46a5cbd32c6c
+F src/pager.c f6bb1fa6cdf2062f2d8aec3e64db302bca519ab8
 F src/pager.h ffd5607f7b3e4590b415b007a4382f693334d428
 F src/parse.y 22d6a074e5f5a7258947a1dc55a9bf946b765dd0
 F src/pcache.c d8eafac28290d4bb80332005435db44991d07fc2
@@ -713,7 +713,7 @@ F test/multiplex3.test d228f59eac91839a977eac19f21d053f03e4d101
 F test/mutex1.test 78b2b9bb320e51d156c4efdb71b99b051e7a4b41
 F test/mutex2.test bfeaeac2e73095b2ac32285d2756e3a65e681660
 F test/nan.test e9648b9d007c7045242af35e11a984d4b169443a
-F test/nolock.test 77b278317fa765b1ada5f88d59219cdeb8364f8f
+F test/nolock.test 0540dd96f39b8876e3ffdd8814fad0ea425efeee
 F test/notify1.test 669b2b743618efdc18ca4b02f45423d5d2304abf
 F test/notify2.test ce23eb522c9e1fff6443f96376fe67872202061c
 F test/notify3.test 10ff25cde502e72a92053a2f215d64bece4ef934
@@ -1167,7 +1167,7 @@ F tool/vdbe_profile.tcl 67746953071a9f8f2f668b73fe899074e2c6d8c1
 F tool/warnings-clang.sh f6aa929dc20ef1f856af04a730772f59283631d4
 F tool/warnings.sh d1a6de74685f360ab718efda6265994b99bbea01
 F tool/win/sqlite.vsix 030f3eeaf2cb811a3692ab9c14d021a75ce41fff
-P 725c1c14be331bce9bf074960dbfa7b6d4c1ba87
-R 89db3fd7a34cc009fbfa4be31d82927f
+P 19d56cbaca222b32e2e354063149cccd89441d73
+R 330846b5261a6146788edf187c03b165
 U drh
-Z 2af631f996ea658459fe7078e363eaf4
+Z 1507cbe7cdb05905b7ab13bc4a3a8db3
index 164fe707921daeb53203539c9ea2d6a9b9ebc641..ba9d26dfeef7850f95c27662fe24a63ebf592d31 100644 (file)
@@ -1 +1 @@
-19d56cbaca222b32e2e354063149cccd89441d73
\ No newline at end of file
+e193aced2942e7405d0f45f90d4954b5663b4ba5
\ No newline at end of file
index 9ab7cfbe5477d9ce602a3a45c1379a70714fd481..a77dcecc4cfa2e949831bd48beabd9971b0e4288 100644 (file)
@@ -4676,8 +4676,8 @@ int sqlite3PagerOpen(
     **    + The largest page size that can be written atomically.
     */
     if( rc==SQLITE_OK ){
+      int iDc = sqlite3OsDeviceCharacteristics(pPager->fd);
       if( !readOnly ){
-        int iDc = sqlite3OsDeviceCharacteristics(pPager->fd);
         setSectorSize(pPager);
         assert(SQLITE_DEFAULT_PAGE_SIZE<=SQLITE_MAX_DEFAULT_PAGE_SIZE);
         if( szPageDflt<pPager->sectorSize ){
@@ -4700,12 +4700,12 @@ int sqlite3PagerOpen(
           }
         }
 #endif
-        pPager->noLock = sqlite3_uri_boolean(zFilename, "nolock", 0);
-        if( (iDc & SQLITE_IOCAP_IMMUTABLE)!=0
-         || sqlite3_uri_boolean(zFilename, "immutable", 0) ){
-            vfsFlags |= SQLITE_OPEN_READONLY;
-            goto act_like_temp_file;
-        }
+      }
+      pPager->noLock = sqlite3_uri_boolean(zFilename, "nolock", 0);
+      if( (iDc & SQLITE_IOCAP_IMMUTABLE)!=0
+       || sqlite3_uri_boolean(zFilename, "immutable", 0) ){
+          vfsFlags |= SQLITE_OPEN_READONLY;
+          goto act_like_temp_file;
       }
     }
   }else{
index 98ed762cac9bddd2eb40aedf3ba49055fad686a3..331af08ad74e235a28ae8acb02ca81d32bc2f36c 100644 (file)
@@ -67,6 +67,24 @@ do_test nolock-1.2 {
        xCheckReservedLock $::tvfs_calls(xCheckReservedLock)
 } {xLock 0 xUnlock 0 xCheckReservedLock 0}
 
+do_test nolock-1.3 {
+  db close
+  tvfs_reset
+  sqlite db file:test.db?nolock=0 -vfs tvfs -uri 1 -readonly 1
+  db eval {SELECT * FROM t1}
+  list xLock $::tvfs_calls(xLock) xUnlock $::tvfs_calls(xUnlock) \
+       xCheckReservedLock $::tvfs_calls(xCheckReservedLock)
+} {xLock 2 xUnlock 2 xCheckReservedLock 0}
+
+do_test nolock-1.4 {
+  db close
+  tvfs_reset
+  sqlite db file:test.db?nolock=1 -vfs tvfs -uri 1 -readonly 1
+  db eval {SELECT * FROM t1}
+  list xLock $::tvfs_calls(xLock) xUnlock $::tvfs_calls(xUnlock) \
+       xCheckReservedLock $::tvfs_calls(xCheckReservedLock)
+} {xLock 0 xUnlock 0 xCheckReservedLock 0}
+
 #############################################################################
 # Verify that immutable=1 disables both locking and xAccess calls to the
 # journal files.
@@ -121,6 +139,18 @@ do_test nolock-2.22 {
        xAccess $::tvfs_calls(xAccess)
 } {xLock 0 xUnlock 0 xCheckReservedLock 0 xAccess 0}
 
+do_test nolock-2.31 {
+  db2 close
+  tvfs_reset
+  sqlite3 db2 file:test.db?immutable=1 -vfs tvfs -uri 1 -readonly 1
+  db2 eval {SELECT * FROM t1, t2}
+} {hello world 12345 67890}
+do_test nolock-2.32 {
+  list xLock $::tvfs_calls(xLock) xUnlock $::tvfs_calls(xUnlock) \
+       xCheckReservedLock $::tvfs_calls(xCheckReservedLock) \
+       xAccess $::tvfs_calls(xAccess)
+} {xLock 0 xUnlock 0 xCheckReservedLock 0 xAccess 0}
+
 ############################################################################
 # Verify that the SQLITE_IOCAP_IMMUTABLE flag works
 #
@@ -137,6 +167,18 @@ do_test nolock-3.2 {
        xAccess $::tvfs_calls(xAccess)
 } {xLock 0 xUnlock 0 xCheckReservedLock 0 xAccess 0}
 
+do_test nolock-3.11 {
+  db2 close
+  tvfs_reset
+  sqlite3 db2 test.db -vfs tvfs -readonly 1
+  db2 eval {SELECT * FROM t1, t2}
+} {hello world 12345 67890}
+do_test nolock-3.12 {
+  list xLock $::tvfs_calls(xLock) xUnlock $::tvfs_calls(xUnlock) \
+       xCheckReservedLock $::tvfs_calls(xCheckReservedLock) \
+       xAccess $::tvfs_calls(xAccess)
+} {xLock 0 xUnlock 0 xCheckReservedLock 0 xAccess 0}
+
 db2 close
 db close
 tvfs delete