]> git.ipfire.org Git - thirdparty/sqlite.git/commitdiff
In fts5, avoid starting a new merge of level L if there exists already an ongoing...
authordan <Dan Kennedy>
Mon, 30 Sep 2024 17:28:45 +0000 (17:28 +0000)
committerdan <Dan Kennedy>
Mon, 30 Sep 2024 17:28:45 +0000 (17:28 +0000)
FossilOrigin-Name: 350c6e75ce3c1e81458d1baa73045df489284206e8b279ab3c2f5e3d011c262a

ext/fts5/fts5_index.c
ext/fts5/test/fts5contentless5.test
manifest
manifest.uuid

index 4363305a56fa60406b9c474ffef850b7a4407e99..a51ae19e7227bb9d804e0fa20e5da2cd2bcded38 100644 (file)
@@ -4889,6 +4889,11 @@ static int fts5IndexFindDeleteMerge(Fts5Index *p, Fts5Structure *pStruct){
           nBest = nPercent;
         }
       }
+
+      /* If pLvl is already the input level to an ongoing merge, look no
+      ** further for a merge candidate. The caller should be allowed to
+      ** continue merging from pLvl first.  */
+      if( pLvl->nMerge ) break;
     }
   }
   return iRet;
@@ -8813,7 +8818,7 @@ static int fts5structConnectMethod(
 
 /*
 ** We must have a single struct=? constraint that will be passed through
-** into the xFilter method.  If there is no valid stmt=? constraint,
+** into the xFilter method.  If there is no valid struct=? constraint,
 ** then return an SQLITE_CONSTRAINT error.
 */
 static int fts5structBestIndexMethod(
index 3563678868f8cfaca5e59ed6c4ac0d187132cfc4..86d075328624f1db2b52a93310eac5418181a96a 100644 (file)
@@ -35,8 +35,8 @@ do_execsql_test 1.01 {
 }
 
 # explain_i "UPDATE t1 SET a='a' WHERE t1.rowid=1"    
-breakpoint
-explain_i "UPDATE t1 SET a='a' FROM t2 WHERE t1.rowid=1 AND b IS NULL"     
+#breakpoint
+#explain_i "UPDATE t1 SET a='a' FROM t2 WHERE t1.rowid=1 AND b IS NULL"     
 
 #breakpoint
 #explain_i "UPDATE t1 SET a='a' WHERE b IS NULL AND rowid=?"
@@ -56,4 +56,56 @@ foreach {tn up err} {
   do_catchsql_test 1.$tn $up $res($err)
 }
 
+#-------------------------------------------------------------------------
+reset_db
+
+proc random {n} { expr {abs(int(rand()*$n))} }
+proc select_one {list} {
+  set n [llength $list]
+  lindex $list [random $n]
+}
+proc vocab {} {
+  list abc def ghi jkl mno pqr stu vwx yza
+}
+proc term {} {
+  select_one [vocab]
+}
+proc document {} {
+  set nTerm [expr [random 3] + 7]
+  set doc ""
+  for {set ii 0} {$ii < $nTerm} {incr ii} {
+    lappend doc [term]
+  }
+  set doc
+}
+db func document document
+
+do_execsql_test 2.0 {
+  CREATE VIRTUAL TABLE ft USING fts5(a, contentless_delete=1, content='');
+  INSERT INTO ft(ft, rank) VALUES('pgsz', 64);
+}
+
+do_test 2.1 {
+  for {set ii 1} {$ii < 12} {incr ii} {
+    db transaction {
+      for {set jj 0} {$jj < 10} {incr jj} {
+        set doc [document]
+        execsql { INSERT INTO ft VALUES($doc); }
+      }
+    }
+  }
+} {}
+
+do_test 2.2 {
+  foreach r [db eval {SELECT rowid FROM ft}] {
+    execsql { DELETE FROM ft WHERE rowid=$r }
+  }
+} {}
+
+set doc [document]
+do_execsql_test 2.3 {
+  INSERT INTO ft VALUES($doc)
+}
+
+
 finish_test
index 7566dedc21223fc849457d40856a5ff6b119963e..77ea93c2618b0f11b35cbf108f68d7df1410d7c5 100644 (file)
--- a/manifest
+++ b/manifest
@@ -1,5 +1,5 @@
-C Fix\sthe\sCLI\sso\sthat\sthe\s--bom\soption\sonly\soutputs\sa\ssingle\sBOM,\snot\stwo.
-D 2024-09-28T19:52:38.443
+C In\sfts5,\savoid\sstarting\sa\snew\smerge\sof\slevel\sL\sif\sthere\sexists\salready\san\songoing\smerge\sof\sa\slevel\sless\sthan\sL.
+D 2024-09-30T17:28:45.511
 F .fossil-settings/empty-dirs dbb81e8fc0401ac46a1491ab34a7f2c7c0452f2f06b54ebb845d024ca8283ef1
 F .fossil-settings/ignore-glob 35175cdfcf539b2318cb04a9901442804be81cd677d8b889fcc9149c21f239ea
 F LICENSE.md df5091916dbb40e6e9686186587125e1b2ff51f022cc334e886c19a0e9982724
@@ -99,7 +99,7 @@ F ext/fts5/fts5_buffer.c 0eec58bff585f1a44ea9147eae5da2447292080ea435957f7488c70
 F ext/fts5/fts5_config.c da21548ddbc1a457cb42545f527065221ede8ada6a734891b8c34317a7a9506b
 F ext/fts5/fts5_expr.c 9a56f53700d1860f0ee2f373c2b9074eaf2a7aa0637d0e27a6476de26a3fee33
 F ext/fts5/fts5_hash.c adda4272be401566a6e0ba1acbe70ee5cb97fce944bc2e04dc707152a0ec91b1
-F ext/fts5/fts5_index.c 571483823193f09439356741669aa8c81da838ae6f5e1bfa7517f7ee2fb3addd
+F ext/fts5/fts5_index.c 368a968570ce12ba40223e284a588d9f93ee23a0133727f0df1fcd64086b1fb6
 F ext/fts5/fts5_main.c 4503498d3453e29a3cd89dacaba029011e89cb8c481a6241611d106e7a369bd4
 F ext/fts5/fts5_storage.c 3332497823c3d171cf56379f2bd8c971ce15a19aadacff961106462022c92470
 F ext/fts5/fts5_tcl.c 4db9258a7882c5eac0da4433042132aaf15b87dd1e1636c7a6ca203abd2c8bfe
@@ -145,7 +145,7 @@ F ext/fts5/test/fts5contentless.test 606f063b29ba0f46d4b79aa36cdd1ef4dab5de53eae
 F ext/fts5/test/fts5contentless2.test 70ffe6c611d8f278240da56734df8a77948f04e2739b358439e9bdcf56ced35f
 F ext/fts5/test/fts5contentless3.test 75eaae5ad6b284ee447788943974d323228f27cc35a1681da997135cff95bc6a
 F ext/fts5/test/fts5contentless4.test ec34dc69ef474ca9997dae6d91e072906e0e9a5a4b05ea89964c863833b6eff8
-F ext/fts5/test/fts5contentless5.test 40cdcb4fe751672450829c5a96bd32c25fc2f6076279dd2ce5c58ac9a390132a
+F ext/fts5/test/fts5contentless5.test 38cd0392c730dc7090c550321ce3c24ba4c392bc97308b51a4180e9959dca7b5
 F ext/fts5/test/fts5corrupt.test 6485f721b88ba355ca5d701e7ee87a4efa3ea578d8e6adb26f51ef956c8328bd
 F ext/fts5/test/fts5corrupt2.test 335911e3f68b9625d850325f9e29a128db3f4276a8c9d4e32134580da8f924c4
 F ext/fts5/test/fts5corrupt3.test 4fc3bf129f1616bea00884a23fd9d7b0e46d01791d2b57fe8d68ac36e8d3ff7c
@@ -2213,8 +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 e815055b321085deda8607ac3279ef1a1c890fe3bf9d9b9c0a74028e87857a7d
-R c0b23dfcab02e83590bbedcac610fa7b
-U drh
-Z 5a1528ca859870969ffba6e26496a443
+P 76b6331e6a705a420a64820a18214f07cf4c1d5151e7158d6fff09964e63f352
+R af602edd5730d15273eb424f12f293da
+U dan
+Z 7c2ca47bd5a0ad794a2bc7691bf0167e
 # Remove this line to create a well-formed Fossil manifest.
index f56b36fa0bce699b2bc0ebea550f86d1d7544749..35fff3b926f94a33349193662e394af745e58cc6 100644 (file)
@@ -1 +1 @@
-76b6331e6a705a420a64820a18214f07cf4c1d5151e7158d6fff09964e63f352
+350c6e75ce3c1e81458d1baa73045df489284206e8b279ab3c2f5e3d011c262a