diff --git a/mysql-test/r/binlog_tx_isolation.result b/mysql-test/r/binlog_tx_isolation.result new file mode 100644 index 00000000000..39aba22758d --- /dev/null +++ b/mysql-test/r/binlog_tx_isolation.result @@ -0,0 +1,48 @@ +CREATE TABLE t1 (a INT PRIMARY KEY, b INT) ENGINE=INNODB; +INSERT INTO t1 VALUES (1,1),(2,2),(3,3),(4,4),(5,5),(6,6); +SET BINLOG_FORMAT=STATEMENT; +BEGIN; +SET SESSION TRANSACTION ISOLATION LEVEL READ COMMITTED; +ERROR HY000: Transaction isolation level 'READ-COMMITTED' is not safe for 'STATEMENT' binlog mode +UPDATE t1 SET b = a*a WHERE a > 1; +COMMIT; +BEGIN; +SET SESSION TRANSACTION ISOLATION LEVEL READ UNCOMMITTED; +UPDATE t1 SET b = a*a WHERE a > 1; +COMMIT; +BEGIN; +SET SESSION TRANSACTION ISOLATION LEVEL SERIALIZABLE; +UPDATE t1 SET b = a*a WHERE a > 1; +COMMIT; +SET BINLOG_FORMAT=MIXED; +BEGIN; +SET SESSION TRANSACTION ISOLATION LEVEL READ COMMITTED; +ERROR HY000: Transaction isolation level 'READ-COMMITTED' is not safe for 'MIXED' binlog mode +UPDATE t1 SET b = a*a*a WHERE a > 2; +COMMIT; +SET BINLOG_FORMAT=ROW; +BEGIN; +SET SESSION TRANSACTION ISOLATION LEVEL READ COMMITTED; +UPDATE t1 SET b = a*a*a*a WHERE a > 3; +COMMIT; +SELECT @@session.tx_isolation, @@session.binlog_format; +@@session.tx_isolation READ-COMMITTED +@@session.binlog_format ROW +BEGIN; +SET SESSION TRANSACTION ISOLATION LEVEL READ COMMITTED; +SET BINLOG_FORMAT=MIXED; +ERROR HY000: Transaction isolation level 'READ-COMMITTED' prevents leaving 'ROW' binlog mode +UPDATE t1 SET b = a*a*a*a WHERE a > 3; +COMMIT; +SELECT @@session.tx_isolation, @@session.binlog_format; +@@session.tx_isolation READ-COMMITTED +@@session.binlog_format ROW +BEGIN; +SET SESSION TRANSACTION ISOLATION LEVEL READ COMMITTED; +SET BINLOG_FORMAT=STATEMENT; +ERROR HY000: Transaction isolation level 'READ-COMMITTED' prevents leaving 'ROW' binlog mode +UPDATE t1 SET b = a*a*a*a WHERE a > 3; +COMMIT; +SELECT @@session.tx_isolation, @@session.binlog_format; +@@session.tx_isolation READ-COMMITTED +@@session.binlog_format ROW diff --git a/storage/innobase/handler/ha_innodb.cc b/storage/innobase/handler/ha_innodb.cc index 3ec729fe3f8..e2c16ca193a 100644 --- a/storage/innobase/handler/ha_innodb.cc +++ b/storage/innobase/handler/ha_innodb.cc @@ -2285,7 +2285,7 @@ ha_innobase::table_flags() const is called from mysql_lock_tables()) until after this function has been called (which is called in lock_tables() before that function calls mysql_lock_tables()). */ - ulong const tx_isolation= thd->variables.tx_isolation; + ulong const tx_isolation= thd_tx_isolation(thd); if (tx_isolation <= ISO_READ_COMMITTED) { ulong const binlog_format= thd->variables.binlog_format;