diff options
author | Monty <monty@mariadb.org> | 2019-05-16 18:30:31 +0300 |
---|---|---|
committer | Monty <monty@mariadb.org> | 2019-05-16 18:33:17 +0300 |
commit | ef04a7123a7beed5bf20736a191785be8210e242 (patch) | |
tree | 1771a5494284472d983921e38e8a08fcc738296d | |
parent | 5f66c58f6d7131c64667a06d67b6b6df02e2c47c (diff) | |
download | mariadb-git-ef04a7123a7beed5bf20736a191785be8210e242.tar.gz |
MDEV-19490 show tables fails when selecting the information_schema database
The bug was that when using mysql_list_fields, then
table_list->schema_table_name was not filled in.
Fixed by using table_list->schema_table instead, which is always
filled in.
-rw-r--r-- | sql/sql_base.cc | 5 | ||||
-rw-r--r-- | tests/mysql_client_test.c | 21 |
2 files changed, 23 insertions, 3 deletions
diff --git a/sql/sql_base.cc b/sql/sql_base.cc index 035c29d8ebc..10f0885c3ac 100644 --- a/sql/sql_base.cc +++ b/sql/sql_base.cc @@ -3398,8 +3398,7 @@ open_and_process_table(THD *thd, TABLE_LIST *tables, uint *counter, uint flags, Check whether the information schema contains a table whose name is tables->schema_table_name */ - ST_SCHEMA_TABLE *schema_table; - schema_table= find_schema_table(thd, tables->schema_table_name); + ST_SCHEMA_TABLE *schema_table= tables->schema_table; if (!schema_table || (schema_table->hidden && ((sql_command_flags[lex->sql_command] & CF_STATUS_COMMAND) == 0 || @@ -3410,7 +3409,7 @@ open_and_process_table(THD *thd, TABLE_LIST *tables, uint *counter, uint flags, lex->sql_command == SQLCOM_SHOW_KEYS))) { my_error(ER_UNKNOWN_TABLE, MYF(0), - tables->schema_table_name, INFORMATION_SCHEMA_NAME.str); + tables->table_name, INFORMATION_SCHEMA_NAME.str); DBUG_RETURN(1); } } diff --git a/tests/mysql_client_test.c b/tests/mysql_client_test.c index b668c1ab6a2..04717f1946b 100644 --- a/tests/mysql_client_test.c +++ b/tests/mysql_client_test.c @@ -8390,6 +8390,26 @@ static void test_list_fields() } +/* Test mysql_list_fields() with information_schema */ + +static void test_list_information_schema_fields() +{ + MYSQL_RES *result; + int rc; + myheader("test_list_information_schema_fields"); + + rc= mysql_select_db(mysql, "information_schema"); + myquery(rc); + result= mysql_list_fields(mysql, "all_plugins", NULL); + mytest(result); + rc= my_process_result_set(result); + DIE_UNLESS(rc == 0); + mysql_free_result(result); + rc= mysql_select_db(mysql, current_db); + myquery(rc); +} + + static void test_bug19671() { MYSQL_RES *result; @@ -19903,6 +19923,7 @@ static struct my_tests_st my_tests[]= { { "test_fetch_column", test_fetch_column }, { "test_mem_overun", test_mem_overun }, { "test_list_fields", test_list_fields }, + { "test_list_fields", test_list_information_schema_fields }, { "test_free_result", test_free_result }, { "test_free_store_result", test_free_store_result }, { "test_sqlmode", test_sqlmode }, |