diff options
author | unknown <kostja@bodhi.(none)> | 2007-07-16 23:31:36 +0400 |
---|---|---|
committer | unknown <kostja@bodhi.(none)> | 2007-07-16 23:31:36 +0400 |
commit | 9562c54a5c1172fa536d27bb67e86d7af93183d8 (patch) | |
tree | 53d9d30f94c45fc9b3f51662dd10574784b16e0a /mysql-test/t/trigger-trans.test | |
parent | b6c0fb605d613df14405e1d7c5621d22b35bc4fe (diff) | |
parent | 8023d91929247f1b2e2f81ca10daca4dde4ab2e2 (diff) | |
download | mariadb-git-9562c54a5c1172fa536d27bb67e86d7af93183d8.tar.gz |
Merge bodhi.(none):/opt/local/work/mysql-5.0-runtime
into bodhi.(none):/opt/local/work/mysql-5.1-runtime
mysql-test/r/trigger.result:
Auto merged
mysql-test/t/query_cache.test:
Auto merged
mysql-test/t/sp.test:
Auto merged
mysql-test/t/trigger.test:
Auto merged
sql/item.cc:
Auto merged
sql/item.h:
Auto merged
sql/mysql_priv.h:
Auto merged
sql/sp_head.h:
Auto merged
sql/sql_base.cc:
Auto merged
sql/sql_db.cc:
Auto merged
sql/sql_lex.cc:
Auto merged
sql/sql_lex.h:
Auto merged
sql/sql_parse.cc:
Auto merged
sql/sql_select.cc:
Auto merged
sql/sql_show.cc:
Auto merged
sql/sql_trigger.h:
Auto merged
sql/sql_view.cc:
Auto merged
sql/table.cc:
Auto merged
storage/myisam/ha_myisam.h:
Auto merged
mysql-test/include/mix1.inc:
Manual merge.
mysql-test/r/information_schema.result:
Manual merge.
mysql-test/r/innodb_mysql.result:
Manual merge.
mysql-test/r/query_cache.result:
Manual merge.
mysql-test/r/sp.result:
Manual merge.
mysql-test/t/information_schema.test:
Manual merge.
sql/handler.h:
Manual merge.
sql/sp.cc:
Manual merge.
sql/sp_head.cc:
Manual merge.
sql/sql_prepare.cc:
Manual merge.
sql/sql_trigger.cc:
Manual merge.
sql/sql_yacc.yy:
Manual merge.
sql/table.h:
Manual merge.
storage/myisam/ha_myisam.cc:
Manual merge.
Diffstat (limited to 'mysql-test/t/trigger-trans.test')
-rw-r--r-- | mysql-test/t/trigger-trans.test | 82 |
1 files changed, 81 insertions, 1 deletions
diff --git a/mysql-test/t/trigger-trans.test b/mysql-test/t/trigger-trans.test index 5c135d98878..8103a1ba0b1 100644 --- a/mysql-test/t/trigger-trans.test +++ b/mysql-test/t/trigger-trans.test @@ -49,4 +49,84 @@ insert into t1 values ('The Pie', 50, 1, 1); select * from t1; drop table t1; -# End of 5.0 tests +--echo +--echo Bug#26141 mixing table types in trigger causes full +--echo table lock on innodb table +--echo +--echo Ensure we do not open and lock tables for the triggers we do not +--echo fire. +--echo +--disable_warnings +drop table if exists t1, t2, t3; +drop trigger if exists trg_bug26141_au; +drop trigger if exists trg_bug26141_ai; +--enable_warnings +# Note, for InnoDB to allow concurrent UPDATE and INSERT the +# table must have a unique key. +create table t1 (c int primary key) engine=innodb; +create table t2 (c int) engine=myisam; +create table t3 (c int) engine=myisam; +insert into t1 (c) values (1); +delimiter |; + +create trigger trg_bug26141_ai after insert on t1 +for each row +begin + insert into t2 (c) values (1); +# We need the 'sync' lock to synchronously wait in connection 2 till +# the moment when the trigger acquired all the locks. + select release_lock("lock_bug26141_sync") into @a; +# 1000 is time in seconds of lock wait timeout -- this is a way +# to cause a manageable sleep up to 1000 seconds + select get_lock("lock_bug26141_wait", 1000) into @a; +end| + +create trigger trg_bug26141_au after update on t1 +for each row +begin + insert into t3 (c) values (1); +end| +delimiter ;| + +# Establish an alternative connection. +--connect (connection_aux,localhost,root,,test,,) +--connect (connection_update,localhost,root,,test,,) + +connection connection_aux; +# Lock the wait lock, it must not be locked, so specify zero timeout. +select get_lock("lock_bug26141_wait", 0); + +# +connection default; +# +# Run the trigger synchronously +# +select get_lock("lock_bug26141_sync", /* must not be priorly locked */ 0); +# Will acquire the table level locks, perform the insert into t2, +# release the sync lock and block on the wait lock. +send insert into t1 (c) values (2); + +connection connection_update; +# Wait for the trigger to acquire its locks and unlock the sync lock. +select get_lock("lock_bug26141_sync", 1000); +# +# This must continue: after the fix for the bug, we do not +# open tables for t2, and with c=4 innobase allows the update +# to run concurrently with insert. +update t1 set c=3 where c=1; +select release_lock("lock_bug26141_sync"); +connection connection_aux; +select release_lock("lock_bug26141_wait"); +connection default; +reap; +select * from t1; +select * from t2; +select * from t3; + +# Drops the trigger as well. +drop table t1, t2, t3; +disconnect connection_update; +disconnect connection_aux; + + +--echo End of 5.0 tests |