The following flags can be examined or set to alter the behavior during error handling:
thd->net.report_error
thd->net.report_error is set in
my_message_sql() if the error message was
registered. (my_message_sql() is called by
my_error(),
my_printf_error(),
my_message()).
thd->query_error
Like net.report_error, but is always set to 1
in my_message_sql() if error was not caught by
an error handler. Used by replication to see if a query generated
any kind of errors.
thd->no_warnings_for_error
Normally an error also generates a warning. The warning can be
disabled by setting
thd->no_warnings_for_error. (This allows one
to catch all error messages generated by a statement)
thd->lex->current_select->no_error
This is set to in case likes INSERT IGNORE ...
SELECT. In this case we ignore all not fatal errors
generated by the select.
thd->is_fatal_error
Set this if we should abort the current statement (and any
multi-line statements) because something went fatally wrong. (for
example, a stored procedure continue handler should not be able to
catch this). This is reset by
mysql_reset_thd_for_next_command().
thd->abort_on_warning
Strict mode flag, which means that we should abort the statement
if we get a warning. In the field::store
function this changes the warning level from
WARN to ERROR. In other
cases, this flag is mostly tested with
thd->really_abort_on_warning() to ensure we
don't abort in the middle of an update with not transactional
tables.
thd->count_cuted_fields
If set, we generate warning for field conversations (normal case
for
INSERT/UPDATE/DELETE).
This is mainly set to 0 when doing internal copying of data
between fields and we don't want to generate any conversion errors
at any level.
thd->killed
Set in case of error in connection protocol or in case of 'kill'. In this case we should abort the query and kill the connection.
Error functions
thd->really_abort_on_warning()
This function returns 1 if a warning should be converted to an
error, like in strict mode when all tables are transactional. The
conversion is handled in
sql_error.cc::push_warning().
thd->fatal_error()
Should be called if we want to abort the current statement and any multi-line statement.
thd->clear_error()
Resets thd->net.report_error and
thd->query_error.
