mirror of
https://github.com/MariaDB/server.git
synced 2026-05-16 20:07:13 +02:00
Merge gleb.loc:/home/uchum/work/bk/5.0-opt-30120
into gleb.loc:/home/uchum/work/bk/5.0-opt
This commit is contained in:
commit
465c3ef060
10 changed files with 252 additions and 16 deletions
|
|
@ -32,3 +32,69 @@ select sum(id) from t3;
|
|||
sum(id)
|
||||
2199024304128
|
||||
drop table t1,t2,t3,t4;
|
||||
CREATE TABLE t1 (f1 int NOT NULL) ENGINE=InnoDB;
|
||||
CREATE TABLE t2 (f2 int(11) NOT NULL PRIMARY KEY AUTO_INCREMENT) ENGINE=InnoDB;
|
||||
CREATE TRIGGER t1_bi before INSERT
|
||||
ON t1 FOR EACH ROW
|
||||
BEGIN
|
||||
DECLARE CONTINUE HANDLER FOR SQLSTATE '40001' SET @a:= 'deadlock';
|
||||
DECLARE CONTINUE HANDLER FOR SQLEXCEPTION SET @a:= 'exception';
|
||||
INSERT INTO t2 (f2) VALUES (1);
|
||||
DELETE FROM t2 WHERE f2 = 1;
|
||||
END;|
|
||||
CREATE PROCEDURE proc24989()
|
||||
BEGIN
|
||||
DECLARE CONTINUE HANDLER FOR SQLSTATE '40001' SET @b:= 'deadlock';
|
||||
DECLARE CONTINUE HANDLER FOR SQLEXCEPTION SET @a:= 'exception';
|
||||
INSERT INTO t2 (f2) VALUES (1);
|
||||
DELETE FROM t2 WHERE f2 = 1;
|
||||
END;|
|
||||
create procedure proc24989_2()
|
||||
deterministic
|
||||
begin
|
||||
declare continue handler for sqlexception
|
||||
select 'Outer handler' as 'exception';
|
||||
insert into t1 values(1);
|
||||
select "continued";
|
||||
end|
|
||||
start transaction;
|
||||
insert into t1 values(1);
|
||||
start transaction;
|
||||
insert into t2 values(123);
|
||||
insert into t1 values(1);
|
||||
insert into t1 values(1);
|
||||
ERROR 40001: Deadlock found when trying to get lock; try restarting transaction
|
||||
select @a;
|
||||
@a
|
||||
NULL
|
||||
select * from t2;
|
||||
f2
|
||||
commit;
|
||||
start transaction;
|
||||
insert into t1 values(1);
|
||||
start transaction;
|
||||
insert into t2 values(123);
|
||||
call proc24989();
|
||||
insert into t1 values(1);
|
||||
select @a,@b;
|
||||
@a @b
|
||||
exception deadlock
|
||||
select * from t2;
|
||||
f2
|
||||
commit;
|
||||
start transaction;
|
||||
insert into t1 values(1);
|
||||
start transaction;
|
||||
insert into t2 values(123);
|
||||
call proc24989_2();
|
||||
insert into t1 values(1);
|
||||
commit;
|
||||
exception
|
||||
Outer handler
|
||||
continued
|
||||
continued
|
||||
select * from t2;
|
||||
f2
|
||||
drop procedure proc24989;
|
||||
drop procedure proc24989_2;
|
||||
drop table t1,t2;
|
||||
|
|
|
|||
|
|
@ -307,6 +307,6 @@ select -(9223372036854775808);
|
|||
select -((9223372036854775808));
|
||||
select -(-(9223372036854775808));
|
||||
--disable_metadata
|
||||
--endble_ps_protocol
|
||||
--enable_ps_protocol
|
||||
select --9223372036854775808, ---9223372036854775808, ----9223372036854775808;
|
||||
select -(-9223372036854775808), -(-(-9223372036854775808));
|
||||
|
|
|
|||
|
|
@ -44,3 +44,109 @@ INSERT INTO t3 SELECT concat(id),id from t2 ORDER BY -id;
|
|||
INSERT INTO t4 SELECT * from t3 ORDER BY concat(a);
|
||||
select sum(id) from t3;
|
||||
drop table t1,t2,t3,t4;
|
||||
|
||||
#
|
||||
# Bug#24989: The DEADLOCK error is improperly handled by InnoDB.
|
||||
#
|
||||
CREATE TABLE t1 (f1 int NOT NULL) ENGINE=InnoDB;
|
||||
CREATE TABLE t2 (f2 int(11) NOT NULL PRIMARY KEY AUTO_INCREMENT) ENGINE=InnoDB;
|
||||
DELIMITER |;
|
||||
CREATE TRIGGER t1_bi before INSERT
|
||||
ON t1 FOR EACH ROW
|
||||
BEGIN
|
||||
DECLARE CONTINUE HANDLER FOR SQLSTATE '40001' SET @a:= 'deadlock';
|
||||
DECLARE CONTINUE HANDLER FOR SQLEXCEPTION SET @a:= 'exception';
|
||||
INSERT INTO t2 (f2) VALUES (1);
|
||||
DELETE FROM t2 WHERE f2 = 1;
|
||||
END;|
|
||||
|
||||
CREATE PROCEDURE proc24989()
|
||||
BEGIN
|
||||
DECLARE CONTINUE HANDLER FOR SQLSTATE '40001' SET @b:= 'deadlock';
|
||||
DECLARE CONTINUE HANDLER FOR SQLEXCEPTION SET @a:= 'exception';
|
||||
INSERT INTO t2 (f2) VALUES (1);
|
||||
DELETE FROM t2 WHERE f2 = 1;
|
||||
END;|
|
||||
|
||||
create procedure proc24989_2()
|
||||
deterministic
|
||||
begin
|
||||
declare continue handler for sqlexception
|
||||
select 'Outer handler' as 'exception';
|
||||
|
||||
insert into t1 values(1);
|
||||
select "continued";
|
||||
end|
|
||||
|
||||
DELIMITER ;|
|
||||
|
||||
connect (con1,localhost,root,,);
|
||||
connect (con2,localhost,root,,);
|
||||
|
||||
connection con1;
|
||||
start transaction;
|
||||
insert into t1 values(1);
|
||||
|
||||
connection con2;
|
||||
start transaction;
|
||||
insert into t2 values(123);
|
||||
send insert into t1 values(1);
|
||||
|
||||
connection con1;
|
||||
--sleep 1
|
||||
insert into t1 values(1);
|
||||
|
||||
connection con2;
|
||||
--error 1213
|
||||
reap;
|
||||
select @a;
|
||||
# check that the whole transaction was rolled back
|
||||
select * from t2;
|
||||
|
||||
connection con1;
|
||||
commit;
|
||||
start transaction;
|
||||
insert into t1 values(1);
|
||||
|
||||
connection con2;
|
||||
start transaction;
|
||||
insert into t2 values(123);
|
||||
send call proc24989();
|
||||
|
||||
connection con1;
|
||||
--sleep 1
|
||||
insert into t1 values(1);
|
||||
|
||||
connection con2;
|
||||
reap;
|
||||
select @a,@b;
|
||||
# check that the whole transaction was rolled back
|
||||
select * from t2;
|
||||
|
||||
connection con1;
|
||||
commit;
|
||||
start transaction;
|
||||
insert into t1 values(1);
|
||||
|
||||
connection con2;
|
||||
start transaction;
|
||||
insert into t2 values(123);
|
||||
send call proc24989_2();
|
||||
|
||||
connection con1;
|
||||
--sleep 1
|
||||
insert into t1 values(1);
|
||||
commit;
|
||||
|
||||
connection con2;
|
||||
reap;
|
||||
# check that the whole transaction was rolled back
|
||||
select * from t2;
|
||||
|
||||
disconnect con1;
|
||||
disconnect con2;
|
||||
connection default;
|
||||
drop procedure proc24989;
|
||||
drop procedure proc24989_2;
|
||||
drop table t1,t2;
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue