diff options
-rw-r--r-- | mysql-test/r/union.result | 3 | ||||
-rw-r--r-- | mysql-test/t/union.test | 1 | ||||
-rw-r--r-- | sql/sql_union.cc | 2 | ||||
-rw-r--r-- | sql/sql_yacc.yy | 2 |
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: |