summaryrefslogtreecommitdiff
path: root/sql/sql_union.cc
diff options
context:
space:
mode:
authorunknown <Sinisa@sinisa.nasamreza.org>2002-04-02 20:08:55 +0300
committerunknown <Sinisa@sinisa.nasamreza.org>2002-04-02 20:08:55 +0300
commit95ac82521c97fa257507118a13410f2e5229d91d (patch)
tree1bce2533c383be2ab3523d0665e59a22cc7f79df /sql/sql_union.cc
parent02695336bd5259e9a2558a025065faf905efb586 (diff)
downloadmariadb-git-95ac82521c97fa257507118a13410f2e5229d91d.tar.gz
Fix for a bug with EXPLAIN and (....) UNION (....) order by
Diffstat (limited to 'sql/sql_union.cc')
-rw-r--r--sql/sql_union.cc8
1 files changed, 5 insertions, 3 deletions
diff --git a/sql/sql_union.cc b/sql/sql_union.cc
index 1658fa701c5..541b2383e8d 100644
--- a/sql/sql_union.cc
+++ b/sql/sql_union.cc
@@ -34,6 +34,7 @@ int mysql_union(THD *thd, LEX *lex,select_result *result)
int describe=(lex->select_lex.options & SELECT_DESCRIBE) ? 1 : 0;
int res;
TABLE_LIST result_table_list;
+ TABLE_LIST *first_table=(TABLE_LIST *)lex->select_lex.table_list.first;
TMP_TABLE_PARAM tmp_table_param;
select_union *union_result;
DBUG_ENTER("mysql_union");
@@ -58,8 +59,9 @@ int mysql_union(THD *thd, LEX *lex,select_result *result)
the ORDER BY and LIMIT parameter for the whole UNION
*/
lex_sl= sl;
- last_sl->next=0; // Remove this extra element
order= (ORDER *) lex_sl->order_list.first;
+ if (!order || !describe)
+ last_sl->next=0; // Remove this extra element
}
else if (!last_sl->braces)
{
@@ -136,7 +138,7 @@ int mysql_union(THD *thd, LEX *lex,select_result *result)
if (thd->select_limit == HA_POS_ERROR)
sl->options&= ~OPTION_FOUND_ROWS;
- res=mysql_select(thd, (TABLE_LIST*) sl->table_list.first,
+ res=mysql_select(thd, (describe && sl->linkage==NOT_A_SELECT) ? first_table : (TABLE_LIST*) sl->table_list.first,
sl->item_list,
sl->where,
(sl->braces) ? (ORDER *)sl->order_list.first : (ORDER *) 0,
@@ -193,7 +195,7 @@ int mysql_union(THD *thd, LEX *lex,select_result *result)
if (describe)
thd->select_limit= HA_POS_ERROR; // no limit
res=mysql_select(thd,&result_table_list,
- item_list, NULL, /*ftfunc_list,*/ order,
+ item_list, NULL, (describe) ? 0 : order,
(ORDER*) NULL, NULL, (ORDER*) NULL,
thd->options, result);
}