MDEV-14426 Assertion in Diagnostics_area::set_error_status when using a bad datetime with PS and SP
This commit is contained in:
parent
9c28fd7a33
commit
a76a2522ec
@ -5074,3 +5074,32 @@ t1 CREATE TABLE `t1` (
|
|||||||
) ENGINE=MyISAM DEFAULT CHARSET=latin1
|
) ENGINE=MyISAM DEFAULT CHARSET=latin1
|
||||||
DROP TABLE t1;
|
DROP TABLE t1;
|
||||||
DROP PROCEDURE p1;
|
DROP PROCEDURE p1;
|
||||||
|
#
|
||||||
|
# MDEV-14426 Assertion in Diagnostics_area::set_error_status when using a bad datetime with PS and SP
|
||||||
|
#
|
||||||
|
CREATE PROCEDURE p1(OUT a VARCHAR(20))
|
||||||
|
BEGIN
|
||||||
|
SET a=10;
|
||||||
|
END;
|
||||||
|
$$
|
||||||
|
BEGIN NOT ATOMIC
|
||||||
|
DECLARE a DATETIME;
|
||||||
|
CALL p1(a);
|
||||||
|
END;
|
||||||
|
$$
|
||||||
|
ERROR 22007: Incorrect datetime value: '10' for column 'a' at row 1
|
||||||
|
BEGIN NOT ATOMIC
|
||||||
|
DECLARE a DATETIME;
|
||||||
|
EXECUTE IMMEDIATE 'CALL p1(?)' USING a;
|
||||||
|
END;
|
||||||
|
$$
|
||||||
|
ERROR 22007: Incorrect datetime value: '10' for column 'a' at row 1
|
||||||
|
BEGIN NOT ATOMIC
|
||||||
|
DECLARE a DATETIME;
|
||||||
|
PREPARE stmt FROM 'CALL p1(?)';
|
||||||
|
EXECUTE stmt USING a;
|
||||||
|
DEALLOCATE PREPARE stmt;
|
||||||
|
END;
|
||||||
|
$$
|
||||||
|
ERROR 22007: Incorrect datetime value: '10' for column 'a' at row 1
|
||||||
|
DROP PROCEDURE p1;
|
||||||
|
@ -4529,3 +4529,37 @@ CREATE TABLE t1 AS SELECT @a AS a, @b AS b;
|
|||||||
SHOW CREATE TABLE t1;
|
SHOW CREATE TABLE t1;
|
||||||
DROP TABLE t1;
|
DROP TABLE t1;
|
||||||
DROP PROCEDURE p1;
|
DROP PROCEDURE p1;
|
||||||
|
|
||||||
|
|
||||||
|
--echo #
|
||||||
|
--echo # MDEV-14426 Assertion in Diagnostics_area::set_error_status when using a bad datetime with PS and SP
|
||||||
|
--echo #
|
||||||
|
|
||||||
|
DELIMITER $$;
|
||||||
|
CREATE PROCEDURE p1(OUT a VARCHAR(20))
|
||||||
|
BEGIN
|
||||||
|
SET a=10;
|
||||||
|
END;
|
||||||
|
$$
|
||||||
|
--error ER_TRUNCATED_WRONG_VALUE
|
||||||
|
BEGIN NOT ATOMIC
|
||||||
|
DECLARE a DATETIME;
|
||||||
|
CALL p1(a);
|
||||||
|
END;
|
||||||
|
$$
|
||||||
|
--error ER_TRUNCATED_WRONG_VALUE
|
||||||
|
BEGIN NOT ATOMIC
|
||||||
|
DECLARE a DATETIME;
|
||||||
|
EXECUTE IMMEDIATE 'CALL p1(?)' USING a;
|
||||||
|
END;
|
||||||
|
$$
|
||||||
|
--error ER_TRUNCATED_WRONG_VALUE
|
||||||
|
BEGIN NOT ATOMIC
|
||||||
|
DECLARE a DATETIME;
|
||||||
|
PREPARE stmt FROM 'CALL p1(?)';
|
||||||
|
EXECUTE stmt USING a;
|
||||||
|
DEALLOCATE PREPARE stmt;
|
||||||
|
END;
|
||||||
|
$$
|
||||||
|
DELIMITER ;$$
|
||||||
|
DROP PROCEDURE p1;
|
||||||
|
@ -4786,7 +4786,19 @@ bool Prepared_statement::execute(String *expanded_query, bool open_cursor)
|
|||||||
if (error == 0 && this->lex->sql_command == SQLCOM_CALL)
|
if (error == 0 && this->lex->sql_command == SQLCOM_CALL)
|
||||||
{
|
{
|
||||||
if (is_sql_prepare())
|
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->protocol_text.send_out_parameters(&this->lex->param_list);
|
||||||
|
thd->get_stmt_da()->set_overwrite_status(false);
|
||||||
|
}
|
||||||
else
|
else
|
||||||
thd->protocol->send_out_parameters(&this->lex->param_list);
|
thd->protocol->send_out_parameters(&this->lex->param_list);
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user