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.
This commit is contained in:
parent
c90a869c6b
commit
0501328a7d
@ -2115,4 +2115,16 @@ insert into m1 (col1) values (1);
|
|||||||
insert into m1 (col1) values (1);
|
insert into m1 (col1) values (1);
|
||||||
ERROR 23000: Duplicate entry '' for key '*UNKNOWN*'
|
ERROR 23000: Duplicate entry '' for key '*UNKNOWN*'
|
||||||
drop table m1, t1;
|
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
|
End of 5.1 tests
|
||||||
|
@ -1514,4 +1514,25 @@ insert into m1 (col1) values (1);
|
|||||||
insert into m1 (col1) values (1);
|
insert into m1 (col1) values (1);
|
||||||
|
|
||||||
drop table m1, t1;
|
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
|
--echo End of 5.1 tests
|
||||||
|
@ -3843,6 +3843,16 @@ retry:
|
|||||||
|
|
||||||
if (share->is_view)
|
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,
|
This table is a view. Validate its metadata version: in particular,
|
||||||
that it was a view when the statement was prepared.
|
that it was a view when the statement was prepared.
|
||||||
|
Loading…
x
Reference in New Issue
Block a user