1
0
mirror of https://github.com/sqlite/sqlite.git synced 2026-10-23 21:49:02 +03:00

FTS5: Fix false-positive corrupt FTS5 index report on an INSERT into

a contentless_unindexed table.
[bugs:/info/2026-10-21T02:49:37Z|Bug 2026-10-21T02:49:37Z]

FossilOrigin-Name: 887264cd9a2ad95d808f910b4d0be04e8435382eb7640b4d4769b648b266d3a8
This commit is contained in:
drh
2026-10-23 13:41:31 +00:00
parent 0bb1247fca
commit 014644d8f2
4 changed files with 62 additions and 9 deletions

View File

@@ -675,7 +675,9 @@ static int fts5BestIndexMethod(sqlite3_vtab *pVTab, sqlite3_index_info *pInfo){
pInfo->aConstraintUsage[i].omit = 1;
}
}else if( p->usable ){
if( iCol>=0 && iCol<nCol && fts5UsePatternMatch(pConfig, p) ){
if( iCol>=0 && iCol<nCol && fts5UsePatternMatch(pConfig, p)
&& pConfig->abUnindexed[iCol]==0
){
assert( p->op==FTS5_PATTERN_LIKE || p->op==FTS5_PATTERN_GLOB );
idxStr[iIdxStr++] = p->op==FTS5_PATTERN_LIKE ? 'L' : 'G';
sqlite3_snprintf(6, &idxStr[iIdxStr], "%d", iCol);

View File

@@ -362,5 +362,56 @@ do_test 12.2 {
sqlite3_fts5_tokenize db trigram ""
} {}
#-------------------------------------------------------------------------
# LIKE and GLOB constraints on UNINDEXED columns must not be passed to
# the trigram index, as UNINDEXED columns have no entries in the index.
# Bug be50ab5692c334fd.
#
reset_db
do_execsql_test 13.0 {
CREATE VIRTUAL TABLE t1 USING fts5(a, b UNINDEXED, tokenize=trigram);
INSERT INTO t1 VALUES('xyz', 'abcdef');
INSERT INTO t1 VALUES('abcdef', 'xyz');
CREATE VIRTUAL TABLE t2 USING fts5(
a, b UNINDEXED, tokenize="trigram case_sensitive 1"
);
INSERT INTO t2 SELECT a, b FROM t1;
}
do_execsql_test 13.1 {
SELECT rowid FROM t1 WHERE b LIKE '%bcd%';
} {1}
do_execsql_test 13.2 {
SELECT rowid FROM t1 WHERE b GLOB '*bcd*';
} {1}
do_execsql_test 13.3 {
SELECT rowid FROM t1 WHERE +b LIKE '%bcd%';
} {1}
do_execsql_test 13.4 {
SELECT rowid FROM t1 WHERE a LIKE '%bcd%';
} {2}
do_execsql_test 13.5 {
SELECT rowid FROM t1 WHERE a LIKE '%bcd%' AND b LIKE '%yz%';
} {2}
do_execsql_test 13.6 {
SELECT rowid FROM t2 WHERE b GLOB '*bcd*';
} {1}
do_execsql_test 13.7 {
SELECT rowid FROM t2 WHERE b LIKE '%BCD%';
} {1}
do_eqp_test 13.8 {
SELECT * FROM t1 WHERE b LIKE ?
} {{SCAN t1 VIRTUAL TABLE INDEX 0:}}
do_eqp_test 13.9 {
SELECT * FROM t1 WHERE b GLOB ?
} {{SCAN t1 VIRTUAL TABLE INDEX 0:}}
do_eqp_test 13.10 {
SELECT * FROM t2 WHERE b GLOB ?
} {{SCAN t2 VIRTUAL TABLE INDEX 0:}}
do_eqp_test 13.11 {
SELECT * FROM t1 WHERE a LIKE ? AND b LIKE ?
} {VIRTUAL TABLE INDEX 0:L0}
finish_test

View File

@@ -1,5 +1,5 @@
C Follow\sdocumented\sbehavior\swhen\scasting\sa\szeroblob()\sto\stext\son\sa\sUTF-16\ndatabase.\s[bugs:/info/2026-10-23T12:45:59Z|bug\s2026-10-23T12:45:59Z]
D 2026-10-23T13:06:30.822
C FTS5:\sFix\sfalse-positive\scorrupt\sFTS5\sindex\sreport\son\san\sINSERT\sinto\na\scontentless_unindexed\stable.\n[bugs:/info/2026-10-21T02:49:37Z|Bug\s2026-10-21T02:49:37Z]
D 2026-10-23T13:41:31.649
F .fossil-settings/binary-glob 61195414528fb3ea9693577e1980230d78a1f8b0a54c78cf1b9b24d0a409ed6a x
F .fossil-settings/empty-dirs dbb81e8fc0401ac46a1491ab34a7f2c7c0452f2f06b54ebb845d024ca8283ef1
F .fossil-settings/ignore-glob 35175cdfcf539b2318cb04a9901442804be81cd677d8b889fcc9149c21f239ea
@@ -115,7 +115,7 @@ F ext/fts5/fts5_config.c d5df08345abc813a0b58be6b2e08ad9b3ba9be355c3ca3ae36226ff
F ext/fts5/fts5_expr.c b906c59e9e842805cc3eea4e131b822e586bb01260e542f67920c61798dcb53d
F ext/fts5/fts5_hash.c 341a08ad0153b397b819ef3d7a7959c1dc3c84a6988a431d93dece8bd62ae10e
F ext/fts5/fts5_index.c e8feafa4e8abc03536a7ac08f198f662eb5c247e9dcaf150b8b7193fa759928b
F ext/fts5/fts5_main.c 6be9bbcf6ef16e422877e9e18427c8b386c8761235e84acddd77bd254ffa2bc8
F ext/fts5/fts5_main.c 4b588e2b8218021f3985d930f9dbf4eea4155c6e9cfa997fc9bc25ee8b11e448
F ext/fts5/fts5_storage.c 1fa9f5dbbe6c3c03119cb434262bbded60a2ba19ab0be73bfe8ba3c9cffa39fd
F ext/fts5/fts5_tcl.c aed8905b1a3c6ecc94da15e9cc54d889045b9eacecc7a17b6fcc1294225f7716
F ext/fts5/fts5_test_mi.c 3074a25cb661b2301143022ef96a950618452a5b082abd9ba7b9daaf29d01537
@@ -261,7 +261,7 @@ F ext/fts5/test/fts5tokendata.test ffcb1c45a89e556abcac7044fff5e0815e7a59596c741
F ext/fts5/test/fts5tokenizer.test 738e9c3e1b338028e202d0fcd33aa39f1bd3f8444d14f9a408e8a617b1361d3f
F ext/fts5/test/fts5tokenizer2.test ddb8b10fbe4b84b2a75812671f127774c1d2e3e2bf82d2e0e4f0bb1cd8a2b2d6
F ext/fts5/test/fts5tokenizer3.test eea778f7bb7024c3e904e28915f9d53286141671b138722148be22a9c758bdc3
F ext/fts5/test/fts5trigram.test a55fde7065ae69a0f82c5a7a5bf5286a97de11ae4bff6537fd3e27ca9a01416f
F ext/fts5/test/fts5trigram.test 22fdb49ca96673bf90265fc7e9ddb91cb57710e894acad8ce1ce07221d6ecdad
F ext/fts5/test/fts5trigram2.test 6fde9de7f63a6b4aa18dc731be56dbd6be4e755c9b13dcd55479e200d1df0e61
F ext/fts5/test/fts5ubsan.test 9a2dcf399dc8d0e0de661f0d93884d1d27e5b7f0693cfceb97dd24d818df5dd2
F ext/fts5/test/fts5umlaut.test a42fe2fe6387c40c49ab27ccbd070e1ae38e07f38d05926482cc0bccac9ad602
@@ -2297,8 +2297,8 @@ F tool/warnings-clang.sh bbf6a1e685e534c92ec2bfba5b1745f34fb6f0bc2a362850723a9ee
F tool/warnings.sh a554d13f6e5cf3760f041b87939e3d616ec6961859c3245e8ef701d1eafc2ca2
F tool/win/sqlite.vsix deb315d026cc8400325c5863eef847784a219a2f
F tool/winmain.c 00c8fb88e365c9017db14c73d3c78af62194d9644feaf60e220ab0f411f3604c
P 320cb1f51382868ed576d8fa52c75672a2c3e4cee99f868385645bd9a370457a
R 0517e9b64f9f1be95cb3761b01d34e64
P 8a0296aa4db20cdcbbfaa0e4c61b5fe339b0514cf73832253ff0abd1ce59d31c
R a985a224b90b6f325d171c0f16364101
U drh
Z fe678a626872621c9456ec3e5b057ad7
Z 94e6afe38d2ae8ef5ce16498ad41fb23
# Remove this line to create a well-formed Fossil manifest.

View File

@@ -1 +1 @@
8a0296aa4db20cdcbbfaa0e4c61b5fe339b0514cf73832253ff0abd1ce59d31c
887264cd9a2ad95d808f910b4d0be04e8435382eb7640b4d4769b648b266d3a8