From d8b4d6bd26c185d9e8072abb0f9f28f72c894a20 Mon Sep 17 00:00:00 2001
From: "Sinisa@sinisa.nasamreza.org" <>
Date: Mon, 9 Dec 2002 20:47:47 +0200
Subject: [PATCH] fix for a bug with UNION in sub-select's and start working on
 UNION's in derived tables

---
 mysql-test/r/union.result | 3 +++
 mysql-test/t/union.test   | 1 +
 sql/sql_union.cc          | 2 ++
 sql/sql_yacc.yy           | 2 +-
 4 files changed, 7 insertions(+), 1 deletion(-)

diff --git a/mysql-test/r/union.result b/mysql-test/r/union.result
index 02dda58d48..9f62ffe5c4 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 9ddfda7872..449bafbdef 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 6e8c2ebdb5..6b0f6b660a 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 ed8e8f0fb5..c1057033bd 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:
-- 
2.30.9