mirror of
https://github.com/MariaDB/server.git
synced 2025-01-18 04:53:01 +01:00
b118282377
Don't set thd->is_fatal_error in sql_update for duplicate key errors. mysql-test/r/sp.result: New test case for BUG#13729. mysql-test/r/sp_trans.result: New test case for BUG#14840. mysql-test/t/sp.test: New test case for BUG#13729. mysql-test/t/sp_trans.test: New test case for BUG#14840. sql/sql_update.cc: Don't set thd->is_fatal_error if it's a duplicate key error.
427 lines
8.3 KiB
Text
427 lines
8.3 KiB
Text
drop table if exists t1, t2;
|
|
drop procedure if exists bug8850|
|
|
create table t1 (a int) engine=innodb|
|
|
create procedure bug8850()
|
|
begin
|
|
truncate table t1; insert t1 values (1); rollback;
|
|
end|
|
|
set autocommit=0|
|
|
insert t1 values (2)|
|
|
call bug8850()|
|
|
commit|
|
|
select * from t1|
|
|
a
|
|
call bug8850()|
|
|
set autocommit=1|
|
|
select * from t1|
|
|
a
|
|
drop table t1|
|
|
drop procedure bug8850|
|
|
drop function if exists bug10015_1|
|
|
drop function if exists bug10015_2|
|
|
drop function if exists bug10015_3|
|
|
drop function if exists bug10015_4|
|
|
drop function if exists bug10015_5|
|
|
drop function if exists bug10015_6|
|
|
drop function if exists bug10015_7|
|
|
drop procedure if exists bug10015_8|
|
|
create table t1 (id int) engine=innodb|
|
|
create table t2 (id int primary key, j int) engine=innodb|
|
|
insert into t1 values (1),(2),(3)|
|
|
create function bug10015_1() returns int return (select count(*) from t1)|
|
|
select *, bug10015_1() from t1|
|
|
id bug10015_1()
|
|
1 3
|
|
2 3
|
|
3 3
|
|
drop function bug10015_1|
|
|
create function bug10015_2() returns int
|
|
begin
|
|
declare i, s int;
|
|
set i:= (select min(id) from t1);
|
|
set s:= (select max(id) from t1);
|
|
return (s - i);
|
|
end|
|
|
select *, bug10015_2() from t1|
|
|
id bug10015_2()
|
|
1 2
|
|
2 2
|
|
3 2
|
|
drop function bug10015_2|
|
|
create function bug10015_3() returns int
|
|
return (select max(a.id - b.id) from t1 as a, t1 as b where a.id >= b.id)|
|
|
select *, bug10015_3() from t1|
|
|
id bug10015_3()
|
|
1 2
|
|
2 2
|
|
3 2
|
|
drop function bug10015_3|
|
|
create function bug10015_4(i int) returns int
|
|
begin
|
|
declare m int;
|
|
set m:= (select max(id) from t2);
|
|
insert into t2 values (i, m);
|
|
return m;
|
|
end|
|
|
select *, bug10015_4(id) from t1|
|
|
id bug10015_4(id)
|
|
1 NULL
|
|
2 1
|
|
3 2
|
|
select * from t2|
|
|
id j
|
|
1 NULL
|
|
2 1
|
|
3 2
|
|
drop function bug10015_4|
|
|
create function bug10015_5(i int) returns int
|
|
begin
|
|
if (i = 5) then
|
|
insert into t2 values (1, 0);
|
|
end if;
|
|
return i;
|
|
end|
|
|
insert into t1 values (bug10015_5(4)), (bug10015_5(5))|
|
|
ERROR 23000: Duplicate entry '1' for key 1
|
|
select * from t1|
|
|
id
|
|
1
|
|
2
|
|
3
|
|
drop function bug10015_5|
|
|
create function bug10015_6(i int) returns int
|
|
begin
|
|
declare continue handler for sqlexception set @error_in_func:= 1;
|
|
if (i = 5) then
|
|
insert into t2 values (4, 0), (1, 0);
|
|
end if;
|
|
return i;
|
|
end|
|
|
set @error_in_func:= 0|
|
|
insert into t1 values (bug10015_6(5)), (bug10015_6(6))|
|
|
select @error_in_func|
|
|
@error_in_func
|
|
1
|
|
select * from t1|
|
|
id
|
|
1
|
|
2
|
|
3
|
|
5
|
|
6
|
|
select * from t2|
|
|
id j
|
|
1 NULL
|
|
2 1
|
|
3 2
|
|
4 0
|
|
drop function bug10015_6|
|
|
create function bug10015_7() returns int
|
|
begin
|
|
alter table t1 add k int;
|
|
return 1;
|
|
end|
|
|
ERROR HY000: Explicit or implicit commit is not allowed in stored function or trigger.
|
|
create function bug10015_7() returns int
|
|
begin
|
|
start transaction;
|
|
return 1;
|
|
end|
|
|
ERROR HY000: Explicit or implicit commit is not allowed in stored function or trigger.
|
|
create function bug10015_7() returns int
|
|
begin
|
|
drop table t1;
|
|
return 1;
|
|
end|
|
|
ERROR HY000: Explicit or implicit commit is not allowed in stored function or trigger.
|
|
create function bug10015_7() returns int
|
|
begin
|
|
drop temporary table t1;
|
|
return 1;
|
|
end|
|
|
drop function bug10015_7|
|
|
create function bug10015_7() returns int
|
|
begin
|
|
commit;
|
|
return 1;
|
|
end|
|
|
ERROR HY000: Explicit or implicit commit is not allowed in stored function or trigger.
|
|
create function bug10015_7() returns int
|
|
begin
|
|
call bug10015_8();
|
|
return 1;
|
|
end|
|
|
create procedure bug10015_8() alter table t1 add k int|
|
|
select *, bug10015_7() from t1|
|
|
ERROR HY000: Explicit or implicit commit is not allowed in stored function or trigger.
|
|
drop procedure bug10015_8|
|
|
create procedure bug10015_8() start transaction|
|
|
select *, bug10015_7() from t1|
|
|
ERROR HY000: Explicit or implicit commit is not allowed in stored function or trigger.
|
|
drop procedure bug10015_8|
|
|
create procedure bug10015_8() drop temporary table if exists t1_temp|
|
|
select *, bug10015_7() from t1|
|
|
id bug10015_7()
|
|
1 1
|
|
2 1
|
|
3 1
|
|
5 1
|
|
6 1
|
|
drop procedure bug10015_8|
|
|
create procedure bug10015_8() commit|
|
|
select *, bug10015_7() from t1|
|
|
ERROR HY000: Explicit or implicit commit is not allowed in stored function or trigger.
|
|
drop procedure bug10015_8|
|
|
drop function bug10015_7|
|
|
drop table t1, t2|
|
|
drop function if exists bug13825_0|
|
|
drop function if exists bug13825_1|
|
|
drop function if exists bug13825_2|
|
|
drop function if exists bug13825_3|
|
|
drop function if exists bug13825_4|
|
|
drop function if exists bug13825_5|
|
|
drop procedure if exists bug13825_0|
|
|
drop procedure if exists bug13825_1|
|
|
drop procedure if exists bug13825_2|
|
|
drop table if exists t1|
|
|
create table t1 (i int) engine=innodb|
|
|
create table t2 (i int) engine=innodb|
|
|
create function bug13825_0() returns int
|
|
begin
|
|
rollback to savepoint x;
|
|
return 1;
|
|
end|
|
|
create function bug13825_1() returns int
|
|
begin
|
|
release savepoint x;
|
|
return 1;
|
|
end|
|
|
create function bug13825_2() returns int
|
|
begin
|
|
insert into t1 values (2);
|
|
savepoint x;
|
|
insert into t1 values (3);
|
|
rollback to savepoint x;
|
|
insert into t1 values (4);
|
|
return 1;
|
|
end|
|
|
create procedure bug13825_0()
|
|
begin
|
|
rollback to savepoint x;
|
|
end|
|
|
create procedure bug13825_1()
|
|
begin
|
|
release savepoint x;
|
|
end|
|
|
create procedure bug13825_2()
|
|
begin
|
|
savepoint x;
|
|
end|
|
|
insert into t2 values (1)|
|
|
create trigger t2_bi before insert on t2 for each row
|
|
rollback to savepoint x|
|
|
create trigger t2_bu before update on t2 for each row
|
|
release savepoint x|
|
|
create trigger t2_bd before delete on t2 for each row
|
|
begin
|
|
insert into t1 values (2);
|
|
savepoint x;
|
|
insert into t1 values (3);
|
|
rollback to savepoint x;
|
|
insert into t1 values (4);
|
|
end|
|
|
create function bug13825_3(rb int) returns int
|
|
begin
|
|
insert into t1 values(1);
|
|
savepoint x;
|
|
insert into t1 values(2);
|
|
if rb then
|
|
rollback to savepoint x;
|
|
end if;
|
|
insert into t1 values(3);
|
|
return rb;
|
|
end|
|
|
create function bug13825_4() returns int
|
|
begin
|
|
savepoint x;
|
|
insert into t1 values(2);
|
|
rollback to savepoint x;
|
|
return 0;
|
|
end|
|
|
create function bug13825_5(p int) returns int
|
|
begin
|
|
savepoint x;
|
|
insert into t2 values(p);
|
|
rollback to savepoint x;
|
|
insert into t2 values(p+1);
|
|
return p;
|
|
end|
|
|
set autocommit= 0|
|
|
begin |
|
|
insert into t1 values (1)|
|
|
savepoint x|
|
|
set @a:= bug13825_0()|
|
|
ERROR 42000: SAVEPOINT x does not exist
|
|
insert into t2 values (2)|
|
|
ERROR 42000: SAVEPOINT x does not exist
|
|
set @a:= bug13825_1()|
|
|
ERROR 42000: SAVEPOINT x does not exist
|
|
update t2 set i = 2|
|
|
ERROR 42000: SAVEPOINT x does not exist
|
|
set @a:= bug13825_2()|
|
|
select * from t1|
|
|
i
|
|
1
|
|
2
|
|
4
|
|
rollback to savepoint x|
|
|
select * from t1|
|
|
i
|
|
1
|
|
delete from t2|
|
|
select * from t1|
|
|
i
|
|
1
|
|
2
|
|
4
|
|
rollback to savepoint x|
|
|
select * from t1|
|
|
i
|
|
1
|
|
release savepoint x|
|
|
set @a:= bug13825_2()|
|
|
select * from t1|
|
|
i
|
|
1
|
|
2
|
|
4
|
|
rollback to savepoint x|
|
|
ERROR 42000: SAVEPOINT x does not exist
|
|
delete from t1|
|
|
commit|
|
|
begin|
|
|
insert into t1 values (5)|
|
|
savepoint x|
|
|
insert into t1 values (6)|
|
|
call bug13825_0()|
|
|
select * from t1|
|
|
i
|
|
5
|
|
call bug13825_1()|
|
|
rollback to savepoint x|
|
|
ERROR 42000: SAVEPOINT x does not exist
|
|
savepoint x|
|
|
insert into t1 values (7)|
|
|
call bug13825_2()|
|
|
rollback to savepoint x|
|
|
select * from t1|
|
|
i
|
|
5
|
|
7
|
|
delete from t1|
|
|
commit|
|
|
set autocommit= 1|
|
|
select bug13825_3(0)|
|
|
bug13825_3(0)
|
|
0
|
|
select * from t1|
|
|
i
|
|
1
|
|
2
|
|
3
|
|
delete from t1|
|
|
select bug13825_3(1)|
|
|
bug13825_3(1)
|
|
1
|
|
select * from t1|
|
|
i
|
|
1
|
|
3
|
|
delete from t1|
|
|
set autocommit= 0|
|
|
begin|
|
|
insert into t1 values (1)|
|
|
set @a:= bug13825_4()|
|
|
select * from t1|
|
|
i
|
|
1
|
|
delete from t1|
|
|
commit|
|
|
set autocommit= 1|
|
|
drop table t2|
|
|
create table t2 (i int) engine=innodb|
|
|
insert into t1 values (1), (bug13825_5(2)), (3)|
|
|
select * from t1|
|
|
i
|
|
1
|
|
2
|
|
3
|
|
select * from t2|
|
|
i
|
|
3
|
|
drop function bug13825_0|
|
|
drop function bug13825_1|
|
|
drop function bug13825_2|
|
|
drop function bug13825_3|
|
|
drop function bug13825_4|
|
|
drop function bug13825_5|
|
|
drop procedure bug13825_0|
|
|
drop procedure bug13825_1|
|
|
drop procedure bug13825_2|
|
|
drop table t1, t2|
|
|
drop table if exists t3|
|
|
drop procedure if exists bug14840_1|
|
|
drop procedure if exists bug14840_2|
|
|
create table t3
|
|
(
|
|
x int,
|
|
y int,
|
|
primary key (x)
|
|
) engine=InnoDB|
|
|
create procedure bug14840_1()
|
|
begin
|
|
declare err int default 0;
|
|
declare continue handler for sqlexception
|
|
set err = err + 1;
|
|
start transaction;
|
|
update t3 set x = 1, y = 42 where x = 2;
|
|
insert into t3 values (3, 4711);
|
|
if err > 0 then
|
|
rollback;
|
|
else
|
|
commit;
|
|
end if;
|
|
select * from t3;
|
|
end|
|
|
create procedure bug14840_2()
|
|
begin
|
|
declare err int default 0;
|
|
declare continue handler for sqlexception
|
|
begin
|
|
set err = err + 1;
|
|
select err as 'Ping';
|
|
end;
|
|
update t3 set x = 1, y = 42 where x = 2;
|
|
update t3 set x = 1, y = 42 where x = 2;
|
|
insert into t3 values (3, 4711);
|
|
select * from t3;
|
|
end|
|
|
insert into t3 values (1, 3), (2, 5)|
|
|
call bug14840_1()|
|
|
x y
|
|
1 3
|
|
2 5
|
|
delete from t3|
|
|
insert into t3 values (1, 3), (2, 5)|
|
|
call bug14840_2()|
|
|
Ping
|
|
1
|
|
Ping
|
|
2
|
|
x y
|
|
1 3
|
|
2 5
|
|
3 4711
|
|
drop procedure bug14840_1|
|
|
drop procedure bug14840_2|
|
|
drop table t3|
|