]> git.ipfire.org Git - thirdparty/sqlite.git/commitdiff
Fix a bug in recovering wal2 mode databases introduced by the previous commit.
authordan <dan@noemail.net>
Fri, 6 Oct 2017 14:08:39 +0000 (14:08 +0000)
committerdan <dan@noemail.net>
Fri, 6 Oct 2017 14:08:39 +0000 (14:08 +0000)
FossilOrigin-Name: 9e1502e1b650217efc361732a3dfe686caa2e6352d040c73865f1faf09bf4591

manifest
manifest.uuid
src/wal.c
test/wal2rewrite.test

index ebdae660fb7ede30c68c930b28f93d3739ccac54..2eb85d585958b89f7c15c500a21f77c29d10dd00 100644 (file)
--- a/manifest
+++ b/manifest
@@ -1,5 +1,5 @@
-C Fix\sframe\soverwriting\sin\swal2\smode.
-D 2017-10-06T13:43:42.775
+C Fix\sa\sbug\sin\srecovering\swal2\smode\sdatabases\sintroduced\sby\sthe\sprevious\scommit.
+D 2017-10-06T14:08:39.369
 F Makefile.in 4bc36d913c2e3e2d326d588d72f618ac9788b2fd4b7efda61102611a6495c3ff
 F Makefile.linux-gcc 7bc79876b875010e8c8f9502eb935ca92aa3c434
 F Makefile.msc 6033b51b6aea702ea059f6ab2d47b1d3cef648695f787247dd4fb395fe60673f
@@ -537,7 +537,7 @@ F src/vdbesort.c 731a09e5cb9e96b70c394c1b7cf3860fbe84acca7682e178615eb941a3a0ef2
 F src/vdbetrace.c 48e11ebe040c6b41d146abed2602e3d00d621d7ebe4eb29b0a0f1617fd3c2f6c
 F src/vtab.c 0e4885495172e1bdf54b12cce23b395ac74ef5729031f15e1bc1e3e6b360ed1a
 F src/vxworks.h d2988f4e5a61a4dfe82c6524dd3d6e4f2ce3cdb9
-F src/wal.c 1fdb379a36877a21fa97220bbe075957c024a6d06716db692e1d35145738a5a1
+F src/wal.c 287feccc5c6e886a5d747f5555382280e85a24904d0378940ef3869eb4273571
 F src/wal.h b6063e6be1b03389372f3f32240e99b8ab92c32cdd05aa0e31b30a21e4e41654
 F src/walker.c 3ccfa8637f95355bff61144e01a615b8ef26f79c312880848da73f03367da1e6
 F src/where.c 049522adcf5426f1a8c3ed07be15e1ffa3266afd34e8e7bee64b63e2fbfad0b5
@@ -1492,7 +1492,7 @@ F test/vtab_err.test 0d4d8eb4def1d053ac7c5050df3024fd47a3fbd8
 F test/vtab_shared.test 5253bff2355a9a3f014c15337da7e177ab0ef8ad
 F test/wal.test 613efec03e517e1775d86b993a54877d2e29a477
 F test/wal2.test 6ac39b94a284ebac6efb6be93b0cdfe73ee6083f129555e3144d8a615e9900ef
-F test/wal2rewrite.test 467a66722b3e68b2c5c50f98fb62491c5f5e3f54b1d5728c7f8f1d5afe4976fe
+F test/wal2rewrite.test 6ca6f631ffcf871240beab5f02608913fd075c6d0d31310b026c8383c65c9f9c
 F test/wal3.test 2a93004bc0fb2b5c29888964024695bade278ab2
 F test/wal4.test 4744e155cd6299c6bd99d3eab1c82f77db9cdb3c
 F test/wal5.test 9c11da7aeccd83a46d79a556ad11a18d3cb15aa9
@@ -1657,7 +1657,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 16decc13af908087fb8aa34eeccf43e8da1b8f2e4b808028986d1ef08134c72c
-R 756fa931da3c4e04a97cc0362e6290b7
+P a4b02bc9388226da21b3837a20c6c7eb0d13854dde62b7136e04f4978528dc71
+R 1b4fe3016ef19de5fbb230932d1cf085
 U dan
-Z 4ba52753cca3b375d5de2490acf53ff4
+Z bb0f71cc9a0d45c0ef66e315563912f3
index d9d56c65385782843be89bd412c3862b2e9fa064..9ce9b5d7db5a518209716c7f5bd4ea2ec1ab7ae7 100644 (file)
@@ -1 +1 @@
-a4b02bc9388226da21b3837a20c6c7eb0d13854dde62b7136e04f4978528dc71
\ No newline at end of file
+9e1502e1b650217efc361732a3dfe686caa2e6352d040c73865f1faf09bf4591
\ No newline at end of file
index 54486f99691a837cb6ef4b622d051ac9e3d398f5..2cc21039dab95213f7f971f9b6682166e47b69ac 100644 (file)
--- a/src/wal.c
+++ b/src/wal.c
@@ -3549,7 +3549,7 @@ static int walRewriteChecksums(Wal *pWal, u32 iLast){
   }else{
     iCksumOff = walFrameOffset(pWal->iReCksum-1, szPage) + 16;
   }
-  rc = sqlite3OsRead(pWal->apWalFd[0], aBuf, sizeof(u32)*2, iCksumOff);
+  rc = sqlite3OsRead(pWalFd, aBuf, sizeof(u32)*2, iCksumOff);
   pWal->hdr.aFrameCksum[0] = sqlite3Get4byte(aBuf);
   pWal->hdr.aFrameCksum[1] = sqlite3Get4byte(&aBuf[sizeof(u32)]);
 
@@ -3557,14 +3557,14 @@ static int walRewriteChecksums(Wal *pWal, u32 iLast){
   pWal->iReCksum = 0;
   for(; rc==SQLITE_OK && iRead<=iLast; iRead++){
     i64 iOff = walFrameOffset(iRead, szPage);
-    rc = sqlite3OsRead(pWal->apWalFd[0], aBuf, szPage+WAL_FRAME_HDRSIZE, iOff);
+    rc = sqlite3OsRead(pWalFd, aBuf, szPage+WAL_FRAME_HDRSIZE, iOff);
     if( rc==SQLITE_OK ){
       u32 iPgno, nDbSize;
       iPgno = sqlite3Get4byte(aBuf);
       nDbSize = sqlite3Get4byte(&aBuf[4]);
 
       walEncodeFrame(pWal, iPgno, nDbSize, &aBuf[WAL_FRAME_HDRSIZE], aFrame);
-      rc = sqlite3OsWrite(pWal->apWalFd[0], aFrame, sizeof(aFrame), iOff);
+      rc = sqlite3OsWrite(pWalFd, aFrame, sizeof(aFrame), iOff);
     }
   }
 
index dea4f8c4f5f02e2789371b088ebb25ee3cf0aee1..7e3b7b17b566202bb88b094accd95b55df5cf26e 100644 (file)
@@ -71,8 +71,20 @@ foreach {tn jrnlmode} {
 
     do_test $tn.$i.3 { expr [filesize test.db-wal]  < 100000 } 1
     do_test $tn.$i.4 { expr [filesize test.db-wal2] < 100000 } 1
-  }
 
+    set sum [db eval {SELECT sum(b), md5sum(c) FROM t1}]
+
+    do_test $tn.$i.5 {
+      foreach f [glob -nocomplain test.db2*] {forcedelete $f}
+      foreach f [glob -nocomplain test.db*] {
+        forcecopy $f [string map {test.db test.db2} $f]
+      }
+
+      sqlite3 db2 test.db2
+      db2 eval {SELECT sum(b), md5sum(c) FROM t1}
+    } $sum
+    db2 close
+  }
 }