1
0
mirror of https://github.com/MariaDB/server.git synced 2025-07-29 05:21:33 +03:00

MDEV-11236 Failing assertion: state == TRX_STATE_NOT_STARTED

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.
This commit is contained in:
Marko Mäkelä
2016-12-02 16:25:47 +02:00
parent cb78555f30
commit 33ed16c750
8 changed files with 119 additions and 10 deletions

View File

@ -0,0 +1,28 @@
CREATE TABLE t1 (a INT) ENGINE=InnoDB;
CREATE TABLE t2 (b INT) ENGINE=InnoDB;
CREATE TABLE t3 (c INT) ENGINE=InnoDB;
CREATE TRIGGER tr BEFORE INSERT ON t3 FOR EACH ROW BEGIN SAVEPOINT sv; INSERT INTO t2 VALUES (0); END $$
START TRANSACTION;
DELETE FROM t1;
connect con1,localhost,root,,test;
START TRANSACTION;
INSERT INTO t2 VALUES (2);
UPDATE t2 SET b = b+1;
INSERT INTO t1 VALUES (1);
connection default;
COMMIT;
connection con1;
COMMIT;
disconnect con1;
connection default;
SELECT * FROM t1;
a
1
SELECT * FROM t2;
b
3
SELECT * FROM t3;
c
DROP TABLE t1, t2, t3;
DROP TRIGGER tr;
ERROR HY000: Trigger does not exist