Commit 1140b1a6 authored by kroki/tomash@moonlight.intranet's avatar kroki/tomash@moonlight.intranet

Merge bk-internal.mysql.com:/home/bk/mysql-4.1-runtime

into  moonlight.intranet:/home/tomash/src/mysql_ab/mysql-4.1-bug21096
parents 109d58af 2a422148
......@@ -108,3 +108,20 @@ d c
bar 2
foo 1
drop table t1, t2;
DROP TABLE IF EXISTS t1;
CREATE TABLE t1 (i INT);
LOCK TABLE t1 WRITE;
CREATE TEMPORARY TABLE t1 (i INT);
The following command should not block
DROP TEMPORARY TABLE t1;
DROP TABLE t1;
CREATE TABLE t1 (i INT);
CREATE TEMPORARY TABLE t2 (i INT);
DROP TEMPORARY TABLE t2, t1;
ERROR 42S02: Unknown table 't1'
SELECT * FROM t2;
ERROR 42S02: Table 'test.t2' doesn't exist
SELECT * FROM t1;
i
DROP TABLE t1;
End of 4.1 tests.
......@@ -99,4 +99,50 @@ insert into t2 values (NULL, 'foo'), (NULL, 'bar');
select d, c from t1 left join t2 on b = c where a = 3 order by d;
drop table t1, t2;
# End of 4.1 tests
#
# BUG#21096: locking issue ; temporary table conflicts.
#
# The problem was that on DROP TEMPORARY table name lock was acquired,
# which should not be done.
#
--disable_warnings
DROP TABLE IF EXISTS t1;
--enable_warnings
CREATE TABLE t1 (i INT);
LOCK TABLE t1 WRITE;
connect (conn1, localhost, root,,);
CREATE TEMPORARY TABLE t1 (i INT);
--echo The following command should not block
DROP TEMPORARY TABLE t1;
disconnect conn1;
connection default;
DROP TABLE t1;
#
# Check that it's not possible to drop a base table with
# DROP TEMPORARY statement.
#
CREATE TABLE t1 (i INT);
CREATE TEMPORARY TABLE t2 (i INT);
--error 1051
DROP TEMPORARY TABLE t2, t1;
# Table t2 should have been dropped.
--error 1146
SELECT * FROM t2;
# But table t1 should still be there.
SELECT * FROM t1;
DROP TABLE t1;
--echo End of 4.1 tests.
......@@ -214,7 +214,7 @@ int mysql_rm_table_part2(THD *thd, TABLE_LIST *tables, bool if_exists,
bool some_tables_deleted=0, tmp_table_deleted=0, foreign_key_error=0;
DBUG_ENTER("mysql_rm_table_part2");
if (lock_table_names(thd, tables))
if (!drop_temporary && lock_table_names(thd, tables))
DBUG_RETURN(1);
for (table=tables ; table ; table=table->next)
......@@ -311,6 +311,7 @@ int mysql_rm_table_part2(THD *thd, TABLE_LIST *tables, bool if_exists,
}
}
if (!drop_temporary)
unlock_table_names(thd, tables);
DBUG_RETURN(error);
}
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment