diff options
author | Alexander Barkov <bar@mariadb.org> | 2017-12-22 08:22:10 +0400 |
---|---|---|
committer | Alexander Barkov <bar@mariadb.org> | 2017-12-22 08:23:33 +0400 |
commit | a76a2522ec4f8c069827e038997387a8b8eb3a3a (patch) | |
tree | 945540cb61152d4ee1e26a799aa504ed842f25e1 /sql/sql_prepare.cc | |
parent | 9c28fd7a3337a4d6773f3b53e70af9a3b0dbb919 (diff) | |
download | mariadb-git-a76a2522ec4f8c069827e038997387a8b8eb3a3a.tar.gz |
MDEV-14426 Assertion in Diagnostics_area::set_error_status when using a bad datetime with PS and SP
Diffstat (limited to 'sql/sql_prepare.cc')
-rw-r--r-- | sql/sql_prepare.cc | 12 |
1 files changed, 12 insertions, 0 deletions
diff --git a/sql/sql_prepare.cc b/sql/sql_prepare.cc index 19c714cfc01..ae6f0e8f63d 100644 --- a/sql/sql_prepare.cc +++ b/sql/sql_prepare.cc @@ -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); } |