set local sql_mode=""; set global sql_mode=""; connect con1, localhost, root; connect con2, localhost, root; # # 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). # create table t1 (i int primary key); connect blocker, localhost, root, , ; connect dml, localhost, root, , ; connect ddl, localhost, root, , ; # Test for RENAME TABLE connection blocker; lock table t1 read; connection ddl; rename table t1 to t2; connection default; kill query ID; connection ddl; ERROR 70100: Query execution was interrupted # Test for DROP TABLE drop table t1; connection default; kill query ID; 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; connection default; kill query ID; 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; connection default; kill query ID; connection ddl; ERROR 70100: Query execution was interrupted # Two kinds of simple ALTER alter table t1 rename to t2; connection default; kill query ID; connection ddl; ERROR 70100: Query execution was interrupted alter table t1 disable keys; connection default; kill query ID; connection ddl; ERROR 70100: Query execution was interrupted # Fast ALTER alter table t1 alter column i set default 100; connection default; kill query ID; connection ddl; ERROR 70100: Query execution was interrupted # Special case which is triggered only for MERGE tables. connection blocker; unlock tables; create table t2 (i int primary key) engine=merge union=(t1); lock tables t2 read; connection ddl; alter table t2 alter column i set default 100; connection default; kill query ID; connection ddl; ERROR 70100: Query execution was interrupted # Test for DML waiting for meta-data lock connection blocker; unlock tables; lock tables t1 read; connection ddl; truncate table t1; connection dml; insert into t1 values (1); connection default; kill query ID2; connection dml; ERROR 70100: Query execution was interrupted connection blocker; unlock tables; connection ddl; # Test for DML waiting for tables to be flushed connection blocker; lock tables t1 read; connection ddl; # Let us mark locked table t1 as old flush tables t1; connection dml; select * from t1; connection default; kill query ID2; connection dml; ERROR 70100: Query execution was interrupted connection blocker; unlock tables; connection ddl; # Cleanup. 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; connect con3, localhost, test,,; connect con4, localhost, test2,,; connection default; 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; connection con3; select 1; Got one of the listed errors connection con4; select 1; Got one of the listed errors connection default; # # MDEV-4911 - add KILL query id, and add query id information to # processlist # SELECT SLEEP(1000); connection con1; KILL QUERY ID @id; connection default; ERROR 70100: Query execution was interrupted KILL QUERY ID 0; ERROR HY000: Unknown query id: 0 # # MDEV-5096 - Wrong error message on attempt to kill somebody else's # query ID # CREATE USER u1@localhost; SELECT SLEEP(1000); connection con1; connect con5, localhost, u1,,; KILL QUERY ID ID; ERROR HY000: You are not owner of query ID connection con1; KILL QUERY ID @id; connection default; ERROR 70100: Query execution was interrupted disconnect con5; DROP USER u1@localhost; set global sql_mode=default; disconnect con1; disconnect con2; # # MDEV-17998 # Deadlock and eventual Assertion `!table->pos_in_locked_tables' failed # in tc_release_table on KILL_TIMEOUT # SET max_statement_time= 2; CREATE TABLE t1 (a INT); CREATE VIEW v1 AS SELECT * FROM t1; CREATE TABLE t2 (b INT, c INT); LOCK TABLES v1 READ, t2 WRITE, t1 WRITE; ALTER TABLE t1 CHANGE f1 f2 DOUBLE; Got one of the listed errors ALTER TABLE t2 DROP c; UNLOCK TABLES; DROP VIEW v1; DROP TABLE t1, t2; # # KILL QUERY ID USER # kill query id user 'foo'; ERROR 42S22: Unknown column 'user' in 'field list'