# WL#5096 # # Description # =========== # # This test case covers Requirements for replication using different # combinations of indexes and blob fields. # # It acts as a complement for rpl_row_img_sanity tests as it checks # that in a chained replication scenario, replication does not break. # # Usage # ===== # # Before including this file the following variables should be set: # * $server_1_engine # * $server_2_engine # * $server_3_engine # # Example: # # -- let $server_1_engine= Falcon # -- let $server_2_engine= MyISAM # -- let $server_3_engine= InnoDB # # -- source extra/rpl_tests/rpl_row_img_blobs.test # -- connection server_1 -- let $diff_table=test.t let $i= 7; while($i) { -- connection server_1 SET SQL_LOG_BIN=0; -- connection server_2 SET SQL_LOG_BIN=0; -- connection server_3 SET SQL_LOG_BIN=0; # # The comments below (on create table) must be read with the SQL # instructions issued later in mind. Declaring a table obviously is # not enough to assert anything. # # Also, the tests in this file make more sense when performed with # binlog_row_image configured as NOBLOB. # if ($i == 1) { -- echo ### Asserts that declaring a blob as part of a primary key does not break replication -- connection server_1 --eval CREATE TABLE t (c1 int, c2 blob, c3 int, primary key(c2(512))) engine= $server_1_engine; -- connection server_2 --eval CREATE TABLE t (c1 int, c2 blob, c3 int, primary key(c2(512))) engine= $server_2_engine; -- connection server_3 --eval CREATE TABLE t (c1 int, c2 blob, c3 int, primary key(c2(512))) engine= $server_3_engine; } if ($i == 2) { -- echo ### Asserts that declaring a blob as part of a unique (not null) key does not break replication -- connection server_1 --eval CREATE TABLE t (c1 int, c2 blob NOT NULL, c3 int, unique key(c2(512))) engine= $server_1_engine; -- connection server_2 --eval CREATE TABLE t (c1 int, c2 blob NOT NULL, c3 int, unique key(c2(512))) engine= $server_2_engine; -- connection server_3 --eval CREATE TABLE t (c1 int, c2 blob NOT NULL, c3 int, unique key(c2(512))) engine= $server_3_engine; } if ($i == 3) { -- echo ### Asserts that declaring a blob in a key does not break replication -- connection server_1 --eval CREATE TABLE t (c1 int, c2 blob, c3 int, key(c2(512))) engine= $server_1_engine; -- connection server_2 --eval CREATE TABLE t (c1 int, c2 blob, c3 int, key(c2(512))) engine= $server_2_engine; -- connection server_3 --eval CREATE TABLE t (c1 int, c2 blob, c3 int, key(c2(512))) engine= $server_3_engine; } if ($i == 4) { -- echo ### Asserts that updates without blobs in the BI (PK exists int the table) -- echo ### will not break replication -- connection server_1 --eval CREATE TABLE t (c1 int, c2 blob, c3 int, primary key(c1)) engine= $server_1_engine; -- connection server_2 --eval CREATE TABLE t (c1 int, c2 blob, c3 int, primary key(c1)) engine= $server_2_engine; -- connection server_3 --eval CREATE TABLE t (c1 int, c2 blob, c3 int, primary key(c1)) engine= $server_3_engine; } if ($i == 5) { -- echo ### Asserts that updates without blobs in the BI (UK NOT NULL exists in the table) -- echo ### will not break replication -- connection server_1 --eval CREATE TABLE t (c1 int NOT NULL, c2 blob NOT NULL, c3 int, unique key(c1)) engine= $server_1_engine; -- connection server_2 --eval CREATE TABLE t (c1 int NOT NULL, c2 blob NOT NULL, c3 int, unique key(c1)) engine= $server_2_engine; -- connection server_3 --eval CREATE TABLE t (c1 int NOT NULL, c2 blob NOT NULL, c3 int, unique key(c1)) engine= $server_3_engine; } if ($i == 6) { -- echo ### Asserts that updates without blobs in the AI (they are not updated) -- echo ### will not break replication (check even if there is a key in the table) -- connection server_1 --eval CREATE TABLE t (c1 int, c2 blob, c3 int, key(c1)) engine= $server_1_engine; -- connection server_2 --eval CREATE TABLE t (c1 int, c2 blob, c3 int, key(c1)) engine= $server_2_engine; -- connection server_3 --eval CREATE TABLE t (c1 int, c2 blob, c3 int, key(c1)) engine= $server_3_engine; } if ($i == 7) { -- echo ### Asserts that updates without blobs in the AI (they are not updated) -- echo ### will not break replication (check when there is no key in the table) -- connection server_1 --eval CREATE TABLE t (c1 int, c2 blob, c3 int) engine= $server_1_engine; -- connection server_2 --eval CREATE TABLE t (c1 int, c2 blob, c3 int) engine= $server_2_engine; -- connection server_3 --eval CREATE TABLE t (c1 int, c2 blob, c3 int) engine= $server_3_engine; } -- connection server_1 SET SQL_LOG_BIN=1; -- connection server_2 SET SQL_LOG_BIN=1; -- connection server_3 SET SQL_LOG_BIN=1; -- connection server_1 -- let $blob1= "a" -- let $blob2= "b" -- let $blob3= "c" -- eval INSERT INTO t VALUES (1, $blob1, 10) -- eval INSERT INTO t VALUES (2, $blob2, 20) -- eval INSERT INTO t VALUES (3, $blob3, 30) -- source include/rpl_sync.inc -- connection server_1 -- eval UPDATE t SET c1=10 WHERE c2=$blob1 -- eval UPDATE t SET c1=20 WHERE c1=2 -- eval UPDATE t SET c1=30 WHERE c3=30 -- eval UPDATE t SET c3=40 WHERE c1=30 -- source include/rpl_sync.inc -- let $diff_tables= server_1:$diff_table, server_2:$diff_table, server_3:$diff_table -- source include/diff_tables.inc -- connection server_1 -- eval DELETE FROM t WHERE c2=$blob1 -- eval DELETE FROM t WHERE c1=20 -- eval DELETE FROM t -- source include/rpl_sync.inc -- let $diff_tables= server_1:$diff_table, server_2:$diff_table, server_3:$diff_table -- source include/diff_tables.inc -- connection server_1 DROP TABLE t; -- source include/rpl_sync.inc dec $i; }