Merge branch '5.5' into bb-10.0-merge-5.5
This commit is contained in:
commit
49552cf1f7
@ -511,6 +511,20 @@ set join_cache_level = default;
|
|||||||
drop view v1;
|
drop view v1;
|
||||||
drop table t1,t2;
|
drop table t1,t2;
|
||||||
#
|
#
|
||||||
|
# MDEV-10693: cost-based choice between materialization and in-to-exists
|
||||||
|
# for a subquery from the expression used in ref access
|
||||||
|
#
|
||||||
|
CREATE TABLE t1 (i1 INT PRIMARY KEY) ENGINE=InnoDB;
|
||||||
|
INSERT INTO t1 VALUES (1),(2);
|
||||||
|
CREATE TABLE t2 (i2 INT) ENGINE=InnoDB;
|
||||||
|
CREATE TABLE t3 (i3 INT PRIMARY KEY) ENGINE=InnoDB;
|
||||||
|
INSERT INTO t3 VALUES (3);
|
||||||
|
SELECT * FROM t1
|
||||||
|
WHERE NULL IN ( SELECT i2 FROM t2
|
||||||
|
WHERE i1 IN ( i2 IN ( SELECT i3 FROM t3 ) ) AND i2 = 2 );
|
||||||
|
i1
|
||||||
|
DROP TABLE t1,t2,t3;
|
||||||
|
#
|
||||||
# MDEV-6041: ORDER BY+subqueries: subquery_table.key=outer_table.col is not recongized as binding
|
# MDEV-6041: ORDER BY+subqueries: subquery_table.key=outer_table.col is not recongized as binding
|
||||||
#
|
#
|
||||||
create table t1(a int) engine=innodb;
|
create table t1(a int) engine=innodb;
|
||||||
|
@ -502,6 +502,27 @@ set join_cache_level = default;
|
|||||||
drop view v1;
|
drop view v1;
|
||||||
drop table t1,t2;
|
drop table t1,t2;
|
||||||
|
|
||||||
|
--echo #
|
||||||
|
--echo # MDEV-10693: cost-based choice between materialization and in-to-exists
|
||||||
|
--echo # for a subquery from the expression used in ref access
|
||||||
|
--echo #
|
||||||
|
|
||||||
|
--source include/have_innodb.inc
|
||||||
|
|
||||||
|
CREATE TABLE t1 (i1 INT PRIMARY KEY) ENGINE=InnoDB;
|
||||||
|
INSERT INTO t1 VALUES (1),(2);
|
||||||
|
|
||||||
|
CREATE TABLE t2 (i2 INT) ENGINE=InnoDB;
|
||||||
|
|
||||||
|
CREATE TABLE t3 (i3 INT PRIMARY KEY) ENGINE=InnoDB;
|
||||||
|
INSERT INTO t3 VALUES (3);
|
||||||
|
|
||||||
|
SELECT * FROM t1
|
||||||
|
WHERE NULL IN ( SELECT i2 FROM t2
|
||||||
|
WHERE i1 IN ( i2 IN ( SELECT i3 FROM t3 ) ) AND i2 = 2 );
|
||||||
|
|
||||||
|
DROP TABLE t1,t2,t3;
|
||||||
|
|
||||||
--echo #
|
--echo #
|
||||||
--echo # MDEV-6041: ORDER BY+subqueries: subquery_table.key=outer_table.col is not recongized as binding
|
--echo # MDEV-6041: ORDER BY+subqueries: subquery_table.key=outer_table.col is not recongized as binding
|
||||||
--echo #
|
--echo #
|
||||||
|
@ -8443,8 +8443,6 @@ get_best_combination(JOIN *join)
|
|||||||
join->full_join=0;
|
join->full_join=0;
|
||||||
join->hash_join= FALSE;
|
join->hash_join= FALSE;
|
||||||
|
|
||||||
used_tables= OUTER_REF_TABLE_BIT; // Outer row is already read
|
|
||||||
|
|
||||||
fix_semijoin_strategies_for_picked_join_order(join);
|
fix_semijoin_strategies_for_picked_join_order(join);
|
||||||
|
|
||||||
JOIN_TAB_RANGE *root_range;
|
JOIN_TAB_RANGE *root_range;
|
||||||
@ -8508,7 +8506,6 @@ get_best_combination(JOIN *join)
|
|||||||
j->bush_root_tab= sjm_nest_root;
|
j->bush_root_tab= sjm_nest_root;
|
||||||
|
|
||||||
form=join->table[tablenr]=j->table;
|
form=join->table[tablenr]=j->table;
|
||||||
used_tables|= form->map;
|
|
||||||
form->reginfo.join_tab=j;
|
form->reginfo.join_tab=j;
|
||||||
DBUG_PRINT("info",("type: %d", j->type));
|
DBUG_PRINT("info",("type: %d", j->type));
|
||||||
if (j->type == JT_CONST)
|
if (j->type == JT_CONST)
|
||||||
@ -8536,9 +8533,6 @@ get_best_combination(JOIN *join)
|
|||||||
j->index= join->best_positions[tablenr].loosescan_picker.loosescan_key;
|
j->index= join->best_positions[tablenr].loosescan_picker.loosescan_key;
|
||||||
}*/
|
}*/
|
||||||
|
|
||||||
if (keyuse && create_ref_for_key(join, j, keyuse, TRUE, used_tables))
|
|
||||||
DBUG_RETURN(TRUE); // Something went wrong
|
|
||||||
|
|
||||||
if ((j->type == JT_REF || j->type == JT_EQ_REF) &&
|
if ((j->type == JT_REF || j->type == JT_EQ_REF) &&
|
||||||
is_hash_join_key_no(j->ref.key))
|
is_hash_join_key_no(j->ref.key))
|
||||||
join->hash_join= TRUE;
|
join->hash_join= TRUE;
|
||||||
@ -8563,6 +8557,21 @@ get_best_combination(JOIN *join)
|
|||||||
}
|
}
|
||||||
root_range->end= j;
|
root_range->end= j;
|
||||||
|
|
||||||
|
used_tables= OUTER_REF_TABLE_BIT; // Outer row is already read
|
||||||
|
for (j=join_tab, tablenr=0 ; tablenr < table_count ; tablenr++,j++)
|
||||||
|
{
|
||||||
|
if (j->bush_children)
|
||||||
|
j= j->bush_children->start;
|
||||||
|
|
||||||
|
used_tables|= j->table->map;
|
||||||
|
if ((keyuse= join->best_positions[tablenr].key) &&
|
||||||
|
create_ref_for_key(join, j, keyuse, TRUE, used_tables))
|
||||||
|
DBUG_RETURN(TRUE); // Something went wrong
|
||||||
|
|
||||||
|
if (j->last_leaf_in_bush)
|
||||||
|
j= j->bush_root_tab;
|
||||||
|
}
|
||||||
|
|
||||||
join->top_join_tab_count= join->join_tab_ranges.head()->end -
|
join->top_join_tab_count= join->join_tab_ranges.head()->end -
|
||||||
join->join_tab_ranges.head()->start;
|
join->join_tab_ranges.head()->start;
|
||||||
/*
|
/*
|
||||||
|
Loading…
x
Reference in New Issue
Block a user