diff --git a/sql/mysql_priv.h b/sql/mysql_priv.h index 7e58f7bf728..de1cbf5d9cd 100644 --- a/sql/mysql_priv.h +++ b/sql/mysql_priv.h @@ -817,7 +817,7 @@ MYSQL_ERROR *push_warning(THD *thd, MYSQL_ERROR::enum_warning_level level, uint const char *msg); void push_warning_printf(THD *thd, MYSQL_ERROR::enum_warning_level level, uint code, const char *format, ...); -void mysql_reset_errors(THD *thd); +void mysql_reset_errors(THD *thd, bool force= false); bool mysqld_show_warnings(THD *thd, ulong levels_to_show); /* sql_handler.cc */ diff --git a/sql/sql_base.cc b/sql/sql_base.cc index 4fd943c08f4..09640eb3f57 100644 --- a/sql/sql_base.cc +++ b/sql/sql_base.cc @@ -1606,7 +1606,8 @@ static int open_unireg_entry(THD *thd, TABLE *entry, const char *db, if (ha_create_table_from_engine(thd, db, name, TRUE) != 0) goto err; - thd->clear_error(); // Clear error message + mysql_reset_errors(thd, true); // Clear warnings + thd->clear_error(); // Clear error message continue; } diff --git a/sql/sql_error.cc b/sql/sql_error.cc index 4d254b95514..4420f2d16ad 100644 --- a/sql/sql_error.cc +++ b/sql/sql_error.cc @@ -64,6 +64,7 @@ void MYSQL_ERROR::set_msg(THD *thd, const char *msg_arg) SYNOPSIS mysql_reset_errors() thd Thread handle + force Reset warnings even if it has been done before IMPLEMENTATION Don't reset warnings if this has already been called for this query. @@ -71,14 +72,15 @@ void MYSQL_ERROR::set_msg(THD *thd, const char *msg_arg) in which case push_warnings() has already called this function. */ -void mysql_reset_errors(THD *thd) +void mysql_reset_errors(THD *thd, bool force) { DBUG_ENTER("mysql_reset_errors"); - if (thd->query_id != thd->warn_id) + if (thd->query_id != thd->warn_id || force) { thd->warn_id= thd->query_id; free_root(&thd->warn_root,MYF(0)); bzero((char*) thd->warn_count, sizeof(thd->warn_count)); + if (force) thd->total_warn_count= 0; thd->warn_list.empty(); thd->row_count= 1; // by default point to row 1 }