mirror of
https://github.com/MariaDB/server.git
synced 2025-07-30 16:24:05 +03:00
BUG#24127: merge fixes: If subselect is a union, dont allocate several
identical pushed_cond_guards arrays. Allocate only one always. mysql-test/r/subselect.result: BUG#24127: merge mysql-test/t/subselect3.test: BUG#24127: merge
This commit is contained in:
@ -1464,7 +1464,7 @@ id select_type table type possible_keys key key_len ref rows Extra
|
|||||||
1 PRIMARY t1 index NULL s1 6 NULL 3 Using index
|
1 PRIMARY t1 index NULL s1 6 NULL 3 Using index
|
||||||
2 DEPENDENT SUBQUERY t2 index_subquery s1 s1 6 func 2 Using index; Full scan on NULL key
|
2 DEPENDENT SUBQUERY t2 index_subquery s1 s1 6 func 2 Using index; Full scan on NULL key
|
||||||
Warnings:
|
Warnings:
|
||||||
Note 1003 select `test`.`t1`.`s1` AS `s1`,not(<in_optimizer>(`test`.`t1`.`s1`,<exists>(<index_lookup>(<cache>(`test`.`t1`.`s1`) in t2 on s1 checking NULL having trigcond(<is_not_null_test>(`test`.`t2`.`s1`)))))) AS `s1 NOT IN (SELECT s1 FROM t2)` from `test`.`t1`
|
Note 1003 select `test`.`t1`.`s1` AS `s1`,(not(<in_optimizer>(`test`.`t1`.`s1`,<exists>(<index_lookup>(<cache>(`test`.`t1`.`s1`) in t2 on s1 checking NULL having trigcond(<is_not_null_test>(`test`.`t2`.`s1`))))))) AS `s1 NOT IN (SELECT s1 FROM t2)` from `test`.`t1`
|
||||||
explain extended select s1, s1 = ANY (SELECT s1 FROM t2) from t1;
|
explain extended select s1, s1 = ANY (SELECT s1 FROM t2) from t1;
|
||||||
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 index NULL s1 6 NULL 3 Using index
|
1 PRIMARY t1 index NULL s1 6 NULL 3 Using index
|
||||||
@ -1476,13 +1476,13 @@ id select_type table type possible_keys key key_len ref rows Extra
|
|||||||
1 PRIMARY t1 index NULL s1 6 NULL 3 Using index
|
1 PRIMARY t1 index NULL s1 6 NULL 3 Using index
|
||||||
2 DEPENDENT SUBQUERY t2 index_subquery s1 s1 6 func 2 Using index; Full scan on NULL key
|
2 DEPENDENT SUBQUERY t2 index_subquery s1 s1 6 func 2 Using index; Full scan on NULL key
|
||||||
Warnings:
|
Warnings:
|
||||||
Note 1003 select `test`.`t1`.`s1` AS `s1`,not(<in_optimizer>(`test`.`t1`.`s1`,<exists>(<index_lookup>(<cache>(`test`.`t1`.`s1`) in t2 on s1 checking NULL having trigcond(<is_not_null_test>(`test`.`t2`.`s1`)))))) AS `s1 <> ALL (SELECT s1 FROM t2)` from `test`.`t1`
|
Note 1003 select `test`.`t1`.`s1` AS `s1`,(not(<in_optimizer>(`test`.`t1`.`s1`,<exists>(<index_lookup>(<cache>(`test`.`t1`.`s1`) in t2 on s1 checking NULL having trigcond(<is_not_null_test>(`test`.`t2`.`s1`))))))) AS `s1 <> ALL (SELECT s1 FROM t2)` from `test`.`t1`
|
||||||
explain extended select s1, s1 NOT IN (SELECT s1 FROM t2 WHERE s1 < 'a2') from t1;
|
explain extended select s1, s1 NOT IN (SELECT s1 FROM t2 WHERE s1 < 'a2') from t1;
|
||||||
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 index NULL s1 6 NULL 3 Using index
|
1 PRIMARY t1 index NULL s1 6 NULL 3 Using index
|
||||||
2 DEPENDENT SUBQUERY t2 index_subquery s1 s1 6 func 2 Using index; Using where; Full scan on NULL key
|
2 DEPENDENT SUBQUERY t2 index_subquery s1 s1 6 func 2 Using index; Using where; Full scan on NULL key
|
||||||
Warnings:
|
Warnings:
|
||||||
Note 1003 select `test`.`t1`.`s1` AS `s1`,not(<in_optimizer>(`test`.`t1`.`s1`,<exists>(<index_lookup>(<cache>(`test`.`t1`.`s1`) in t2 on s1 checking NULL where (`test`.`t2`.`s1` < _latin1'a2') having trigcond(<is_not_null_test>(`test`.`t2`.`s1`)))))) AS `s1 NOT IN (SELECT s1 FROM t2 WHERE s1 < 'a2')` from `test`.`t1`
|
Note 1003 select `test`.`t1`.`s1` AS `s1`,(not(<in_optimizer>(`test`.`t1`.`s1`,<exists>(<index_lookup>(<cache>(`test`.`t1`.`s1`) in t2 on s1 checking NULL where (`test`.`t2`.`s1` < _latin1'a2') having trigcond(<is_not_null_test>(`test`.`t2`.`s1`))))))) AS `s1 NOT IN (SELECT s1 FROM t2 WHERE s1 < 'a2')` from `test`.`t1`
|
||||||
drop table t1,t2;
|
drop table t1,t2;
|
||||||
create table t2 (a int, b int);
|
create table t2 (a int, b int);
|
||||||
create table t3 (a int);
|
create table t3 (a int);
|
||||||
|
@ -46,7 +46,6 @@ select a, oref, a in (select max(ie)
|
|||||||
explain extended
|
explain extended
|
||||||
select a, oref from t2
|
select a, oref from t2
|
||||||
where a in (select max(ie) from t1 where oref=t2.oref group by grp);
|
where a in (select max(ie) from t1 where oref=t2.oref group by grp);
|
||||||
|
|
||||||
select a, oref, a in (
|
select a, oref, a in (
|
||||||
select max(ie) from t1 where oref=t2.oref group by grp union
|
select max(ie) from t1 where oref=t2.oref group by grp union
|
||||||
select max(ie) from t1 where oref=t2.oref group by grp
|
select max(ie) from t1 where oref=t2.oref group by grp
|
||||||
|
@ -948,7 +948,7 @@ Item_in_subselect::single_value_transformer(JOIN *join,
|
|||||||
|
|
||||||
unit->uncacheable|= UNCACHEABLE_DEPENDENT;
|
unit->uncacheable|= UNCACHEABLE_DEPENDENT;
|
||||||
}
|
}
|
||||||
if (!abort_on_null && left_expr->maybe_null)
|
if (!abort_on_null && left_expr->maybe_null && !pushed_cond_guards)
|
||||||
{
|
{
|
||||||
if (!(pushed_cond_guards= (bool*)join->thd->alloc(sizeof(bool))))
|
if (!(pushed_cond_guards= (bool*)join->thd->alloc(sizeof(bool))))
|
||||||
DBUG_RETURN(RES_ERROR);
|
DBUG_RETURN(RES_ERROR);
|
||||||
@ -1163,7 +1163,7 @@ Item_in_subselect::row_value_transformer(JOIN *join)
|
|||||||
thd->lex->current_select= current;
|
thd->lex->current_select= current;
|
||||||
unit->uncacheable|= UNCACHEABLE_DEPENDENT;
|
unit->uncacheable|= UNCACHEABLE_DEPENDENT;
|
||||||
|
|
||||||
if (!abort_on_null && left_expr->maybe_null)
|
if (!abort_on_null && left_expr->maybe_null && !pushed_cond_guards)
|
||||||
{
|
{
|
||||||
if (!(pushed_cond_guards= (bool*)join->thd->alloc(sizeof(bool) *
|
if (!(pushed_cond_guards= (bool*)join->thd->alloc(sizeof(bool) *
|
||||||
left_expr->cols())))
|
left_expr->cols())))
|
||||||
|
Reference in New Issue
Block a user