2001-10-08 03:58:07 +02:00
|
|
|
# This test doesn't work with the embedded version as this code
|
|
|
|
# assumes that one query is running while we are doing queries on
|
|
|
|
# a second connection.
|
|
|
|
# This would work if mysqltest run would be threaded and handle each
|
|
|
|
# connection in a separate thread.
|
|
|
|
#
|
|
|
|
-- source include/not_embedded.inc
|
|
|
|
|
2001-03-25 00:02:26 +01:00
|
|
|
connect (con1, localhost, root,,);
|
|
|
|
connect (con2, localhost, root,,);
|
2001-03-14 07:07:12 +01:00
|
|
|
|
|
|
|
#remember id of con1
|
|
|
|
connection con1;
|
2003-01-06 00:48:59 +01:00
|
|
|
--disable_warnings
|
2006-01-18 12:48:57 +01:00
|
|
|
drop table if exists t1, t2, t3;
|
2003-01-06 00:48:59 +01:00
|
|
|
--enable_warnings
|
|
|
|
|
2005-08-18 02:12:42 +02:00
|
|
|
--disable_reconnect
|
2001-03-15 02:55:48 +01:00
|
|
|
create table t1 (kill_id int);
|
|
|
|
insert into t1 values(connection_id());
|
2001-03-14 07:07:12 +01:00
|
|
|
|
|
|
|
#kill con1
|
|
|
|
connection con2;
|
2001-03-15 02:55:48 +01:00
|
|
|
select ((@id := kill_id) - kill_id) from t1;
|
2001-03-14 07:07:12 +01:00
|
|
|
kill @id;
|
|
|
|
|
|
|
|
connection con1;
|
2006-01-05 23:47:49 +01:00
|
|
|
--sleep 2
|
2005-03-28 19:59:41 +02:00
|
|
|
|
2006-01-05 23:47:49 +01:00
|
|
|
--disable_query_log
|
|
|
|
--disable_result_log
|
|
|
|
# One of the following statements should fail
|
|
|
|
--error 0,2006,2013
|
2005-03-28 19:59:41 +02:00
|
|
|
select 1;
|
2006-01-05 23:47:49 +01:00
|
|
|
--error 0,2006,2013
|
|
|
|
select 1;
|
|
|
|
--enable_query_log
|
|
|
|
--enable_result_log
|
|
|
|
|
2005-03-28 19:59:41 +02:00
|
|
|
--enable_reconnect
|
|
|
|
# this should work, and we should have a new connection_id()
|
|
|
|
select ((@id := kill_id) - kill_id) from t1;
|
2001-03-15 02:55:48 +01:00
|
|
|
select @id != connection_id();
|
2001-03-14 07:07:12 +01:00
|
|
|
|
|
|
|
#make sure the server is still alive
|
|
|
|
connection con2;
|
|
|
|
select 4;
|
2001-03-15 02:55:48 +01:00
|
|
|
drop table t1;
|
2006-01-18 12:48:57 +01:00
|
|
|
connection default;
|
2005-07-28 02:22:47 +02:00
|
|
|
|
2006-03-06 18:26:39 +01:00
|
|
|
--error 1064
|
|
|
|
kill (select count(*) from mysql.user);
|
|
|
|
|
2006-01-18 12:48:57 +01:00
|
|
|
#
|
|
|
|
# BUG#14851: killing long running subquery processed via a temporary table.
|
|
|
|
#
|
|
|
|
create table t1 (id int primary key);
|
|
|
|
create table t2 (id int unsigned not null);
|
|
|
|
|
|
|
|
connect (conn1, localhost, root,,);
|
|
|
|
connection conn1;
|
|
|
|
|
|
|
|
-- disable_result_log
|
|
|
|
-- disable_query_log
|
|
|
|
let $1 = 4096;
|
|
|
|
while ($1)
|
|
|
|
{
|
|
|
|
eval insert into t1 values ($1);
|
|
|
|
dec $1;
|
|
|
|
}
|
|
|
|
-- enable_query_log
|
|
|
|
-- enable_result_log
|
|
|
|
|
|
|
|
insert into t2 select id from t1;
|
|
|
|
|
|
|
|
create table t3 (kill_id int);
|
|
|
|
insert into t3 values(connection_id());
|
|
|
|
|
2006-12-08 17:09:07 +01:00
|
|
|
connect (conn2, localhost, root,,);
|
|
|
|
connection conn2;
|
|
|
|
|
|
|
|
connection conn1;
|
2006-01-18 12:48:57 +01:00
|
|
|
-- disable_result_log
|
2007-06-22 03:39:52 +02:00
|
|
|
# This is a very long running query. If this test start failing, it may
|
|
|
|
# be necessary to change to an even longer query.
|
|
|
|
send select id from t1 where id in (select distinct a.id from t2 a, t2 b, t2 c, t2 d group by a.id, b.id, c.id, d.id having a.id between 10 and 20);
|
2006-01-18 12:48:57 +01:00
|
|
|
-- enable_result_log
|
|
|
|
|
|
|
|
connection conn2;
|
|
|
|
select ((@id := kill_id) - kill_id) from t3;
|
|
|
|
-- sleep 1
|
|
|
|
kill @id;
|
|
|
|
|
|
|
|
connection conn1;
|
2006-02-07 12:45:16 +01:00
|
|
|
-- error 1053,2013
|
2006-01-18 12:48:57 +01:00
|
|
|
reap;
|
|
|
|
|
|
|
|
connection default;
|
|
|
|
|
|
|
|
drop table t1, t2, t3;
|
|
|
|
|
2005-07-28 02:22:47 +02:00
|
|
|
# End of 4.1 tests
|
2005-07-28 16:09:54 +02:00
|
|
|
|
2005-01-20 09:41:37 +01:00
|
|
|
#
|
|
|
|
# test of blocking of sending ERROR after OK or EOF
|
|
|
|
#
|
|
|
|
connection con1;
|
|
|
|
select get_lock("a", 10);
|
|
|
|
connection con2;
|
|
|
|
let $ID= `select connection_id()`;
|
|
|
|
send select get_lock("a", 10);
|
2005-09-01 17:01:23 +02:00
|
|
|
real_sleep 2;
|
2005-01-20 09:41:37 +01:00
|
|
|
connection con1;
|
|
|
|
disable_query_log;
|
|
|
|
eval kill query $ID;
|
|
|
|
enable_query_log;
|
|
|
|
connection con2;
|
|
|
|
reap;
|
|
|
|
select 1;
|
|
|
|
connection con1;
|
|
|
|
select RELEASE_LOCK("a");
|
2007-05-23 21:24:16 +02:00
|
|
|
|
|
|
|
#
|
|
|
|
# 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;
|
2007-05-31 09:10:21 +02:00
|
|
|
|
|
|
|
#
|
|
|
|
# Bug#28598: mysqld crash when killing a long-running explain query.
|
|
|
|
#
|
|
|
|
--disable_query_log
|
|
|
|
connection con1;
|
|
|
|
let $ID= `select connection_id()`;
|
|
|
|
let $tab_count= 40;
|
|
|
|
|
|
|
|
let $i= $tab_count;
|
|
|
|
while ($i)
|
|
|
|
{
|
|
|
|
eval CREATE TABLE t$i (a$i int, KEY(a$i));
|
|
|
|
eval INSERT INTO t$i VALUES (1),(2),(3),(4),(5),(6),(7);
|
|
|
|
dec $i ;
|
|
|
|
}
|
|
|
|
set session optimizer_search_depth=0;
|
|
|
|
|
|
|
|
let $i=$tab_count;
|
|
|
|
while ($i)
|
|
|
|
{
|
|
|
|
let $a= a$i;
|
|
|
|
let $t= t$i;
|
|
|
|
dec $i;
|
|
|
|
if ($i)
|
|
|
|
{
|
|
|
|
let $comma=,;
|
|
|
|
let $from=$comma$t$from;
|
|
|
|
let $where=a$i=$a $and $where;
|
|
|
|
}
|
|
|
|
if (!$i)
|
|
|
|
{
|
|
|
|
let $from=FROM $t$from;
|
|
|
|
let $where=WHERE $where;
|
|
|
|
}
|
|
|
|
let $and=AND;
|
|
|
|
}
|
|
|
|
|
|
|
|
--enable_query_log
|
|
|
|
eval PREPARE stmt FROM 'EXPLAIN SELECT * $from $where';
|
|
|
|
send EXECUTE stmt;
|
|
|
|
--disable_query_log
|
|
|
|
|
|
|
|
connection con2;
|
|
|
|
real_sleep 2;
|
|
|
|
eval kill query $ID;
|
|
|
|
let $i= $tab_count;
|
|
|
|
while ($i)
|
|
|
|
{
|
|
|
|
eval DROP TABLE t$i;
|
|
|
|
dec $i ;
|
|
|
|
}
|
|
|
|
--enable_query_log
|