diff options
-rw-r--r-- | mysql-test/suite/perfschema/r/discovery.result | 12 | ||||
-rw-r--r-- | mysql-test/suite/perfschema/t/discovery.test | 15 | ||||
-rw-r--r-- | sql/table.cc | 3 |
3 files changed, 30 insertions, 0 deletions
diff --git a/mysql-test/suite/perfschema/r/discovery.result b/mysql-test/suite/perfschema/r/discovery.result new file mode 100644 index 00000000000..2f939cae154 --- /dev/null +++ b/mysql-test/suite/perfschema/r/discovery.result @@ -0,0 +1,12 @@ +# +# MDEV-7922 - ERROR 1939 (HY000): Engine PERFORMANCE_SCHEMA failed to +# discover table +# +FLUSH TABLES; +CREATE DATABASE test_drop; +USE test_drop; +DROP DATABASE test_drop; +SELECT TABLE_NAME, TABLE_ROWS FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_SCHEMA='performance_schema'; +SELECT @@warning_count; +@@warning_count +0 diff --git a/mysql-test/suite/perfschema/t/discovery.test b/mysql-test/suite/perfschema/t/discovery.test new file mode 100644 index 00000000000..811e99da705 --- /dev/null +++ b/mysql-test/suite/perfschema/t/discovery.test @@ -0,0 +1,15 @@ +--source include/not_embedded.inc +--source include/have_perfschema.inc + +--echo # +--echo # MDEV-7922 - ERROR 1939 (HY000): Engine PERFORMANCE_SCHEMA failed to +--echo # discover table +--echo # +FLUSH TABLES; +CREATE DATABASE test_drop; +USE test_drop; +DROP DATABASE test_drop; +--disable_result_log +SELECT TABLE_NAME, TABLE_ROWS FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_SCHEMA='performance_schema'; +--enable_result_log +SELECT @@warning_count; diff --git a/sql/table.cc b/sql/table.cc index 5c85d5668ed..54a686197b0 100644 --- a/sql/table.cc +++ b/sql/table.cc @@ -2158,6 +2158,7 @@ int TABLE_SHARE::init_from_sql_statement_string(THD *thd, bool write, uint unused2; handlerton *hton= plugin_hton(db_plugin); LEX_CUSTRING frm= {0,0}; + LEX_STRING db_backup= { thd->db, thd->db_length }; DBUG_ENTER("TABLE_SHARE::init_from_sql_statement_string"); @@ -2185,6 +2186,7 @@ int TABLE_SHARE::init_from_sql_statement_string(THD *thd, bool write, else thd->set_n_backup_active_arena(arena, &backup); + thd->reset_db(db.str, db.length); lex_start(thd); if ((error= parse_sql(thd, & parser_state, NULL) || @@ -2213,6 +2215,7 @@ int TABLE_SHARE::init_from_sql_statement_string(THD *thd, bool write, ret: my_free(const_cast<uchar*>(frm.str)); lex_end(thd->lex); + thd->reset_db(db_backup.str, db_backup.length); thd->lex= old_lex; if (arena) thd->restore_active_arena(arena, &backup); |