SET DEBUG_SYNC = 'RESET'; DROP TABLE IF EXISTS t1, t2, t3; DROP FUNCTION IF EXISTS MY_KILL; CREATE FUNCTION MY_KILL(tid INT) RETURNS INT BEGIN DECLARE CONTINUE HANDLER FOR SQLEXCEPTION BEGIN END; KILL tid; RETURN (SELECT COUNT(*) = 0 FROM INFORMATION_SCHEMA.PROCESSLIST WHERE ID = tid); END| SET DEBUG_SYNC= 'thread_end SIGNAL con1_end'; SET DEBUG_SYNC= 'before_do_command_net_read SIGNAL con1_read'; SET DEBUG_SYNC='now WAIT_FOR con1_read'; SET DEBUG_SYNC= 'now WAIT_FOR con1_end'; SET DEBUG_SYNC = 'RESET'; SELECT 1; Got one of the listed errors SELECT 1; 1 1 SELECT @id != CONNECTION_ID(); @id != CONNECTION_ID() 1 SELECT 4; 4 4 KILL (SELECT COUNT(*) FROM mysql.user); ERROR 42000: This version of MariaDB doesn't yet support 'Usage of subqueries or stored function calls as part of this statement' SET DEBUG_SYNC= 'thread_end SIGNAL con1_end'; SET DEBUG_SYNC= 'before_do_command_net_read SIGNAL con1_read WAIT_FOR kill'; SET DEBUG_SYNC= 'now WAIT_FOR con1_read'; SET DEBUG_SYNC= 'now WAIT_FOR con1_end'; SET DEBUG_SYNC = 'RESET'; SELECT 1; Got one of the listed errors SELECT 1; 1 1 SELECT @id != CONNECTION_ID(); @id != CONNECTION_ID() 1 SELECT 4; 4 4 CREATE TABLE t1 (id INT PRIMARY KEY AUTO_INCREMENT); CREATE TABLE t2 (id INT UNSIGNED NOT NULL); INSERT INTO t1 VALUES (0),(0),(0),(0),(0),(0),(0),(0), (0),(0),(0),(0),(0),(0),(0),(0), (0),(0),(0),(0),(0),(0),(0),(0), (0),(0),(0),(0),(0),(0),(0),(0), (0),(0),(0),(0),(0),(0),(0),(0), (0),(0),(0),(0),(0),(0),(0),(0), (0),(0),(0),(0),(0),(0),(0),(0), (0),(0),(0),(0),(0),(0),(0),(0); INSERT t1 SELECT 0 FROM t1 AS a1, t1 AS a2 LIMIT 4032; INSERT INTO t2 SELECT id FROM t1; SET DEBUG_SYNC= 'thread_end SIGNAL con1_end'; SET DEBUG_SYNC= 'before_acos_function SIGNAL in_sync'; SELECT id FROM t1 WHERE id IN (SELECT DISTINCT a.id FROM t2 a, t2 b, t2 c, t2 d GROUP BY ACOS(1/a.id), b.id, c.id, d.id HAVING a.id BETWEEN 10 AND 20); SET DEBUG_SYNC= 'now WAIT_FOR in_sync'; KILL @id; SET DEBUG_SYNC= 'now WAIT_FOR con1_end'; Got one of the listed errors SELECT 1; 1 1 SET DEBUG_SYNC = 'RESET'; DROP TABLE t1, t2; SET DEBUG_SYNC= 'before_acos_function SIGNAL in_sync WAIT_FOR kill'; SELECT ACOS(0); SET DEBUG_SYNC= 'now WAIT_FOR in_sync'; KILL QUERY @id; ACOS(0) 1.5707963267948966 SELECT 1; 1 1 SELECT @id = CONNECTION_ID(); @id = CONNECTION_ID() 1 SET DEBUG_SYNC = 'RESET'; 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 DEBUG_SYNC= 'now SIGNAL in_sync WAIT_FOR kill'; RETURN 1; END| INSERT INTO t1 VALUES (bug27563()); SET DEBUG_SYNC= 'now WAIT_FOR in_sync'; KILL QUERY @id; ERROR 70100: Query execution was interrupted SELECT * FROM t1; f1 SET DEBUG_SYNC = 'RESET'; INSERT INTO t1 VALUES(0); UPDATE t1 SET f1= bug27563(); SET DEBUG_SYNC= 'now WAIT_FOR in_sync'; KILL QUERY @id; ERROR 70100: Query execution was interrupted SELECT * FROM t1; f1 0 SET DEBUG_SYNC = 'RESET'; INSERT INTO t1 VALUES(1); DELETE FROM t1 WHERE bug27563() IS NULL; SET DEBUG_SYNC= 'now WAIT_FOR in_sync'; KILL QUERY @id; ERROR 70100: Query execution was interrupted SELECT * FROM t1; f1 0 1 SET DEBUG_SYNC = 'RESET'; SELECT * FROM t1 WHERE f1= bug27563(); SET DEBUG_SYNC= 'now WAIT_FOR in_sync'; KILL QUERY @id; ERROR 70100: Query execution was interrupted SELECT * FROM t1; f1 0 1 SET DEBUG_SYNC = 'RESET'; DROP FUNCTION bug27563; 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'; INSERT INTO t2 VALUES(0); SET DEBUG_SYNC= 'now SIGNAL in_sync WAIT_FOR kill'; INSERT INTO t2 VALUES(1); END| INSERT INTO t1 VALUES(2),(3); SET DEBUG_SYNC= 'now WAIT_FOR in_sync'; KILL QUERY @id; ERROR 70100: Query execution was interrupted SELECT * FROM t1; f1 0 1 SELECT * FROM t2; f2 0 SET DEBUG_SYNC = 'RESET'; DROP TABLE t1, t2; SET SESSION optimizer_search_depth=0; SET DEBUG_SYNC= 'before_join_optimize SIGNAL in_sync'; PREPARE stmt FROM 'EXPLAIN SELECT * FROM t1,t2,t3,t4,t5,t6,t7,t8,t9,t10,t11,t12,t13,t14,t15,t16,t17,t18,t19,t20,t21,t22,t23,t24,t25,t26,t27,t28,t29,t30,t31,t32,t33,t34,t35,t36,t37,t38,t39,t40 WHERE a1=a2 AND a2=a3 AND a3=a4 AND a4=a5 AND a5=a6 AND a6=a7 AND a7=a8 AND a8=a9 AND a9=a10 AND a10=a11 AND a11=a12 AND a12=a13 AND a13=a14 AND a14=a15 AND a15=a16 AND a16=a17 AND a17=a18 AND a18=a19 AND a19=a20 AND a20=a21 AND a21=a22 AND a22=a23 AND a23=a24 AND a24=a25 AND a25=a26 AND a26=a27 AND a27=a28 AND a28=a29 AND a29=a30 AND a30=a31 AND a31=a32 AND a32=a33 AND a33=a34 AND a34=a35 AND a35=a36 AND a36=a37 AND a37=a38 AND a38=a39 AND a39=a40 '; EXECUTE stmt; SET DEBUG_SYNC= 'now WAIT_FOR in_sync'; KILL QUERY @id; ERROR 70100: Query execution was interrupted SET DEBUG_SYNC = 'RESET'; # # Bug#19723: kill of active connection yields different error code # depending on platform. # # Connection: con1. SET DEBUG_SYNC= 'thread_end SIGNAL con1_end'; KILL @id; ERROR 70100: Connection was killed SET DEBUG_SYNC= 'now WAIT_FOR con1_end'; # ER_SERVER_SHUTDOWN, CR_SERVER_GONE_ERROR, CR_SERVER_LOST, # depending on the timing of close of the connection socket SELECT 1; Got one of the listed errors SELECT 1; 1 1 SELECT @id != CONNECTION_ID(); @id != CONNECTION_ID() 1 SET DEBUG_SYNC = 'RESET'; # # Additional test for WL#3726 "DDL locking for all metadata objects" # Check that DDL and DML statements waiting for metadata locks can # be killed. Note that we don't cover all situations here since it # can be tricky to write test case for some of them (e.g. REPAIR or # ALTER and other statements under LOCK TABLES). # drop tables if exists t1, t2, t3; create table t1 (i int primary key); # Test for RENAME TABLE # Switching to connection 'blocker' lock table t1 read; # Switching to connection 'ddl' rename table t1 to t2; # Switching to connection 'default' kill query ID; # Switching to connection 'ddl' ERROR 70100: Query execution was interrupted # Test for DROP TABLE drop table t1; # Switching to connection 'default' kill query ID; # Switching to connection 'ddl' ERROR 70100: Query execution was interrupted # Test for CREATE TRIGGER create trigger t1_bi before insert on t1 for each row set @a:=1; # Switching to connection 'default' kill query ID; # Switching to connection 'ddl' ERROR 70100: Query execution was interrupted # # Tests for various kinds of ALTER TABLE # # Full-blown ALTER which should copy table alter table t1 add column j int; # Switching to connection 'default' kill query ID; # Switching to connection 'ddl' ERROR 70100: Query execution was interrupted # Two kinds of simple ALTER alter table t1 rename to t2; # Switching to connection 'default' kill query ID; # Switching to connection 'ddl' ERROR 70100: Query execution was interrupted alter table t1 disable keys; # Switching to connection 'default' kill query ID; # Switching to connection 'ddl' ERROR 70100: Query execution was interrupted # Fast ALTER alter table t1 alter column i set default 100; # Switching to connection 'default' kill query ID; # Switching to connection 'ddl' ERROR 70100: Query execution was interrupted # Special case which is triggered only for MERGE tables. # Switching to connection 'blocker' unlock tables; create table t2 (i int primary key) engine=merge union=(t1); lock tables t2 read; # Switching to connection 'ddl' alter table t2 alter column i set default 100; # Switching to connection 'default' kill query ID; # Switching to connection 'ddl' ERROR 70100: Query execution was interrupted # Test for DML waiting for meta-data lock # Switching to connection 'blocker' unlock tables; lock tables t1 read; # Switching to connection 'ddl' truncate table t1; # Switching to connection 'dml' insert into t1 values (1); # Switching to connection 'default' kill query ID2; # Switching to connection 'dml' ERROR 70100: Query execution was interrupted # Switching to connection 'blocker' unlock tables; # Switching to connection 'ddl' # Test for DML waiting for tables to be flushed # Switching to connection 'blocker' lock tables t1 read; # Switching to connection 'ddl' # Let us mark locked table t1 as old flush tables; # Switching to connection 'dml' select * from t1; # Switching to connection 'default' kill query ID2; # Switching to connection 'dml' ERROR 70100: Query execution was interrupted # Switching to connection 'blocker' unlock tables; # Switching to connection 'ddl' # Cleanup. # Switching to connection 'default' drop table t1; drop table t2; # # Test kill USER # grant ALL on test.* to test@localhost; grant ALL on test.* to test2@localhost; kill hard query user test2@nohost; affected rows: 0 kill soft query user test@localhost; affected rows: 1 kill hard query user test@localhost; affected rows: 1 kill soft connection user test2; affected rows: 1 kill hard connection user test@localhost; affected rows: 1 revoke all privileges on test.* from test@localhost; revoke all privileges on test.* from test2@localhost; drop user test@localhost; drop user test2@localhost; select 1; Got one of the listed errors select 1; Got one of the listed errors SET DEBUG_SYNC = 'RESET'; DROP FUNCTION MY_KILL;