Details
-
Bug
-
Status: Closed (View Workflow)
-
Major
-
Resolution: Fixed
-
10.0.3
-
None
-
None
Description
Since SQL_ERROR_LOG logs all errors that happen withing a stored procedure (while only the last one is returned to the user), it can be a useful debug tool. Thus I've tried to use SIGNAL to add debug messages to my procedures during development, but it seems that the SIGNALed errors are not logged:
DELIMITER ||
|
DROP PROCEDURE IF EXISTS t;
|
CREATE PROCEDURE t()
|
BEGIN
|
DECLARE n TINYINT UNSIGNED DEFAULT rand();
|
DECLARE CONTINUE HANDLER
|
FOR SQLSTATE '01000'
|
DO NULL;
|
IF n <= 1 THEN
|
SET @dbug_msg = CONCAT('n=', n);
|
SIGNAL SQLSTATE '01000' SET
|
MYSQL_ERRNO = 1644,
|
MESSAGE_TEXT = @dbug_msg;
|
ELSE
|
SIGNAL SQLSTATE '01000' SET
|
MYSQL_ERRNO = 1644,
|
MESSAGE_TEXT = 'Hey... how did this happen??';
|
END IF;
|
DO 'something';
|
END;
|
||
|
DELIMITER ;
|
CALL t();
|
If you replace SIGNAL with SELECT 1 FROM not_existing_table, the error is logged (DECLARE HANDLER doesn't interfer with SQL_ERRORS_LOG, and this is good).
I used '01000' SQL STATE and 1644 code because they are not warnings.
Attachments
Issue Links
- relates to
-
MDEV-5419 no audit events for warnings converted to errors in the strict mode
- Closed