Commit 3acccb98 authored by ram@gw.mysql.r18.ru's avatar ram@gw.mysql.r18.ru

A fix (Bug #5232: CREATE TABLE ... SELECT can deadlock itself).

parent 2ed54c12
......@@ -610,3 +610,12 @@ x y
1 3
1 2
drop table t1,t2,t3;
create table t1 (a int);
create table t2 (a int);
insert into t1 values (0);
insert into t2 values (1);
create table t3 engine=merge union=(t1, t2) select * from t1;
INSERT TABLE 't1' isn't allowed in FROM table list
create table t3 engine=merge union=(t1, t2) select * from t2;
INSERT TABLE 't2' isn't allowed in FROM table list
drop table t1, t2;
......@@ -250,3 +250,17 @@ select * from t3 where x = 1 and y < 5 order by y;
# Bug is that followng query returns empty set while it must be same as above
select * from t3 where x = 1 and y < 5 order by y desc;
drop table t1,t2,t3;
#
# Bug#5232: CREATE TABLE ... SELECT
#
create table t1 (a int);
create table t2 (a int);
insert into t1 values (0);
insert into t2 values (1);
--error 1093
create table t3 engine=merge union=(t1, t2) select * from t1;
--error 1093
create table t3 engine=merge union=(t1, t2) select * from t2;
drop table t1, t2;
......@@ -1655,6 +1655,19 @@ mysql_execute_command(void)
net_printf(&thd->net,ER_INSERT_TABLE_USED,tables->real_name);
DBUG_VOID_RETURN;
}
if (lex->create_info.used_fields & HA_CREATE_USED_UNION)
{
TABLE_LIST *tab;
for (tab= tables; tab; tab= tab->next)
{
if (check_dup(tables->db, tab->real_name,
(TABLE_LIST*)lex->create_info.merge_list.first))
{
net_printf(&thd->net, ER_INSERT_TABLE_USED, tab->real_name);
DBUG_VOID_RETURN;
}
}
}
if (tables->next)
{
TABLE_LIST *table;
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment