From 367c14b854f4afe6cfd41b9f56bf8fbf3c337b65 Mon Sep 17 00:00:00 2001
From: Sergey Glukhov <Sergey.Glukhov@sun.com>
Date: Thu, 27 Aug 2009 15:22:19 +0500
Subject: Bug#46184 Crash, SELECT ... FROM derived table procedure analyze The
 crash happens because select_union object is used as result set for queries
 which have derived tables. select_union use temporary table as data storage
 and if fields count exceeds 10(count of values for procedure ANALYSE()) then
 we get a crash on fill_record() function.

mysql-test/r/analyse.result:
  test result
mysql-test/r/subselect.result:
  result fix
mysql-test/t/analyse.test:
  test case
mysql-test/t/subselect.test:
  test fix
sql/sql_yacc.yy:
  The crash happens because select_union object is used as result set
  for queries which have derived tables.
  select_union use temporary table as data storage and if
  fields count exceeds 10(count of values for procedure ANALYSE())
  then we get a crash on fill_record() function.
---
 sql/sql_yacc.yy | 3 ++-
 1 file changed, 2 insertions(+), 1 deletion(-)

(limited to 'sql')

diff --git a/sql/sql_yacc.yy b/sql/sql_yacc.yy
index b38b6e96890..09a0a4b2f12 100644
--- a/sql/sql_yacc.yy
+++ b/sql/sql_yacc.yy
@@ -7334,7 +7334,8 @@ procedure_clause:
               MYSQL_YYABORT;
             }
 
-	    if (&lex->select_lex != lex->current_select)
+            if (&lex->select_lex != lex->current_select ||
+                lex->select_lex.get_table_list()->derived)
 	    {
 	      my_error(ER_WRONG_USAGE, MYF(0), "PROCEDURE", "subquery");
 	      MYSQL_YYABORT;
-- 
cgit v1.2.1