mirror of
				https://github.com/MariaDB/server.git
				synced 2025-11-04 04:46:15 +01:00 
			
		
		
		
	
		
			
				
	
	
		
			187 lines
		
	
	
	
		
			4.7 KiB
		
	
	
	
		
			Text
		
	
	
	
	
	
			
		
		
	
	
			187 lines
		
	
	
	
		
			4.7 KiB
		
	
	
	
		
			Text
		
	
	
	
	
	
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 'KILL'
 |