mariadb/mysql-test/suite/binlog/t/binlog_innodb_stm.test
Sergey Vojtovich 491e2b17a9 MDEV-35081 - Assertion `!n_mysql_tables_in_use' failed after error upon binary logging of DML involving vector table
InnoDB is limited to row-logging when transaction isolation level is
READ COMMITTED or READ UNCOMMITTED. This limitation is enforced by
a check within ha_innobase::external_lock().

InnoDB also expects number of "successful external locks" to match
number of "external unlocks", which is controlled by the assertion
in subject.

However "unlock" was called even after failing "lock" for high-level
indexes.

Fixed by calling "unlock" only after "successful lock".
2025-02-03 19:41:33 +01:00

40 lines
1.1 KiB
Text

source include/have_innodb.inc;
source include/have_binlog_format_statement.inc;
#
# MDEV-18466 Unsafe to log updates on tables referenced by foreign keys with triggers in statement format
#
create table categories(
cat_id int not null primary key,
cat_name varchar(255) not null,
cat_description text
) engine=innodb;
create table products(
prd_id int not null auto_increment primary key,
prd_name varchar(355) not null,
prd_price decimal,
cat_id int not null,
foreign key fk_cat(cat_id)
references categories(cat_id)
on update cascade
) engine=innodb;
insert into categories values (1, 'drinks', 'drinks');
update categories set cat_description=2 where cat_id=1;
drop table products, categories;
--echo #
--echo # MDEV-35081 - Assertion `!n_mysql_tables_in_use' failed after error
--echo # upon binary logging of DML involving vector table
--echo #
SET SESSION TRANSACTION ISOLATION LEVEL READ COMMITTED;
CREATE TABLE t (pk INT PRIMARY KEY, v VECTOR(1) NOT NULL, VECTOR(v)) ENGINE=InnoDB;
--error ER_BINLOG_STMT_MODE_AND_ROW_ENGINE
UPDATE t SET pk = 2 WHERE pk = 1;
# Cleanup
DROP TABLE t;