diff --git a/mysql-test/main/fulltext.result b/mysql-test/main/fulltext.result index 233dd549aae3f..0d3b54978ad22 100644 --- a/mysql-test/main/fulltext.result +++ b/mysql-test/main/fulltext.result @@ -788,3 +788,24 @@ CREATE TEMPORARY TABLE tmp (a TEXT) ENGINE=Aria; ALTER TABLE tmp ADD FULLTEXT (a); INSERT INTO tmp VALUES ('foo'); DROP TABLE tmp; +# +# MDEV-32383 Server crashes in Item_func_match::init_search on 2nd execution of PS +# +CREATE TABLE t (a VARCHAR(255), FULLTEXT(a)); +INSERT INTO t VALUES ('foo'),('bar'); +CREATE VIEW v AS +SELECT MATCH (a) AGAINST ('MariaDB' IN NATURAL LANGUAGE MODE) AS f +FROM t +WHERE MATCH (a) AGAINST ('MariaDB' IN NATURAL LANGUAGE MODE) > 0 +ORDER BY f; +PREPARE stmt FROM "SELECT f FROM v ORDER BY f"; +EXECUTE stmt; +f +EXECUTE stmt; +f +DEALLOCATE PREPARE stmt; +DROP VIEW v; +DROP TABLE t; +# +# End of 10.11 tests +# diff --git a/mysql-test/main/fulltext.test b/mysql-test/main/fulltext.test index 09d241907d70e..85858e7b3d627 100644 --- a/mysql-test/main/fulltext.test +++ b/mysql-test/main/fulltext.test @@ -736,3 +736,28 @@ CREATE TEMPORARY TABLE tmp (a TEXT) ENGINE=Aria; ALTER TABLE tmp ADD FULLTEXT (a); INSERT INTO tmp VALUES ('foo'); DROP TABLE tmp; + +--echo # +--echo # MDEV-32383 Server crashes in Item_func_match::init_search on 2nd execution of PS +--echo # + +CREATE TABLE t (a VARCHAR(255), FULLTEXT(a)); +INSERT INTO t VALUES ('foo'),('bar'); + +CREATE VIEW v AS + SELECT MATCH (a) AGAINST ('MariaDB' IN NATURAL LANGUAGE MODE) AS f + FROM t + WHERE MATCH (a) AGAINST ('MariaDB' IN NATURAL LANGUAGE MODE) > 0 + ORDER BY f; + +PREPARE stmt FROM "SELECT f FROM v ORDER BY f"; +EXECUTE stmt; +EXECUTE stmt; +DEALLOCATE PREPARE stmt; + +DROP VIEW v; +DROP TABLE t; + +--echo # +--echo # End of 10.11 tests +--echo # diff --git a/sql/item_func.h b/sql/item_func.h index c668bbfe76826..1cbe08b6b680e 100644 --- a/sql/item_func.h +++ b/sql/item_func.h @@ -3851,6 +3851,7 @@ class Item_func_match :public Item_real_func ft_handler= 0; concat_ws= 0; table= 0; // required by Item_func_match::eq() + master= 0; DBUG_VOID_RETURN; } bool is_expensive_processor(void *arg) override { return TRUE; }