summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--mysql-test/r/subselect.result8
-rw-r--r--mysql-test/t/subselect.test10
-rw-r--r--sql/ha_myisam.h1
-rw-r--r--sql/handler.h1
-rw-r--r--sql/opt_range.h2
-rw-r--r--sql/sql_select.cc2
6 files changed, 21 insertions, 3 deletions
diff --git a/mysql-test/r/subselect.result b/mysql-test/r/subselect.result
index 2d686285050..f3c4be847ea 100644
--- a/mysql-test/r/subselect.result
+++ b/mysql-test/r/subselect.result
@@ -2003,3 +2003,11 @@ a b (select max(b) from t2 where t1.b=t2.a)
2 4 NULL
2 5 NULL
drop table t1, t2;
+create table t1 (id int);
+create table t2 (id int, body text, fulltext (body));
+insert into t1 values(1),(2),(3);
+insert into t2 values (1,'test'), (2,'mysql'), (3,'test'), (4,'test');
+select count(distinct id) from t1 where id in (select id from t2 where match(body) against ('mysql' in boolean mode));
+count(distinct id)
+1
+drop table t2,t1;
diff --git a/mysql-test/t/subselect.test b/mysql-test/t/subselect.test
index 976ce7bf6b0..18f7d96b236 100644
--- a/mysql-test/t/subselect.test
+++ b/mysql-test/t/subselect.test
@@ -1299,3 +1299,13 @@ insert into t1 values (1,1),(1,2),(1,3),(2,4),(2,5);
insert into t2 values (1,3),(2,1);
select distinct a,b, (select max(b) from t2 where t1.b=t2.a) from t1 order by t1.b;
drop table t1, t2;
+
+#
+# subqueries with full text search
+#
+create table t1 (id int);
+create table t2 (id int, body text, fulltext (body));
+insert into t1 values(1),(2),(3);
+insert into t2 values (1,'test'), (2,'mysql'), (3,'test'), (4,'test');
+select count(distinct id) from t1 where id in (select id from t2 where match(body) against ('mysql' in boolean mode));
+drop table t2,t1;
diff --git a/sql/ha_myisam.h b/sql/ha_myisam.h
index 6fde84d6f6f..972d6b18e19 100644
--- a/sql/ha_myisam.h
+++ b/sql/ha_myisam.h
@@ -81,7 +81,6 @@ class ha_myisam: public handler
int index_first(byte * buf);
int index_last(byte * buf);
int index_next_same(byte *buf, const byte *key, uint keylen);
- int index_end() { ft_handler=NULL; return 0; }
int ft_init()
{
if (!ft_handler)
diff --git a/sql/handler.h b/sql/handler.h
index 252861e5c37..245defe61e0 100644
--- a/sql/handler.h
+++ b/sql/handler.h
@@ -372,6 +372,7 @@ public:
virtual int read_range_next();
int compare_key(key_range *range);
virtual int ft_init() { return HA_ERR_WRONG_COMMAND; }
+ void ft_end() { ft_handler=NULL; }
virtual FT_INFO *ft_init_ext(uint flags,uint inx,const byte *key,
uint keylen)
{ return NULL; }
diff --git a/sql/opt_range.h b/sql/opt_range.h
index 9b2e9e45bac..5a2044a59f4 100644
--- a/sql/opt_range.h
+++ b/sql/opt_range.h
@@ -154,7 +154,7 @@ class FT_SELECT: public QUICK_SELECT {
public:
FT_SELECT(THD *thd, TABLE *table, uint key):
QUICK_SELECT (thd, table, key, 1) { init(); }
-
+ ~FT_SELECT() { file->ft_end(); }
int init() { return error= file->ft_init(); }
int get_next() { return error= file->ft_read(record); }
};
diff --git a/sql/sql_select.cc b/sql/sql_select.cc
index 06731d26073..5809bd2b7be 100644
--- a/sql/sql_select.cc
+++ b/sql/sql_select.cc
@@ -3834,7 +3834,7 @@ JOIN::join_free(bool full)
DBUG_ENTER("JOIN::join_free");
full= full || (!select_lex->uncacheable &&
- !thd->lex->describe);
+ !thd->lex->describe); // do not cleanup too early on EXPLAIN
if (table)
{