Fix an fts5 problem causing auxiliary functions to see an incorrect list of matches in some cases when the query contains a NEAR expression. Report [bugs:/info/2026-10-22T16:41:04Z | 2026-10-22T16:41:04Z].

FossilOrigin-Name: fcddc5ab9ab46852de1500430e16e04739341266651703a868138d666ca45cd6
This commit is contained in:
dan committed 2026-10-24 19:50:13 +00:00
1 parent 01f9950f87
commit 6de9972df6
4 files changed
+43 -8

No files matched your search

+7
View File
@@ -940,6 +940,13 @@ static int fts5ExprNearTest(
if( i==pNear->nPhrase && (i==1 || fts5ExprNearIsMatch(pRc, pNear)) ){
return 1;
}
/* Not a match. Clear the position lists of all phrases, as some may
** have been populated before the loop above exited early, and others
** may still contain data left over from a previous row. */
for(i=0; i<pNear->nPhrase; i++){
pNear->apPhrase[i]->poslist.n = 0;
}
return 0;
}
}
+28
View File
@@ -80,4 +80,32 @@ do_execsql_test 2.1 {
SELECT count(*) FROM t WHERE t MATCH 'NEAR(aaa aaa, 4)';
} {1}
#-------------------------------------------------------------------------
# Check that if a NEAR group does not match a row that is matched by
# another branch of an OR, the auxiliary functions do not see stale or
# partially populated position lists for the phrases of the NEAR group.
#
reset_db
do_execsql_test 3.0 {
CREATE VIRTUAL TABLE t1 USING fts5(a, b);
INSERT INTO t1(rowid, a, b) VALUES (1, 'one', 'h e d c');
INSERT INTO t1(rowid, a, b) VALUES (2, 'r h c', 'p q s t u');
}
do_execsql_test 3.1 {
SELECT rowid, highlight(t1, 1, '[', ']') FROM t1('b : NEAR(h c, 2) OR r');
} {1 {[h] e d [c]} 2 {p q s t u}}
do_execsql_test 3.2 {
UPDATE t1 SET b = 'x' WHERE rowid = 2;
SELECT rowid, snippet(t1, 1, '[', ']', '..', 3)
FROM t1('b : NEAR(h c, 2) OR r');
} {1 {[h] e d..} 2 x}
do_execsql_test 3.3 {
CREATE VIRTUAL TABLE t2 USING fts5(a);
INSERT INTO t2(a) VALUES ('r h d c');
SELECT highlight(t2, 0, '[', ']') FROM t2('NEAR(h "c d") OR r');
} {{[r] h d c}}
finish_test
+7 -7
View File
@@ -1,5 +1,5 @@
C Fix\ssome\scases\swhere\sthe\slist\sof\smatches\smade\savailable\sto\sauxilary\sfts5\sfunctions\swas\snot\scorrect.\sReport\s[bugs:/info/2026-10-23T02:22:13Z\s|\s2026-10-23T02:22:13Z].
D 2026-10-24T19:30:11.421
C Fix\san\sfts5\sproblem\scausing\sauxiliary\sfunctions\sto\ssee\san\sincorrect\slist\sof\smatches\sin\ssome\scases\swhen\sthe\squery\scontains\sa\sNEAR\sexpression.\sReport\s[bugs:/info/2026-10-22T16:41:04Z\s|\s2026-10-22T16:41:04Z].
D 2026-10-24T19:50:13.835
F .fossil-settings/binary-glob 61195414528fb3ea9693577e1980230d78a1f8b0a54c78cf1b9b24d0a409ed6a x
F .fossil-settings/empty-dirs dbb81e8fc0401ac46a1491ab34a7f2c7c0452f2f06b54ebb845d024ca8283ef1
F .fossil-settings/ignore-glob 35175cdfcf539b2318cb04a9901442804be81cd677d8b889fcc9149c21f239ea
@@ -112,7 +112,7 @@ F ext/fts5/fts5Int.h 8d98f8e180fe28d6067e240ed45b9011735d29d5cfb5bac194e1e376baa
F ext/fts5/fts5_aux.c 022066fe72bc15357cd3c3e620b6c566d7e030df859bae65bfc4649591b69d35
F ext/fts5/fts5_buffer.c dcc3f0352339fe79c9d8abbc1c2009bc3469206467880bf43558447ef4f846fb
F ext/fts5/fts5_config.c d5df08345abc813a0b58be6b2e08ad9b3ba9be355c3ca3ae36226ffea760876f
F ext/fts5/fts5_expr.c 514f5f56fd6a7294d4cea7a2e077ccd5865c8ced2ad1d7fb7a77e6b309620100
F ext/fts5/fts5_expr.c 77e1a5e4aa11209d38f488afeb7ee8a96b92c782154d67dedd5ec3c8a36f45aa
F ext/fts5/fts5_hash.c 341a08ad0153b397b819ef3d7a7959c1dc3c84a6988a431d93dece8bd62ae10e
F ext/fts5/fts5_index.c e8feafa4e8abc03536a7ac08f198f662eb5c247e9dcaf150b8b7193fa759928b
F ext/fts5/fts5_main.c 4b588e2b8218021f3985d930f9dbf4eea4155c6e9cfa997fc9bc25ee8b11e448
@@ -218,7 +218,7 @@ F ext/fts5/test/fts5merge2.test 3ebad1a59d6ad3fb66eff6523a09e95dc6367cbefb3cd731
F ext/fts5/test/fts5misc.test 23e7f56dc89f26624073f4e07ec15d484a2196ff7c5da20f8fd9f5ef282a7749
F ext/fts5/test/fts5multi.test a15bc91cdb717492e6e1b66fec1c356cb57386b980c7ba5af1915f97fe878581
F ext/fts5/test/fts5multiclient.test 5ff811c028d6108045ffef737f1e9f05028af2458e456c0937c1d1b8dea56d45
F ext/fts5/test/fts5near.test b173a56a3c45ac9fdd1626db2ddf923c42632489a4ccedfe68a806c1a0734286
F ext/fts5/test/fts5near.test b370d30b899ebf2ff355ddd7716d3005d5ed648bd6efaab10645b57f7087c8dc
F ext/fts5/test/fts5onepass.test b56d4109e841c2bc83555c162515748780ea6e0c455c54cf4afd4bd940d14b84
F ext/fts5/test/fts5optimize.test 264b9101721c17d06d1d174feb743fda3ddc89fad41dee980fef821428258e47
F ext/fts5/test/fts5optimize2.test 795d4ae5f66a7239cf8d5aef4c2ea96aeb8bcd907bd9be0cfe22064fc71a44ed
@@ -2301,8 +2301,8 @@ F tool/warnings-clang.sh bbf6a1e685e534c92ec2bfba5b1745f34fb6f0bc2a362850723a9ee
F tool/warnings.sh a554d13f6e5cf3760f041b87939e3d616ec6961859c3245e8ef701d1eafc2ca2
F tool/win/sqlite.vsix deb315d026cc8400325c5863eef847784a219a2f
F tool/winmain.c 00c8fb88e365c9017db14c73d3c78af62194d9644feaf60e220ab0f411f3604c
P 0ce909f57ad48cd1387785c7931a355954f4162396f19d364c5015095d91ef2f
R 04bd5a0bab71e5572705ab87661d8a57
P 16ba33e6dffaf830f40cb13c1357dea33abf6de233e22e15f2caed42ee8ffe7f
R 35e20b48298ccf2e4111190b65e6b478
U dan
Z 3db0f228af9a0f4fcb8848224bbefe0e
Z f1a13dc8f7c5e03ba63aaa4eaf866104
# Remove this line to create a well-formed Fossil manifest.
+1 -1
View File
@@ -1 +1 @@
16ba33e6dffaf830f40cb13c1357dea33abf6de233e22e15f2caed42ee8ffe7f
fcddc5ab9ab46852de1500430e16e04739341266651703a868138d666ca45cd6