Commit fdcb443e authored by Monty's avatar Monty

Remember first error in Dummy_error_handler

Use Dummy_error_handler in open_stat_tables() to ignore all errors
when opening statistics tables.
parent 8941bdc4
......@@ -658,7 +658,6 @@ class No_such_table_error_handler : public Internal_error_handler
trapped and no other errors have been seen. FALSE otherwise.
*/
bool safely_trapped_errors();
bool any_error() { return m_handled_errors == 0 || m_unhandled_errors == 0; }
uint got_error() { return first_error; }
private:
......
......@@ -1989,11 +1989,17 @@ class Internal_error_handler
/**
Implements the trivial error handler which cancels all error states
and prevents an SQLSTATE to be set.
Remembers the first error
*/
class Dummy_error_handler : public Internal_error_handler
{
uint m_unhandled_errors;
uint first_error;
public:
Dummy_error_handler()
: m_unhandled_errors(0), first_error(0)
{}
bool handle_condition(THD *thd,
uint sql_errno,
const char* sqlstate,
......@@ -2001,13 +2007,15 @@ class Dummy_error_handler : public Internal_error_handler
const char* msg,
Sql_condition ** cond_hdl)
{
/* Ignore error */
return TRUE;
m_unhandled_errors++;
if (!first_error)
first_error= sql_errno;
return TRUE; // Ignore error
}
Dummy_error_handler() = default; /* Remove gcc warning */
bool any_error() { return m_unhandled_errors != 0; }
uint got_error() { return first_error; }
};
/**
Implements the trivial error handler which counts errors as they happen.
*/
......
......@@ -293,17 +293,17 @@ static inline int open_stat_table_for_ddl(THD *thd, TABLE_LIST *table,
const LEX_CSTRING *stat_tab_name)
{
table->init_one_table(&MYSQL_SCHEMA_NAME, stat_tab_name, NULL, TL_WRITE);
No_such_table_error_handler nst_handler;
thd->push_internal_handler(&nst_handler);
Dummy_error_handler error_handler;
thd->push_internal_handler(&error_handler);
int res= open_system_tables_for_read(thd, table);
thd->pop_internal_handler();
if (res && nst_handler.any_error())
if (res && error_handler.any_error())
{
push_warning_printf(thd, Sql_condition::WARN_LEVEL_WARN,
ER_CHECK_NO_SUCH_TABLE,
"Got error %d when trying to open statistics "
"table %`s for updating statistics",
nst_handler.got_error(), stat_table_name->str);
error_handler.got_error(), stat_table_name->str);
}
return res;
}
......
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