summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorunknown <mats@kindahl-laptop.dnsalias.net>2007-06-14 13:33:31 +0200
committerunknown <mats@kindahl-laptop.dnsalias.net>2007-06-14 13:33:31 +0200
commitdd3ff42c54bebb09368864197781cabf458974bc (patch)
treecccf29528cc04fdc20414da7efd82c1769b908a4
parent83d2257826731438aa6fd421bdbc8015ffb823e4 (diff)
downloadmariadb-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.result48
-rw-r--r--storage/innobase/handler/ha_innodb.cc2
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;