summaryrefslogtreecommitdiff
path: root/mysql-test/suite/binlog/t/binlog_empty_xa_prepared.test
diff options
context:
space:
mode:
Diffstat (limited to 'mysql-test/suite/binlog/t/binlog_empty_xa_prepared.test')
-rw-r--r--mysql-test/suite/binlog/t/binlog_empty_xa_prepared.test134
1 files changed, 134 insertions, 0 deletions
diff --git a/mysql-test/suite/binlog/t/binlog_empty_xa_prepared.test b/mysql-test/suite/binlog/t/binlog_empty_xa_prepared.test
new file mode 100644
index 00000000000..b127178ebf7
--- /dev/null
+++ b/mysql-test/suite/binlog/t/binlog_empty_xa_prepared.test
@@ -0,0 +1,134 @@
+# The test verifies execution and binary logging of user XA that produce empty
+# XA-PREPARE group of events.
+
+--source include/have_binlog_format_mixed.inc
+--source include/have_innodb.inc
+
+RESET MASTER; # clear binlogs
+# MDEV-22420 DDL on temporary object is prohibited when XA is in prepare state
+
+# Temporary sequnce may not be created within a transaction
+CREATE TEMPORARY SEQUENCE seq_1;
+
+XA START '3';
+CREATE TEMPORARY TABLE tmp_1(c INT);
+XA END '3';
+XA PREPARE '3';
+--error ER_XAER_RMFAIL
+DROP TEMPORARY TABLE tmp_1;
+--error ER_XAER_RMFAIL
+ALTER TABLE tmp_1 DROP COLUMN c;
+--error ER_XAER_RMFAIL
+DROP TEMPORARY SEQUENCE seq_1;
+--error ER_XAER_RMFAIL
+ALTER SEQUENCE seq_1 INCREMENT BY 1;
+
+--error ER_XAER_RMFAIL
+CREATE TEMPORARY TABLE tmp_2(c INT);
+--error ER_XAER_RMFAIL
+CREATE TEMPORARY SEQUENCE seq_2;
+
+# Cleanup
+XA ROLLBACK '3';
+
+--echo # Proof of correct logging incl empty XA-PREPARE
+--source include/show_binlog_events.inc
+
+# The test verifies execution and binary logging of user XA that produce empty
+# XA-PREPARE group of events.
+#
+# MDEV-22757 Assertion `!binlog || exist_hton_without_prepare'
+# in MYSQL_BIN_LOG::unlog_xa_prepare
+
+RESET MASTER;
+CREATE TABLE t1 (a INT) ENGINE=MyISAM;
+CREATE TABLE t2 (id INT PRIMARY KEY) ENGINE=InnoDB;
+INSERT INTO t1 VALUES (1),(2);
+INSERT INTO t2 VALUES (1),(2);
+
+XA START '1';
+REPLACE INTO t1 SELECT * FROM t1;
+REPLACE INTO t2 SELECT * FROM t2;
+XA END '1';
+XA PREPARE '1';
+
+# Cleanup
+XA ROLLBACK '1';
+DROP TABLE t1, t2;
+
+--echo # Proof of correct logging incl empty XA-PREPARE
+--source include/show_binlog_events.inc
+
+
+# MDEV-22430 Assertion ... in MYSQL_BIN_LOG::unlog_xa_prepare
+
+RESET MASTER;
+CREATE TABLE t1 (a INT PRIMARY KEY) ENGINE=InnoDB;
+INSERT INTO t1 VALUES (1);
+CREATE SEQUENCE s ENGINE=InnoDB;
+
+XA START '2';
+SELECT NEXT VALUE FOR s;
+REPLACE INTO t1 SELECT * FROM t1;
+XA END '2';
+XA PREPARE '2';
+
+# Cleanup
+XA ROLLBACK '2';
+DROP SEQUENCE s;
+DROP TABLE t1;
+
+--echo # Proof of correct logging incl empty XA-PREPARE
+--source include/show_binlog_events.inc
+
+
+# MDEV-25616 Binlog event for XA COMMIT is generated without matching XA START
+
+CREATE TABLE t1 (a INT PRIMARY KEY) ENGINE=InnoDB;
+INSERT INTO t1 VALUES (1);
+
+--source include/count_sessions.inc
+--connect(con1,localhost,root,,)
+
+XA START '1';
+ --error ER_DUP_ENTRY
+ INSERT INTO t1 VALUES (2),(1);
+ SELECT * FROM t1 WHERE a = 2;
+XA END '1';
+XA PREPARE '1';
+
+--disconnect con1
+
+--connection default
+--source include/wait_until_count_sessions.inc
+XA RECOVER;
+
+--error ER_XA_RBROLLBACK
+XA COMMIT '1';
+--echo Must be no XA PREPARE group nor XA completion one:
+--source include/show_binlog_events.inc
+DROP TABLE t1;
+
+--source include/count_sessions.inc
+
+--connect(con2,localhost,root,,)
+CREATE TABLE tm (a INT PRIMARY KEY) ENGINE=MyISAM;
+XA START '1';
+ --error ER_DUP_ENTRY
+ INSERT INTO tm VALUES (1),(1);
+ SELECT * FROM tm WHERE a = 2;
+XA END '1';
+XA PREPARE '1';
+
+--disconnect con2
+
+--connection default
+--source include/wait_until_count_sessions.inc
+XA RECOVER;
+
+--error ER_XA_RBROLLBACK
+XA ROLLBACK '1';
+--echo Must be no XA PREPARE group nor XA completion one:
+--source include/show_binlog_events.inc
+DROP TABLE tm;
+