diff options
author | unknown <msvensson@neptunus.(none)> | 2005-06-03 15:29:05 +0200 |
---|---|---|
committer | unknown <msvensson@neptunus.(none)> | 2005-06-03 15:29:05 +0200 |
commit | 1d6addd9bb7b47e04ffae3726e04661f22f14cd4 (patch) | |
tree | 983a4cae6e8952f8b852454f83261a2f9dd2bab7 /sql/sql_show.cc | |
parent | 1c7b61e3aef5227165a9957ead000e67935708b2 (diff) | |
download | mariadb-git-1d6addd9bb7b47e04ffae3726e04661f22f14cd4.tar.gz |
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:
Updated test results for test case for bug9998
mysql-test/r/mysql.result:
Updated results for test case for bug9998
mysql-test/t/lock_multi.test:
Test that "show columsn from t1" is not locked by another thread having a write lock on t1
mysql-test/t/mysql.test:
Add test case for BUG9998
- lock table t1 for write from mysql-test, then execute 'mysql' and call "USE test". This will test exactly what caused the bug.
sql/sql_show.cc:
Open tables without locking when reading metadata
Diffstat (limited to 'sql/sql_show.cc')
-rw-r--r-- | sql/sql_show.cc | 9 |
1 files changed, 4 insertions, 5 deletions
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)) |