mariadb/mysql-test/suite/rpl/t/rpl_row_merge_engine.test
Venkatesh Duggirala 29cc2c2883 BUG#20574550 MAIN.MERGE TEST CASE FAILS IF BINLOG_FORMAT=ROW
The main.merge test case was failing when tested using row based
binlog format.

While analyzing the issue it was found the following issues:

a) The server is calling binlog related code even when a statement will
   not be binlogged;
b) The child table list was not present into table structure by the time
   to generate the create table statement;
c) The tables in the child table list will not be opened yet when
   generating table create info using row based replication;
d) CREATE TABLE LIKE TEMP_TABLE does not preserve original table storage
   engine when using row based replication;

This patch addressed all above issues.

@ sql/sql_class.h

Added a function to determine if the binary log is disabled to
  the current session. This is related with issue (a) above.

@ sql/sql_table.cc

Added code to skip binary logging related code if the statement
  will not be binlogged. This is related with issue (a) above.

Added code to add the children to the query list of the table that
  will have its CREATE TABLE generated. This is related with issue (b)
  above.

Added code to force the storage engine to be generated into the
  CREATE TABLE. This is related with issue (d) above.

@ storage/myisammrg/ha_myisammrg.cc

Added a test to skip a table getting info about a child table if the
  child table is not opened. This is related to issue (c) above.
2016-02-26 09:01:49 +05:30

52 lines
1.4 KiB
Text

#
# BUG#47103
#
# This test case checks whether the slave crashes or not when there is
# a merge table in use.
#
# Description
# ===========
#
# The test case creates two regular MyISAM tables on the master and
# one MERGE table. Then it populates the MyISAM tables, updates and
# deletes their contents through the merge table. Finally, the slave
# is synchronized with the master and (after the fix) it won't crash.
#
--source include/master-slave.inc
--source include/have_binlog_format_row.inc
--connection master
CREATE TABLE t1 (a int) ENGINE=MyISAM;
CREATE TABLE t2 (a int) ENGINE=MyISAM;
INSERT INTO t1 VALUES (1), (2), (3);
INSERT INTO t2 VALUES (4), (5), (6);
# Changed a little to check also an issue reported on BUG#20574550
CREATE TEMPORARY TABLE IF NOT EXISTS tt1_merge LIKE t1;
ALTER TABLE tt1_merge ENGINE=MERGE UNION (t2, t1);
CREATE TABLE t1_merge LIKE tt1_merge;
--sync_slave_with_master
--let diff_tables=master:test.t1, slave:test.t1
--source include/diff_tables.inc
--let diff_tables=master:test.t2, slave:test.t2
--source include/diff_tables.inc
--connection master
UPDATE t1_merge SET a=10 WHERE a=1;
DELETE FROM t1_merge WHERE a=10;
--sync_slave_with_master
--connection master
--let diff_tables=master:test.t1, slave:test.t1
--source include/diff_tables.inc
--let diff_tables=master:test.t2, slave:test.t2
--source include/diff_tables.inc
DROP TABLE t1_merge, t1, t2;
--sync_slave_with_master
--source include/rpl_end.inc