]> git.ipfire.org Git - thirdparty/sqlite.git/commitdiff
Adjust the new truncation behavior of sqlite_dbpage(N,null) such that it causes
authordrh <>
Wed, 2 Oct 2024 16:55:27 +0000 (16:55 +0000)
committerdrh <>
Wed, 2 Oct 2024 16:55:27 +0000 (16:55 +0000)
the database to be truncated to N-1 pages.  This makes more since.  An error is
raised if N is less than 2.

FossilOrigin-Name: 7d5ff86ef7386f4f7f6a956dc0de607e61040d335c9f98d1f71e76a39f4f5e03

manifest
manifest.uuid
src/dbpage.c
tool/sqlite3-rsync.c

index 3aa5a7d760b8334b45b7cefe39a8cf2cbbe9153c..e28592bcfa11ad6346229ebf0a62984f72ae5724 100644 (file)
--- a/manifest
+++ b/manifest
@@ -1,5 +1,5 @@
-C Remove\sall\suse\sof\sthe\s"long\sdouble"\sdata\stype\sfrom\sSQLite,\sas\shardware\ssupport\nfor\slong\sdouble\sis\sincreasingly\srare\sand\sthe\suse\sof\slong\sdouble\screates\nchallenges\sfor\ssome\scompilers.
-D 2024-10-02T13:26:17.391
+C Adjust\sthe\snew\struncation\sbehavior\sof\ssqlite_dbpage(N,null)\ssuch\sthat\sit\scauses\nthe\sdatabase\sto\sbe\struncated\sto\sN-1\spages.\s\sThis\smakes\smore\ssince.\s\sAn\serror\sis\nraised\sif\sN\sis\sless\sthan\s2.
+D 2024-10-02T16:55:27.051
 F .fossil-settings/empty-dirs dbb81e8fc0401ac46a1491ab34a7f2c7c0452f2f06b54ebb845d024ca8283ef1
 F .fossil-settings/ignore-glob 35175cdfcf539b2318cb04a9901442804be81cd677d8b889fcc9149c21f239ea
 F LICENSE.md df5091916dbb40e6e9686186587125e1b2ff51f022cc334e886c19a0e9982724
@@ -714,7 +714,7 @@ F src/callback.c db3a45e376deff6a16c0058163fe0ae2b73a2945f3f408ca32cf74960b28d49
 F src/complete.c a3634ab1e687055cd002e11b8f43eb75c17da23e
 F src/ctime.c b224d3db0f28c4a5f1407c50107a0a8133bd244ff3c7f6f8cedeb896a8cf1b64
 F src/date.c 89ce1ff20512a7fa5070ba6e7dd5c171148ca7d580955795bf97c79c2456144a
-F src/dbpage.c 12e49515d67d4a59625d71f9aa42499556cfdc2e4f1ea49086e674a7f47f46e5
+F src/dbpage.c 9da735cb2eef4ab6941ddb235c8d2c2764e0bb5bd20f7ca3003be1d4ab8d49c9
 F src/dbstat.c 73362c0df0f40ad5523a6f5501224959d0976757b511299bf892313e79d14f5c
 F src/delete.c 03a77ba20e54f0f42ebd8eddf15411ed6bdb06a2c472ac4b6b336521bf7cea42
 F src/expr.c 6d5f2c38fe3ec06a7eac599dac822788b36064124e20112a844e9cd5156cb239
@@ -2174,7 +2174,7 @@ F tool/speedtest8inst1.c 7ce07da76b5e745783e703a834417d725b7d45fd
 F tool/spellsift.tcl 52b4b04dc4333c7ab024f09d9d66ed6b6f7c6eb00b38497a09f338fa55d40618 x
 F tool/split-sqlite3c.tcl 5aa60643afca558bc732b1444ae81a522326f91e1dc5665b369c54f09e20de60
 F tool/sqldiff.c 2a0987d183027c795ced13d6749061c1d2f38e24eddb428f56fa64c3a8f51e4b
-F tool/sqlite3-rsync.c 187b262035c1159b047dbfa1959c168b87b5a153b63465e8c8bd1b54fabf4460
+F tool/sqlite3-rsync.c 2f06f02ee3a28f847b3fb8c0f32e3b3296571e0f8027939b95d32df5edfe1dd9
 F tool/sqlite3_analyzer.c.in 348ba349bbdc93c9866439f9f935d7284866a2a4e6898bc906ae1204ade56918
 F tool/sqltclsh.c.in 1bcc2e9da58fadf17b0bf6a50e68c1159e602ce057210b655d50bad5aaaef898
 F tool/sqltclsh.tcl 862f4cf1418df5e1315b5db3b5ebe88969e2a784525af5fbf9596592f14ed848
@@ -2213,9 +2213,8 @@ F vsixtest/vsixtest.tcl 6195aba1f12a5e10efc2b8c0009532167be5e301abe5b31385638080
 F vsixtest/vsixtest.vcxproj.data 2ed517e100c66dc455b492e1a33350c1b20fbcdc
 F vsixtest/vsixtest.vcxproj.filters 37e51ffedcdb064aad6ff33b6148725226cd608e
 F vsixtest/vsixtest_TemporaryKey.pfx e5b1b036facdb453873e7084e1cae9102ccc67a0
-P eb5277e490a9b48c865f2dc449cdb8f1b604e233737e492abb4f2f7101a6715b 11d6a89e4a25c3f884ff617036d239dc42522859400cd1f4674634f6c7adbb02
-R dd2610993cca357884642ff1a0c9d8c4
-T +closed 11d6a89e4a25c3f884ff617036d239dc42522859400cd1f4674634f6c7adbb02
+P 761d8fd18b0ee8681b12998f01a2eca1b796807a5174a1270cfb9bdc841424ac
+R afa8cb87d393983234687bde8f6e9625
 U drh
-Z 3a98d9548ba7ad8d74362f910ad4f724
+Z 3ddb58c2554e681f7603c7c59106deb3
 # Remove this line to create a well-formed Fossil manifest.
index dde70a7d00478cd29c827f0d6dc6fce5ff474375..6b9a9877b242812f66c2f3cdaa8925c623489894 100644 (file)
@@ -1 +1 @@
-761d8fd18b0ee8681b12998f01a2eca1b796807a5174a1270cfb9bdc841424ac
+7d5ff86ef7386f4f7f6a956dc0de607e61040d335c9f98d1f71e76a39f4f5e03
index 42b24f9b8d8e04dea2fa7e8eff3cd086b1bbc29e..136c8b0b3921adc23ca4514d57d7c3e7eef67b06 100644 (file)
@@ -375,7 +375,9 @@ static int dbpageUpdate(
   if( sqlite3_value_type(argv[3])!=SQLITE_BLOB 
    || sqlite3_value_bytes(argv[3])!=szPage
   ){
-    if( sqlite3_value_type(argv[3])==SQLITE_NULL && isInsert ){
+    if( sqlite3_value_type(argv[3])==SQLITE_NULL && isInsert && pgno>1 ){
+      /* "INSERT INTO dbpage($PGNO,NULL)" causes page number $PGNO and
+      ** all subsequent pages to be deleted. */
       if( iDb>=pTab->nTrunc ){
         testcase( pTab->aTrunc!=0 );
         pTab->aTrunc = sqlite3_realloc(pTab->aTrunc, (iDb+1)*sizeof(Pgno));
@@ -387,6 +389,7 @@ static int dbpageUpdate(
           return SQLITE_NOMEM;
         }
       }
+      pgno--;
       pTab->aTrunc[iDb] = pgno;
     }else{
       zErr = "bad page value";
index 1be206a7583909cd6d2dbcaf479625a42d4dbc95..216390c18245e8566e62cb6d3c67666702034efb 100644 (file)
@@ -1456,15 +1456,18 @@ static void replicaSide(SQLiteRsync *p){
         }else if( p->nErr ){
           runSql(p, "ROLLBACK");
         }else{
-          int rc;
-          sqlite3_bind_int64(pIns, 1, nOPage);
-          sqlite3_bind_null(pIns, 2);
-          rc = sqlite3_step(pIns);
-          if( rc!=SQLITE_DONE ){
-            reportError(p, "SQL statement [%s] failed (pgno=%u, data=NULL): %s",
-                   sqlite3_sql(pIns), nOPage, sqlite3_errmsg(p->db));
+          if( nOPage<0xffffffff ){
+            int rc;
+            sqlite3_bind_int64(pIns, 1, nOPage+1);
+            sqlite3_bind_null(pIns, 2);
+            rc = sqlite3_step(pIns);
+            if( rc!=SQLITE_DONE ){
+              reportError(p,
+                  "SQL statement [%s] failed (pgno=%u, data=NULL): %s",
+                  sqlite3_sql(pIns), nOPage, sqlite3_errmsg(p->db));
+            }
+            sqlite3_reset(pIns);
           }
-          sqlite3_reset(pIns);
           p->nPage = nOPage;
           runSql(p, "COMMIT");
         }