Commit a3b4065d authored by Georgi Kodinov's avatar Georgi Kodinov

Bug #45989 take 2 : memory leak after explain encounters an

error in the query.

Fixes a leak after materializing a GROUP BY subquery to a 
temp table when the subquery has a blob column in the SELECT
list.
Fixed by correctly destructing temporary buffers after doing
the conversion.
parent 22cff392
...@@ -4602,4 +4602,16 @@ SELECT 1 FROM t1 GROUP BY ...@@ -4602,4 +4602,16 @@ SELECT 1 FROM t1 GROUP BY
1 1
1 1
DROP TABLE t1; DROP TABLE t1;
#
# Bug #45989 take 2 : memory leak after explain encounters an
# error in the query
#
CREATE TABLE t1(a LONGTEXT);
INSERT INTO t1 VALUES (repeat('a',@@global.max_allowed_packet));
INSERT INTO t1 VALUES (repeat('b',@@global.max_allowed_packet));
EXPLAIN EXTENDED SELECT DISTINCT 1 FROM t1,
(SELECT DISTINCTROW a AS away FROM t1 GROUP BY a WITH ROLLUP) AS d1
WHERE t1.a = d1.a;
ERROR 42S22: Unknown column 'd1.a' in 'where clause'
DROP TABLE t1;
End of 5.1 tests. End of 5.1 tests.
...@@ -3585,4 +3585,21 @@ SELECT 1 FROM t1 GROUP BY ...@@ -3585,4 +3585,21 @@ SELECT 1 FROM t1 GROUP BY
(SELECT LAST_INSERT_ID() FROM t1 ORDER BY MIN(a) ASC LIMIT 1); (SELECT LAST_INSERT_ID() FROM t1 ORDER BY MIN(a) ASC LIMIT 1);
DROP TABLE t1; DROP TABLE t1;
--echo #
--echo # Bug #45989 take 2 : memory leak after explain encounters an
--echo # error in the query
--echo #
CREATE TABLE t1(a LONGTEXT);
INSERT INTO t1 VALUES (repeat('a',@@global.max_allowed_packet));
INSERT INTO t1 VALUES (repeat('b',@@global.max_allowed_packet));
--error ER_BAD_FIELD_ERROR
EXPLAIN EXTENDED SELECT DISTINCT 1 FROM t1,
(SELECT DISTINCTROW a AS away FROM t1 GROUP BY a WITH ROLLUP) AS d1
WHERE t1.a = d1.a;
DROP TABLE t1;
--echo End of 5.1 tests. --echo End of 5.1 tests.
...@@ -5824,6 +5824,8 @@ JOIN::make_simple_join(JOIN *parent, TABLE *tmp_table) ...@@ -5824,6 +5824,8 @@ JOIN::make_simple_join(JOIN *parent, TABLE *tmp_table)
const_table_map= 0; const_table_map= 0;
tmp_table_param.field_count= tmp_table_param.sum_func_count= tmp_table_param.field_count= tmp_table_param.sum_func_count=
tmp_table_param.func_count= 0; tmp_table_param.func_count= 0;
if (tmp_table_param.copy_field)
delete [] tmp_table_param.copy_field;
tmp_table_param.copy_field= tmp_table_param.copy_field_end=0; tmp_table_param.copy_field= tmp_table_param.copy_field_end=0;
first_record= sort_and_group=0; first_record= sort_and_group=0;
send_records= (ha_rows) 0; send_records= (ha_rows) 0;
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment