1
0
mirror of https://github.com/MariaDB/server.git synced 2025-08-01 03:47:19 +03:00

BUG#15699 importing the fix from 5.0

This commit is contained in:
aelkin@mysql.com
2006-01-26 12:49:55 +02:00
parent 5c3027833b
commit 2fbdc5483a
5 changed files with 96 additions and 5 deletions

View File

@ -0,0 +1,16 @@
stop slave;
drop table if exists t1,t2,t3,t4,t5,t6,t7,t8,t9;
reset master;
reset slave;
drop table if exists t1,t2,t3,t4,t5,t6,t7,t8,t9;
start slave;
**** Test case for BUG#16487 ****
**** Master ****
CREATE TABLE test.t4 (a int);
CREATE TABLE test.t1 (a int);
UPDATE test.t4 NATURAL JOIN test.t1 SET t1.a=5;
**** Slave ****
SELECT * FROM t4;
a
DROP TABLE t1;
DROP TABLE t4;

View File

@ -0,0 +1,25 @@
stop slave;
drop table if exists t1,t2,t3,t4,t5,t6,t7,t8,t9;
reset master;
reset slave;
drop table if exists t1,t2,t3,t4,t5,t6,t7,t8,t9;
start slave;
drop database if exists d1;
drop database if exists d2;
drop database if exists d2;
create database d1;
create table d1.t0 (id int);
create database d2;
use d2;
create table t1 (id int);
create table t2 (id int);
insert into t1 values (1), (2), (3), (4), (5);
insert into t2 select id + 3 from t1;
update t1 join t2 using (id) set t1.id = 0;
insert into d1.t0 values (0);
use d1;
select * from t0 where id=0;
id
0
drop database d1;
drop database d2;

View File

@ -0,0 +1 @@
--replicate-wild-do-table=d1.%

View File

@ -0,0 +1,44 @@
# Let's verify that multi-update is not always skipped by slave if
# some replicate-* rules exist.
# (BUG#15699)
source include/master-slave.inc;
### Clean-up
connection master;
--disable_warnings
drop database if exists d1;
drop database if exists d2;
connection slave;
drop database if exists d2;
--enable_warnings
### Test
connection master;
create database d1; # accepted by slave
create table d1.t0 (id int);
create database d2; # ignored by slave
use d2;
create table t1 (id int);
create table t2 (id int);
insert into t1 values (1), (2), (3), (4), (5);
insert into t2 select id + 3 from t1;
# a problematic query which must be filter out by slave
update t1 join t2 using (id) set t1.id = 0;
insert into d1.t0 values (0); # replication works
sync_slave_with_master;
use d1;
#connection slave;
select * from t0 where id=0; # must find
### Clean-up
connection master;
drop database d1;
drop database d2;
# End of test

View File

@ -2840,20 +2840,25 @@ unsent_create_error:
if ((res= multi_update_precheck(thd, tables)))
break;
if ((res= mysql_multi_update_lock(thd, tables, &select_lex->item_list,
select_lex)))
break;
res= mysql_multi_update_lock(thd, tables, &select_lex->item_list,
select_lex);
#ifdef HAVE_REPLICATION
/* Check slave filtering rules */
if (thd->slave_thread)
if (all_tables_not_ok(thd,tables))
{
if (res!= 0)
{
res= 0; /* don't care of prev failure */
thd->clear_error(); /* filters are of highest prior */
}
/* we warn the slave SQL thread */
my_error(ER_SLAVE_IGNORED_TABLE, MYF(0));
break;
}
#endif /* HAVE_REPLICATION */
if (res)
break;
res= mysql_multi_update(thd,tables,
&select_lex->item_list,