mirror of
https://github.com/MariaDB/server.git
synced 2025-08-05 13:16:09 +03:00
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.
This commit is contained in:
@@ -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;
|
|||||||
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
|
|||||||
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
|
|||||||
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;
|
|||||||
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
|
|||||||
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
|
|||||||
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;
|
|||||||
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
|
|||||||
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
|
|||||||
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;
|
|||||||
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
|
|||||||
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
|
|||||||
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;
|
|||||||
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
|
|||||||
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;
|
|||||||
|
|
||||||
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()
|
|||||||
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");
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user