Commit 8838c971 authored by unknown's avatar unknown
Browse files

A fix (Bug #4980: union statement with () union () order by produces wrong explain).

parent b871ea38
Loading
Loading
Loading
Loading
+8 −1
Original line number Diff line number Diff line
@@ -88,7 +88,6 @@ explain (select a,b from t1 limit 2) union all (select a,b from t2 order by a l
table	type	possible_keys	key	key_len	ref	rows	Extra
t1	ALL	NULL	NULL	NULL	NULL	4	
t2	ALL	NULL	NULL	NULL	NULL	4	Using filesort
t1	ALL	NULL	NULL	NULL	NULL	4	
(select sql_calc_found_rows  a,b from t1 limit 2)  union all (select a,b from t2 order by a) limit 2;
a	b
1	a
@@ -424,8 +423,16 @@ create table t1 select a from t1 union select a from t2;
INSERT TABLE 't1' isn't allowed in FROM table list
select a from t1 union select a from t2 order by t2.a;
Unknown column 't2.a' in 'ORDER BY'
drop table t1;
drop table t1,t2;
select length(version()) > 1 as `*` UNION select 2;
*
1
2
create table t1 (a int);
insert into t1 values (0), (3), (1), (2);
explain (select * from t1) union (select * from t1) order by a;
table	type	possible_keys	key	key_len	ref	rows	Extra
t1	ALL	NULL	NULL	NULL	NULL	4	
t1	ALL	NULL	NULL	NULL	NULL	4	
drop table t1;
+9 −0
Original line number Diff line number Diff line
@@ -228,6 +228,7 @@ create temporary table t1 select a from t1 union select a from t2;
create table t1 select a from t1 union select a from t2;
--error 1054
select a from t1 union select a from t2 order by t2.a;
drop table t1;   # Drop temporary table
drop table t1,t2;

#
@@ -236,3 +237,11 @@ drop table t1,t2;

select length(version()) > 1 as `*` UNION select 2;

#
# Bug #4980: problem with explain
#

create table t1 (a int);
insert into t1 values (0), (3), (1), (2);
explain (select * from t1) union (select * from t1) order by a;
drop table t1;
+4 −0
Original line number Diff line number Diff line
@@ -148,6 +148,10 @@ int mysql_union(THD *thd, LEX *lex,select_result *result)
  {
    ha_rows records_at_start;
    lex->select=sl;
#if MYSQL_VERSION_ID < 40100
    if (describe && sl->linkage == NOT_A_SELECT)
      break;      // Skip extra item in case of 'explain'
#endif
    /* Don't use offset for the last union if there is no braces */
    if (sl != lex_sl)
    {