Merge epotemkin@bk-internal.mysql.com:/home/bk/mysql-5.0-opt
into moonbone.local:/mnt/gentoo64/work/27563-bug-5.0-opt-mysql sql/item_func.cc: Auto merged sql/sp_head.cc: Auto merged sql/sql_base.cc: Auto merged
This commit is contained in:
commit
c57d6f729d
@ -41,3 +41,85 @@ select 1;
|
|||||||
select RELEASE_LOCK("a");
|
select RELEASE_LOCK("a");
|
||||||
RELEASE_LOCK("a")
|
RELEASE_LOCK("a")
|
||||||
1
|
1
|
||||||
|
create table t1(f1 int);
|
||||||
|
create function bug27563() returns int(11)
|
||||||
|
deterministic
|
||||||
|
begin
|
||||||
|
declare continue handler for sqlstate '70100' set @a:= 'killed';
|
||||||
|
declare continue handler for sqlexception set @a:= 'exception';
|
||||||
|
set @a= get_lock("lock27563", 10);
|
||||||
|
return 1;
|
||||||
|
end|
|
||||||
|
select get_lock("lock27563",10);
|
||||||
|
get_lock("lock27563",10)
|
||||||
|
1
|
||||||
|
insert into t1 values (bug27563());
|
||||||
|
ERROR 70100: Query execution was interrupted
|
||||||
|
select @a;
|
||||||
|
@a
|
||||||
|
NULL
|
||||||
|
select * from t1;
|
||||||
|
f1
|
||||||
|
insert into t1 values(0);
|
||||||
|
update t1 set f1= bug27563();
|
||||||
|
ERROR 70100: Query execution was interrupted
|
||||||
|
select @a;
|
||||||
|
@a
|
||||||
|
NULL
|
||||||
|
select * from t1;
|
||||||
|
f1
|
||||||
|
0
|
||||||
|
insert into t1 values(1);
|
||||||
|
delete from t1 where bug27563() is null;
|
||||||
|
ERROR 70100: Query execution was interrupted
|
||||||
|
select @a;
|
||||||
|
@a
|
||||||
|
NULL
|
||||||
|
select * from t1;
|
||||||
|
f1
|
||||||
|
0
|
||||||
|
1
|
||||||
|
select * from t1 where f1= bug27563();
|
||||||
|
ERROR 70100: Query execution was interrupted
|
||||||
|
select @a;
|
||||||
|
@a
|
||||||
|
NULL
|
||||||
|
create procedure proc27563()
|
||||||
|
begin
|
||||||
|
declare continue handler for sqlstate '70100' set @a:= 'killed';
|
||||||
|
declare continue handler for sqlexception set @a:= 'exception';
|
||||||
|
select get_lock("lock27563",10);
|
||||||
|
select "shouldn't be selected";
|
||||||
|
end|
|
||||||
|
call proc27563();
|
||||||
|
get_lock("lock27563",10)
|
||||||
|
NULL
|
||||||
|
ERROR 70100: Query execution was interrupted
|
||||||
|
select @a;
|
||||||
|
@a
|
||||||
|
NULL
|
||||||
|
create table t2 (f2 int);
|
||||||
|
create trigger trg27563 before insert on t1 for each row
|
||||||
|
begin
|
||||||
|
declare continue handler for sqlstate '70100' set @a:= 'killed';
|
||||||
|
declare continue handler for sqlexception set @a:= 'exception';
|
||||||
|
set @a:= get_lock("lock27563",10);
|
||||||
|
insert into t2 values(1);
|
||||||
|
end|
|
||||||
|
insert into t1 values(2),(3);
|
||||||
|
ERROR 70100: Query execution was interrupted
|
||||||
|
select @a;
|
||||||
|
@a
|
||||||
|
NULL
|
||||||
|
select * from t1;
|
||||||
|
f1
|
||||||
|
0
|
||||||
|
1
|
||||||
|
select * from t2;
|
||||||
|
f2
|
||||||
|
select release_lock("lock27563");
|
||||||
|
release_lock("lock27563")
|
||||||
|
1
|
||||||
|
drop table t1, t2;
|
||||||
|
drop function bug27563;
|
||||||
|
drop procedure proc27563;
|
||||||
|
@ -117,3 +117,135 @@ reap;
|
|||||||
select 1;
|
select 1;
|
||||||
connection con1;
|
connection con1;
|
||||||
select RELEASE_LOCK("a");
|
select RELEASE_LOCK("a");
|
||||||
|
|
||||||
|
#
|
||||||
|
# Bug#27563: Stored functions and triggers wasn't throwing an error when killed.
|
||||||
|
#
|
||||||
|
create table t1(f1 int);
|
||||||
|
delimiter |;
|
||||||
|
create function bug27563() returns int(11)
|
||||||
|
deterministic
|
||||||
|
begin
|
||||||
|
declare continue handler for sqlstate '70100' set @a:= 'killed';
|
||||||
|
declare continue handler for sqlexception set @a:= 'exception';
|
||||||
|
set @a= get_lock("lock27563", 10);
|
||||||
|
return 1;
|
||||||
|
end|
|
||||||
|
delimiter ;|
|
||||||
|
# Test stored functions
|
||||||
|
# Test INSERT
|
||||||
|
connection con1;
|
||||||
|
select get_lock("lock27563",10);
|
||||||
|
connection con2;
|
||||||
|
let $ID= `select connection_id()`;
|
||||||
|
send insert into t1 values (bug27563());
|
||||||
|
real_sleep 2;
|
||||||
|
connection con1;
|
||||||
|
disable_query_log;
|
||||||
|
eval kill query $ID;
|
||||||
|
enable_query_log;
|
||||||
|
connection con2;
|
||||||
|
--error 1317
|
||||||
|
reap;
|
||||||
|
select @a;
|
||||||
|
connection con1;
|
||||||
|
select * from t1;
|
||||||
|
|
||||||
|
# Test UPDATE
|
||||||
|
insert into t1 values(0);
|
||||||
|
connection con2;
|
||||||
|
send update t1 set f1= bug27563();
|
||||||
|
real_sleep 2;
|
||||||
|
connection con1;
|
||||||
|
disable_query_log;
|
||||||
|
eval kill query $ID;
|
||||||
|
enable_query_log;
|
||||||
|
connection con2;
|
||||||
|
--error 1317
|
||||||
|
reap;
|
||||||
|
select @a;
|
||||||
|
connection con1;
|
||||||
|
select * from t1;
|
||||||
|
|
||||||
|
# Test DELETE
|
||||||
|
insert into t1 values(1);
|
||||||
|
connection con2;
|
||||||
|
send delete from t1 where bug27563() is null;
|
||||||
|
real_sleep 2;
|
||||||
|
connection con1;
|
||||||
|
disable_query_log;
|
||||||
|
eval kill query $ID;
|
||||||
|
enable_query_log;
|
||||||
|
connection con2;
|
||||||
|
--error 1317
|
||||||
|
reap;
|
||||||
|
select @a;
|
||||||
|
connection con1;
|
||||||
|
select * from t1;
|
||||||
|
|
||||||
|
# Test SELECT
|
||||||
|
connection con2;
|
||||||
|
send select * from t1 where f1= bug27563();
|
||||||
|
real_sleep 2;
|
||||||
|
connection con1;
|
||||||
|
disable_query_log;
|
||||||
|
eval kill query $ID;
|
||||||
|
enable_query_log;
|
||||||
|
connection con2;
|
||||||
|
--error 1317
|
||||||
|
reap;
|
||||||
|
select @a;
|
||||||
|
|
||||||
|
# Test PROCEDURE
|
||||||
|
connection con2;
|
||||||
|
delimiter |;
|
||||||
|
create procedure proc27563()
|
||||||
|
begin
|
||||||
|
declare continue handler for sqlstate '70100' set @a:= 'killed';
|
||||||
|
declare continue handler for sqlexception set @a:= 'exception';
|
||||||
|
select get_lock("lock27563",10);
|
||||||
|
select "shouldn't be selected";
|
||||||
|
end|
|
||||||
|
delimiter ;|
|
||||||
|
send call proc27563();
|
||||||
|
real_sleep 2;
|
||||||
|
connection con1;
|
||||||
|
disable_query_log;
|
||||||
|
eval kill query $ID;
|
||||||
|
enable_query_log;
|
||||||
|
connection con2;
|
||||||
|
--error 1317
|
||||||
|
reap;
|
||||||
|
select @a;
|
||||||
|
|
||||||
|
# Test TRIGGERS
|
||||||
|
connection con2;
|
||||||
|
create table t2 (f2 int);
|
||||||
|
delimiter |;
|
||||||
|
create trigger trg27563 before insert on t1 for each row
|
||||||
|
begin
|
||||||
|
declare continue handler for sqlstate '70100' set @a:= 'killed';
|
||||||
|
declare continue handler for sqlexception set @a:= 'exception';
|
||||||
|
set @a:= get_lock("lock27563",10);
|
||||||
|
insert into t2 values(1);
|
||||||
|
end|
|
||||||
|
delimiter ;|
|
||||||
|
send insert into t1 values(2),(3);
|
||||||
|
real_sleep 2;
|
||||||
|
connection con1;
|
||||||
|
disable_query_log;
|
||||||
|
eval kill query $ID;
|
||||||
|
enable_query_log;
|
||||||
|
connection con2;
|
||||||
|
--error 1317
|
||||||
|
reap;
|
||||||
|
select @a;
|
||||||
|
connection con1;
|
||||||
|
select * from t1;
|
||||||
|
select * from t2;
|
||||||
|
|
||||||
|
# Cleanup
|
||||||
|
select release_lock("lock27563");
|
||||||
|
drop table t1, t2;
|
||||||
|
drop function bug27563;
|
||||||
|
drop procedure proc27563;
|
||||||
|
@ -5347,6 +5347,8 @@ Item_func_sp::execute()
|
|||||||
{
|
{
|
||||||
null_value= 1;
|
null_value= 1;
|
||||||
context->process_error(thd);
|
context->process_error(thd);
|
||||||
|
if (thd->killed)
|
||||||
|
thd->send_kill_message();
|
||||||
return TRUE;
|
return TRUE;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1321,6 +1321,9 @@ err_with_cleanup:
|
|||||||
free_root(&call_mem_root, MYF(0));
|
free_root(&call_mem_root, MYF(0));
|
||||||
thd->spcont= octx;
|
thd->spcont= octx;
|
||||||
|
|
||||||
|
if (thd->killed)
|
||||||
|
thd->send_kill_message();
|
||||||
|
|
||||||
DBUG_RETURN(err_status);
|
DBUG_RETURN(err_status);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -5805,7 +5805,7 @@ fill_record(THD *thd, Field **ptr, List<Item> &values, bool ignore_errors)
|
|||||||
table= (*ptr)->table;
|
table= (*ptr)->table;
|
||||||
table->auto_increment_field_not_null= FALSE;
|
table->auto_increment_field_not_null= FALSE;
|
||||||
}
|
}
|
||||||
while ((field = *ptr++))
|
while ((field = *ptr++) && !thd->net.report_error)
|
||||||
{
|
{
|
||||||
value=v++;
|
value=v++;
|
||||||
table= field->table;
|
table= field->table;
|
||||||
|
Loading…
x
Reference in New Issue
Block a user