mirror of
https://github.com/MariaDB/server.git
synced 2025-07-30 16:24:05 +03:00
Merge
This commit is contained in:
@ -1112,5 +1112,22 @@ t3 AS t3a INNER JOIN t3 AS t3b ON ( t3a.i3 = t3b.i3 )
|
|||||||
);
|
);
|
||||||
i1
|
i1
|
||||||
DROP TABLE t1,t2,t3;
|
DROP TABLE t1,t2,t3;
|
||||||
|
#
|
||||||
|
# MDEV-5582: Plugin 'MEMORY' has ref_count=1 after shutdown with materialization+semijoin
|
||||||
|
#
|
||||||
|
CREATE TABLE t1 (a INT) engine=innodb;
|
||||||
|
INSERT INTO t1 VALUES (8),(9);
|
||||||
|
CREATE TABLE t2 (b INT) engine=innodb;
|
||||||
|
INSERT INTO t2 VALUES (2),(3);
|
||||||
|
CREATE TABLE t3 (c INT, INDEX(c)) engine=innodb;
|
||||||
|
INSERT INTO t2 VALUES (4),(5);
|
||||||
|
explain
|
||||||
|
SELECT * FROM t1 WHERE 9 IN ( SELECT b FROM t2 WHERE 1 IN ( SELECT MIN(c) FROM t3 ) );
|
||||||
|
id select_type table type possible_keys key key_len ref rows Extra
|
||||||
|
1 PRIMARY NULL NULL NULL NULL NULL NULL NULL Impossible WHERE
|
||||||
|
3 MATERIALIZED NULL NULL NULL NULL NULL NULL NULL No matching min/max row
|
||||||
|
SELECT * FROM t1 WHERE 9 IN ( SELECT b FROM t2 WHERE 1 IN ( SELECT MIN(c) FROM t3 ) );
|
||||||
|
a
|
||||||
|
DROP TABLE t1,t2,t3;
|
||||||
# This must be the last in the file:
|
# This must be the last in the file:
|
||||||
set optimizer_switch=@subselect_sj2_tmp;
|
set optimizer_switch=@subselect_sj2_tmp;
|
||||||
|
@ -1127,6 +1127,23 @@ t3 AS t3a INNER JOIN t3 AS t3b ON ( t3a.i3 = t3b.i3 )
|
|||||||
);
|
);
|
||||||
i1
|
i1
|
||||||
DROP TABLE t1,t2,t3;
|
DROP TABLE t1,t2,t3;
|
||||||
|
#
|
||||||
|
# MDEV-5582: Plugin 'MEMORY' has ref_count=1 after shutdown with materialization+semijoin
|
||||||
|
#
|
||||||
|
CREATE TABLE t1 (a INT) engine=innodb;
|
||||||
|
INSERT INTO t1 VALUES (8),(9);
|
||||||
|
CREATE TABLE t2 (b INT) engine=innodb;
|
||||||
|
INSERT INTO t2 VALUES (2),(3);
|
||||||
|
CREATE TABLE t3 (c INT, INDEX(c)) engine=innodb;
|
||||||
|
INSERT INTO t2 VALUES (4),(5);
|
||||||
|
explain
|
||||||
|
SELECT * FROM t1 WHERE 9 IN ( SELECT b FROM t2 WHERE 1 IN ( SELECT MIN(c) FROM t3 ) );
|
||||||
|
id select_type table type possible_keys key key_len ref rows Extra
|
||||||
|
1 PRIMARY NULL NULL NULL NULL NULL NULL NULL Impossible WHERE
|
||||||
|
3 MATERIALIZED NULL NULL NULL NULL NULL NULL NULL No matching min/max row
|
||||||
|
SELECT * FROM t1 WHERE 9 IN ( SELECT b FROM t2 WHERE 1 IN ( SELECT MIN(c) FROM t3 ) );
|
||||||
|
a
|
||||||
|
DROP TABLE t1,t2,t3;
|
||||||
# This must be the last in the file:
|
# This must be the last in the file:
|
||||||
set optimizer_switch=@subselect_sj2_tmp;
|
set optimizer_switch=@subselect_sj2_tmp;
|
||||||
#
|
#
|
||||||
|
@ -1114,6 +1114,23 @@ t3 AS t3a INNER JOIN t3 AS t3b ON ( t3a.i3 = t3b.i3 )
|
|||||||
);
|
);
|
||||||
i1
|
i1
|
||||||
DROP TABLE t1,t2,t3;
|
DROP TABLE t1,t2,t3;
|
||||||
|
#
|
||||||
|
# MDEV-5582: Plugin 'MEMORY' has ref_count=1 after shutdown with materialization+semijoin
|
||||||
|
#
|
||||||
|
CREATE TABLE t1 (a INT) engine=innodb;
|
||||||
|
INSERT INTO t1 VALUES (8),(9);
|
||||||
|
CREATE TABLE t2 (b INT) engine=innodb;
|
||||||
|
INSERT INTO t2 VALUES (2),(3);
|
||||||
|
CREATE TABLE t3 (c INT, INDEX(c)) engine=innodb;
|
||||||
|
INSERT INTO t2 VALUES (4),(5);
|
||||||
|
explain
|
||||||
|
SELECT * FROM t1 WHERE 9 IN ( SELECT b FROM t2 WHERE 1 IN ( SELECT MIN(c) FROM t3 ) );
|
||||||
|
id select_type table type possible_keys key key_len ref rows Extra
|
||||||
|
1 PRIMARY NULL NULL NULL NULL NULL NULL NULL Impossible WHERE
|
||||||
|
3 MATERIALIZED NULL NULL NULL NULL NULL NULL NULL No matching min/max row
|
||||||
|
SELECT * FROM t1 WHERE 9 IN ( SELECT b FROM t2 WHERE 1 IN ( SELECT MIN(c) FROM t3 ) );
|
||||||
|
a
|
||||||
|
DROP TABLE t1,t2,t3;
|
||||||
# This must be the last in the file:
|
# This must be the last in the file:
|
||||||
set optimizer_switch=@subselect_sj2_tmp;
|
set optimizer_switch=@subselect_sj2_tmp;
|
||||||
set optimizer_switch=default;
|
set optimizer_switch=default;
|
||||||
|
@ -1249,5 +1249,24 @@ SELECT * FROM t1 WHERE ( 1, 1 ) IN (
|
|||||||
|
|
||||||
DROP TABLE t1,t2,t3;
|
DROP TABLE t1,t2,t3;
|
||||||
|
|
||||||
|
--echo #
|
||||||
|
--echo # MDEV-5582: Plugin 'MEMORY' has ref_count=1 after shutdown with materialization+semijoin
|
||||||
|
--echo #
|
||||||
|
CREATE TABLE t1 (a INT) engine=innodb;
|
||||||
|
INSERT INTO t1 VALUES (8),(9);
|
||||||
|
|
||||||
|
CREATE TABLE t2 (b INT) engine=innodb;
|
||||||
|
INSERT INTO t2 VALUES (2),(3);
|
||||||
|
|
||||||
|
CREATE TABLE t3 (c INT, INDEX(c)) engine=innodb;
|
||||||
|
INSERT INTO t2 VALUES (4),(5);
|
||||||
|
|
||||||
|
explain
|
||||||
|
SELECT * FROM t1 WHERE 9 IN ( SELECT b FROM t2 WHERE 1 IN ( SELECT MIN(c) FROM t3 ) );
|
||||||
|
SELECT * FROM t1 WHERE 9 IN ( SELECT b FROM t2 WHERE 1 IN ( SELECT MIN(c) FROM t3 ) );
|
||||||
|
|
||||||
|
DROP TABLE t1,t2,t3;
|
||||||
|
|
||||||
|
|
||||||
--echo # This must be the last in the file:
|
--echo # This must be the last in the file:
|
||||||
set optimizer_switch=@subselect_sj2_tmp;
|
set optimizer_switch=@subselect_sj2_tmp;
|
||||||
|
@ -5234,9 +5234,9 @@ bool setup_jtbm_semi_joins(JOIN *join, List<TABLE_LIST> *join_list,
|
|||||||
through Item::cleanup() calls).
|
through Item::cleanup() calls).
|
||||||
*/
|
*/
|
||||||
|
|
||||||
void cleanup_empty_jtbm_semi_joins(JOIN *join)
|
void cleanup_empty_jtbm_semi_joins(JOIN *join, List<TABLE_LIST> *join_list)
|
||||||
{
|
{
|
||||||
List_iterator<TABLE_LIST> li(*join->join_list);
|
List_iterator<TABLE_LIST> li(*join_list);
|
||||||
TABLE_LIST *table;
|
TABLE_LIST *table;
|
||||||
while ((table= li++))
|
while ((table= li++))
|
||||||
{
|
{
|
||||||
@ -5248,6 +5248,10 @@ void cleanup_empty_jtbm_semi_joins(JOIN *join)
|
|||||||
table->table= NULL;
|
table->table= NULL;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
else if (table->nested_join && table->sj_subq_pred)
|
||||||
|
{
|
||||||
|
cleanup_empty_jtbm_semi_joins(join, &table->nested_join->join_list);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -12,7 +12,7 @@ int pull_out_semijoin_tables(JOIN *join);
|
|||||||
bool optimize_semijoin_nests(JOIN *join, table_map all_table_map);
|
bool optimize_semijoin_nests(JOIN *join, table_map all_table_map);
|
||||||
bool setup_jtbm_semi_joins(JOIN *join, List<TABLE_LIST> *join_list,
|
bool setup_jtbm_semi_joins(JOIN *join, List<TABLE_LIST> *join_list,
|
||||||
Item **join_where);
|
Item **join_where);
|
||||||
void cleanup_empty_jtbm_semi_joins(JOIN *join);
|
void cleanup_empty_jtbm_semi_joins(JOIN *join, List<TABLE_LIST> *join_list);
|
||||||
|
|
||||||
// used by Loose_scan_opt
|
// used by Loose_scan_opt
|
||||||
ulonglong get_bound_sj_equalities(TABLE_LIST *sj_nest,
|
ulonglong get_bound_sj_equalities(TABLE_LIST *sj_nest,
|
||||||
|
@ -10550,7 +10550,7 @@ void JOIN::cleanup(bool full)
|
|||||||
}
|
}
|
||||||
if (full)
|
if (full)
|
||||||
{
|
{
|
||||||
cleanup_empty_jtbm_semi_joins(this);
|
cleanup_empty_jtbm_semi_joins(this, join_list);
|
||||||
/*
|
/*
|
||||||
Ensure that the following delete_elements() would not be called
|
Ensure that the following delete_elements() would not be called
|
||||||
twice for the same list.
|
twice for the same list.
|
||||||
|
Reference in New Issue
Block a user