MySQL Lists are EOL. Please join:

List:Commits« Previous MessageNext Message »
From:Anurag Shekhar Date:April 17 2009 5:51am
Subject:bzr commit into mysql-5.1-bugteam branch (anurag.shekhar:2862)
Bug#44040
View as plain text  
#At file:///home/anurag/mysqlsrc/mysql-5.1-44040/ based on revid:alfranio.correia@stripped

 2862 Anurag Shekhar	2009-04-17
      Bug#44040 MySQL allows creating a MERGE table upon VIEWs but crashes when 
              using it.
      The crash was due to a null pointer present for select_lex while 
      processing the view.
      Adding a check while opening the view to see if its a child of a 
      merge table fixed this problem.
     @ mysql-test/r/merge.result
        Updated result for the new test case.
     @ mysql-test/t/merge.test
        Added test case based on the bug description.
     @ sql/sql_base.cc
        Added a check to check if the view being opened is a child table of a
        merge table and return error if it is.

    modified:
      mysql-test/r/merge.result
      mysql-test/t/merge.test
      sql/sql_base.cc
=== modified file 'mysql-test/r/merge.result'
--- a/mysql-test/r/merge.result	2009-03-04 09:18:07 +0000
+++ b/mysql-test/r/merge.result	2009-04-17 05:51:51 +0000
@@ -2115,4 +2115,16 @@ insert into m1 (col1) values (1);
 insert into m1 (col1) values (1);
 ERROR 23000: Duplicate entry '' for key '*UNKNOWN*'
 drop table m1, t1;
+CREATE TABLE t1 (
+col1 INT(10)
+) ENGINE=MyISAM  DEFAULT CHARSET=latin1;
+CREATE VIEW v1 as SELECT * FROM t1;
+CREATE TABLE m1 (
+col1 INT(10)
+)ENGINE=MRG_MyISAM DEFAULT CHARSET=latin1 INSERT_METHOD=LAST UNION=(v1);
+#Select should detect that the child table is a view and fail.
+SELECT * FROM m1;
+ERROR HY000: Unable to open underlying table which is differently defined or of non-MyISAM type or doesn't exist
+DROP VIEW v1;
+DROP TABLE m1, t1;
 End of 5.1 tests

=== modified file 'mysql-test/t/merge.test'
--- a/mysql-test/t/merge.test	2009-03-04 09:18:07 +0000
+++ b/mysql-test/t/merge.test	2009-04-17 05:51:51 +0000
@@ -1514,4 +1514,25 @@ insert into m1 (col1) values (1);
 insert into m1 (col1) values (1);
 
 drop table m1, t1;
+
+#
+#Bug #44040   MySQL allows creating a MERGE table upon VIEWs but crashes 
+#when using it
+#
+
+CREATE TABLE t1 (
+        col1 INT(10)
+) ENGINE=MyISAM  DEFAULT CHARSET=latin1;
+
+CREATE VIEW v1 as SELECT * FROM t1;
+CREATE TABLE m1 (
+        col1 INT(10)
+)ENGINE=MRG_MyISAM DEFAULT CHARSET=latin1 INSERT_METHOD=LAST UNION=(v1);
+
+--echo #Select should detect that the child table is a view and fail.
+--error ER_WRONG_MRG_TABLE
+SELECT * FROM m1;
+
+DROP VIEW v1;
+DROP TABLE m1, t1;
 --echo End of 5.1 tests

=== modified file 'sql/sql_base.cc'
--- a/sql/sql_base.cc	2009-04-08 23:58:57 +0000
+++ b/sql/sql_base.cc	2009-04-17 05:51:51 +0000
@@ -3844,6 +3844,16 @@ retry:
   if (share->is_view)
   {
     /*
+      If parent_l of the table_list is non null then a merge table
+      has this view as child table, which is not supported.
+    */
+    if (table_list->parent_l)
+    {
+      my_error(ER_WRONG_MRG_TABLE, MYF(0));
+      goto err;
+    }
+
+    /*
       This table is a view. Validate its metadata version: in particular,
       that it was a view when the statement was prepared.
     */


Attachment: [text/bzr-bundle] bzr/anurag.shekhar@sun.com-20090417055151-twonna2np9ktay0s.bundle
Thread
bzr commit into mysql-5.1-bugteam branch (anurag.shekhar:2862)Bug#44040Anurag Shekhar17 Apr