summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSergey Vojtovich <svoj@mariadb.org>2015-04-08 10:55:51 +0400
committerSergey Vojtovich <svoj@mariadb.org>2015-04-08 10:55:51 +0400
commit313a970cbe9ac523b0584d293e40bff66d4fbafc (patch)
treee03a162f968ae20eede7f9d78d4f929bbe86bc0c
parent7d9e94e2e6c32b906d1d8469e58bc04b8da1c121 (diff)
downloadmariadb-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.result12
-rw-r--r--mysql-test/suite/perfschema/t/discovery.test15
-rw-r--r--sql/table.cc3
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);