Commit f950ec6a authored by unknown's avatar unknown

Bug#33266: Incorrect test case for the bug#31048 failing on some platforms.

The test case for the bug#31048 checks that there is no crash on stack
overrun. But due to different stack sizes on different platforms it failed
on some of them.

The new test case check that a query with at least 4 level subquery nesting
works without the stack overrun nesting and other levels of nesting doesn't
cause a crash.


mysql-test/t/subselect.test:
  Corrected test case for the bug#31048.
mysql-test/r/subselect.result:
  Corrected test case for the bug#31048.
parent f9bf3eef
...@@ -4147,103 +4147,37 @@ DROP TABLE t1,t2; ...@@ -4147,103 +4147,37 @@ DROP TABLE t1,t2;
create table t1(a int,b int,key(a),key(b)); create table t1(a int,b int,key(a),key(b));
insert into t1(a,b) values (1,2),(2,1),(2,3),(3,4),(5,4),(5,5), insert into t1(a,b) values (1,2),(2,1),(2,3),(3,4),(5,4),(5,5),
(6,7),(7,4),(5,3); (6,7),(7,4),(5,3);
select sum(a),a from t1 where a> ( 5
select sum(a) from t1 where a> ( select sum(a) from t1 where a> ( 4
select sum(a) from t1 where a> ( select sum(a) from t1 where a> ( 3
select sum(a) from t1 where a> ( select sum(a) from t1 where a> ( 2
select sum(a) from t1 where a> ( select sum(a) from t1 where a> ( 1
select sum(a) from t1 where a> ( select sum(a) from t1 where a> ( 26
select sum(a) from t1 where a> ( select sum(a) from t1 25
)group by b limit 1)group by b limit 1 24
)group by b limit 1)group by b limit 1)group by b limit 1 23
)group by b limit 1)group by b limit 1)group by b limit 1 22
)group by b limit 1)group by b limit 1)group by b limit 1) 21
group by a; 20
sum(a) a 19
select sum(a),a from t1 where a> ( 18
select sum(a) from t1 where a> ( select sum(a) from t1 where a> ( 17
select sum(a) from t1 where a> ( select sum(a) from t1 where a> ( 16
select sum(a) from t1 where a> ( select sum(a) from t1 where a> ( 15
select sum(a) from t1 where a> ( select sum(a) from t1 where a> ( 14
select sum(a) from t1 where a> ( select sum(a) from t1 where a> ( 13
select sum(a) from t1 where a> ( select sum(a) from t1 where a> ( 12
select sum(a) from t1 where a> ( select sum(a) from t1 where a> ( 11
select sum(a) from t1 where a> ( select sum(a) from t1 where a> ( 10
select sum(a) from t1 where a> ( select sum(a) from t1 where a> ( 9
select sum(a) from t1 where a> ( select sum(a) from t1 where a> ( 8
select sum(a) from t1 where a> ( select sum(a) from t1 where a> ( 7
select sum(a) from t1 where a> ( select sum(a) from t1 where a> ( 6
select sum(a) from t1 where a> ( select sum(a) from t1 where a> ( 5
select sum(a) from t1 where a> ( select sum(a) from t1 where a> ( 4
select sum(a) from t1 where a> ( select sum(a) from t1 where a> ( 3
select sum(a) from t1 2
)group by b limit 1)group by b limit 1)group by b limit 1 1
)group by b limit 1)group by b limit 1)group by b limit 1
)group by b limit 1)group by b limit 1)group by b limit 1
)group by b limit 1)group by b limit 1)group by b limit 1
)group by b limit 1)group by b limit 1)group by b limit 1
)group by b limit 1)group by b limit 1)group by b limit 1
)group by b limit 1)group by b limit 1)group by b limit 1
)group by b limit 1)group by b limit 1)group by b limit 1
)group by b limit 1)group by b limit 1)group by b limit 1
)group by b limit 1)group by b limit 1)group by b limit 1)
group by a;
ERROR HY000: Thread stack overrun detected
explain select sum(a),a from t1 where a> (
select sum(a) from t1 where a> ( select sum(a) from t1 where a> (
select sum(a) from t1 where a> ( select sum(a) from t1 where a> (
select sum(a) from t1 where a> ( select sum(a) from t1 where a> (
select sum(a) from t1 where a> ( select sum(a) from t1 where a> (
select sum(a) from t1 where a> ( select sum(a) from t1 where a> (
select sum(a) from t1 where a> ( select sum(a) from t1
)group by b limit 1)group by b limit 1
)group by b limit 1)group by b limit 1)group by b limit 1
)group by b limit 1)group by b limit 1)group by b limit 1
)group by b limit 1)group by b limit 1)group by b limit 1)
group by a;
id select_type table type possible_keys key key_len ref rows Extra
1 PRIMARY t1 index a a 5 NULL 9 Using where; Using index
2 SUBQUERY t1 range a a 5 NULL 9 Using where; Using temporary; Using filesort
3 SUBQUERY t1 range a a 5 NULL 9 Using where; Using temporary; Using filesort
4 SUBQUERY t1 range a a 5 NULL 9 Using where; Using temporary; Using filesort
5 SUBQUERY t1 range a a 5 NULL 9 Using where; Using temporary; Using filesort
6 SUBQUERY t1 range a a 5 NULL 9 Using where; Using temporary; Using filesort
7 SUBQUERY t1 range a a 5 NULL 9 Using where; Using temporary; Using filesort
8 SUBQUERY t1 range a a 5 NULL 9 Using where; Using temporary; Using filesort
9 SUBQUERY t1 range a a 5 NULL 9 Using where; Using temporary; Using filesort
10 SUBQUERY t1 range a a 5 NULL 9 Using where; Using temporary; Using filesort
11 SUBQUERY t1 range a a 5 NULL 9 Using where; Using temporary; Using filesort
12 SUBQUERY t1 range a a 5 NULL 1 Using where; Using temporary; Using filesort
13 SUBQUERY t1 index NULL a 5 NULL 9 Using index
explain select sum(a),a from t1 where a> (
select sum(a) from t1 where a> ( select sum(a) from t1 where a> (
select sum(a) from t1 where a> ( select sum(a) from t1 where a> (
select sum(a) from t1 where a> ( select sum(a) from t1 where a> (
select sum(a) from t1 where a> ( select sum(a) from t1 where a> (
select sum(a) from t1 where a> ( select sum(a) from t1 where a> (
select sum(a) from t1 where a> ( select sum(a) from t1 where a> (
select sum(a) from t1 where a> ( select sum(a) from t1 where a> (
select sum(a) from t1 where a> ( select sum(a) from t1 where a> (
select sum(a) from t1 where a> ( select sum(a) from t1 where a> (
select sum(a) from t1 where a> ( select sum(a) from t1 where a> (
select sum(a) from t1 where a> ( select sum(a) from t1 where a> (
select sum(a) from t1 where a> ( select sum(a) from t1 where a> (
select sum(a) from t1 where a> ( select sum(a) from t1 where a> (
select sum(a) from t1 where a> ( select sum(a) from t1 where a> (
select sum(a) from t1 where a> ( select sum(a) from t1 where a> (
select sum(a) from t1
)group by b limit 1)group by b limit 1)group by b limit 1
)group by b limit 1)group by b limit 1)group by b limit 1
)group by b limit 1)group by b limit 1)group by b limit 1
)group by b limit 1)group by b limit 1)group by b limit 1
)group by b limit 1)group by b limit 1)group by b limit 1
)group by b limit 1)group by b limit 1)group by b limit 1
)group by b limit 1)group by b limit 1)group by b limit 1
)group by b limit 1)group by b limit 1)group by b limit 1
)group by b limit 1)group by b limit 1)group by b limit 1
)group by b limit 1)group by b limit 1)group by b limit 1)
group by a;
ERROR HY000: Thread stack overrun detected
drop table t1; drop table t1;
CREATE TABLE t1 (a1 INT, a2 INT); CREATE TABLE t1 (a1 INT, a2 INT);
CREATE TABLE t2 (b1 INT, b2 INT); CREATE TABLE t2 (b1 INT, b2 INT);
......
...@@ -3006,92 +3006,44 @@ DROP TABLE t1,t2; ...@@ -3006,92 +3006,44 @@ DROP TABLE t1,t2;
create table t1(a int,b int,key(a),key(b)); create table t1(a int,b int,key(a),key(b));
insert into t1(a,b) values (1,2),(2,1),(2,3),(3,4),(5,4),(5,5), insert into t1(a,b) values (1,2),(2,1),(2,3),(3,4),(5,4),(5,5),
(6,7),(7,4),(5,3); (6,7),(7,4),(5,3);
# test for the stack overflow bug
select sum(a),a from t1 where a> ( let $nesting= 26;
select sum(a) from t1 where a> ( select sum(a) from t1 where a> ( let $should_work_nesting= 5;
select sum(a) from t1 where a> ( select sum(a) from t1 where a> ( let $start= select sum(a),a from t1 where a> ( select sum(a) from t1 ;
select sum(a) from t1 where a> ( select sum(a) from t1 where a> ( let $end= )group by a ;
select sum(a) from t1 where a> ( select sum(a) from t1 where a> ( let $start_app= where a> ( select sum(a) from t1 ;
select sum(a) from t1 where a> ( select sum(a) from t1 where a> ( let $end_pre= )group by b limit 1 ;
select sum(a) from t1 where a> ( select sum(a) from t1
)group by b limit 1)group by b limit 1 --disable_result_log
)group by b limit 1)group by b limit 1)group by b limit 1 --disable_query_log
)group by b limit 1)group by b limit 1)group by b limit 1 # At least 4 level nesting should work without errors
)group by b limit 1)group by b limit 1)group by b limit 1) while ($should_work_nesting)
group by a; {
--replace_regex /overrun.*$/overrun detected/ --echo $should_work_nesting
--error 1436 eval $start $end;
select sum(a),a from t1 where a> ( eval explain $start $end;
select sum(a) from t1 where a> ( select sum(a) from t1 where a> ( let $start= $start
select sum(a) from t1 where a> ( select sum(a) from t1 where a> ( $start_app;
select sum(a) from t1 where a> ( select sum(a) from t1 where a> ( let $end= $end_pre
select sum(a) from t1 where a> ( select sum(a) from t1 where a> ( $end;
select sum(a) from t1 where a> ( select sum(a) from t1 where a> ( dec $should_work_nesting;
select sum(a) from t1 where a> ( select sum(a) from t1 where a> ( }
select sum(a) from t1 where a> ( select sum(a) from t1 where a> ( # Other may fail with the 'stack overrun error'
select sum(a) from t1 where a> ( select sum(a) from t1 where a> ( while ($nesting)
select sum(a) from t1 where a> ( select sum(a) from t1 where a> ( {
select sum(a) from t1 where a> ( select sum(a) from t1 where a> ( --echo $nesting
select sum(a) from t1 where a> ( select sum(a) from t1 where a> ( --error 0,1436
select sum(a) from t1 where a> ( select sum(a) from t1 where a> ( eval $start $end;
select sum(a) from t1 where a> ( select sum(a) from t1 where a> ( --error 0,1436
select sum(a) from t1 where a> ( select sum(a) from t1 where a> ( eval explain $start $end;
select sum(a) from t1 where a> ( select sum(a) from t1 where a> ( let $start= $start
select sum(a) from t1 $start_app;
)group by b limit 1)group by b limit 1)group by b limit 1 let $end= $end_pre
)group by b limit 1)group by b limit 1)group by b limit 1 $end;
)group by b limit 1)group by b limit 1)group by b limit 1 dec $nesting;
)group by b limit 1)group by b limit 1)group by b limit 1 }
)group by b limit 1)group by b limit 1)group by b limit 1 --enable_result_log
)group by b limit 1)group by b limit 1)group by b limit 1 --enable_query_log
)group by b limit 1)group by b limit 1)group by b limit 1
)group by b limit 1)group by b limit 1)group by b limit 1
)group by b limit 1)group by b limit 1)group by b limit 1
)group by b limit 1)group by b limit 1)group by b limit 1)
group by a;
# test for the memory consumption & subquery slowness bug
explain select sum(a),a from t1 where a> (
select sum(a) from t1 where a> ( select sum(a) from t1 where a> (
select sum(a) from t1 where a> ( select sum(a) from t1 where a> (
select sum(a) from t1 where a> ( select sum(a) from t1 where a> (
select sum(a) from t1 where a> ( select sum(a) from t1 where a> (
select sum(a) from t1 where a> ( select sum(a) from t1 where a> (
select sum(a) from t1 where a> ( select sum(a) from t1
)group by b limit 1)group by b limit 1
)group by b limit 1)group by b limit 1)group by b limit 1
)group by b limit 1)group by b limit 1)group by b limit 1
)group by b limit 1)group by b limit 1)group by b limit 1)
group by a;
--replace_regex /overrun.*$/overrun detected/
--error 1436
explain select sum(a),a from t1 where a> (
select sum(a) from t1 where a> ( select sum(a) from t1 where a> (
select sum(a) from t1 where a> ( select sum(a) from t1 where a> (
select sum(a) from t1 where a> ( select sum(a) from t1 where a> (
select sum(a) from t1 where a> ( select sum(a) from t1 where a> (
select sum(a) from t1 where a> ( select sum(a) from t1 where a> (
select sum(a) from t1 where a> ( select sum(a) from t1 where a> (
select sum(a) from t1 where a> ( select sum(a) from t1 where a> (
select sum(a) from t1 where a> ( select sum(a) from t1 where a> (
select sum(a) from t1 where a> ( select sum(a) from t1 where a> (
select sum(a) from t1 where a> ( select sum(a) from t1 where a> (
select sum(a) from t1 where a> ( select sum(a) from t1 where a> (
select sum(a) from t1 where a> ( select sum(a) from t1 where a> (
select sum(a) from t1 where a> ( select sum(a) from t1 where a> (
select sum(a) from t1 where a> ( select sum(a) from t1 where a> (
select sum(a) from t1 where a> ( select sum(a) from t1 where a> (
select sum(a) from t1
)group by b limit 1)group by b limit 1)group by b limit 1
)group by b limit 1)group by b limit 1)group by b limit 1
)group by b limit 1)group by b limit 1)group by b limit 1
)group by b limit 1)group by b limit 1)group by b limit 1
)group by b limit 1)group by b limit 1)group by b limit 1
)group by b limit 1)group by b limit 1)group by b limit 1
)group by b limit 1)group by b limit 1)group by b limit 1
)group by b limit 1)group by b limit 1)group by b limit 1
)group by b limit 1)group by b limit 1)group by b limit 1
)group by b limit 1)group by b limit 1)group by b limit 1)
group by a;
drop table t1; drop table t1;
# #
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment