List:Commits« Previous MessageNext Message »
From:Alfranio Correia Date:April 15 2009 8:44pm
Subject:Re: bzr commit into mysql-6.0-rpl branch (luis.soares:2831) Bug#40045
View as plain text  
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.

Thread
bzr commit into mysql-6.0-rpl branch (luis.soares:2831) Bug#40045Luis Soares15 Apr
  • Re: bzr commit into mysql-6.0-rpl branch (luis.soares:2831) Bug#40045Alfranio Correia15 Apr