344 lines
9.8 KiB
Plaintext
344 lines
9.8 KiB
Plaintext
-- source include/not_group_replication_plugin.inc
|
|
-- source include/have_binlog_format_row.inc
|
|
-- source include/have_debug.inc
|
|
-- source include/master-slave.inc
|
|
|
|
#
|
|
# WL#5597 tests
|
|
#
|
|
# These tests check whether the correct algorithm for searching the
|
|
# rows was chosen, depending on the setting of
|
|
# @@global.slave_rows_search_algorithms and the table definition.
|
|
#
|
|
# We test all combinations, but leave out the offending ones:
|
|
# - @@global.slave_rows_search_algorithms= ''
|
|
# - @@global.slave_rows_search_algorithms= 'INDEX_SCAN'
|
|
#
|
|
# We do not allow setting only INDEX_SCAN or the empty value.
|
|
#
|
|
|
|
-- connection master
|
|
|
|
CREATE TABLE t1 (c1 INT);
|
|
CREATE TABLE t2 (c1 INT PRIMARY KEY);
|
|
CREATE TABLE t3 (c1 INT UNIQUE KEY NOT NULL);
|
|
CREATE TABLE t4 (c1 INT KEY);
|
|
|
|
INSERT INTO t1 VALUES (1);
|
|
INSERT INTO t2 VALUES (1);
|
|
INSERT INTO t3 VALUES (1);
|
|
INSERT INTO t4 VALUES (1);
|
|
|
|
--source include/sync_slave_sql_with_master.inc
|
|
SET @saved_slave_rows_search_algorithms= @@global.slave_rows_search_algorithms;
|
|
|
|
###################### TABLE_SCAN assertions
|
|
|
|
-- connection slave
|
|
SET @@global.slave_rows_search_algorithms= 'TABLE_SCAN';
|
|
-- connection master
|
|
|
|
UPDATE t1 SET c1= 2;
|
|
-- let $expected_alg= 'TABLE_SCAN'
|
|
-- source include/rpl_hash_scan_assertion.inc
|
|
|
|
UPDATE t2 SET c1= 2;
|
|
-- let $expected_alg= 'TABLE_SCAN'
|
|
-- source include/rpl_hash_scan_assertion.inc
|
|
|
|
UPDATE t3 SET c1= 2;
|
|
-- let $expected_alg= 'TABLE_SCAN'
|
|
-- source include/rpl_hash_scan_assertion.inc
|
|
|
|
UPDATE t4 SET c1= 2;
|
|
-- let $expected_alg= 'TABLE_SCAN'
|
|
-- source include/rpl_hash_scan_assertion.inc
|
|
|
|
###################### TABLE_SCAN,INDEX_SCAN
|
|
|
|
-- connection slave
|
|
SET @@global.slave_rows_search_algorithms= 'TABLE_SCAN,INDEX_SCAN';
|
|
-- connection master
|
|
|
|
UPDATE t1 SET c1= 3;
|
|
-- let $expected_alg= 'TABLE_SCAN'
|
|
-- source include/rpl_hash_scan_assertion.inc
|
|
|
|
UPDATE t2 SET c1= 3;
|
|
-- let $expected_alg= 'INDEX_SCAN'
|
|
-- source include/rpl_hash_scan_assertion.inc
|
|
|
|
UPDATE t3 SET c1= 3;
|
|
-- let $expected_alg= 'INDEX_SCAN'
|
|
-- source include/rpl_hash_scan_assertion.inc
|
|
|
|
UPDATE t4 SET c1= 3;
|
|
-- let $expected_alg= 'INDEX_SCAN'
|
|
-- source include/rpl_hash_scan_assertion.inc
|
|
|
|
###################### TABLE_SCAN,HASH_SCAN
|
|
|
|
-- connection slave
|
|
SET @@global.slave_rows_search_algorithms= 'TABLE_SCAN,HASH_SCAN';
|
|
-- connection master
|
|
|
|
UPDATE t1 SET c1= 4;
|
|
-- let $expected_alg= 'HASH_SCAN'
|
|
-- source include/rpl_hash_scan_assertion.inc
|
|
|
|
UPDATE t2 SET c1= 4;
|
|
-- let $expected_alg= 'HASH_SCAN'
|
|
-- source include/rpl_hash_scan_assertion.inc
|
|
|
|
UPDATE t3 SET c1= 4;
|
|
-- let $expected_alg= 'HASH_SCAN'
|
|
-- source include/rpl_hash_scan_assertion.inc
|
|
|
|
UPDATE t4 SET c1= 4;
|
|
-- let $expected_alg= 'HASH_SCAN'
|
|
-- source include/rpl_hash_scan_assertion.inc
|
|
|
|
###################### HASH_SCAN
|
|
|
|
-- connection slave
|
|
SET @@global.slave_rows_search_algorithms= 'HASH_SCAN';
|
|
-- connection master
|
|
|
|
UPDATE t1 SET c1= 5;
|
|
-- let $expected_alg= 'HASH_SCAN'
|
|
-- source include/rpl_hash_scan_assertion.inc
|
|
|
|
UPDATE t2 SET c1= 5;
|
|
-- let $expected_alg= 'HASH_SCAN'
|
|
-- source include/rpl_hash_scan_assertion.inc
|
|
|
|
UPDATE t3 SET c1= 5;
|
|
-- let $expected_alg= 'HASH_SCAN'
|
|
-- source include/rpl_hash_scan_assertion.inc
|
|
|
|
UPDATE t4 SET c1= 5;
|
|
-- let $expected_alg= 'HASH_SCAN'
|
|
-- source include/rpl_hash_scan_assertion.inc
|
|
|
|
###################### HASH_SCAN,INDEX_SCAN
|
|
|
|
-- connection slave
|
|
SET @@global.slave_rows_search_algorithms= 'HASH_SCAN,INDEX_SCAN';
|
|
-- connection master
|
|
|
|
UPDATE t1 SET c1= 6;
|
|
-- let $expected_alg= 'HASH_SCAN'
|
|
-- source include/rpl_hash_scan_assertion.inc
|
|
|
|
UPDATE t2 SET c1= 6;
|
|
-- let $expected_alg= 'INDEX_SCAN'
|
|
-- source include/rpl_hash_scan_assertion.inc
|
|
|
|
UPDATE t3 SET c1= 6;
|
|
-- let $expected_alg= 'INDEX_SCAN'
|
|
-- source include/rpl_hash_scan_assertion.inc
|
|
|
|
UPDATE t4 SET c1= 6;
|
|
-- let $expected_alg= 'INDEX_SCAN'
|
|
-- source include/rpl_hash_scan_assertion.inc
|
|
|
|
###################### HASH_SCAN,INDEX_SCAN,TABLE_SCAN
|
|
|
|
-- connection slave
|
|
SET @@global.slave_rows_search_algorithms= 'HASH_SCAN,INDEX_SCAN,TABLE_SCAN';
|
|
-- connection master
|
|
|
|
UPDATE t1 SET c1= 7;
|
|
-- let $expected_alg= 'HASH_SCAN'
|
|
-- source include/rpl_hash_scan_assertion.inc
|
|
|
|
UPDATE t2 SET c1= 7;
|
|
-- let $expected_alg= 'INDEX_SCAN'
|
|
-- source include/rpl_hash_scan_assertion.inc
|
|
|
|
UPDATE t3 SET c1= 7;
|
|
-- let $expected_alg= 'INDEX_SCAN'
|
|
-- source include/rpl_hash_scan_assertion.inc
|
|
|
|
UPDATE t4 SET c1= 7;
|
|
-- let $expected_alg= 'INDEX_SCAN'
|
|
-- source include/rpl_hash_scan_assertion.inc
|
|
|
|
# Begin of Test cases for Bug#18860225
|
|
# HASH_SCAN SEEMS BROKEN: CAN'T FIND RECORD IN 'T1' ERROR_CODE: 1032
|
|
# Test Case 1: Key type is <Int>
|
|
--connection slave
|
|
SET @@global.slave_rows_search_algorithms= 'HASH_SCAN';
|
|
--connection master
|
|
CREATE TABLE t5(c1 INT, c2 INT, KEY(c2));
|
|
INSERT INTO t5 VALUES (1,1),(2,2),(3,1),(4,NULL),(5,2),(6,3);
|
|
DELETE FROM t5 ORDER BY c1;
|
|
DROP TABLE t5;
|
|
--source include/sync_slave_sql_with_master.inc
|
|
|
|
# Test Case 2: Key type is <BigInt>
|
|
--connection master
|
|
CREATE TABLE t5(c1 BIGINT, c2 BIGINT, KEY(c2));
|
|
INSERT INTO t5 VALUES (1,1),(2,2),(3,1),(4,NULL),(5,2),(6,3);
|
|
DELETE FROM t5 ORDER BY c1;
|
|
DROP TABLE t5;
|
|
--source include/sync_slave_sql_with_master.inc
|
|
|
|
# Test Case 3: Key type is <Varchar>
|
|
--connection master
|
|
CREATE TABLE t5(c1 INT, c2 VARCHAR(20), KEY(c2));
|
|
INSERT INTO t5 VALUES (1,"value1"),(2,"value2"),(3,"value1"),(4,NULL),(5,"value2"),(6,"value3");
|
|
DELETE FROM t5 ORDER BY c1;
|
|
DROP TABLE t5;
|
|
--source include/sync_slave_sql_with_master.inc
|
|
|
|
# Test Case 4: Key is composite key and type is <Int,Varchar>
|
|
# and Varchar key having different length values
|
|
--connection master
|
|
CREATE TABLE t5(c1 INT, c2 INT, c3 VARCHAR(20), KEY(c2,c3));
|
|
INSERT INTO t5 VALUES (1,1,"ab"),(2,2,"cde"),(3,1,"12345"),(4,4,"random"),(5,NULL,NULL),(6,5,NULL),(7,NULL,"lmnopqr");
|
|
DELETE FROM t5 ORDER BY c1;
|
|
DROP TABLE t5;
|
|
--source include/sync_slave_sql_with_master.inc
|
|
# End of Test cases for Bug#18860225
|
|
|
|
# Test cases for BUG#26137159
|
|
# Verify that update and delete operations can be safely replicated when the
|
|
# partition function does not include the key used in the index
|
|
|
|
SET @@global.slave_rows_search_algorithms= 'INDEX_SCAN,HASH_SCAN';
|
|
|
|
call mtr.add_suppression("Could not execute Delete_rows event on table test.t6");
|
|
call mtr.add_suppression("Could not execute Update_rows event on table test.t6");
|
|
call mtr.add_suppression("Can't find record in 't6'");
|
|
# when mts is enabled
|
|
call mtr.add_suppression("The slave coordinator and worker threads are stopped");
|
|
|
|
--let $i= 1
|
|
|
|
while ($i<3)
|
|
{
|
|
# Check that the slave can delete/update a value that is not the index key
|
|
--source include/rpl_connection_master.inc
|
|
CREATE TABLE t6(num INT, year INT, KEY year (year))
|
|
PARTITION BY HASH(num) PARTITIONS 5;
|
|
INSERT INTO t6 VALUES(6, 1977);
|
|
INSERT INTO t6 VALUES(1, 1983);
|
|
INSERT INTO t6 VALUES(9, 1977);
|
|
if ($i==1)
|
|
{
|
|
DELETE FROM t6 WHERE num= 9;
|
|
}
|
|
if ($i==2)
|
|
{
|
|
UPDATE t6 SET num= 10 WHERE num= 9;
|
|
}
|
|
--source include/sync_slave_sql_with_master.inc
|
|
--source include/rpl_connection_master.inc
|
|
--let $diff_tables= master:t6, slave:t6
|
|
--source include/diff_tables.inc
|
|
DROP TABLE t6;
|
|
--source include/sync_slave_sql_with_master.inc
|
|
|
|
# Check that the slave can delete/update a repeated value that is not the
|
|
# index key
|
|
--source include/rpl_connection_master.inc
|
|
CREATE TABLE t6(num INT, year INT, KEY year (year))
|
|
PARTITION BY HASH(num) PARTITIONS 5;
|
|
INSERT INTO t6 VALUES(6, 1977);
|
|
INSERT INTO t6 VALUES(1, 1983);
|
|
INSERT INTO t6 VALUES(9, 1977);
|
|
INSERT INTO t6 VALUES(9, 1977);
|
|
INSERT INTO t6 VALUES(9, 1987);
|
|
INSERT INTO t6 VALUES(9, 9);
|
|
INSERT INTO t6 VALUES(9, 1555555500);
|
|
if ($i==1)
|
|
{
|
|
DELETE FROM t6 WHERE num= 9;
|
|
}
|
|
if ($i==2)
|
|
{
|
|
UPDATE t6 SET num= 10 WHERE num= 9;
|
|
}
|
|
--source include/sync_slave_sql_with_master.inc
|
|
--source include/rpl_connection_master.inc
|
|
--let $diff_tables= master:t6, slave:t6
|
|
--source include/diff_tables.inc
|
|
DROP TABLE t6;
|
|
--source include/sync_slave_sql_with_master.inc
|
|
|
|
# Check that the slave can delete/update a repeated value that is not the
|
|
# index key when using another column for key and a more complex partition
|
|
# function
|
|
--source include/rpl_connection_master.inc
|
|
CREATE TABLE t6(num INT, year INT, num_2 INT, KEY year (year))
|
|
PARTITION BY HASH(num_2-num) PARTITIONS 5;
|
|
INSERT INTO t6 VALUES(6, 1977, 1);
|
|
INSERT INTO t6 VALUES(1, 1983, 2);
|
|
INSERT INTO t6 VALUES(9, 1977, 1);
|
|
INSERT INTO t6 VALUES(9, 1983, 1);
|
|
INSERT INTO t6 VALUES(9, 1977, 3);
|
|
if ($i==1)
|
|
{
|
|
DELETE FROM t6 WHERE num_2= 1;
|
|
}
|
|
if ($i==2)
|
|
{
|
|
UPDATE t6 SET num= 10 WHERE num_2= 1;
|
|
}
|
|
--source include/sync_slave_sql_with_master.inc
|
|
--source include/rpl_connection_master.inc
|
|
--let $diff_tables= master:t6, slave:t6
|
|
--source include/diff_tables.inc
|
|
DROP TABLE t6;
|
|
--source include/sync_slave_sql_with_master.inc
|
|
|
|
# Check that the slave will error if trying to delete a non-existing value
|
|
--source include/stop_slave_sql.inc
|
|
--source include/rpl_connection_master.inc
|
|
CREATE TABLE t6(num INT, year INT, KEY year (year))
|
|
PARTITION BY HASH(num) PARTITIONS 5;
|
|
INSERT INTO t6 VALUES(6, 1977);
|
|
INSERT INTO t6 VALUES(1, 1983);
|
|
INSERT INTO t6 VALUES(9, 1977);
|
|
SET SQL_LOG_BIN= 0;
|
|
INSERT INTO t6 VALUES(10, 1977);
|
|
SET SQL_LOG_BIN= 1;
|
|
if ($i==1)
|
|
{
|
|
DELETE FROM t6 WHERE num= 10;
|
|
}
|
|
if ($i==2)
|
|
{
|
|
UPDATE t6 SET num= 9 WHERE num= 10;
|
|
}
|
|
|
|
--source include/rpl_connection_slave.inc
|
|
START SLAVE SQL_THREAD;
|
|
--let $slave_sql_errno= convert_error(ER_KEY_NOT_FOUND)
|
|
--source include/wait_for_slave_sql_error.inc
|
|
|
|
# update the slave to clear the error
|
|
--source include/stop_slave.inc
|
|
INSERT INTO t6 VALUES(10, 1977);
|
|
-- source include/start_slave.inc
|
|
|
|
--source include/rpl_connection_master.inc
|
|
DROP TABLE t6;
|
|
--source include/sync_slave_sql_with_master.inc
|
|
|
|
--inc $i
|
|
}
|
|
|
|
|
|
#clean Up
|
|
SET @@global.slave_rows_search_algorithms= @saved_slave_rows_search_algorithms;
|
|
--connection master
|
|
DROP TABLE IF EXISTS t1, t2, t3, t4;
|
|
--source include/sync_slave_sql_with_master.inc
|
|
|
|
-- source include/rpl_reset.inc
|
|
|
|
-- source include/rpl_end.inc
|
|
|