summaryrefslogtreecommitdiff
path: root/mysql-test
diff options
context:
space:
mode:
Diffstat (limited to 'mysql-test')
-rw-r--r--mysql-test/extra/binlog_tests/binlog_cache_stat.test251
-rw-r--r--mysql-test/extra/binlog_tests/innodb_stat.test41
-rw-r--r--mysql-test/extra/rpl_tests/rpl_binlog_max_cache_size.test69
-rw-r--r--mysql-test/r/mysqld--help-notwin.result20
-rw-r--r--mysql-test/suite/binlog/r/binlog_innodb.result4
-rw-r--r--mysql-test/suite/binlog/r/binlog_mix_innodb_stat.result25
-rw-r--r--mysql-test/suite/binlog/r/binlog_mixed_cache_stat.result66
-rw-r--r--mysql-test/suite/binlog/r/binlog_row_cache_stat.result66
-rw-r--r--mysql-test/suite/binlog/r/binlog_row_innodb_stat.result25
-rw-r--r--mysql-test/suite/binlog/r/binlog_stm_cache_stat.result66
-rw-r--r--mysql-test/suite/binlog/r/binlog_stm_innodb_stat.result25
-rw-r--r--mysql-test/suite/binlog/t/binlog_mixed_cache_stat.test (renamed from mysql-test/suite/binlog/t/binlog_mix_innodb_stat.test)2
-rw-r--r--mysql-test/suite/binlog/t/binlog_row_cache_stat.test (renamed from mysql-test/suite/binlog/t/binlog_row_innodb_stat.test)2
-rw-r--r--mysql-test/suite/binlog/t/binlog_stm_cache_stat.test (renamed from mysql-test/suite/binlog/t/binlog_stm_innodb_stat.test)2
-rw-r--r--mysql-test/suite/rpl/r/rpl_mixed_binlog_max_cache_size.result9
-rw-r--r--mysql-test/suite/rpl/r/rpl_row_binlog_max_cache_size.result9
-rw-r--r--mysql-test/suite/rpl/r/rpl_stm_binlog_max_cache_size.result9
-rw-r--r--mysql-test/suite/sys_vars/inc/binlog_stmt_cache_size_basic.inc154
-rw-r--r--mysql-test/suite/sys_vars/r/binlog_stmt_cache_size_basic_32.result108
-rw-r--r--mysql-test/suite/sys_vars/r/binlog_stmt_cache_size_basic_64.result108
-rw-r--r--mysql-test/suite/sys_vars/r/max_binlog_stmt_cache_size_basic.result152
-rw-r--r--mysql-test/suite/sys_vars/t/binlog_stmt_cache_size_basic_32.test7
-rw-r--r--mysql-test/suite/sys_vars/t/binlog_stmt_cache_size_basic_64.test7
-rw-r--r--mysql-test/suite/sys_vars/t/max_binlog_cache_size_func-master.opt2
-rw-r--r--mysql-test/suite/sys_vars/t/max_binlog_stmt_cache_size_basic.test184
25 files changed, 1256 insertions, 157 deletions
diff --git a/mysql-test/extra/binlog_tests/binlog_cache_stat.test b/mysql-test/extra/binlog_tests/binlog_cache_stat.test
new file mode 100644
index 00000000000..a602b098201
--- /dev/null
+++ b/mysql-test/extra/binlog_tests/binlog_cache_stat.test
@@ -0,0 +1,251 @@
+# Embedded server doesn't support binlog
+-- source include/not_embedded.inc
+-- source include/have_innodb.inc
+
+# Creating tables
+--disable_warnings
+drop table if exists t1, t2;
+--enable_warnings
+
+create table t1 (a int) engine=innodb;
+create table t2 (a int) engine=myisam;
+
+#
+# This test checks binlog_cache_use and binlog_cache_disk_use when
+# transactions are committed and after when they are aborted.
+#
+
+#
+# Checking commit.
+#
+--echo **** Preparing the enviroment to check commit and its effect on status variables.
+--echo **** Expected: binlog_cache_use = 0, binlog_cache_disk_use = 0.
+--echo **** Expected: binlog_stmt_cache_use = 0, binlog_stmt_cache_disk_use = 0.
+flush status;
+let $exp_cache= 0;
+let $got_cache= query_get_value(show status like "binlog_cache_use", Value, 1);
+let $exp_disk= 0;
+let $got_disk= query_get_value(show status like "binlog_cache_disk_use", Value, 1);
+let $exp_stmt_cache= 0;
+let $got_stmt_cache= query_get_value(show status like "binlog_stmt_cache_use", Value, 1);
+let $exp_stmt_disk= 0;
+let $got_stmt_disk= query_get_value(show status like "binlog_stmt_cache_disk_use", Value, 1);
+if (`SELECT $got_cache <> $exp_cache || $got_disk <> $exp_disk || $got_stmt_cache <> $exp_stmt_cache || $got_stmt_disk <> $exp_stmt_disk`)
+{
+ -- echo "Expected: binlog_cache_use = $exp_cache, binlog_cache_disk_use = $exp_disk but got binlog_cache_use = $got_cache, binlog_cache_disk_use = $got_disk"
+ -- echo "Expected: binlog_stmt_cache_use = $exp_stmt_cache, binlog_stmt_cache_disk_use = $exp_stmt_disk but got binlog_stmt_cache_use = $got_stmt_cache, binlog_stmt_cache_disk_use = $got_stmt_disk"
+ -- die
+}
+
+--echo **** Transactional changes which are long enough so they will be flushed to disk...
+--echo **** Expected: binlog_cache_use = 1, binlog_cache_disk_use = 1.
+--echo **** Expected: binlog_stmt_cache_use = 0, binlog_stmt_cache_disk_use = 0.
+let $1=2000;
+disable_query_log;
+begin;
+while ($1)
+{
+ eval insert into t1 values( $1 );
+ dec $1;
+}
+commit;
+enable_query_log;
+let $exp_cache= 1;
+let $got_cache= query_get_value(show status like "binlog_cache_use", Value, 1);
+let $exp_disk= 1;
+let $got_disk= query_get_value(show status like "binlog_cache_disk_use", Value, 1);
+let $exp_stmt_cache= 0;
+let $got_stmt_cache= query_get_value(show status like "binlog_stmt_cache_use", Value, 1);
+let $exp_stmt_disk= 0;
+let $got_stmt_disk= query_get_value(show status like "binlog_stmt_cache_disk_use", Value, 1);
+if (`SELECT $got_cache <> $exp_cache || $got_disk <> $exp_disk || $got_stmt_cache <> $exp_stmt_cache || $got_stmt_disk <> $exp_stmt_disk`)
+{
+ -- echo "Expected: binlog_cache_use = $exp_cache, binlog_cache_disk_use = $exp_disk but got binlog_cache_use = $got_cache, binlog_cache_disk_use = $got_disk"
+ -- echo "Expected: binlog_stmt_cache_use = $exp_stmt_cache, binlog_stmt_cache_disk_use = $exp_stmt_disk but got binlog_stmt_cache_use = $got_stmt_cache, binlog_stmt_cache_disk_use = $got_stmt_disk"
+ -- die
+}
+
+--echo **** Transactional changes which should not be flushed to disk and so should not
+--echo **** increase either binlog_cache_disk_use or binlog_stmt_cache_disk_use.
+--echo **** Expected: binlog_cache_use = 2, binlog_cache_disk_use = 1.
+--echo **** Expected: binlog_stmt_cache_use = 0, binlog_stmt_cache_disk_use = 0.
+begin;
+insert into t1 values( 1 );
+commit;
+let $exp_cache= 2;
+let $got_cache= query_get_value(show status like "binlog_cache_use", Value, 1);
+let $exp_disk= 1;
+let $got_disk= query_get_value(show status like "binlog_cache_disk_use", Value, 1);
+let $exp_stmt_cache= 0;
+let $got_stmt_cache= query_get_value(show status like "binlog_stmt_cache_use", Value, 1);
+let $exp_stmt_disk= 0;
+let $got_stmt_disk= query_get_value(show status like "binlog_stmt_cache_disk_use", Value, 1);
+if (`SELECT $got_cache <> $exp_cache || $got_disk <> $exp_disk || $got_stmt_cache <> $exp_stmt_cache || $got_stmt_disk <> $exp_stmt_disk`)
+{
+ -- echo "Expected: binlog_cache_use = $exp_cache, binlog_cache_disk_use = $exp_disk but got binlog_cache_use = $got_cache, binlog_cache_disk_use = $got_disk"
+ -- echo "Expected: binlog_stmt_cache_use = $exp_stmt_cache, binlog_stmt_cache_disk_use = $exp_stmt_disk but got binlog_stmt_cache_use = $got_stmt_cache, binlog_stmt_cache_disk_use = $got_stmt_disk"
+ -- die
+}
+
+--echo **** Non-Transactional changes which should not be flushed to disk and so should not
+--echo **** increase either binlog_cache_disk_use or binlog_stmt_cache_disk_use.
+--echo **** Expected: binlog_cache_use = 2, binlog_cache_disk_use = 1.
+--echo **** Expected: binlog_stmt_cache_use = 1, binlog_stmt_cache_disk_use = 0.
+begin;
+insert into t2 values( 1 );
+commit;
+let $exp_cache= 2;
+let $got_cache= query_get_value(show status like "binlog_cache_use", Value, 1);
+let $exp_disk= 1;
+let $got_disk= query_get_value(show status like "binlog_cache_disk_use", Value, 1);
+let $exp_stmt_cache= 1;
+let $got_stmt_cache= query_get_value(show status like "binlog_stmt_cache_use", Value, 1);
+let $exp_stmt_disk= 0;
+let $got_stmt_disk= query_get_value(show status like "binlog_stmt_cache_disk_use", Value, 1);
+if (`SELECT $got_cache <> $exp_cache || $got_disk <> $exp_disk || $got_stmt_cache <> $exp_stmt_cache || $got_stmt_disk <> $exp_stmt_disk`)
+{
+ -- echo "Expected: binlog_cache_use = $exp_cache, binlog_cache_disk_use = $exp_disk but got binlog_cache_use = $got_cache, binlog_cache_disk_use = $got_disk"
+ -- echo "Expected: binlog_stmt_cache_use = $exp_stmt_cache, binlog_stmt_cache_disk_use = $exp_stmt_disk but got binlog_stmt_cache_use = $got_stmt_cache, binlog_stmt_cache_disk_use = $got_stmt_disk"
+ -- die
+}
+
+--echo **** Mixed changes which should not be flushed to disk and so should not
+--echo **** increase either binlog_cache_disk_use or binlog_stmt_cache_disk_use.
+--echo **** Expected: binlog_cache_use = 3, binlog_cache_disk_use = 1.
+--echo **** Expected: binlog_stmt_cache_use = 2, binlog_stmt_cache_disk_use = 0.
+begin;
+insert into t1 values( 1 );
+insert into t2 values( 1 );
+commit;
+let $exp_cache= 3;
+let $got_cache= query_get_value(show status like "binlog_cache_use", Value, 1);
+let $exp_disk= 1;
+let $got_disk= query_get_value(show status like "binlog_cache_disk_use", Value, 1);
+let $exp_stmt_cache= 2;
+let $got_stmt_cache= query_get_value(show status like "binlog_stmt_cache_use", Value, 1);
+let $exp_stmt_disk= 0;
+let $got_stmt_disk= query_get_value(show status like "binlog_stmt_cache_disk_use", Value, 1);
+if (`SELECT $got_cache <> $exp_cache || $got_disk <> $exp_disk || $got_stmt_cache <> $exp_stmt_cache || $got_stmt_disk <> $exp_stmt_disk`)
+{
+ -- echo "Expected: binlog_cache_use = $exp_cache, binlog_cache_disk_use = $exp_disk but got binlog_cache_use = $got_cache, binlog_cache_disk_use = $got_disk"
+ -- echo "Expected: binlog_stmt_cache_use = $exp_stmt_cache, binlog_stmt_cache_disk_use = $exp_stmt_disk but got binlog_stmt_cache_use = $got_stmt_cache, binlog_stmt_cache_disk_use = $got_stmt_disk"
+ -- die
+}
+
+#
+# Checking abort.
+#
+--echo **** Preparing the enviroment to check abort and its effect on the status variables.
+--echo **** Expected: binlog_cache_use = 0, binlog_cache_disk_use = 0.
+--echo **** Expected: binlog_stmt_cache_use = 0, binlog_stmt_cache_disk_use = 0.
+flush status;
+let $exp_cache= 0;
+let $got_cache= query_get_value(show status like "binlog_cache_use", Value, 1);
+let $exp_disk= 0;
+let $got_disk= query_get_value(show status like "binlog_cache_disk_use", Value, 1);
+let $exp_stmt_cache= 0;
+let $got_stmt_cache= query_get_value(show status like "binlog_stmt_cache_use", Value, 1);
+let $exp_stmt_disk= 0;
+let $got_stmt_disk= query_get_value(show status like "binlog_stmt_cache_disk_use", Value, 1);
+if (`SELECT $got_cache <> $exp_cache || $got_disk <> $exp_disk || $got_stmt_cache <> $exp_stmt_cache || $got_stmt_disk <> $exp_stmt_disk`)
+{
+ -- echo "Expected: binlog_cache_use = $exp_cache, binlog_cache_disk_use = $exp_disk but got binlog_cache_use = $got_cache, binlog_cache_disk_use = $got_disk"
+ -- echo "Expected: binlog_stmt_cache_use = $exp_stmt_cache, binlog_stmt_cache_disk_use = $exp_stmt_disk but got binlog_stmt_cache_use = $got_stmt_cache, binlog_stmt_cache_disk_use = $got_stmt_disk"
+ -- die
+}
+
+--echo **** Transactional changes which are long enough so they will be flushed to disk...
+--echo **** Expected: binlog_cache_use = 1, binlog_cache_disk_use = 1.
+--echo **** Expected: binlog_stmt_cache_use = 0, binlog_stmt_cache_disk_use = 0.
+let $1=2000;
+disable_query_log;
+begin;
+while ($1)
+{
+ eval insert into t1 values( $1 );
+ dec $1;
+}
+rollback;
+enable_query_log;
+let $exp_cache= 1;
+let $got_cache= query_get_value(show status like "binlog_cache_use", Value, 1);
+let $exp_disk= 1;
+let $got_disk= query_get_value(show status like "binlog_cache_disk_use", Value, 1);
+let $exp_stmt_cache= 0;
+let $got_stmt_cache= query_get_value(show status like "binlog_stmt_cache_use", Value, 1);
+let $exp_stmt_disk= 0;
+let $got_stmt_disk= query_get_value(show status like "binlog_stmt_cache_disk_use", Value, 1);
+if (`SELECT $got_cache <> $exp_cache || $got_disk <> $exp_disk || $got_stmt_cache <> $exp_stmt_cache || $got_stmt_disk <> $exp_stmt_disk`)
+{
+ -- echo "Expected: binlog_cache_use = $exp_cache, binlog_cache_disk_use = $exp_disk but got binlog_cache_use = $got_cache, binlog_cache_disk_use = $got_disk"
+ -- echo "Expected: binlog_stmt_cache_use = $exp_stmt_cache, binlog_stmt_cache_disk_use = $exp_stmt_disk but got binlog_stmt_cache_use = $got_stmt_cache, binlog_stmt_cache_disk_use = $got_stmt_disk"
+ -- die
+}
+
+--echo **** Transactional changes which should not be flushed to disk and so should not
+--echo **** increase either binlog_cache_disk_use or binlog_stmt_cache_disk_use.
+--echo **** Expected: binlog_cache_use = 2, binlog_cache_disk_use = 1.
+--echo **** Expected: binlog_stmt_cache_use = 0, binlog_stmt_cache_disk_use = 0.
+begin;
+insert into t1 values( 1 );
+rollback;
+let $exp_cache= 2;
+let $got_cache= query_get_value(show status like "binlog_cache_use", Value, 1);
+let $exp_disk= 1;
+let $got_disk= query_get_value(show status like "binlog_cache_disk_use", Value, 1);
+let $exp_stmt_cache= 0;
+let $got_stmt_cache= query_get_value(show status like "binlog_stmt_cache_use", Value, 1);
+let $exp_stmt_disk= 0;
+let $got_stmt_disk= query_get_value(show status like "binlog_stmt_cache_disk_use", Value, 1);
+if (`SELECT $got_cache <> $exp_cache || $got_disk <> $exp_disk || $got_stmt_cache <> $exp_stmt_cache || $got_stmt_disk <> $exp_stmt_disk`)
+{
+ -- echo "Expected: binlog_cache_use = $exp_cache, binlog_cache_disk_use = $exp_disk but got binlog_cache_use = $got_cache, binlog_cache_disk_use = $got_disk"
+ -- echo "Expected: binlog_stmt_cache_use = $exp_stmt_cache, binlog_stmt_cache_disk_use = $exp_stmt_disk but got binlog_stmt_cache_use = $got_stmt_cache, binlog_stmt_cache_disk_use = $got_stmt_disk"
+ -- die
+}
+
+--echo **** Non-Transactional changes which should not be flushed to disk and so should not
+--echo **** increase either binlog_cache_disk_use or binlog_stmt_cache_disk_use.
+--echo **** Expected: binlog_cache_use = 2, binlog_cache_disk_use = 1.
+--echo **** Expected: binlog_stmt_cache_use = 1, binlog_stmt_cache_disk_use = 0.
+begin;
+insert into t2 values( 1 );
+rollback;
+let $exp_cache= 2;
+let $got_cache= query_get_value(show status like "binlog_cache_use", Value, 1);
+let $exp_disk= 1;
+let $got_disk= query_get_value(show status like "binlog_cache_disk_use", Value, 1);
+let $exp_stmt_cache= 1;
+let $got_stmt_cache= query_get_value(show status like "binlog_stmt_cache_use", Value, 1);
+let $exp_stmt_disk= 0;
+let $got_stmt_disk= query_get_value(show status like "binlog_stmt_cache_disk_use", Value, 1);
+if (`SELECT $got_cache <> $exp_cache || $got_disk <> $exp_disk || $got_stmt_cache <> $exp_stmt_cache || $got_stmt_disk <> $exp_stmt_disk`)
+{
+ -- echo "Expected: binlog_cache_use = $exp_cache, binlog_cache_disk_use = $exp_disk but got binlog_cache_use = $got_cache, binlog_cache_disk_use = $got_disk"
+ -- echo "Expected: binlog_stmt_cache_use = $exp_stmt_cache, binlog_stmt_cache_disk_use = $exp_stmt_disk but got binlog_stmt_cache_use = $got_stmt_cache, binlog_stmt_cache_disk_use = $got_stmt_disk"
+ -- die
+}
+
+--echo **** Mixed changes which should not be flushed to disk and so should not
+--echo **** increase either binlog_cache_disk_use or binlog_stmt_cache_disk_use.
+--echo **** Expected: binlog_cache_use = 3, binlog_cache_disk_use = 1.
+--echo **** Expected: binlog_stmt_cache_use = 2, binlog_stmt_cache_disk_use = 0.
+begin;
+insert into t1 values( 1 );
+insert into t2 values( 1 );
+rollback;
+let $exp_cache= 3;
+let $got_cache= query_get_value(show status like "binlog_cache_use", Value, 1);
+let $exp_disk= 1;
+let $got_disk= query_get_value(show status like "binlog_cache_disk_use", Value, 1);
+let $exp_stmt_cache= 2;
+let $got_stmt_cache= query_get_value(show status like "binlog_stmt_cache_use", Value, 1);
+let $exp_stmt_disk= 0;
+let $got_stmt_disk= query_get_value(show status like "binlog_stmt_cache_disk_use", Value, 1);
+if (`SELECT $got_cache <> $exp_cache || $got_disk <> $exp_disk || $got_stmt_cache <> $exp_stmt_cache || $got_stmt_disk <> $exp_stmt_disk`)
+{
+ -- echo "Expected: binlog_cache_use = $exp_cache, binlog_cache_disk_use = $exp_disk but got binlog_cache_use = $got_cache, binlog_cache_disk_use = $got_disk"
+ -- echo "Expected: binlog_stmt_cache_use = $exp_stmt_cache, binlog_stmt_cache_disk_use = $exp_stmt_disk but got binlog_stmt_cache_use = $got_stmt_cache, binlog_stmt_cache_disk_use = $got_stmt_disk"
+ -- die
+}
+drop table t1, t2;
diff --git a/mysql-test/extra/binlog_tests/innodb_stat.test b/mysql-test/extra/binlog_tests/innodb_stat.test
deleted file mode 100644
index b31e99dfe71..00000000000
--- a/mysql-test/extra/binlog_tests/innodb_stat.test
+++ /dev/null
@@ -1,41 +0,0 @@
-# Embedded server doesn't support binlog
--- source include/not_embedded.inc
--- source include/have_innodb.inc
-
-#
-# Let us test binlog_cache_use and binlog_cache_disk_use status vars.
-# Actually this test has nothing to do with innodb per se, it just requires
-# transactional table.
-#
-flush status;
-show status like "binlog_cache_use";
-show status like "binlog_cache_disk_use";
---disable_warnings
-drop table if exists t1;
---enable_warnings
-
-create table t1 (a int) engine=innodb;
-
-# Now we are going to create transaction which is long enough so its
-# transaction binlog will be flushed to disk...
-let $1=2000;
-disable_query_log;
-begin;
-while ($1)
-{
- eval insert into t1 values( $1 );
- dec $1;
-}
-commit;
-enable_query_log;
-show status like "binlog_cache_use";
-show status like "binlog_cache_disk_use";
-
-# Transaction which should not be flushed to disk and so should not
-# increase binlog_cache_disk_use.
-begin;
-delete from t1;
-commit;
-show status like "binlog_cache_use";
-show status like "binlog_cache_disk_use";
-drop table t1;
diff --git a/mysql-test/extra/rpl_tests/rpl_binlog_max_cache_size.test b/mysql-test/extra/rpl_tests/rpl_binlog_max_cache_size.test
index 3d97ad10d17..385a82baa77 100644
--- a/mysql-test/extra/rpl_tests/rpl_binlog_max_cache_size.test
+++ b/mysql-test/extra/rpl_tests/rpl_binlog_max_cache_size.test
@@ -25,11 +25,13 @@ call mtr.add_suppression("Unsafe statement written to the binary log using state
let $old_max_binlog_cache_size= query_get_value(SHOW VARIABLES LIKE "max_binlog_cache_size", Value, 1);
let $old_binlog_cache_size= query_get_value(SHOW VARIABLES LIKE "binlog_cache_size", Value, 1);
+let $old_max_binlog_stmt_cache_size= query_get_value(SHOW VARIABLES LIKE "max_binlog_stmt_cache_size", Value, 1);
+let $old_binlog_stmt_cache_size= query_get_value(SHOW VARIABLES LIKE "binlog_stmt_cache_size", Value, 1);
SET GLOBAL max_binlog_cache_size = 4096;
-# Becuase of bug#55377, we have to set binlog_cache_size until the bug is
-# fixed.
SET GLOBAL binlog_cache_size = 4096;
+SET GLOBAL max_binlog_stmt_cache_size = 4096;
+SET GLOBAL binlog_stmt_cache_size = 4096;
disconnect master;
connect (master,127.0.0.1,root,,test,$MASTER_MYPORT,);
@@ -47,14 +49,14 @@ connection master;
--echo *** Single statement on transactional table ***
--disable_query_log
---error ER_TRANS_CACHE_FULL, ER_ERROR_ON_WRITE
+--error ER_TRANS_CACHE_FULL, ER_STMT_CACHE_FULL, ER_ERROR_ON_WRITE
eval INSERT INTO t1 (a, data) VALUES (1,
CONCAT($data, $data, $data, $data, $data));
--enable_query_log
--echo *** Single statement on non-transactional table ***
--disable_query_log
---error ER_TRANS_CACHE_FULL, ER_ERROR_ON_WRITE
+--error ER_TRANS_CACHE_FULL, ER_STMT_CACHE_FULL, ER_ERROR_ON_WRITE
eval INSERT INTO t2 (a, data) VALUES (2,
CONCAT($data, $data, $data, $data, $data, $data));
--enable_query_log
@@ -74,7 +76,7 @@ eval INSERT INTO t2 (a, data) VALUES (5, $data);
--echo *** Single statement on both transactional and non-transactional tables. ***
--disable_query_log
---error ER_TRANS_CACHE_FULL, ER_ERROR_ON_WRITE
+--error ER_TRANS_CACHE_FULL, ER_STMT_CACHE_FULL, ER_ERROR_ON_WRITE
eval UPDATE t2, t1 SET t2.data = CONCAT($data, $data, $data, $data),
t1.data = CONCAT($data, $data, $data, $data);
--enable_query_log
@@ -103,11 +105,11 @@ BEGIN;
--eval INSERT INTO t1 (a, data) VALUES (1, $data);
--eval INSERT INTO t1 (a, data) VALUES (2, $data);
--eval INSERT INTO t1 (a, data) VALUES (3, $data);
---error ER_TRANS_CACHE_FULL, ER_ERROR_ON_WRITE
+--error ER_TRANS_CACHE_FULL, ER_STMT_CACHE_FULL, ER_ERROR_ON_WRITE
--eval INSERT INTO t1 (a, data) VALUES (4, $data);
---error ER_TRANS_CACHE_FULL, ER_ERROR_ON_WRITE
+--error ER_TRANS_CACHE_FULL, ER_STMT_CACHE_FULL, ER_ERROR_ON_WRITE
--eval INSERT INTO t1 (a, data) VALUES (5, $data);
---error ER_TRANS_CACHE_FULL, ER_ERROR_ON_WRITE
+--error ER_TRANS_CACHE_FULL, ER_STMT_CACHE_FULL, ER_ERROR_ON_WRITE
--eval INSERT INTO t1 (a, data) VALUES (6, $data);
--eval INSERT INTO t1 (a, data) VALUES (7, 's');
--eval INSERT INTO t2 (a, data) VALUES (8, 's');
@@ -130,9 +132,9 @@ BEGIN;
--eval INSERT INTO t1 (a, data) VALUES (14, $data);
--eval INSERT INTO t1 (a, data) VALUES (15, $data);
--eval INSERT INTO t1 (a, data) VALUES (16, $data);
---error ER_TRANS_CACHE_FULL, ER_ERROR_ON_WRITE
+--error ER_TRANS_CACHE_FULL, ER_STMT_CACHE_FULL, ER_ERROR_ON_WRITE
--eval INSERT INTO t1 (a, data) VALUES (17, $data);
---error ER_TRANS_CACHE_FULL, ER_ERROR_ON_WRITE
+--error ER_TRANS_CACHE_FULL, ER_STMT_CACHE_FULL, ER_ERROR_ON_WRITE
--eval INSERT INTO t1 (a, data) VALUES (18, $data);
--eval INSERT INTO t1 (a, data) VALUES (19, 's');
--eval INSERT INTO t2 (a, data) VALUES (20, 's');
@@ -148,7 +150,7 @@ if (`SELECT @@binlog_format = 'STATEMENT' || @@binlog_format = 'MIXED'`)
if (`SELECT @@binlog_format = 'ROW'`)
{
--disable_query_log
- --error ER_TRANS_CACHE_FULL, ER_ERROR_ON_WRITE
+ --error ER_TRANS_CACHE_FULL, ER_STMT_CACHE_FULL, ER_ERROR_ON_WRITE
CREATE TABLE t4 SELECT * FROM t1;
--enable_query_log
}
@@ -162,9 +164,9 @@ BEGIN;
--eval INSERT INTO t1 (a, data) VALUES (22, $data);
--eval INSERT INTO t1 (a, data) VALUES (23, $data);
--eval INSERT INTO t1 (a, data) VALUES (24, $data);
---error ER_TRANS_CACHE_FULL, ER_ERROR_ON_WRITE
+--error ER_TRANS_CACHE_FULL, ER_STMT_CACHE_FULL, ER_ERROR_ON_WRITE
--eval INSERT INTO t1 (a, data) VALUES (25, $data);
---error ER_TRANS_CACHE_FULL, ER_ERROR_ON_WRITE
+--error ER_TRANS_CACHE_FULL, ER_STMT_CACHE_FULL, ER_ERROR_ON_WRITE
--eval INSERT INTO t1 (a, data) VALUES (26, $data);
--eval INSERT INTO t1 (a, data) VALUES (27, 's');
--eval INSERT INTO t2 (a, data) VALUES (28, 's');
@@ -192,11 +194,11 @@ BEGIN;
--eval INSERT INTO t1 (a, data) VALUES (1, $data);
--eval INSERT INTO t1 (a, data) VALUES (2, $data);
--eval INSERT INTO t1 (a, data) VALUES (3, $data);
---error ER_TRANS_CACHE_FULL, ER_ERROR_ON_WRITE
+--error ER_TRANS_CACHE_FULL, ER_STMT_CACHE_FULL, ER_ERROR_ON_WRITE
--eval INSERT INTO t1 (a, data) VALUES (4, $data);
---error ER_TRANS_CACHE_FULL, ER_ERROR_ON_WRITE
+--error ER_TRANS_CACHE_FULL, ER_STMT_CACHE_FULL, ER_ERROR_ON_WRITE
--eval INSERT INTO t1 (a, data) VALUES (5, $data);
---error ER_TRANS_CACHE_FULL, ER_ERROR_ON_WRITE
+--error ER_TRANS_CACHE_FULL, ER_STMT_CACHE_FULL, ER_ERROR_ON_WRITE
--eval INSERT INTO t1 (a, data) VALUES (6, $data);
--eval INSERT INTO t1 (a, data) VALUES (7, 's');
--eval INSERT INTO t2 (a, data) VALUES (8, 's');
@@ -221,11 +223,11 @@ BEGIN;
--eval INSERT INTO t1 (a, data) VALUES (1, $data);
--eval INSERT INTO t1 (a, data) VALUES (2, $data);
--eval INSERT INTO t1 (a, data) VALUES (3, $data);
---error ER_TRANS_CACHE_FULL, ER_ERROR_ON_WRITE
+--error ER_TRANS_CACHE_FULL, ER_STMT_CACHE_FULL, ER_ERROR_ON_WRITE
--eval INSERT INTO t1 (a, data) VALUES (4, $data);
---error ER_TRANS_CACHE_FULL, ER_ERROR_ON_WRITE
+--error ER_TRANS_CACHE_FULL, ER_STMT_CACHE_FULL, ER_ERROR_ON_WRITE
--eval INSERT INTO t1 (a, data) VALUES (5, $data);
---error ER_TRANS_CACHE_FULL, ER_ERROR_ON_WRITE
+--error ER_TRANS_CACHE_FULL, ER_STMT_CACHE_FULL, ER_ERROR_ON_WRITE
--eval INSERT INTO t1 (a, data) VALUES (6, $data);
--eval INSERT INTO t1 (a, data) VALUES (7, 's');
--eval INSERT INTO t2 (a, data) VALUES (8, 's');
@@ -268,7 +270,7 @@ TRUNCATE TABLE t1;
BEGIN;
--disable_query_log
---error ER_TRANS_CACHE_FULL, ER_ERROR_ON_WRITE
+--error ER_TRANS_CACHE_FULL, ER_STMT_CACHE_FULL, ER_ERROR_ON_WRITE
eval CALL p1($data);
--enable_query_log
COMMIT;
@@ -277,7 +279,7 @@ TRUNCATE TABLE t1;
BEGIN;
--disable_query_log
---error ER_TRANS_CACHE_FULL, ER_ERROR_ON_WRITE
+--error ER_TRANS_CACHE_FULL, ER_STMT_CACHE_FULL, ER_ERROR_ON_WRITE
eval CALL p1($data);
--enable_query_log
ROLLBACK;
@@ -299,12 +301,12 @@ BEGIN;
--eval INSERT INTO t1 (a, data) VALUES (1, $data);
--eval INSERT INTO t1 (a, data) VALUES (2, $data);
--eval INSERT INTO t1 (a, data) VALUES (3, $data);
---error ER_TRANS_CACHE_FULL, ER_ERROR_ON_WRITE
+--error ER_TRANS_CACHE_FULL, ER_STMT_CACHE_FULL, ER_ERROR_ON_WRITE
--eval INSERT INTO t1 (a, data) VALUES (4, $data);
SAVEPOINT sv;
---error ER_TRANS_CACHE_FULL, ER_ERROR_ON_WRITE
+--error ER_TRANS_CACHE_FULL, ER_STMT_CACHE_FULL, ER_ERROR_ON_WRITE
--eval INSERT INTO t1 (a, data) VALUES (5, $data);
---error ER_TRANS_CACHE_FULL, ER_ERROR_ON_WRITE
+--error ER_TRANS_CACHE_FULL, ER_STMT_CACHE_FULL, ER_ERROR_ON_WRITE
--eval INSERT INTO t1 (a, data) VALUES (6, $data);
--eval INSERT INTO t1 (a, data) VALUES (7, 's');
--eval INSERT INTO t2 (a, data) VALUES (8, 's');
@@ -331,11 +333,11 @@ BEGIN;
--eval INSERT INTO t1 (a, data) VALUES (2, $data);
--eval INSERT INTO t2 (a, data) VALUES (3, $data);
--eval INSERT INTO t1 (a, data) VALUES (4, $data);
---error ER_TRANS_CACHE_FULL, ER_ERROR_ON_WRITE
+--error ER_TRANS_CACHE_FULL, ER_STMT_CACHE_FULL, ER_ERROR_ON_WRITE
--eval INSERT INTO t1 (a, data) VALUES (5, $data);
---error ER_TRANS_CACHE_FULL, ER_ERROR_ON_WRITE
+--error ER_TRANS_CACHE_FULL, ER_STMT_CACHE_FULL, ER_ERROR_ON_WRITE
--eval INSERT INTO t1 (a, data) VALUES (6, $data);
---error ER_TRANS_CACHE_FULL, ER_ERROR_ON_WRITE
+--error ER_TRANS_CACHE_FULL, ER_STMT_CACHE_FULL, ER_ERROR_ON_WRITE
--eval INSERT INTO t1 (a, data) VALUES (7, $data);
--eval UPDATE t2 SET data= CONCAT($data, $data);
--eval INSERT INTO t1 (a, data) VALUES (8, 's');
@@ -351,7 +353,7 @@ BEGIN;
--eval INSERT INTO t1 (a, data) VALUES (16, $data);
--eval INSERT INTO t2 (a, data) VALUES (17, $data);
--eval INSERT INTO t1 (a, data) VALUES (18, $data);
---error ER_TRANS_CACHE_FULL, ER_ERROR_ON_WRITE
+--error ER_TRANS_CACHE_FULL, ER_STMT_CACHE_FULL, ER_ERROR_ON_WRITE
--eval INSERT INTO t1 (a, data) VALUES (19, $data);
--enable_query_log
COMMIT;
@@ -367,10 +369,13 @@ let $diff_statement= SELECT * FROM t1;
--echo # [ On Slave ]
SET GLOBAL max_binlog_cache_size = 4096;
SET GLOBAL binlog_cache_size = 4096;
+SET GLOBAL max_binlog_stmt_cache_size = 4096;
+SET GLOBAL binlog_stmt_cache_size = 4096;
source include/stop_slave.inc;
source include/start_slave.inc;
CALL mtr.add_suppression("Multi-statement transaction required more than 'max_binlog_cache_size' bytes of storage.*");
+CALL mtr.add_suppression("Multi-statement transaction required more than 'max_binlog_stmt_cache_size' bytes of storage.*");
CALL mtr.add_suppression("Writing one row to the row-based binary log failed.*");
connection master;
@@ -385,6 +390,10 @@ connection master;
--eval SET GLOBAL max_binlog_cache_size= $old_max_binlog_cache_size
--replace_result $old_binlog_cache_size ORIGINAL_VALUE
--eval SET GLOBAL binlog_cache_size= $old_binlog_cache_size
+--replace_result $old_max_binlog_stmt_cache_size ORIGINAL_VALUE
+--eval SET GLOBAL max_binlog_stmt_cache_size= $old_max_binlog_stmt_cache_size
+--replace_result $old_binlog_stmt_cache_size ORIGINAL_VALUE
+--eval SET GLOBAL binlog_stmt_cache_size= $old_binlog_stmt_cache_size
disconnect master;
connect (master,127.0.0.1,root,,test,$MASTER_MYPORT,);
@@ -415,6 +424,10 @@ source include/show_binlog_events.inc;
--eval SET GLOBAL max_binlog_cache_size= $old_max_binlog_cache_size
--replace_result $old_binlog_cache_size ORIGINAL_VALUE
--eval SET GLOBAL binlog_cache_size= $old_binlog_cache_size
+--replace_result $old_max_binlog_stmt_cache_size ORIGINAL_VALUE
+--eval SET GLOBAL max_binlog_stmt_cache_size= $old_max_binlog_stmt_cache_size
+--replace_result $old_binlog_stmt_cache_size ORIGINAL_VALUE
+--eval SET GLOBAL binlog_stmt_cache_size= $old_binlog_stmt_cache_size
source include/stop_slave.inc;
source include/start_slave.inc;
diff --git a/mysql-test/r/mysqld--help-notwin.result b/mysql-test/r/mysqld--help-notwin.result
index fc269e1dd82..60ba06c8f7e 100644
--- a/mysql-test/r/mysqld--help-notwin.result
+++ b/mysql-test/r/mysqld--help-notwin.result
@@ -32,10 +32,10 @@ The following options may be given as the first argument:
file (Solves most 'table full' errors)
--bind-address=name IP address to bind to.
--binlog-cache-size=#
- The size of the cache to hold the SQL statements for the
- binary log during a transaction. If you often use big,
- multi-statement transactions you can increase this to get
- more performance
+ The size of the transactional cache for updates to
+ transactional engines for the binary log. If you often
+ use transactions containing many statements, you can
+ increase this to get more performance
--binlog-direct-non-transactional-updates
Causes updates to non-transactional engines using
statement format to be written directly to binary log.
@@ -66,6 +66,11 @@ The following options may be given as the first argument:
The maximum size of a row-based binary log event in
bytes. Rows will be grouped into events smaller than this
size if possible. The value has to be a multiple of 256.
+ --binlog-stmt-cache-size=#
+ The size of the statement cache for updates to
+ non-transactional engines for the binary log. If you
+ often use statements updating a great number of rows, you
+ can increase this to get more performance
--bootstrap Used by mysql installation scripts.
--bulk-insert-buffer-size=#
Size of tree cache used in bulk insert optimisation. Note
@@ -278,14 +283,15 @@ The following options may be given as the first argument:
--max-allowed-packet=#
Max packet length to send to or receive from the server
--max-binlog-cache-size=#
- Can be used to restrict the total size used to cache a
- multi-transaction query
+ Sets the total size of the transactional cache
--max-binlog-dump-events=#
Option used by mysql-test for debugging and testing of
replication.
--max-binlog-size=# Binary log will be rotated automatically when the size
exceeds this value. Will also apply to relay logs if
max_relay_log_size is 0
+ --max-binlog-stmt-cache-size=#
+ Sets the total size of the statement cache
--max-connect-errors=#
If there is more than this number of interrupted
connections from a host this host will be blocked from
@@ -734,6 +740,7 @@ binlog-cache-size 32768
binlog-direct-non-transactional-updates FALSE
binlog-format STATEMENT
binlog-row-event-max-size 1024
+binlog-stmt-cache-size 32768
bulk-insert-buffer-size 8388608
character-set-client-handshake TRUE
character-set-filesystem binary
@@ -813,6 +820,7 @@ max-allowed-packet 1048576
max-binlog-cache-size 18446744073709547520
max-binlog-dump-events 0
max-binlog-size 1073741824
+max-binlog-stmt-cache-size 18446744073709547520
max-connect-errors 10
max-connections 151
max-delayed-threads 20
diff --git a/mysql-test/suite/binlog/r/binlog_innodb.result b/mysql-test/suite/binlog/r/binlog_innodb.result
index dc170361026..cdb72aad902 100644
--- a/mysql-test/suite/binlog/r/binlog_innodb.result
+++ b/mysql-test/suite/binlog/r/binlog_innodb.result
@@ -123,7 +123,7 @@ Binlog_cache_disk_use 0
create table t1 (a int) engine=innodb;
show status like "binlog_cache_use";
Variable_name Value
-Binlog_cache_use 2
+Binlog_cache_use 1
show status like "binlog_cache_disk_use";
Variable_name Value
Binlog_cache_disk_use 1
@@ -132,7 +132,7 @@ delete from t1;
commit;
show status like "binlog_cache_use";
Variable_name Value
-Binlog_cache_use 4
+Binlog_cache_use 2
show status like "binlog_cache_disk_use";
Variable_name Value
Binlog_cache_disk_use 1
diff --git a/mysql-test/suite/binlog/r/binlog_mix_innodb_stat.result b/mysql-test/suite/binlog/r/binlog_mix_innodb_stat.result
deleted file mode 100644
index 637be940383..00000000000
--- a/mysql-test/suite/binlog/r/binlog_mix_innodb_stat.result
+++ /dev/null
@@ -1,25 +0,0 @@
-flush status;
-show status like "binlog_cache_use";
-Variable_name Value
-Binlog_cache_use 0
-show status like "binlog_cache_disk_use";
-Variable_name Value
-Binlog_cache_disk_use 0
-drop table if exists t1;
-create table t1 (a int) engine=innodb;
-show status like "binlog_cache_use";
-Variable_name Value
-Binlog_cache_use 2
-show status like "binlog_cache_disk_use";
-Variable_name Value
-Binlog_cache_disk_use 1
-begin;
-delete from t1;
-commit;
-show status like "binlog_cache_use";
-Variable_name Value
-Binlog_cache_use 4
-show status like "binlog_cache_disk_use";
-Variable_name Value
-Binlog_cache_disk_use 1
-drop table t1;
diff --git a/mysql-test/suite/binlog/r/binlog_mixed_cache_stat.result b/mysql-test/suite/binlog/r/binlog_mixed_cache_stat.result
new file mode 100644
index 00000000000..09cdab8414a
--- /dev/null
+++ b/mysql-test/suite/binlog/r/binlog_mixed_cache_stat.result
@@ -0,0 +1,66 @@
+drop table if exists t1, t2;
+create table t1 (a int) engine=innodb;
+create table t2 (a int) engine=myisam;
+**** Preparing the enviroment to check commit and its effect on status variables.
+**** Expected: binlog_cache_use = 0, binlog_cache_disk_use = 0.
+**** Expected: binlog_stmt_cache_use = 0, binlog_stmt_cache_disk_use = 0.
+flush status;
+**** Transactional changes which are long enough so they will be flushed to disk...
+**** Expected: binlog_cache_use = 1, binlog_cache_disk_use = 1.
+**** Expected: binlog_stmt_cache_use = 0, binlog_stmt_cache_disk_use = 0.
+**** Transactional changes which should not be flushed to disk and so should not
+**** increase either binlog_cache_disk_use or binlog_stmt_cache_disk_use.
+**** Expected: binlog_cache_use = 2, binlog_cache_disk_use = 1.
+**** Expected: binlog_stmt_cache_use = 0, binlog_stmt_cache_disk_use = 0.
+begin;
+insert into t1 values( 1 );
+commit;
+**** Non-Transactional changes which should not be flushed to disk and so should not
+**** increase either binlog_cache_disk_use or binlog_stmt_cache_disk_use.
+**** Expected: binlog_cache_use = 2, binlog_cache_disk_use = 1.
+**** Expected: binlog_stmt_cache_use = 1, binlog_stmt_cache_disk_use = 0.
+begin;
+insert into t2 values( 1 );
+commit;
+**** Mixed changes which should not be flushed to disk and so should not
+**** increase either binlog_cache_disk_use or binlog_stmt_cache_disk_use.
+**** Expected: binlog_cache_use = 3, binlog_cache_disk_use = 1.
+**** Expected: binlog_stmt_cache_use = 2, binlog_stmt_cache_disk_use = 0.
+begin;
+insert into t1 values( 1 );
+insert into t2 values( 1 );
+commit;
+**** Preparing the enviroment to check abort and its effect on the status variables.
+**** Expected: binlog_cache_use = 0, binlog_cache_disk_use = 0.
+**** Expected: binlog_stmt_cache_use = 0, binlog_stmt_cache_disk_use = 0.
+flush status;
+**** Transactional changes which are long enough so they will be flushed to disk...
+**** Expected: binlog_cache_use = 1, binlog_cache_disk_use = 1.
+**** Expected: binlog_stmt_cache_use = 0, binlog_stmt_cache_disk_use = 0.
+**** Transactional changes which should not be flushed to disk and so should not
+**** increase either binlog_cache_disk_use or binlog_stmt_cache_disk_use.
+**** Expected: binlog_cache_use = 2, binlog_cache_disk_use = 1.
+**** Expected: binlog_stmt_cache_use = 0, binlog_stmt_cache_disk_use = 0.
+begin;
+insert into t1 values( 1 );
+rollback;
+**** Non-Transactional changes which should not be flushed to disk and so should not
+**** increase either binlog_cache_disk_use or binlog_stmt_cache_disk_use.
+**** Expected: binlog_cache_use = 2, binlog_cache_disk_use = 1.
+**** Expected: binlog_stmt_cache_use = 1, binlog_stmt_cache_disk_use = 0.
+begin;
+insert into t2 values( 1 );
+rollback;
+Warnings:
+Warning 1196 Some non-transactional changed tables couldn't be rolled back
+**** Mixed changes which should not be flushed to disk and so should not
+**** increase either binlog_cache_disk_use or binlog_stmt_cache_disk_use.
+**** Expected: binlog_cache_use = 3, binlog_cache_disk_use = 1.
+**** Expected: binlog_stmt_cache_use = 2, binlog_stmt_cache_disk_use = 0.
+begin;
+insert into t1 values( 1 );
+insert into t2 values( 1 );
+rollback;
+Warnings:
+Warning 1196 Some non-transactional changed tables couldn't be rolled back
+drop table t1, t2;
diff --git a/mysql-test/suite/binlog/r/binlog_row_cache_stat.result b/mysql-test/suite/binlog/r/binlog_row_cache_stat.result
new file mode 100644
index 00000000000..09cdab8414a
--- /dev/null
+++ b/mysql-test/suite/binlog/r/binlog_row_cache_stat.result
@@ -0,0 +1,66 @@
+drop table if exists t1, t2;
+create table t1 (a int) engine=innodb;
+create table t2 (a int) engine=myisam;
+**** Preparing the enviroment to check commit and its effect on status variables.
+**** Expected: binlog_cache_use = 0, binlog_cache_disk_use = 0.
+**** Expected: binlog_stmt_cache_use = 0, binlog_stmt_cache_disk_use = 0.
+flush status;
+**** Transactional changes which are long enough so they will be flushed to disk...
+**** Expected: binlog_cache_use = 1, binlog_cache_disk_use = 1.
+**** Expected: binlog_stmt_cache_use = 0, binlog_stmt_cache_disk_use = 0.
+**** Transactional changes which should not be flushed to disk and so should not
+**** increase either binlog_cache_disk_use or binlog_stmt_cache_disk_use.
+**** Expected: binlog_cache_use = 2, binlog_cache_disk_use = 1.
+**** Expected: binlog_stmt_cache_use = 0, binlog_stmt_cache_disk_use = 0.
+begin;
+insert into t1 values( 1 );
+commit;
+**** Non-Transactional changes which should not be flushed to disk and so should not
+**** increase either binlog_cache_disk_use or binlog_stmt_cache_disk_use.
+**** Expected: binlog_cache_use = 2, binlog_cache_disk_use = 1.
+**** Expected: binlog_stmt_cache_use = 1, binlog_stmt_cache_disk_use = 0.
+begin;
+insert into t2 values( 1 );
+commit;
+**** Mixed changes which should not be flushed to disk and so should not
+**** increase either binlog_cache_disk_use or binlog_stmt_cache_disk_use.
+**** Expected: binlog_cache_use = 3, binlog_cache_disk_use = 1.
+**** Expected: binlog_stmt_cache_use = 2, binlog_stmt_cache_disk_use = 0.
+begin;
+insert into t1 values( 1 );
+insert into t2 values( 1 );
+commit;
+**** Preparing the enviroment to check abort and its effect on the status variables.
+**** Expected: binlog_cache_use = 0, binlog_cache_disk_use = 0.
+**** Expected: binlog_stmt_cache_use = 0, binlog_stmt_cache_disk_use = 0.
+flush status;
+**** Transactional changes which are long enough so they will be flushed to disk...
+**** Expected: binlog_cache_use = 1, binlog_cache_disk_use = 1.
+**** Expected: binlog_stmt_cache_use = 0, binlog_stmt_cache_disk_use = 0.
+**** Transactional changes which should not be flushed to disk and so should not
+**** increase either binlog_cache_disk_use or binlog_stmt_cache_disk_use.
+**** Expected: binlog_cache_use = 2, binlog_cache_disk_use = 1.
+**** Expected: binlog_stmt_cache_use = 0, binlog_stmt_cache_disk_use = 0.
+begin;
+insert into t1 values( 1 );
+rollback;
+**** Non-Transactional changes which should not be flushed to disk and so should not
+**** increase either binlog_cache_disk_use or binlog_stmt_cache_disk_use.
+**** Expected: binlog_cache_use = 2, binlog_cache_disk_use = 1.
+**** Expected: binlog_stmt_cache_use = 1, binlog_stmt_cache_disk_use = 0.
+begin;
+insert into t2 values( 1 );
+rollback;
+Warnings:
+Warning 1196 Some non-transactional changed tables couldn't be rolled back
+**** Mixed changes which should not be flushed to disk and so should not
+**** increase either binlog_cache_disk_use or binlog_stmt_cache_disk_use.
+**** Expected: binlog_cache_use = 3, binlog_cache_disk_use = 1.
+**** Expected: binlog_stmt_cache_use = 2, binlog_stmt_cache_disk_use = 0.
+begin;
+insert into t1 values( 1 );
+insert into t2 values( 1 );
+rollback;
+Warnings:
+Warning 1196 Some non-transactional changed tables couldn't be rolled back
+drop table t1, t2;
diff --git a/mysql-test/suite/binlog/r/binlog_row_innodb_stat.result b/mysql-test/suite/binlog/r/binlog_row_innodb_stat.result
deleted file mode 100644
index 637be940383..00000000000
--- a/mysql-test/suite/binlog/r/binlog_row_innodb_stat.result
+++ /dev/null
@@ -1,25 +0,0 @@
-flush status;
-show status like "binlog_cache_use";
-Variable_name Value
-Binlog_cache_use 0
-show status like "binlog_cache_disk_use";
-Variable_name Value
-Binlog_cache_disk_use 0
-drop table if exists t1;
-create table t1 (a int) engine=innodb;
-show status like "binlog_cache_use";
-Variable_name Value
-Binlog_cache_use 2
-show status like "binlog_cache_disk_use";
-Variable_name Value
-Binlog_cache_disk_use 1
-begin;
-delete from t1;
-commit;
-show status like "binlog_cache_use";
-Variable_name Value
-Binlog_cache_use 4
-show status like "binlog_cache_disk_use";
-Variable_name Value
-Binlog_cache_disk_use 1
-drop table t1;
diff --git a/mysql-test/suite/binlog/r/binlog_stm_cache_stat.result b/mysql-test/suite/binlog/r/binlog_stm_cache_stat.result
new file mode 100644
index 00000000000..09cdab8414a
--- /dev/null
+++ b/mysql-test/suite/binlog/r/binlog_stm_cache_stat.result
@@ -0,0 +1,66 @@
+drop table if exists t1, t2;
+create table t1 (a int) engine=innodb;
+create table t2 (a int) engine=myisam;
+**** Preparing the enviroment to check commit and its effect on status variables.
+**** Expected: binlog_cache_use = 0, binlog_cache_disk_use = 0.
+**** Expected: binlog_stmt_cache_use = 0, binlog_stmt_cache_disk_use = 0.
+flush status;
+**** Transactional changes which are long enough so they will be flushed to disk...
+**** Expected: binlog_cache_use = 1, binlog_cache_disk_use = 1.
+**** Expected: binlog_stmt_cache_use = 0, binlog_stmt_cache_disk_use = 0.
+**** Transactional changes which should not be flushed to disk and so should not
+**** increase either binlog_cache_disk_use or binlog_stmt_cache_disk_use.
+**** Expected: binlog_cache_use = 2, binlog_cache_disk_use = 1.
+**** Expected: binlog_stmt_cache_use = 0, binlog_stmt_cache_disk_use = 0.
+begin;
+insert into t1 values( 1 );
+commit;
+**** Non-Transactional changes which should not be flushed to disk and so should not
+**** increase either binlog_cache_disk_use or binlog_stmt_cache_disk_use.
+**** Expected: binlog_cache_use = 2, binlog_cache_disk_use = 1.
+**** Expected: binlog_stmt_cache_use = 1, binlog_stmt_cache_disk_use = 0.
+begin;
+insert into t2 values( 1 );
+commit;
+**** Mixed changes which should not be flushed to disk and so should not
+**** increase either binlog_cache_disk_use or binlog_stmt_cache_disk_use.
+**** Expected: binlog_cache_use = 3, binlog_cache_disk_use = 1.
+**** Expected: binlog_stmt_cache_use = 2, binlog_stmt_cache_disk_use = 0.
+begin;
+insert into t1 values( 1 );
+insert into t2 values( 1 );
+commit;
+**** Preparing the enviroment to check abort and its effect on the status variables.
+**** Expected: binlog_cache_use = 0, binlog_cache_disk_use = 0.
+**** Expected: binlog_stmt_cache_use = 0, binlog_stmt_cache_disk_use = 0.
+flush status;
+**** Transactional changes which are long enough so they will be flushed to disk...
+**** Expected: binlog_cache_use = 1, binlog_cache_disk_use = 1.
+**** Expected: binlog_stmt_cache_use = 0, binlog_stmt_cache_disk_use = 0.
+**** Transactional changes which should not be flushed to disk and so should not
+**** increase either binlog_cache_disk_use or binlog_stmt_cache_disk_use.
+**** Expected: binlog_cache_use = 2, binlog_cache_disk_use = 1.
+**** Expected: binlog_stmt_cache_use = 0, binlog_stmt_cache_disk_use = 0.
+begin;
+insert into t1 values( 1 );
+rollback;
+**** Non-Transactional changes which should not be flushed to disk and so should not
+**** increase either binlog_cache_disk_use or binlog_stmt_cache_disk_use.
+**** Expected: binlog_cache_use = 2, binlog_cache_disk_use = 1.
+**** Expected: binlog_stmt_cache_use = 1, binlog_stmt_cache_disk_use = 0.
+begin;
+insert into t2 values( 1 );
+rollback;
+Warnings:
+Warning 1196 Some non-transactional changed tables couldn't be rolled back
+**** Mixed changes which should not be flushed to disk and so should not
+**** increase either binlog_cache_disk_use or binlog_stmt_cache_disk_use.
+**** Expected: binlog_cache_use = 3, binlog_cache_disk_use = 1.
+**** Expected: binlog_stmt_cache_use = 2, binlog_stmt_cache_disk_use = 0.
+begin;
+insert into t1 values( 1 );
+insert into t2 values( 1 );
+rollback;
+Warnings:
+Warning 1196 Some non-transactional changed tables couldn't be rolled back
+drop table t1, t2;
diff --git a/mysql-test/suite/binlog/r/binlog_stm_innodb_stat.result b/mysql-test/suite/binlog/r/binlog_stm_innodb_stat.result
deleted file mode 100644
index 637be940383..00000000000
--- a/mysql-test/suite/binlog/r/binlog_stm_innodb_stat.result
+++ /dev/null
@@ -1,25 +0,0 @@
-flush status;
-show status like "binlog_cache_use";
-Variable_name Value
-Binlog_cache_use 0
-show status like "binlog_cache_disk_use";
-Variable_name Value
-Binlog_cache_disk_use 0
-drop table if exists t1;
-create table t1 (a int) engine=innodb;
-show status like "binlog_cache_use";
-Variable_name Value
-Binlog_cache_use 2
-show status like "binlog_cache_disk_use";
-Variable_name Value
-Binlog_cache_disk_use 1
-begin;
-delete from t1;
-commit;
-show status like "binlog_cache_use";
-Variable_name Value
-Binlog_cache_use 4
-show status like "binlog_cache_disk_use";
-Variable_name Value
-Binlog_cache_disk_use 1
-drop table t1;
diff --git a/mysql-test/suite/binlog/t/binlog_mix_innodb_stat.test b/mysql-test/suite/binlog/t/binlog_mixed_cache_stat.test
index 0be097c78ed..3e63fb3bc9c 100644
--- a/mysql-test/suite/binlog/t/binlog_mix_innodb_stat.test
+++ b/mysql-test/suite/binlog/t/binlog_mixed_cache_stat.test
@@ -2,4 +2,4 @@
# For both statement and row based bin logs 9/19/2005 [jbm]
-- source include/have_binlog_format_mixed.inc
--- source extra/binlog_tests/innodb_stat.test
+-- source extra/binlog_tests/binlog_cache_stat.test
diff --git a/mysql-test/suite/binlog/t/binlog_row_innodb_stat.test b/mysql-test/suite/binlog/t/binlog_row_cache_stat.test
index e4e6762226b..03f9c53f0cc 100644
--- a/mysql-test/suite/binlog/t/binlog_row_innodb_stat.test
+++ b/mysql-test/suite/binlog/t/binlog_row_cache_stat.test
@@ -2,4 +2,4 @@
# For both statement and row based bin logs 9/19/2005 [jbm]
-- source include/have_binlog_format_row.inc
--- source extra/binlog_tests/innodb_stat.test
+-- source extra/binlog_tests/binlog_cache_stat.test
diff --git a/mysql-test/suite/binlog/t/binlog_stm_innodb_stat.test b/mysql-test/suite/binlog/t/binlog_stm_cache_stat.test
index c6017246e6d..0f5aa9f6013 100644
--- a/mysql-test/suite/binlog/t/binlog_stm_innodb_stat.test
+++ b/mysql-test/suite/binlog/t/binlog_stm_cache_stat.test
@@ -2,4 +2,4 @@
# For both statement and row based bin logs 9/19/2005 [jbm]
-- source include/have_binlog_format_statement.inc
--- source extra/binlog_tests/innodb_stat.test
+-- source extra/binlog_tests/binlog_cache_stat.test
diff --git a/mysql-test/suite/rpl/r/rpl_mixed_binlog_max_cache_size.result b/mysql-test/suite/rpl/r/rpl_mixed_binlog_max_cache_size.result
index 479caed8e6b..c7f2ffab47a 100644
--- a/mysql-test/suite/rpl/r/rpl_mixed_binlog_max_cache_size.result
+++ b/mysql-test/suite/rpl/r/rpl_mixed_binlog_max_cache_size.result
@@ -7,6 +7,8 @@ start slave;
call mtr.add_suppression("Unsafe statement written to the binary log using statement format since BINLOG_FORMAT = STATEMENT");
SET GLOBAL max_binlog_cache_size = 4096;
SET GLOBAL binlog_cache_size = 4096;
+SET GLOBAL max_binlog_stmt_cache_size = 4096;
+SET GLOBAL binlog_stmt_cache_size = 4096;
CREATE TABLE t1(a INT PRIMARY KEY, data VARCHAR(30000)) ENGINE=Innodb;
CREATE TABLE t2(a INT PRIMARY KEY, data VARCHAR(30000)) ENGINE=MyIsam;
CREATE TABLE t3(a INT PRIMARY KEY, data VARCHAR(30000)) ENGINE=Innodb;
@@ -129,13 +131,18 @@ source include/diff_master_slave.inc;
# [ On Slave ]
SET GLOBAL max_binlog_cache_size = 4096;
SET GLOBAL binlog_cache_size = 4096;
+SET GLOBAL max_binlog_stmt_cache_size = 4096;
+SET GLOBAL binlog_stmt_cache_size = 4096;
include/stop_slave.inc
include/start_slave.inc
CALL mtr.add_suppression("Multi-statement transaction required more than 'max_binlog_cache_size' bytes of storage.*");
+CALL mtr.add_suppression("Multi-statement transaction required more than 'max_binlog_stmt_cache_size' bytes of storage.*");
CALL mtr.add_suppression("Writing one row to the row-based binary log failed.*");
TRUNCATE t1;
SET GLOBAL max_binlog_cache_size= ORIGINAL_VALUE;
SET GLOBAL binlog_cache_size= ORIGINAL_VALUE;
+SET GLOBAL max_binlog_stmt_cache_size= ORIGINAL_VALUE;
+SET GLOBAL binlog_stmt_cache_size= ORIGINAL_VALUE;
BEGIN;
Repeat statement 'INSERT INTO t1 VALUES($n, repeat("a", 32))' 128 times
COMMIT;
@@ -146,6 +153,8 @@ show binlog events in 'slave-bin.000001' from <binlog_start>;
Log_name Pos Event_type Server_id End_log_pos Info
SET GLOBAL max_binlog_cache_size= ORIGINAL_VALUE;
SET GLOBAL binlog_cache_size= ORIGINAL_VALUE;
+SET GLOBAL max_binlog_stmt_cache_size= ORIGINAL_VALUE;
+SET GLOBAL binlog_stmt_cache_size= ORIGINAL_VALUE;
include/stop_slave.inc
include/start_slave.inc
SELECT count(*) FROM t1;
diff --git a/mysql-test/suite/rpl/r/rpl_row_binlog_max_cache_size.result b/mysql-test/suite/rpl/r/rpl_row_binlog_max_cache_size.result
index 9c1dfebebaf..f04c229a9b6 100644
--- a/mysql-test/suite/rpl/r/rpl_row_binlog_max_cache_size.result
+++ b/mysql-test/suite/rpl/r/rpl_row_binlog_max_cache_size.result
@@ -7,6 +7,8 @@ start slave;
call mtr.add_suppression("Unsafe statement written to the binary log using statement format since BINLOG_FORMAT = STATEMENT");
SET GLOBAL max_binlog_cache_size = 4096;
SET GLOBAL binlog_cache_size = 4096;
+SET GLOBAL max_binlog_stmt_cache_size = 4096;
+SET GLOBAL binlog_stmt_cache_size = 4096;
CREATE TABLE t1(a INT PRIMARY KEY, data VARCHAR(30000)) ENGINE=Innodb;
CREATE TABLE t2(a INT PRIMARY KEY, data VARCHAR(30000)) ENGINE=MyIsam;
CREATE TABLE t3(a INT PRIMARY KEY, data VARCHAR(30000)) ENGINE=Innodb;
@@ -130,13 +132,18 @@ source include/diff_master_slave.inc;
# [ On Slave ]
SET GLOBAL max_binlog_cache_size = 4096;
SET GLOBAL binlog_cache_size = 4096;
+SET GLOBAL max_binlog_stmt_cache_size = 4096;
+SET GLOBAL binlog_stmt_cache_size = 4096;
include/stop_slave.inc
include/start_slave.inc
CALL mtr.add_suppression("Multi-statement transaction required more than 'max_binlog_cache_size' bytes of storage.*");
+CALL mtr.add_suppression("Multi-statement transaction required more than 'max_binlog_stmt_cache_size' bytes of storage.*");
CALL mtr.add_suppression("Writing one row to the row-based binary log failed.*");
TRUNCATE t1;
SET GLOBAL max_binlog_cache_size= ORIGINAL_VALUE;
SET GLOBAL binlog_cache_size= ORIGINAL_VALUE;
+SET GLOBAL max_binlog_stmt_cache_size= ORIGINAL_VALUE;
+SET GLOBAL binlog_stmt_cache_size= ORIGINAL_VALUE;
BEGIN;
Repeat statement 'INSERT INTO t1 VALUES($n, repeat("a", 32))' 128 times
COMMIT;
@@ -147,6 +154,8 @@ show binlog events in 'slave-bin.000001' from <binlog_start>;
Log_name Pos Event_type Server_id End_log_pos Info
SET GLOBAL max_binlog_cache_size= ORIGINAL_VALUE;
SET GLOBAL binlog_cache_size= ORIGINAL_VALUE;
+SET GLOBAL max_binlog_stmt_cache_size= ORIGINAL_VALUE;
+SET GLOBAL binlog_stmt_cache_size= ORIGINAL_VALUE;
include/stop_slave.inc
include/start_slave.inc
SELECT count(*) FROM t1;
diff --git a/mysql-test/suite/rpl/r/rpl_stm_binlog_max_cache_size.result b/mysql-test/suite/rpl/r/rpl_stm_binlog_max_cache_size.result
index 479caed8e6b..c7f2ffab47a 100644
--- a/mysql-test/suite/rpl/r/rpl_stm_binlog_max_cache_size.result
+++ b/mysql-test/suite/rpl/r/rpl_stm_binlog_max_cache_size.result
@@ -7,6 +7,8 @@ start slave;
call mtr.add_suppression("Unsafe statement written to the binary log using statement format since BINLOG_FORMAT = STATEMENT");
SET GLOBAL max_binlog_cache_size = 4096;
SET GLOBAL binlog_cache_size = 4096;
+SET GLOBAL max_binlog_stmt_cache_size = 4096;
+SET GLOBAL binlog_stmt_cache_size = 4096;
CREATE TABLE t1(a INT PRIMARY KEY, data VARCHAR(30000)) ENGINE=Innodb;
CREATE TABLE t2(a INT PRIMARY KEY, data VARCHAR(30000)) ENGINE=MyIsam;
CREATE TABLE t3(a INT PRIMARY KEY, data VARCHAR(30000)) ENGINE=Innodb;
@@ -129,13 +131,18 @@ source include/diff_master_slave.inc;
# [ On Slave ]
SET GLOBAL max_binlog_cache_size = 4096;
SET GLOBAL binlog_cache_size = 4096;
+SET GLOBAL max_binlog_stmt_cache_size = 4096;
+SET GLOBAL binlog_stmt_cache_size = 4096;
include/stop_slave.inc
include/start_slave.inc
CALL mtr.add_suppression("Multi-statement transaction required more than 'max_binlog_cache_size' bytes of storage.*");
+CALL mtr.add_suppression("Multi-statement transaction required more than 'max_binlog_stmt_cache_size' bytes of storage.*");
CALL mtr.add_suppression("Writing one row to the row-based binary log failed.*");
TRUNCATE t1;
SET GLOBAL max_binlog_cache_size= ORIGINAL_VALUE;
SET GLOBAL binlog_cache_size= ORIGINAL_VALUE;
+SET GLOBAL max_binlog_stmt_cache_size= ORIGINAL_VALUE;
+SET GLOBAL binlog_stmt_cache_size= ORIGINAL_VALUE;
BEGIN;
Repeat statement 'INSERT INTO t1 VALUES($n, repeat("a", 32))' 128 times
COMMIT;
@@ -146,6 +153,8 @@ show binlog events in 'slave-bin.000001' from <binlog_start>;
Log_name Pos Event_type Server_id End_log_pos Info
SET GLOBAL max_binlog_cache_size= ORIGINAL_VALUE;
SET GLOBAL binlog_cache_size= ORIGINAL_VALUE;
+SET GLOBAL max_binlog_stmt_cache_size= ORIGINAL_VALUE;
+SET GLOBAL binlog_stmt_cache_size= ORIGINAL_VALUE;
include/stop_slave.inc
include/start_slave.inc
SELECT count(*) FROM t1;
diff --git a/mysql-test/suite/sys_vars/inc/binlog_stmt_cache_size_basic.inc b/mysql-test/suite/sys_vars/inc/binlog_stmt_cache_size_basic.inc
new file mode 100644
index 00000000000..f5df54b7acd
--- /dev/null
+++ b/mysql-test/suite/sys_vars/inc/binlog_stmt_cache_size_basic.inc
@@ -0,0 +1,154 @@
+################ mysql-test\t\binlog_stmt_cache_size_basic.test ################
+# #
+# Variable Name: binlog_stmt_cache_size #
+# Scope: GLOBAL #
+# Access Type: Dynamic #
+# Data Type: Numeric #
+# Default Value: 32768 #
+# Range: 4096 - 4294967295 #
+# #
+# #
+# Creation Date: 2010-10-12 #
+# Author: Alfranio Correia #
+# #
+# Description: Test Cases of Dynamic System Variable "binlog_stmt_cache_size" #
+# that checks behavior of this variable in the following ways #
+# * Default Value #
+# * Valid & Invalid values #
+# * Scope & Access method #
+# * Data Integrity . #
+# #
+# Reference: http://dev.mysql.com/doc/refman/5.5/en/ #
+# server-system-variables.html#option_mysqld_binlog_stmt_cache_size #
+# #
+################################################################################
+
+#################################################################
+# START OF binlog_stmt_cache_size TESTS #
+#################################################################
+
+#########################################################################
+# Saving initial value of binlog_stmt_cache_size in a temporary variable #
+#########################################################################
+
+SET @start_value = @@global.binlog_stmt_cache_size;
+SELECT @start_value;
+
+--echo '#--------------------FN_DYNVARS_006_01------------------------#'
+#########################################################################
+# Display the DEFAULT value of binlog_stmt_cache_size #
+#########################################################################
+
+SET @@global.binlog_stmt_cache_size = 100;
+SET @@global.binlog_stmt_cache_size = DEFAULT;
+SELECT @@global.binlog_stmt_cache_size;
+
+
+--echo '#---------------------FN_DYNVARS_006_02-------------------------#'
+###############################################
+# Verify default value of variable #
+###############################################
+
+SET @@global.binlog_stmt_cache_size = @start_value;
+SELECT @@global.binlog_stmt_cache_size = 32768;
+
+
+--echo '#--------------------FN_DYNVARS_006_03------------------------#'
+#########################################################################
+# Change the value of binlog_stmt_cache_size to a valid value #
+#########################################################################
+
+SET @@global.binlog_stmt_cache_size = 4096;
+SELECT @@global.binlog_stmt_cache_size;
+SET @@global.binlog_stmt_cache_size = 4294967295;
+SELECT @@global.binlog_stmt_cache_size;
+SET @@global.binlog_stmt_cache_size = 10000;
+SELECT @@global.binlog_stmt_cache_size;
+SET @@global.binlog_stmt_cache_size = 21221204;
+SELECT @@global.binlog_stmt_cache_size;
+echo 'Bug: Invalid values are coming in variable on assigning valid values';
+
+
+--echo '#--------------------FN_DYNVARS_006_04-------------------------#'
+############################################################################
+# Change the value of binlog_stmt_cache_size to invalid value #
+############################################################################
+
+SET @@global.binlog_stmt_cache_size = 1024;
+SELECT @@global.binlog_stmt_cache_size;
+--Error ER_WRONG_TYPE_FOR_VAR
+SET @@global.binlog_stmt_cache_size = 10000.01;
+SET @@global.binlog_stmt_cache_size = -1024;
+SELECT @@global.binlog_stmt_cache_size;
+SET @@global.binlog_stmt_cache_size = 42949672950;
+SELECT @@global.binlog_stmt_cache_size;
+echo 'Bug: Errors are not coming on assigning invalid values to variable';
+
+--Error ER_WRONG_TYPE_FOR_VAR
+SET @@global.binlog_stmt_cache_size = ON;
+
+--Error ER_WRONG_TYPE_FOR_VAR
+SET @@global.binlog_stmt_cache_size = 'test';
+
+
+--echo '#-------------------FN_DYNVARS_006_05----------------------------#'
+############################################################################
+# Test if accessing session binlog_stmt_cache_size gives error #
+############################################################################
+
+--Error ER_GLOBAL_VARIABLE
+SET @@session.binlog_stmt_cache_size = 0;
+
+
+--echo '#----------------------FN_DYNVARS_006_06------------------------#'
+##############################################################################
+# Check if the value in GLOBAL Tables matches values in variable #
+##############################################################################
+
+SELECT @@global.binlog_stmt_cache_size = VARIABLE_VALUE FROM INFORMATION_SCHEMA.GLOBAL_VARIABLES WHERE VARIABLE_NAME='binlog_stmt_cache_size';
+
+--echo '#---------------------FN_DYNVARS_006_07----------------------#'
+###################################################################
+# Check if TRUE and FALSE values can be used on variable #
+###################################################################
+
+SET @@global.binlog_stmt_cache_size = TRUE;
+SELECT @@global.binlog_stmt_cache_size;
+SET @@global.binlog_stmt_cache_size = FALSE;
+SELECT @@global.binlog_stmt_cache_size;
+echo 'Bug: Errors are not coming on assigning TRUE/FALSE to variable';
+
+--echo '#---------------------FN_DYNVARS_006_08----------------------#'
+###############################################################################
+# Check if accessing variable without SCOPE points to same global variable #
+###############################################################################
+
+SET @@global.binlog_stmt_cache_size = 1;
+SELECT @@binlog_stmt_cache_size = @@global.binlog_stmt_cache_size;
+
+--echo '#---------------------FN_DYNVARS_006_09----------------------#'
+###########################################################################
+# Check if binlog_stmt_cache_size can be accessed with and without @@ sign#
+###########################################################################
+
+--Error ER_GLOBAL_VARIABLE
+SET binlog_stmt_cache_size = 1;
+--Error ER_PARSE_ERROR
+SET global.binlog_stmt_cache_size = 1;
+--Error ER_UNKNOWN_TABLE
+SELECT global.binlog_stmt_cache_size;
+--Error ER_BAD_FIELD_ERROR
+SELECT binlog_stmt_cache_size = @@session.binlog_stmt_cache_size;
+
+
+##############################
+# Restore initial value #
+##############################
+
+SET @@global.binlog_stmt_cache_size = @start_value;
+SELECT @@global.binlog_stmt_cache_size;
+
+
+###########################################################
+# END OF binlog_stmt_cache_size TESTS #
+###########################################################
diff --git a/mysql-test/suite/sys_vars/r/binlog_stmt_cache_size_basic_32.result b/mysql-test/suite/sys_vars/r/binlog_stmt_cache_size_basic_32.result
new file mode 100644
index 00000000000..604f671d5a4
--- /dev/null
+++ b/mysql-test/suite/sys_vars/r/binlog_stmt_cache_size_basic_32.result
@@ -0,0 +1,108 @@
+SET @start_value = @@global.binlog_stmt_cache_size;
+SELECT @start_value;
+@start_value
+32768
+'#--------------------FN_DYNVARS_006_01------------------------#'
+SET @@global.binlog_stmt_cache_size = 100;
+Warnings:
+Warning 1292 Truncated incorrect binlog_stmt_cache_size value: '100'
+SET @@global.binlog_stmt_cache_size = DEFAULT;
+SELECT @@global.binlog_stmt_cache_size;
+@@global.binlog_stmt_cache_size
+32768
+'#---------------------FN_DYNVARS_006_02-------------------------#'
+SET @@global.binlog_stmt_cache_size = @start_value;
+SELECT @@global.binlog_stmt_cache_size = 32768;
+@@global.binlog_stmt_cache_size = 32768
+1
+'#--------------------FN_DYNVARS_006_03------------------------#'
+SET @@global.binlog_stmt_cache_size = 4096;
+SELECT @@global.binlog_stmt_cache_size;
+@@global.binlog_stmt_cache_size
+4096
+SET @@global.binlog_stmt_cache_size = 4294967295;
+Warnings:
+Warning 1292 Truncated incorrect binlog_stmt_cache_size value: '4294967295'
+SELECT @@global.binlog_stmt_cache_size;
+@@global.binlog_stmt_cache_size
+4294963200
+SET @@global.binlog_stmt_cache_size = 10000;
+Warnings:
+Warning 1292 Truncated incorrect binlog_stmt_cache_size value: '10000'
+SELECT @@global.binlog_stmt_cache_size;
+@@global.binlog_stmt_cache_size
+8192
+SET @@global.binlog_stmt_cache_size = 21221204;
+Warnings:
+Warning 1292 Truncated incorrect binlog_stmt_cache_size value: '21221204'
+SELECT @@global.binlog_stmt_cache_size;
+@@global.binlog_stmt_cache_size
+21217280
+'Bug: Invalid values are coming in variable on assigning valid values'
+'#--------------------FN_DYNVARS_006_04-------------------------#'
+SET @@global.binlog_stmt_cache_size = 1024;
+Warnings:
+Warning 1292 Truncated incorrect binlog_stmt_cache_size value: '1024'
+SELECT @@global.binlog_stmt_cache_size;
+@@global.binlog_stmt_cache_size
+4096
+SET @@global.binlog_stmt_cache_size = 10000.01;
+ERROR 42000: Incorrect argument type to variable 'binlog_stmt_cache_size'
+SET @@global.binlog_stmt_cache_size = -1024;
+Warnings:
+Warning 1292 Truncated incorrect binlog_stmt_cache_size value: '-1024'
+SELECT @@global.binlog_stmt_cache_size;
+@@global.binlog_stmt_cache_size
+4096
+SET @@global.binlog_stmt_cache_size = 42949672950;
+Warnings:
+Warning 1292 Truncated incorrect binlog_stmt_cache_size value: '42949672950'
+SELECT @@global.binlog_stmt_cache_size;
+@@global.binlog_stmt_cache_size
+4294963200
+'Bug: Errors are not coming on assigning invalid values to variable'
+SET @@global.binlog_stmt_cache_size = ON;
+ERROR 42000: Incorrect argument type to variable 'binlog_stmt_cache_size'
+SET @@global.binlog_stmt_cache_size = 'test';
+ERROR 42000: Incorrect argument type to variable 'binlog_stmt_cache_size'
+'#-------------------FN_DYNVARS_006_05----------------------------#'
+SET @@session.binlog_stmt_cache_size = 0;
+ERROR HY000: Variable 'binlog_stmt_cache_size' is a GLOBAL variable and should be set with SET GLOBAL
+'#----------------------FN_DYNVARS_006_06------------------------#'
+SELECT @@global.binlog_stmt_cache_size = VARIABLE_VALUE FROM INFORMATION_SCHEMA.GLOBAL_VARIABLES WHERE VARIABLE_NAME='binlog_stmt_cache_size';
+@@global.binlog_stmt_cache_size = VARIABLE_VALUE
+1
+'#---------------------FN_DYNVARS_006_07----------------------#'
+SET @@global.binlog_stmt_cache_size = TRUE;
+Warnings:
+Warning 1292 Truncated incorrect binlog_stmt_cache_size value: '1'
+SELECT @@global.binlog_stmt_cache_size;
+@@global.binlog_stmt_cache_size
+4096
+SET @@global.binlog_stmt_cache_size = FALSE;
+Warnings:
+Warning 1292 Truncated incorrect binlog_stmt_cache_size value: '0'
+SELECT @@global.binlog_stmt_cache_size;
+@@global.binlog_stmt_cache_size
+4096
+'Bug: Errors are not coming on assigning TRUE/FALSE to variable'
+'#---------------------FN_DYNVARS_006_08----------------------#'
+SET @@global.binlog_stmt_cache_size = 1;
+Warnings:
+Warning 1292 Truncated incorrect binlog_stmt_cache_size value: '1'
+SELECT @@binlog_stmt_cache_size = @@global.binlog_stmt_cache_size;
+@@binlog_stmt_cache_size = @@global.binlog_stmt_cache_size
+1
+'#---------------------FN_DYNVARS_006_09----------------------#'
+SET binlog_stmt_cache_size = 1;
+ERROR HY000: Variable 'binlog_stmt_cache_size' is a GLOBAL variable and should be set with SET GLOBAL
+SET global.binlog_stmt_cache_size = 1;
+ERROR 42000: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'binlog_stmt_cache_size = 1' at line 1
+SELECT global.binlog_stmt_cache_size;
+ERROR 42S02: Unknown table 'global' in field list
+SELECT binlog_stmt_cache_size = @@session.binlog_stmt_cache_size;
+ERROR 42S22: Unknown column 'binlog_stmt_cache_size' in 'field list'
+SET @@global.binlog_stmt_cache_size = @start_value;
+SELECT @@global.binlog_stmt_cache_size;
+@@global.binlog_stmt_cache_size
+32768
diff --git a/mysql-test/suite/sys_vars/r/binlog_stmt_cache_size_basic_64.result b/mysql-test/suite/sys_vars/r/binlog_stmt_cache_size_basic_64.result
new file mode 100644
index 00000000000..604f671d5a4
--- /dev/null
+++ b/mysql-test/suite/sys_vars/r/binlog_stmt_cache_size_basic_64.result
@@ -0,0 +1,108 @@
+SET @start_value = @@global.binlog_stmt_cache_size;
+SELECT @start_value;
+@start_value
+32768
+'#--------------------FN_DYNVARS_006_01------------------------#'
+SET @@global.binlog_stmt_cache_size = 100;
+Warnings:
+Warning 1292 Truncated incorrect binlog_stmt_cache_size value: '100'
+SET @@global.binlog_stmt_cache_size = DEFAULT;
+SELECT @@global.binlog_stmt_cache_size;
+@@global.binlog_stmt_cache_size
+32768
+'#---------------------FN_DYNVARS_006_02-------------------------#'
+SET @@global.binlog_stmt_cache_size = @start_value;
+SELECT @@global.binlog_stmt_cache_size = 32768;
+@@global.binlog_stmt_cache_size = 32768
+1
+'#--------------------FN_DYNVARS_006_03------------------------#'
+SET @@global.binlog_stmt_cache_size = 4096;
+SELECT @@global.binlog_stmt_cache_size;
+@@global.binlog_stmt_cache_size
+4096
+SET @@global.binlog_stmt_cache_size = 4294967295;
+Warnings:
+Warning 1292 Truncated incorrect binlog_stmt_cache_size value: '4294967295'
+SELECT @@global.binlog_stmt_cache_size;
+@@global.binlog_stmt_cache_size
+4294963200
+SET @@global.binlog_stmt_cache_size = 10000;
+Warnings:
+Warning 1292 Truncated incorrect binlog_stmt_cache_size value: '10000'
+SELECT @@global.binlog_stmt_cache_size;
+@@global.binlog_stmt_cache_size
+8192
+SET @@global.binlog_stmt_cache_size = 21221204;
+Warnings:
+Warning 1292 Truncated incorrect binlog_stmt_cache_size value: '21221204'
+SELECT @@global.binlog_stmt_cache_size;
+@@global.binlog_stmt_cache_size
+21217280
+'Bug: Invalid values are coming in variable on assigning valid values'
+'#--------------------FN_DYNVARS_006_04-------------------------#'
+SET @@global.binlog_stmt_cache_size = 1024;
+Warnings:
+Warning 1292 Truncated incorrect binlog_stmt_cache_size value: '1024'
+SELECT @@global.binlog_stmt_cache_size;
+@@global.binlog_stmt_cache_size
+4096
+SET @@global.binlog_stmt_cache_size = 10000.01;
+ERROR 42000: Incorrect argument type to variable 'binlog_stmt_cache_size'
+SET @@global.binlog_stmt_cache_size = -1024;
+Warnings:
+Warning 1292 Truncated incorrect binlog_stmt_cache_size value: '-1024'
+SELECT @@global.binlog_stmt_cache_size;
+@@global.binlog_stmt_cache_size
+4096
+SET @@global.binlog_stmt_cache_size = 42949672950;
+Warnings:
+Warning 1292 Truncated incorrect binlog_stmt_cache_size value: '42949672950'
+SELECT @@global.binlog_stmt_cache_size;
+@@global.binlog_stmt_cache_size
+4294963200
+'Bug: Errors are not coming on assigning invalid values to variable'
+SET @@global.binlog_stmt_cache_size = ON;
+ERROR 42000: Incorrect argument type to variable 'binlog_stmt_cache_size'
+SET @@global.binlog_stmt_cache_size = 'test';
+ERROR 42000: Incorrect argument type to variable 'binlog_stmt_cache_size'
+'#-------------------FN_DYNVARS_006_05----------------------------#'
+SET @@session.binlog_stmt_cache_size = 0;
+ERROR HY000: Variable 'binlog_stmt_cache_size' is a GLOBAL variable and should be set with SET GLOBAL
+'#----------------------FN_DYNVARS_006_06------------------------#'
+SELECT @@global.binlog_stmt_cache_size = VARIABLE_VALUE FROM INFORMATION_SCHEMA.GLOBAL_VARIABLES WHERE VARIABLE_NAME='binlog_stmt_cache_size';
+@@global.binlog_stmt_cache_size = VARIABLE_VALUE
+1
+'#---------------------FN_DYNVARS_006_07----------------------#'
+SET @@global.binlog_stmt_cache_size = TRUE;
+Warnings:
+Warning 1292 Truncated incorrect binlog_stmt_cache_size value: '1'
+SELECT @@global.binlog_stmt_cache_size;
+@@global.binlog_stmt_cache_size
+4096
+SET @@global.binlog_stmt_cache_size = FALSE;
+Warnings:
+Warning 1292 Truncated incorrect binlog_stmt_cache_size value: '0'
+SELECT @@global.binlog_stmt_cache_size;
+@@global.binlog_stmt_cache_size
+4096
+'Bug: Errors are not coming on assigning TRUE/FALSE to variable'
+'#---------------------FN_DYNVARS_006_08----------------------#'
+SET @@global.binlog_stmt_cache_size = 1;
+Warnings:
+Warning 1292 Truncated incorrect binlog_stmt_cache_size value: '1'
+SELECT @@binlog_stmt_cache_size = @@global.binlog_stmt_cache_size;
+@@binlog_stmt_cache_size = @@global.binlog_stmt_cache_size
+1
+'#---------------------FN_DYNVARS_006_09----------------------#'
+SET binlog_stmt_cache_size = 1;
+ERROR HY000: Variable 'binlog_stmt_cache_size' is a GLOBAL variable and should be set with SET GLOBAL
+SET global.binlog_stmt_cache_size = 1;
+ERROR 42000: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'binlog_stmt_cache_size = 1' at line 1
+SELECT global.binlog_stmt_cache_size;
+ERROR 42S02: Unknown table 'global' in field list
+SELECT binlog_stmt_cache_size = @@session.binlog_stmt_cache_size;
+ERROR 42S22: Unknown column 'binlog_stmt_cache_size' in 'field list'
+SET @@global.binlog_stmt_cache_size = @start_value;
+SELECT @@global.binlog_stmt_cache_size;
+@@global.binlog_stmt_cache_size
+32768
diff --git a/mysql-test/suite/sys_vars/r/max_binlog_stmt_cache_size_basic.result b/mysql-test/suite/sys_vars/r/max_binlog_stmt_cache_size_basic.result
new file mode 100644
index 00000000000..f2229a0090b
--- /dev/null
+++ b/mysql-test/suite/sys_vars/r/max_binlog_stmt_cache_size_basic.result
@@ -0,0 +1,152 @@
+SET @start_value = @@global.max_binlog_stmt_cache_size;
+SELECT @start_value;
+@start_value
+18446744073709547520
+'#--------------------FN_DYNVARS_072_01------------------------#'
+SET @@global.max_binlog_stmt_cache_size = 5000;
+Warnings:
+Warning 1292 Truncated incorrect max_binlog_stmt_cache_size value: '5000'
+SET @@global.max_binlog_stmt_cache_size = DEFAULT;
+SELECT @@global.max_binlog_stmt_cache_size;
+@@global.max_binlog_stmt_cache_size
+18446744073709547520
+'#---------------------FN_DYNVARS_072_02-------------------------#'
+SET @@global.max_binlog_stmt_cache_size = @start_value;
+SELECT @@global.max_binlog_stmt_cache_size = 4294967295;
+@@global.max_binlog_stmt_cache_size = 4294967295
+0
+'#--------------------FN_DYNVARS_072_03------------------------#'
+SET @@global.max_binlog_stmt_cache_size = 4096;
+SELECT @@global.max_binlog_stmt_cache_size;
+@@global.max_binlog_stmt_cache_size
+4096
+SET @@global.max_binlog_stmt_cache_size = 4294967295;
+Warnings:
+Warning 1292 Truncated incorrect max_binlog_stmt_cache_size value: '4294967295'
+SELECT @@global.max_binlog_stmt_cache_size;
+@@global.max_binlog_stmt_cache_size
+4294963200
+SET @@global.max_binlog_stmt_cache_size = 4294967294;
+Warnings:
+Warning 1292 Truncated incorrect max_binlog_stmt_cache_size value: '4294967294'
+SELECT @@global.max_binlog_stmt_cache_size;
+@@global.max_binlog_stmt_cache_size
+4294963200
+SET @@global.max_binlog_stmt_cache_size = 4097;
+Warnings:
+Warning 1292 Truncated incorrect max_binlog_stmt_cache_size value: '4097'
+SELECT @@global.max_binlog_stmt_cache_size;
+@@global.max_binlog_stmt_cache_size
+4096
+SET @@global.max_binlog_stmt_cache_size = 65535;
+Warnings:
+Warning 1292 Truncated incorrect max_binlog_stmt_cache_size value: '65535'
+SELECT @@global.max_binlog_stmt_cache_size;
+@@global.max_binlog_stmt_cache_size
+61440
+'#--------------------FN_DYNVARS_072_04-------------------------#'
+SET @@global.max_binlog_stmt_cache_size = -1;
+Warnings:
+Warning 1292 Truncated incorrect max_binlog_stmt_cache_size value: '-1'
+SELECT @@global.max_binlog_stmt_cache_size;
+@@global.max_binlog_stmt_cache_size
+4096
+SET @@global.max_binlog_stmt_cache_size = 100000000000;
+Warnings:
+Warning 1292 Truncated incorrect max_binlog_stmt_cache_size value: '100000000000'
+SELECT @@global.max_binlog_stmt_cache_size;
+@@global.max_binlog_stmt_cache_size
+99999997952
+SET @@global.max_binlog_stmt_cache_size = 10000.01;
+ERROR 42000: Incorrect argument type to variable 'max_binlog_stmt_cache_size'
+SELECT @@global.max_binlog_stmt_cache_size;
+@@global.max_binlog_stmt_cache_size
+99999997952
+SET @@global.max_binlog_stmt_cache_size = -1024;
+Warnings:
+Warning 1292 Truncated incorrect max_binlog_stmt_cache_size value: '-1024'
+SELECT @@global.max_binlog_stmt_cache_size;
+@@global.max_binlog_stmt_cache_size
+4096
+SET @@global.max_binlog_stmt_cache_size = 1024;
+Warnings:
+Warning 1292 Truncated incorrect max_binlog_stmt_cache_size value: '1024'
+SELECT @@global.max_binlog_stmt_cache_size;
+@@global.max_binlog_stmt_cache_size
+4096
+SET @@global.max_binlog_stmt_cache_size = 4294967296;
+SELECT @@global.max_binlog_stmt_cache_size;
+@@global.max_binlog_stmt_cache_size
+4294967296
+SET @@global.max_binlog_stmt_cache_size = 4095;
+Warnings:
+Warning 1292 Truncated incorrect max_binlog_stmt_cache_size value: '4095'
+SELECT @@global.max_binlog_stmt_cache_size;
+@@global.max_binlog_stmt_cache_size
+4096
+SET @@global.max_binlog_stmt_cache_size = ON;
+ERROR 42000: Incorrect argument type to variable 'max_binlog_stmt_cache_size'
+SELECT @@global.max_binlog_stmt_cache_size;
+@@global.max_binlog_stmt_cache_size
+4096
+SET @@global.max_binlog_stmt_cache_size = 'test';
+ERROR 42000: Incorrect argument type to variable 'max_binlog_stmt_cache_size'
+SELECT @@global.max_binlog_stmt_cache_size;
+@@global.max_binlog_stmt_cache_size
+4096
+'#-------------------FN_DYNVARS_072_05----------------------------#'
+SET @@session.max_binlog_stmt_cache_size = 4096;
+ERROR HY000: Variable 'max_binlog_stmt_cache_size' is a GLOBAL variable and should be set with SET GLOBAL
+SELECT @@session.max_binlog_stmt_cache_size;
+ERROR HY000: Variable 'max_binlog_stmt_cache_size' is a GLOBAL variable
+'#----------------------FN_DYNVARS_072_06------------------------#'
+SELECT @@global.max_binlog_stmt_cache_size = VARIABLE_VALUE
+FROM INFORMATION_SCHEMA.GLOBAL_VARIABLES
+WHERE VARIABLE_NAME='max_binlog_stmt_cache_size';
+@@global.max_binlog_stmt_cache_size = VARIABLE_VALUE
+1
+SELECT @@max_binlog_stmt_cache_size = VARIABLE_VALUE
+FROM INFORMATION_SCHEMA.SESSION_VARIABLES
+WHERE VARIABLE_NAME='max_binlog_stmt_cache_size';
+@@max_binlog_stmt_cache_size = VARIABLE_VALUE
+1
+'#---------------------FN_DYNVARS_072_07----------------------#'
+SET @@global.max_binlog_stmt_cache_size = TRUE;
+Warnings:
+Warning 1292 Truncated incorrect max_binlog_stmt_cache_size value: '1'
+SELECT @@global.max_binlog_stmt_cache_size;
+@@global.max_binlog_stmt_cache_size
+4096
+SET @@global.max_binlog_stmt_cache_size = FALSE;
+Warnings:
+Warning 1292 Truncated incorrect max_binlog_stmt_cache_size value: '0'
+SELECT @@global.max_binlog_stmt_cache_size;
+@@global.max_binlog_stmt_cache_size
+4096
+'#---------------------FN_DYNVARS_072_08----------------------#'
+SET @@global.max_binlog_stmt_cache_size = 5000;
+Warnings:
+Warning 1292 Truncated incorrect max_binlog_stmt_cache_size value: '5000'
+SELECT @@max_binlog_stmt_cache_size = @@global.max_binlog_stmt_cache_size;
+@@max_binlog_stmt_cache_size = @@global.max_binlog_stmt_cache_size
+1
+'#---------------------FN_DYNVARS_072_09----------------------#'
+SET max_binlog_stmt_cache_size = 6000;
+ERROR HY000: Variable 'max_binlog_stmt_cache_size' is a GLOBAL variable and should be set with SET GLOBAL
+SELECT @@max_binlog_stmt_cache_size;
+@@max_binlog_stmt_cache_size
+4096
+SET local.max_binlog_stmt_cache_size = 7000;
+ERROR 42000: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'max_binlog_stmt_cache_size = 7000' at line 1
+SELECT local.max_binlog_stmt_cache_size;
+ERROR 42S02: Unknown table 'local' in field list
+SET global.max_binlog_stmt_cache_size = 8000;
+ERROR 42000: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'max_binlog_stmt_cache_size = 8000' at line 1
+SELECT global.max_binlog_stmt_cache_size;
+ERROR 42S02: Unknown table 'global' in field list
+SELECT max_binlog_stmt_cache_size = @@session.max_binlog_stmt_cache_size;
+ERROR 42S22: Unknown column 'max_binlog_stmt_cache_size' in 'field list'
+SET @@global.max_binlog_stmt_cache_size = @start_value;
+SELECT @@global.max_binlog_stmt_cache_size;
+@@global.max_binlog_stmt_cache_size
+18446744073709547520
diff --git a/mysql-test/suite/sys_vars/t/binlog_stmt_cache_size_basic_32.test b/mysql-test/suite/sys_vars/t/binlog_stmt_cache_size_basic_32.test
new file mode 100644
index 00000000000..fe8f89ccc16
--- /dev/null
+++ b/mysql-test/suite/sys_vars/t/binlog_stmt_cache_size_basic_32.test
@@ -0,0 +1,7 @@
+################################################################################
+# Wrapper for 32 bit machines #
+################################################################################
+
+--source include/have_32bit.inc
+--source suite/sys_vars/inc/binlog_stmt_cache_size_basic.inc
+
diff --git a/mysql-test/suite/sys_vars/t/binlog_stmt_cache_size_basic_64.test b/mysql-test/suite/sys_vars/t/binlog_stmt_cache_size_basic_64.test
new file mode 100644
index 00000000000..c4a2c95d42b
--- /dev/null
+++ b/mysql-test/suite/sys_vars/t/binlog_stmt_cache_size_basic_64.test
@@ -0,0 +1,7 @@
+################################################################################
+# Wrapper for 64 bit machines #
+################################################################################
+
+--source include/have_64bit.inc
+--source suite/sys_vars/inc/binlog_stmt_cache_size_basic.inc
+
diff --git a/mysql-test/suite/sys_vars/t/max_binlog_cache_size_func-master.opt b/mysql-test/suite/sys_vars/t/max_binlog_cache_size_func-master.opt
deleted file mode 100644
index 6e00d7157d6..00000000000
--- a/mysql-test/suite/sys_vars/t/max_binlog_cache_size_func-master.opt
+++ /dev/null
@@ -1,2 +0,0 @@
---log-bin
---innodb
diff --git a/mysql-test/suite/sys_vars/t/max_binlog_stmt_cache_size_basic.test b/mysql-test/suite/sys_vars/t/max_binlog_stmt_cache_size_basic.test
new file mode 100644
index 00000000000..07a030c35a7
--- /dev/null
+++ b/mysql-test/suite/sys_vars/t/max_binlog_stmt_cache_size_basic.test
@@ -0,0 +1,184 @@
+############ mysql-test\t\max_binlog_stmt_cache_size_basic.test ###############
+# #
+# Variable Name: max_binlog_stmt_cache_size #
+# Scope: GLOBAL #
+# Access Type: Dynamic #
+# Data Type: numeric #
+# Default Value:4294967295 #
+# Range: 4096-4294967295 #
+# #
+# #
+# #
+# #
+# #
+# Creation Date: 2010-11-05 #
+# Author: Alfranio #
+# #
+# Description: Test Cases of Dynamic System Variable #
+# max_binlog_stmt_cache_size that checks #
+# the behavior of this variable in the following ways #
+# * Default Value #
+# * Valid & Invalid values #
+# * Scope & Access method #
+# * Data Integrity #
+# #
+# Reference: http://dev.mysql.com/doc/refman/5.5/en/ #
+# server-system-variables.html #
+# #
+###############################################################################
+
+--source include/load_sysvars.inc
+
+##########################################################################
+# START OF max_binlog_stmt_cache_size TESTS #
+##########################################################################
+
+
+##############################################################################
+# Saving initial value of max_binlog_stmt_cache_size in a temporary variable #
+##############################################################################
+
+SET @start_value = @@global.max_binlog_stmt_cache_size;
+SELECT @start_value;
+
+
+--echo '#--------------------FN_DYNVARS_072_01------------------------#'
+########################################################################
+# Display the DEFAULT value of max_binlog_stmt_cache_size #
+########################################################################
+
+SET @@global.max_binlog_stmt_cache_size = 5000;
+SET @@global.max_binlog_stmt_cache_size = DEFAULT;
+SELECT @@global.max_binlog_stmt_cache_size;
+
+
+--echo '#---------------------FN_DYNVARS_072_02-------------------------#'
+###############################################
+# Verify default value of variable #
+###############################################
+
+SET @@global.max_binlog_stmt_cache_size = @start_value;
+SELECT @@global.max_binlog_stmt_cache_size = 4294967295;
+
+--echo '#--------------------FN_DYNVARS_072_03------------------------#'
+########################################################################
+# Change the value of max_binlog_stmt_cache_size to a valid value #
+########################################################################
+
+SET @@global.max_binlog_stmt_cache_size = 4096;
+SELECT @@global.max_binlog_stmt_cache_size;
+SET @@global.max_binlog_stmt_cache_size = 4294967295;
+SELECT @@global.max_binlog_stmt_cache_size;
+SET @@global.max_binlog_stmt_cache_size = 4294967294;
+SELECT @@global.max_binlog_stmt_cache_size;
+SET @@global.max_binlog_stmt_cache_size = 4097;
+SELECT @@global.max_binlog_stmt_cache_size;
+SET @@global.max_binlog_stmt_cache_size = 65535;
+SELECT @@global.max_binlog_stmt_cache_size;
+
+
+--echo '#--------------------FN_DYNVARS_072_04-------------------------#'
+###########################################################################
+# Change the value of max_binlog_stmt_cache_size to invalid value #
+###########################################################################
+
+SET @@global.max_binlog_stmt_cache_size = -1;
+SELECT @@global.max_binlog_stmt_cache_size;
+SET @@global.max_binlog_stmt_cache_size = 100000000000;
+SELECT @@global.max_binlog_stmt_cache_size;
+--Error ER_WRONG_TYPE_FOR_VAR
+SET @@global.max_binlog_stmt_cache_size = 10000.01;
+SELECT @@global.max_binlog_stmt_cache_size;
+SET @@global.max_binlog_stmt_cache_size = -1024;
+SELECT @@global.max_binlog_stmt_cache_size;
+SET @@global.max_binlog_stmt_cache_size = 1024;
+SELECT @@global.max_binlog_stmt_cache_size;
+SET @@global.max_binlog_stmt_cache_size = 4294967296;
+SELECT @@global.max_binlog_stmt_cache_size;
+SET @@global.max_binlog_stmt_cache_size = 4095;
+SELECT @@global.max_binlog_stmt_cache_size;
+
+--Error ER_WRONG_TYPE_FOR_VAR
+SET @@global.max_binlog_stmt_cache_size = ON;
+SELECT @@global.max_binlog_stmt_cache_size;
+--Error ER_WRONG_TYPE_FOR_VAR
+SET @@global.max_binlog_stmt_cache_size = 'test';
+SELECT @@global.max_binlog_stmt_cache_size;
+
+
+--echo '#-------------------FN_DYNVARS_072_05----------------------------#'
+###########################################################################
+# Test if accessing session max_binlog_stmt_cache_size gives error #
+###########################################################################
+
+--Error ER_GLOBAL_VARIABLE
+SET @@session.max_binlog_stmt_cache_size = 4096;
+--Error ER_INCORRECT_GLOBAL_LOCAL_VAR
+SELECT @@session.max_binlog_stmt_cache_size;
+
+
+--echo '#----------------------FN_DYNVARS_072_06------------------------#'
+##############################################################################
+# Check if the value in GLOBAL & SESSION Tables matches values in variable #
+##############################################################################
+
+SELECT @@global.max_binlog_stmt_cache_size = VARIABLE_VALUE
+FROM INFORMATION_SCHEMA.GLOBAL_VARIABLES
+WHERE VARIABLE_NAME='max_binlog_stmt_cache_size';
+
+SELECT @@max_binlog_stmt_cache_size = VARIABLE_VALUE
+FROM INFORMATION_SCHEMA.SESSION_VARIABLES
+WHERE VARIABLE_NAME='max_binlog_stmt_cache_size';
+
+
+--echo '#---------------------FN_DYNVARS_072_07----------------------#'
+###################################################################
+# Check if TRUE and FALSE values can be used on variable #
+###################################################################
+
+SET @@global.max_binlog_stmt_cache_size = TRUE;
+SELECT @@global.max_binlog_stmt_cache_size;
+SET @@global.max_binlog_stmt_cache_size = FALSE;
+SELECT @@global.max_binlog_stmt_cache_size;
+
+
+--echo '#---------------------FN_DYNVARS_072_08----------------------#'
+########################################################################################################
+# Check if accessing variable with SESSION,LOCAL and without SCOPE points to same session variable #
+########################################################################################################
+
+SET @@global.max_binlog_stmt_cache_size = 5000;
+SELECT @@max_binlog_stmt_cache_size = @@global.max_binlog_stmt_cache_size;
+
+
+--echo '#---------------------FN_DYNVARS_072_09----------------------#'
+################################################################################
+# Check if max_binlog_stmt_cache_size can be accessed with and without @@ sign #
+################################################################################
+
+--Error ER_GLOBAL_VARIABLE
+SET max_binlog_stmt_cache_size = 6000;
+SELECT @@max_binlog_stmt_cache_size;
+--Error ER_PARSE_ERROR
+SET local.max_binlog_stmt_cache_size = 7000;
+--Error ER_UNKNOWN_TABLE
+SELECT local.max_binlog_stmt_cache_size;
+--Error ER_PARSE_ERROR
+SET global.max_binlog_stmt_cache_size = 8000;
+--Error ER_UNKNOWN_TABLE
+SELECT global.max_binlog_stmt_cache_size;
+--Error ER_BAD_FIELD_ERROR
+SELECT max_binlog_stmt_cache_size = @@session.max_binlog_stmt_cache_size;
+
+
+##############################
+# Restore initial value #
+##############################
+
+SET @@global.max_binlog_stmt_cache_size = @start_value;
+SELECT @@global.max_binlog_stmt_cache_size;
+
+
+########################################################################
+# END OF max_binlog_stmt_cache_size TESTS #
+########################################################################