Commit 67dbff68 authored by Alexander Nozdrin's avatar Alexander Nozdrin

Backporting a patch for Bug#43138. That patch had been already backported

to 5.1 partially. This patch brings what was left to mysql-next-mr.

Original revisions in 6.0:
------------------------------------------------------------
revno: 2617.31.26
committer: Alexander Nozdrin <alik@sun.com>
branch nick: 6.0-rt-bug43138.3
timestamp: Thu 2009-04-30 19:31:30 +0400
message:
  Fix for Bug#43138: DROP DATABASE failure does not clean up message list.
  
  The problem was that the high-level function mysql_rm_db() invoked
  low-level mysql_rm_table_part2(), which reported low-level error
  (Unknown table) if SE refused to delete a table. Also when
  mysql_rm_table_part2() reported an error, it didn't add corresponding
  warning into the list (because it is used from other places where such
  behaviour is required).
  
  The fix is to
    1. Remove no_warnings_for_error usage from sql_table.cc
    2. Improve internal error handler support in THD, so that
       a stack of error handlers is allowed.
    3. Create an internal error handler (Drop_table_error_handler)
       to silence useless warnings.
    4. Use the handler in DROP DATABASE and DROP TABLE statements.
------------------------------------------------------------
revno: 2617.69.38
committer: Alexander Nozdrin <alik@sun.com>
branch nick: mysql-next-bugfixing-bug37431
timestamp: Mon 2009-08-24 21:52:09 +0400
message:
  A test case for Bug#37431 (DROP TABLE does not report errors correctly).
------------------------------------------------------------
revno: 2617.31.29
committer: Dmitry Lenev <dlenev@mysql.com>
branch nick: mysql-6.0-runtime
timestamp: Fri 2009-05-01 17:37:34 +0400
message:
  Follow-up for fix for bug "Bug#43138: DROP DATABASE failure
  does not clean up message list".
  
  Fixed drop.test failure under non-debug server by moving part
  of test dependent on debug-only feature to separate .test file,
  which won't be run for non-debug versions of server.
------------------------------------------------------------
revno: 2617.45.17
committer: Sergei Golubchik <serg@mysql.com>
branch nick: 6.0-maria
timestamp: Wed 2009-05-13 20:08:58 +0200
message:
  followup for bug#43138
  if delete fails with a permission denied error, we want to show it
------------------------------------------------------------

The patch was backported to 5.1 in scope of Bug#42364 by
the following revision:
------------------------------------------------------------
revno: 2497.975.3
committer: Sergey Glukhov <Sergey.Glukhov@sun.com>
branch nick: mysql-5.1-bugteam
timestamp: Fri 2009-07-03 13:22:06 +0500
message:
  Bug#42364 SHOW ERRORS returns empty resultset after dropping non existent table
  enabled message storing into error message list
  for 'drop table' command
------------------------------------------------------------
parent 09195da3
...@@ -121,3 +121,17 @@ ERROR 42000: Incorrect table name '#mysql50#aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa ...@@ -121,3 +121,17 @@ ERROR 42000: Incorrect table name '#mysql50#aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
use test; use test;
drop database mysqltestbug26703; drop database mysqltestbug26703;
End of 5.1 tests End of 5.1 tests
# --
# -- Bug#37431 (DROP TABLE does not report errors correctly).
# --
DROP TABLE IF EXISTS t1;
DROP TABLE t1;
ERROR 42S02: Unknown table 't1'
SHOW WARNINGS;
Level Code Message
Error 1051 Unknown table 't1'
# --
# -- End of Bug#37431.
# --
...@@ -202,3 +202,24 @@ use test; ...@@ -202,3 +202,24 @@ use test;
drop database mysqltestbug26703; drop database mysqltestbug26703;
--echo End of 5.1 tests --echo End of 5.1 tests
###########################################################################
--echo
--echo # --
--echo # -- Bug#37431 (DROP TABLE does not report errors correctly).
--echo # --
--disable_warnings
DROP TABLE IF EXISTS t1;
--enable_warnings
--error ER_BAD_TABLE_ERROR
DROP TABLE t1;
SHOW WARNINGS;
--echo
--echo # --
--echo # -- End of Bug#37431.
--echo # --
...@@ -390,7 +390,7 @@ char *thd_security_context(THD *thd, char *buffer, unsigned int length, ...@@ -390,7 +390,7 @@ char *thd_security_context(THD *thd, char *buffer, unsigned int length,
/** /**
Implementation of Drop_table_error_handler::handle_error(). Implementation of Drop_table_error_handler::handle_condition().
The reason in having this implementation is to silence technical low-level The reason in having this implementation is to silence technical low-level
warnings during DROP TABLE operation. Currently we don't want to expose warnings during DROP TABLE operation. Currently we don't want to expose
the following warnings during DROP TABLE: the following warnings during DROP TABLE:
......
...@@ -2054,6 +2054,12 @@ int mysql_rm_table_part2(THD *thd, TABLE_LIST *tables, bool if_exists, ...@@ -2054,6 +2054,12 @@ int mysql_rm_table_part2(THD *thd, TABLE_LIST *tables, bool if_exists,
} }
DBUG_PRINT("table", ("table: 0x%lx s: 0x%lx", (long) table->table, DBUG_PRINT("table", ("table: 0x%lx s: 0x%lx", (long) table->table,
table->table ? (long) table->table->s : (long) -1)); table->table ? (long) table->table->s : (long) -1));
DBUG_EXECUTE_IF("bug43138",
my_printf_error(ER_BAD_TABLE_ERROR,
ER(ER_BAD_TABLE_ERROR), MYF(0),
table->table_name););
} }
/* /*
It's safe to unlock LOCK_open: we have an exclusive lock It's safe to unlock LOCK_open: we have an exclusive lock
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment