diff options
author | Oleksandr Byelkin <sanja@mariadb.com> | 2014-10-24 10:13:08 +0200 |
---|---|---|
committer | Oleksandr Byelkin <sanja@mariadb.com> | 2014-11-11 11:48:50 +0100 |
commit | 1827d9e6d188e3ad53e057a583ebed02767b65ac (patch) | |
tree | 83cbcb5d6e4284149e9a16803884ed4e4766b23d /mysql-test/suite | |
parent | a03dd94be804a4b8b1406696920834bb2c0bedbd (diff) | |
download | mariadb-git-1827d9e6d188e3ad53e057a583ebed02767b65ac.tar.gz |
MDEV-5231: Per query variables from Percona Server (rewritten)
Diffstat (limited to 'mysql-test/suite')
-rw-r--r-- | mysql-test/suite/rpl/include/rpl_set_statement.inc | 31 | ||||
-rw-r--r-- | mysql-test/suite/rpl/r/rpl_set_statement.result | 140 | ||||
-rw-r--r-- | mysql-test/suite/rpl/t/rpl_set_statement.test | 57 |
3 files changed, 228 insertions, 0 deletions
diff --git a/mysql-test/suite/rpl/include/rpl_set_statement.inc b/mysql-test/suite/rpl/include/rpl_set_statement.inc new file mode 100644 index 00000000000..6ab2d4e66c6 --- /dev/null +++ b/mysql-test/suite/rpl/include/rpl_set_statement.inc @@ -0,0 +1,31 @@ +#Check if the variable is replicated correctly with "SET STATEMENT" +# Usage: +# $rpl_ssvt_var_name - the name of tested variable; +# $rpl_ssvt_var_value - the value to set; +# $rpl_ssvt_table - the table name to insert values. + +--connection master +--echo [connection master] +eval SELECT @@$rpl_ssvt_var_name; + +--connection slave +--echo [connection slave] +eval SELECT @@$rpl_ssvt_var_name; + +--connection master +--echo [connection master] +--disable_result_log +eval SET STATEMENT $rpl_ssvt_var_name=$rpl_ssvt_var_value FOR + INSERT INTO $rpl_ssvt_table VALUES(@@$rpl_ssvt_var_name); +--enable_result_log +eval SELECT @@$rpl_ssvt_var_name; + +--sync_slave_with_master +--echo [connection slave] +eval SELECT * FROM $rpl_ssvt_table; +eval SELECT @@$rpl_ssvt_var_name; + +--connection master +--echo [connection master] +eval DELETE FROM $rpl_ssvt_table; + diff --git a/mysql-test/suite/rpl/r/rpl_set_statement.result b/mysql-test/suite/rpl/r/rpl_set_statement.result new file mode 100644 index 00000000000..78d34bd0853 --- /dev/null +++ b/mysql-test/suite/rpl/r/rpl_set_statement.result @@ -0,0 +1,140 @@ +include/master-slave.inc +[connection master] +DROP TABLE IF EXISTS t1; +DROP TABLE IF EXISTS t2; +call mtr.add_suppression("Unsafe statement written to the binary log*"); +CREATE TABLE t1 (a bigint unsigned not null); +CREATE TABLE t2 (a char(255) not null); + +There are the following types of variables: +1) variables that are NOT replicated correctly when using STATEMENT mode; + +[connection master] +SELECT @@max_join_size; +@@max_join_size +18446744073709551615 +[connection slave] +SELECT @@max_join_size; +@@max_join_size +18446744073709551615 +[connection master] +SET STATEMENT max_join_size=2 FOR +INSERT INTO t1 VALUES(@@max_join_size); +SELECT @@max_join_size; +@@max_join_size +18446744073709551615 +[connection slave] +SELECT * FROM t1; +a +18446744073709551615 +SELECT @@max_join_size; +@@max_join_size +18446744073709551615 +[connection master] +DELETE FROM t1; + +2) variables thar ARE replicated correctly +They must be replicated correctly with "SET STATEMENT" too. + +[connection master] +SELECT @@auto_increment_increment; +@@auto_increment_increment +1 +[connection slave] +SELECT @@auto_increment_increment; +@@auto_increment_increment +1 +[connection master] +SET STATEMENT auto_increment_increment=10 FOR +INSERT INTO t1 VALUES(@@auto_increment_increment); +SELECT @@auto_increment_increment; +@@auto_increment_increment +1 +[connection slave] +SELECT * FROM t1; +a +10 +SELECT @@auto_increment_increment; +@@auto_increment_increment +1 +[connection master] +DELETE FROM t1; + +3) sql_mode which is replicated correctly exept NO_DIR_IN_CREATE value; + +[connection master] +SELECT @@sql_mode; +@@sql_mode + +[connection slave] +SELECT @@sql_mode; +@@sql_mode + +[connection master] +SET STATEMENT sql_mode='ERROR_FOR_DIVISION_BY_ZERO' FOR +INSERT INTO t2 VALUES(@@sql_mode); +SELECT @@sql_mode; +@@sql_mode + +[connection slave] +SELECT * FROM t2; +a +ERROR_FOR_DIVISION_BY_ZERO +SELECT @@sql_mode; +@@sql_mode + +[connection master] +DELETE FROM t2; +[connection master] +SELECT @@sql_mode; +@@sql_mode + +[connection slave] +SELECT @@sql_mode; +@@sql_mode + +[connection master] +SET STATEMENT sql_mode='NO_DIR_IN_CREATE' FOR +INSERT INTO t2 VALUES(@@sql_mode); +SELECT @@sql_mode; +@@sql_mode + +[connection slave] +SELECT * FROM t2; +a + +SELECT @@sql_mode; +@@sql_mode + +[connection master] +DELETE FROM t2; + +4) variables that are not replicated at all: +default_storage_engine, storage_engine, max_heap_table_size + +[connection master] +SELECT @@max_heap_table_size; +@@max_heap_table_size +1048576 +[connection slave] +SELECT @@max_heap_table_size; +@@max_heap_table_size +1048576 +[connection master] +SET STATEMENT max_heap_table_size=16384 FOR +INSERT INTO t1 VALUES(@@max_heap_table_size); +SELECT @@max_heap_table_size; +@@max_heap_table_size +1048576 +[connection slave] +SELECT * FROM t1; +a +1048576 +SELECT @@max_heap_table_size; +@@max_heap_table_size +1048576 +[connection master] +DELETE FROM t1; +DROP TABLE t1; +DROP TABLE t2; +include/stop_slave.inc diff --git a/mysql-test/suite/rpl/t/rpl_set_statement.test b/mysql-test/suite/rpl/t/rpl_set_statement.test new file mode 100644 index 00000000000..8a3087bec6d --- /dev/null +++ b/mysql-test/suite/rpl/t/rpl_set_statement.test @@ -0,0 +1,57 @@ +--source include/master-slave.inc +--source include/have_binlog_format_statement.inc + +--disable_warnings +DROP TABLE IF EXISTS t1; +DROP TABLE IF EXISTS t2; +--enable_warnings + +call mtr.add_suppression("Unsafe statement written to the binary log*"); +CREATE TABLE t1 (a bigint unsigned not null); +CREATE TABLE t2 (a char(255) not null); + +--echo +--echo There are the following types of variables: +--echo 1) variables that are NOT replicated correctly when using STATEMENT mode; +--echo + +--let $rpl_ssvt_var_name=max_join_size +--let $rpl_ssvt_var_value=2 +--let $rpl_ssvt_table=t1 +--source suite/rpl/include/rpl_set_statement.inc + +--echo +--echo 2) variables thar ARE replicated correctly +--echo They must be replicated correctly with "SET STATEMENT" too. +--echo +--let $rpl_ssvt_var_name=auto_increment_increment +--let $rpl_ssvt_var_value=10 +--let $rpl_ssvt_table=t1 +--source suite/rpl/include/rpl_set_statement.inc + +--echo +--echo 3) sql_mode which is replicated correctly exept NO_DIR_IN_CREATE value; +--echo +--let $rpl_ssvt_var_name=sql_mode +--let $rpl_ssvt_var_value='ERROR_FOR_DIVISION_BY_ZERO' +--let $rpl_ssvt_table=t2 +--source suite/rpl/include/rpl_set_statement.inc +--let $rpl_ssvt_var_name=sql_mode +--let $rpl_ssvt_var_value='NO_DIR_IN_CREATE' +--let $rpl_ssvt_table=t2 +--source suite/rpl/include/rpl_set_statement.inc + +--echo +--echo 4) variables that are not replicated at all: +--echo default_storage_engine, storage_engine, max_heap_table_size +--echo +--let $rpl_ssvt_var_name=max_heap_table_size +--let $rpl_ssvt_var_value=16384 +--let $rpl_ssvt_table=t1 +--source suite/rpl/include/rpl_set_statement.inc + +connection master; +DROP TABLE t1; +DROP TABLE t2; +sync_slave_with_master; +source include/stop_slave.inc; |