summaryrefslogtreecommitdiff
path: root/mysql-test/t
diff options
context:
space:
mode:
authorunknown <kroki/tomash@moonlight.intranet>2006-07-28 15:06:23 +0400
committerunknown <kroki/tomash@moonlight.intranet>2006-07-28 15:06:23 +0400
commit0abc107cd23978e95dc9e2b927f65d1c2b41e887 (patch)
treebdd3f448cf9a340822fb06223056bce8a3bdb3fb /mysql-test/t
parentec4a7522ce6b3363881b3b9b2d7140e672297347 (diff)
downloadmariadb-git-0abc107cd23978e95dc9e2b927f65d1c2b41e887.tar.gz
Bug#16581: deadlock: server and client both read from connection in
'conc_sys' test Concurrent execution of SELECT involing at least two INFORMATION_SCHEMA tables, DROP DATABASE statement and DROP TABLE statement could have resulted in stalled connection for this SELECT statement. The problem was that for the first query of a join there was a race between select from I_S.TABLES and DROP DATABASE, and the error (no such database) was prepared to be send to the client, but the join processing was continued. On second query to I_S.COLUMNS there was a race with DROP TABLE, but this error (no such table) was downgraded to warning, and thd->net.report_error was reset. And so neither result nor error was sent to the client. The solution is to stop join processing once it is clear we are going to report a error, and also to downgrade to warnings file system errors like 'no such database' (unless we are in the 'SHOW' command), because I_S is designed not to use locks and the query to I_S should not abort if something is dropped in the middle. No test case is provided since this bug is a result of a race, and is timing dependant. But we test that plain SHOW TABLES and SHOW COLUMNS give a error if there is no such database or a table respectively. mysql-test/r/show_check.result: Add result for the test that SHOW TABLES and SHOW COLUMNS give a error if there is no such database or a table respectively. mysql-test/t/show_check.test: Add test case that SHOW TABLES and SHOW COLUMNS give a error if there is no such database or a table respectively. sql/mysql_priv.h: Remove prototype of mysql_find_files(), which is made static under find_files() name. sql/sql_show.cc: Rename mysql_find_files() to find_files() and make it static. Return FIND_FILES_OK for success, FIND_FILES_OOM for out of memory, and FIND_FILES_DIR for directory reading error. Downgrade error to warning in get_all_tables() if it is a FIND_FILES_DIR error, and we are not in the 'SHOW' command. Once 'result' is set to 1 in get_schema_tables_result(), there's no need in continuing iterations, as we are about to return a error.
Diffstat (limited to 'mysql-test/t')
-rw-r--r--mysql-test/t/show_check.test11
1 files changed, 11 insertions, 0 deletions
diff --git a/mysql-test/t/show_check.test b/mysql-test/t/show_check.test
index 6937cbe949d..65a81545c87 100644
--- a/mysql-test/t/show_check.test
+++ b/mysql-test/t/show_check.test
@@ -495,4 +495,15 @@ SHOW CREATE VIEW v1;
DROP PROCEDURE p1;
DROP VIEW v1;
+
+#
+# Check that SHOW TABLES and SHOW COLUMNS give a error if there is no
+# referenced database and table respectively.
+#
+--error ER_BAD_DB_ERROR
+SHOW TABLES FROM no_such_database;
+--error ER_NO_SUCH_TABLE
+SHOW COLUMNS FROM no_such_table;
+
+
# End of 5.0 tests.