1
0
mirror of https://github.com/MariaDB/server.git synced 2025-08-08 11:22:35 +03:00

Bug #37221: SET AUTOCOMMIT=1 does not commit binary log

When setting AUTOCOMMIT=1 after starting a transaction, the binary log
did not commit the outstanding transaction. The reason was that the binary
log commit function saw the values of the new settings, deciding that there
were nothing to commit.

Fixed the problem by moving the implicit commit to before the thread option
flags were changed, so that the binary log sees the old values of the flags
instead of the values they will take after the statement.


mysql-test/extra/binlog_tests/implicit.test:
  New test file to check implicit commits both inside and outside transactions.
mysql-test/suite/binlog/t/binlog_implicit_commit.test:
  Test for implicit commit of SET AUTOCOMMIT and LOCK/UNLOCK TABLES.
sql/set_var.cc:
  Adding code to commit pending transaction before changing option flags.
This commit is contained in:
Mats Kindahl
2009-09-23 13:20:48 +02:00
parent 8249fd6eef
commit 124e830125
4 changed files with 445 additions and 2 deletions

View File

@@ -0,0 +1,28 @@
# First part: outside a transaction
RESET MASTER;
eval $prepare;
INSERT INTO t1 VALUES (1);
source include/show_binlog_events.inc;
eval $statement;
source include/show_binlog_events.inc;
if (`select '$cleanup' != ''`) {
eval $cleanup;
}
# Second part: inside a transaction
RESET MASTER;
eval $prepare;
BEGIN;
INSERT INTO t1 VALUES (2);
source include/show_binlog_events.inc;
eval $statement;
source include/show_binlog_events.inc;
INSERT INTO t1 VALUES (3);
source include/show_binlog_events.inc;
COMMIT;
source include/show_binlog_events.inc;
if (`select '$cleanup' != ''`) {
eval $cleanup;
}