mirror of
https://github.com/MariaDB/server.git
synced 2025-07-27 18:02:13 +03:00
Merge 10.4 into 10.5
This commit is contained in:
@ -1698,6 +1698,103 @@ KILL ( SELECT 1 ) + LASTVAL(s);
|
||||
--error ER_SUBQUERIES_NOT_SUPPORTED
|
||||
KILL LASTVAL(s);
|
||||
|
||||
--echo #
|
||||
--echo # MDEV-23094: Multiple calls to a Stored Procedure from another
|
||||
--echo # Stored Procedure crashes server
|
||||
--echo #
|
||||
|
||||
create table t1 (id1 int primary key, data1 int);
|
||||
create table t2 (id2 int primary key, data2 int);
|
||||
|
||||
delimiter //;
|
||||
create procedure p1(IN id int, IN dt int)
|
||||
begin
|
||||
if (exists(select * from t1 where id1 = id and data1 = dt) or
|
||||
not exists (select * from t2 where id2 = id and data2 = dt))
|
||||
then
|
||||
select 1;
|
||||
end if;
|
||||
end //
|
||||
delimiter ;//
|
||||
|
||||
call p1(1,2);
|
||||
call p1(1,2);
|
||||
|
||||
drop procedure p1;
|
||||
|
||||
delimiter //;
|
||||
create procedure p1(IN id int, IN dt int)
|
||||
begin
|
||||
case (exists(select * from t1 where id1 = id and data1 = dt) or
|
||||
not exists (select * from t2 where id2 = id and data2 = dt))
|
||||
when 1 then
|
||||
select 1;
|
||||
else
|
||||
select 0;
|
||||
end case;
|
||||
end //
|
||||
delimiter ;//
|
||||
|
||||
call p1(1,2);
|
||||
call p1(1,2);
|
||||
|
||||
drop procedure p1;
|
||||
|
||||
delimiter //;
|
||||
create procedure p1(IN id int, IN dt int)
|
||||
begin
|
||||
declare wcont int default 1;
|
||||
while (exists(select * from t1 where id1 = id and data1 = dt) or
|
||||
not exists (select * from t2 where id2 = id and data2 = dt)) and wcont
|
||||
do
|
||||
select 1;
|
||||
set wcont=0;
|
||||
end while;
|
||||
end //
|
||||
delimiter ;//
|
||||
|
||||
call p1(1,2);
|
||||
call p1(1,2);
|
||||
|
||||
drop procedure p1;
|
||||
|
||||
delimiter //;
|
||||
create procedure p1(IN id int, IN dt int)
|
||||
begin
|
||||
declare count int default 1;
|
||||
repeat
|
||||
select 1;
|
||||
set count=count+1;
|
||||
until (exists(select * from t1 where id1 = id and data1 = dt) or
|
||||
not exists (select * from t2 where id2 = id and data2 = dt)) and
|
||||
count < 3
|
||||
end repeat;
|
||||
end //
|
||||
delimiter ;//
|
||||
|
||||
call p1(1,2);
|
||||
call p1(1,2);
|
||||
|
||||
drop procedure p1;
|
||||
|
||||
delimiter //;
|
||||
create procedure p1(IN id int, IN dt int)
|
||||
begin
|
||||
for i in 1..(exists(select * from t1 where id1 = id and data1 = dt) or
|
||||
not exists (select * from t2 where id2 = id and data2 = dt))
|
||||
do
|
||||
select 1;
|
||||
end for;
|
||||
end //
|
||||
delimiter ;//
|
||||
|
||||
call p1(1,2);
|
||||
call p1(1,2);
|
||||
|
||||
drop procedure p1;
|
||||
|
||||
drop table t1,t2;
|
||||
|
||||
--echo # End of 10.4 tests
|
||||
|
||||
|
||||
|
Reference in New Issue
Block a user