summaryrefslogtreecommitdiff
path: root/mysql-test
diff options
context:
space:
mode:
authorunknown <monty@hundin.mysql.fi>2001-11-26 02:16:38 +0200
committerunknown <monty@hundin.mysql.fi>2001-11-26 02:16:38 +0200
commit4615e50093d635f07f2940bb9fbe7e1c327b8ebb (patch)
tree1f8e0f608f035ad5906f6ea2dbbb3006ea2703bd /mysql-test
parent7ef7d93726929ec678a8b07bed1be7bb56ad4b10 (diff)
downloadmariadb-git-4615e50093d635f07f2940bb9fbe7e1c327b8ebb.tar.gz
Fix race condition in ANALYZE TABLE.
Fixed bug where one got an empty set instead of a DEADLOCK error when using BDB tables. Docs/manual.texi: Cleanup configure.in: Version number change mysql-test/t/backup.test: drop used tables mysql-test/t/bdb-crash.test: cleanup mysys/thr_lock.c: cleanup sql/mysqld.cc: safety fix sql/records.cc: Fixed bug where one got an empty set instead of a DEADLOCK error when using BDB tables. sql/sql_table.cc: Fix race condition in ANALYZE TABLE.
Diffstat (limited to 'mysql-test')
-rw-r--r--mysql-test/r/bdb-deadlock.result10
-rw-r--r--mysql-test/t/backup.test1
-rw-r--r--mysql-test/t/bdb-crash.test14
-rw-r--r--mysql-test/t/bdb-deadlock.test48
4 files changed, 66 insertions, 7 deletions
diff --git a/mysql-test/r/bdb-deadlock.result b/mysql-test/r/bdb-deadlock.result
new file mode 100644
index 00000000000..89077d16980
--- /dev/null
+++ b/mysql-test/r/bdb-deadlock.result
@@ -0,0 +1,10 @@
+x
+1
+id x
+0 1
+id x
+0 1
+id x
+0 1
+id x
+0 1
diff --git a/mysql-test/t/backup.test b/mysql-test/t/backup.test
index 43ea6fd19ad..71343783d69 100644
--- a/mysql-test/t/backup.test
+++ b/mysql-test/t/backup.test
@@ -39,6 +39,7 @@ reap;
unlock tables;
connection con1;
reap;
+drop table t1;
diff --git a/mysql-test/t/bdb-crash.test b/mysql-test/t/bdb-crash.test
index 05ab7260d23..55e00ad2a5e 100644
--- a/mysql-test/t/bdb-crash.test
+++ b/mysql-test/t/bdb-crash.test
@@ -1,7 +1,7 @@
# test for bug reported by Mark Steele
-drop table if exists tblChange;
-CREATE TABLE tblCharge (
+drop table if exists t1;
+CREATE TABLE t1 (
ChargeID int(10) unsigned DEFAULT '0' NOT NULL auto_increment,
ServiceID int(10) unsigned DEFAULT '0' NOT NULL,
ChargeDate date DEFAULT '0000-00-00' NOT NULL,
@@ -19,16 +19,16 @@ DEFAULT 'New' NOT NULL,
) type=BDB;
BEGIN;
-INSERT INTO tblCharge
+INSERT INTO t1
VALUES(NULL,1,'2001-03-01',1,1,1,'New',NULL,NULL,'now');
COMMIT;
BEGIN;
-UPDATE tblCharge SET ChargeAuthorizationMessage = 'blablabla' WHERE
+UPDATE t1 SET ChargeAuthorizationMessage = 'blablabla' WHERE
ChargeID = 1;
COMMIT;
-INSERT INTO tblCharge
+INSERT INTO t1
VALUES(NULL,1,'2001-03-01',1,1,1,'New',NULL,NULL,'now');
-select * from tblCharge;
-drop table tblCharge;
+select * from t1;
+drop table t1;
diff --git a/mysql-test/t/bdb-deadlock.test b/mysql-test/t/bdb-deadlock.test
new file mode 100644
index 00000000000..b32b50c715b
--- /dev/null
+++ b/mysql-test/t/bdb-deadlock.test
@@ -0,0 +1,48 @@
+# This test doesn't work with the embedded version as this code
+# assumes that one query is running while we are doing queries on
+# a second connection.
+# This would work if mysqltest run would be threaded and handle each
+# connection in a separate thread.
+#
+
+#-- source include/not_embedded.inc
+-- source include/have_bdb.inc
+
+connect (con1,localhost,root,,);
+connect (con2,localhost,root,,);
+
+drop table if exists t1,t2;
+connection con1;
+create table t1 (id integer, x integer) type=BDB;
+create table t2 (id integer, x integer) type=BDB;
+insert into t1 values(0, 0);
+insert into t2 values(0, 0);
+set autocommit=0;
+update t1 set x = 1 where id = 0;
+
+connection con2;
+set autocommit=0;
+update t2 set x = 1 where id = 0;
+
+# The following query should hang because con1 is locking the page
+--send
+select x from t1 where id = 0;
+
+connection con1;
+# This should generate a deadlock as we are trying to access a locked row
+--error 1213
+select x from t2 where id = 0;
+commit;
+
+connection con2;
+reap;
+commit;
+select * from t1;
+select * from t2;
+commit;
+
+connection con1;
+select * from t1;
+select * from t2;
+commit;
+drop table t1,t2;