summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--mysql-test/suite/binlog/r/binlog_mixed.result11
-rw-r--r--mysql-test/suite/binlog/t/binlog_mixed.test23
-rw-r--r--sql/sql_parse.cc1
3 files changed, 35 insertions, 0 deletions
diff --git a/mysql-test/suite/binlog/r/binlog_mixed.result b/mysql-test/suite/binlog/r/binlog_mixed.result
new file mode 100644
index 00000000000..1f30f21a9b4
--- /dev/null
+++ b/mysql-test/suite/binlog/r/binlog_mixed.result
@@ -0,0 +1,11 @@
+CREATE TABLE t1 (a INT) ENGINE=InnoDB;
+INSERT INTO t1 (a) VALUES (1),(2);
+CREATE TABLE t2 (b INT) ENGINE=InnoDB;
+CREATE TRIGGER tr1 BEFORE UPDATE ON t1 FOR EACH ROW SET @a = 0;
+CREATE TRIGGER tr2 BEFORE INSERT ON t2 FOR EACH ROW DELETE FROM t1 LIMIT 1;
+SET AUTOCOMMIT= OFF;
+LOCK TABLES t2 WRITE;
+DELETE FROM t1 LIMIT 1;
+SAVEPOINT A;
+UNLOCK TABLES;
+DROP TABLE t1, t2;
diff --git a/mysql-test/suite/binlog/t/binlog_mixed.test b/mysql-test/suite/binlog/t/binlog_mixed.test
new file mode 100644
index 00000000000..fa1b2ca3a85
--- /dev/null
+++ b/mysql-test/suite/binlog/t/binlog_mixed.test
@@ -0,0 +1,23 @@
+--source include/have_innodb.inc
+--source include/have_binlog_format_mixed_or_row.inc
+
+#
+# MDEV-22048 Assertion `binlog_table_maps == 0 ||
+# locked_tables_mode == LTM_LOCK_TABLES' failed in
+# THD::reset_for_next_command
+#
+
+CREATE TABLE t1 (a INT) ENGINE=InnoDB;
+INSERT INTO t1 (a) VALUES (1),(2);
+
+CREATE TABLE t2 (b INT) ENGINE=InnoDB;
+
+CREATE TRIGGER tr1 BEFORE UPDATE ON t1 FOR EACH ROW SET @a = 0;
+CREATE TRIGGER tr2 BEFORE INSERT ON t2 FOR EACH ROW DELETE FROM t1 LIMIT 1;
+
+SET AUTOCOMMIT= OFF;
+LOCK TABLES t2 WRITE;
+DELETE FROM t1 LIMIT 1;
+SAVEPOINT A;
+UNLOCK TABLES;
+DROP TABLE t1, t2;
diff --git a/sql/sql_parse.cc b/sql/sql_parse.cc
index 86f81dd001a..7a133d84f89 100644
--- a/sql/sql_parse.cc
+++ b/sql/sql_parse.cc
@@ -5045,6 +5045,7 @@ mysql_execute_command(THD *thd)
res= 1;
thd->mdl_context.release_transactional_locks();
thd->variables.option_bits&= ~(OPTION_TABLE_LOCK);
+ thd->reset_binlog_for_next_statement();
}
if (thd->global_read_lock.is_acquired() &&
thd->current_backup_stage == BACKUP_FINISHED)