Hi, Rucha! On Jul 30, Rucha Deodhar wrote: > revision-id: 2b527a4e858 (mariadb-10.1.43-218-g2b527a4e858) > parent(s): 57ec42bc321 > author: Rucha Deodhar <rucha.deod...@mariadb.com> > committer: Rucha Deodhar <rucha.deod...@mariadb.com> > timestamp: 2020-07-27 09:50:00 +0530 > message: > > MDEV-17729: Assertion `! is_set() || m_can_overwrite_status' failed in > Diagnostics_area::set_error_status > > Analysis: When strict mode is enabled, all warnings are converted to errors > even when there is no bad data and the query is already killed. > Fix: If the query is already killed because examined rows exceeded the limit, > the warning is not because of bad data and should not be converted to error. > > diff --git a/sql/sql_class.cc b/sql/sql_class.cc > index 6897a26bda1..3591695a22d 100644 > --- a/sql/sql_class.cc > +++ b/sql/sql_class.cc > @@ -1156,13 +1156,17 @@ Sql_condition* THD::raise_condition(uint sql_errno, > if (sqlstate == NULL) > sqlstate= mysql_errno_to_sqlstate(sql_errno); > > - if ((level == Sql_condition::WARN_LEVEL_WARN) && > - really_abort_on_warning()) > + if ((killed == NOT_KILLED) && (level == Sql_condition::WARN_LEVEL_WARN) && > + really_abort_on_warning())
I don't understand this. I presume the assert that fails is in da->set_error_status(), called below as if (!da->is_error()) { set_row_count_func(-1); da->set_error_status(sql_errno, msg, sqlstate, cond); } but if(!da->is_error()) should prevent set_error_status() from being called when it would need to overwrite the status. So how comes it is still called and triggers the assert? > { > - /* > - FIXME: > - push_warning and strict SQL_MODE case. > - */ > level= Sql_condition::WARN_LEVEL_ERROR; > set_killed(KILL_BAD_DATA); > } Regards, Sergei VP of MariaDB Server Engineering and secur...@mariadb.org _______________________________________________ Mailing list: https://launchpad.net/~maria-developers Post to : maria-developers@lists.launchpad.net Unsubscribe : https://launchpad.net/~maria-developers More help : https://help.launchpad.net/ListHelp