mirror of
				https://github.com/MariaDB/server.git
				synced 2025-10-30 18:36:12 +01:00 
			
		
		
		
	
		
			
				
	
	
		
			185 lines
		
	
	
	
		
			4.3 KiB
		
	
	
	
		
			Text
		
	
	
	
	
	
			
		
		
	
	
			185 lines
		
	
	
	
		
			4.3 KiB
		
	
	
	
		
			Text
		
	
	
	
	
	
| # 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 sequence 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';
 | |
| 
 | |
| DROP SEQUENCE seq_1;
 | |
| DROP TABLE tmp_1;
 | |
| 
 | |
| --echo # Proof of  correct logging incl empty XA-PREPARE
 | |
| --source include/show_binlog_events.inc
 | |
| 
 | |
| SET @@binlog_format="statement";
 | |
| 
 | |
| 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';
 | |
| 
 | |
| SET @@binlog_format="mixed";
 | |
| 
 | |
| --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';
 | |
| --disable_ps2_protocol
 | |
| SELECT NEXT VALUE FOR s;
 | |
| --enable_ps2_protocol
 | |
| 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;
 | |
| 
 | |
| 
 | |
| # MDEV-32257 dangling XA-rollback in binlog from emtpy XA
 | |
| --connection default
 | |
| --let $binlog_start = query_get_value(SHOW MASTER STATUS, Position, 1)
 | |
| --let $binlog_file =  query_get_value(SHOW MASTER STATUS, File, 1)
 | |
| SET pseudo_slave_mode=1;
 | |
| XA START 'a';
 | |
| XA END 'a';
 | |
| XA PREPARE 'a';
 | |
| --error ER_XA_RBROLLBACK
 | |
| XA ROLLBACK 'a';
 | |
| --source include/show_binlog_events.inc
 | 
