MySQL Lists are EOL. Please join:

List:Commits« Previous MessageNext Message »
From:Sergey Glukhov Date:August 27 2009 10:22am
Subject:bzr commit into mysql-5.0-bugteam branch (Sergey.Glukhov:2796)
Bug#46184
View as plain text  
#At file:///home/gluh/MySQL/mysql-5.0-bugteam/ based on revid:joro@stripped

 2796 Sergey Glukhov	2009-08-27
      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.

    modified:
      mysql-test/r/analyse.result
      mysql-test/r/subselect.result
      mysql-test/t/analyse.test
      mysql-test/t/subselect.test
      sql/sql_yacc.yy
=== modified file 'mysql-test/r/analyse.result'
--- a/mysql-test/r/analyse.result	2007-05-30 06:55:38 +0000
+++ b/mysql-test/r/analyse.result	2009-08-27 10:22:19 +0000
@@ -28,9 +28,7 @@ test.t1.bool	N	Y	1	1	0	0	1.0000	NULL	ENU
 test.t1.d	2002-03-03	2002-03-05	10	10	0	0	10.0000	NULL	ENUM('2002-03-03','2002-03-04','2002-03-05') NOT NULL
 drop table t1,t2;
 EXPLAIN SELECT 1 FROM (SELECT 1) a PROCEDURE ANALYSE();
-id	select_type	table	type	possible_keys	key	key_len	ref	rows	Extra
-1	PRIMARY	<derived2>	system	NULL	NULL	NULL	NULL	1	
-2	DERIVED	NULL	NULL	NULL	NULL	NULL	NULL	NULL	No tables used
+ERROR HY000: Incorrect usage of PROCEDURE and subquery
 create table t1 (a int not null);
 create table t2 select * from t1 where 0=1 procedure analyse();
 show create table t2;
@@ -153,4 +151,9 @@ select f3 from t1 procedure analyse(1, 1
 Field_name	Min_value	Max_value	Min_length	Max_length	Empties_or_zeros	Nulls	Avg_value_or_avg_length	Std	Optimal_fieldtype
 test.t1.f3	5.99999	9.55555	7	7	0	0	7.77777	1.77778	FLOAT(6,5) NOT NULL
 drop table t1;
+CREATE TABLE t1(a INT,b INT,c INT,d INT,e INT,f INT,g INT,h INT,i INT,j INT,k INT);
+INSERT INTO t1 VALUES ();
+SELECT * FROM (SELECT * FROM t1) d PROCEDURE ANALYSE();
+ERROR HY000: Incorrect usage of PROCEDURE and subquery
+DROP TABLE t1;
 End of 4.1 tests

=== modified file 'mysql-test/r/subselect.result'
--- a/mysql-test/r/subselect.result	2009-07-18 14:09:56 +0000
+++ b/mysql-test/r/subselect.result	2009-08-27 10:22:19 +0000
@@ -75,7 +75,7 @@ SELECT 1 FROM (SELECT 1 as a) b WHERE 1 
 select (SELECT 1 FROM (SELECT 1) a PROCEDURE ANALYSE(1));
 ERROR HY000: Incorrect usage of PROCEDURE and subquery
 SELECT 1 FROM (SELECT 1) a PROCEDURE ANALYSE((SELECT 1));
-ERROR HY000: Incorrect parameters to procedure 'ANALYSE'
+ERROR HY000: Incorrect usage of PROCEDURE and subquery
 SELECT (SELECT 1) as a FROM (SELECT 1) b WHERE (SELECT a) IS NULL;
 ERROR 42S22: Unknown column 'a' in 'field list'
 SELECT (SELECT 1) as a FROM (SELECT 1) b WHERE (SELECT a) IS NOT NULL;

=== modified file 'mysql-test/t/analyse.test'
--- a/mysql-test/t/analyse.test	2006-09-28 18:32:30 +0000
+++ b/mysql-test/t/analyse.test	2009-08-27 10:22:19 +0000
@@ -14,6 +14,7 @@ create table t2 select * from t1 procedu
 select * from t2;
 drop table t1,t2;
 
+--error ER_WRONG_USAGE
 EXPLAIN SELECT 1 FROM (SELECT 1) a PROCEDURE ANALYSE();
 
 #
@@ -102,4 +103,13 @@ select f2 from t1 procedure analyse(1, 1
 select f3 from t1 procedure analyse(1, 1);
 drop table t1;
 
+#
+# Bug#46184 Crash, SELECT ... FROM derived table procedure analyze
+#
+CREATE TABLE t1(a INT,b INT,c INT,d INT,e INT,f INT,g INT,h INT,i INT,j INT,k INT);
+INSERT INTO t1 VALUES ();
+--error ER_WRONG_USAGE
+SELECT * FROM (SELECT * FROM t1) d PROCEDURE ANALYSE();
+DROP TABLE t1;
+
 --echo End of 4.1 tests

=== modified file 'mysql-test/t/subselect.test'
--- a/mysql-test/t/subselect.test	2009-07-18 14:09:56 +0000
+++ b/mysql-test/t/subselect.test	2009-08-27 10:22:19 +0000
@@ -30,7 +30,7 @@ SELECT 1 IN (SELECT 1);
 SELECT 1 FROM (SELECT 1 as a) b WHERE 1 IN (SELECT (SELECT a));
 -- error ER_WRONG_USAGE
 select (SELECT 1 FROM (SELECT 1) a PROCEDURE ANALYSE(1));
--- error ER_WRONG_PARAMETERS_TO_PROCEDURE
+-- error ER_WRONG_USAGE
 SELECT 1 FROM (SELECT 1) a PROCEDURE ANALYSE((SELECT 1));
 -- error ER_BAD_FIELD_ERROR
 SELECT (SELECT 1) as a FROM (SELECT 1) b WHERE (SELECT a) IS NULL;

=== modified file 'sql/sql_yacc.yy'
--- a/sql/sql_yacc.yy	2009-07-16 12:37:38 +0000
+++ b/sql/sql_yacc.yy	2009-08-27 10:22:19 +0000
@@ -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;


Attachment: [text/bzr-bundle] bzr/sergey.glukhov@sun.com-20090827102219-sgjz0v5t1rfccs14.bundle
Thread
bzr commit into mysql-5.0-bugteam branch (Sergey.Glukhov:2796)Bug#46184Sergey Glukhov27 Aug