Commit 2d99ea45 authored by Sergey Petrunya's avatar Sergey Petrunya

MDEV-430: Server crashes in select_describe on EXPLAIN with materialization+semijoin, etc

- Don't do early cleanup of uncorrelated subqueries if we're running an EXPLAIN.
parent 0af0e7a7
...@@ -5966,7 +5966,7 @@ id select_type table type possible_keys key key_len ref rows Extra ...@@ -5966,7 +5966,7 @@ id select_type table type possible_keys key key_len ref rows Extra
EXPLAIN SELECT * FROM t1 WHERE EXISTS (SELECT * FROM t1 WHERE a=7); EXPLAIN SELECT * FROM t1 WHERE EXISTS (SELECT * FROM t1 WHERE a=7);
id select_type table type possible_keys key key_len ref rows Extra id select_type table type possible_keys key key_len ref rows Extra
1 PRIMARY t1 ALL NULL NULL NULL NULL 4 1 PRIMARY t1 ALL NULL NULL NULL NULL 4
2 SUBQUERY t1 ref a a 5 const 1 2 SUBQUERY t1 ref a a 5 const 1 Using index
DROP TABLE t1; DROP TABLE t1;
# #
# BUG#12616253 - WRONG RESULT WITH EXISTS(SUBQUERY) (MISSING ROWS) # BUG#12616253 - WRONG RESULT WITH EXISTS(SUBQUERY) (MISSING ROWS)
...@@ -6127,7 +6127,7 @@ set optimizer_switch=@tmp_optimizer_switch; ...@@ -6127,7 +6127,7 @@ set optimizer_switch=@tmp_optimizer_switch;
EXPLAIN SELECT * FROM t1 WHERE EXISTS (SELECT * FROM t1 WHERE a=7); EXPLAIN SELECT * FROM t1 WHERE EXISTS (SELECT * FROM t1 WHERE a=7);
id select_type table type possible_keys key key_len ref rows Extra id select_type table type possible_keys key key_len ref rows Extra
1 PRIMARY t1 ALL NULL NULL NULL NULL 4 1 PRIMARY t1 ALL NULL NULL NULL NULL 4
2 SUBQUERY t1 ref a a 5 const 1 2 SUBQUERY t1 ref a a 5 const 1 Using index
DROP TABLE t1; DROP TABLE t1;
# #
...@@ -6806,5 +6806,19 @@ Table_schema Table_name Index_name Rows_read ...@@ -6806,5 +6806,19 @@ Table_schema Table_name Index_name Rows_read
test t2 b 1 test t2 b 1
set global userstat=@tmp_mdev410; set global userstat=@tmp_mdev410;
DROP TABLE t1,t2,t3,t4; DROP TABLE t1,t2,t3,t4;
#
# MDEV-430: Server crashes in select_describe on EXPLAIN with
# materialization+semijoin, 2 nested subqueries, aggregate functions
#
CREATE TABLE t1 (a INT, KEY(a));
INSERT INTO t1 VALUES (1),(8);
CREATE TABLE t2 (b INT, KEY(b));
INSERT INTO t2 VALUES (45),(17),(20);
EXPLAIN SELECT * FROM t1 WHERE EXISTS ( SELECT a FROM t1, t2 WHERE b = a GROUP BY a HAVING a <> 1 ) ;
id select_type table type possible_keys key key_len ref rows Extra
1 PRIMARY NULL NULL NULL NULL NULL NULL NULL Impossible WHERE
2 SUBQUERY t1 index a a 5 NULL 1 Using where; Using index
2 SUBQUERY t2 ref b b 5 test.t1.a 2 Using index
DROP TABLE t1,t2;
# return optimizer switch changed in the beginning of this test # return optimizer switch changed in the beginning of this test
set optimizer_switch=@subselect_tmp; set optimizer_switch=@subselect_tmp;
...@@ -5967,7 +5967,7 @@ id select_type table type possible_keys key key_len ref rows Extra ...@@ -5967,7 +5967,7 @@ id select_type table type possible_keys key key_len ref rows Extra
EXPLAIN SELECT * FROM t1 WHERE EXISTS (SELECT * FROM t1 WHERE a=7); EXPLAIN SELECT * FROM t1 WHERE EXISTS (SELECT * FROM t1 WHERE a=7);
id select_type table type possible_keys key key_len ref rows Extra id select_type table type possible_keys key key_len ref rows Extra
1 PRIMARY t1 ALL NULL NULL NULL NULL 4 1 PRIMARY t1 ALL NULL NULL NULL NULL 4
2 SUBQUERY t1 ref a a 5 const 1 2 SUBQUERY t1 ref a a 5 const 1 Using index
DROP TABLE t1; DROP TABLE t1;
# #
# BUG#12616253 - WRONG RESULT WITH EXISTS(SUBQUERY) (MISSING ROWS) # BUG#12616253 - WRONG RESULT WITH EXISTS(SUBQUERY) (MISSING ROWS)
...@@ -6126,7 +6126,7 @@ set optimizer_switch=@tmp_optimizer_switch; ...@@ -6126,7 +6126,7 @@ set optimizer_switch=@tmp_optimizer_switch;
EXPLAIN SELECT * FROM t1 WHERE EXISTS (SELECT * FROM t1 WHERE a=7); EXPLAIN SELECT * FROM t1 WHERE EXISTS (SELECT * FROM t1 WHERE a=7);
id select_type table type possible_keys key key_len ref rows Extra id select_type table type possible_keys key key_len ref rows Extra
1 PRIMARY t1 ALL NULL NULL NULL NULL 4 1 PRIMARY t1 ALL NULL NULL NULL NULL 4
2 SUBQUERY t1 ref a a 5 const 1 2 SUBQUERY t1 ref a a 5 const 1 Using index
DROP TABLE t1; DROP TABLE t1;
# #
...@@ -6804,6 +6804,20 @@ Table_schema Table_name Index_name Rows_read ...@@ -6804,6 +6804,20 @@ Table_schema Table_name Index_name Rows_read
test t2 b 1 test t2 b 1
set global userstat=@tmp_mdev410; set global userstat=@tmp_mdev410;
DROP TABLE t1,t2,t3,t4; DROP TABLE t1,t2,t3,t4;
#
# MDEV-430: Server crashes in select_describe on EXPLAIN with
# materialization+semijoin, 2 nested subqueries, aggregate functions
#
CREATE TABLE t1 (a INT, KEY(a));
INSERT INTO t1 VALUES (1),(8);
CREATE TABLE t2 (b INT, KEY(b));
INSERT INTO t2 VALUES (45),(17),(20);
EXPLAIN SELECT * FROM t1 WHERE EXISTS ( SELECT a FROM t1, t2 WHERE b = a GROUP BY a HAVING a <> 1 ) ;
id select_type table type possible_keys key key_len ref rows Extra
1 PRIMARY NULL NULL NULL NULL NULL NULL NULL Impossible WHERE
2 SUBQUERY t1 index a a 5 NULL 1 Using where; Using index
2 SUBQUERY t2 ref b b 5 test.t1.a 2 Using index
DROP TABLE t1,t2;
# return optimizer switch changed in the beginning of this test # return optimizer switch changed in the beginning of this test
set optimizer_switch=@subselect_tmp; set optimizer_switch=@subselect_tmp;
set optimizer_switch=default; set optimizer_switch=default;
......
...@@ -5963,7 +5963,7 @@ id select_type table type possible_keys key key_len ref rows Extra ...@@ -5963,7 +5963,7 @@ id select_type table type possible_keys key key_len ref rows Extra
EXPLAIN SELECT * FROM t1 WHERE EXISTS (SELECT * FROM t1 WHERE a=7); EXPLAIN SELECT * FROM t1 WHERE EXISTS (SELECT * FROM t1 WHERE a=7);
id select_type table type possible_keys key key_len ref rows Extra id select_type table type possible_keys key key_len ref rows Extra
1 PRIMARY t1 ALL NULL NULL NULL NULL 4 1 PRIMARY t1 ALL NULL NULL NULL NULL 4
2 SUBQUERY t1 ref a a 5 const 1 2 SUBQUERY t1 ref a a 5 const 1 Using index
DROP TABLE t1; DROP TABLE t1;
# #
# BUG#12616253 - WRONG RESULT WITH EXISTS(SUBQUERY) (MISSING ROWS) # BUG#12616253 - WRONG RESULT WITH EXISTS(SUBQUERY) (MISSING ROWS)
...@@ -6122,7 +6122,7 @@ set optimizer_switch=@tmp_optimizer_switch; ...@@ -6122,7 +6122,7 @@ set optimizer_switch=@tmp_optimizer_switch;
EXPLAIN SELECT * FROM t1 WHERE EXISTS (SELECT * FROM t1 WHERE a=7); EXPLAIN SELECT * FROM t1 WHERE EXISTS (SELECT * FROM t1 WHERE a=7);
id select_type table type possible_keys key key_len ref rows Extra id select_type table type possible_keys key key_len ref rows Extra
1 PRIMARY t1 ALL NULL NULL NULL NULL 4 1 PRIMARY t1 ALL NULL NULL NULL NULL 4
2 SUBQUERY t1 ref a a 5 const 1 2 SUBQUERY t1 ref a a 5 const 1 Using index
DROP TABLE t1; DROP TABLE t1;
# #
...@@ -6801,6 +6801,20 @@ Table_schema Table_name Index_name Rows_read ...@@ -6801,6 +6801,20 @@ Table_schema Table_name Index_name Rows_read
test t2 b 1 test t2 b 1
set global userstat=@tmp_mdev410; set global userstat=@tmp_mdev410;
DROP TABLE t1,t2,t3,t4; DROP TABLE t1,t2,t3,t4;
#
# MDEV-430: Server crashes in select_describe on EXPLAIN with
# materialization+semijoin, 2 nested subqueries, aggregate functions
#
CREATE TABLE t1 (a INT, KEY(a));
INSERT INTO t1 VALUES (1),(8);
CREATE TABLE t2 (b INT, KEY(b));
INSERT INTO t2 VALUES (45),(17),(20);
EXPLAIN SELECT * FROM t1 WHERE EXISTS ( SELECT a FROM t1, t2 WHERE b = a GROUP BY a HAVING a <> 1 ) ;
id select_type table type possible_keys key key_len ref rows Extra
1 PRIMARY NULL NULL NULL NULL NULL NULL NULL Impossible WHERE
2 SUBQUERY t1 index a a 5 NULL 1 Using where; Using index
2 SUBQUERY t2 ref b b 5 test.t1.a 2 Using index
DROP TABLE t1,t2;
# return optimizer switch changed in the beginning of this test # return optimizer switch changed in the beginning of this test
set optimizer_switch=@subselect_tmp; set optimizer_switch=@subselect_tmp;
set @optimizer_switch_for_subselect_test=null; set @optimizer_switch_for_subselect_test=null;
...@@ -5972,7 +5972,7 @@ id select_type table type possible_keys key key_len ref rows Extra ...@@ -5972,7 +5972,7 @@ id select_type table type possible_keys key key_len ref rows Extra
EXPLAIN SELECT * FROM t1 WHERE EXISTS (SELECT * FROM t1 WHERE a=7); EXPLAIN SELECT * FROM t1 WHERE EXISTS (SELECT * FROM t1 WHERE a=7);
id select_type table type possible_keys key key_len ref rows Extra id select_type table type possible_keys key key_len ref rows Extra
1 PRIMARY t1 ALL NULL NULL NULL NULL 4 1 PRIMARY t1 ALL NULL NULL NULL NULL 4
2 SUBQUERY t1 ref a a 5 const 1 2 SUBQUERY t1 ref a a 5 const 1 Using index
DROP TABLE t1; DROP TABLE t1;
# #
# BUG#12616253 - WRONG RESULT WITH EXISTS(SUBQUERY) (MISSING ROWS) # BUG#12616253 - WRONG RESULT WITH EXISTS(SUBQUERY) (MISSING ROWS)
...@@ -6133,7 +6133,7 @@ set optimizer_switch=@tmp_optimizer_switch; ...@@ -6133,7 +6133,7 @@ set optimizer_switch=@tmp_optimizer_switch;
EXPLAIN SELECT * FROM t1 WHERE EXISTS (SELECT * FROM t1 WHERE a=7); EXPLAIN SELECT * FROM t1 WHERE EXISTS (SELECT * FROM t1 WHERE a=7);
id select_type table type possible_keys key key_len ref rows Extra id select_type table type possible_keys key key_len ref rows Extra
1 PRIMARY t1 ALL NULL NULL NULL NULL 4 1 PRIMARY t1 ALL NULL NULL NULL NULL 4
2 SUBQUERY t1 ref a a 5 const 1 2 SUBQUERY t1 ref a a 5 const 1 Using index
DROP TABLE t1; DROP TABLE t1;
# #
...@@ -6812,6 +6812,20 @@ Table_schema Table_name Index_name Rows_read ...@@ -6812,6 +6812,20 @@ Table_schema Table_name Index_name Rows_read
test t2 b 1 test t2 b 1
set global userstat=@tmp_mdev410; set global userstat=@tmp_mdev410;
DROP TABLE t1,t2,t3,t4; DROP TABLE t1,t2,t3,t4;
#
# MDEV-430: Server crashes in select_describe on EXPLAIN with
# materialization+semijoin, 2 nested subqueries, aggregate functions
#
CREATE TABLE t1 (a INT, KEY(a));
INSERT INTO t1 VALUES (1),(8);
CREATE TABLE t2 (b INT, KEY(b));
INSERT INTO t2 VALUES (45),(17),(20);
EXPLAIN SELECT * FROM t1 WHERE EXISTS ( SELECT a FROM t1, t2 WHERE b = a GROUP BY a HAVING a <> 1 ) ;
id select_type table type possible_keys key key_len ref rows Extra
1 PRIMARY NULL NULL NULL NULL NULL NULL NULL Impossible WHERE
2 SUBQUERY t1 index a a 5 NULL 1 Using where; Using index
2 SUBQUERY t2 ref b b 5 test.t1.a 2 Using index
DROP TABLE t1,t2;
# return optimizer switch changed in the beginning of this test # return optimizer switch changed in the beginning of this test
set optimizer_switch=@subselect_tmp; set optimizer_switch=@subselect_tmp;
set optimizer_switch=default; set optimizer_switch=default;
......
...@@ -5963,7 +5963,7 @@ id select_type table type possible_keys key key_len ref rows Extra ...@@ -5963,7 +5963,7 @@ id select_type table type possible_keys key key_len ref rows Extra
EXPLAIN SELECT * FROM t1 WHERE EXISTS (SELECT * FROM t1 WHERE a=7); EXPLAIN SELECT * FROM t1 WHERE EXISTS (SELECT * FROM t1 WHERE a=7);
id select_type table type possible_keys key key_len ref rows Extra id select_type table type possible_keys key key_len ref rows Extra
1 PRIMARY t1 ALL NULL NULL NULL NULL 4 1 PRIMARY t1 ALL NULL NULL NULL NULL 4
2 SUBQUERY t1 ref a a 5 const 1 2 SUBQUERY t1 ref a a 5 const 1 Using index
DROP TABLE t1; DROP TABLE t1;
# #
# BUG#12616253 - WRONG RESULT WITH EXISTS(SUBQUERY) (MISSING ROWS) # BUG#12616253 - WRONG RESULT WITH EXISTS(SUBQUERY) (MISSING ROWS)
...@@ -6122,7 +6122,7 @@ set optimizer_switch=@tmp_optimizer_switch; ...@@ -6122,7 +6122,7 @@ set optimizer_switch=@tmp_optimizer_switch;
EXPLAIN SELECT * FROM t1 WHERE EXISTS (SELECT * FROM t1 WHERE a=7); EXPLAIN SELECT * FROM t1 WHERE EXISTS (SELECT * FROM t1 WHERE a=7);
id select_type table type possible_keys key key_len ref rows Extra id select_type table type possible_keys key key_len ref rows Extra
1 PRIMARY t1 ALL NULL NULL NULL NULL 4 1 PRIMARY t1 ALL NULL NULL NULL NULL 4
2 SUBQUERY t1 ref a a 5 const 1 2 SUBQUERY t1 ref a a 5 const 1 Using index
DROP TABLE t1; DROP TABLE t1;
# #
...@@ -6801,6 +6801,20 @@ Table_schema Table_name Index_name Rows_read ...@@ -6801,6 +6801,20 @@ Table_schema Table_name Index_name Rows_read
test t2 b 1 test t2 b 1
set global userstat=@tmp_mdev410; set global userstat=@tmp_mdev410;
DROP TABLE t1,t2,t3,t4; DROP TABLE t1,t2,t3,t4;
#
# MDEV-430: Server crashes in select_describe on EXPLAIN with
# materialization+semijoin, 2 nested subqueries, aggregate functions
#
CREATE TABLE t1 (a INT, KEY(a));
INSERT INTO t1 VALUES (1),(8);
CREATE TABLE t2 (b INT, KEY(b));
INSERT INTO t2 VALUES (45),(17),(20);
EXPLAIN SELECT * FROM t1 WHERE EXISTS ( SELECT a FROM t1, t2 WHERE b = a GROUP BY a HAVING a <> 1 ) ;
id select_type table type possible_keys key key_len ref rows Extra
1 PRIMARY NULL NULL NULL NULL NULL NULL NULL Impossible WHERE
2 SUBQUERY t1 index a a 5 NULL 1 Using where; Using index
2 SUBQUERY t2 ref b b 5 test.t1.a 2 Using index
DROP TABLE t1,t2;
# return optimizer switch changed in the beginning of this test # return optimizer switch changed in the beginning of this test
set optimizer_switch=@subselect_tmp; set optimizer_switch=@subselect_tmp;
set @optimizer_switch_for_subselect_test=null; set @optimizer_switch_for_subselect_test=null;
......
...@@ -5721,5 +5721,19 @@ set global userstat=@tmp_mdev410; ...@@ -5721,5 +5721,19 @@ set global userstat=@tmp_mdev410;
DROP TABLE t1,t2,t3,t4; DROP TABLE t1,t2,t3,t4;
--echo #
--echo # MDEV-430: Server crashes in select_describe on EXPLAIN with
--echo # materialization+semijoin, 2 nested subqueries, aggregate functions
--echo #
CREATE TABLE t1 (a INT, KEY(a));
INSERT INTO t1 VALUES (1),(8);
CREATE TABLE t2 (b INT, KEY(b));
INSERT INTO t2 VALUES (45),(17),(20);
EXPLAIN SELECT * FROM t1 WHERE EXISTS ( SELECT a FROM t1, t2 WHERE b = a GROUP BY a HAVING a <> 1 ) ;
DROP TABLE t1,t2;
--echo # return optimizer switch changed in the beginning of this test --echo # return optimizer switch changed in the beginning of this test
set optimizer_switch=@subselect_tmp; set optimizer_switch=@subselect_tmp;
...@@ -10543,7 +10543,7 @@ void JOIN::join_free() ...@@ -10543,7 +10543,7 @@ void JOIN::join_free()
Optimization: if not EXPLAIN and we are done with the JOIN, Optimization: if not EXPLAIN and we are done with the JOIN,
free all tables. free all tables.
*/ */
bool full= !(select_lex->uncacheable); bool full= !(select_lex->uncacheable) && !(thd->lex->describe);
bool can_unlock= full; bool can_unlock= full;
DBUG_ENTER("JOIN::join_free"); DBUG_ENTER("JOIN::join_free");
......
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