From ef04a7123a7beed5bf20736a191785be8210e242 Mon Sep 17 00:00:00 2001 From: Monty Date: Thu, 16 May 2019 18:30:31 +0300 Subject: 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. --- sql/sql_base.cc | 5 ++--- 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 }, -- cgit v1.2.1