Fix added along with a test for a case missed in the patch for MDEV-16751
This commit is contained in:
parent
37dee22d27
commit
bd0b368119
@ -2436,6 +2436,23 @@ a
|
|||||||
drop procedure prepare_data;
|
drop procedure prepare_data;
|
||||||
set @@optimizer_switch= @save_optimizer_switch;
|
set @@optimizer_switch= @save_optimizer_switch;
|
||||||
drop table t1,t2,t3;
|
drop table t1,t2,t3;
|
||||||
|
CREATE TABLE t1 ( id int NOT NULL, key(id));
|
||||||
|
INSERT INTO t1 VALUES (11),(12),(13),(14),(15),(16),(17),(18),(19);
|
||||||
|
CREATE TABLE t2 (i1 int NOT NULL, i2 int NOT NULL);
|
||||||
|
INSERT INTO t2 VALUES (11,11),(12,12),(13,13);
|
||||||
|
CREATE VIEW v1 AS SELECT t2.i1 FROM t2 where t2.i1 = t2.i2;
|
||||||
|
explain SELECT 1 FROM t1 where t1.id IN (SELECT v1.i1 from v1);
|
||||||
|
id select_type table type possible_keys key key_len ref rows Extra
|
||||||
|
1 PRIMARY <subquery2> ALL distinct_key NULL NULL NULL 3
|
||||||
|
1 PRIMARY t1 ref id id 4 test.t2.i1 2 Using index
|
||||||
|
2 MATERIALIZED t2 ALL NULL NULL NULL NULL 3 Using where
|
||||||
|
SELECT 1 FROM t1 where t1.id IN (SELECT v1.i1 from v1);
|
||||||
|
1
|
||||||
|
1
|
||||||
|
1
|
||||||
|
1
|
||||||
|
drop table t1,t2;
|
||||||
|
drop view v1;
|
||||||
# End of 5.5 tests
|
# End of 5.5 tests
|
||||||
set @subselect_mat_test_optimizer_switch_value=null;
|
set @subselect_mat_test_optimizer_switch_value=null;
|
||||||
set @@optimizer_switch='materialization=on,in_to_exists=off,semijoin=off';
|
set @@optimizer_switch='materialization=on,in_to_exists=off,semijoin=off';
|
||||||
|
@ -2476,4 +2476,21 @@ a
|
|||||||
drop procedure prepare_data;
|
drop procedure prepare_data;
|
||||||
set @@optimizer_switch= @save_optimizer_switch;
|
set @@optimizer_switch= @save_optimizer_switch;
|
||||||
drop table t1,t2,t3;
|
drop table t1,t2,t3;
|
||||||
|
CREATE TABLE t1 ( id int NOT NULL, key(id));
|
||||||
|
INSERT INTO t1 VALUES (11),(12),(13),(14),(15),(16),(17),(18),(19);
|
||||||
|
CREATE TABLE t2 (i1 int NOT NULL, i2 int NOT NULL);
|
||||||
|
INSERT INTO t2 VALUES (11,11),(12,12),(13,13);
|
||||||
|
CREATE VIEW v1 AS SELECT t2.i1 FROM t2 where t2.i1 = t2.i2;
|
||||||
|
explain SELECT 1 FROM t1 where t1.id IN (SELECT v1.i1 from v1);
|
||||||
|
id select_type table type possible_keys key key_len ref rows Extra
|
||||||
|
1 PRIMARY <subquery2> ALL distinct_key NULL NULL NULL 3
|
||||||
|
1 PRIMARY t1 ref id id 4 test.t2.i1 2 Using index
|
||||||
|
2 MATERIALIZED t2 ALL NULL NULL NULL NULL 3 Using where
|
||||||
|
SELECT 1 FROM t1 where t1.id IN (SELECT v1.i1 from v1);
|
||||||
|
1
|
||||||
|
1
|
||||||
|
1
|
||||||
|
1
|
||||||
|
drop table t1,t2;
|
||||||
|
drop view v1;
|
||||||
# End of 5.5 tests
|
# End of 5.5 tests
|
||||||
|
@ -2221,4 +2221,13 @@ drop procedure prepare_data;
|
|||||||
set @@optimizer_switch= @save_optimizer_switch;
|
set @@optimizer_switch= @save_optimizer_switch;
|
||||||
drop table t1,t2,t3;
|
drop table t1,t2,t3;
|
||||||
|
|
||||||
|
CREATE TABLE t1 ( id int NOT NULL, key(id));
|
||||||
|
INSERT INTO t1 VALUES (11),(12),(13),(14),(15),(16),(17),(18),(19);
|
||||||
|
CREATE TABLE t2 (i1 int NOT NULL, i2 int NOT NULL);
|
||||||
|
INSERT INTO t2 VALUES (11,11),(12,12),(13,13);
|
||||||
|
CREATE VIEW v1 AS SELECT t2.i1 FROM t2 where t2.i1 = t2.i2;
|
||||||
|
explain SELECT 1 FROM t1 where t1.id IN (SELECT v1.i1 from v1);
|
||||||
|
SELECT 1 FROM t1 where t1.id IN (SELECT v1.i1 from v1);
|
||||||
|
drop table t1,t2;
|
||||||
|
drop view v1;
|
||||||
--echo # End of 5.5 tests
|
--echo # End of 5.5 tests
|
||||||
|
@ -7445,11 +7445,11 @@ bool JOIN_TAB::keyuse_is_valid_for_access_in_chosen_plan(JOIN *join,
|
|||||||
st_select_lex *sjm_sel= emb_sj_nest->sj_subq_pred->unit->first_select();
|
st_select_lex *sjm_sel= emb_sj_nest->sj_subq_pred->unit->first_select();
|
||||||
for (uint i= 0; i < sjm_sel->item_list.elements; i++)
|
for (uint i= 0; i < sjm_sel->item_list.elements; i++)
|
||||||
{
|
{
|
||||||
DBUG_ASSERT(sjm_sel->ref_pointer_array[i]->type() == Item::FIELD_ITEM);
|
DBUG_ASSERT(sjm_sel->ref_pointer_array[i]->real_item()->type() == Item::FIELD_ITEM);
|
||||||
if (keyuse->val->type() == Item::FIELD_ITEM)
|
if (keyuse->val->real_item()->type() == Item::FIELD_ITEM)
|
||||||
{
|
{
|
||||||
Field *field = ((Item_field*)sjm_sel->ref_pointer_array[i])->field;
|
Field *field = ((Item_field*)sjm_sel->ref_pointer_array[i]->real_item())->field;
|
||||||
if (field->eq(((Item_field*)keyuse->val)->field))
|
if (field->eq(((Item_field*)keyuse->val->real_item())->field))
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user