Commit 0e763988 authored by gkodinov/kgeorge@magare.gmz's avatar gkodinov/kgeorge@magare.gmz
Browse files

Merge gkodinov@bk-internal.mysql.com:/home/bk/mysql-5.0-opt

into  magare.gmz:/home/kgeorge/mysql/autopush/B30604-5.0-opt
parents 5b508f2d 8af4b43b
Loading
Loading
Loading
Loading
+31 −97
Original line number Diff line number Diff line
@@ -4147,103 +4147,37 @@ DROP TABLE t1,t2;
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),
(6,7),(7,4),(5,3);
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;
sum(a)	a
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
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
5
4
3
2
1
26
25
24
23
22
21
20
19
18
17
16
15
14
13
12
11
10
9
8
7
6
5
4
3
2
1
drop table t1;
CREATE TABLE t1 (a1 INT, a2 INT);
CREATE TABLE t2 (b1 INT, b2 INT);
+9 −0
Original line number Diff line number Diff line
@@ -46,3 +46,12 @@ CREATE TABLE t2 (a int);
lock tables t1 write,t1 as b write, t2 write, t2 as c read;
drop table t2,t1;
unlock tables;
create temporary table t1(f1 int);
lock tables t1 write;
insert into t1 values (1);
show columns from t1;
Field	Type	Null	Key	Default	Extra
f1	int(11)	YES		NULL	
insert into t1 values(2);
drop table t1;
unlock tables;
+38 −86
Original line number Diff line number Diff line
@@ -3006,92 +3006,44 @@ DROP TABLE t1,t2;
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),
  (6,7),(7,4),(5,3);
# test for the stack overflow bug
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
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;
# 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;

let $nesting= 26;
let $should_work_nesting= 5;
let $start= select sum(a),a from t1 where a> ( select sum(a) from t1 ;
let $end= )group by a ;
let $start_app= where a> ( select sum(a) from t1 ;
let $end_pre= )group by b limit 1 ;

--disable_result_log
--disable_query_log
# At least 4 level nesting should work without errors
while ($should_work_nesting)
{
--echo $should_work_nesting
  eval $start $end;
  eval explain $start $end;
  let $start= $start
  $start_app;
  let $end= $end_pre
  $end;
  dec $should_work_nesting;
}
# Other may fail with the 'stack overrun error'
while ($nesting)
{
--echo $nesting
--error 0,1436
  eval $start $end;
--error 0,1436
  eval explain $start $end;
  let $start= $start
  $start_app;
  let $end= $end_pre
  $end;
  dec $nesting;
}
--enable_result_log
--enable_query_log
drop table t1;

#
+13 −0
Original line number Diff line number Diff line
@@ -49,3 +49,16 @@ drop table t2,t1;
unlock tables;

# End of 4.1 tests

#
# Bug#23588 SHOW COLUMNS on a temporary table causes locking issues
#
create temporary table t1(f1 int);
lock tables t1 write;
insert into t1 values (1);
show columns from t1;
insert into t1 values(2);
drop table t1;
unlock tables;

# End of 5.0 tests
+6 −2
Original line number Diff line number Diff line
@@ -2852,8 +2852,12 @@ int open_tables(THD *thd, TABLE_LIST **start, uint *counter, uint flags)
    }

    if (tables->lock_type != TL_UNLOCK && ! thd->locked_tables)
      tables->table->reginfo.lock_type= tables->lock_type == TL_WRITE_DEFAULT ?
        thd->update_lock_default : tables->lock_type;
    {
      if (tables->lock_type == TL_WRITE_DEFAULT)
        tables->table->reginfo.lock_type= thd->update_lock_default;
      else if (tables->table->s->tmp_table == NO_TMP_TABLE)
        tables->table->reginfo.lock_type= tables->lock_type;
    }
    tables->table->grant= tables->grant;

process_view_routines: