summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--sql/sql_select.cc6
-rw-r--r--tests/mysql_client_test.c7
2 files changed, 9 insertions, 4 deletions
diff --git a/sql/sql_select.cc b/sql/sql_select.cc
index abdc79c1bf3..db8a63eeb48 100644
--- a/sql/sql_select.cc
+++ b/sql/sql_select.cc
@@ -12960,6 +12960,12 @@ return_zero_rows(JOIN *join, select_result *result, List<TABLE_LIST> &tables,
if (!send_error)
result->send_eof(); // Should be safe
}
+ /*
+ JOIN::join_free() must be called after the virtual method
+ select::send_result_set_metadata() returned control since
+ implementation of this method could use data strutcures
+ that are released by the method JOIN::join_free().
+ */
join->join_free();
DBUG_RETURN(0);
diff --git a/tests/mysql_client_test.c b/tests/mysql_client_test.c
index acd9b61327b..69e451c3019 100644
--- a/tests/mysql_client_test.c
+++ b/tests/mysql_client_test.c
@@ -19967,6 +19967,9 @@ static void test_mdev24827()
int rc;
MYSQL_STMT *stmt;
unsigned long cursor = CURSOR_TYPE_READ_ONLY;
+ const char* query=
+ "SELECT t2.c1 AS c1 FROM t1 LEFT JOIN t2 ON t1.c1 = t2.c1 "
+ "WHERE EXISTS (SELECT 1 FROM t1 WHERE c2 = -1) ORDER BY c1";
myheader("test_mdev24827");
@@ -19991,10 +19994,6 @@ static void test_mdev24827()
"SELECT seq, seq FROM seq_1_to_20000");
myquery(rc);
- const char* query=
- "SELECT t2.c1 AS c1 FROM t1 LEFT JOIN t2 ON t1.c1 = t2.c1 "
- "WHERE EXISTS (SELECT 1 FROM t1 WHERE c2 = -1) ORDER BY c1";
-
stmt= mysql_stmt_init(mysql);
check_stmt(stmt);