mirror of
https://github.com/MariaDB/server.git
synced 2025-02-05 21:32:18 +01:00
1cad1dbde6
convert_error_code_to_mysql(): Treat DB_DEADLOCK and DB_RECORD_CHANGED in the same way, that is, signal to the SQL layer that the transaction had been rolled back.
160 lines
3.1 KiB
Text
160 lines
3.1 KiB
Text
#
|
|
# MDEV-26642 Weird SELECT view when a record is
|
|
# modified to the same value by two transactions
|
|
# MDEV-32898 Phantom rows caused by updates of PRIMARY KEY
|
|
#
|
|
CREATE TABLE t(a INT PRIMARY KEY, b INT) ENGINE=InnoDB;
|
|
INSERT INTO t VALUES (1,1),(2,2);
|
|
BEGIN;
|
|
SELECT * FROM t LOCK IN SHARE MODE;
|
|
a b
|
|
1 1
|
|
2 2
|
|
connect con_weird,localhost,root;
|
|
BEGIN;
|
|
SELECT * FROM t;
|
|
a b
|
|
1 1
|
|
2 2
|
|
connect consistent,localhost,root;
|
|
SET innodb_snapshot_isolation=ON;
|
|
BEGIN;
|
|
SELECT * FROM t;
|
|
a b
|
|
1 1
|
|
2 2
|
|
connection default;
|
|
UPDATE t SET a=3 WHERE b=2;
|
|
COMMIT;
|
|
connection consistent;
|
|
UPDATE t SET b=3;
|
|
ERROR HY000: Record has changed since last read in table 't'
|
|
SELECT * FROM t;
|
|
a b
|
|
1 1
|
|
3 2
|
|
COMMIT;
|
|
connection con_weird;
|
|
UPDATE t SET b=3;
|
|
SELECT * FROM t;
|
|
a b
|
|
1 3
|
|
2 2
|
|
3 3
|
|
COMMIT;
|
|
connection default;
|
|
SELECT * FROM t;
|
|
a b
|
|
1 3
|
|
3 3
|
|
DROP TABLE t;
|
|
#
|
|
# MDEV-26643 Inconsistent behaviors of UPDATE under
|
|
# READ UNCOMMITTED and READ COMMITTED isolation level
|
|
#
|
|
CREATE TABLE t(a INT, b INT) ENGINE=InnoDB;
|
|
INSERT INTO t VALUES(NULL, 1), (2, 2);
|
|
SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED;
|
|
BEGIN;
|
|
UPDATE t SET a = 10;
|
|
connection consistent;
|
|
SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED;
|
|
UPDATE t SET b = 20 WHERE a;
|
|
connection default;
|
|
COMMIT;
|
|
connection consistent;
|
|
SELECT * FROM t;
|
|
a b
|
|
10 20
|
|
10 20
|
|
connection default;
|
|
TRUNCATE TABLE t;
|
|
INSERT INTO t VALUES(NULL, 1), (2, 2);
|
|
BEGIN;
|
|
UPDATE t SET a = 10;
|
|
connection consistent;
|
|
SET TRANSACTION ISOLATION LEVEL READ COMMITTED;
|
|
UPDATE t SET b = 20 WHERE a;
|
|
connection default;
|
|
COMMIT;
|
|
connection consistent;
|
|
SELECT * FROM t;
|
|
a b
|
|
10 20
|
|
10 20
|
|
connection default;
|
|
TRUNCATE TABLE t;
|
|
INSERT INTO t VALUES(NULL, 1), (2, 2);
|
|
BEGIN;
|
|
UPDATE t SET a = 10;
|
|
connection con_weird;
|
|
SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED;
|
|
UPDATE t SET b = 20 WHERE a;
|
|
connection default;
|
|
SELECT * FROM t;
|
|
a b
|
|
10 1
|
|
10 2
|
|
COMMIT;
|
|
connection con_weird;
|
|
COMMIT;
|
|
connection default;
|
|
SELECT * FROM t;
|
|
a b
|
|
10 1
|
|
10 20
|
|
TRUNCATE TABLE t;
|
|
#
|
|
# MDEV-34108 Inappropriate semi-consistent read in snapshot isolation
|
|
#
|
|
INSERT INTO t VALUES(NULL, 1), (1, 1);
|
|
BEGIN;
|
|
UPDATE t SET b = 3;
|
|
connection consistent;
|
|
SET TRANSACTION ISOLATION LEVEL READ COMMITTED;
|
|
BEGIN;
|
|
UPDATE t SET b = 2 WHERE a;
|
|
connection default;
|
|
UPDATE t SET a = 1;
|
|
COMMIT;
|
|
connection consistent;
|
|
COMMIT;
|
|
connection default;
|
|
SELECT * FROM t;
|
|
a b
|
|
1 2
|
|
1 2
|
|
DROP TABLE t;
|
|
#
|
|
# MDEV-33802 Weird read view after ROLLBACK of other transactions
|
|
#
|
|
CREATE TABLE t(a INT PRIMARY KEY, b INT UNIQUE) ENGINE=InnoDB;
|
|
INSERT INTO t SET a=1;
|
|
BEGIN;
|
|
INSERT INTO t SET a=2;
|
|
connection consistent;
|
|
START TRANSACTION WITH CONSISTENT SNAPSHOT;
|
|
SAVEPOINT sp1;
|
|
SELECT * FROM t FORCE INDEX (b) FOR UPDATE;
|
|
ERROR HY000: Record has changed since last read in table 't'
|
|
SAVEPOINT sp1;
|
|
connection con_weird;
|
|
START TRANSACTION WITH CONSISTENT SNAPSHOT;
|
|
SELECT * FROM t FORCE INDEX (b) FOR UPDATE;
|
|
connection default;
|
|
ROLLBACK;
|
|
connection con_weird;
|
|
a b
|
|
1 NULL
|
|
SELECT * FROM t FORCE INDEX (b) FOR UPDATE;
|
|
a b
|
|
1 NULL
|
|
disconnect con_weird;
|
|
connection consistent;
|
|
SELECT * FROM t FORCE INDEX (b) FOR UPDATE;
|
|
a b
|
|
1 NULL
|
|
disconnect consistent;
|
|
connection default;
|
|
DROP TABLE t;
|
|
# End of 10.6 tests
|