Commit 0bfd45f6 authored by Monty's avatar Monty

Fix for MDEV-15812 Assert in SEQUENCE when forcing STATEMEMT format

The bug was the we copied the lock type to the underlying engine even when
external_lock failed.
parent 529c1a3b
CREATE SEQUENCE seq ENGINE=InnoDB;
SET SESSION TRANSACTION ISOLATION LEVEL READ COMMITTED;
INSERT INTO seq VALUES (1,1,100,1,1,1,1,1);
ERROR HY000: Cannot execute statement: impossible to write to binary log since BINLOG_FORMAT = STATEMENT and at least one table uses a storage engine limited to row-based logging. InnoDB is limited to row-logging when transaction isolation level is READ COMMITTED or READ UNCOMMITTED.
DROP SEQUENCE seq;
#
# Test for MDEV-15812
# Assertion `m_lock_type == 2' failed in
# handler::~handler on dropping a sequence after
# ER_BINLOG_STMT_MODE_AND_ROW_ENGINE
#
--source include/have_innodb.inc
--source include/have_binlog_format_statement.inc
CREATE SEQUENCE seq ENGINE=InnoDB;
SET SESSION TRANSACTION ISOLATION LEVEL READ COMMITTED;
--error ER_BINLOG_STMT_MODE_AND_ROW_ENGINE
INSERT INTO seq VALUES (1,1,100,1,1,1,1,1);
# Cleanup
DROP SEQUENCE seq;
......@@ -322,7 +322,8 @@ int ha_sequence::external_lock(THD *thd, int lock_type)
Copy lock flag to satisfy DBUG_ASSERT checks in ha_* functions in
handler.cc when we later call it with file->ha_..()
*/
file->m_lock_type= lock_type;
if (!error)
file->m_lock_type= lock_type;
return error;
}
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment