diff options
author | unknown <mats@kindahl-laptop.dnsalias.net> | 2007-06-14 13:33:31 +0200 |
---|---|---|
committer | unknown <mats@kindahl-laptop.dnsalias.net> | 2007-06-14 13:33:31 +0200 |
commit | dd3ff42c54bebb09368864197781cabf458974bc (patch) | |
tree | cccf29528cc04fdc20414da7efd82c1769b908a4 | |
parent | 83d2257826731438aa6fd421bdbc8015ffb823e4 (diff) | |
download | mariadb-git-dd3ff42c54bebb09368864197781cabf458974bc.tar.gz |
BUG#23051 (READ COMMITTED breaks mixed and statement-based replication):
Temporarily using thd_tx_isolation() until decision is made on how to
get the isolation level.
storage/innobase/handler/ha_innodb.cc:
Using thd_tx_isolation() instead of direct access to variable.
mysql-test/r/binlog_tx_isolation.result:
New BitKeeper file ``mysql-test/r/binlog_tx_isolation.result''
-rw-r--r-- | mysql-test/r/binlog_tx_isolation.result | 48 | ||||
-rw-r--r-- | storage/innobase/handler/ha_innodb.cc | 2 |
2 files changed, 49 insertions, 1 deletions
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; |