Bug fix for multi-table delete with test case and manual entry

parent 3a9e7bd7
...@@ -49343,6 +49343,8 @@ Our TODO section contains what we plan to have in 4.0. @xref{TODO MySQL 4.0}. ...@@ -49343,6 +49343,8 @@ Our TODO section contains what we plan to have in 4.0. @xref{TODO MySQL 4.0}.
@itemize @bullet @itemize @bullet
@item @item
Fixed bug in multi-table @code{DELETE} when optimiser uses only indices
@item
Fixed that @code{ALTER TABLE table_name RENAME new_table_name} is as fast Fixed that @code{ALTER TABLE table_name RENAME new_table_name} is as fast
as @code{RENAME TABLE}. as @code{RENAME TABLE}.
@item @item
...@@ -66,3 +66,7 @@ select count(*) from t3 where id3; ...@@ -66,3 +66,7 @@ select count(*) from t3 where id3;
count(*) count(*)
0 0
drop table t1,t2,t3; drop table t1,t2,t3;
create table t1(id1 int not null auto_increment primary key, t varchar(100));
create table t2(id2 int not null, t varchar(100), index(id2));
delete t1, t2 from t2,t1 where t1.id1 = t2.id2 and t1.id1 > 100;
drop table t1,t2;
...@@ -62,3 +62,21 @@ select count(*) from t2 where id2; ...@@ -62,3 +62,21 @@ select count(*) from t2 where id2;
select count(*) from t3 where id3; select count(*) from t3 where id3;
drop table t1,t2,t3; drop table t1,t2,t3;
create table t1(id1 int not null auto_increment primary key, t varchar(100));
create table t2(id2 int not null, t varchar(100), index(id2));
disable_query_log;
let $1 = 1000;
while ($1)
{
let $2 = 5;
eval insert into t1(t) values ('aaaaaaaaaaaaaaaaaaaa');
while ($2)
{
eval insert into t2(id2,t) values ($1,'bbbbbbbbbbbbbbbbb');
dec $2;
}
dec $1;
}
enable_query_log;
delete t1, t2 from t2,t1 where t1.id1 = t2.id2 and t1.id1 > 100;
drop table t1,t2;
...@@ -1963,11 +1963,6 @@ mysql_execute_command(void) ...@@ -1963,11 +1963,6 @@ mysql_execute_command(void)
(void)add_item_to_list(new Item_field(auxi->db,auxi->real_name,"*")); (void)add_item_to_list(new Item_field(auxi->db,auxi->real_name,"*"));
} }
tables->grant.want_privilege=(SELECT_ACL & ~tables->grant.privilege); tables->grant.want_privilege=(SELECT_ACL & ~tables->grant.privilege);
if (add_item_to_list(new Item_null()))
{
res= -1;
break;
}
thd->proc_info="init"; thd->proc_info="init";
if ((res=open_and_lock_tables(thd,tables))) if ((res=open_and_lock_tables(thd,tables)))
break; break;
......
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