1
0
mirror of https://github.com/MariaDB/server.git synced 2025-07-30 16:24:05 +03:00

MDEV-14426 Assertion in Diagnostics_area::set_error_status when using a bad datetime with PS and SP

This commit is contained in:
Alexander Barkov
2017-12-22 08:22:10 +04:00
parent 9c28fd7a33
commit a76a2522ec
3 changed files with 75 additions and 0 deletions

View File

@ -4786,7 +4786,19 @@ bool Prepared_statement::execute(String *expanded_query, bool open_cursor)
if (error == 0 && this->lex->sql_command == SQLCOM_CALL)
{
if (is_sql_prepare())
{
/*
Here we have the diagnostics area status already set to DA_OK.
sent_out_parameters() can raise errors when assigning OUT parameters:
DECLARE a DATETIME;
EXECUTE IMMEDIATE 'CALL p1(?)' USING a;
when the procedure p1 assigns a DATETIME-incompatible value (e.g. 10)
to the out parameter. Allow to overwrite status (to DA_ERROR).
*/
thd->get_stmt_da()->set_overwrite_status(true);
thd->protocol_text.send_out_parameters(&this->lex->param_list);
thd->get_stmt_da()->set_overwrite_status(false);
}
else
thd->protocol->send_out_parameters(&this->lex->param_list);
}