diff options
Diffstat (limited to 'mysql-test/include/deadlock.inc')
-rw-r--r-- | mysql-test/include/deadlock.inc | 147 |
1 files changed, 147 insertions, 0 deletions
diff --git a/mysql-test/include/deadlock.inc b/mysql-test/include/deadlock.inc new file mode 100644 index 00000000000..41c68f39320 --- /dev/null +++ b/mysql-test/include/deadlock.inc @@ -0,0 +1,147 @@ +# 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 |