Hi,
patch approved but before pushing, please, do what follows:
Add a comment on why you are not using "unique indexes" in both the
master and slave.
Specifically, on the slave file a bug report as we already discussed.
Cheers.
Luis Soares wrote:
> #At file:///home/lsoares/Workspace/mysql-server/bugfix/40045/6.0-rpl/ based on
> revid:serge.kozlov@stripped
>
> 2831 Luis Soares 2009-04-15
> BUG#40045: Replication failure on RBR + no PK + UPDATE + integer key +
> char with no key
>
> Row based replication would break if updating a row and using a key
> for searching for the correct row to update. This was observed when
> using MyISAM storage engine on the slave. Since MyISAM does not
> provide partial row fetch (HA_PARTIAL_COLUMN_READ) , the comparison
> between the row fetched on the slave and the before image (BI)
> replicated from master would fail. This happened because the BI (which
> sometimes was only part of the row) would always be compared against a
> complete row.
>
> Furthermore, the read set mask was not being properly set in some cases
> when using keys (not unique nor primary) which would lead to partial
> row matches, thence changes might end up in the wrong row.
>
> This patch addresses this by changing the record_compare function for
> taking into consideration the fields set on the readset and the engine
> used on the slave. Furthermore, it also moves the mark columns needed
> for update on the master so that read_set bitmap is always correct.
> @ mysql-test/extra/rpl_tests/rpl_row_record_find.test
> Shared part of the test battery while testing with different engines.
> @ mysql-test/suite/rpl/t/rpl_row_record_find_falcon.test
> Test case that checks for different combinations of engines and
> updates/deletes for Falcon engine.
> @ mysql-test/suite/rpl/t/rpl_row_record_find_innodb.test
> Test case that checks for different combinations of engines and
> updates/deletes for InnoDB engine.
> @ mysql-test/suite/rpl/t/rpl_row_record_find_myisam.test
> Test case that checks for different combinations of engines and
> updates/deletes for MyISAM engine. This is the master test file,
> as it provides description on the test and references other engines
> test files.
> @ sql/log_event.cc
> Changed the record_compare function to compare the entire record
> when possible, or just the fields marked in the read_set otherwise.
> @ sql/log_event_old.cc
> Changed the record_compare function to compare the entire record
> when possible, or just the fields marked in the read_set otherwise.
> @ sql/sql_update.cc
> Moved the mark update columns map setting to before the
> select->quick_check. This makes it conceptually more correct
> for the optimizer and also fixes the problem of read_set
> getting reset to RBR incompatible values further down in the
> mysql_update execution.
>
> added:
> mysql-test/extra/rpl_tests/rpl_row_record_find.test
> mysql-test/suite/rpl/r/rpl_row_record_find_falcon.result
> mysql-test/suite/rpl/r/rpl_row_record_find_innodb.result
> mysql-test/suite/rpl/r/rpl_row_record_find_myisam.result
> mysql-test/suite/rpl/t/rpl_row_record_find_falcon.test
> mysql-test/suite/rpl/t/rpl_row_record_find_innodb.test
> mysql-test/suite/rpl/t/rpl_row_record_find_myisam.test
> modified:
> sql/log_event.cc
> sql/log_event_old.cc
> sql/sql_update.cc
> === added file 'mysql-test/extra/rpl_tests/rpl_row_record_find.test'
> --- a/mysql-test/extra/rpl_tests/rpl_row_record_find.test 1970-01-01 00:00:00 +0000
> +++ b/mysql-test/extra/rpl_tests/rpl_row_record_find.test 2009-04-15 15:56:25 +0000
> @@ -0,0 +1,173 @@
> +# USAGE:
> +# Before including this file the following variables should be set:
> +# * $master_engine
> +# * slave_engine
> +#
> +# Example:
> +#
> +# let $master_engine= Falcon;
> +# let $slave_engine= MyISAM;
> +#
> +# -- source extra/rpl_tests/rpl_row_record_find.test
> +#
> +
> +
> +connection master;
> +
> +--disable_warnings
> +DROP TABLE IF EXISTS t;
> +--enable_warnings
> +
> +sync_slave_with_master;
> +connection master;
> +
> +let $i= 10;
> +while($i)
> +{
> + let $step= "";
> +
> + connection master;
> + SET SQL_LOG_BIN=0;
> +
> + if (`SELECT $i=1`) {
> + let $step= No keys ($master_engine -> $slave_engine);
> + --echo ******* TEST: $step
> + --eval CREATE TABLE t (c1 int, c2 char(1), c3 char(1), c4 char(1)) engine=
> $master_engine;
> + connection slave;
> + --eval CREATE TABLE t (c1 int, c2 char(1), c3 char(1), c4 char(1)) engine=
> $slave_engine;
> + }
> + if (`SELECT $i=2`)
> + {
> + let $step= One key ($master_engine -> $slave_engine);
> + --echo ******* TEST: $step
> + --eval CREATE TABLE t (c1 int, c2 char(1), c3 char(1), c4 char(1), key(c1))
> engine= $master_engine;
> + connection slave;
> + --eval CREATE TABLE t (c1 int, c2 char(1), c3 char(1), c4 char(1), key(c1))
> engine= $slave_engine;
> + }
> + if (`SELECT $i=3`)
> + {
> + let $step= One Composite key ($master_engine -> $slave_engine);
> + --echo ****** TEST: $step
> + --eval CREATE TABLE t (c1 int, c2 char(1), c3 char(1), c4 char(1), key(c1,c2))
> engine= $master_engine;
> + connection slave;
> + --eval CREATE TABLE t (c1 int, c2 char(1), c3 char(1), c4 char(1), key(c1,c2))
> engine= $slave_engine;
> + }
> + if (`SELECT $i=4`)
> + {
> + let $step= One Unique key ($master_engine -> $slave_engine);
> + --echo ****** TEST: $step
> + --eval CREATE TABLE t (c1 int, c2 char(1), c3 char(1), c4 char(1), unique
> key(c1)) engine= $master_engine;
> + connection slave;
> + --eval CREATE TABLE t (c1 int, c2 char(1), c3 char(1), c4 char(1), unique
> key(c1)) engine= $slave_engine;
> + }
> + if (`SELECT $i=5`)
> + {
> + let $step= One Composite Unique key ($master_engine -> $slave_engine);
> + --echo ****** TEST: $step
> + --eval CREATE TABLE t (c1 int, c2 char(1), c3 char(1), c4 char(1), unique
> key(c1,c2)) engine= $master_engine;
> + connection slave;
> + --eval CREATE TABLE t (c1 int, c2 char(1), c3 char(1), c4 char(1), unique
> key(c1,c2)) engine= $slave_engine;
> + }
> + if (`SELECT $i=6`)
> + {
> + let $step= One Primary key ($master_engine -> $slave_engine);
> + --echo ****** TEST: $step
> + --eval CREATE TABLE t (c1 int, c2 char(1), c3 char(1), c4 char(1), primary
> key(c1)) engine= $master_engine;
> + connection slave;
> + --eval CREATE TABLE t (c1 int, c2 char(1), c3 char(1), c4 char(1), primary
> key(c1)) engine= $slave_engine;
> + }
> + if (`SELECT $i=7`)
> + {
> + let $step= One Composite Primary Key ($master_engine -> $slave_engine);
> + --echo ****** TEST: $step
> + --eval CREATE TABLE t (c1 int, c2 char(1), c3 char(1), c4 char(1), primary
> key(c1,c2)) engine= $master_engine;
> + connection slave;
> + --eval CREATE TABLE t (c1 int, c2 char(1), c3 char(1), c4 char(1), primary
> key(c1,c2)) engine= $slave_engine;
> + }
> + if (`SELECT $i=8`)
> + {
> + let $step= One Composite key with holes ($master_engine -> $slave_engine);
> + --echo ****** TEST: $step
> + --eval CREATE TABLE t (c1 int, c2 char(1), c3 char(1), c4 char(1), key(c1,c3))
> engine= $master_engine;
> + connection slave;
> + --eval CREATE TABLE t (c1 int, c2 char(1), c3 char(1), c4 char(1), key(c1,c3))
> engine= $slave_engine;
> + }
> + if (`SELECT $i=9`)
> + {
> + let $step= One Composite Unique key with holes ($master_engine ->
> $slave_engine);
> + --echo ****** TEST: $step
> + --eval CREATE TABLE t (c1 int, c2 char(1), c3 char(1), c4 char(1), unique
> key(c1,c3)) engine= $master_engine;
> + connection slave;
> + --eval CREATE TABLE t (c1 int, c2 char(1), c3 char(1), c4 char(1), unique
> key(c1,c3)) engine= $slave_engine;
> + }
> + if (`SELECT $i=10`)
> + {
> + let $step= One Composite Primary Key with holes ($master_engine ->
> $slave_engine);
> + --echo ****** TEST: $step
> + --eval CREATE TABLE t (c1 int, c2 char(1), c3 char(1), c4 char(1), primary
> key(c1,c3)) engine= $master_engine;
> + connection slave;
> + --eval CREATE TABLE t (c1 int, c2 char(1), c3 char(1), c4 char(1), primary
> key(c1,c3)) engine= $slave_engine;
> + }
> + if (`SELECT $i=11`)
> + {
> + let $step= One key ($master_engine -> $slave_engine);
> + --echo ******* TEST: $step
> + --eval CREATE TABLE t (c1 int, c2 char(1), c3 char(1), c4 char(1), key(c4))
> engine= $master_engine;
> + connection slave;
> + --eval CREATE TABLE t (c1 int, c2 char(1), c3 char(1), c4 char(1), key(c4))
> engine= $slave_engine;
> + }
> +
> +
> + connection master;
> + SET SQL_LOG_BIN=1;
> +
> + connection master;
> + INSERT INTO t VALUES (1, '1', '1', '1' );
> + INSERT INTO t VALUES (4, '4', '4', '4' );
> + INSERT INTO t VALUES (7, '7', '7', '7' );
> +
> + INSERT INTO t VALUES (9, '9', '9', NULL );
> +
> + INSERT INTO t VALUES (2, '1', '2', '2' );
> + INSERT INTO t VALUES (3, '1', '3', '2' );
> +
> + sync_slave_with_master;
> +
> + connection master;
> + UPDATE t SET c4 = '7';
> +
> + UPDATE t SET c4 = '5' WHERE c1 = 1;
> + UPDATE t SET c2 = '5' WHERE c1 = 1;
> + UPDATE t SET c1 = '5' WHERE c1 = 1;
> +
> + UPDATE t SET c4 = '8' WHERE c2 = '4';
> + UPDATE t SET c1 = '8' WHERE c2 = '4';
> + UPDATE t SET c2 = '8' WHERE c2 = '4';
> +
> + UPDATE t SET c3 = '0' WHERE c4 = NULL;
> + UPDATE t SET c2 = '0' WHERE c4 = '0';
> +
> + UPDATE t SET c2 = '2' WHERE c4 = '2';
> +
> + sync_slave_with_master;
> +
> + let $diff_table_1=master:test.t;
> + let $diff_table_2=slave:test.t;
> + source include/diff_tables.inc;
> +
> + connection master;
> + DELETE FROM t WHERE c1 = 7;
> + DELETE FROM t WHERE c1 = 8;
> + DELETE FROM t;
> +
> + sync_slave_with_master;
> +
> + let $diff_table_1=master:test.t;
> + let $diff_table_2=slave:test.t;
> + source include/diff_tables.inc;
> +
> + DROP TABLE t;
> + sync_slave_with_master;
> +
> + dec $i;
> +}
>
> === added file 'mysql-test/suite/rpl/r/rpl_row_record_find_falcon.result'
> --- a/mysql-test/suite/rpl/r/rpl_row_record_find_falcon.result 1970-01-01 00:00:00
> +0000
> +++ b/mysql-test/suite/rpl/r/rpl_row_record_find_falcon.result 2009-04-15 15:56:25
> +0000
> @@ -0,0 +1,828 @@
> +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;
> +#################################################################
> +# CASE 2: Falcon - master, Falcon - slave
> +#################################################################
> +DROP TABLE IF EXISTS t;
> +SET SQL_LOG_BIN=0;
> +****** TEST: One Composite Primary Key with holes (Falcon -> Falcon)
> +CREATE TABLE t (c1 int, c2 char(1), c3 char(1), c4 char(1), primary key(c1,c3))
> engine= Falcon;;
> +CREATE TABLE t (c1 int, c2 char(1), c3 char(1), c4 char(1), primary key(c1,c3))
> engine= Falcon;;
> +SET SQL_LOG_BIN=1;
> +INSERT INTO t VALUES (1, '1', '1', '1' );
> +INSERT INTO t VALUES (4, '4', '4', '4' );
> +INSERT INTO t VALUES (7, '7', '7', '7' );
> +INSERT INTO t VALUES (9, '9', '9', NULL );
> +INSERT INTO t VALUES (2, '1', '2', '2' );
> +INSERT INTO t VALUES (3, '1', '3', '2' );
> +UPDATE t SET c4 = '7';
> +UPDATE t SET c4 = '5' WHERE c1 = 1;
> +UPDATE t SET c2 = '5' WHERE c1 = 1;
> +UPDATE t SET c1 = '5' WHERE c1 = 1;
> +UPDATE t SET c4 = '8' WHERE c2 = '4';
> +UPDATE t SET c1 = '8' WHERE c2 = '4';
> +UPDATE t SET c2 = '8' WHERE c2 = '4';
> +UPDATE t SET c3 = '0' WHERE c4 = NULL;
> +UPDATE t SET c2 = '0' WHERE c4 = '0';
> +UPDATE t SET c2 = '2' WHERE c4 = '2';
> +Comparing tables master:test.t and slave:test.t
> +DELETE FROM t WHERE c1 = 7;
> +DELETE FROM t WHERE c1 = 8;
> +DELETE FROM t;
> +Comparing tables master:test.t and slave:test.t
> +DROP TABLE t;
> +SET SQL_LOG_BIN=0;
> +****** TEST: One Composite Unique key with holes (Falcon -> Falcon)
> +CREATE TABLE t (c1 int, c2 char(1), c3 char(1), c4 char(1), unique key(c1,c3))
> engine= Falcon;;
> +CREATE TABLE t (c1 int, c2 char(1), c3 char(1), c4 char(1), unique key(c1,c3))
> engine= Falcon;;
> +SET SQL_LOG_BIN=1;
> +INSERT INTO t VALUES (1, '1', '1', '1' );
> +INSERT INTO t VALUES (4, '4', '4', '4' );
> +INSERT INTO t VALUES (7, '7', '7', '7' );
> +INSERT INTO t VALUES (9, '9', '9', NULL );
> +INSERT INTO t VALUES (2, '1', '2', '2' );
> +INSERT INTO t VALUES (3, '1', '3', '2' );
> +UPDATE t SET c4 = '7';
> +UPDATE t SET c4 = '5' WHERE c1 = 1;
> +UPDATE t SET c2 = '5' WHERE c1 = 1;
> +UPDATE t SET c1 = '5' WHERE c1 = 1;
> +UPDATE t SET c4 = '8' WHERE c2 = '4';
> +UPDATE t SET c1 = '8' WHERE c2 = '4';
> +UPDATE t SET c2 = '8' WHERE c2 = '4';
> +UPDATE t SET c3 = '0' WHERE c4 = NULL;
> +UPDATE t SET c2 = '0' WHERE c4 = '0';
> +UPDATE t SET c2 = '2' WHERE c4 = '2';
> +Comparing tables master:test.t and slave:test.t
> +DELETE FROM t WHERE c1 = 7;
> +DELETE FROM t WHERE c1 = 8;
> +DELETE FROM t;
> +Comparing tables master:test.t and slave:test.t
> +DROP TABLE t;
> +SET SQL_LOG_BIN=0;
> +****** TEST: One Composite key with holes (Falcon -> Falcon)
> +CREATE TABLE t (c1 int, c2 char(1), c3 char(1), c4 char(1), key(c1,c3)) engine=
> Falcon;;
> +CREATE TABLE t (c1 int, c2 char(1), c3 char(1), c4 char(1), key(c1,c3)) engine=
> Falcon;;
> +SET SQL_LOG_BIN=1;
> +INSERT INTO t VALUES (1, '1', '1', '1' );
> +INSERT INTO t VALUES (4, '4', '4', '4' );
> +INSERT INTO t VALUES (7, '7', '7', '7' );
> +INSERT INTO t VALUES (9, '9', '9', NULL );
> +INSERT INTO t VALUES (2, '1', '2', '2' );
> +INSERT INTO t VALUES (3, '1', '3', '2' );
> +UPDATE t SET c4 = '7';
> +UPDATE t SET c4 = '5' WHERE c1 = 1;
> +UPDATE t SET c2 = '5' WHERE c1 = 1;
> +UPDATE t SET c1 = '5' WHERE c1 = 1;
> +UPDATE t SET c4 = '8' WHERE c2 = '4';
> +UPDATE t SET c1 = '8' WHERE c2 = '4';
> +UPDATE t SET c2 = '8' WHERE c2 = '4';
> +UPDATE t SET c3 = '0' WHERE c4 = NULL;
> +UPDATE t SET c2 = '0' WHERE c4 = '0';
> +UPDATE t SET c2 = '2' WHERE c4 = '2';
> +Comparing tables master:test.t and slave:test.t
> +DELETE FROM t WHERE c1 = 7;
> +DELETE FROM t WHERE c1 = 8;
> +DELETE FROM t;
> +Comparing tables master:test.t and slave:test.t
> +DROP TABLE t;
> +SET SQL_LOG_BIN=0;
> +****** TEST: One Composite Primary Key (Falcon -> Falcon)
> +CREATE TABLE t (c1 int, c2 char(1), c3 char(1), c4 char(1), primary key(c1,c2))
> engine= Falcon;;
> +CREATE TABLE t (c1 int, c2 char(1), c3 char(1), c4 char(1), primary key(c1,c2))
> engine= Falcon;;
> +SET SQL_LOG_BIN=1;
> +INSERT INTO t VALUES (1, '1', '1', '1' );
> +INSERT INTO t VALUES (4, '4', '4', '4' );
> +INSERT INTO t VALUES (7, '7', '7', '7' );
> +INSERT INTO t VALUES (9, '9', '9', NULL );
> +INSERT INTO t VALUES (2, '1', '2', '2' );
> +INSERT INTO t VALUES (3, '1', '3', '2' );
> +UPDATE t SET c4 = '7';
> +UPDATE t SET c4 = '5' WHERE c1 = 1;
> +UPDATE t SET c2 = '5' WHERE c1 = 1;
> +UPDATE t SET c1 = '5' WHERE c1 = 1;
> +UPDATE t SET c4 = '8' WHERE c2 = '4';
> +UPDATE t SET c1 = '8' WHERE c2 = '4';
> +UPDATE t SET c2 = '8' WHERE c2 = '4';
> +UPDATE t SET c3 = '0' WHERE c4 = NULL;
> +UPDATE t SET c2 = '0' WHERE c4 = '0';
> +UPDATE t SET c2 = '2' WHERE c4 = '2';
> +Comparing tables master:test.t and slave:test.t
> +DELETE FROM t WHERE c1 = 7;
> +DELETE FROM t WHERE c1 = 8;
> +DELETE FROM t;
> +Comparing tables master:test.t and slave:test.t
> +DROP TABLE t;
> +SET SQL_LOG_BIN=0;
> +****** TEST: One Primary key (Falcon -> Falcon)
> +CREATE TABLE t (c1 int, c2 char(1), c3 char(1), c4 char(1), primary key(c1)) engine=
> Falcon;;
> +CREATE TABLE t (c1 int, c2 char(1), c3 char(1), c4 char(1), primary key(c1)) engine=
> Falcon;;
> +SET SQL_LOG_BIN=1;
> +INSERT INTO t VALUES (1, '1', '1', '1' );
> +INSERT INTO t VALUES (4, '4', '4', '4' );
> +INSERT INTO t VALUES (7, '7', '7', '7' );
> +INSERT INTO t VALUES (9, '9', '9', NULL );
> +INSERT INTO t VALUES (2, '1', '2', '2' );
> +INSERT INTO t VALUES (3, '1', '3', '2' );
> +UPDATE t SET c4 = '7';
> +UPDATE t SET c4 = '5' WHERE c1 = 1;
> +UPDATE t SET c2 = '5' WHERE c1 = 1;
> +UPDATE t SET c1 = '5' WHERE c1 = 1;
> +UPDATE t SET c4 = '8' WHERE c2 = '4';
> +UPDATE t SET c1 = '8' WHERE c2 = '4';
> +UPDATE t SET c2 = '8' WHERE c2 = '4';
> +UPDATE t SET c3 = '0' WHERE c4 = NULL;
> +UPDATE t SET c2 = '0' WHERE c4 = '0';
> +UPDATE t SET c2 = '2' WHERE c4 = '2';
> +Comparing tables master:test.t and slave:test.t
> +DELETE FROM t WHERE c1 = 7;
> +DELETE FROM t WHERE c1 = 8;
> +DELETE FROM t;
> +Comparing tables master:test.t and slave:test.t
> +DROP TABLE t;
> +SET SQL_LOG_BIN=0;
> +****** TEST: One Composite Unique key (Falcon -> Falcon)
> +CREATE TABLE t (c1 int, c2 char(1), c3 char(1), c4 char(1), unique key(c1,c2))
> engine= Falcon;;
> +CREATE TABLE t (c1 int, c2 char(1), c3 char(1), c4 char(1), unique key(c1,c2))
> engine= Falcon;;
> +SET SQL_LOG_BIN=1;
> +INSERT INTO t VALUES (1, '1', '1', '1' );
> +INSERT INTO t VALUES (4, '4', '4', '4' );
> +INSERT INTO t VALUES (7, '7', '7', '7' );
> +INSERT INTO t VALUES (9, '9', '9', NULL );
> +INSERT INTO t VALUES (2, '1', '2', '2' );
> +INSERT INTO t VALUES (3, '1', '3', '2' );
> +UPDATE t SET c4 = '7';
> +UPDATE t SET c4 = '5' WHERE c1 = 1;
> +UPDATE t SET c2 = '5' WHERE c1 = 1;
> +UPDATE t SET c1 = '5' WHERE c1 = 1;
> +UPDATE t SET c4 = '8' WHERE c2 = '4';
> +UPDATE t SET c1 = '8' WHERE c2 = '4';
> +UPDATE t SET c2 = '8' WHERE c2 = '4';
> +UPDATE t SET c3 = '0' WHERE c4 = NULL;
> +UPDATE t SET c2 = '0' WHERE c4 = '0';
> +UPDATE t SET c2 = '2' WHERE c4 = '2';
> +Comparing tables master:test.t and slave:test.t
> +DELETE FROM t WHERE c1 = 7;
> +DELETE FROM t WHERE c1 = 8;
> +DELETE FROM t;
> +Comparing tables master:test.t and slave:test.t
> +DROP TABLE t;
> +SET SQL_LOG_BIN=0;
> +****** TEST: One Unique key (Falcon -> Falcon)
> +CREATE TABLE t (c1 int, c2 char(1), c3 char(1), c4 char(1), unique key(c1)) engine=
> Falcon;;
> +CREATE TABLE t (c1 int, c2 char(1), c3 char(1), c4 char(1), unique key(c1)) engine=
> Falcon;;
> +SET SQL_LOG_BIN=1;
> +INSERT INTO t VALUES (1, '1', '1', '1' );
> +INSERT INTO t VALUES (4, '4', '4', '4' );
> +INSERT INTO t VALUES (7, '7', '7', '7' );
> +INSERT INTO t VALUES (9, '9', '9', NULL );
> +INSERT INTO t VALUES (2, '1', '2', '2' );
> +INSERT INTO t VALUES (3, '1', '3', '2' );
> +UPDATE t SET c4 = '7';
> +UPDATE t SET c4 = '5' WHERE c1 = 1;
> +UPDATE t SET c2 = '5' WHERE c1 = 1;
> +UPDATE t SET c1 = '5' WHERE c1 = 1;
> +UPDATE t SET c4 = '8' WHERE c2 = '4';
> +UPDATE t SET c1 = '8' WHERE c2 = '4';
> +UPDATE t SET c2 = '8' WHERE c2 = '4';
> +UPDATE t SET c3 = '0' WHERE c4 = NULL;
> +UPDATE t SET c2 = '0' WHERE c4 = '0';
> +UPDATE t SET c2 = '2' WHERE c4 = '2';
> +Comparing tables master:test.t and slave:test.t
> +DELETE FROM t WHERE c1 = 7;
> +DELETE FROM t WHERE c1 = 8;
> +DELETE FROM t;
> +Comparing tables master:test.t and slave:test.t
> +DROP TABLE t;
> +SET SQL_LOG_BIN=0;
> +****** TEST: One Composite key (Falcon -> Falcon)
> +CREATE TABLE t (c1 int, c2 char(1), c3 char(1), c4 char(1), key(c1,c2)) engine=
> Falcon;;
> +CREATE TABLE t (c1 int, c2 char(1), c3 char(1), c4 char(1), key(c1,c2)) engine=
> Falcon;;
> +SET SQL_LOG_BIN=1;
> +INSERT INTO t VALUES (1, '1', '1', '1' );
> +INSERT INTO t VALUES (4, '4', '4', '4' );
> +INSERT INTO t VALUES (7, '7', '7', '7' );
> +INSERT INTO t VALUES (9, '9', '9', NULL );
> +INSERT INTO t VALUES (2, '1', '2', '2' );
> +INSERT INTO t VALUES (3, '1', '3', '2' );
> +UPDATE t SET c4 = '7';
> +UPDATE t SET c4 = '5' WHERE c1 = 1;
> +UPDATE t SET c2 = '5' WHERE c1 = 1;
> +UPDATE t SET c1 = '5' WHERE c1 = 1;
> +UPDATE t SET c4 = '8' WHERE c2 = '4';
> +UPDATE t SET c1 = '8' WHERE c2 = '4';
> +UPDATE t SET c2 = '8' WHERE c2 = '4';
> +UPDATE t SET c3 = '0' WHERE c4 = NULL;
> +UPDATE t SET c2 = '0' WHERE c4 = '0';
> +UPDATE t SET c2 = '2' WHERE c4 = '2';
> +Comparing tables master:test.t and slave:test.t
> +DELETE FROM t WHERE c1 = 7;
> +DELETE FROM t WHERE c1 = 8;
> +DELETE FROM t;
> +Comparing tables master:test.t and slave:test.t
> +DROP TABLE t;
> +SET SQL_LOG_BIN=0;
> +******* TEST: One key (Falcon -> Falcon)
> +CREATE TABLE t (c1 int, c2 char(1), c3 char(1), c4 char(1), key(c1)) engine=
> Falcon;;
> +CREATE TABLE t (c1 int, c2 char(1), c3 char(1), c4 char(1), key(c1)) engine=
> Falcon;;
> +SET SQL_LOG_BIN=1;
> +INSERT INTO t VALUES (1, '1', '1', '1' );
> +INSERT INTO t VALUES (4, '4', '4', '4' );
> +INSERT INTO t VALUES (7, '7', '7', '7' );
> +INSERT INTO t VALUES (9, '9', '9', NULL );
> +INSERT INTO t VALUES (2, '1', '2', '2' );
> +INSERT INTO t VALUES (3, '1', '3', '2' );
> +UPDATE t SET c4 = '7';
> +UPDATE t SET c4 = '5' WHERE c1 = 1;
> +UPDATE t SET c2 = '5' WHERE c1 = 1;
> +UPDATE t SET c1 = '5' WHERE c1 = 1;
> +UPDATE t SET c4 = '8' WHERE c2 = '4';
> +UPDATE t SET c1 = '8' WHERE c2 = '4';
> +UPDATE t SET c2 = '8' WHERE c2 = '4';
> +UPDATE t SET c3 = '0' WHERE c4 = NULL;
> +UPDATE t SET c2 = '0' WHERE c4 = '0';
> +UPDATE t SET c2 = '2' WHERE c4 = '2';
> +Comparing tables master:test.t and slave:test.t
> +DELETE FROM t WHERE c1 = 7;
> +DELETE FROM t WHERE c1 = 8;
> +DELETE FROM t;
> +Comparing tables master:test.t and slave:test.t
> +DROP TABLE t;
> +SET SQL_LOG_BIN=0;
> +******* TEST: No keys (Falcon -> Falcon)
> +CREATE TABLE t (c1 int, c2 char(1), c3 char(1), c4 char(1)) engine= Falcon;;
> +CREATE TABLE t (c1 int, c2 char(1), c3 char(1), c4 char(1)) engine= Falcon;;
> +SET SQL_LOG_BIN=1;
> +INSERT INTO t VALUES (1, '1', '1', '1' );
> +INSERT INTO t VALUES (4, '4', '4', '4' );
> +INSERT INTO t VALUES (7, '7', '7', '7' );
> +INSERT INTO t VALUES (9, '9', '9', NULL );
> +INSERT INTO t VALUES (2, '1', '2', '2' );
> +INSERT INTO t VALUES (3, '1', '3', '2' );
> +UPDATE t SET c4 = '7';
> +UPDATE t SET c4 = '5' WHERE c1 = 1;
> +UPDATE t SET c2 = '5' WHERE c1 = 1;
> +UPDATE t SET c1 = '5' WHERE c1 = 1;
> +UPDATE t SET c4 = '8' WHERE c2 = '4';
> +UPDATE t SET c1 = '8' WHERE c2 = '4';
> +UPDATE t SET c2 = '8' WHERE c2 = '4';
> +UPDATE t SET c3 = '0' WHERE c4 = NULL;
> +UPDATE t SET c2 = '0' WHERE c4 = '0';
> +UPDATE t SET c2 = '2' WHERE c4 = '2';
> +Comparing tables master:test.t and slave:test.t
> +DELETE FROM t WHERE c1 = 7;
> +DELETE FROM t WHERE c1 = 8;
> +DELETE FROM t;
> +Comparing tables master:test.t and slave:test.t
> +DROP TABLE t;
> +#################################################################
> +# CASE 3: Falcon - master, MyISAM - slave
> +#################################################################
> +DROP TABLE IF EXISTS t;
> +SET SQL_LOG_BIN=0;
> +****** TEST: One Composite Primary Key with holes (Falcon -> MyISAM)
> +CREATE TABLE t (c1 int, c2 char(1), c3 char(1), c4 char(1), primary key(c1,c3))
> engine= Falcon;;
> +CREATE TABLE t (c1 int, c2 char(1), c3 char(1), c4 char(1), primary key(c1,c3))
> engine= MyISAM;;
> +SET SQL_LOG_BIN=1;
> +INSERT INTO t VALUES (1, '1', '1', '1' );
> +INSERT INTO t VALUES (4, '4', '4', '4' );
> +INSERT INTO t VALUES (7, '7', '7', '7' );
> +INSERT INTO t VALUES (9, '9', '9', NULL );
> +INSERT INTO t VALUES (2, '1', '2', '2' );
> +INSERT INTO t VALUES (3, '1', '3', '2' );
> +UPDATE t SET c4 = '7';
> +UPDATE t SET c4 = '5' WHERE c1 = 1;
> +UPDATE t SET c2 = '5' WHERE c1 = 1;
> +UPDATE t SET c1 = '5' WHERE c1 = 1;
> +UPDATE t SET c4 = '8' WHERE c2 = '4';
> +UPDATE t SET c1 = '8' WHERE c2 = '4';
> +UPDATE t SET c2 = '8' WHERE c2 = '4';
> +UPDATE t SET c3 = '0' WHERE c4 = NULL;
> +UPDATE t SET c2 = '0' WHERE c4 = '0';
> +UPDATE t SET c2 = '2' WHERE c4 = '2';
> +Comparing tables master:test.t and slave:test.t
> +DELETE FROM t WHERE c1 = 7;
> +DELETE FROM t WHERE c1 = 8;
> +DELETE FROM t;
> +Comparing tables master:test.t and slave:test.t
> +DROP TABLE t;
> +SET SQL_LOG_BIN=0;
> +****** TEST: One Composite Unique key with holes (Falcon -> MyISAM)
> +CREATE TABLE t (c1 int, c2 char(1), c3 char(1), c4 char(1), unique key(c1,c3))
> engine= Falcon;;
> +CREATE TABLE t (c1 int, c2 char(1), c3 char(1), c4 char(1), unique key(c1,c3))
> engine= MyISAM;;
> +SET SQL_LOG_BIN=1;
> +INSERT INTO t VALUES (1, '1', '1', '1' );
> +INSERT INTO t VALUES (4, '4', '4', '4' );
> +INSERT INTO t VALUES (7, '7', '7', '7' );
> +INSERT INTO t VALUES (9, '9', '9', NULL );
> +INSERT INTO t VALUES (2, '1', '2', '2' );
> +INSERT INTO t VALUES (3, '1', '3', '2' );
> +UPDATE t SET c4 = '7';
> +UPDATE t SET c4 = '5' WHERE c1 = 1;
> +UPDATE t SET c2 = '5' WHERE c1 = 1;
> +UPDATE t SET c1 = '5' WHERE c1 = 1;
> +UPDATE t SET c4 = '8' WHERE c2 = '4';
> +UPDATE t SET c1 = '8' WHERE c2 = '4';
> +UPDATE t SET c2 = '8' WHERE c2 = '4';
> +UPDATE t SET c3 = '0' WHERE c4 = NULL;
> +UPDATE t SET c2 = '0' WHERE c4 = '0';
> +UPDATE t SET c2 = '2' WHERE c4 = '2';
> +Comparing tables master:test.t and slave:test.t
> +DELETE FROM t WHERE c1 = 7;
> +DELETE FROM t WHERE c1 = 8;
> +DELETE FROM t;
> +Comparing tables master:test.t and slave:test.t
> +DROP TABLE t;
> +SET SQL_LOG_BIN=0;
> +****** TEST: One Composite key with holes (Falcon -> MyISAM)
> +CREATE TABLE t (c1 int, c2 char(1), c3 char(1), c4 char(1), key(c1,c3)) engine=
> Falcon;;
> +CREATE TABLE t (c1 int, c2 char(1), c3 char(1), c4 char(1), key(c1,c3)) engine=
> MyISAM;;
> +SET SQL_LOG_BIN=1;
> +INSERT INTO t VALUES (1, '1', '1', '1' );
> +INSERT INTO t VALUES (4, '4', '4', '4' );
> +INSERT INTO t VALUES (7, '7', '7', '7' );
> +INSERT INTO t VALUES (9, '9', '9', NULL );
> +INSERT INTO t VALUES (2, '1', '2', '2' );
> +INSERT INTO t VALUES (3, '1', '3', '2' );
> +UPDATE t SET c4 = '7';
> +UPDATE t SET c4 = '5' WHERE c1 = 1;
> +UPDATE t SET c2 = '5' WHERE c1 = 1;
> +UPDATE t SET c1 = '5' WHERE c1 = 1;
> +UPDATE t SET c4 = '8' WHERE c2 = '4';
> +UPDATE t SET c1 = '8' WHERE c2 = '4';
> +UPDATE t SET c2 = '8' WHERE c2 = '4';
> +UPDATE t SET c3 = '0' WHERE c4 = NULL;
> +UPDATE t SET c2 = '0' WHERE c4 = '0';
> +UPDATE t SET c2 = '2' WHERE c4 = '2';
> +Comparing tables master:test.t and slave:test.t
> +DELETE FROM t WHERE c1 = 7;
> +DELETE FROM t WHERE c1 = 8;
> +DELETE FROM t;
> +Comparing tables master:test.t and slave:test.t
> +DROP TABLE t;
> +SET SQL_LOG_BIN=0;
> +****** TEST: One Composite Primary Key (Falcon -> MyISAM)
> +CREATE TABLE t (c1 int, c2 char(1), c3 char(1), c4 char(1), primary key(c1,c2))
> engine= Falcon;;
> +CREATE TABLE t (c1 int, c2 char(1), c3 char(1), c4 char(1), primary key(c1,c2))
> engine= MyISAM;;
> +SET SQL_LOG_BIN=1;
> +INSERT INTO t VALUES (1, '1', '1', '1' );
> +INSERT INTO t VALUES (4, '4', '4', '4' );
> +INSERT INTO t VALUES (7, '7', '7', '7' );
> +INSERT INTO t VALUES (9, '9', '9', NULL );
> +INSERT INTO t VALUES (2, '1', '2', '2' );
> +INSERT INTO t VALUES (3, '1', '3', '2' );
> +UPDATE t SET c4 = '7';
> +UPDATE t SET c4 = '5' WHERE c1 = 1;
> +UPDATE t SET c2 = '5' WHERE c1 = 1;
> +UPDATE t SET c1 = '5' WHERE c1 = 1;
> +UPDATE t SET c4 = '8' WHERE c2 = '4';
> +UPDATE t SET c1 = '8' WHERE c2 = '4';
> +UPDATE t SET c2 = '8' WHERE c2 = '4';
> +UPDATE t SET c3 = '0' WHERE c4 = NULL;
> +UPDATE t SET c2 = '0' WHERE c4 = '0';
> +UPDATE t SET c2 = '2' WHERE c4 = '2';
> +Comparing tables master:test.t and slave:test.t
> +DELETE FROM t WHERE c1 = 7;
> +DELETE FROM t WHERE c1 = 8;
> +DELETE FROM t;
> +Comparing tables master:test.t and slave:test.t
> +DROP TABLE t;
> +SET SQL_LOG_BIN=0;
> +****** TEST: One Primary key (Falcon -> MyISAM)
> +CREATE TABLE t (c1 int, c2 char(1), c3 char(1), c4 char(1), primary key(c1)) engine=
> Falcon;;
> +CREATE TABLE t (c1 int, c2 char(1), c3 char(1), c4 char(1), primary key(c1)) engine=
> MyISAM;;
> +SET SQL_LOG_BIN=1;
> +INSERT INTO t VALUES (1, '1', '1', '1' );
> +INSERT INTO t VALUES (4, '4', '4', '4' );
> +INSERT INTO t VALUES (7, '7', '7', '7' );
> +INSERT INTO t VALUES (9, '9', '9', NULL );
> +INSERT INTO t VALUES (2, '1', '2', '2' );
> +INSERT INTO t VALUES (3, '1', '3', '2' );
> +UPDATE t SET c4 = '7';
> +UPDATE t SET c4 = '5' WHERE c1 = 1;
> +UPDATE t SET c2 = '5' WHERE c1 = 1;
> +UPDATE t SET c1 = '5' WHERE c1 = 1;
> +UPDATE t SET c4 = '8' WHERE c2 = '4';
> +UPDATE t SET c1 = '8' WHERE c2 = '4';
> +UPDATE t SET c2 = '8' WHERE c2 = '4';
> +UPDATE t SET c3 = '0' WHERE c4 = NULL;
> +UPDATE t SET c2 = '0' WHERE c4 = '0';
> +UPDATE t SET c2 = '2' WHERE c4 = '2';
> +Comparing tables master:test.t and slave:test.t
> +DELETE FROM t WHERE c1 = 7;
> +DELETE FROM t WHERE c1 = 8;
> +DELETE FROM t;
> +Comparing tables master:test.t and slave:test.t
> +DROP TABLE t;
> +SET SQL_LOG_BIN=0;
> +****** TEST: One Composite Unique key (Falcon -> MyISAM)
> +CREATE TABLE t (c1 int, c2 char(1), c3 char(1), c4 char(1), unique key(c1,c2))
> engine= Falcon;;
> +CREATE TABLE t (c1 int, c2 char(1), c3 char(1), c4 char(1), unique key(c1,c2))
> engine= MyISAM;;
> +SET SQL_LOG_BIN=1;
> +INSERT INTO t VALUES (1, '1', '1', '1' );
> +INSERT INTO t VALUES (4, '4', '4', '4' );
> +INSERT INTO t VALUES (7, '7', '7', '7' );
> +INSERT INTO t VALUES (9, '9', '9', NULL );
> +INSERT INTO t VALUES (2, '1', '2', '2' );
> +INSERT INTO t VALUES (3, '1', '3', '2' );
> +UPDATE t SET c4 = '7';
> +UPDATE t SET c4 = '5' WHERE c1 = 1;
> +UPDATE t SET c2 = '5' WHERE c1 = 1;
> +UPDATE t SET c1 = '5' WHERE c1 = 1;
> +UPDATE t SET c4 = '8' WHERE c2 = '4';
> +UPDATE t SET c1 = '8' WHERE c2 = '4';
> +UPDATE t SET c2 = '8' WHERE c2 = '4';
> +UPDATE t SET c3 = '0' WHERE c4 = NULL;
> +UPDATE t SET c2 = '0' WHERE c4 = '0';
> +UPDATE t SET c2 = '2' WHERE c4 = '2';
> +Comparing tables master:test.t and slave:test.t
> +DELETE FROM t WHERE c1 = 7;
> +DELETE FROM t WHERE c1 = 8;
> +DELETE FROM t;
> +Comparing tables master:test.t and slave:test.t
> +DROP TABLE t;
> +SET SQL_LOG_BIN=0;
> +****** TEST: One Unique key (Falcon -> MyISAM)
> +CREATE TABLE t (c1 int, c2 char(1), c3 char(1), c4 char(1), unique key(c1)) engine=
> Falcon;;
> +CREATE TABLE t (c1 int, c2 char(1), c3 char(1), c4 char(1), unique key(c1)) engine=
> MyISAM;;
> +SET SQL_LOG_BIN=1;
> +INSERT INTO t VALUES (1, '1', '1', '1' );
> +INSERT INTO t VALUES (4, '4', '4', '4' );
> +INSERT INTO t VALUES (7, '7', '7', '7' );
> +INSERT INTO t VALUES (9, '9', '9', NULL );
> +INSERT INTO t VALUES (2, '1', '2', '2' );
> +INSERT INTO t VALUES (3, '1', '3', '2' );
> +UPDATE t SET c4 = '7';
> +UPDATE t SET c4 = '5' WHERE c1 = 1;
> +UPDATE t SET c2 = '5' WHERE c1 = 1;
> +UPDATE t SET c1 = '5' WHERE c1 = 1;
> +UPDATE t SET c4 = '8' WHERE c2 = '4';
> +UPDATE t SET c1 = '8' WHERE c2 = '4';
> +UPDATE t SET c2 = '8' WHERE c2 = '4';
> +UPDATE t SET c3 = '0' WHERE c4 = NULL;
> +UPDATE t SET c2 = '0' WHERE c4 = '0';
> +UPDATE t SET c2 = '2' WHERE c4 = '2';
> +Comparing tables master:test.t and slave:test.t
> +DELETE FROM t WHERE c1 = 7;
> +DELETE FROM t WHERE c1 = 8;
> +DELETE FROM t;
> +Comparing tables master:test.t and slave:test.t
> +DROP TABLE t;
> +SET SQL_LOG_BIN=0;
> +****** TEST: One Composite key (Falcon -> MyISAM)
> +CREATE TABLE t (c1 int, c2 char(1), c3 char(1), c4 char(1), key(c1,c2)) engine=
> Falcon;;
> +CREATE TABLE t (c1 int, c2 char(1), c3 char(1), c4 char(1), key(c1,c2)) engine=
> MyISAM;;
> +SET SQL_LOG_BIN=1;
> +INSERT INTO t VALUES (1, '1', '1', '1' );
> +INSERT INTO t VALUES (4, '4', '4', '4' );
> +INSERT INTO t VALUES (7, '7', '7', '7' );
> +INSERT INTO t VALUES (9, '9', '9', NULL );
> +INSERT INTO t VALUES (2, '1', '2', '2' );
> +INSERT INTO t VALUES (3, '1', '3', '2' );
> +UPDATE t SET c4 = '7';
> +UPDATE t SET c4 = '5' WHERE c1 = 1;
> +UPDATE t SET c2 = '5' WHERE c1 = 1;
> +UPDATE t SET c1 = '5' WHERE c1 = 1;
> +UPDATE t SET c4 = '8' WHERE c2 = '4';
> +UPDATE t SET c1 = '8' WHERE c2 = '4';
> +UPDATE t SET c2 = '8' WHERE c2 = '4';
> +UPDATE t SET c3 = '0' WHERE c4 = NULL;
> +UPDATE t SET c2 = '0' WHERE c4 = '0';
> +UPDATE t SET c2 = '2' WHERE c4 = '2';
> +Comparing tables master:test.t and slave:test.t
> +DELETE FROM t WHERE c1 = 7;
> +DELETE FROM t WHERE c1 = 8;
> +DELETE FROM t;
> +Comparing tables master:test.t and slave:test.t
> +DROP TABLE t;
> +SET SQL_LOG_BIN=0;
> +******* TEST: One key (Falcon -> MyISAM)
> +CREATE TABLE t (c1 int, c2 char(1), c3 char(1), c4 char(1), key(c1)) engine=
> Falcon;;
> +CREATE TABLE t (c1 int, c2 char(1), c3 char(1), c4 char(1), key(c1)) engine=
> MyISAM;;
> +SET SQL_LOG_BIN=1;
> +INSERT INTO t VALUES (1, '1', '1', '1' );
> +INSERT INTO t VALUES (4, '4', '4', '4' );
> +INSERT INTO t VALUES (7, '7', '7', '7' );
> +INSERT INTO t VALUES (9, '9', '9', NULL );
> +INSERT INTO t VALUES (2, '1', '2', '2' );
> +INSERT INTO t VALUES (3, '1', '3', '2' );
> +UPDATE t SET c4 = '7';
> +UPDATE t SET c4 = '5' WHERE c1 = 1;
> +UPDATE t SET c2 = '5' WHERE c1 = 1;
> +UPDATE t SET c1 = '5' WHERE c1 = 1;
> +UPDATE t SET c4 = '8' WHERE c2 = '4';
> +UPDATE t SET c1 = '8' WHERE c2 = '4';
> +UPDATE t SET c2 = '8' WHERE c2 = '4';
> +UPDATE t SET c3 = '0' WHERE c4 = NULL;
> +UPDATE t SET c2 = '0' WHERE c4 = '0';
> +UPDATE t SET c2 = '2' WHERE c4 = '2';
> +Comparing tables master:test.t and slave:test.t
> +DELETE FROM t WHERE c1 = 7;
> +DELETE FROM t WHERE c1 = 8;
> +DELETE FROM t;
> +Comparing tables master:test.t and slave:test.t
> +DROP TABLE t;
> +SET SQL_LOG_BIN=0;
> +******* TEST: No keys (Falcon -> MyISAM)
> +CREATE TABLE t (c1 int, c2 char(1), c3 char(1), c4 char(1)) engine= Falcon;;
> +CREATE TABLE t (c1 int, c2 char(1), c3 char(1), c4 char(1)) engine= MyISAM;;
> +SET SQL_LOG_BIN=1;
> +INSERT INTO t VALUES (1, '1', '1', '1' );
> +INSERT INTO t VALUES (4, '4', '4', '4' );
> +INSERT INTO t VALUES (7, '7', '7', '7' );
> +INSERT INTO t VALUES (9, '9', '9', NULL );
> +INSERT INTO t VALUES (2, '1', '2', '2' );
> +INSERT INTO t VALUES (3, '1', '3', '2' );
> +UPDATE t SET c4 = '7';
> +UPDATE t SET c4 = '5' WHERE c1 = 1;
> +UPDATE t SET c2 = '5' WHERE c1 = 1;
> +UPDATE t SET c1 = '5' WHERE c1 = 1;
> +UPDATE t SET c4 = '8' WHERE c2 = '4';
> +UPDATE t SET c1 = '8' WHERE c2 = '4';
> +UPDATE t SET c2 = '8' WHERE c2 = '4';
> +UPDATE t SET c3 = '0' WHERE c4 = NULL;
> +UPDATE t SET c2 = '0' WHERE c4 = '0';
> +UPDATE t SET c2 = '2' WHERE c4 = '2';
> +Comparing tables master:test.t and slave:test.t
> +DELETE FROM t WHERE c1 = 7;
> +DELETE FROM t WHERE c1 = 8;
> +DELETE FROM t;
> +Comparing tables master:test.t and slave:test.t
> +DROP TABLE t;
> +#################################################################
> +# CASE 4: MyISAM - master, Falcon - slave
> +#################################################################
> +DROP TABLE IF EXISTS t;
> +SET SQL_LOG_BIN=0;
> +****** TEST: One Composite Primary Key with holes (MyISAM -> Falcon)
> +CREATE TABLE t (c1 int, c2 char(1), c3 char(1), c4 char(1), primary key(c1,c3))
> engine= MyISAM;;
> +CREATE TABLE t (c1 int, c2 char(1), c3 char(1), c4 char(1), primary key(c1,c3))
> engine= Falcon;;
> +SET SQL_LOG_BIN=1;
> +INSERT INTO t VALUES (1, '1', '1', '1' );
> +INSERT INTO t VALUES (4, '4', '4', '4' );
> +INSERT INTO t VALUES (7, '7', '7', '7' );
> +INSERT INTO t VALUES (9, '9', '9', NULL );
> +INSERT INTO t VALUES (2, '1', '2', '2' );
> +INSERT INTO t VALUES (3, '1', '3', '2' );
> +UPDATE t SET c4 = '7';
> +UPDATE t SET c4 = '5' WHERE c1 = 1;
> +UPDATE t SET c2 = '5' WHERE c1 = 1;
> +UPDATE t SET c1 = '5' WHERE c1 = 1;
> +UPDATE t SET c4 = '8' WHERE c2 = '4';
> +UPDATE t SET c1 = '8' WHERE c2 = '4';
> +UPDATE t SET c2 = '8' WHERE c2 = '4';
> +UPDATE t SET c3 = '0' WHERE c4 = NULL;
> +UPDATE t SET c2 = '0' WHERE c4 = '0';
> +UPDATE t SET c2 = '2' WHERE c4 = '2';
> +Comparing tables master:test.t and slave:test.t
> +DELETE FROM t WHERE c1 = 7;
> +DELETE FROM t WHERE c1 = 8;
> +DELETE FROM t;
> +Comparing tables master:test.t and slave:test.t
> +DROP TABLE t;
> +SET SQL_LOG_BIN=0;
> +****** TEST: One Composite Unique key with holes (MyISAM -> Falcon)
> +CREATE TABLE t (c1 int, c2 char(1), c3 char(1), c4 char(1), unique key(c1,c3))
> engine= MyISAM;;
> +CREATE TABLE t (c1 int, c2 char(1), c3 char(1), c4 char(1), unique key(c1,c3))
> engine= Falcon;;
> +SET SQL_LOG_BIN=1;
> +INSERT INTO t VALUES (1, '1', '1', '1' );
> +INSERT INTO t VALUES (4, '4', '4', '4' );
> +INSERT INTO t VALUES (7, '7', '7', '7' );
> +INSERT INTO t VALUES (9, '9', '9', NULL );
> +INSERT INTO t VALUES (2, '1', '2', '2' );
> +INSERT INTO t VALUES (3, '1', '3', '2' );
> +UPDATE t SET c4 = '7';
> +UPDATE t SET c4 = '5' WHERE c1 = 1;
> +UPDATE t SET c2 = '5' WHERE c1 = 1;
> +UPDATE t SET c1 = '5' WHERE c1 = 1;
> +UPDATE t SET c4 = '8' WHERE c2 = '4';
> +UPDATE t SET c1 = '8' WHERE c2 = '4';
> +UPDATE t SET c2 = '8' WHERE c2 = '4';
> +UPDATE t SET c3 = '0' WHERE c4 = NULL;
> +UPDATE t SET c2 = '0' WHERE c4 = '0';
> +UPDATE t SET c2 = '2' WHERE c4 = '2';
> +Comparing tables master:test.t and slave:test.t
> +DELETE FROM t WHERE c1 = 7;
> +DELETE FROM t WHERE c1 = 8;
> +DELETE FROM t;
> +Comparing tables master:test.t and slave:test.t
> +DROP TABLE t;
> +SET SQL_LOG_BIN=0;
> +****** TEST: One Composite key with holes (MyISAM -> Falcon)
> +CREATE TABLE t (c1 int, c2 char(1), c3 char(1), c4 char(1), key(c1,c3)) engine=
> MyISAM;;
> +CREATE TABLE t (c1 int, c2 char(1), c3 char(1), c4 char(1), key(c1,c3)) engine=
> Falcon;;
> +SET SQL_LOG_BIN=1;
> +INSERT INTO t VALUES (1, '1', '1', '1' );
> +INSERT INTO t VALUES (4, '4', '4', '4' );
> +INSERT INTO t VALUES (7, '7', '7', '7' );
> +INSERT INTO t VALUES (9, '9', '9', NULL );
> +INSERT INTO t VALUES (2, '1', '2', '2' );
> +INSERT INTO t VALUES (3, '1', '3', '2' );
> +UPDATE t SET c4 = '7';
> +UPDATE t SET c4 = '5' WHERE c1 = 1;
> +UPDATE t SET c2 = '5' WHERE c1 = 1;
> +UPDATE t SET c1 = '5' WHERE c1 = 1;
> +UPDATE t SET c4 = '8' WHERE c2 = '4';
> +UPDATE t SET c1 = '8' WHERE c2 = '4';
> +UPDATE t SET c2 = '8' WHERE c2 = '4';
> +UPDATE t SET c3 = '0' WHERE c4 = NULL;
> +UPDATE t SET c2 = '0' WHERE c4 = '0';
> +UPDATE t SET c2 = '2' WHERE c4 = '2';
> +Comparing tables master:test.t and slave:test.t
> +DELETE FROM t WHERE c1 = 7;
> +DELETE FROM t WHERE c1 = 8;
> +DELETE FROM t;
> +Comparing tables master:test.t and slave:test.t
> +DROP TABLE t;
> +SET SQL_LOG_BIN=0;
> +****** TEST: One Composite Primary Key (MyISAM -> Falcon)
> +CREATE TABLE t (c1 int, c2 char(1), c3 char(1), c4 char(1), primary key(c1,c2))
> engine= MyISAM;;
> +CREATE TABLE t (c1 int, c2 char(1), c3 char(1), c4 char(1), primary key(c1,c2))
> engine= Falcon;;
> +SET SQL_LOG_BIN=1;
> +INSERT INTO t VALUES (1, '1', '1', '1' );
> +INSERT INTO t VALUES (4, '4', '4', '4' );
> +INSERT INTO t VALUES (7, '7', '7', '7' );
> +INSERT INTO t VALUES (9, '9', '9', NULL );
> +INSERT INTO t VALUES (2, '1', '2', '2' );
> +INSERT INTO t VALUES (3, '1', '3', '2' );
> +UPDATE t SET c4 = '7';
> +UPDATE t SET c4 = '5' WHERE c1 = 1;
> +UPDATE t SET c2 = '5' WHERE c1 = 1;
> +UPDATE t SET c1 = '5' WHERE c1 = 1;
> +UPDATE t SET c4 = '8' WHERE c2 = '4';
> +UPDATE t SET c1 = '8' WHERE c2 = '4';
> +UPDATE t SET c2 = '8' WHERE c2 = '4';
> +UPDATE t SET c3 = '0' WHERE c4 = NULL;
> +UPDATE t SET c2 = '0' WHERE c4 = '0';
> +UPDATE t SET c2 = '2' WHERE c4 = '2';
> +Comparing tables master:test.t and slave:test.t
> +DELETE FROM t WHERE c1 = 7;
> +DELETE FROM t WHERE c1 = 8;
> +DELETE FROM t;
> +Comparing tables master:test.t and slave:test.t
> +DROP TABLE t;
> +SET SQL_LOG_BIN=0;
> +****** TEST: One Primary key (MyISAM -> Falcon)
> +CREATE TABLE t (c1 int, c2 char(1), c3 char(1), c4 char(1), primary key(c1)) engine=
> MyISAM;;
> +CREATE TABLE t (c1 int, c2 char(1), c3 char(1), c4 char(1), primary key(c1)) engine=
> Falcon;;
> +SET SQL_LOG_BIN=1;
> +INSERT INTO t VALUES (1, '1', '1', '1' );
> +INSERT INTO t VALUES (4, '4', '4', '4' );
> +INSERT INTO t VALUES (7, '7', '7', '7' );
> +INSERT INTO t VALUES (9, '9', '9', NULL );
> +INSERT INTO t VALUES (2, '1', '2', '2' );
> +INSERT INTO t VALUES (3, '1', '3', '2' );
> +UPDATE t SET c4 = '7';
> +UPDATE t SET c4 = '5' WHERE c1 = 1;
> +UPDATE t SET c2 = '5' WHERE c1 = 1;
> +UPDATE t SET c1 = '5' WHERE c1 = 1;
> +UPDATE t SET c4 = '8' WHERE c2 = '4';
> +UPDATE t SET c1 = '8' WHERE c2 = '4';
> +UPDATE t SET c2 = '8' WHERE c2 = '4';
> +UPDATE t SET c3 = '0' WHERE c4 = NULL;
> +UPDATE t SET c2 = '0' WHERE c4 = '0';
> +UPDATE t SET c2 = '2' WHERE c4 = '2';
> +Comparing tables master:test.t and slave:test.t
> +DELETE FROM t WHERE c1 = 7;
> +DELETE FROM t WHERE c1 = 8;
> +DELETE FROM t;
> +Comparing tables master:test.t and slave:test.t
> +DROP TABLE t;
> +SET SQL_LOG_BIN=0;
> +****** TEST: One Composite Unique key (MyISAM -> Falcon)
> +CREATE TABLE t (c1 int, c2 char(1), c3 char(1), c4 char(1), unique key(c1,c2))
> engine= MyISAM;;
> +CREATE TABLE t (c1 int, c2 char(1), c3 char(1), c4 char(1), unique key(c1,c2))
> engine= Falcon;;
> +SET SQL_LOG_BIN=1;
> +INSERT INTO t VALUES (1, '1', '1', '1' );
> +INSERT INTO t VALUES (4, '4', '4', '4' );
> +INSERT INTO t VALUES (7, '7', '7', '7' );
> +INSERT INTO t VALUES (9, '9', '9', NULL );
> +INSERT INTO t VALUES (2, '1', '2', '2' );
> +INSERT INTO t VALUES (3, '1', '3', '2' );
> +UPDATE t SET c4 = '7';
> +UPDATE t SET c4 = '5' WHERE c1 = 1;
> +UPDATE t SET c2 = '5' WHERE c1 = 1;
> +UPDATE t SET c1 = '5' WHERE c1 = 1;
> +UPDATE t SET c4 = '8' WHERE c2 = '4';
> +UPDATE t SET c1 = '8' WHERE c2 = '4';
> +UPDATE t SET c2 = '8' WHERE c2 = '4';
> +UPDATE t SET c3 = '0' WHERE c4 = NULL;
> +UPDATE t SET c2 = '0' WHERE c4 = '0';
> +UPDATE t SET c2 = '2' WHERE c4 = '2';
> +Comparing tables master:test.t and slave:test.t
> +DELETE FROM t WHERE c1 = 7;
> +DELETE FROM t WHERE c1 = 8;
> +DELETE FROM t;
> +Comparing tables master:test.t and slave:test.t
> +DROP TABLE t;
> +SET SQL_LOG_BIN=0;
> +****** TEST: One Unique key (MyISAM -> Falcon)
> +CREATE TABLE t (c1 int, c2 char(1), c3 char(1), c4 char(1), unique key(c1)) engine=
> MyISAM;;
> +CREATE TABLE t (c1 int, c2 char(1), c3 char(1), c4 char(1), unique key(c1)) engine=
> Falcon;;
> +SET SQL_LOG_BIN=1;
> +INSERT INTO t VALUES (1, '1', '1', '1' );
> +INSERT INTO t VALUES (4, '4', '4', '4' );
> +INSERT INTO t VALUES (7, '7', '7', '7' );
> +INSERT INTO t VALUES (9, '9', '9', NULL );
> +INSERT INTO t VALUES (2, '1', '2', '2' );
> +INSERT INTO t VALUES (3, '1', '3', '2' );
> +UPDATE t SET c4 = '7';
> +UPDATE t SET c4 = '5' WHERE c1 = 1;
> +UPDATE t SET c2 = '5' WHERE c1 = 1;
> +UPDATE t SET c1 = '5' WHERE c1 = 1;
> +UPDATE t SET c4 = '8' WHERE c2 = '4';
> +UPDATE t SET c1 = '8' WHERE c2 = '4';
> +UPDATE t SET c2 = '8' WHERE c2 = '4';
> +UPDATE t SET c3 = '0' WHERE c4 = NULL;
> +UPDATE t SET c2 = '0' WHERE c4 = '0';
> +UPDATE t SET c2 = '2' WHERE c4 = '2';
> +Comparing tables master:test.t and slave:test.t
> +DELETE FROM t WHERE c1 = 7;
> +DELETE FROM t WHERE c1 = 8;
> +DELETE FROM t;
> +Comparing tables master:test.t and slave:test.t
> +DROP TABLE t;
> +SET SQL_LOG_BIN=0;
> +****** TEST: One Composite key (MyISAM -> Falcon)
> +CREATE TABLE t (c1 int, c2 char(1), c3 char(1), c4 char(1), key(c1,c2)) engine=
> MyISAM;;
> +CREATE TABLE t (c1 int, c2 char(1), c3 char(1), c4 char(1), key(c1,c2)) engine=
> Falcon;;
> +SET SQL_LOG_BIN=1;
> +INSERT INTO t VALUES (1, '1', '1', '1' );
> +INSERT INTO t VALUES (4, '4', '4', '4' );
> +INSERT INTO t VALUES (7, '7', '7', '7' );
> +INSERT INTO t VALUES (9, '9', '9', NULL );
> +INSERT INTO t VALUES (2, '1', '2', '2' );
> +INSERT INTO t VALUES (3, '1', '3', '2' );
> +UPDATE t SET c4 = '7';
> +UPDATE t SET c4 = '5' WHERE c1 = 1;
> +UPDATE t SET c2 = '5' WHERE c1 = 1;
> +UPDATE t SET c1 = '5' WHERE c1 = 1;
> +UPDATE t SET c4 = '8' WHERE c2 = '4';
> +UPDATE t SET c1 = '8' WHERE c2 = '4';
> +UPDATE t SET c2 = '8' WHERE c2 = '4';
> +UPDATE t SET c3 = '0' WHERE c4 = NULL;
> +UPDATE t SET c2 = '0' WHERE c4 = '0';
> +UPDATE t SET c2 = '2' WHERE c4 = '2';
> +Comparing tables master:test.t and slave:test.t
> +DELETE FROM t WHERE c1 = 7;
> +DELETE FROM t WHERE c1 = 8;
> +DELETE FROM t;
> +Comparing tables master:test.t and slave:test.t
> +DROP TABLE t;
> +SET SQL_LOG_BIN=0;
> +******* TEST: One key (MyISAM -> Falcon)
> +CREATE TABLE t (c1 int, c2 char(1), c3 char(1), c4 char(1), key(c1)) engine=
> MyISAM;;
> +CREATE TABLE t (c1 int, c2 char(1), c3 char(1), c4 char(1), key(c1)) engine=
> Falcon;;
> +SET SQL_LOG_BIN=1;
> +INSERT INTO t VALUES (1, '1', '1', '1' );
> +INSERT INTO t VALUES (4, '4', '4', '4' );
> +INSERT INTO t VALUES (7, '7', '7', '7' );
> +INSERT INTO t VALUES (9, '9', '9', NULL );
> +INSERT INTO t VALUES (2, '1', '2', '2' );
> +INSERT INTO t VALUES (3, '1', '3', '2' );
> +UPDATE t SET c4 = '7';
> +UPDATE t SET c4 = '5' WHERE c1 = 1;
> +UPDATE t SET c2 = '5' WHERE c1 = 1;
> +UPDATE t SET c1 = '5' WHERE c1 = 1;
> +UPDATE t SET c4 = '8' WHERE c2 = '4';
> +UPDATE t SET c1 = '8' WHERE c2 = '4';
> +UPDATE t SET c2 = '8' WHERE c2 = '4';
> +UPDATE t SET c3 = '0' WHERE c4 = NULL;
> +UPDATE t SET c2 = '0' WHERE c4 = '0';
> +UPDATE t SET c2 = '2' WHERE c4 = '2';
> +Comparing tables master:test.t and slave:test.t
> +DELETE FROM t WHERE c1 = 7;
> +DELETE FROM t WHERE c1 = 8;
> +DELETE FROM t;
> +Comparing tables master:test.t and slave:test.t
> +DROP TABLE t;
> +SET SQL_LOG_BIN=0;
> +******* TEST: No keys (MyISAM -> Falcon)
> +CREATE TABLE t (c1 int, c2 char(1), c3 char(1), c4 char(1)) engine= MyISAM;;
> +CREATE TABLE t (c1 int, c2 char(1), c3 char(1), c4 char(1)) engine= Falcon;;
> +SET SQL_LOG_BIN=1;
> +INSERT INTO t VALUES (1, '1', '1', '1' );
> +INSERT INTO t VALUES (4, '4', '4', '4' );
> +INSERT INTO t VALUES (7, '7', '7', '7' );
> +INSERT INTO t VALUES (9, '9', '9', NULL );
> +INSERT INTO t VALUES (2, '1', '2', '2' );
> +INSERT INTO t VALUES (3, '1', '3', '2' );
> +UPDATE t SET c4 = '7';
> +UPDATE t SET c4 = '5' WHERE c1 = 1;
> +UPDATE t SET c2 = '5' WHERE c1 = 1;
> +UPDATE t SET c1 = '5' WHERE c1 = 1;
> +UPDATE t SET c4 = '8' WHERE c2 = '4';
> +UPDATE t SET c1 = '8' WHERE c2 = '4';
> +UPDATE t SET c2 = '8' WHERE c2 = '4';
> +UPDATE t SET c3 = '0' WHERE c4 = NULL;
> +UPDATE t SET c2 = '0' WHERE c4 = '0';
> +UPDATE t SET c2 = '2' WHERE c4 = '2';
> +Comparing tables master:test.t and slave:test.t
> +DELETE FROM t WHERE c1 = 7;
> +DELETE FROM t WHERE c1 = 8;
> +DELETE FROM t;
> +Comparing tables master:test.t and slave:test.t
> +DROP TABLE t;
>
> === added file 'mysql-test/suite/rpl/r/rpl_row_record_find_innodb.result'
> --- a/mysql-test/suite/rpl/r/rpl_row_record_find_innodb.result 1970-01-01 00:00:00
> +0000
> +++ b/mysql-test/suite/rpl/r/rpl_row_record_find_innodb.result 2009-04-15 15:56:25
> +0000
> @@ -0,0 +1,828 @@
> +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;
> +#################################################################
> +# CASE 5: InnoDB - master, MyISAM - slave
> +#################################################################
> +DROP TABLE IF EXISTS t;
> +SET SQL_LOG_BIN=0;
> +****** TEST: One Composite Primary Key with holes (InnoDB -> MyISAM)
> +CREATE TABLE t (c1 int, c2 char(1), c3 char(1), c4 char(1), primary key(c1,c3))
> engine= InnoDB;;
> +CREATE TABLE t (c1 int, c2 char(1), c3 char(1), c4 char(1), primary key(c1,c3))
> engine= MyISAM;;
> +SET SQL_LOG_BIN=1;
> +INSERT INTO t VALUES (1, '1', '1', '1' );
> +INSERT INTO t VALUES (4, '4', '4', '4' );
> +INSERT INTO t VALUES (7, '7', '7', '7' );
> +INSERT INTO t VALUES (9, '9', '9', NULL );
> +INSERT INTO t VALUES (2, '1', '2', '2' );
> +INSERT INTO t VALUES (3, '1', '3', '2' );
> +UPDATE t SET c4 = '7';
> +UPDATE t SET c4 = '5' WHERE c1 = 1;
> +UPDATE t SET c2 = '5' WHERE c1 = 1;
> +UPDATE t SET c1 = '5' WHERE c1 = 1;
> +UPDATE t SET c4 = '8' WHERE c2 = '4';
> +UPDATE t SET c1 = '8' WHERE c2 = '4';
> +UPDATE t SET c2 = '8' WHERE c2 = '4';
> +UPDATE t SET c3 = '0' WHERE c4 = NULL;
> +UPDATE t SET c2 = '0' WHERE c4 = '0';
> +UPDATE t SET c2 = '2' WHERE c4 = '2';
> +Comparing tables master:test.t and slave:test.t
> +DELETE FROM t WHERE c1 = 7;
> +DELETE FROM t WHERE c1 = 8;
> +DELETE FROM t;
> +Comparing tables master:test.t and slave:test.t
> +DROP TABLE t;
> +SET SQL_LOG_BIN=0;
> +****** TEST: One Composite Unique key with holes (InnoDB -> MyISAM)
> +CREATE TABLE t (c1 int, c2 char(1), c3 char(1), c4 char(1), unique key(c1,c3))
> engine= InnoDB;;
> +CREATE TABLE t (c1 int, c2 char(1), c3 char(1), c4 char(1), unique key(c1,c3))
> engine= MyISAM;;
> +SET SQL_LOG_BIN=1;
> +INSERT INTO t VALUES (1, '1', '1', '1' );
> +INSERT INTO t VALUES (4, '4', '4', '4' );
> +INSERT INTO t VALUES (7, '7', '7', '7' );
> +INSERT INTO t VALUES (9, '9', '9', NULL );
> +INSERT INTO t VALUES (2, '1', '2', '2' );
> +INSERT INTO t VALUES (3, '1', '3', '2' );
> +UPDATE t SET c4 = '7';
> +UPDATE t SET c4 = '5' WHERE c1 = 1;
> +UPDATE t SET c2 = '5' WHERE c1 = 1;
> +UPDATE t SET c1 = '5' WHERE c1 = 1;
> +UPDATE t SET c4 = '8' WHERE c2 = '4';
> +UPDATE t SET c1 = '8' WHERE c2 = '4';
> +UPDATE t SET c2 = '8' WHERE c2 = '4';
> +UPDATE t SET c3 = '0' WHERE c4 = NULL;
> +UPDATE t SET c2 = '0' WHERE c4 = '0';
> +UPDATE t SET c2 = '2' WHERE c4 = '2';
> +Comparing tables master:test.t and slave:test.t
> +DELETE FROM t WHERE c1 = 7;
> +DELETE FROM t WHERE c1 = 8;
> +DELETE FROM t;
> +Comparing tables master:test.t and slave:test.t
> +DROP TABLE t;
> +SET SQL_LOG_BIN=0;
> +****** TEST: One Composite key with holes (InnoDB -> MyISAM)
> +CREATE TABLE t (c1 int, c2 char(1), c3 char(1), c4 char(1), key(c1,c3)) engine=
> InnoDB;;
> +CREATE TABLE t (c1 int, c2 char(1), c3 char(1), c4 char(1), key(c1,c3)) engine=
> MyISAM;;
> +SET SQL_LOG_BIN=1;
> +INSERT INTO t VALUES (1, '1', '1', '1' );
> +INSERT INTO t VALUES (4, '4', '4', '4' );
> +INSERT INTO t VALUES (7, '7', '7', '7' );
> +INSERT INTO t VALUES (9, '9', '9', NULL );
> +INSERT INTO t VALUES (2, '1', '2', '2' );
> +INSERT INTO t VALUES (3, '1', '3', '2' );
> +UPDATE t SET c4 = '7';
> +UPDATE t SET c4 = '5' WHERE c1 = 1;
> +UPDATE t SET c2 = '5' WHERE c1 = 1;
> +UPDATE t SET c1 = '5' WHERE c1 = 1;
> +UPDATE t SET c4 = '8' WHERE c2 = '4';
> +UPDATE t SET c1 = '8' WHERE c2 = '4';
> +UPDATE t SET c2 = '8' WHERE c2 = '4';
> +UPDATE t SET c3 = '0' WHERE c4 = NULL;
> +UPDATE t SET c2 = '0' WHERE c4 = '0';
> +UPDATE t SET c2 = '2' WHERE c4 = '2';
> +Comparing tables master:test.t and slave:test.t
> +DELETE FROM t WHERE c1 = 7;
> +DELETE FROM t WHERE c1 = 8;
> +DELETE FROM t;
> +Comparing tables master:test.t and slave:test.t
> +DROP TABLE t;
> +SET SQL_LOG_BIN=0;
> +****** TEST: One Composite Primary Key (InnoDB -> MyISAM)
> +CREATE TABLE t (c1 int, c2 char(1), c3 char(1), c4 char(1), primary key(c1,c2))
> engine= InnoDB;;
> +CREATE TABLE t (c1 int, c2 char(1), c3 char(1), c4 char(1), primary key(c1,c2))
> engine= MyISAM;;
> +SET SQL_LOG_BIN=1;
> +INSERT INTO t VALUES (1, '1', '1', '1' );
> +INSERT INTO t VALUES (4, '4', '4', '4' );
> +INSERT INTO t VALUES (7, '7', '7', '7' );
> +INSERT INTO t VALUES (9, '9', '9', NULL );
> +INSERT INTO t VALUES (2, '1', '2', '2' );
> +INSERT INTO t VALUES (3, '1', '3', '2' );
> +UPDATE t SET c4 = '7';
> +UPDATE t SET c4 = '5' WHERE c1 = 1;
> +UPDATE t SET c2 = '5' WHERE c1 = 1;
> +UPDATE t SET c1 = '5' WHERE c1 = 1;
> +UPDATE t SET c4 = '8' WHERE c2 = '4';
> +UPDATE t SET c1 = '8' WHERE c2 = '4';
> +UPDATE t SET c2 = '8' WHERE c2 = '4';
> +UPDATE t SET c3 = '0' WHERE c4 = NULL;
> +UPDATE t SET c2 = '0' WHERE c4 = '0';
> +UPDATE t SET c2 = '2' WHERE c4 = '2';
> +Comparing tables master:test.t and slave:test.t
> +DELETE FROM t WHERE c1 = 7;
> +DELETE FROM t WHERE c1 = 8;
> +DELETE FROM t;
> +Comparing tables master:test.t and slave:test.t
> +DROP TABLE t;
> +SET SQL_LOG_BIN=0;
> +****** TEST: One Primary key (InnoDB -> MyISAM)
> +CREATE TABLE t (c1 int, c2 char(1), c3 char(1), c4 char(1), primary key(c1)) engine=
> InnoDB;;
> +CREATE TABLE t (c1 int, c2 char(1), c3 char(1), c4 char(1), primary key(c1)) engine=
> MyISAM;;
> +SET SQL_LOG_BIN=1;
> +INSERT INTO t VALUES (1, '1', '1', '1' );
> +INSERT INTO t VALUES (4, '4', '4', '4' );
> +INSERT INTO t VALUES (7, '7', '7', '7' );
> +INSERT INTO t VALUES (9, '9', '9', NULL );
> +INSERT INTO t VALUES (2, '1', '2', '2' );
> +INSERT INTO t VALUES (3, '1', '3', '2' );
> +UPDATE t SET c4 = '7';
> +UPDATE t SET c4 = '5' WHERE c1 = 1;
> +UPDATE t SET c2 = '5' WHERE c1 = 1;
> +UPDATE t SET c1 = '5' WHERE c1 = 1;
> +UPDATE t SET c4 = '8' WHERE c2 = '4';
> +UPDATE t SET c1 = '8' WHERE c2 = '4';
> +UPDATE t SET c2 = '8' WHERE c2 = '4';
> +UPDATE t SET c3 = '0' WHERE c4 = NULL;
> +UPDATE t SET c2 = '0' WHERE c4 = '0';
> +UPDATE t SET c2 = '2' WHERE c4 = '2';
> +Comparing tables master:test.t and slave:test.t
> +DELETE FROM t WHERE c1 = 7;
> +DELETE FROM t WHERE c1 = 8;
> +DELETE FROM t;
> +Comparing tables master:test.t and slave:test.t
> +DROP TABLE t;
> +SET SQL_LOG_BIN=0;
> +****** TEST: One Composite Unique key (InnoDB -> MyISAM)
> +CREATE TABLE t (c1 int, c2 char(1), c3 char(1), c4 char(1), unique key(c1,c2))
> engine= InnoDB;;
> +CREATE TABLE t (c1 int, c2 char(1), c3 char(1), c4 char(1), unique key(c1,c2))
> engine= MyISAM;;
> +SET SQL_LOG_BIN=1;
> +INSERT INTO t VALUES (1, '1', '1', '1' );
> +INSERT INTO t VALUES (4, '4', '4', '4' );
> +INSERT INTO t VALUES (7, '7', '7', '7' );
> +INSERT INTO t VALUES (9, '9', '9', NULL );
> +INSERT INTO t VALUES (2, '1', '2', '2' );
> +INSERT INTO t VALUES (3, '1', '3', '2' );
> +UPDATE t SET c4 = '7';
> +UPDATE t SET c4 = '5' WHERE c1 = 1;
> +UPDATE t SET c2 = '5' WHERE c1 = 1;
> +UPDATE t SET c1 = '5' WHERE c1 = 1;
> +UPDATE t SET c4 = '8' WHERE c2 = '4';
> +UPDATE t SET c1 = '8' WHERE c2 = '4';
> +UPDATE t SET c2 = '8' WHERE c2 = '4';
> +UPDATE t SET c3 = '0' WHERE c4 = NULL;
> +UPDATE t SET c2 = '0' WHERE c4 = '0';
> +UPDATE t SET c2 = '2' WHERE c4 = '2';
> +Comparing tables master:test.t and slave:test.t
> +DELETE FROM t WHERE c1 = 7;
> +DELETE FROM t WHERE c1 = 8;
> +DELETE FROM t;
> +Comparing tables master:test.t and slave:test.t
> +DROP TABLE t;
> +SET SQL_LOG_BIN=0;
> +****** TEST: One Unique key (InnoDB -> MyISAM)
> +CREATE TABLE t (c1 int, c2 char(1), c3 char(1), c4 char(1), unique key(c1)) engine=
> InnoDB;;
> +CREATE TABLE t (c1 int, c2 char(1), c3 char(1), c4 char(1), unique key(c1)) engine=
> MyISAM;;
> +SET SQL_LOG_BIN=1;
> +INSERT INTO t VALUES (1, '1', '1', '1' );
> +INSERT INTO t VALUES (4, '4', '4', '4' );
> +INSERT INTO t VALUES (7, '7', '7', '7' );
> +INSERT INTO t VALUES (9, '9', '9', NULL );
> +INSERT INTO t VALUES (2, '1', '2', '2' );
> +INSERT INTO t VALUES (3, '1', '3', '2' );
> +UPDATE t SET c4 = '7';
> +UPDATE t SET c4 = '5' WHERE c1 = 1;
> +UPDATE t SET c2 = '5' WHERE c1 = 1;
> +UPDATE t SET c1 = '5' WHERE c1 = 1;
> +UPDATE t SET c4 = '8' WHERE c2 = '4';
> +UPDATE t SET c1 = '8' WHERE c2 = '4';
> +UPDATE t SET c2 = '8' WHERE c2 = '4';
> +UPDATE t SET c3 = '0' WHERE c4 = NULL;
> +UPDATE t SET c2 = '0' WHERE c4 = '0';
> +UPDATE t SET c2 = '2' WHERE c4 = '2';
> +Comparing tables master:test.t and slave:test.t
> +DELETE FROM t WHERE c1 = 7;
> +DELETE FROM t WHERE c1 = 8;
> +DELETE FROM t;
> +Comparing tables master:test.t and slave:test.t
> +DROP TABLE t;
> +SET SQL_LOG_BIN=0;
> +****** TEST: One Composite key (InnoDB -> MyISAM)
> +CREATE TABLE t (c1 int, c2 char(1), c3 char(1), c4 char(1), key(c1,c2)) engine=
> InnoDB;;
> +CREATE TABLE t (c1 int, c2 char(1), c3 char(1), c4 char(1), key(c1,c2)) engine=
> MyISAM;;
> +SET SQL_LOG_BIN=1;
> +INSERT INTO t VALUES (1, '1', '1', '1' );
> +INSERT INTO t VALUES (4, '4', '4', '4' );
> +INSERT INTO t VALUES (7, '7', '7', '7' );
> +INSERT INTO t VALUES (9, '9', '9', NULL );
> +INSERT INTO t VALUES (2, '1', '2', '2' );
> +INSERT INTO t VALUES (3, '1', '3', '2' );
> +UPDATE t SET c4 = '7';
> +UPDATE t SET c4 = '5' WHERE c1 = 1;
> +UPDATE t SET c2 = '5' WHERE c1 = 1;
> +UPDATE t SET c1 = '5' WHERE c1 = 1;
> +UPDATE t SET c4 = '8' WHERE c2 = '4';
> +UPDATE t SET c1 = '8' WHERE c2 = '4';
> +UPDATE t SET c2 = '8' WHERE c2 = '4';
> +UPDATE t SET c3 = '0' WHERE c4 = NULL;
> +UPDATE t SET c2 = '0' WHERE c4 = '0';
> +UPDATE t SET c2 = '2' WHERE c4 = '2';
> +Comparing tables master:test.t and slave:test.t
> +DELETE FROM t WHERE c1 = 7;
> +DELETE FROM t WHERE c1 = 8;
> +DELETE FROM t;
> +Comparing tables master:test.t and slave:test.t
> +DROP TABLE t;
> +SET SQL_LOG_BIN=0;
> +******* TEST: One key (InnoDB -> MyISAM)
> +CREATE TABLE t (c1 int, c2 char(1), c3 char(1), c4 char(1), key(c1)) engine=
> InnoDB;;
> +CREATE TABLE t (c1 int, c2 char(1), c3 char(1), c4 char(1), key(c1)) engine=
> MyISAM;;
> +SET SQL_LOG_BIN=1;
> +INSERT INTO t VALUES (1, '1', '1', '1' );
> +INSERT INTO t VALUES (4, '4', '4', '4' );
> +INSERT INTO t VALUES (7, '7', '7', '7' );
> +INSERT INTO t VALUES (9, '9', '9', NULL );
> +INSERT INTO t VALUES (2, '1', '2', '2' );
> +INSERT INTO t VALUES (3, '1', '3', '2' );
> +UPDATE t SET c4 = '7';
> +UPDATE t SET c4 = '5' WHERE c1 = 1;
> +UPDATE t SET c2 = '5' WHERE c1 = 1;
> +UPDATE t SET c1 = '5' WHERE c1 = 1;
> +UPDATE t SET c4 = '8' WHERE c2 = '4';
> +UPDATE t SET c1 = '8' WHERE c2 = '4';
> +UPDATE t SET c2 = '8' WHERE c2 = '4';
> +UPDATE t SET c3 = '0' WHERE c4 = NULL;
> +UPDATE t SET c2 = '0' WHERE c4 = '0';
> +UPDATE t SET c2 = '2' WHERE c4 = '2';
> +Comparing tables master:test.t and slave:test.t
> +DELETE FROM t WHERE c1 = 7;
> +DELETE FROM t WHERE c1 = 8;
> +DELETE FROM t;
> +Comparing tables master:test.t and slave:test.t
> +DROP TABLE t;
> +SET SQL_LOG_BIN=0;
> +******* TEST: No keys (InnoDB -> MyISAM)
> +CREATE TABLE t (c1 int, c2 char(1), c3 char(1), c4 char(1)) engine= InnoDB;;
> +CREATE TABLE t (c1 int, c2 char(1), c3 char(1), c4 char(1)) engine= MyISAM;;
> +SET SQL_LOG_BIN=1;
> +INSERT INTO t VALUES (1, '1', '1', '1' );
> +INSERT INTO t VALUES (4, '4', '4', '4' );
> +INSERT INTO t VALUES (7, '7', '7', '7' );
> +INSERT INTO t VALUES (9, '9', '9', NULL );
> +INSERT INTO t VALUES (2, '1', '2', '2' );
> +INSERT INTO t VALUES (3, '1', '3', '2' );
> +UPDATE t SET c4 = '7';
> +UPDATE t SET c4 = '5' WHERE c1 = 1;
> +UPDATE t SET c2 = '5' WHERE c1 = 1;
> +UPDATE t SET c1 = '5' WHERE c1 = 1;
> +UPDATE t SET c4 = '8' WHERE c2 = '4';
> +UPDATE t SET c1 = '8' WHERE c2 = '4';
> +UPDATE t SET c2 = '8' WHERE c2 = '4';
> +UPDATE t SET c3 = '0' WHERE c4 = NULL;
> +UPDATE t SET c2 = '0' WHERE c4 = '0';
> +UPDATE t SET c2 = '2' WHERE c4 = '2';
> +Comparing tables master:test.t and slave:test.t
> +DELETE FROM t WHERE c1 = 7;
> +DELETE FROM t WHERE c1 = 8;
> +DELETE FROM t;
> +Comparing tables master:test.t and slave:test.t
> +DROP TABLE t;
> +#################################################################
> +# CASE 6: InnoDB - master, InnoDB - slave
> +#################################################################
> +DROP TABLE IF EXISTS t;
> +SET SQL_LOG_BIN=0;
> +****** TEST: One Composite Primary Key with holes (InnoDB -> InnoDB)
> +CREATE TABLE t (c1 int, c2 char(1), c3 char(1), c4 char(1), primary key(c1,c3))
> engine= InnoDB;;
> +CREATE TABLE t (c1 int, c2 char(1), c3 char(1), c4 char(1), primary key(c1,c3))
> engine= InnoDB;;
> +SET SQL_LOG_BIN=1;
> +INSERT INTO t VALUES (1, '1', '1', '1' );
> +INSERT INTO t VALUES (4, '4', '4', '4' );
> +INSERT INTO t VALUES (7, '7', '7', '7' );
> +INSERT INTO t VALUES (9, '9', '9', NULL );
> +INSERT INTO t VALUES (2, '1', '2', '2' );
> +INSERT INTO t VALUES (3, '1', '3', '2' );
> +UPDATE t SET c4 = '7';
> +UPDATE t SET c4 = '5' WHERE c1 = 1;
> +UPDATE t SET c2 = '5' WHERE c1 = 1;
> +UPDATE t SET c1 = '5' WHERE c1 = 1;
> +UPDATE t SET c4 = '8' WHERE c2 = '4';
> +UPDATE t SET c1 = '8' WHERE c2 = '4';
> +UPDATE t SET c2 = '8' WHERE c2 = '4';
> +UPDATE t SET c3 = '0' WHERE c4 = NULL;
> +UPDATE t SET c2 = '0' WHERE c4 = '0';
> +UPDATE t SET c2 = '2' WHERE c4 = '2';
> +Comparing tables master:test.t and slave:test.t
> +DELETE FROM t WHERE c1 = 7;
> +DELETE FROM t WHERE c1 = 8;
> +DELETE FROM t;
> +Comparing tables master:test.t and slave:test.t
> +DROP TABLE t;
> +SET SQL_LOG_BIN=0;
> +****** TEST: One Composite Unique key with holes (InnoDB -> InnoDB)
> +CREATE TABLE t (c1 int, c2 char(1), c3 char(1), c4 char(1), unique key(c1,c3))
> engine= InnoDB;;
> +CREATE TABLE t (c1 int, c2 char(1), c3 char(1), c4 char(1), unique key(c1,c3))
> engine= InnoDB;;
> +SET SQL_LOG_BIN=1;
> +INSERT INTO t VALUES (1, '1', '1', '1' );
> +INSERT INTO t VALUES (4, '4', '4', '4' );
> +INSERT INTO t VALUES (7, '7', '7', '7' );
> +INSERT INTO t VALUES (9, '9', '9', NULL );
> +INSERT INTO t VALUES (2, '1', '2', '2' );
> +INSERT INTO t VALUES (3, '1', '3', '2' );
> +UPDATE t SET c4 = '7';
> +UPDATE t SET c4 = '5' WHERE c1 = 1;
> +UPDATE t SET c2 = '5' WHERE c1 = 1;
> +UPDATE t SET c1 = '5' WHERE c1 = 1;
> +UPDATE t SET c4 = '8' WHERE c2 = '4';
> +UPDATE t SET c1 = '8' WHERE c2 = '4';
> +UPDATE t SET c2 = '8' WHERE c2 = '4';
> +UPDATE t SET c3 = '0' WHERE c4 = NULL;
> +UPDATE t SET c2 = '0' WHERE c4 = '0';
> +UPDATE t SET c2 = '2' WHERE c4 = '2';
> +Comparing tables master:test.t and slave:test.t
> +DELETE FROM t WHERE c1 = 7;
> +DELETE FROM t WHERE c1 = 8;
> +DELETE FROM t;
> +Comparing tables master:test.t and slave:test.t
> +DROP TABLE t;
> +SET SQL_LOG_BIN=0;
> +****** TEST: One Composite key with holes (InnoDB -> InnoDB)
> +CREATE TABLE t (c1 int, c2 char(1), c3 char(1), c4 char(1), key(c1,c3)) engine=
> InnoDB;;
> +CREATE TABLE t (c1 int, c2 char(1), c3 char(1), c4 char(1), key(c1,c3)) engine=
> InnoDB;;
> +SET SQL_LOG_BIN=1;
> +INSERT INTO t VALUES (1, '1', '1', '1' );
> +INSERT INTO t VALUES (4, '4', '4', '4' );
> +INSERT INTO t VALUES (7, '7', '7', '7' );
> +INSERT INTO t VALUES (9, '9', '9', NULL );
> +INSERT INTO t VALUES (2, '1', '2', '2' );
> +INSERT INTO t VALUES (3, '1', '3', '2' );
> +UPDATE t SET c4 = '7';
> +UPDATE t SET c4 = '5' WHERE c1 = 1;
> +UPDATE t SET c2 = '5' WHERE c1 = 1;
> +UPDATE t SET c1 = '5' WHERE c1 = 1;
> +UPDATE t SET c4 = '8' WHERE c2 = '4';
> +UPDATE t SET c1 = '8' WHERE c2 = '4';
> +UPDATE t SET c2 = '8' WHERE c2 = '4';
> +UPDATE t SET c3 = '0' WHERE c4 = NULL;
> +UPDATE t SET c2 = '0' WHERE c4 = '0';
> +UPDATE t SET c2 = '2' WHERE c4 = '2';
> +Comparing tables master:test.t and slave:test.t
> +DELETE FROM t WHERE c1 = 7;
> +DELETE FROM t WHERE c1 = 8;
> +DELETE FROM t;
> +Comparing tables master:test.t and slave:test.t
> +DROP TABLE t;
> +SET SQL_LOG_BIN=0;
> +****** TEST: One Composite Primary Key (InnoDB -> InnoDB)
> +CREATE TABLE t (c1 int, c2 char(1), c3 char(1), c4 char(1), primary key(c1,c2))
> engine= InnoDB;;
> +CREATE TABLE t (c1 int, c2 char(1), c3 char(1), c4 char(1), primary key(c1,c2))
> engine= InnoDB;;
> +SET SQL_LOG_BIN=1;
> +INSERT INTO t VALUES (1, '1', '1', '1' );
> +INSERT INTO t VALUES (4, '4', '4', '4' );
> +INSERT INTO t VALUES (7, '7', '7', '7' );
> +INSERT INTO t VALUES (9, '9', '9', NULL );
> +INSERT INTO t VALUES (2, '1', '2', '2' );
> +INSERT INTO t VALUES (3, '1', '3', '2' );
> +UPDATE t SET c4 = '7';
> +UPDATE t SET c4 = '5' WHERE c1 = 1;
> +UPDATE t SET c2 = '5' WHERE c1 = 1;
> +UPDATE t SET c1 = '5' WHERE c1 = 1;
> +UPDATE t SET c4 = '8' WHERE c2 = '4';
> +UPDATE t SET c1 = '8' WHERE c2 = '4';
> +UPDATE t SET c2 = '8' WHERE c2 = '4';
> +UPDATE t SET c3 = '0' WHERE c4 = NULL;
> +UPDATE t SET c2 = '0' WHERE c4 = '0';
> +UPDATE t SET c2 = '2' WHERE c4 = '2';
> +Comparing tables master:test.t and slave:test.t
> +DELETE FROM t WHERE c1 = 7;
> +DELETE FROM t WHERE c1 = 8;
> +DELETE FROM t;
> +Comparing tables master:test.t and slave:test.t
> +DROP TABLE t;
> +SET SQL_LOG_BIN=0;
> +****** TEST: One Primary key (InnoDB -> InnoDB)
> +CREATE TABLE t (c1 int, c2 char(1), c3 char(1), c4 char(1), primary key(c1)) engine=
> InnoDB;;
> +CREATE TABLE t (c1 int, c2 char(1), c3 char(1), c4 char(1), primary key(c1)) engine=
> InnoDB;;
> +SET SQL_LOG_BIN=1;
> +INSERT INTO t VALUES (1, '1', '1', '1' );
> +INSERT INTO t VALUES (4, '4', '4', '4' );
> +INSERT INTO t VALUES (7, '7', '7', '7' );
> +INSERT INTO t VALUES (9, '9', '9', NULL );
> +INSERT INTO t VALUES (2, '1', '2', '2' );
> +INSERT INTO t VALUES (3, '1', '3', '2' );
> +UPDATE t SET c4 = '7';
> +UPDATE t SET c4 = '5' WHERE c1 = 1;
> +UPDATE t SET c2 = '5' WHERE c1 = 1;
> +UPDATE t SET c1 = '5' WHERE c1 = 1;
> +UPDATE t SET c4 = '8' WHERE c2 = '4';
> +UPDATE t SET c1 = '8' WHERE c2 = '4';
> +UPDATE t SET c2 = '8' WHERE c2 = '4';
> +UPDATE t SET c3 = '0' WHERE c4 = NULL;
> +UPDATE t SET c2 = '0' WHERE c4 = '0';
> +UPDATE t SET c2 = '2' WHERE c4 = '2';
> +Comparing tables master:test.t and slave:test.t
> +DELETE FROM t WHERE c1 = 7;
> +DELETE FROM t WHERE c1 = 8;
> +DELETE FROM t;
> +Comparing tables master:test.t and slave:test.t
> +DROP TABLE t;
> +SET SQL_LOG_BIN=0;
> +****** TEST: One Composite Unique key (InnoDB -> InnoDB)
> +CREATE TABLE t (c1 int, c2 char(1), c3 char(1), c4 char(1), unique key(c1,c2))
> engine= InnoDB;;
> +CREATE TABLE t (c1 int, c2 char(1), c3 char(1), c4 char(1), unique key(c1,c2))
> engine= InnoDB;;
> +SET SQL_LOG_BIN=1;
> +INSERT INTO t VALUES (1, '1', '1', '1' );
> +INSERT INTO t VALUES (4, '4', '4', '4' );
> +INSERT INTO t VALUES (7, '7', '7', '7' );
> +INSERT INTO t VALUES (9, '9', '9', NULL );
> +INSERT INTO t VALUES (2, '1', '2', '2' );
> +INSERT INTO t VALUES (3, '1', '3', '2' );
> +UPDATE t SET c4 = '7';
> +UPDATE t SET c4 = '5' WHERE c1 = 1;
> +UPDATE t SET c2 = '5' WHERE c1 = 1;
> +UPDATE t SET c1 = '5' WHERE c1 = 1;
> +UPDATE t SET c4 = '8' WHERE c2 = '4';
> +UPDATE t SET c1 = '8' WHERE c2 = '4';
> +UPDATE t SET c2 = '8' WHERE c2 = '4';
> +UPDATE t SET c3 = '0' WHERE c4 = NULL;
> +UPDATE t SET c2 = '0' WHERE c4 = '0';
> +UPDATE t SET c2 = '2' WHERE c4 = '2';
> +Comparing tables master:test.t and slave:test.t
> +DELETE FROM t WHERE c1 = 7;
> +DELETE FROM t WHERE c1 = 8;
> +DELETE FROM t;
> +Comparing tables master:test.t and slave:test.t
> +DROP TABLE t;
> +SET SQL_LOG_BIN=0;
> +****** TEST: One Unique key (InnoDB -> InnoDB)
> +CREATE TABLE t (c1 int, c2 char(1), c3 char(1), c4 char(1), unique key(c1)) engine=
> InnoDB;;
> +CREATE TABLE t (c1 int, c2 char(1), c3 char(1), c4 char(1), unique key(c1)) engine=
> InnoDB;;
> +SET SQL_LOG_BIN=1;
> +INSERT INTO t VALUES (1, '1', '1', '1' );
> +INSERT INTO t VALUES (4, '4', '4', '4' );
> +INSERT INTO t VALUES (7, '7', '7', '7' );
> +INSERT INTO t VALUES (9, '9', '9', NULL );
> +INSERT INTO t VALUES (2, '1', '2', '2' );
> +INSERT INTO t VALUES (3, '1', '3', '2' );
> +UPDATE t SET c4 = '7';
> +UPDATE t SET c4 = '5' WHERE c1 = 1;
> +UPDATE t SET c2 = '5' WHERE c1 = 1;
> +UPDATE t SET c1 = '5' WHERE c1 = 1;
> +UPDATE t SET c4 = '8' WHERE c2 = '4';
> +UPDATE t SET c1 = '8' WHERE c2 = '4';
> +UPDATE t SET c2 = '8' WHERE c2 = '4';
> +UPDATE t SET c3 = '0' WHERE c4 = NULL;
> +UPDATE t SET c2 = '0' WHERE c4 = '0';
> +UPDATE t SET c2 = '2' WHERE c4 = '2';
> +Comparing tables master:test.t and slave:test.t
> +DELETE FROM t WHERE c1 = 7;
> +DELETE FROM t WHERE c1 = 8;
> +DELETE FROM t;
> +Comparing tables master:test.t and slave:test.t
> +DROP TABLE t;
> +SET SQL_LOG_BIN=0;
> +****** TEST: One Composite key (InnoDB -> InnoDB)
> +CREATE TABLE t (c1 int, c2 char(1), c3 char(1), c4 char(1), key(c1,c2)) engine=
> InnoDB;;
> +CREATE TABLE t (c1 int, c2 char(1), c3 char(1), c4 char(1), key(c1,c2)) engine=
> InnoDB;;
> +SET SQL_LOG_BIN=1;
> +INSERT INTO t VALUES (1, '1', '1', '1' );
> +INSERT INTO t VALUES (4, '4', '4', '4' );
> +INSERT INTO t VALUES (7, '7', '7', '7' );
> +INSERT INTO t VALUES (9, '9', '9', NULL );
> +INSERT INTO t VALUES (2, '1', '2', '2' );
> +INSERT INTO t VALUES (3, '1', '3', '2' );
> +UPDATE t SET c4 = '7';
> +UPDATE t SET c4 = '5' WHERE c1 = 1;
> +UPDATE t SET c2 = '5' WHERE c1 = 1;
> +UPDATE t SET c1 = '5' WHERE c1 = 1;
> +UPDATE t SET c4 = '8' WHERE c2 = '4';
> +UPDATE t SET c1 = '8' WHERE c2 = '4';
> +UPDATE t SET c2 = '8' WHERE c2 = '4';
> +UPDATE t SET c3 = '0' WHERE c4 = NULL;
> +UPDATE t SET c2 = '0' WHERE c4 = '0';
> +UPDATE t SET c2 = '2' WHERE c4 = '2';
> +Comparing tables master:test.t and slave:test.t
> +DELETE FROM t WHERE c1 = 7;
> +DELETE FROM t WHERE c1 = 8;
> +DELETE FROM t;
> +Comparing tables master:test.t and slave:test.t
> +DROP TABLE t;
> +SET SQL_LOG_BIN=0;
> +******* TEST: One key (InnoDB -> InnoDB)
> +CREATE TABLE t (c1 int, c2 char(1), c3 char(1), c4 char(1), key(c1)) engine=
> InnoDB;;
> +CREATE TABLE t (c1 int, c2 char(1), c3 char(1), c4 char(1), key(c1)) engine=
> InnoDB;;
> +SET SQL_LOG_BIN=1;
> +INSERT INTO t VALUES (1, '1', '1', '1' );
> +INSERT INTO t VALUES (4, '4', '4', '4' );
> +INSERT INTO t VALUES (7, '7', '7', '7' );
> +INSERT INTO t VALUES (9, '9', '9', NULL );
> +INSERT INTO t VALUES (2, '1', '2', '2' );
> +INSERT INTO t VALUES (3, '1', '3', '2' );
> +UPDATE t SET c4 = '7';
> +UPDATE t SET c4 = '5' WHERE c1 = 1;
> +UPDATE t SET c2 = '5' WHERE c1 = 1;
> +UPDATE t SET c1 = '5' WHERE c1 = 1;
> +UPDATE t SET c4 = '8' WHERE c2 = '4';
> +UPDATE t SET c1 = '8' WHERE c2 = '4';
> +UPDATE t SET c2 = '8' WHERE c2 = '4';
> +UPDATE t SET c3 = '0' WHERE c4 = NULL;
> +UPDATE t SET c2 = '0' WHERE c4 = '0';
> +UPDATE t SET c2 = '2' WHERE c4 = '2';
> +Comparing tables master:test.t and slave:test.t
> +DELETE FROM t WHERE c1 = 7;
> +DELETE FROM t WHERE c1 = 8;
> +DELETE FROM t;
> +Comparing tables master:test.t and slave:test.t
> +DROP TABLE t;
> +SET SQL_LOG_BIN=0;
> +******* TEST: No keys (InnoDB -> InnoDB)
> +CREATE TABLE t (c1 int, c2 char(1), c3 char(1), c4 char(1)) engine= InnoDB;;
> +CREATE TABLE t (c1 int, c2 char(1), c3 char(1), c4 char(1)) engine= InnoDB;;
> +SET SQL_LOG_BIN=1;
> +INSERT INTO t VALUES (1, '1', '1', '1' );
> +INSERT INTO t VALUES (4, '4', '4', '4' );
> +INSERT INTO t VALUES (7, '7', '7', '7' );
> +INSERT INTO t VALUES (9, '9', '9', NULL );
> +INSERT INTO t VALUES (2, '1', '2', '2' );
> +INSERT INTO t VALUES (3, '1', '3', '2' );
> +UPDATE t SET c4 = '7';
> +UPDATE t SET c4 = '5' WHERE c1 = 1;
> +UPDATE t SET c2 = '5' WHERE c1 = 1;
> +UPDATE t SET c1 = '5' WHERE c1 = 1;
> +UPDATE t SET c4 = '8' WHERE c2 = '4';
> +UPDATE t SET c1 = '8' WHERE c2 = '4';
> +UPDATE t SET c2 = '8' WHERE c2 = '4';
> +UPDATE t SET c3 = '0' WHERE c4 = NULL;
> +UPDATE t SET c2 = '0' WHERE c4 = '0';
> +UPDATE t SET c2 = '2' WHERE c4 = '2';
> +Comparing tables master:test.t and slave:test.t
> +DELETE FROM t WHERE c1 = 7;
> +DELETE FROM t WHERE c1 = 8;
> +DELETE FROM t;
> +Comparing tables master:test.t and slave:test.t
> +DROP TABLE t;
> +#################################################################
> +# CASE 7: MyISAM - master, InnoDB - slave
> +#################################################################
> +DROP TABLE IF EXISTS t;
> +SET SQL_LOG_BIN=0;
> +****** TEST: One Composite Primary Key with holes (MyISAM -> InnoDB)
> +CREATE TABLE t (c1 int, c2 char(1), c3 char(1), c4 char(1), primary key(c1,c3))
> engine= MyISAM;;
> +CREATE TABLE t (c1 int, c2 char(1), c3 char(1), c4 char(1), primary key(c1,c3))
> engine= InnoDB;;
> +SET SQL_LOG_BIN=1;
> +INSERT INTO t VALUES (1, '1', '1', '1' );
> +INSERT INTO t VALUES (4, '4', '4', '4' );
> +INSERT INTO t VALUES (7, '7', '7', '7' );
> +INSERT INTO t VALUES (9, '9', '9', NULL );
> +INSERT INTO t VALUES (2, '1', '2', '2' );
> +INSERT INTO t VALUES (3, '1', '3', '2' );
> +UPDATE t SET c4 = '7';
> +UPDATE t SET c4 = '5' WHERE c1 = 1;
> +UPDATE t SET c2 = '5' WHERE c1 = 1;
> +UPDATE t SET c1 = '5' WHERE c1 = 1;
> +UPDATE t SET c4 = '8' WHERE c2 = '4';
> +UPDATE t SET c1 = '8' WHERE c2 = '4';
> +UPDATE t SET c2 = '8' WHERE c2 = '4';
> +UPDATE t SET c3 = '0' WHERE c4 = NULL;
> +UPDATE t SET c2 = '0' WHERE c4 = '0';
> +UPDATE t SET c2 = '2' WHERE c4 = '2';
> +Comparing tables master:test.t and slave:test.t
> +DELETE FROM t WHERE c1 = 7;
> +DELETE FROM t WHERE c1 = 8;
> +DELETE FROM t;
> +Comparing tables master:test.t and slave:test.t
> +DROP TABLE t;
> +SET SQL_LOG_BIN=0;
> +****** TEST: One Composite Unique key with holes (MyISAM -> InnoDB)
> +CREATE TABLE t (c1 int, c2 char(1), c3 char(1), c4 char(1), unique key(c1,c3))
> engine= MyISAM;;
> +CREATE TABLE t (c1 int, c2 char(1), c3 char(1), c4 char(1), unique key(c1,c3))
> engine= InnoDB;;
> +SET SQL_LOG_BIN=1;
> +INSERT INTO t VALUES (1, '1', '1', '1' );
> +INSERT INTO t VALUES (4, '4', '4', '4' );
> +INSERT INTO t VALUES (7, '7', '7', '7' );
> +INSERT INTO t VALUES (9, '9', '9', NULL );
> +INSERT INTO t VALUES (2, '1', '2', '2' );
> +INSERT INTO t VALUES (3, '1', '3', '2' );
> +UPDATE t SET c4 = '7';
> +UPDATE t SET c4 = '5' WHERE c1 = 1;
> +UPDATE t SET c2 = '5' WHERE c1 = 1;
> +UPDATE t SET c1 = '5' WHERE c1 = 1;
> +UPDATE t SET c4 = '8' WHERE c2 = '4';
> +UPDATE t SET c1 = '8' WHERE c2 = '4';
> +UPDATE t SET c2 = '8' WHERE c2 = '4';
> +UPDATE t SET c3 = '0' WHERE c4 = NULL;
> +UPDATE t SET c2 = '0' WHERE c4 = '0';
> +UPDATE t SET c2 = '2' WHERE c4 = '2';
> +Comparing tables master:test.t and slave:test.t
> +DELETE FROM t WHERE c1 = 7;
> +DELETE FROM t WHERE c1 = 8;
> +DELETE FROM t;
> +Comparing tables master:test.t and slave:test.t
> +DROP TABLE t;
> +SET SQL_LOG_BIN=0;
> +****** TEST: One Composite key with holes (MyISAM -> InnoDB)
> +CREATE TABLE t (c1 int, c2 char(1), c3 char(1), c4 char(1), key(c1,c3)) engine=
> MyISAM;;
> +CREATE TABLE t (c1 int, c2 char(1), c3 char(1), c4 char(1), key(c1,c3)) engine=
> InnoDB;;
> +SET SQL_LOG_BIN=1;
> +INSERT INTO t VALUES (1, '1', '1', '1' );
> +INSERT INTO t VALUES (4, '4', '4', '4' );
> +INSERT INTO t VALUES (7, '7', '7', '7' );
> +INSERT INTO t VALUES (9, '9', '9', NULL );
> +INSERT INTO t VALUES (2, '1', '2', '2' );
> +INSERT INTO t VALUES (3, '1', '3', '2' );
> +UPDATE t SET c4 = '7';
> +UPDATE t SET c4 = '5' WHERE c1 = 1;
> +UPDATE t SET c2 = '5' WHERE c1 = 1;
> +UPDATE t SET c1 = '5' WHERE c1 = 1;
> +UPDATE t SET c4 = '8' WHERE c2 = '4';
> +UPDATE t SET c1 = '8' WHERE c2 = '4';
> +UPDATE t SET c2 = '8' WHERE c2 = '4';
> +UPDATE t SET c3 = '0' WHERE c4 = NULL;
> +UPDATE t SET c2 = '0' WHERE c4 = '0';
> +UPDATE t SET c2 = '2' WHERE c4 = '2';
> +Comparing tables master:test.t and slave:test.t
> +DELETE FROM t WHERE c1 = 7;
> +DELETE FROM t WHERE c1 = 8;
> +DELETE FROM t;
> +Comparing tables master:test.t and slave:test.t
> +DROP TABLE t;
> +SET SQL_LOG_BIN=0;
> +****** TEST: One Composite Primary Key (MyISAM -> InnoDB)
> +CREATE TABLE t (c1 int, c2 char(1), c3 char(1), c4 char(1), primary key(c1,c2))
> engine= MyISAM;;
> +CREATE TABLE t (c1 int, c2 char(1), c3 char(1), c4 char(1), primary key(c1,c2))
> engine= InnoDB;;
> +SET SQL_LOG_BIN=1;
> +INSERT INTO t VALUES (1, '1', '1', '1' );
> +INSERT INTO t VALUES (4, '4', '4', '4' );
> +INSERT INTO t VALUES (7, '7', '7', '7' );
> +INSERT INTO t VALUES (9, '9', '9', NULL );
> +INSERT INTO t VALUES (2, '1', '2', '2' );
> +INSERT INTO t VALUES (3, '1', '3', '2' );
> +UPDATE t SET c4 = '7';
> +UPDATE t SET c4 = '5' WHERE c1 = 1;
> +UPDATE t SET c2 = '5' WHERE c1 = 1;
> +UPDATE t SET c1 = '5' WHERE c1 = 1;
> +UPDATE t SET c4 = '8' WHERE c2 = '4';
> +UPDATE t SET c1 = '8' WHERE c2 = '4';
> +UPDATE t SET c2 = '8' WHERE c2 = '4';
> +UPDATE t SET c3 = '0' WHERE c4 = NULL;
> +UPDATE t SET c2 = '0' WHERE c4 = '0';
> +UPDATE t SET c2 = '2' WHERE c4 = '2';
> +Comparing tables master:test.t and slave:test.t
> +DELETE FROM t WHERE c1 = 7;
> +DELETE FROM t WHERE c1 = 8;
> +DELETE FROM t;
> +Comparing tables master:test.t and slave:test.t
> +DROP TABLE t;
> +SET SQL_LOG_BIN=0;
> +****** TEST: One Primary key (MyISAM -> InnoDB)
> +CREATE TABLE t (c1 int, c2 char(1), c3 char(1), c4 char(1), primary key(c1)) engine=
> MyISAM;;
> +CREATE TABLE t (c1 int, c2 char(1), c3 char(1), c4 char(1), primary key(c1)) engine=
> InnoDB;;
> +SET SQL_LOG_BIN=1;
> +INSERT INTO t VALUES (1, '1', '1', '1' );
> +INSERT INTO t VALUES (4, '4', '4', '4' );
> +INSERT INTO t VALUES (7, '7', '7', '7' );
> +INSERT INTO t VALUES (9, '9', '9', NULL );
> +INSERT INTO t VALUES (2, '1', '2', '2' );
> +INSERT INTO t VALUES (3, '1', '3', '2' );
> +UPDATE t SET c4 = '7';
> +UPDATE t SET c4 = '5' WHERE c1 = 1;
> +UPDATE t SET c2 = '5' WHERE c1 = 1;
> +UPDATE t SET c1 = '5' WHERE c1 = 1;
> +UPDATE t SET c4 = '8' WHERE c2 = '4';
> +UPDATE t SET c1 = '8' WHERE c2 = '4';
> +UPDATE t SET c2 = '8' WHERE c2 = '4';
> +UPDATE t SET c3 = '0' WHERE c4 = NULL;
> +UPDATE t SET c2 = '0' WHERE c4 = '0';
> +UPDATE t SET c2 = '2' WHERE c4 = '2';
> +Comparing tables master:test.t and slave:test.t
> +DELETE FROM t WHERE c1 = 7;
> +DELETE FROM t WHERE c1 = 8;
> +DELETE FROM t;
> +Comparing tables master:test.t and slave:test.t
> +DROP TABLE t;
> +SET SQL_LOG_BIN=0;
> +****** TEST: One Composite Unique key (MyISAM -> InnoDB)
> +CREATE TABLE t (c1 int, c2 char(1), c3 char(1), c4 char(1), unique key(c1,c2))
> engine= MyISAM;;
> +CREATE TABLE t (c1 int, c2 char(1), c3 char(1), c4 char(1), unique key(c1,c2))
> engine= InnoDB;;
> +SET SQL_LOG_BIN=1;
> +INSERT INTO t VALUES (1, '1', '1', '1' );
> +INSERT INTO t VALUES (4, '4', '4', '4' );
> +INSERT INTO t VALUES (7, '7', '7', '7' );
> +INSERT INTO t VALUES (9, '9', '9', NULL );
> +INSERT INTO t VALUES (2, '1', '2', '2' );
> +INSERT INTO t VALUES (3, '1', '3', '2' );
> +UPDATE t SET c4 = '7';
> +UPDATE t SET c4 = '5' WHERE c1 = 1;
> +UPDATE t SET c2 = '5' WHERE c1 = 1;
> +UPDATE t SET c1 = '5' WHERE c1 = 1;
> +UPDATE t SET c4 = '8' WHERE c2 = '4';
> +UPDATE t SET c1 = '8' WHERE c2 = '4';
> +UPDATE t SET c2 = '8' WHERE c2 = '4';
> +UPDATE t SET c3 = '0' WHERE c4 = NULL;
> +UPDATE t SET c2 = '0' WHERE c4 = '0';
> +UPDATE t SET c2 = '2' WHERE c4 = '2';
> +Comparing tables master:test.t and slave:test.t
> +DELETE FROM t WHERE c1 = 7;
> +DELETE FROM t WHERE c1 = 8;
> +DELETE FROM t;
> +Comparing tables master:test.t and slave:test.t
> +DROP TABLE t;
> +SET SQL_LOG_BIN=0;
> +****** TEST: One Unique key (MyISAM -> InnoDB)
> +CREATE TABLE t (c1 int, c2 char(1), c3 char(1), c4 char(1), unique key(c1)) engine=
> MyISAM;;
> +CREATE TABLE t (c1 int, c2 char(1), c3 char(1), c4 char(1), unique key(c1)) engine=
> InnoDB;;
> +SET SQL_LOG_BIN=1;
> +INSERT INTO t VALUES (1, '1', '1', '1' );
> +INSERT INTO t VALUES (4, '4', '4', '4' );
> +INSERT INTO t VALUES (7, '7', '7', '7' );
> +INSERT INTO t VALUES (9, '9', '9', NULL );
> +INSERT INTO t VALUES (2, '1', '2', '2' );
> +INSERT INTO t VALUES (3, '1', '3', '2' );
> +UPDATE t SET c4 = '7';
> +UPDATE t SET c4 = '5' WHERE c1 = 1;
> +UPDATE t SET c2 = '5' WHERE c1 = 1;
> +UPDATE t SET c1 = '5' WHERE c1 = 1;
> +UPDATE t SET c4 = '8' WHERE c2 = '4';
> +UPDATE t SET c1 = '8' WHERE c2 = '4';
> +UPDATE t SET c2 = '8' WHERE c2 = '4';
> +UPDATE t SET c3 = '0' WHERE c4 = NULL;
> +UPDATE t SET c2 = '0' WHERE c4 = '0';
> +UPDATE t SET c2 = '2' WHERE c4 = '2';
> +Comparing tables master:test.t and slave:test.t
> +DELETE FROM t WHERE c1 = 7;
> +DELETE FROM t WHERE c1 = 8;
> +DELETE FROM t;
> +Comparing tables master:test.t and slave:test.t
> +DROP TABLE t;
> +SET SQL_LOG_BIN=0;
> +****** TEST: One Composite key (MyISAM -> InnoDB)
> +CREATE TABLE t (c1 int, c2 char(1), c3 char(1), c4 char(1), key(c1,c2)) engine=
> MyISAM;;
> +CREATE TABLE t (c1 int, c2 char(1), c3 char(1), c4 char(1), key(c1,c2)) engine=
> InnoDB;;
> +SET SQL_LOG_BIN=1;
> +INSERT INTO t VALUES (1, '1', '1', '1' );
> +INSERT INTO t VALUES (4, '4', '4', '4' );
> +INSERT INTO t VALUES (7, '7', '7', '7' );
> +INSERT INTO t VALUES (9, '9', '9', NULL );
> +INSERT INTO t VALUES (2, '1', '2', '2' );
> +INSERT INTO t VALUES (3, '1', '3', '2' );
> +UPDATE t SET c4 = '7';
> +UPDATE t SET c4 = '5' WHERE c1 = 1;
> +UPDATE t SET c2 = '5' WHERE c1 = 1;
> +UPDATE t SET c1 = '5' WHERE c1 = 1;
> +UPDATE t SET c4 = '8' WHERE c2 = '4';
> +UPDATE t SET c1 = '8' WHERE c2 = '4';
> +UPDATE t SET c2 = '8' WHERE c2 = '4';
> +UPDATE t SET c3 = '0' WHERE c4 = NULL;
> +UPDATE t SET c2 = '0' WHERE c4 = '0';
> +UPDATE t SET c2 = '2' WHERE c4 = '2';
> +Comparing tables master:test.t and slave:test.t
> +DELETE FROM t WHERE c1 = 7;
> +DELETE FROM t WHERE c1 = 8;
> +DELETE FROM t;
> +Comparing tables master:test.t and slave:test.t
> +DROP TABLE t;
> +SET SQL_LOG_BIN=0;
> +******* TEST: One key (MyISAM -> InnoDB)
> +CREATE TABLE t (c1 int, c2 char(1), c3 char(1), c4 char(1), key(c1)) engine=
> MyISAM;;
> +CREATE TABLE t (c1 int, c2 char(1), c3 char(1), c4 char(1), key(c1)) engine=
> InnoDB;;
> +SET SQL_LOG_BIN=1;
> +INSERT INTO t VALUES (1, '1', '1', '1' );
> +INSERT INTO t VALUES (4, '4', '4', '4' );
> +INSERT INTO t VALUES (7, '7', '7', '7' );
> +INSERT INTO t VALUES (9, '9', '9', NULL );
> +INSERT INTO t VALUES (2, '1', '2', '2' );
> +INSERT INTO t VALUES (3, '1', '3', '2' );
> +UPDATE t SET c4 = '7';
> +UPDATE t SET c4 = '5' WHERE c1 = 1;
> +UPDATE t SET c2 = '5' WHERE c1 = 1;
> +UPDATE t SET c1 = '5' WHERE c1 = 1;
> +UPDATE t SET c4 = '8' WHERE c2 = '4';
> +UPDATE t SET c1 = '8' WHERE c2 = '4';
> +UPDATE t SET c2 = '8' WHERE c2 = '4';
> +UPDATE t SET c3 = '0' WHERE c4 = NULL;
> +UPDATE t SET c2 = '0' WHERE c4 = '0';
> +UPDATE t SET c2 = '2' WHERE c4 = '2';
> +Comparing tables master:test.t and slave:test.t
> +DELETE FROM t WHERE c1 = 7;
> +DELETE FROM t WHERE c1 = 8;
> +DELETE FROM t;
> +Comparing tables master:test.t and slave:test.t
> +DROP TABLE t;
> +SET SQL_LOG_BIN=0;
> +******* TEST: No keys (MyISAM -> InnoDB)
> +CREATE TABLE t (c1 int, c2 char(1), c3 char(1), c4 char(1)) engine= MyISAM;;
> +CREATE TABLE t (c1 int, c2 char(1), c3 char(1), c4 char(1)) engine= InnoDB;;
> +SET SQL_LOG_BIN=1;
> +INSERT INTO t VALUES (1, '1', '1', '1' );
> +INSERT INTO t VALUES (4, '4', '4', '4' );
> +INSERT INTO t VALUES (7, '7', '7', '7' );
> +INSERT INTO t VALUES (9, '9', '9', NULL );
> +INSERT INTO t VALUES (2, '1', '2', '2' );
> +INSERT INTO t VALUES (3, '1', '3', '2' );
> +UPDATE t SET c4 = '7';
> +UPDATE t SET c4 = '5' WHERE c1 = 1;
> +UPDATE t SET c2 = '5' WHERE c1 = 1;
> +UPDATE t SET c1 = '5' WHERE c1 = 1;
> +UPDATE t SET c4 = '8' WHERE c2 = '4';
> +UPDATE t SET c1 = '8' WHERE c2 = '4';
> +UPDATE t SET c2 = '8' WHERE c2 = '4';
> +UPDATE t SET c3 = '0' WHERE c4 = NULL;
> +UPDATE t SET c2 = '0' WHERE c4 = '0';
> +UPDATE t SET c2 = '2' WHERE c4 = '2';
> +Comparing tables master:test.t and slave:test.t
> +DELETE FROM t WHERE c1 = 7;
> +DELETE FROM t WHERE c1 = 8;
> +DELETE FROM t;
> +Comparing tables master:test.t and slave:test.t
> +DROP TABLE t;
>
> === added file 'mysql-test/suite/rpl/r/rpl_row_record_find_myisam.result'
> --- a/mysql-test/suite/rpl/r/rpl_row_record_find_myisam.result 1970-01-01 00:00:00
> +0000
> +++ b/mysql-test/suite/rpl/r/rpl_row_record_find_myisam.result 2009-04-15 15:56:25
> +0000
> @@ -0,0 +1,288 @@
> +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 ( i1 int, c1 char(1), key ( i1 ));
> +INSERT IGNORE INTO t1 VALUES (1, 'a');
> +UPDATE t1 SET c1 = 'b' WHERE i1 = 1;
> +DROP TABLE t1;
> +CREATE TABLE table1_myisam ( `bit_key` bit, `int_key` int, key (`bit_key` ), key
> (`int_key` ));
> +INSERT IGNORE INTO table1_myisam VALUES ('1', '-2146992385');
> +UPDATE `table1_myisam` SET `bit_key` = 0 WHERE `bit_key` = 1;
> +DROP TABLE table1_myisam;
> +#################################################################
> +# CASE 1: MyISAM - master, MyISAM - slave
> +#################################################################
> +DROP TABLE IF EXISTS t;
> +SET SQL_LOG_BIN=0;
> +****** TEST: One Composite Primary Key with holes (MyISAM -> MyISAM)
> +CREATE TABLE t (c1 int, c2 char(1), c3 char(1), c4 char(1), primary key(c1,c3))
> engine= MyISAM;;
> +CREATE TABLE t (c1 int, c2 char(1), c3 char(1), c4 char(1), primary key(c1,c3))
> engine= MyISAM;;
> +SET SQL_LOG_BIN=1;
> +INSERT INTO t VALUES (1, '1', '1', '1' );
> +INSERT INTO t VALUES (4, '4', '4', '4' );
> +INSERT INTO t VALUES (7, '7', '7', '7' );
> +INSERT INTO t VALUES (9, '9', '9', NULL );
> +INSERT INTO t VALUES (2, '1', '2', '2' );
> +INSERT INTO t VALUES (3, '1', '3', '2' );
> +UPDATE t SET c4 = '7';
> +UPDATE t SET c4 = '5' WHERE c1 = 1;
> +UPDATE t SET c2 = '5' WHERE c1 = 1;
> +UPDATE t SET c1 = '5' WHERE c1 = 1;
> +UPDATE t SET c4 = '8' WHERE c2 = '4';
> +UPDATE t SET c1 = '8' WHERE c2 = '4';
> +UPDATE t SET c2 = '8' WHERE c2 = '4';
> +UPDATE t SET c3 = '0' WHERE c4 = NULL;
> +UPDATE t SET c2 = '0' WHERE c4 = '0';
> +UPDATE t SET c2 = '2' WHERE c4 = '2';
> +Comparing tables master:test.t and slave:test.t
> +DELETE FROM t WHERE c1 = 7;
> +DELETE FROM t WHERE c1 = 8;
> +DELETE FROM t;
> +Comparing tables master:test.t and slave:test.t
> +DROP TABLE t;
> +SET SQL_LOG_BIN=0;
> +****** TEST: One Composite Unique key with holes (MyISAM -> MyISAM)
> +CREATE TABLE t (c1 int, c2 char(1), c3 char(1), c4 char(1), unique key(c1,c3))
> engine= MyISAM;;
> +CREATE TABLE t (c1 int, c2 char(1), c3 char(1), c4 char(1), unique key(c1,c3))
> engine= MyISAM;;
> +SET SQL_LOG_BIN=1;
> +INSERT INTO t VALUES (1, '1', '1', '1' );
> +INSERT INTO t VALUES (4, '4', '4', '4' );
> +INSERT INTO t VALUES (7, '7', '7', '7' );
> +INSERT INTO t VALUES (9, '9', '9', NULL );
> +INSERT INTO t VALUES (2, '1', '2', '2' );
> +INSERT INTO t VALUES (3, '1', '3', '2' );
> +UPDATE t SET c4 = '7';
> +UPDATE t SET c4 = '5' WHERE c1 = 1;
> +UPDATE t SET c2 = '5' WHERE c1 = 1;
> +UPDATE t SET c1 = '5' WHERE c1 = 1;
> +UPDATE t SET c4 = '8' WHERE c2 = '4';
> +UPDATE t SET c1 = '8' WHERE c2 = '4';
> +UPDATE t SET c2 = '8' WHERE c2 = '4';
> +UPDATE t SET c3 = '0' WHERE c4 = NULL;
> +UPDATE t SET c2 = '0' WHERE c4 = '0';
> +UPDATE t SET c2 = '2' WHERE c4 = '2';
> +Comparing tables master:test.t and slave:test.t
> +DELETE FROM t WHERE c1 = 7;
> +DELETE FROM t WHERE c1 = 8;
> +DELETE FROM t;
> +Comparing tables master:test.t and slave:test.t
> +DROP TABLE t;
> +SET SQL_LOG_BIN=0;
> +****** TEST: One Composite key with holes (MyISAM -> MyISAM)
> +CREATE TABLE t (c1 int, c2 char(1), c3 char(1), c4 char(1), key(c1,c3)) engine=
> MyISAM;;
> +CREATE TABLE t (c1 int, c2 char(1), c3 char(1), c4 char(1), key(c1,c3)) engine=
> MyISAM;;
> +SET SQL_LOG_BIN=1;
> +INSERT INTO t VALUES (1, '1', '1', '1' );
> +INSERT INTO t VALUES (4, '4', '4', '4' );
> +INSERT INTO t VALUES (7, '7', '7', '7' );
> +INSERT INTO t VALUES (9, '9', '9', NULL );
> +INSERT INTO t VALUES (2, '1', '2', '2' );
> +INSERT INTO t VALUES (3, '1', '3', '2' );
> +UPDATE t SET c4 = '7';
> +UPDATE t SET c4 = '5' WHERE c1 = 1;
> +UPDATE t SET c2 = '5' WHERE c1 = 1;
> +UPDATE t SET c1 = '5' WHERE c1 = 1;
> +UPDATE t SET c4 = '8' WHERE c2 = '4';
> +UPDATE t SET c1 = '8' WHERE c2 = '4';
> +UPDATE t SET c2 = '8' WHERE c2 = '4';
> +UPDATE t SET c3 = '0' WHERE c4 = NULL;
> +UPDATE t SET c2 = '0' WHERE c4 = '0';
> +UPDATE t SET c2 = '2' WHERE c4 = '2';
> +Comparing tables master:test.t and slave:test.t
> +DELETE FROM t WHERE c1 = 7;
> +DELETE FROM t WHERE c1 = 8;
> +DELETE FROM t;
> +Comparing tables master:test.t and slave:test.t
> +DROP TABLE t;
> +SET SQL_LOG_BIN=0;
> +****** TEST: One Composite Primary Key (MyISAM -> MyISAM)
> +CREATE TABLE t (c1 int, c2 char(1), c3 char(1), c4 char(1), primary key(c1,c2))
> engine= MyISAM;;
> +CREATE TABLE t (c1 int, c2 char(1), c3 char(1), c4 char(1), primary key(c1,c2))
> engine= MyISAM;;
> +SET SQL_LOG_BIN=1;
> +INSERT INTO t VALUES (1, '1', '1', '1' );
> +INSERT INTO t VALUES (4, '4', '4', '4' );
> +INSERT INTO t VALUES (7, '7', '7', '7' );
> +INSERT INTO t VALUES (9, '9', '9', NULL );
> +INSERT INTO t VALUES (2, '1', '2', '2' );
> +INSERT INTO t VALUES (3, '1', '3', '2' );
> +UPDATE t SET c4 = '7';
> +UPDATE t SET c4 = '5' WHERE c1 = 1;
> +UPDATE t SET c2 = '5' WHERE c1 = 1;
> +UPDATE t SET c1 = '5' WHERE c1 = 1;
> +UPDATE t SET c4 = '8' WHERE c2 = '4';
> +UPDATE t SET c1 = '8' WHERE c2 = '4';
> +UPDATE t SET c2 = '8' WHERE c2 = '4';
> +UPDATE t SET c3 = '0' WHERE c4 = NULL;
> +UPDATE t SET c2 = '0' WHERE c4 = '0';
> +UPDATE t SET c2 = '2' WHERE c4 = '2';
> +Comparing tables master:test.t and slave:test.t
> +DELETE FROM t WHERE c1 = 7;
> +DELETE FROM t WHERE c1 = 8;
> +DELETE FROM t;
> +Comparing tables master:test.t and slave:test.t
> +DROP TABLE t;
> +SET SQL_LOG_BIN=0;
> +****** TEST: One Primary key (MyISAM -> MyISAM)
> +CREATE TABLE t (c1 int, c2 char(1), c3 char(1), c4 char(1), primary key(c1)) engine=
> MyISAM;;
> +CREATE TABLE t (c1 int, c2 char(1), c3 char(1), c4 char(1), primary key(c1)) engine=
> MyISAM;;
> +SET SQL_LOG_BIN=1;
> +INSERT INTO t VALUES (1, '1', '1', '1' );
> +INSERT INTO t VALUES (4, '4', '4', '4' );
> +INSERT INTO t VALUES (7, '7', '7', '7' );
> +INSERT INTO t VALUES (9, '9', '9', NULL );
> +INSERT INTO t VALUES (2, '1', '2', '2' );
> +INSERT INTO t VALUES (3, '1', '3', '2' );
> +UPDATE t SET c4 = '7';
> +UPDATE t SET c4 = '5' WHERE c1 = 1;
> +UPDATE t SET c2 = '5' WHERE c1 = 1;
> +UPDATE t SET c1 = '5' WHERE c1 = 1;
> +UPDATE t SET c4 = '8' WHERE c2 = '4';
> +UPDATE t SET c1 = '8' WHERE c2 = '4';
> +UPDATE t SET c2 = '8' WHERE c2 = '4';
> +UPDATE t SET c3 = '0' WHERE c4 = NULL;
> +UPDATE t SET c2 = '0' WHERE c4 = '0';
> +UPDATE t SET c2 = '2' WHERE c4 = '2';
> +Comparing tables master:test.t and slave:test.t
> +DELETE FROM t WHERE c1 = 7;
> +DELETE FROM t WHERE c1 = 8;
> +DELETE FROM t;
> +Comparing tables master:test.t and slave:test.t
> +DROP TABLE t;
> +SET SQL_LOG_BIN=0;
> +****** TEST: One Composite Unique key (MyISAM -> MyISAM)
> +CREATE TABLE t (c1 int, c2 char(1), c3 char(1), c4 char(1), unique key(c1,c2))
> engine= MyISAM;;
> +CREATE TABLE t (c1 int, c2 char(1), c3 char(1), c4 char(1), unique key(c1,c2))
> engine= MyISAM;;
> +SET SQL_LOG_BIN=1;
> +INSERT INTO t VALUES (1, '1', '1', '1' );
> +INSERT INTO t VALUES (4, '4', '4', '4' );
> +INSERT INTO t VALUES (7, '7', '7', '7' );
> +INSERT INTO t VALUES (9, '9', '9', NULL );
> +INSERT INTO t VALUES (2, '1', '2', '2' );
> +INSERT INTO t VALUES (3, '1', '3', '2' );
> +UPDATE t SET c4 = '7';
> +UPDATE t SET c4 = '5' WHERE c1 = 1;
> +UPDATE t SET c2 = '5' WHERE c1 = 1;
> +UPDATE t SET c1 = '5' WHERE c1 = 1;
> +UPDATE t SET c4 = '8' WHERE c2 = '4';
> +UPDATE t SET c1 = '8' WHERE c2 = '4';
> +UPDATE t SET c2 = '8' WHERE c2 = '4';
> +UPDATE t SET c3 = '0' WHERE c4 = NULL;
> +UPDATE t SET c2 = '0' WHERE c4 = '0';
> +UPDATE t SET c2 = '2' WHERE c4 = '2';
> +Comparing tables master:test.t and slave:test.t
> +DELETE FROM t WHERE c1 = 7;
> +DELETE FROM t WHERE c1 = 8;
> +DELETE FROM t;
> +Comparing tables master:test.t and slave:test.t
> +DROP TABLE t;
> +SET SQL_LOG_BIN=0;
> +****** TEST: One Unique key (MyISAM -> MyISAM)
> +CREATE TABLE t (c1 int, c2 char(1), c3 char(1), c4 char(1), unique key(c1)) engine=
> MyISAM;;
> +CREATE TABLE t (c1 int, c2 char(1), c3 char(1), c4 char(1), unique key(c1)) engine=
> MyISAM;;
> +SET SQL_LOG_BIN=1;
> +INSERT INTO t VALUES (1, '1', '1', '1' );
> +INSERT INTO t VALUES (4, '4', '4', '4' );
> +INSERT INTO t VALUES (7, '7', '7', '7' );
> +INSERT INTO t VALUES (9, '9', '9', NULL );
> +INSERT INTO t VALUES (2, '1', '2', '2' );
> +INSERT INTO t VALUES (3, '1', '3', '2' );
> +UPDATE t SET c4 = '7';
> +UPDATE t SET c4 = '5' WHERE c1 = 1;
> +UPDATE t SET c2 = '5' WHERE c1 = 1;
> +UPDATE t SET c1 = '5' WHERE c1 = 1;
> +UPDATE t SET c4 = '8' WHERE c2 = '4';
> +UPDATE t SET c1 = '8' WHERE c2 = '4';
> +UPDATE t SET c2 = '8' WHERE c2 = '4';
> +UPDATE t SET c3 = '0' WHERE c4 = NULL;
> +UPDATE t SET c2 = '0' WHERE c4 = '0';
> +UPDATE t SET c2 = '2' WHERE c4 = '2';
> +Comparing tables master:test.t and slave:test.t
> +DELETE FROM t WHERE c1 = 7;
> +DELETE FROM t WHERE c1 = 8;
> +DELETE FROM t;
> +Comparing tables master:test.t and slave:test.t
> +DROP TABLE t;
> +SET SQL_LOG_BIN=0;
> +****** TEST: One Composite key (MyISAM -> MyISAM)
> +CREATE TABLE t (c1 int, c2 char(1), c3 char(1), c4 char(1), key(c1,c2)) engine=
> MyISAM;;
> +CREATE TABLE t (c1 int, c2 char(1), c3 char(1), c4 char(1), key(c1,c2)) engine=
> MyISAM;;
> +SET SQL_LOG_BIN=1;
> +INSERT INTO t VALUES (1, '1', '1', '1' );
> +INSERT INTO t VALUES (4, '4', '4', '4' );
> +INSERT INTO t VALUES (7, '7', '7', '7' );
> +INSERT INTO t VALUES (9, '9', '9', NULL );
> +INSERT INTO t VALUES (2, '1', '2', '2' );
> +INSERT INTO t VALUES (3, '1', '3', '2' );
> +UPDATE t SET c4 = '7';
> +UPDATE t SET c4 = '5' WHERE c1 = 1;
> +UPDATE t SET c2 = '5' WHERE c1 = 1;
> +UPDATE t SET c1 = '5' WHERE c1 = 1;
> +UPDATE t SET c4 = '8' WHERE c2 = '4';
> +UPDATE t SET c1 = '8' WHERE c2 = '4';
> +UPDATE t SET c2 = '8' WHERE c2 = '4';
> +UPDATE t SET c3 = '0' WHERE c4 = NULL;
> +UPDATE t SET c2 = '0' WHERE c4 = '0';
> +UPDATE t SET c2 = '2' WHERE c4 = '2';
> +Comparing tables master:test.t and slave:test.t
> +DELETE FROM t WHERE c1 = 7;
> +DELETE FROM t WHERE c1 = 8;
> +DELETE FROM t;
> +Comparing tables master:test.t and slave:test.t
> +DROP TABLE t;
> +SET SQL_LOG_BIN=0;
> +******* TEST: One key (MyISAM -> MyISAM)
> +CREATE TABLE t (c1 int, c2 char(1), c3 char(1), c4 char(1), key(c1)) engine=
> MyISAM;;
> +CREATE TABLE t (c1 int, c2 char(1), c3 char(1), c4 char(1), key(c1)) engine=
> MyISAM;;
> +SET SQL_LOG_BIN=1;
> +INSERT INTO t VALUES (1, '1', '1', '1' );
> +INSERT INTO t VALUES (4, '4', '4', '4' );
> +INSERT INTO t VALUES (7, '7', '7', '7' );
> +INSERT INTO t VALUES (9, '9', '9', NULL );
> +INSERT INTO t VALUES (2, '1', '2', '2' );
> +INSERT INTO t VALUES (3, '1', '3', '2' );
> +UPDATE t SET c4 = '7';
> +UPDATE t SET c4 = '5' WHERE c1 = 1;
> +UPDATE t SET c2 = '5' WHERE c1 = 1;
> +UPDATE t SET c1 = '5' WHERE c1 = 1;
> +UPDATE t SET c4 = '8' WHERE c2 = '4';
> +UPDATE t SET c1 = '8' WHERE c2 = '4';
> +UPDATE t SET c2 = '8' WHERE c2 = '4';
> +UPDATE t SET c3 = '0' WHERE c4 = NULL;
> +UPDATE t SET c2 = '0' WHERE c4 = '0';
> +UPDATE t SET c2 = '2' WHERE c4 = '2';
> +Comparing tables master:test.t and slave:test.t
> +DELETE FROM t WHERE c1 = 7;
> +DELETE FROM t WHERE c1 = 8;
> +DELETE FROM t;
> +Comparing tables master:test.t and slave:test.t
> +DROP TABLE t;
> +SET SQL_LOG_BIN=0;
> +******* TEST: No keys (MyISAM -> MyISAM)
> +CREATE TABLE t (c1 int, c2 char(1), c3 char(1), c4 char(1)) engine= MyISAM;;
> +CREATE TABLE t (c1 int, c2 char(1), c3 char(1), c4 char(1)) engine= MyISAM;;
> +SET SQL_LOG_BIN=1;
> +INSERT INTO t VALUES (1, '1', '1', '1' );
> +INSERT INTO t VALUES (4, '4', '4', '4' );
> +INSERT INTO t VALUES (7, '7', '7', '7' );
> +INSERT INTO t VALUES (9, '9', '9', NULL );
> +INSERT INTO t VALUES (2, '1', '2', '2' );
> +INSERT INTO t VALUES (3, '1', '3', '2' );
> +UPDATE t SET c4 = '7';
> +UPDATE t SET c4 = '5' WHERE c1 = 1;
> +UPDATE t SET c2 = '5' WHERE c1 = 1;
> +UPDATE t SET c1 = '5' WHERE c1 = 1;
> +UPDATE t SET c4 = '8' WHERE c2 = '4';
> +UPDATE t SET c1 = '8' WHERE c2 = '4';
> +UPDATE t SET c2 = '8' WHERE c2 = '4';
> +UPDATE t SET c3 = '0' WHERE c4 = NULL;
> +UPDATE t SET c2 = '0' WHERE c4 = '0';
> +UPDATE t SET c2 = '2' WHERE c4 = '2';
> +Comparing tables master:test.t and slave:test.t
> +DELETE FROM t WHERE c1 = 7;
> +DELETE FROM t WHERE c1 = 8;
> +DELETE FROM t;
> +Comparing tables master:test.t and slave:test.t
> +DROP TABLE t;
>
> === added file 'mysql-test/suite/rpl/t/rpl_row_record_find_falcon.test'
> --- a/mysql-test/suite/rpl/t/rpl_row_record_find_falcon.test 1970-01-01 00:00:00
> +0000
> +++ b/mysql-test/suite/rpl/t/rpl_row_record_find_falcon.test 2009-04-15 15:56:25
> +0000
> @@ -0,0 +1,47 @@
> +#
> +# BUG#40045: Replication failure on RBR + no PK + UPDATE + integer key +
> +# char with no key
> +#
> +# BUG#40007: Replication failure with RBR + no PK + 2 indexed fields
> +#
> +# Test Description
> +# ================
> +#
> +# (see rpl_row_record_find_myisam.test)
> +#
> +
> +source include/master-slave.inc;
> +source include/have_binlog_format_row.inc;
> +connection master;
> +source include/have_falcon.inc;
> +connection slave;
> +source include/have_falcon.inc;
> +connection master;
> +
> +--echo #################################################################
> +--echo # CASE 2: Falcon - master, Falcon - slave
> +--echo #################################################################
> +
> +let $master_engine= Falcon;
> +let $slave_engine= Falcon;
> +
> +-- source extra/rpl_tests/rpl_row_record_find.test
> +
> +--echo #################################################################
> +--echo # CASE 3: Falcon - master, MyISAM - slave
> +--echo #################################################################
> +
> +let $master_engine= Falcon;
> +let $slave_engine= MyISAM;
> +
> +-- source extra/rpl_tests/rpl_row_record_find.test
> +
> +--echo #################################################################
> +--echo # CASE 4: MyISAM - master, Falcon - slave
> +--echo #################################################################
> +
> +let $master_engine= MyISAM;
> +let $slave_engine= Falcon;
> +
> +-- source extra/rpl_tests/rpl_row_record_find.test
> +
>
> === added file 'mysql-test/suite/rpl/t/rpl_row_record_find_innodb.test'
> --- a/mysql-test/suite/rpl/t/rpl_row_record_find_innodb.test 1970-01-01 00:00:00
> +0000
> +++ b/mysql-test/suite/rpl/t/rpl_row_record_find_innodb.test 2009-04-15 15:56:25
> +0000
> @@ -0,0 +1,46 @@
> +#
> +# BUG#40045: Replication failure on RBR + no PK + UPDATE + integer key +
> +# char with no key
> +#
> +# BUG#40007: Replication failure with RBR + no PK + 2 indexed fields
> +#
> +# Test Description
> +# ================
> +#
> +# (see rpl_row_record_find_myisam.test)
> +#
> +
> +source include/master-slave.inc;
> +source include/have_binlog_format_row.inc;
> +connection master;
> +source include/have_innodb.inc;
> +connection slave;
> +source include/have_innodb.inc;
> +connection master;
> +
> +--echo #################################################################
> +--echo # CASE 5: InnoDB - master, MyISAM - slave
> +--echo #################################################################
> +
> +let $master_engine= InnoDB;
> +let $slave_engine= MyISAM;
> +
> +-- source extra/rpl_tests/rpl_row_record_find.test
> +
> +--echo #################################################################
> +--echo # CASE 6: InnoDB - master, InnoDB - slave
> +--echo #################################################################
> +
> +let $master_engine= InnoDB;
> +let $slave_engine= InnoDB;
> +
> +-- source extra/rpl_tests/rpl_row_record_find.test
> +
> +--echo #################################################################
> +--echo # CASE 7: MyISAM - master, InnoDB - slave
> +--echo #################################################################
> +
> +let $master_engine= MyISAM;
> +let $slave_engine= InnoDB;
> +
> +-- source extra/rpl_tests/rpl_row_record_find.test
>
> === added file 'mysql-test/suite/rpl/t/rpl_row_record_find_myisam.test'
> --- a/mysql-test/suite/rpl/t/rpl_row_record_find_myisam.test 1970-01-01 00:00:00
> +0000
> +++ b/mysql-test/suite/rpl/t/rpl_row_record_find_myisam.test 2009-04-15 15:56:25
> +0000
> @@ -0,0 +1,78 @@
> +#
> +# BUG#40045: Replication failure on RBR + no PK + UPDATE + integer key + char
> +# with no key
> +#
> +# BUG#40007: Replication failure with RBR + no PK + 2 indexed fields
> +#
> +# TEST DESCRIPTION
> +# ================
> +#
> +# This test is structure in seven cases. In all of them, roughly the same
> +# update and delete operations are performed, but what changes are the keys
> +# in the table:
> +# no keys, one key, composite key (but only half is used in query),
> +# unique key, primary key
> +#
> +# The seven cases are distinct because the engine on both and master and
> +# slave varies:
> +#
> +# - On rpl_row_record_find_myisam.test (this) test file:
> +# CASE 1: MyISAM - master, MyISAM - slave
> +# test without HA_PARTIAL_COLUMN_READ engine on master and on slave
> +#
> +# - On rpl_row_record_find_falcon.test:
> +# CASE 2: Falcon - master, Falcon - slave
> +# test with HA_PARTIAL_COLUMN_READ engine on master and on slave
> +# CASE 3: Falcon - master, MyISAM - slave
> +# test with HA_PARTIAL_COLUMN_READ engine on master but not on slave
> +# CASE 4: MyISAM - master, Falcon - slave
> +# test without HA_PARTIAL_COLUMN_READ engine on master but with it on
> slave
> +# (Falcon)
> +#
> +# - On rpl_row_record_find_innodb.test:
> +# CASE 5: InnoDB - master, MyISAM - slave
> +# test with HA_PARTIAL_COLUMN_READ engine on master but not on slave
> +# (InnoDB)
> +# CASE 6: InnoDB - master, InnoDB - slave
> +# test with HA_PARTIAL_COLUMN_READ engine on master and on slave
> +# (InnoDB)
> +# CASE 7: MyISAM - master, InnoDB - slave
> +# test without HA_PARTIAL_COLUMN_READ engine on master but with it on
> slave
> +# (InnoDB)
> +#
> +# NOTE: In this file we also perform a sanity check by running the test
> +# cases to verify some of the BUGS.
> +
> +source include/master-slave.inc;
> +source include/have_binlog_format_row.inc;
> +connection master;
> +
> +### SANITY TESTS for BUG#40045 and BUG#40007
> +
> +# TEST CASE USED for verifying BUG#40045
> +CREATE TABLE t1 ( i1 int, c1 char(1), key ( i1 ));
> +INSERT IGNORE INTO t1 VALUES (1, 'a');
> +UPDATE t1 SET c1 = 'b' WHERE i1 = 1;
> +DROP TABLE t1;
> +sync_slave_with_master;
> +
> +# TEST CASE USED for verifying BUG#40007
> +connection master;
> +CREATE TABLE table1_myisam ( `bit_key` bit, `int_key` int, key (`bit_key` ), key
> (`int_key` ));
> +disable_warnings;
> +INSERT IGNORE INTO table1_myisam VALUES ('1', '-2146992385');
> +enable_warnings;
> +UPDATE `table1_myisam` SET `bit_key` = 0 WHERE `bit_key` = 1;
> +DROP TABLE table1_myisam;
> +sync_slave_with_master;
> +
> +connection master;
> +
> +--echo #################################################################
> +--echo # CASE 1: MyISAM - master, MyISAM - slave
> +--echo #################################################################
> +
> +let $master_engine= MyISAM;
> +let $slave_engine= MyISAM;
> +
> +-- source extra/rpl_tests/rpl_row_record_find.test
>
> === modified file 'sql/log_event.cc'
> --- a/sql/log_event.cc 2009-03-04 13:33:47 +0000
> +++ b/sql/log_event.cc 2009-04-15 15:56:25 +0000
> @@ -241,10 +241,12 @@ private:
> uint debug_not_change_ts_if_art_event= 1; // bug#29309 simulation
> #endif
>
> +
> /*
> pretty_print_str()
> */
>
> +
> #ifdef MYSQL_CLIENT
> static void pretty_print_str(IO_CACHE* cache, const char* str, int len)
> {
> @@ -8611,7 +8613,7 @@ void Write_rows_log_event::print(FILE *f
>
> Returns TRUE if different.
> */
> -static bool record_compare(TABLE *table)
> +static bool record_compare(TABLE *table, const MY_BITMAP *cols_in_readset)
> {
> /*
> Need to set the X bit and the filler bits in both records since
> @@ -8643,14 +8645,23 @@ static bool record_compare(TABLE *table)
> }
> }
>
> - if (table->s->blob_fields + table->s->varchar_fields == 0)
> + /*
> + We can compare the record straight away if:
> + i) there are no blob and varchar fields
> + ii) all columns were read or the slave SE provides partial reads
> + */
> + if ((table->s->blob_fields + table->s->varchar_fields == 0)
> &&
> + (bitmap_is_set_all(cols_in_readset) ||
> + (table->file->ha_table_flags() & HA_PARTIAL_COLUMN_READ)))
> {
> result= cmp_record(table,record[1]);
> goto record_compare_exit;
> }
>
> - /* Compare null bits */
> - if (memcmp(table->null_flags,
> + /* Compare null bits only if all fields were read or slave SE has partial reads
> */
> + if ((bitmap_is_set_all(cols_in_readset) ||
> + (table->file->ha_table_flags() & HA_PARTIAL_COLUMN_READ))
> &&
> + memcmp(table->null_flags,
> table->null_flags+table->s->rec_buff_length,
> table->s->null_bytes))
> {
> @@ -8661,10 +8672,14 @@ static bool record_compare(TABLE *table)
> /* Compare updated fields */
> for (Field **ptr=table->field ; *ptr ; ptr++)
> {
> - if ((*ptr)->cmp_binary_offset(table->s->rec_buff_length))
> - {
> - result= TRUE;
> - goto record_compare_exit;
> + /* compare field if it is set */
> + if (bitmap_is_set(cols_in_readset, (*ptr)->field_index))
> + {
> + if ((*ptr)->cmp_binary_offset(table->s->rec_buff_length))
> + {
> + result= TRUE;
> + goto record_compare_exit;
> + }
> }
> }
>
> @@ -8795,6 +8810,7 @@ int Rows_log_event::find_row(const Relay
>
> if (table->s->keys > 0)
> {
> +
> DBUG_PRINT("info",("locating record using primary key (index_read)"));
>
> /* We have a key: search the table using the index */
> @@ -8875,7 +8891,7 @@ int Rows_log_event::find_row(const Relay
> */
> DBUG_PRINT("info",("non-unique index, scanning it to find matching record"));
>
> - while (record_compare(table))
> + while (record_compare(table, &m_cols))
> {
> /*
> We need to set the null bytes to ensure that the filler bit
> @@ -8956,7 +8972,7 @@ int Rows_log_event::find_row(const Relay
> goto err;
> }
> }
> - while (restart_count < 2 && record_compare(table));
> + while (restart_count < 2 && record_compare(table, &m_cols));
>
> /*
> Note: above record_compare will take into accout all record fields
>
> === modified file 'sql/log_event_old.cc'
> --- a/sql/log_event_old.cc 2008-12-10 14:30:52 +0000
> +++ b/sql/log_event_old.cc 2009-04-15 15:56:25 +0000
> @@ -313,7 +313,7 @@ last_uniq_key(TABLE *table, uint keyno)
>
> Returns TRUE if different.
> */
> -static bool record_compare(TABLE *table)
> +static bool record_compare(TABLE *table, const MY_BITMAP *cols_in_readset)
> {
> /*
> Need to set the X bit and the filler bits in both records since
> @@ -342,16 +342,25 @@ static bool record_compare(TABLE *table)
> }
> }
>
> - if (table->s->blob_fields + table->s->varchar_fields == 0)
> + /*
> + We can compare the record straight away if:
> + i) there are no blob and varchar fields
> + ii) all columns were read or the slave SE provides partial reads
> + */
> + if ((table->s->blob_fields + table->s->varchar_fields == 0)
> &&
> + (bitmap_is_set_all(cols_in_readset) ||
> + (table->file->ha_table_flags() & HA_PARTIAL_COLUMN_READ)))
> {
> result= cmp_record(table,record[1]);
> goto record_compare_exit;
> }
>
> - /* Compare null bits */
> - if (memcmp(table->null_flags,
> - table->null_flags+table->s->rec_buff_length,
> - table->s->null_bytes))
> + /* Compare null bits only if all fields were read or slave SE has partial reads
> */
> + if ((bitmap_is_set_all(cols_in_readset) ||
> + (table->file->ha_table_flags() & HA_PARTIAL_COLUMN_READ))
> &&
> + memcmp(table->null_flags,
> + table->null_flags+table->s->rec_buff_length,
> + table->s->null_bytes))
> {
> result= TRUE; // Diff in NULL value
> goto record_compare_exit;
> @@ -360,10 +369,14 @@ static bool record_compare(TABLE *table)
> /* Compare updated fields */
> for (Field **ptr=table->field ; *ptr ; ptr++)
> {
> - if ((*ptr)->cmp_binary_offset(table->s->rec_buff_length))
> - {
> - result= TRUE;
> - goto record_compare_exit;
> + /* compare field if it is set */
> + if (bitmap_is_set(cols_in_readset, (*ptr)->field_index))
> + {
> + if ((*ptr)->cmp_binary_offset(table->s->rec_buff_length))
> + {
> + result= TRUE;
> + goto record_compare_exit;
> + }
> }
> }
>
> @@ -644,6 +657,7 @@ replace_record(THD *thd, TABLE *table,
>
> @param table Pointer to table to search
> @param key Pointer to key to use for search, if table has key
> + @param cols Bitmap denoting the columns read in the BI image.
>
> @pre <code>table->record[0]</code> shall contain the row to locate
> and <code>key</code> shall contain a key to use for searching, if
> @@ -659,7 +673,7 @@ replace_record(THD *thd, TABLE *table,
> <code>table->record[1]</code>, error code otherwise.
> */
>
> -static int find_and_fetch_row(TABLE *table, uchar *key)
> +static int find_and_fetch_row(TABLE *table, uchar *key, MY_BITMAP *cols)
> {
> DBUG_ENTER("find_and_fetch_row(TABLE *table, uchar *key, uchar *record)");
> DBUG_PRINT("enter", ("table: %p, key: %p record: %p",
> @@ -761,7 +775,7 @@ static int find_and_fetch_row(TABLE *tab
> DBUG_RETURN(0);
> }
>
> - while (record_compare(table))
> + while (record_compare(table, cols))
> {
> int error;
>
> @@ -837,7 +851,7 @@ static int find_and_fetch_row(TABLE *tab
> DBUG_RETURN(error);
> }
> }
> - while (restart_count < 2 && record_compare(table));
> + while (restart_count < 2 && record_compare(table, cols));
>
> /*
> Have to restart the scan to be able to fetch the next row.
> @@ -1060,7 +1074,7 @@ int Delete_rows_log_event_old::do_exec_r
> int error;
> DBUG_ASSERT(table != NULL);
>
> - if (!(error= ::find_and_fetch_row(table, m_key)))
> + if (!(error= ::find_and_fetch_row(table, m_key, &m_cols)))
> {
> /*
> Now we should have the right row to delete. We are using
> @@ -1168,7 +1182,7 @@ int Update_rows_log_event_old::do_exec_r
> {
> DBUG_ASSERT(table != NULL);
>
> - int error= ::find_and_fetch_row(table, m_key);
> + int error= ::find_and_fetch_row(table, m_key, &m_cols);
> if (error)
> return error;
>
> @@ -2387,7 +2401,7 @@ int Old_rows_log_event::find_row(const R
> */
> DBUG_PRINT("info",("non-unique index, scanning it to find matching record"));
>
> - while (record_compare(table))
> + while (record_compare(table, &m_cols))
> {
> /*
> We need to set the null bytes to ensure that the filler bit
> @@ -2463,7 +2477,7 @@ int Old_rows_log_event::find_row(const R
> DBUG_RETURN(error);
> }
> }
> - while (restart_count < 2 && record_compare(table));
> + while (restart_count < 2 && record_compare(table, &m_cols));
>
> /*
> Note: above record_compare will take into accout all record fields
>
> === modified file 'sql/sql_update.cc'
> --- a/sql/sql_update.cc 2009-02-16 21:18:45 +0000
> +++ b/sql/sql_update.cc 2009-04-15 15:56:25 +0000
> @@ -338,6 +338,7 @@ int mysql_update(THD *thd,
> /* Update the table->file->stats.records number */
> table->file->info(HA_STATUS_VARIABLE | HA_STATUS_NO_LOCK);
>
> + table->mark_columns_needed_for_update();
> select= make_select(table, 0, 0, conds, 0, &error);
> if (error || !limit ||
> (select && select->check_quick(thd, safe_update, limit)))
> @@ -368,7 +369,6 @@ int mysql_update(THD *thd,
> }
> init_ftfuncs(thd, select_lex, 1);
>
> - table->mark_columns_needed_for_update();
>
> /* Check if we are modifying a key that we are used to search with */
>
>
> ------------------------------------------------------------------------
>
> This body part will be downloaded on demand.