mirror of
https://github.com/MariaDB/server.git
synced 2025-10-21 08:47:42 +03:00
replication): Patch to add binlog format capabilities to the InnoDB storage engine. The engine will not allow statement format logging when in READ COMMITTED or READ UNCOMMITTED transaction isolation level. In addition, an error is generated when trying to use READ COMMITTED or READ UNCOMMITTED transaction isolation level in STATEMENT binlog mode. sql/handler.h: Adding declaration of already global arrays. sql/share/errmsg.txt: Adding error messages for invalid changes of transaction isolation level and binlog mode switch. Removing messages that are not needed any more (this cset it pushed together with the cset that introduced these messages, so it is safe to remove the messages). sql/sql_base.cc: Some changes to error reporting code to get more informative messages. storage/innobase/handler/ha_innodb.cc: Adding capabilities to storage engine. Ha_innobase:table_flags() now compute flags on a per-statement basis and the statement capabilities flag is just set if the transaction isolation level is below READ COMMITTED. An informative message is printed in the event that the transaction isolation level is below READ COMMITTED and the binlog mode is STATEMENT. storage/innobase/handler/ha_innodb.h: Accomodating to changes in the server code that switched from ulong to Table_flags as type for the table flags. mysql-test/r/binlog_innodb.result: New BitKeeper file ``mysql-test/r/binlog_innodb.result'' mysql-test/t/binlog_innodb.test: New BitKeeper file ``mysql-test/t/binlog_innodb.test''
96 lines
2.0 KiB
Plaintext
96 lines
2.0 KiB
Plaintext
source include/have_innodb.inc;
|
|
|
|
SET BINLOG_FORMAT=MIXED;
|
|
|
|
RESET MASTER;
|
|
|
|
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);
|
|
|
|
BEGIN;
|
|
SET SESSION TRANSACTION ISOLATION LEVEL REPEATABLE READ;
|
|
# Should be logged as statement
|
|
UPDATE t1 SET b = 2*a WHERE a > 1;
|
|
COMMIT;
|
|
|
|
BEGIN;
|
|
SET SESSION TRANSACTION ISOLATION LEVEL READ COMMITTED;
|
|
# Should be logged as rows
|
|
UPDATE t1 SET b = a * a WHERE a > 3;
|
|
COMMIT;
|
|
|
|
# Check that errors are generated when trying to use READ COMMITTED
|
|
# transaction isolation level in STATEMENT binlog mode.
|
|
|
|
SET BINLOG_FORMAT=STATEMENT;
|
|
|
|
BEGIN;
|
|
SET SESSION TRANSACTION ISOLATION LEVEL READ UNCOMMITTED;
|
|
error ER_BINLOG_LOGGING_IMPOSSIBLE;
|
|
UPDATE t1 SET b = 1*a WHERE a > 1;
|
|
COMMIT;
|
|
|
|
BEGIN;
|
|
SET SESSION TRANSACTION ISOLATION LEVEL READ COMMITTED;
|
|
error ER_BINLOG_LOGGING_IMPOSSIBLE;
|
|
UPDATE t1 SET b = 2*a WHERE a > 2;
|
|
COMMIT;
|
|
|
|
BEGIN;
|
|
SET SESSION TRANSACTION ISOLATION LEVEL REPEATABLE READ;
|
|
UPDATE t1 SET b = 3*a WHERE a > 3;
|
|
COMMIT;
|
|
|
|
BEGIN;
|
|
SET SESSION TRANSACTION ISOLATION LEVEL SERIALIZABLE;
|
|
UPDATE t1 SET b = 4*a WHERE a > 4;
|
|
COMMIT;
|
|
|
|
SET BINLOG_FORMAT=MIXED;
|
|
|
|
BEGIN;
|
|
SET SESSION TRANSACTION ISOLATION LEVEL READ UNCOMMITTED;
|
|
UPDATE t1 SET b = 1*a WHERE a > 1;
|
|
COMMIT;
|
|
|
|
BEGIN;
|
|
SET SESSION TRANSACTION ISOLATION LEVEL READ COMMITTED;
|
|
UPDATE t1 SET b = 2*a WHERE a > 2;
|
|
COMMIT;
|
|
|
|
BEGIN;
|
|
SET SESSION TRANSACTION ISOLATION LEVEL REPEATABLE READ;
|
|
UPDATE t1 SET b = 3*a WHERE a > 3;
|
|
COMMIT;
|
|
|
|
BEGIN;
|
|
SET SESSION TRANSACTION ISOLATION LEVEL SERIALIZABLE;
|
|
UPDATE t1 SET b = 4*a WHERE a > 4;
|
|
COMMIT;
|
|
|
|
SET BINLOG_FORMAT=ROW;
|
|
|
|
BEGIN;
|
|
SET SESSION TRANSACTION ISOLATION LEVEL READ UNCOMMITTED;
|
|
UPDATE t1 SET b = 1*a WHERE a > 1;
|
|
COMMIT;
|
|
|
|
BEGIN;
|
|
SET SESSION TRANSACTION ISOLATION LEVEL READ COMMITTED;
|
|
UPDATE t1 SET b = 2*a WHERE a > 2;
|
|
COMMIT;
|
|
|
|
BEGIN;
|
|
SET SESSION TRANSACTION ISOLATION LEVEL REPEATABLE READ;
|
|
UPDATE t1 SET b = 3*a WHERE a > 3;
|
|
COMMIT;
|
|
|
|
BEGIN;
|
|
SET SESSION TRANSACTION ISOLATION LEVEL SERIALIZABLE;
|
|
UPDATE t1 SET b = 4*a WHERE a > 4;
|
|
COMMIT;
|
|
|
|
source include/show_binlog_events.inc;
|
|
|
|
DROP TABLE t1;
|