summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--mysql-test/r/union.result3
-rw-r--r--mysql-test/t/union.test1
-rw-r--r--sql/sql_union.cc2
-rw-r--r--sql/sql_yacc.yy2
4 files changed, 7 insertions, 1 deletions
diff --git a/mysql-test/r/union.result b/mysql-test/r/union.result
index 02dda58d48f..9f62ffe5c40 100644
--- a/mysql-test/r/union.result
+++ b/mysql-test/r/union.result
@@ -201,3 +201,6 @@ set SQL_SELECT_LIMIT=DEFAULT;
drop table t1,t2;
select * union select 1;
No tables used
+select 1 as a,(select a union select a);
+a (select a union select a)
+1 1
diff --git a/mysql-test/t/union.test b/mysql-test/t/union.test
index 9ddfda7872f..449bafbdef6 100644
--- a/mysql-test/t/union.test
+++ b/mysql-test/t/union.test
@@ -103,3 +103,4 @@ drop table t1,t2;
--error 1096
select * union select 1;
+select 1 as a,(select a union select a);
diff --git a/sql/sql_union.cc b/sql/sql_union.cc
index 6e8c2ebdb5c..6b0f6b660ac 100644
--- a/sql/sql_union.cc
+++ b/sql/sql_union.cc
@@ -125,6 +125,8 @@ int st_select_lex_unit::prepare(THD *thd, select_result *result)
SELECT_LEX_NODE *lex_select_save= thd->lex.current_select;
SELECT_LEX *sl;
+ if (lex_select_save->linkage != DERIVED_TABLE_TYPE)
+ thd->lex.current_select=first_select();
/* Global option */
if (((void*)(global_parameters)) == ((void*)this))
{
diff --git a/sql/sql_yacc.yy b/sql/sql_yacc.yy
index ed8e8f0fb51..c1057033bd4 100644
--- a/sql/sql_yacc.yy
+++ b/sql/sql_yacc.yy
@@ -2504,7 +2504,7 @@ select_derived:
mysql_init_select(lex);
lex->current_select->linkage= DERIVED_TABLE_TYPE;
}
- select_options select_item_list opt_select_from
+ select_options select_item_list opt_select_from union_opt
;
opt_outer: