diff options
author | unknown <marko@hundin.mysql.fi> | 2004-04-29 16:42:33 +0300 |
---|---|---|
committer | unknown <marko@hundin.mysql.fi> | 2004-04-29 16:42:33 +0300 |
commit | 3594adb165279605c0cf6519f5c3a5b5378f3d91 (patch) | |
tree | 5013e7c0279115014b75320a87795fe461ac1285 /mysql-test | |
parent | b7468a97a2fd4a5500edbbf9884d548f78cbf57c (diff) | |
download | mariadb-git-3594adb165279605c0cf6519f5c3a5b5378f3d91.tar.gz |
InnoDB: implement LOCK TABLE (Bug #3299)
innobase/include/lock0lock.h:
Add lock_table_unlock() and lock_release_tables_off_kernel()
Add LOCK_TABLE_EXP
innobase/include/row0mysql.h:
Add row_unlock_table_for_mysql() and row_lock_table_for_mysql()
innobase/include/trx0trx.h:
Add n_tables_locked
innobase/lock/lock0lock.c:
Add LOCK_TABLE_EXP for explicit LOCK TABLE commands
Add lock_table_unlock()
Add lock_release_tables_off_kernel()
innobase/row/row0mysql.c:
Add row_unlock_table_for_mysql() and row_lock_table_for_mysql()
innobase/trx/trx0trx.c:
Add n_tables_locked
mysql-test/r/innodb.result:
Updated handling of auto_inc columns
sql/ha_innodb.cc:
Call row_lock_table_for_mysql() and row_unlock_table_for_mysql()
Diffstat (limited to 'mysql-test')
-rw-r--r-- | mysql-test/r/innodb-lock.result | 22 | ||||
-rw-r--r-- | mysql-test/r/innodb.result | 2 | ||||
-rw-r--r-- | mysql-test/t/innodb-lock.test | 40 |
3 files changed, 63 insertions, 1 deletions
diff --git a/mysql-test/r/innodb-lock.result b/mysql-test/r/innodb-lock.result new file mode 100644 index 00000000000..cf00adb30ae --- /dev/null +++ b/mysql-test/r/innodb-lock.result @@ -0,0 +1,22 @@ +drop table if exists t1; +create table t1 (id integer, x integer) engine=INNODB; +insert into t1 values(0, 0); +set autocommit=0; +SELECT * from t1 where id = 0 FOR UPDATE; +id x +0 0 +set autocommit=0; +lock table t1 write; +update t1 set x=1 where id = 0; +select * from t1; +id x +0 1 +commit; +update t1 set x=2 where id = 0; +commit; +unlock tables; +select * from t1; +id x +0 2 +commit; +drop table t1; diff --git a/mysql-test/r/innodb.result b/mysql-test/r/innodb.result index 6a67bbc6f8b..1a92946bfcd 100644 --- a/mysql-test/r/innodb.result +++ b/mysql-test/r/innodb.result @@ -431,7 +431,7 @@ Duplicate entry 'test2' for key 2 select * from t1; id ggid email passwd 1 this will work -3 test2 this will work +4 test2 this will work select * from t1 where id=1; id ggid email passwd 1 this will work diff --git a/mysql-test/t/innodb-lock.test b/mysql-test/t/innodb-lock.test new file mode 100644 index 00000000000..43a175508b4 --- /dev/null +++ b/mysql-test/t/innodb-lock.test @@ -0,0 +1,40 @@ +-- source include/have_innodb.inc + +connect (con1,localhost,root,,); +connect (con2,localhost,root,,); +drop table if exists t1; + +# +# Testing of explicit table locks +# + +connection con1; +create table t1 (id integer, x integer) engine=INNODB; +insert into t1 values(0, 0); +set autocommit=0; +SELECT * from t1 where id = 0 FOR UPDATE; + +connection con2; +set autocommit=0; + +# The following statement should hang because con1 is locking the page +--send +lock table t1 write; +--sleep 2; + +connection con1; +update t1 set x=1 where id = 0; +select * from t1; +commit; + +connection con2; +reap; +update t1 set x=2 where id = 0; +commit; +unlock tables; + +connection con1; +select * from t1; +commit; + +drop table t1; |