Browse Source
automerge: mysql-5.1-bugteam branch --> mysql-5.1-bugteam latest
automerge: mysql-5.1-bugteam branch --> mysql-5.1-bugteam latest
NOTE: added TODO to the comments requested by reviewer during this
merge.
pull/374/head
9 changed files with 230 additions and 1 deletions
-
86mysql-test/extra/rpl_tests/rpl_set_null.test
-
35mysql-test/suite/rpl/r/rpl_set_null_innodb.result
-
35mysql-test/suite/rpl/r/rpl_set_null_myisam.result
-
6mysql-test/suite/rpl/t/rpl_set_null_innodb.test
-
5mysql-test/suite/rpl/t/rpl_set_null_myisam.test
-
35mysql-test/suite/rpl_ndb/r/rpl_ndb_set_null.result
-
6mysql-test/suite/rpl_ndb/t/rpl_ndb_set_null.test
-
7sql/field.h
-
16sql/rpl_record.cc
@ -0,0 +1,86 @@ |
|||
# Both of the following tests check that comparison of binlog BI |
|||
# against SE record will not fail due to remains from previous values |
|||
# in the SE record (before a given field was set to null). |
|||
# |
|||
# In MIXED mode: |
|||
# - Insert and update are executed as statements |
|||
# - Delete is executed as a row event |
|||
# - Assertion: checks that comparison will not fail because the update |
|||
# statement will clear the record contents for the nulled |
|||
# field. If data was not cleared, some engines may keep |
|||
# the value and return it later as garbage - despite the |
|||
# fact that field is null. This may cause slave to |
|||
# falsely fail in the comparison (memcmp would fail |
|||
# because of "garbage" in record data). |
|||
# |
|||
# In ROW mode: |
|||
# - Insert, update and delete are executed as row events. |
|||
# - Assertion: checks that comparison will not fail because the update |
|||
# rows event will clear the record contents before |
|||
# feeding the new value to the SE. This protects against |
|||
# SEs that do not clear record contents when storing |
|||
# nulled fields. If the engine did not clear the data it |
|||
# would cause slave to falsely fail in the comparison |
|||
# (memcmp would fail because of "garbage" in record |
|||
# data). This scenario is pretty much the same described |
|||
# above in MIXED mode, but checks different execution |
|||
# path in the slave. |
|||
|
|||
# BUG#49481: RBR: MyISAM and bit fields may cause slave to stop on |
|||
# delete cant find record |
|||
|
|||
-- source include/master-slave-reset.inc |
|||
|
|||
-- connection master |
|||
-- eval CREATE TABLE t1 (c1 BIT, c2 INT) Engine=$engine |
|||
INSERT INTO `t1` VALUES ( 1, 1 ); |
|||
UPDATE t1 SET c1=NULL where c2=1; |
|||
-- sync_slave_with_master |
|||
|
|||
-- let $diff_table_1=master:test.t1 |
|||
-- let $diff_table_2=slave:test.t1 |
|||
-- source include/diff_tables.inc |
|||
|
|||
-- connection master |
|||
# triggers switch to row mode when on mixed |
|||
DELETE FROM t1 WHERE c2=1 LIMIT 1; |
|||
-- sync_slave_with_master |
|||
|
|||
-- let $diff_table_1=master:test.t1 |
|||
-- let $diff_table_2=slave:test.t1 |
|||
-- source include/diff_tables.inc |
|||
|
|||
-- connection master |
|||
DROP TABLE t1; |
|||
-- sync_slave_with_master |
|||
|
|||
-- source include/master-slave-reset.inc |
|||
|
|||
-- connection master |
|||
|
|||
# BUG#49482: RBR: Replication may break on deletes when MyISAM tables |
|||
# + char field are used |
|||
|
|||
-- eval CREATE TABLE t1 (c1 CHAR) Engine=$engine |
|||
|
|||
INSERT INTO t1 ( c1 ) VALUES ( 'w' ) ; |
|||
SELECT * FROM t1; |
|||
UPDATE t1 SET c1=NULL WHERE c1='w'; |
|||
-- sync_slave_with_master |
|||
|
|||
-- let $diff_table_1=master:test.t1 |
|||
-- let $diff_table_2=slave:test.t1 |
|||
-- source include/diff_tables.inc |
|||
|
|||
-- connection master |
|||
# triggers switch to row mode when on mixed |
|||
DELETE FROM t1 LIMIT 2; |
|||
-- sync_slave_with_master |
|||
|
|||
-- let $diff_table_1=master:test.t1 |
|||
-- let $diff_table_2=slave:test.t1 |
|||
-- source include/diff_tables.inc |
|||
|
|||
-- connection master |
|||
DROP TABLE t1; |
|||
-- sync_slave_with_master |
|||
@ -0,0 +1,35 @@ |
|||
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; |
|||
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; |
|||
CREATE TABLE t1 (c1 BIT, c2 INT) Engine=InnoDB; |
|||
INSERT INTO `t1` VALUES ( 1, 1 ); |
|||
UPDATE t1 SET c1=NULL where c2=1; |
|||
Comparing tables master:test.t1 and slave:test.t1 |
|||
DELETE FROM t1 WHERE c2=1 LIMIT 1; |
|||
Comparing tables master:test.t1 and slave:test.t1 |
|||
DROP TABLE t1; |
|||
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; |
|||
CREATE TABLE t1 (c1 CHAR) Engine=InnoDB; |
|||
INSERT INTO t1 ( c1 ) VALUES ( 'w' ) ; |
|||
SELECT * FROM t1; |
|||
c1 |
|||
w |
|||
UPDATE t1 SET c1=NULL WHERE c1='w'; |
|||
Comparing tables master:test.t1 and slave:test.t1 |
|||
DELETE FROM t1 LIMIT 2; |
|||
Comparing tables master:test.t1 and slave:test.t1 |
|||
DROP TABLE t1; |
|||
@ -0,0 +1,35 @@ |
|||
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; |
|||
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; |
|||
CREATE TABLE t1 (c1 BIT, c2 INT) Engine=MyISAM; |
|||
INSERT INTO `t1` VALUES ( 1, 1 ); |
|||
UPDATE t1 SET c1=NULL where c2=1; |
|||
Comparing tables master:test.t1 and slave:test.t1 |
|||
DELETE FROM t1 WHERE c2=1 LIMIT 1; |
|||
Comparing tables master:test.t1 and slave:test.t1 |
|||
DROP TABLE t1; |
|||
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; |
|||
CREATE TABLE t1 (c1 CHAR) Engine=MyISAM; |
|||
INSERT INTO t1 ( c1 ) VALUES ( 'w' ) ; |
|||
SELECT * FROM t1; |
|||
c1 |
|||
w |
|||
UPDATE t1 SET c1=NULL WHERE c1='w'; |
|||
Comparing tables master:test.t1 and slave:test.t1 |
|||
DELETE FROM t1 LIMIT 2; |
|||
Comparing tables master:test.t1 and slave:test.t1 |
|||
DROP TABLE t1; |
|||
@ -0,0 +1,6 @@ |
|||
-- source include/have_binlog_format_mixed_or_row.inc |
|||
-- source include/master-slave.inc |
|||
-- source include/have_innodb.inc |
|||
|
|||
-- let $engine= InnoDB |
|||
-- source extra/rpl_tests/rpl_set_null.test |
|||
@ -0,0 +1,5 @@ |
|||
-- source include/have_binlog_format_mixed_or_row.inc |
|||
-- source include/master-slave.inc |
|||
|
|||
-- let $engine= MyISAM |
|||
-- source extra/rpl_tests/rpl_set_null.test |
|||
@ -0,0 +1,35 @@ |
|||
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; |
|||
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; |
|||
CREATE TABLE t1 (c1 BIT, c2 INT) Engine=NDB; |
|||
INSERT INTO `t1` VALUES ( 1, 1 ); |
|||
UPDATE t1 SET c1=NULL where c2=1; |
|||
Comparing tables master:test.t1 and slave:test.t1 |
|||
DELETE FROM t1 WHERE c2=1 LIMIT 1; |
|||
Comparing tables master:test.t1 and slave:test.t1 |
|||
DROP TABLE t1; |
|||
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; |
|||
CREATE TABLE t1 (c1 CHAR) Engine=NDB; |
|||
INSERT INTO t1 ( c1 ) VALUES ( 'w' ) ; |
|||
SELECT * FROM t1; |
|||
c1 |
|||
w |
|||
UPDATE t1 SET c1=NULL WHERE c1='w'; |
|||
Comparing tables master:test.t1 and slave:test.t1 |
|||
DELETE FROM t1 LIMIT 2; |
|||
Comparing tables master:test.t1 and slave:test.t1 |
|||
DROP TABLE t1; |
|||
@ -0,0 +1,6 @@ |
|||
-- source include/have_ndb.inc |
|||
-- source include/have_binlog_format_mixed_or_row.inc |
|||
-- source include/ndb_master-slave.inc |
|||
|
|||
-- let $engine= NDB |
|||
-- source extra/rpl_tests/rpl_set_null.test |
|||
Write
Preview
Loading…
Cancel
Save
Reference in new issue