diff options
author | Sergey Vojtovich <svoj@mariadb.org> | 2015-04-08 10:55:51 +0400 |
---|---|---|
committer | Sergey Vojtovich <svoj@mariadb.org> | 2015-04-08 10:55:51 +0400 |
commit | 313a970cbe9ac523b0584d293e40bff66d4fbafc (patch) | |
tree | e03a162f968ae20eede7f9d78d4f929bbe86bc0c | |
parent | 7d9e94e2e6c32b906d1d8469e58bc04b8da1c121 (diff) | |
download | mariadb-git-bb-mdev7922.tar.gz |
MDEV-7922 - ERROR 1939 (HY000): Engine PERFORMANCE_SCHEMA failed to discoverbb-mdev7922
table
Performance schema discovery fails if connection has no active database set.
This happened due to restriction in SQL parser: table name with no database name
is ambiguous in such case.
Fixed by temporary substitution of default database with being discovered table
database.
-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); |