Skip to content

Commit 7ccde2c

Browse files
committed
MDEV-7565: Server crash with Signal 6 (part 2)
Preparation of subselect moved earlier (before checks which needs it prepared).
1 parent 006acf7 commit 7ccde2c

File tree

7 files changed

+78
-6
lines changed

7 files changed

+78
-6
lines changed

mysql-test/r/subselect.result

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7015,3 +7015,15 @@ select exists(select 1 from t1 group by `c` in (select `c` from t1));
70157015
exists(select 1 from t1 group by `c` in (select `c` from t1))
70167016
0
70177017
drop table t1;
7018+
#
7019+
# MDEV-7565: Server crash with Signal 6 (part 2)
7020+
#
7021+
Select
7022+
(Select Sum(`TestCase`.Revenue) From mysql.slow_log E
7023+
Where TestCase.TemplateID not in (Select 1 from mysql.slow_log where 2=2)
7024+
) As `ControlRev`
7025+
From
7026+
(Select 3 as Revenue, 4 as TemplateID) As `TestCase`
7027+
Group By TestCase.Revenue, TestCase.TemplateID;
7028+
ControlRev
7029+
NULL

mysql-test/r/subselect_no_mat.result

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7012,6 +7012,18 @@ select exists(select 1 from t1 group by `c` in (select `c` from t1));
70127012
exists(select 1 from t1 group by `c` in (select `c` from t1))
70137013
0
70147014
drop table t1;
7015+
#
7016+
# MDEV-7565: Server crash with Signal 6 (part 2)
7017+
#
7018+
Select
7019+
(Select Sum(`TestCase`.Revenue) From mysql.slow_log E
7020+
Where TestCase.TemplateID not in (Select 1 from mysql.slow_log where 2=2)
7021+
) As `ControlRev`
7022+
From
7023+
(Select 3 as Revenue, 4 as TemplateID) As `TestCase`
7024+
Group By TestCase.Revenue, TestCase.TemplateID;
7025+
ControlRev
7026+
NULL
70157027
set optimizer_switch=default;
70167028
select @@optimizer_switch like '%materialization=on%';
70177029
@@optimizer_switch like '%materialization=on%'

mysql-test/r/subselect_no_opts.result

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7010,4 +7010,16 @@ select exists(select 1 from t1 group by `c` in (select `c` from t1));
70107010
exists(select 1 from t1 group by `c` in (select `c` from t1))
70117011
0
70127012
drop table t1;
7013+
#
7014+
# MDEV-7565: Server crash with Signal 6 (part 2)
7015+
#
7016+
Select
7017+
(Select Sum(`TestCase`.Revenue) From mysql.slow_log E
7018+
Where TestCase.TemplateID not in (Select 1 from mysql.slow_log where 2=2)
7019+
) As `ControlRev`
7020+
From
7021+
(Select 3 as Revenue, 4 as TemplateID) As `TestCase`
7022+
Group By TestCase.Revenue, TestCase.TemplateID;
7023+
ControlRev
7024+
NULL
70137025
set @optimizer_switch_for_subselect_test=null;

mysql-test/r/subselect_no_scache.result

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7021,6 +7021,18 @@ select exists(select 1 from t1 group by `c` in (select `c` from t1));
70217021
exists(select 1 from t1 group by `c` in (select `c` from t1))
70227022
0
70237023
drop table t1;
7024+
#
7025+
# MDEV-7565: Server crash with Signal 6 (part 2)
7026+
#
7027+
Select
7028+
(Select Sum(`TestCase`.Revenue) From mysql.slow_log E
7029+
Where TestCase.TemplateID not in (Select 1 from mysql.slow_log where 2=2)
7030+
) As `ControlRev`
7031+
From
7032+
(Select 3 as Revenue, 4 as TemplateID) As `TestCase`
7033+
Group By TestCase.Revenue, TestCase.TemplateID;
7034+
ControlRev
7035+
NULL
70247036
set optimizer_switch=default;
70257037
select @@optimizer_switch like '%subquery_cache=on%';
70267038
@@optimizer_switch like '%subquery_cache=on%'

mysql-test/r/subselect_no_semijoin.result

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7010,5 +7010,17 @@ select exists(select 1 from t1 group by `c` in (select `c` from t1));
70107010
exists(select 1 from t1 group by `c` in (select `c` from t1))
70117011
0
70127012
drop table t1;
7013+
#
7014+
# MDEV-7565: Server crash with Signal 6 (part 2)
7015+
#
7016+
Select
7017+
(Select Sum(`TestCase`.Revenue) From mysql.slow_log E
7018+
Where TestCase.TemplateID not in (Select 1 from mysql.slow_log where 2=2)
7019+
) As `ControlRev`
7020+
From
7021+
(Select 3 as Revenue, 4 as TemplateID) As `TestCase`
7022+
Group By TestCase.Revenue, TestCase.TemplateID;
7023+
ControlRev
7024+
NULL
70137025
set @optimizer_switch_for_subselect_test=null;
70147026
set @join_cache_level_for_subselect_test=NULL;

mysql-test/t/subselect.test

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5890,3 +5890,15 @@ DROP TABLE t1,t2;
58905890
create table t1 (c int);
58915891
select exists(select 1 from t1 group by `c` in (select `c` from t1));
58925892
drop table t1;
5893+
5894+
--echo #
5895+
--echo # MDEV-7565: Server crash with Signal 6 (part 2)
5896+
--echo #
5897+
Select
5898+
(Select Sum(`TestCase`.Revenue) From mysql.slow_log E
5899+
Where TestCase.TemplateID not in (Select 1 from mysql.slow_log where 2=2)
5900+
) As `ControlRev`
5901+
From
5902+
(Select 3 as Revenue, 4 as TemplateID) As `TestCase`
5903+
Group By TestCase.Revenue, TestCase.TemplateID;
5904+

sql/opt_subselect.cc

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -703,6 +703,12 @@ int check_and_do_in_subquery_rewrites(JOIN *join)
703703
if (!optimizer_flag(thd, OPTIMIZER_SWITCH_IN_TO_EXISTS) &&
704704
!optimizer_flag(thd, OPTIMIZER_SWITCH_MATERIALIZATION))
705705
my_error(ER_ILLEGAL_SUBQUERY_OPTIMIZER_SWITCHES, MYF(0));
706+
/*
707+
Transform each subquery predicate according to its overloaded
708+
transformer.
709+
*/
710+
if (subselect->select_transformer(join))
711+
DBUG_RETURN(-1);
706712

707713
/*
708714
If the subquery predicate is IN/=ANY, analyse and set all possible
@@ -754,12 +760,6 @@ int check_and_do_in_subquery_rewrites(JOIN *join)
754760
allany_subs->add_strategy(strategy);
755761
}
756762

757-
/*
758-
Transform each subquery predicate according to its overloaded
759-
transformer.
760-
*/
761-
if (subselect->select_transformer(join))
762-
DBUG_RETURN(-1);
763763
}
764764
}
765765
DBUG_RETURN(0);

0 commit comments

Comments
 (0)