336 lines
		
	
	
		
			6.8 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
		
		
			
		
	
	
			336 lines
		
	
	
		
			6.8 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
|  | # 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 | ||
|  | 
 | ||
|  | # Disable concurrent inserts to avoid test failures when reading the | ||
|  | # connection id which was inserted into a table by another thread. | ||
|  | set @old_concurrent_insert= @@global.concurrent_insert; | ||
|  | set @@global.concurrent_insert= 0; | ||
|  | 
 | ||
|  | connect (con1, localhost, root,,); | ||
|  | connect (con2, localhost, root,,); | ||
|  | 
 | ||
|  | #remember id of con1 | ||
|  | connection con1; | ||
|  | --disable_warnings | ||
|  | drop table if exists t1, t2, t3; | ||
|  | --enable_warnings | ||
|  | 
 | ||
|  | --disable_reconnect | ||
|  | create table t1 (kill_id int); | ||
|  | insert into t1 values(connection_id()); | ||
|  | 
 | ||
|  | #kill con1 | ||
|  | connection con2; | ||
|  | select ((@id := kill_id) - kill_id) from t1;  | ||
|  | kill @id; | ||
|  | 
 | ||
|  | connection con1; | ||
|  | --sleep 2 | ||
|  | 
 | ||
|  | --disable_query_log | ||
|  | --disable_result_log | ||
|  | # One of the following statements should fail | ||
|  | --error 0,2006,2013 | ||
|  | select 1; | ||
|  | --error 0,2006,2013 | ||
|  | select 1; | ||
|  | --enable_query_log | ||
|  | --enable_result_log | ||
|  | 
 | ||
|  | --enable_reconnect | ||
|  | # this should work, and we should have a new connection_id() | ||
|  | select ((@id := kill_id) - kill_id) from t1; | ||
|  | select @id != connection_id(); | ||
|  | 
 | ||
|  | #make sure the server is still alive | ||
|  | connection con2; | ||
|  | select 4; | ||
|  | drop table t1; | ||
|  | connection default; | ||
|  | 
 | ||
|  | --error ER_NOT_SUPPORTED_YET | ||
|  | kill (select count(*) from mysql.user); | ||
|  | 
 | ||
|  | # | ||
|  | # 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()); | ||
|  | 
 | ||
|  | connect (conn2, localhost, root,,); | ||
|  | connection conn2; | ||
|  | 
 | ||
|  | connection conn1; | ||
|  | -- disable_result_log | ||
|  | # 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); | ||
|  | -- enable_result_log | ||
|  | 
 | ||
|  | connection conn2; | ||
|  | select ((@id := kill_id) - kill_id) from t3; | ||
|  | -- sleep 1 | ||
|  | kill @id; | ||
|  | 
 | ||
|  | connection conn1; | ||
|  | -- error 1317,2013 | ||
|  | reap; | ||
|  | 
 | ||
|  | connection default; | ||
|  | 
 | ||
|  | drop table t1, t2, t3; | ||
|  | 
 | ||
|  | # End of 4.1 tests | ||
|  | 
 | ||
|  | # | ||
|  | # 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); | ||
|  | real_sleep 2; | ||
|  | connection con1; | ||
|  | disable_query_log; | ||
|  | eval kill query $ID; | ||
|  | enable_query_log; | ||
|  | connection con2; | ||
|  | reap; | ||
|  | select 1; | ||
|  | connection con1; | ||
|  | 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; | ||
|  | 
 | ||
|  | # | ||
|  | # 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 | ||
|  | 
 | ||
|  | ########################################################################### | ||
|  | 
 | ||
|  | --echo # | ||
|  | --echo # Bug#19723: kill of active connection yields different error code | ||
|  | --echo # depending on platform. | ||
|  | --echo # | ||
|  | 
 | ||
|  | --echo | ||
|  | --echo # Connection: con2. | ||
|  | --connection con2 | ||
|  | 
 | ||
|  | KILL CONNECTION_ID(); | ||
|  | 
 | ||
|  | --echo # CR_SERVER_LOST, CR_SERVER_GONE_ERROR, depending on the timing  | ||
|  | --echo # of close of the connection socket | ||
|  | --error 2013, 2006  | ||
|  | SELECT 1; | ||
|  | --connection default | ||
|  | 
 | ||
|  | ########################################################################### | ||
|  | 
 | ||
|  | # Restore global concurrent_insert value. Keep in the end of the test file. | ||
|  | set @@global.concurrent_insert= @old_concurrent_insert; |