In fts5, avoid starting a new merge of level L if there exists already an ongoing merge of a level less than L.

FossilOrigin-Name: 350c6e75ce3c1e81458d1baa73045df489284206e8b279ab3c2f5e3d011c262a
This commit is contained in:
dan 2024-09-30 17:28:45 +00:00
parent 54fd01c4ab
commit d5838eaa42
4 changed files with 69 additions and 12 deletions

View 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(

View 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

View File

@ -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.

View File

@ -1 +1 @@
76b6331e6a705a420a64820a18214f07cf4c1d5151e7158d6fff09964e63f352
350c6e75ce3c1e81458d1baa73045df489284206e8b279ab3c2f5e3d011c262a