From 8c0f0c7b2b48f99a1077e241b1fe09338b32712c Mon Sep 17 00:00:00 2001 From: "msvensson@neptunus.(none)" <> Date: Fri, 3 Jun 2005 15:29:05 +0200 Subject: [PATCH] BUG#9998 MySQL client hangs on "USE database" Use open_normal_and_derived_tables instead of open_and_lock_tables when reading metadata for a table. Add two test cases, one for "USE database" and one for "SHOW COLUMNS FROM table" --- mysql-test/r/lock_multi.result | 7 +++++++ mysql-test/r/mysql.result | 6 ++++++ mysql-test/t/lock_multi.test | 12 ++++++++++++ mysql-test/t/mysql.test | 11 ++++++++++- sql/sql_show.cc | 9 ++++----- 5 files changed, 39 insertions(+), 6 deletions(-) diff --git a/mysql-test/r/lock_multi.result b/mysql-test/r/lock_multi.result index 9eedbf50064..73e3a9d32e3 100644 --- a/mysql-test/r/lock_multi.result +++ b/mysql-test/r/lock_multi.result @@ -36,3 +36,10 @@ lock table t1 write, t2 write; drop table t2; ERROR 42S02: Table 'test.t2' doesn't exist drop table t1; +create table t1(a int); +lock tables t1 write; +show columns from t1; +Field Type Null Key Default Extra +a int(11) YES NULL +unlock tables; +drop table t1; diff --git a/mysql-test/r/mysql.result b/mysql-test/r/mysql.result index feb0b2348cd..dbb47152926 100644 --- a/mysql-test/r/mysql.result +++ b/mysql-test/r/mysql.result @@ -48,3 +48,9 @@ Test 'go' command g a 1 drop table t1; +create table t1(a int); +lock tables t1 write; +database() +test +unlock tables; +drop table t1; diff --git a/mysql-test/t/lock_multi.test b/mysql-test/t/lock_multi.test index cbda47ac864..43cff90332b 100644 --- a/mysql-test/t/lock_multi.test +++ b/mysql-test/t/lock_multi.test @@ -94,3 +94,15 @@ connection reader; reap; connection locker; drop table t1; + + +# +# BUG#9998 - MySQL client hangs on USE "database" + +create table t1(a int); +lock tables t1 write; +connection reader; +show columns from t1; +connection locker; +unlock tables; +drop table t1; diff --git a/mysql-test/t/mysql.test b/mysql-test/t/mysql.test index d30e5b65d8e..c1d9813ea39 100644 --- a/mysql-test/t/mysql.test +++ b/mysql-test/t/mysql.test @@ -30,5 +30,14 @@ select "Test 'go' command(vertical output) \G" as " "; select "Test 'go' command \g" as " "; --exec $MYSQL test -e 'select * from t1\g' --enable_query_log - drop table t1; + +# +# BUG9998 - MySQL client hangs on USE "database" +# +create table t1(a int); +lock tables t1 write; +--exec $MYSQL -e 'use test; select database();' +unlock tables; +drop table t1; + diff --git a/sql/sql_show.cc b/sql/sql_show.cc index c873b9be369..4af76604a01 100644 --- a/sql/sql_show.cc +++ b/sql/sql_show.cc @@ -348,7 +348,7 @@ mysqld_show_create(THD *thd, TABLE_LIST *table_list) table_list->table_name)); /* Only one table for now, but VIEW can involve several tables */ - if (open_and_lock_tables(thd, table_list)) + if (open_normal_and_derived_tables(thd, table_list)) { DBUG_RETURN(TRUE); } @@ -539,8 +539,7 @@ mysqld_list_fields(THD *thd, TABLE_LIST *table_list, const char *wild) DBUG_ENTER("mysqld_list_fields"); DBUG_PRINT("enter",("table: %s",table_list->table_name)); - table_list->lock_type= TL_UNLOCK; - if (open_and_lock_tables(thd, table_list)) + if (open_normal_and_derived_tables(thd, table_list)) DBUG_VOID_RETURN; table= table_list->table; @@ -1938,7 +1937,7 @@ int get_all_tables(THD *thd, TABLE_LIST *tables, COND *cond) bool res; lex->all_selects_list= lsel; - res= open_and_lock_tables(thd, show_table_list); + res= open_normal_and_derived_tables(thd, show_table_list); if (schema_table->process_table(thd, show_table_list, table, res, show_table_list->db, show_table_list->alias)) @@ -2043,7 +2042,7 @@ int get_all_tables(THD *thd, TABLE_LIST *tables, COND *cond) show_table_list->lock_type= lock_type; lex->all_selects_list= &sel; lex->derived_tables= 0; - res= open_and_lock_tables(thd, show_table_list); + res= open_normal_and_derived_tables(thd, show_table_list); if (schema_table->process_table(thd, show_table_list, table, res, base_name, show_table_list->alias))