mirror of
https://github.com/MariaDB/server.git
synced 2025-07-30 16:24:05 +03:00
Bug #47930: MATCH IN BOOLEAN MODE returns too many results
inside subquery Re-setting a fulltext index was a no-operation if not all the matches of a search were consumed by reading them. This was preventing a joined table using a fulltext index in a subquery that requires only 1 row of output (e.g. EXISTS) from working correctly because the second execution of the sub-query has the fulltext index cursor in a wrong state and was not finding results. Fixed by making the re-init code _ftb_init_index_search() to re-set open cursors in addition to depleted ones.
This commit is contained in:
@ -484,3 +484,44 @@ PREPARE s FROM
|
||||
EXECUTE s;
|
||||
DEALLOCATE PREPARE s;
|
||||
DROP TABLE t1;
|
||||
|
||||
--echo #
|
||||
--echo # Bug #47930: MATCH IN BOOLEAN MODE returns too many results
|
||||
--echo # inside subquery
|
||||
--echo #
|
||||
|
||||
CREATE TABLE t1 (a int);
|
||||
INSERT INTO t1 VALUES (1), (2);
|
||||
|
||||
CREATE TABLE t2 (a int, b2 char(10), FULLTEXT KEY b2 (b2));
|
||||
INSERT INTO t2 VALUES (1,'Scargill');
|
||||
|
||||
CREATE TABLE t3 (a int, b int);
|
||||
INSERT INTO t3 VALUES (1,1), (2,1);
|
||||
|
||||
--echo # t2 should use full text index
|
||||
EXPLAIN
|
||||
SELECT count(*) FROM t1 WHERE
|
||||
not exists(
|
||||
SELECT 1 FROM t2, t3
|
||||
WHERE t3.a=t1.a AND MATCH(b2) AGAINST('scargill' IN BOOLEAN MODE)
|
||||
);
|
||||
|
||||
--echo # should return 0
|
||||
SELECT count(*) FROM t1 WHERE
|
||||
not exists(
|
||||
SELECT 1 FROM t2, t3
|
||||
WHERE t3.a=t1.a AND MATCH(b2) AGAINST('scargill' IN BOOLEAN MODE)
|
||||
);
|
||||
|
||||
--echo # should return 0
|
||||
SELECT count(*) FROM t1 WHERE
|
||||
not exists(
|
||||
SELECT 1 FROM t2 IGNORE INDEX (b2), t3
|
||||
WHERE t3.a=t1.a AND MATCH(b2) AGAINST('scargill' IN BOOLEAN MODE)
|
||||
);
|
||||
|
||||
DROP TABLE t1,t2,t3;
|
||||
|
||||
|
||||
--echo End of 5.1 tests
|
||||
|
Reference in New Issue
Block a user