mirror of
				https://github.com/MariaDB/server.git
				synced 2025-11-03 14:33:32 +03:00 
			
		
		
		
	- Use mysql_system_tables.sql to create MySQL system tables in all places where we create them(mysql_install_db, mysql-test-run-pl and mysql_fix_privilege_tables.sql)
		
			
				
	
	
		
			253 lines
		
	
	
		
			5.2 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
			
		
		
	
	
			253 lines
		
	
	
		
			5.2 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
-- source include/not_embedded.inc
 | 
						|
--disable_warnings
 | 
						|
drop table if exists t1,t2;
 | 
						|
--enable_warnings
 | 
						|
 | 
						|
# Test to see if select will get the lock ahead of low priority update
 | 
						|
 | 
						|
connect (locker,localhost,root,,);
 | 
						|
connect (reader,localhost,root,,);
 | 
						|
connect (writer,localhost,root,,);
 | 
						|
 | 
						|
connection locker;
 | 
						|
create table t1(n int);
 | 
						|
insert into t1 values (1);
 | 
						|
lock tables t1 write;
 | 
						|
connection writer;
 | 
						|
send update low_priority t1 set n = 4;
 | 
						|
connection reader;
 | 
						|
--sleep 2
 | 
						|
send select n from t1;
 | 
						|
connection locker;
 | 
						|
--sleep 2
 | 
						|
unlock tables;
 | 
						|
connection writer;
 | 
						|
reap;
 | 
						|
connection reader;
 | 
						|
reap;
 | 
						|
drop table t1;
 | 
						|
 | 
						|
connection locker;
 | 
						|
create table t1(n int);
 | 
						|
insert into t1 values (1);
 | 
						|
lock tables t1 read;
 | 
						|
connection writer;
 | 
						|
send update low_priority t1 set n = 4;
 | 
						|
connection reader;
 | 
						|
--sleep 2
 | 
						|
send select n from t1;
 | 
						|
connection locker;
 | 
						|
--sleep 2
 | 
						|
unlock tables;
 | 
						|
connection writer;
 | 
						|
reap;
 | 
						|
connection reader;
 | 
						|
reap;
 | 
						|
drop table t1;
 | 
						|
 | 
						|
#
 | 
						|
# Test problem when using locks with multi-updates
 | 
						|
# It should not block when multi-update is reading on a read-locked table
 | 
						|
#
 | 
						|
 | 
						|
connection locker;
 | 
						|
create table t1 (a int, b int);
 | 
						|
create table t2 (c int, d int);
 | 
						|
insert into t1 values(1,1);
 | 
						|
insert into t1 values(2,2);
 | 
						|
insert into t2 values(1,2);
 | 
						|
lock table t1 read;
 | 
						|
connection writer;
 | 
						|
--sleep 2
 | 
						|
send update t1,t2 set c=a where b=d;
 | 
						|
connection reader;
 | 
						|
--sleep 2
 | 
						|
select c from t2;
 | 
						|
connection writer;
 | 
						|
reap;
 | 
						|
connection locker;
 | 
						|
drop table t1;
 | 
						|
drop table t2;
 | 
						|
 | 
						|
#
 | 
						|
# Test problem when using locks on many tables and droping a table that
 | 
						|
# is to-be-locked by another thread
 | 
						|
#
 | 
						|
 | 
						|
connection locker;
 | 
						|
create table t1 (a int);
 | 
						|
create table t2 (a int);
 | 
						|
lock table t1 write, t2 write;
 | 
						|
connection reader;
 | 
						|
send insert t1 select * from t2;
 | 
						|
connection locker;
 | 
						|
drop table t2;
 | 
						|
connection reader;
 | 
						|
--error 1146
 | 
						|
reap;
 | 
						|
connection locker;
 | 
						|
drop table t1;
 | 
						|
 | 
						|
# End of 4.1 tests
 | 
						|
 | 
						|
#
 | 
						|
# BUG#9998 - MySQL client hangs on USE "database"
 | 
						|
#
 | 
						|
create table t1(a int);
 | 
						|
lock tables t1 write;
 | 
						|
connection reader;
 | 
						|
show columns from t1;
 | 
						|
connection locker;
 | 
						|
unlock tables;
 | 
						|
drop table t1;
 | 
						|
 | 
						|
#
 | 
						|
# Bug#19815 - CREATE/RENAME/DROP DATABASE can deadlock on a global read lock
 | 
						|
#
 | 
						|
connect (con1,localhost,root,,);
 | 
						|
connect (con2,localhost,root,,);
 | 
						|
#
 | 
						|
connection con1;
 | 
						|
CREATE DATABASE mysqltest_1;
 | 
						|
FLUSH TABLES WITH READ LOCK;
 | 
						|
#
 | 
						|
# With bug in place: acquire LOCK_mysql_create_table and
 | 
						|
# wait in wait_if_global_read_lock().
 | 
						|
connection con2;
 | 
						|
send DROP DATABASE mysqltest_1;
 | 
						|
--sleep 1
 | 
						|
#
 | 
						|
# With bug in place: try to acquire LOCK_mysql_create_table...
 | 
						|
# When fixed: Reject dropping db because of the read lock.
 | 
						|
connection con1;
 | 
						|
--error ER_CANT_UPDATE_WITH_READLOCK
 | 
						|
DROP DATABASE mysqltest_1;
 | 
						|
UNLOCK TABLES;
 | 
						|
#
 | 
						|
connection con2;
 | 
						|
reap;
 | 
						|
#
 | 
						|
connection default;
 | 
						|
disconnect con1;
 | 
						|
disconnect con2;
 | 
						|
# This must have been dropped by connection 2 already,
 | 
						|
# which waited until the global read lock was released.
 | 
						|
--error ER_DB_DROP_EXISTS
 | 
						|
DROP DATABASE mysqltest_1;
 | 
						|
 | 
						|
#
 | 
						|
# Bug#16986 - Deadlock condition with MyISAM tables
 | 
						|
#
 | 
						|
 | 
						|
# Need a matching user in mysql.user for multi-table select
 | 
						|
--source include/add_anonymous_users.inc
 | 
						|
 | 
						|
connection locker;
 | 
						|
use mysql;
 | 
						|
LOCK TABLES columns_priv WRITE, db WRITE, host WRITE, user WRITE;
 | 
						|
FLUSH TABLES;
 | 
						|
--sleep 1
 | 
						|
#
 | 
						|
connection reader;
 | 
						|
use mysql;
 | 
						|
#NOTE:  This must be a multi-table select, otherwise the deadlock will not occur
 | 
						|
send SELECT user.Select_priv FROM user, db WHERE user.user = db.user LIMIT 1;
 | 
						|
--sleep 1
 | 
						|
#
 | 
						|
connection locker;
 | 
						|
# Make test case independent from earlier grants.
 | 
						|
--replace_result "Table is already up to date" "OK"
 | 
						|
OPTIMIZE TABLES columns_priv, db, host, user;
 | 
						|
UNLOCK TABLES;
 | 
						|
#
 | 
						|
connection reader;
 | 
						|
reap;
 | 
						|
use test;
 | 
						|
#
 | 
						|
connection locker;
 | 
						|
use test;
 | 
						|
#
 | 
						|
connection default;
 | 
						|
#
 | 
						|
# Test if CREATE TABLE with LOCK TABLE deadlocks.
 | 
						|
#
 | 
						|
connection writer;
 | 
						|
CREATE TABLE t1 (c1 int);
 | 
						|
LOCK TABLE t1 WRITE;
 | 
						|
#
 | 
						|
# This waits until t1 is unlocked.
 | 
						|
connection locker;
 | 
						|
send FLUSH TABLES WITH READ LOCK;
 | 
						|
--sleep 1
 | 
						|
#
 | 
						|
# This must not block.
 | 
						|
connection writer;
 | 
						|
CREATE TABLE t2 (c1 int);
 | 
						|
UNLOCK TABLES;
 | 
						|
#
 | 
						|
# This awakes now.
 | 
						|
connection locker;
 | 
						|
reap;
 | 
						|
UNLOCK TABLES;
 | 
						|
#
 | 
						|
connection default;
 | 
						|
DROP TABLE t1, t2;
 | 
						|
#
 | 
						|
# Test if CREATE TABLE SELECT with LOCK TABLE deadlocks.
 | 
						|
#
 | 
						|
connection writer;
 | 
						|
CREATE TABLE t1 (c1 int);
 | 
						|
LOCK TABLE t1 WRITE;
 | 
						|
#
 | 
						|
# This waits until t1 is unlocked.
 | 
						|
connection locker;
 | 
						|
send FLUSH TABLES WITH READ LOCK;
 | 
						|
--sleep 1
 | 
						|
#
 | 
						|
# This must not block.
 | 
						|
connection writer;
 | 
						|
--error 1100
 | 
						|
CREATE TABLE t2 AS SELECT * FROM t1;
 | 
						|
UNLOCK TABLES;
 | 
						|
#
 | 
						|
# This awakes now.
 | 
						|
connection locker;
 | 
						|
reap;
 | 
						|
UNLOCK TABLES;
 | 
						|
#
 | 
						|
connection default;
 | 
						|
DROP TABLE t1;
 | 
						|
 | 
						|
--source include/delete_anonymous_users.inc
 | 
						|
 | 
						|
#
 | 
						|
# Bug #17264: MySQL Server freeze
 | 
						|
#
 | 
						|
connection locker;
 | 
						|
# Disable warnings to allow test to run also without InnoDB
 | 
						|
--disable_warnings
 | 
						|
create table t1 (f1 int(12) unsigned not null auto_increment, primary key(f1)) engine=innodb;
 | 
						|
--enable_warnings
 | 
						|
lock tables t1 write;
 | 
						|
connection writer;
 | 
						|
--sleep 2
 | 
						|
delimiter //;
 | 
						|
send alter table t1 auto_increment=0; alter table t1 auto_increment=0; alter table t1 auto_increment=0; alter table t1 auto_increment=0; alter table t1 auto_increment=0; //
 | 
						|
delimiter ;//
 | 
						|
connection reader;
 | 
						|
--sleep 2
 | 
						|
delimiter //;
 | 
						|
send alter table t1 auto_increment=0; alter table t1 auto_increment=0; alter table t1 auto_increment=0; alter table t1 auto_increment=0; alter table t1 auto_increment=0; //
 | 
						|
delimiter ;//
 | 
						|
connection locker;
 | 
						|
--sleep 2
 | 
						|
unlock tables;
 | 
						|
connection writer;
 | 
						|
reap;
 | 
						|
connection reader;
 | 
						|
reap;
 | 
						|
connection locker;
 | 
						|
drop table t1;
 | 
						|
 | 
						|
# End of 5.0 tests
 |