mirror of
https://github.com/MariaDB/server.git
synced 2025-01-20 05:52:27 +01:00
aaa9ed3eff
WL#3397 Refactoring storage engine test cases (for falcon) It contains also fixes according to code review. Contents: Testcases which were in history dedicated to InnoDB or MyISAM only. Modifications: 1. Shift the main testing code into include/<testing field>.inc Introduce $variables which can be used to omit tests for features which are not supported by certain storage engines. 2. The storage engine to be tested is assigned within the toplevel script (t/<whatever>_<engine>.test) via variable $engine_type and the the main testing code is sourced from include/<testing field>.inc 3. Some toplevel testscripts have to be renamed to - avoid immediate or future namespace clashes - show via filename which storage engine is tested 4. Minor code cleanup like remove trailing spaces, some additional comments ....
147 lines
3.1 KiB
PHP
147 lines
3.1 KiB
PHP
# include/deadlock.inc
|
|
#
|
|
# The variable
|
|
# $engine_type -- storage engine to be tested
|
|
# has to be set before sourcing this script.
|
|
#
|
|
# Last update:
|
|
# 2006-07-26 ML refactoring + print when connection is switched
|
|
# old name was t/innodb-deadlock.test
|
|
# main code went into include/deadlock.inc
|
|
#
|
|
|
|
--echo # Establish connection con1 (user=root)
|
|
connect (con1,localhost,root,,);
|
|
--echo # Establish connection con2 (user=root)
|
|
connect (con2,localhost,root,,);
|
|
|
|
--disable_warnings
|
|
drop table if exists t1,t2;
|
|
--enable_warnings
|
|
|
|
#
|
|
# Testing of FOR UPDATE
|
|
#
|
|
|
|
--echo # Switch to connection con1
|
|
connection con1;
|
|
eval create table t1 (id integer, x integer) engine = $engine_type;
|
|
insert into t1 values(0, 0);
|
|
set autocommit=0;
|
|
SELECT * from t1 where id = 0 FOR UPDATE;
|
|
|
|
--echo # Switch to connection con2
|
|
connection con2;
|
|
set autocommit=0;
|
|
|
|
# The following query should hang because con1 is locking the record
|
|
--send
|
|
update t1 set x=2 where id = 0;
|
|
--sleep 2
|
|
|
|
--echo # Switch to connection con1
|
|
connection con1;
|
|
update t1 set x=1 where id = 0;
|
|
select * from t1;
|
|
commit;
|
|
|
|
--echo # Switch to connection con2
|
|
connection con2;
|
|
reap;
|
|
commit;
|
|
|
|
--echo # Switch to connection con1
|
|
connection con1;
|
|
select * from t1;
|
|
commit;
|
|
|
|
drop table t1;
|
|
#
|
|
# Testing of FOR UPDATE
|
|
#
|
|
|
|
--echo # Switch to connection con1
|
|
connection con1;
|
|
eval create table t1 (id integer, x integer) engine = $engine_type;
|
|
eval create table t2 (b integer, a integer) engine = $engine_type;
|
|
insert into t1 values(0, 0), (300, 300);
|
|
insert into t2 values(0, 10), (1, 20), (2, 30);
|
|
commit;
|
|
set autocommit=0;
|
|
select * from t2;
|
|
update t2 set a=100 where b=(SELECT x from t1 where id = b FOR UPDATE);
|
|
select * from t2;
|
|
select * from t1;
|
|
|
|
--echo # Switch to connection con2
|
|
connection con2;
|
|
set autocommit=0;
|
|
|
|
# The following query should hang because con1 is locking the record
|
|
--send
|
|
update t1 set x=2 where id = 0;
|
|
--sleep 2
|
|
|
|
--echo # Switch to connection con1
|
|
connection con1;
|
|
update t1 set x=1 where id = 0;
|
|
select * from t1;
|
|
commit;
|
|
|
|
--echo # Switch to connection con2
|
|
connection con2;
|
|
reap;
|
|
commit;
|
|
|
|
--echo # Switch to connection con1
|
|
connection con1;
|
|
select * from t1;
|
|
commit;
|
|
|
|
drop table t1, t2;
|
|
eval create table t1 (id integer, x integer) engine = $engine_type;
|
|
eval create table t2 (b integer, a integer) engine = $engine_type;
|
|
insert into t1 values(0, 0), (300, 300);
|
|
insert into t2 values(0, 0), (1, 20), (2, 30);
|
|
commit;
|
|
|
|
--echo # Switch to connection con1
|
|
connection con1;
|
|
select a,b from t2 UNION SELECT id, x from t1 FOR UPDATE;
|
|
select * from t2;
|
|
select * from t1;
|
|
|
|
--echo # Switch to connection con2
|
|
connection con2;
|
|
|
|
# The following query should hang because con1 is locking the record
|
|
update t2 set a=2 where b = 0;
|
|
select * from t2;
|
|
--send
|
|
update t1 set x=2 where id = 0;
|
|
--sleep 2
|
|
|
|
--echo # Switch to connection con1
|
|
connection con1;
|
|
update t1 set x=1 where id = 0;
|
|
select * from t1;
|
|
commit;
|
|
|
|
--echo # Switch to connection con2
|
|
connection con2;
|
|
reap;
|
|
commit;
|
|
|
|
--echo # Switch to connection con1
|
|
connection con1;
|
|
select * from t1;
|
|
commit;
|
|
|
|
# Cleanup
|
|
--echo # Switch to connection default + disconnect con1 and con2
|
|
connection default;
|
|
disconnect con1;
|
|
disconnect con2;
|
|
drop table t1, t2;
|
|
|
|
# End of 4.1 tests
|