mirror of
https://github.com/MariaDB/server.git
synced 2025-01-29 02:05:57 +01:00
33ed16c750
trx_state_eq(): Add the parameter bool relaxed=false, to allow trx->state==TRX_STATE_NOT_STARTED where a different state is expected, if an error has been reported. trx_release_savepoint_for_mysql(): Pass relaxed=true to trx_state_eq(). That is, allow the transaction to be idle when ROLLBACK TO SAVEPOINT is attempted after an error has been reported to the client.
47 lines
1,004 B
Text
47 lines
1,004 B
Text
--source include/have_innodb.inc
|
|
--source include/count_sessions.inc
|
|
|
|
CREATE TABLE t1 (a INT) ENGINE=InnoDB;
|
|
CREATE TABLE t2 (b INT) ENGINE=InnoDB;
|
|
CREATE TABLE t3 (c INT) ENGINE=InnoDB;
|
|
|
|
--delimiter $$
|
|
CREATE TRIGGER tr BEFORE INSERT ON t3 FOR EACH ROW BEGIN SAVEPOINT sv; INSERT INTO t2 VALUES (0); END $$
|
|
--delimiter ;
|
|
|
|
START TRANSACTION;
|
|
DELETE FROM t1;
|
|
|
|
connect (con1,localhost,root,,test);
|
|
START TRANSACTION;
|
|
INSERT INTO t2 VALUES (2);
|
|
UPDATE t2 SET b = b+1;
|
|
|
|
--send
|
|
INSERT INTO t1 VALUES (1);
|
|
|
|
connection default;
|
|
let $wait_condition=
|
|
select count(*) = 1 from information_schema.processlist
|
|
where state = 'update' and info = 'INSERT INTO t1 VALUES (1)'
|
|
--source include/wait_condition.inc
|
|
|
|
--error ER_LOCK_DEADLOCK
|
|
INSERT INTO t3 VALUES (2);
|
|
COMMIT;
|
|
|
|
connection con1;
|
|
reap;
|
|
COMMIT;
|
|
disconnect con1;
|
|
|
|
connection default;
|
|
SELECT * FROM t1;
|
|
SELECT * FROM t2;
|
|
SELECT * FROM t3;
|
|
|
|
DROP TABLE t1, t2, t3;
|
|
--error ER_TRG_DOES_NOT_EXIST
|
|
DROP TRIGGER tr;
|
|
|
|
--source include/wait_until_count_sessions.inc
|