Commit c11f2008 authored by unknown's avatar unknown

A fix for a crashing bug in EXPLAIN on derived tables with a join.

parent 9a86ad60
...@@ -105,6 +105,11 @@ a b ...@@ -105,6 +105,11 @@ a b
1 a 1 a
2 b 2 b
3 c 3 c
explain select * from (select * from t1,t2 where t1.a=t2.a) t1;
id select_type table type possible_keys key key_len ref rows Extra
1 PRIMARY <derived2> system NULL NULL NULL NULL 1
2 DERIVED t2 system NULL NULL NULL NULL 1
2 DERIVED t1 ALL NULL NULL NULL NULL 4 Using where
drop table t1, t2; drop table t1, t2;
create table t1(a int not null, t char(8), index(a)); create table t1(a int not null, t char(8), index(a));
SELECT * FROM (SELECT * FROM t1) as b ORDER BY a ASC LIMIT 0,20; SELECT * FROM (SELECT * FROM t1) as b ORDER BY a ASC LIMIT 0,20;
......
...@@ -41,6 +41,7 @@ CREATE TABLE t2 (a int not null); ...@@ -41,6 +41,7 @@ CREATE TABLE t2 (a int not null);
insert into t2 values(1); insert into t2 values(1);
select * from (select * from t1 where t1.a=(select a from t2 where t2.a=t1.a)) a; select * from (select * from t1 where t1.a=(select a from t2 where t2.a=t1.a)) a;
select * from (select * from t1 where t1.a=(select t2.a from t2 where t2.a=t1.a) union select t1.a, t1.b from t1) a; select * from (select * from t1 where t1.a=(select t2.a from t2 where t2.a=t1.a) union select t1.a, t1.b from t1) a;
explain select * from (select * from t1,t2 where t1.a=t2.a) t1;
drop table t1, t2; drop table t1, t2;
create table t1(a int not null, t char(8), index(a)); create table t1(a int not null, t char(8), index(a));
disable_query_log; disable_query_log;
......
...@@ -194,7 +194,10 @@ int mysql_derived(THD *thd, LEX *lex, SELECT_LEX_UNIT *unit, ...@@ -194,7 +194,10 @@ int mysql_derived(THD *thd, LEX *lex, SELECT_LEX_UNIT *unit,
{ {
// to fix a problem in EXPLAIN // to fix a problem in EXPLAIN
if (tables) if (tables)
tables->table_list->table=tables->table; {
for (TABLE_LIST *cursor= tables; cursor; cursor= cursor->next)
cursor->table_list->table=cursor->table;
}
} }
else else
unit->exclude_level(); unit->exclude_level();
......
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