diff --git a/mysql-test/r/merge.result b/mysql-test/r/merge.result index d844abc1847..f53b328d14e 100644 --- a/mysql-test/r/merge.result +++ b/mysql-test/r/merge.result @@ -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 diff --git a/mysql-test/t/merge.test b/mysql-test/t/merge.test index f12187ea143..5315c91daa6 100644 --- a/mysql-test/t/merge.test +++ b/mysql-test/t/merge.test @@ -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 diff --git a/sql/sql_base.cc b/sql/sql_base.cc index 0f0ee7c529e..0dc29f7e3c2 100644 --- a/sql/sql_base.cc +++ b/sql/sql_base.cc @@ -3843,6 +3843,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.