]> git.ipfire.org Git - thirdparty/sqlite.git/commitdiff
Fix various error handling conditions on the cell overwrite optimization.
authordrh <drh@noemail.net>
Thu, 3 May 2018 16:56:06 +0000 (16:56 +0000)
committerdrh <drh@noemail.net>
Thu, 3 May 2018 16:56:06 +0000 (16:56 +0000)
Fix a test case so that it works with the new optimization.

FossilOrigin-Name: f89b54f41405ed7e28132f66b8a0c690a087c2412c8f55790c2beabb0b521645

manifest
manifest.uuid
src/btree.c
test/pager1.test

index fb7c6552f63eccb13dfeb5a063d508fcaf84edc7..481534c3588cf4f7bc61d3b8a9239c38f2565acf 100644 (file)
--- a/manifest
+++ b/manifest
@@ -1,5 +1,5 @@
-C The\sBtCursor.info\sfields\sare\sonly\svalid\sif\sinfo.nSize!=0.
-D 2018-05-03T14:07:18.080
+C Fix\svarious\serror\shandling\sconditions\son\sthe\scell\soverwrite\soptimization.\nFix\sa\stest\scase\sso\sthat\sit\sworks\swith\sthe\snew\soptimization.
+D 2018-05-03T16:56:06.556
 F .fossil-settings/empty-dirs dbb81e8fc0401ac46a1491ab34a7f2c7c0452f2f06b54ebb845d024ca8283ef1
 F .fossil-settings/ignore-glob 35175cdfcf539b2318cb04a9901442804be81cd677d8b889fcc9149c21f239ea
 F Makefile.in 5ce9343cba9c189046f1afe6d2bcc1f68079439febc05267b98aec6ecc752439
@@ -434,7 +434,7 @@ F src/auth.c 6277d63837357549fe14e723490d6dc1a38768d71c795c5eb5c0f8a99f918f73
 F src/backup.c faf17e60b43233c214aae6a8179d24503a61e83b
 F src/bitvec.c 17ea48eff8ba979f1f5b04cc484c7bb2be632f33
 F src/btmutex.c 8acc2f464ee76324bf13310df5692a262b801808984c1b79defb2503bbafadb6
-F src/btree.c edb3c69a73cf7c0286dbe040b0ea7069e606e54fd1ee60bbe1e63e56fba0e2b7
+F src/btree.c 8faf9ebbecb98f05d75f203fdb2421e47a60f1edef3192af8fc7691cb979895c
 F src/btree.h 0866c0a08255142ea0e754aabd211c843cab32045c978a592a43152405ed0c84
 F src/btreeInt.h 620ab4c7235f43572cf3ac2ac8723cbdf68073be4d29da24897c7b77dda5fd96
 F src/build.c 0c2be5839f22aa2938f217c6c6c2120d9fc96872a546a37541a8271541cb355e
@@ -1131,7 +1131,7 @@ F test/oserror.test b32dc34f2363ef18532e3a0a7358e3e7e321974f
 F test/ossfuzz.c c4c4547e2c92ac52f10038b073a03248251a23c1c559728f63a18aeca0e79f03
 F test/ossshell.c f125c5bd16e537a2549aa579b328dd1c59905e7ab1338dfc210e755bb7b69f17
 F test/ovfl.test 199c482696defceacee8c8e0e0ef36da62726b2f
-F test/pager1.test f596d3bd53ce96e1d87d44d223d2ae6c8867dd782c425e5eb28b5721fa6aaa97
+F test/pager1.test a32ce299ed01ffb06e84a3af467ae1f3389786b316f40c4359f442c79144736b
 F test/pager2.test 67b8f40ae98112bcdba1f2b2d03ea83266418c71
 F test/pager3.test 4e9a83d6ca0838d7c602c9eb93d1357562d9059c1e02ffb138a8271020838370
 F test/pager4.test a122e9e6925d5b23b31e3dfef8c6a44bbf19590e
@@ -1727,7 +1727,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 58d14afe1e1288d114ea213458b3121e0a95670887861928858b7f143c76f789
-R b073d403d1ba3bd03f4d3e8e8927a6d3
+P 54c537eead5b08104cfaf0d5b1e2706e53d6f74be2ca02e06229024fd889fc94
+R e3474d8063bbcdfd90a9f2049be513c8
 U drh
-Z e6a7ba3bea7a5cce16673df821a14231
+Z a88b0406803dcfd2b3d768953d03cd3c
index 6323573dea7952b7971535c9e13ddcd40d63812b..2ad022bdcb41d45e207682de394e0750c51bcfda 100644 (file)
@@ -1 +1 @@
-54c537eead5b08104cfaf0d5b1e2706e53d6f74be2ca02e06229024fd889fc94
\ No newline at end of file
+f89b54f41405ed7e28132f66b8a0c690a087c2412c8f55790c2beabb0b521645
\ No newline at end of file
index 3811c59de7d8caec1429ff050831f41ad5cc5a40..9dc91fe982d4c1a9aa36e38ad353b380c600890f 100644 (file)
@@ -8176,7 +8176,9 @@ static int btreeOverwriteContent(
     if( nData<iAmt ){
       /* Mixed read data and zeros at the end.  Make a recursive call
       ** to write the zeros then fall through to write the real data */
-      btreeOverwriteContent(pPage, pDest+nData, pX, iOffset+nData, iAmt-nData);
+      int rc = btreeOverwriteContent(pPage, pDest+nData, pX, iOffset+nData,
+                                 iAmt-nData);
+      if( rc ) return rc;
       iAmt = nData;
     }
     if( memcmp(pDest, ((u8*)pX->pData) + iOffset, iAmt)!=0 ){
@@ -8219,18 +8221,19 @@ static int btreeOverwriteCell(BtCursor *pCur, const BtreePayload *pX){
     rc = btreeGetPage(pBt, ovflPgno, &pPage, 0);
     if( rc ) return rc;
     if( sqlite3PagerPageRefcount(pPage->pDbPage)!=1 ){
-      return SQLITE_CORRUPT_BKPT;
-    }
-    if( iOffset+ovflPageSize<nTotal ){
-      ovflPgno = get4byte(pPage->aData);
+      rc = SQLITE_CORRUPT_BKPT;
     }else{
-      ovflPageSize = nTotal - iOffset;
+      if( iOffset+ovflPageSize<nTotal ){
+        ovflPgno = get4byte(pPage->aData);
+      }else{
+        ovflPageSize = nTotal - iOffset;
+      }
+      rc = btreeOverwriteContent(pPage, pPage->aData+4, pX,
+                                 iOffset, ovflPageSize);
     }
-    rc = btreeOverwriteContent(pPage, pPage->aData+4, pX,
-                               iOffset, ovflPageSize);
+    sqlite3PagerUnref(pPage->pDbPage);
     if( rc ) return rc;
     iOffset += ovflPageSize;
-    sqlite3PagerUnref(pPage->pDbPage);
   }while( iOffset<nTotal );
   return SQLITE_OK;    
 }
index 42edc3d16bcbd09fef9971bc17e92b55eda59f7c..1d56fad30b2c8c8c792e20f39c2a358edaadfe07 100644 (file)
@@ -1149,7 +1149,7 @@ do_test pager1-5.5.1 {
     PRAGMA journal_mode = PERSIST;
     CREATE TABLE t3(a, b);
     INSERT INTO t3 SELECT randomblob(1500), randomblob(1500) FROM t1;
-    UPDATE t3 SET b = randomblob(1500);
+    UPDATE t3 SET b = randomblob(1501);
   }
   expr [file size test.db-journal] > 15000
 } {1}