diff options
author | Sergei Petrunia <psergey@askmonty.org> | 2015-10-06 18:03:10 +0300 |
---|---|---|
committer | Sergei Petrunia <psergey@askmonty.org> | 2015-10-06 18:03:10 +0300 |
commit | d6371d3a8eccedb056708b9d8abae9cc4db3ed4e (patch) | |
tree | 3c388fd874823c46c0935e9501932b004c7b3d5b /mysql-test | |
parent | 21adad000a00a62357c0da63ff9ae98850475618 (diff) | |
download | mariadb-git-d6371d3a8eccedb056708b9d8abae9cc4db3ed4e.tar.gz |
Combined fix for MDEV-7267 and MDEV-8864
The problem was that GROUP BY code created Item_field objects
that referred to fields in the temp. tables used for GROUP BY.
Item_ref and set_items_ref_array() call caused pointers to temp.
table fields to occur in many places.
This patch introduces Item_temptable_field, which can handle
item->print() calls made after the underlying table is freed.
Diffstat (limited to 'mysql-test')
-rw-r--r-- | mysql-test/r/analyze_format_json.result | 183 | ||||
-rw-r--r-- | mysql-test/t/analyze_format_json.test | 36 |
2 files changed, 219 insertions, 0 deletions
diff --git a/mysql-test/r/analyze_format_json.result b/mysql-test/r/analyze_format_json.result index 14ab125b9ac..69930bc0215 100644 --- a/mysql-test/r/analyze_format_json.result +++ b/mysql-test/r/analyze_format_json.result @@ -580,3 +580,186 @@ ANALYZE } } drop table t0, t1, t2; +# +# MDEV-7267: Server crashes in Item_field::print on ANALYZE FORMAT=JSON +# +CREATE TABLE t1 (a INT); +INSERT INTO t1 VALUES (1),(2); +CREATE TABLE t2 (b INT); +INSERT INTO t2 VALUES (3),(4); +ANALYZE FORMAT=JSON SELECT STRAIGHT_JOIN * FROM t1, t2 WHERE b IN ( SELECT a FROM t1 ); +ANALYZE +{ + "query_block": { + "select_id": 1, + "r_loops": 1, + "volatile parameter": "REPLACED", + "table": { + "table_name": "t1", + "access_type": "ALL", + "r_loops": 1, + "rows": 2, + "r_rows": 2, + "volatile parameter": "REPLACED", + "filtered": 100, + "r_filtered": 100 + }, + "block-nl-join": { + "table": { + "table_name": "<subquery2>", + "access_type": "ALL", + "possible_keys": ["distinct_key"], + "r_loops": 1, + "rows": 2, + "r_rows": 2, + "volatile parameter": "REPLACED", + "filtered": 100, + "r_filtered": 100 + }, + "buffer_type": "flat", + "buffer_size": "256Kb", + "join_type": "BNL", + "r_filtered": 100, + "materialized": { + "unique": 1, + "query_block": { + "select_id": 2, + "r_loops": 1, + "volatile parameter": "REPLACED", + "table": { + "table_name": "t1", + "access_type": "ALL", + "r_loops": 1, + "rows": 2, + "r_rows": 2, + "volatile parameter": "REPLACED", + "filtered": 100, + "r_filtered": 100 + } + } + } + }, + "block-nl-join": { + "table": { + "table_name": "t2", + "access_type": "ALL", + "r_loops": 1, + "rows": 2, + "r_rows": 2, + "volatile parameter": "REPLACED", + "filtered": 100, + "r_filtered": 100 + }, + "buffer_type": "incremental", + "buffer_size": "256Kb", + "join_type": "BNL", + "attached_condition": "(t2.b = `<subquery2>`.a)", + "r_filtered": 0 + } + } +} +drop table t1,t2; +# +# MDEV-8864: Server crash #2 in Item_field::print on ANALYZE FORMAT=JSON +# +CREATE TABLE t1 (f1 INT) ENGINE=MyISAM; +INSERT INTO t1 VALUES (1),(2); +CREATE TABLE t2 (f2 INT) ENGINE=MyISAM; +INSERT INTO t2 VALUES (2),(3); +CREATE TABLE t3 (f3 INT) ENGINE=MyISAM; +INSERT INTO t3 VALUES (3),(4); +ANALYZE FORMAT=JSON +SELECT GROUP_CONCAT(f3) AS gc, ( SELECT MAX(f1) FROM t1, t2 WHERE f2 = f3 ) sq +FROM t2, t3 +WHERE f3 IN ( 1, 2 ) +GROUP BY sq ORDER BY gc; +ANALYZE +{ + "query_block": { + "select_id": 1, + "r_loops": 1, + "volatile parameter": "REPLACED", + "filesort": { + "r_loops": 1, + "volatile parameter": "REPLACED", + "r_used_priority_queue": false, + "r_output_rows": 0, + "volatile parameter": "REPLACED", + "filesort": { + "r_loops": 1, + "volatile parameter": "REPLACED", + "r_used_priority_queue": false, + "r_output_rows": 0, + "volatile parameter": "REPLACED", + "temporary_table": { + "temporary_table": { + "table": { + "table_name": "t2", + "access_type": "ALL", + "r_loops": 1, + "rows": 2, + "r_rows": 2, + "volatile parameter": "REPLACED", + "filtered": 100, + "r_filtered": 100 + }, + "block-nl-join": { + "table": { + "table_name": "t3", + "access_type": "ALL", + "r_loops": 1, + "rows": 2, + "r_rows": 2, + "volatile parameter": "REPLACED", + "filtered": 100, + "r_filtered": 0, + "attached_condition": "(t3.f3 in (1,2))" + }, + "buffer_type": "flat", + "buffer_size": "256Kb", + "join_type": "BNL", + "r_filtered": null + }, + "subqueries": [ + { + "expression_cache": { + "state": "uninitialized", + "r_loops": 0, + "query_block": { + "select_id": 2, + "table": { + "table_name": "t1", + "access_type": "ALL", + "r_loops": 0, + "rows": 2, + "r_rows": null, + "filtered": 100, + "r_filtered": null + }, + "block-nl-join": { + "table": { + "table_name": "t2", + "access_type": "ALL", + "r_loops": 0, + "rows": 2, + "r_rows": null, + "filtered": 100, + "r_filtered": null + }, + "buffer_type": "flat", + "buffer_size": "256Kb", + "join_type": "BNL", + "attached_condition": "(t2.f2 = t3.f3)", + "r_filtered": null + } + } + } + } + ] + } + } + } + } + } +} +drop table t1,t2,t3; diff --git a/mysql-test/t/analyze_format_json.test b/mysql-test/t/analyze_format_json.test index db626dc387e..807e02d2334 100644 --- a/mysql-test/t/analyze_format_json.test +++ b/mysql-test/t/analyze_format_json.test @@ -176,3 +176,39 @@ analyze format=json select a, max(b) as TOP from t2 group by a having 1=2; --replace_regex /"(r_total_time_ms|r_buffer_size)": .*?,/"volatile parameter": "REPLACED",/ analyze format=json select a, max(b) as TOP from t2 group by a; drop table t0, t1, t2; + +--echo # +--echo # MDEV-7267: Server crashes in Item_field::print on ANALYZE FORMAT=JSON +--echo # +CREATE TABLE t1 (a INT); +INSERT INTO t1 VALUES (1),(2); + +CREATE TABLE t2 (b INT); +INSERT INTO t2 VALUES (3),(4); + +--replace_regex /"(r_total_time_ms|r_buffer_size)": .*?,/"volatile parameter": "REPLACED",/ +ANALYZE FORMAT=JSON SELECT STRAIGHT_JOIN * FROM t1, t2 WHERE b IN ( SELECT a FROM t1 ); + +drop table t1,t2; + +--echo # +--echo # MDEV-8864: Server crash #2 in Item_field::print on ANALYZE FORMAT=JSON +--echo # +CREATE TABLE t1 (f1 INT) ENGINE=MyISAM; +INSERT INTO t1 VALUES (1),(2); + +CREATE TABLE t2 (f2 INT) ENGINE=MyISAM; +INSERT INTO t2 VALUES (2),(3); + +CREATE TABLE t3 (f3 INT) ENGINE=MyISAM; +INSERT INTO t3 VALUES (3),(4); + +--replace_regex /"(r_total_time_ms|r_buffer_size)": .*?,/"volatile parameter": "REPLACED",/ +ANALYZE FORMAT=JSON +SELECT GROUP_CONCAT(f3) AS gc, ( SELECT MAX(f1) FROM t1, t2 WHERE f2 = f3 ) sq +FROM t2, t3 +WHERE f3 IN ( 1, 2 ) +GROUP BY sq ORDER BY gc; + +drop table t1,t2,t3; + |