Commit f91ca0bd authored by ram@gw.mysql.r18.ru's avatar ram@gw.mysql.r18.ru

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

parent f7bc60e0
......@@ -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;
......@@ -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;
......@@ -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)
{
......
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