mirror of
https://github.com/MariaDB/server.git
synced 2025-01-17 12:32:27 +01:00
e86b6c0db4
The problem was that the warnings risen by a trigger were not cleared upon successful completion. The warnings should be cleared if the trigger completes successfully. The fix is to skip merging warnings into caller's Warning Info for triggers.
2392 lines
64 KiB
Text
2392 lines
64 KiB
Text
#
|
||
# PART 1: syntax
|
||
#
|
||
#
|
||
# Test every new reserved and non reserved keywords
|
||
#
|
||
drop table if exists signal_non_reserved;
|
||
create table signal_non_reserved (
|
||
class_origin int,
|
||
subclass_origin int,
|
||
constraint_catalog int,
|
||
constraint_schema int,
|
||
constraint_name int,
|
||
catalog_name int,
|
||
schema_name int,
|
||
table_name int,
|
||
column_name int,
|
||
cursor_name int,
|
||
message_text int,
|
||
sqlcode int
|
||
);
|
||
drop table signal_non_reserved;
|
||
drop table if exists diag_non_reserved;
|
||
create table diag_non_reserved (
|
||
diagnostics int,
|
||
current int,
|
||
stacked int,
|
||
exception int
|
||
);
|
||
drop table diag_non_reserved;
|
||
drop table if exists diag_cond_non_reserved;
|
||
create table diag_cond_non_reserved (
|
||
condition_identifier int,
|
||
condition_number int,
|
||
condition_name int,
|
||
connection_name int,
|
||
message_length int,
|
||
message_octet_length int,
|
||
parameter_mode int,
|
||
parameter_name int,
|
||
parameter_ordinal_position int,
|
||
returned_sqlstate int,
|
||
routine_catalog int,
|
||
routine_name int,
|
||
routine_schema int,
|
||
server_name int,
|
||
specific_name int,
|
||
trigger_catalog int,
|
||
trigger_name int,
|
||
trigger_schema int
|
||
);
|
||
drop table diag_cond_non_reserved;
|
||
drop table if exists diag_stmt_non_reserved;
|
||
create table diag_stmt_non_reserved (
|
||
number int,
|
||
more int,
|
||
command_function int,
|
||
command_function_code int,
|
||
dynamic_function int,
|
||
dynamic_function_code int,
|
||
row_count int,
|
||
transactions_committed int,
|
||
transactions_rolled_back int,
|
||
transaction_active int
|
||
);
|
||
drop table diag_stmt_non_reserved;
|
||
drop table if exists test_reserved;
|
||
create table test_reserved (signal int);
|
||
ERROR 42000: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'signal int)' at line 1
|
||
create table test_reserved (resignal int);
|
||
ERROR 42000: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'resignal int)' at line 1
|
||
create table test_reserved (condition int);
|
||
ERROR 42000: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'condition int)' at line 1
|
||
#
|
||
# Test the SIGNAL syntax
|
||
#
|
||
drop procedure if exists test_invalid;
|
||
drop procedure if exists test_signal_syntax;
|
||
drop function if exists test_signal_func;
|
||
create procedure test_invalid()
|
||
begin
|
||
SIGNAL;
|
||
end $$
|
||
ERROR 42000: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ';
|
||
end' at line 3
|
||
create procedure test_invalid()
|
||
begin
|
||
SIGNAL foo;
|
||
end $$
|
||
ERROR 42000: Undefined CONDITION: foo
|
||
create procedure test_invalid()
|
||
begin
|
||
DECLARE foo CONDITION FOR 1234;
|
||
SIGNAL foo;
|
||
end $$
|
||
ERROR HY000: SIGNAL/RESIGNAL can only use a CONDITION defined with SQLSTATE
|
||
create procedure test_signal_syntax()
|
||
begin
|
||
DECLARE foo CONDITION FOR SQLSTATE '12345';
|
||
SIGNAL foo;
|
||
end $$
|
||
drop procedure test_signal_syntax $$
|
||
create procedure test_signal_syntax()
|
||
begin
|
||
SIGNAL SQLSTATE '23000';
|
||
end $$
|
||
drop procedure test_signal_syntax $$
|
||
create procedure test_signal_syntax()
|
||
begin
|
||
SIGNAL SQLSTATE VALUE '23000';
|
||
end $$
|
||
drop procedure test_signal_syntax $$
|
||
create procedure test_signal_syntax()
|
||
begin
|
||
DECLARE foo CONDITION FOR SQLSTATE '12345';
|
||
SIGNAL foo SET CLASS_ORIGIN = 'foo';
|
||
end $$
|
||
drop procedure test_signal_syntax $$
|
||
create procedure test_signal_syntax()
|
||
begin
|
||
DECLARE foo CONDITION FOR SQLSTATE '12345';
|
||
SIGNAL foo SET SUBCLASS_ORIGIN = 'foo';
|
||
end $$
|
||
drop procedure test_signal_syntax $$
|
||
create procedure test_signal_syntax()
|
||
begin
|
||
DECLARE foo CONDITION FOR SQLSTATE '12345';
|
||
SIGNAL foo SET CONSTRAINT_CATALOG = 'foo';
|
||
end $$
|
||
drop procedure test_signal_syntax $$
|
||
create procedure test_signal_syntax()
|
||
begin
|
||
DECLARE foo CONDITION FOR SQLSTATE '12345';
|
||
SIGNAL foo SET CONSTRAINT_SCHEMA = 'foo';
|
||
end $$
|
||
drop procedure test_signal_syntax $$
|
||
create procedure test_signal_syntax()
|
||
begin
|
||
DECLARE foo CONDITION FOR SQLSTATE '12345';
|
||
SIGNAL foo SET CONSTRAINT_NAME = 'foo';
|
||
end $$
|
||
drop procedure test_signal_syntax $$
|
||
create procedure test_signal_syntax()
|
||
begin
|
||
DECLARE foo CONDITION FOR SQLSTATE '12345';
|
||
SIGNAL foo SET CATALOG_NAME = 'foo';
|
||
end $$
|
||
drop procedure test_signal_syntax $$
|
||
create procedure test_signal_syntax()
|
||
begin
|
||
DECLARE foo CONDITION FOR SQLSTATE '12345';
|
||
SIGNAL foo SET SCHEMA_NAME = 'foo';
|
||
end $$
|
||
drop procedure test_signal_syntax $$
|
||
create procedure test_signal_syntax()
|
||
begin
|
||
DECLARE foo CONDITION FOR SQLSTATE '12345';
|
||
SIGNAL foo SET TABLE_NAME = 'foo';
|
||
end $$
|
||
drop procedure test_signal_syntax $$
|
||
create procedure test_signal_syntax()
|
||
begin
|
||
DECLARE foo CONDITION FOR SQLSTATE '12345';
|
||
SIGNAL foo SET COLUMN_NAME = 'foo';
|
||
end $$
|
||
drop procedure test_signal_syntax $$
|
||
create procedure test_signal_syntax()
|
||
begin
|
||
DECLARE foo CONDITION FOR SQLSTATE '12345';
|
||
SIGNAL foo SET CURSOR_NAME = 'foo';
|
||
end $$
|
||
drop procedure test_signal_syntax $$
|
||
create procedure test_signal_syntax()
|
||
begin
|
||
DECLARE foo CONDITION FOR SQLSTATE '12345';
|
||
SIGNAL foo SET MESSAGE_TEXT = 'foo';
|
||
end $$
|
||
drop procedure test_signal_syntax $$
|
||
create procedure test_signal_syntax()
|
||
begin
|
||
DECLARE foo CONDITION FOR SQLSTATE '12345';
|
||
SIGNAL foo SET MYSQL_ERRNO = 'foo';
|
||
end $$
|
||
drop procedure test_signal_syntax $$
|
||
create procedure test_invalid()
|
||
begin
|
||
DECLARE foo CONDITION FOR SQLSTATE '12345';
|
||
SIGNAL foo SET CLASS_ORIGIN = 'foo', CLASS_ORIGIN = 'bar';
|
||
end $$
|
||
ERROR 42000: Duplicate condition information item 'CLASS_ORIGIN'
|
||
create procedure test_invalid()
|
||
begin
|
||
DECLARE foo CONDITION FOR SQLSTATE '12345';
|
||
SIGNAL foo SET MESSAGE_TEXT = 'foo', MESSAGE_TEXT = 'bar';
|
||
end $$
|
||
ERROR 42000: Duplicate condition information item 'MESSAGE_TEXT'
|
||
create procedure test_invalid()
|
||
begin
|
||
DECLARE foo CONDITION FOR SQLSTATE '12345';
|
||
SIGNAL foo SET MYSQL_ERRNO = 'foo', MYSQL_ERRNO = 'bar';
|
||
end $$
|
||
ERROR 42000: Duplicate condition information item 'MYSQL_ERRNO'
|
||
create procedure test_signal_syntax()
|
||
begin
|
||
DECLARE foo CONDITION FOR SQLSTATE '12345';
|
||
SIGNAL foo SET
|
||
CLASS_ORIGIN = 'foo',
|
||
SUBCLASS_ORIGIN = 'foo',
|
||
CONSTRAINT_CATALOG = 'foo',
|
||
CONSTRAINT_SCHEMA = 'foo',
|
||
CONSTRAINT_NAME = 'foo',
|
||
CATALOG_NAME = 'foo',
|
||
SCHEMA_NAME = 'foo',
|
||
TABLE_NAME = 'foo',
|
||
COLUMN_NAME = 'foo',
|
||
CURSOR_NAME = 'foo',
|
||
MESSAGE_TEXT = 'foo',
|
||
MYSQL_ERRNO = 'foo';
|
||
end $$
|
||
drop procedure test_signal_syntax $$
|
||
SIGNAL SQLSTATE '00000' $$
|
||
ERROR 42000: Bad SQLSTATE: '00000'
|
||
SIGNAL SQLSTATE '00001' $$
|
||
ERROR 42000: Bad SQLSTATE: '00001'
|
||
create procedure test_invalid()
|
||
begin
|
||
SIGNAL SQLSTATE '00000';
|
||
end $$
|
||
ERROR 42000: Bad SQLSTATE: '00000'
|
||
create procedure test_invalid()
|
||
begin
|
||
SIGNAL SQLSTATE '00001';
|
||
end $$
|
||
ERROR 42000: Bad SQLSTATE: '00001'
|
||
#
|
||
# Test conditions information that SIGNAL can not set
|
||
#
|
||
create procedure test_invalid()
|
||
begin
|
||
SIGNAL SQLSTATE '12345' SET bla_bla = 'foo';
|
||
end $$
|
||
ERROR 42000: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'bla_bla = 'foo';
|
||
end' at line 3
|
||
create procedure test_invalid()
|
||
begin
|
||
SIGNAL SQLSTATE '12345' SET CONDITION_IDENTIFIER = 'foo';
|
||
end $$
|
||
ERROR 42000: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'CONDITION_IDENTIFIER = 'foo';
|
||
end' at line 3
|
||
create procedure test_invalid()
|
||
begin
|
||
SIGNAL SQLSTATE '12345' SET CONDITION_NUMBER = 'foo';
|
||
end $$
|
||
ERROR 42000: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'CONDITION_NUMBER = 'foo';
|
||
end' at line 3
|
||
create procedure test_invalid()
|
||
begin
|
||
SIGNAL SQLSTATE '12345' SET CONNECTION_NAME = 'foo';
|
||
end $$
|
||
ERROR 42000: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'CONNECTION_NAME = 'foo';
|
||
end' at line 3
|
||
create procedure test_invalid()
|
||
begin
|
||
SIGNAL SQLSTATE '12345' SET MESSAGE_LENGTH = 'foo';
|
||
end $$
|
||
ERROR 42000: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'MESSAGE_LENGTH = 'foo';
|
||
end' at line 3
|
||
create procedure test_invalid()
|
||
begin
|
||
SIGNAL SQLSTATE '12345' SET MESSAGE_OCTET_LENGTH = 'foo';
|
||
end $$
|
||
ERROR 42000: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'MESSAGE_OCTET_LENGTH = 'foo';
|
||
end' at line 3
|
||
create procedure test_invalid()
|
||
begin
|
||
SIGNAL SQLSTATE '12345' SET PARAMETER_MODE = 'foo';
|
||
end $$
|
||
ERROR 42000: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'PARAMETER_MODE = 'foo';
|
||
end' at line 3
|
||
create procedure test_invalid()
|
||
begin
|
||
SIGNAL SQLSTATE '12345' SET PARAMETER_NAME = 'foo';
|
||
end $$
|
||
ERROR 42000: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'PARAMETER_NAME = 'foo';
|
||
end' at line 3
|
||
create procedure test_invalid()
|
||
begin
|
||
SIGNAL SQLSTATE '12345' SET PARAMETER_ORDINAL_POSITION = 'foo';
|
||
end $$
|
||
ERROR 42000: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'PARAMETER_ORDINAL_POSITION = 'foo';
|
||
end' at line 3
|
||
create procedure test_invalid()
|
||
begin
|
||
SIGNAL SQLSTATE '12345' SET RETURNED_SQLSTATE = 'foo';
|
||
end $$
|
||
ERROR 42000: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'RETURNED_SQLSTATE = 'foo';
|
||
end' at line 3
|
||
create procedure test_invalid()
|
||
begin
|
||
SIGNAL SQLSTATE '12345' SET ROUTINE_CATALOG = 'foo';
|
||
end $$
|
||
ERROR 42000: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'ROUTINE_CATALOG = 'foo';
|
||
end' at line 3
|
||
create procedure test_invalid()
|
||
begin
|
||
SIGNAL SQLSTATE '12345' SET ROUTINE_NAME = 'foo';
|
||
end $$
|
||
ERROR 42000: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'ROUTINE_NAME = 'foo';
|
||
end' at line 3
|
||
create procedure test_invalid()
|
||
begin
|
||
SIGNAL SQLSTATE '12345' SET ROUTINE_SCHEMA = 'foo';
|
||
end $$
|
||
ERROR 42000: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'ROUTINE_SCHEMA = 'foo';
|
||
end' at line 3
|
||
create procedure test_invalid()
|
||
begin
|
||
SIGNAL SQLSTATE '12345' SET SERVER_NAME = 'foo';
|
||
end $$
|
||
ERROR 42000: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'SERVER_NAME = 'foo';
|
||
end' at line 3
|
||
create procedure test_invalid()
|
||
begin
|
||
SIGNAL SQLSTATE '12345' SET SPECIFIC_NAME = 'foo';
|
||
end $$
|
||
ERROR 42000: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'SPECIFIC_NAME = 'foo';
|
||
end' at line 3
|
||
create procedure test_invalid()
|
||
begin
|
||
SIGNAL SQLSTATE '12345' SET TRIGGER_CATALOG = 'foo';
|
||
end $$
|
||
ERROR 42000: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'TRIGGER_CATALOG = 'foo';
|
||
end' at line 3
|
||
create procedure test_invalid()
|
||
begin
|
||
SIGNAL SQLSTATE '12345' SET TRIGGER_NAME = 'foo';
|
||
end $$
|
||
ERROR 42000: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'TRIGGER_NAME = 'foo';
|
||
end' at line 3
|
||
create procedure test_invalid()
|
||
begin
|
||
SIGNAL SQLSTATE '12345' SET TRIGGER_SCHEMA = 'foo';
|
||
end $$
|
||
ERROR 42000: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'TRIGGER_SCHEMA = 'foo';
|
||
end' at line 3
|
||
#
|
||
# Test the RESIGNAL syntax
|
||
#
|
||
drop procedure if exists test_invalid;
|
||
drop procedure if exists test_resignal_syntax;
|
||
create procedure test_invalid()
|
||
begin
|
||
RESIGNAL foo;
|
||
end $$
|
||
ERROR 42000: Undefined CONDITION: foo
|
||
create procedure test_resignal_syntax()
|
||
begin
|
||
RESIGNAL;
|
||
end $$
|
||
drop procedure test_resignal_syntax $$
|
||
create procedure test_invalid()
|
||
begin
|
||
DECLARE foo CONDITION FOR 1234;
|
||
RESIGNAL foo;
|
||
end $$
|
||
ERROR HY000: SIGNAL/RESIGNAL can only use a CONDITION defined with SQLSTATE
|
||
create procedure test_resignal_syntax()
|
||
begin
|
||
DECLARE foo CONDITION FOR SQLSTATE '12345';
|
||
RESIGNAL foo;
|
||
end $$
|
||
drop procedure test_resignal_syntax $$
|
||
create procedure test_resignal_syntax()
|
||
begin
|
||
RESIGNAL SQLSTATE '23000';
|
||
end $$
|
||
drop procedure test_resignal_syntax $$
|
||
create procedure test_resignal_syntax()
|
||
begin
|
||
RESIGNAL SQLSTATE VALUE '23000';
|
||
end $$
|
||
drop procedure test_resignal_syntax $$
|
||
create procedure test_resignal_syntax()
|
||
begin
|
||
RESIGNAL SET CLASS_ORIGIN = 'foo';
|
||
end $$
|
||
drop procedure test_resignal_syntax $$
|
||
create procedure test_resignal_syntax()
|
||
begin
|
||
DECLARE foo CONDITION FOR SQLSTATE '12345';
|
||
RESIGNAL foo SET CLASS_ORIGIN = 'foo';
|
||
end $$
|
||
drop procedure test_resignal_syntax $$
|
||
create procedure test_resignal_syntax()
|
||
begin
|
||
RESIGNAL SET SUBCLASS_ORIGIN = 'foo';
|
||
end $$
|
||
drop procedure test_resignal_syntax $$
|
||
create procedure test_resignal_syntax()
|
||
begin
|
||
DECLARE foo CONDITION FOR SQLSTATE '12345';
|
||
RESIGNAL foo SET SUBCLASS_ORIGIN = 'foo';
|
||
end $$
|
||
drop procedure test_resignal_syntax $$
|
||
create procedure test_resignal_syntax()
|
||
begin
|
||
RESIGNAL SET CONSTRAINT_CATALOG = 'foo';
|
||
end $$
|
||
drop procedure test_resignal_syntax $$
|
||
create procedure test_resignal_syntax()
|
||
begin
|
||
DECLARE foo CONDITION FOR SQLSTATE '12345';
|
||
RESIGNAL foo SET CONSTRAINT_CATALOG = 'foo';
|
||
end $$
|
||
drop procedure test_resignal_syntax $$
|
||
create procedure test_resignal_syntax()
|
||
begin
|
||
RESIGNAL SET CONSTRAINT_SCHEMA = 'foo';
|
||
end $$
|
||
drop procedure test_resignal_syntax $$
|
||
create procedure test_resignal_syntax()
|
||
begin
|
||
DECLARE foo CONDITION FOR SQLSTATE '12345';
|
||
RESIGNAL foo SET CONSTRAINT_SCHEMA = 'foo';
|
||
end $$
|
||
drop procedure test_resignal_syntax $$
|
||
create procedure test_resignal_syntax()
|
||
begin
|
||
RESIGNAL SET CONSTRAINT_NAME = 'foo';
|
||
end $$
|
||
drop procedure test_resignal_syntax $$
|
||
create procedure test_resignal_syntax()
|
||
begin
|
||
DECLARE foo CONDITION FOR SQLSTATE '12345';
|
||
RESIGNAL foo SET CONSTRAINT_NAME = 'foo';
|
||
end $$
|
||
drop procedure test_resignal_syntax $$
|
||
create procedure test_resignal_syntax()
|
||
begin
|
||
RESIGNAL SET CATALOG_NAME = 'foo';
|
||
end $$
|
||
drop procedure test_resignal_syntax $$
|
||
create procedure test_resignal_syntax()
|
||
begin
|
||
DECLARE foo CONDITION FOR SQLSTATE '12345';
|
||
RESIGNAL foo SET CATALOG_NAME = 'foo';
|
||
end $$
|
||
drop procedure test_resignal_syntax $$
|
||
create procedure test_resignal_syntax()
|
||
begin
|
||
RESIGNAL SET SCHEMA_NAME = 'foo';
|
||
end $$
|
||
drop procedure test_resignal_syntax $$
|
||
create procedure test_resignal_syntax()
|
||
begin
|
||
DECLARE foo CONDITION FOR SQLSTATE '12345';
|
||
RESIGNAL foo SET SCHEMA_NAME = 'foo';
|
||
end $$
|
||
drop procedure test_resignal_syntax $$
|
||
create procedure test_resignal_syntax()
|
||
begin
|
||
RESIGNAL SET TABLE_NAME = 'foo';
|
||
end $$
|
||
drop procedure test_resignal_syntax $$
|
||
create procedure test_resignal_syntax()
|
||
begin
|
||
DECLARE foo CONDITION FOR SQLSTATE '12345';
|
||
RESIGNAL foo SET TABLE_NAME = 'foo';
|
||
end $$
|
||
drop procedure test_resignal_syntax $$
|
||
create procedure test_resignal_syntax()
|
||
begin
|
||
RESIGNAL SET COLUMN_NAME = 'foo';
|
||
end $$
|
||
drop procedure test_resignal_syntax $$
|
||
create procedure test_resignal_syntax()
|
||
begin
|
||
DECLARE foo CONDITION FOR SQLSTATE '12345';
|
||
RESIGNAL foo SET COLUMN_NAME = 'foo';
|
||
end $$
|
||
drop procedure test_resignal_syntax $$
|
||
create procedure test_resignal_syntax()
|
||
begin
|
||
RESIGNAL SET CURSOR_NAME = 'foo';
|
||
end $$
|
||
drop procedure test_resignal_syntax $$
|
||
create procedure test_resignal_syntax()
|
||
begin
|
||
DECLARE foo CONDITION FOR SQLSTATE '12345';
|
||
RESIGNAL foo SET CURSOR_NAME = 'foo';
|
||
end $$
|
||
drop procedure test_resignal_syntax $$
|
||
create procedure test_resignal_syntax()
|
||
begin
|
||
RESIGNAL SET MESSAGE_TEXT = 'foo';
|
||
end $$
|
||
drop procedure test_resignal_syntax $$
|
||
create procedure test_resignal_syntax()
|
||
begin
|
||
DECLARE foo CONDITION FOR SQLSTATE '12345';
|
||
RESIGNAL foo SET MESSAGE_TEXT = 'foo';
|
||
end $$
|
||
drop procedure test_resignal_syntax $$
|
||
create procedure test_resignal_syntax()
|
||
begin
|
||
RESIGNAL SET MYSQL_ERRNO = 'foo';
|
||
end $$
|
||
drop procedure test_resignal_syntax $$
|
||
create procedure test_resignal_syntax()
|
||
begin
|
||
DECLARE foo CONDITION FOR SQLSTATE '12345';
|
||
RESIGNAL foo SET MYSQL_ERRNO = 'foo';
|
||
end $$
|
||
drop procedure test_resignal_syntax $$
|
||
create procedure test_invalid()
|
||
begin
|
||
DECLARE foo CONDITION FOR SQLSTATE '12345';
|
||
RESIGNAL foo SET CLASS_ORIGIN = 'foo', CLASS_ORIGIN = 'bar';
|
||
end $$
|
||
ERROR 42000: Duplicate condition information item 'CLASS_ORIGIN'
|
||
create procedure test_invalid()
|
||
begin
|
||
DECLARE foo CONDITION FOR SQLSTATE '12345';
|
||
RESIGNAL foo SET MESSAGE_TEXT = 'foo', MESSAGE_TEXT = 'bar';
|
||
end $$
|
||
ERROR 42000: Duplicate condition information item 'MESSAGE_TEXT'
|
||
create procedure test_invalid()
|
||
begin
|
||
DECLARE foo CONDITION FOR SQLSTATE '12345';
|
||
RESIGNAL foo SET MYSQL_ERRNO = 'foo', MYSQL_ERRNO = 'bar';
|
||
end $$
|
||
ERROR 42000: Duplicate condition information item 'MYSQL_ERRNO'
|
||
create procedure test_resignal_syntax()
|
||
begin
|
||
DECLARE foo CONDITION FOR SQLSTATE '12345';
|
||
RESIGNAL foo SET
|
||
CLASS_ORIGIN = 'foo',
|
||
SUBCLASS_ORIGIN = 'foo',
|
||
CONSTRAINT_CATALOG = 'foo',
|
||
CONSTRAINT_SCHEMA = 'foo',
|
||
CONSTRAINT_NAME = 'foo',
|
||
CATALOG_NAME = 'foo',
|
||
SCHEMA_NAME = 'foo',
|
||
TABLE_NAME = 'foo',
|
||
COLUMN_NAME = 'foo',
|
||
CURSOR_NAME = 'foo',
|
||
MESSAGE_TEXT = 'foo';
|
||
end $$
|
||
drop procedure test_resignal_syntax $$
|
||
create procedure test_invalid()
|
||
begin
|
||
RESIGNAL SQLSTATE '00000';
|
||
end $$
|
||
ERROR 42000: Bad SQLSTATE: '00000'
|
||
create procedure test_invalid()
|
||
begin
|
||
RESIGNAL SQLSTATE '00001';
|
||
end $$
|
||
ERROR 42000: Bad SQLSTATE: '00001'
|
||
#
|
||
# PART 2: non preparable statements
|
||
#
|
||
prepare stmt from 'SIGNAL SQLSTATE \'23000\'';
|
||
ERROR HY000: This command is not supported in the prepared statement protocol yet
|
||
prepare stmt from 'RESIGNAL SQLSTATE \'23000\'';
|
||
ERROR HY000: This command is not supported in the prepared statement protocol yet
|
||
#
|
||
# PART 3: runtime execution
|
||
#
|
||
drop procedure if exists test_signal;
|
||
drop procedure if exists test_resignal;
|
||
drop table if exists t_warn;
|
||
drop table if exists t_cursor;
|
||
create table t_warn(a integer(2));
|
||
create table t_cursor(a integer);
|
||
#
|
||
# SIGNAL can also appear in a query
|
||
#
|
||
SIGNAL foo;
|
||
ERROR 42000: Undefined CONDITION: foo
|
||
SIGNAL SQLSTATE '01000';
|
||
Warnings:
|
||
Warning 1642 Unhandled user-defined warning condition
|
||
SIGNAL SQLSTATE '02000';
|
||
ERROR 02000: Unhandled user-defined not found condition
|
||
SIGNAL SQLSTATE '23000';
|
||
ERROR 23000: Unhandled user-defined exception condition
|
||
SIGNAL SQLSTATE VALUE '23000';
|
||
ERROR 23000: Unhandled user-defined exception condition
|
||
SIGNAL SQLSTATE 'HY000' SET MYSQL_ERRNO = 65536;
|
||
ERROR 42000: Variable 'MYSQL_ERRNO' can't be set to the value of '65536'
|
||
SIGNAL SQLSTATE 'HY000' SET MYSQL_ERRNO = 99999;
|
||
ERROR 42000: Variable 'MYSQL_ERRNO' can't be set to the value of '99999'
|
||
SIGNAL SQLSTATE 'HY000' SET MYSQL_ERRNO = 4294967295;
|
||
ERROR 42000: Variable 'MYSQL_ERRNO' can't be set to the value of '4294967295'
|
||
SIGNAL SQLSTATE 'HY000' SET MYSQL_ERRNO = 0;
|
||
ERROR 42000: Variable 'MYSQL_ERRNO' can't be set to the value of '0'
|
||
SIGNAL SQLSTATE 'HY000' SET MYSQL_ERRNO = -1;
|
||
ERROR 42000: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '-1' at line 1
|
||
SIGNAL SQLSTATE 'HY000' SET MYSQL_ERRNO = 65535;
|
||
ERROR HY000: Unhandled user-defined exception condition
|
||
#
|
||
# RESIGNAL can also appear in a query
|
||
#
|
||
RESIGNAL;
|
||
ERROR 0K000: RESIGNAL when handler not active
|
||
RESIGNAL foo;
|
||
ERROR 42000: Undefined CONDITION: foo
|
||
RESIGNAL SQLSTATE '12345';
|
||
ERROR 0K000: RESIGNAL when handler not active
|
||
RESIGNAL SQLSTATE VALUE '12345';
|
||
ERROR 0K000: RESIGNAL when handler not active
|
||
#
|
||
# Different kind of SIGNAL conditions
|
||
#
|
||
create procedure test_signal()
|
||
begin
|
||
# max range
|
||
DECLARE foo CONDITION FOR SQLSTATE 'AABBB';
|
||
SIGNAL foo SET MYSQL_ERRNO = 65535;
|
||
end $$
|
||
call test_signal() $$
|
||
ERROR AABBB: Unhandled user-defined exception condition
|
||
drop procedure test_signal $$
|
||
create procedure test_signal()
|
||
begin
|
||
# max range
|
||
DECLARE foo CONDITION FOR SQLSTATE 'AABBB';
|
||
SIGNAL foo SET MYSQL_ERRNO = 65536;
|
||
end $$
|
||
call test_signal() $$
|
||
ERROR 42000: Variable 'MYSQL_ERRNO' can't be set to the value of '65536'
|
||
drop procedure test_signal $$
|
||
create procedure test_signal()
|
||
begin
|
||
# Error
|
||
DECLARE foo CONDITION FOR SQLSTATE '99999';
|
||
SIGNAL foo SET MYSQL_ERRNO = 9999;
|
||
end $$
|
||
call test_signal() $$
|
||
ERROR 99999: Unhandled user-defined exception condition
|
||
drop procedure test_signal $$
|
||
create procedure test_signal()
|
||
begin
|
||
# warning
|
||
DECLARE too_few_records CONDITION FOR SQLSTATE '01000';
|
||
SIGNAL too_few_records SET MYSQL_ERRNO = 1261;
|
||
end $$
|
||
call test_signal() $$
|
||
Warnings:
|
||
Warning 1261 Unhandled user-defined warning condition
|
||
drop procedure test_signal $$
|
||
create procedure test_signal()
|
||
begin
|
||
# Not found
|
||
DECLARE sp_fetch_no_data CONDITION FOR SQLSTATE '02000';
|
||
SIGNAL sp_fetch_no_data SET MYSQL_ERRNO = 1329;
|
||
end $$
|
||
call test_signal() $$
|
||
ERROR 02000: Unhandled user-defined not found condition
|
||
drop procedure test_signal $$
|
||
create procedure test_signal()
|
||
begin
|
||
# Error
|
||
DECLARE sp_cursor_already_open CONDITION FOR SQLSTATE '24000';
|
||
SIGNAL sp_cursor_already_open SET MYSQL_ERRNO = 1325;
|
||
end $$
|
||
call test_signal() $$
|
||
ERROR 24000: Unhandled user-defined exception condition
|
||
drop procedure test_signal $$
|
||
create procedure test_signal()
|
||
begin
|
||
# Severe error
|
||
DECLARE lock_deadlock CONDITION FOR SQLSTATE '40001';
|
||
SIGNAL lock_deadlock SET MYSQL_ERRNO = 1213;
|
||
end $$
|
||
call test_signal() $$
|
||
ERROR 40001: Unhandled user-defined exception condition
|
||
drop procedure test_signal $$
|
||
create procedure test_signal()
|
||
begin
|
||
# Unknown -> error
|
||
DECLARE foo CONDITION FOR SQLSTATE "99999";
|
||
SIGNAL foo;
|
||
end $$
|
||
call test_signal() $$
|
||
ERROR 99999: Unhandled user-defined exception condition
|
||
drop procedure test_signal $$
|
||
create procedure test_signal()
|
||
begin
|
||
# warning, no subclass
|
||
DECLARE warn CONDITION FOR SQLSTATE "01000";
|
||
SIGNAL warn;
|
||
end $$
|
||
call test_signal() $$
|
||
Warnings:
|
||
Warning 1642 Unhandled user-defined warning condition
|
||
drop procedure test_signal $$
|
||
create procedure test_signal()
|
||
begin
|
||
# warning, with subclass
|
||
DECLARE warn CONDITION FOR SQLSTATE "01123";
|
||
SIGNAL warn;
|
||
end $$
|
||
call test_signal() $$
|
||
Warnings:
|
||
Warning 1642 Unhandled user-defined warning condition
|
||
drop procedure test_signal $$
|
||
create procedure test_signal()
|
||
begin
|
||
# Not found, no subclass
|
||
DECLARE not_found CONDITION FOR SQLSTATE "02000";
|
||
SIGNAL not_found;
|
||
end $$
|
||
call test_signal() $$
|
||
ERROR 02000: Unhandled user-defined not found condition
|
||
drop procedure test_signal $$
|
||
create procedure test_signal()
|
||
begin
|
||
# Not found, with subclass
|
||
DECLARE not_found CONDITION FOR SQLSTATE "02XXX";
|
||
SIGNAL not_found;
|
||
end $$
|
||
call test_signal() $$
|
||
ERROR 02XXX: Unhandled user-defined not found condition
|
||
drop procedure test_signal $$
|
||
create procedure test_signal()
|
||
begin
|
||
# Error, no subclass
|
||
DECLARE error CONDITION FOR SQLSTATE "12000";
|
||
SIGNAL error;
|
||
end $$
|
||
call test_signal() $$
|
||
ERROR 12000: Unhandled user-defined exception condition
|
||
drop procedure test_signal $$
|
||
create procedure test_signal()
|
||
begin
|
||
# Error, with subclass
|
||
DECLARE error CONDITION FOR SQLSTATE "12ABC";
|
||
SIGNAL error;
|
||
end $$
|
||
call test_signal() $$
|
||
ERROR 12ABC: Unhandled user-defined exception condition
|
||
drop procedure test_signal $$
|
||
create procedure test_signal()
|
||
begin
|
||
# Severe error, no subclass
|
||
DECLARE error CONDITION FOR SQLSTATE "40000";
|
||
SIGNAL error;
|
||
end $$
|
||
call test_signal() $$
|
||
ERROR 40000: Unhandled user-defined exception condition
|
||
drop procedure test_signal $$
|
||
create procedure test_signal()
|
||
begin
|
||
# Severe error, with subclass
|
||
DECLARE error CONDITION FOR SQLSTATE "40001";
|
||
SIGNAL error;
|
||
end $$
|
||
call test_signal() $$
|
||
ERROR 40001: Unhandled user-defined exception condition
|
||
drop procedure test_signal $$
|
||
#
|
||
# Test the scope of condition
|
||
#
|
||
create procedure test_signal()
|
||
begin
|
||
DECLARE foo CONDITION FOR SQLSTATE '99999';
|
||
begin
|
||
DECLARE foo CONDITION FOR 8888;
|
||
end;
|
||
SIGNAL foo SET MYSQL_ERRNO=9999; /* outer */
|
||
end $$
|
||
call test_signal() $$
|
||
ERROR 99999: Unhandled user-defined exception condition
|
||
drop procedure test_signal $$
|
||
create procedure test_signal()
|
||
begin
|
||
DECLARE foo CONDITION FOR 9999;
|
||
begin
|
||
DECLARE foo CONDITION FOR SQLSTATE '88888';
|
||
SIGNAL foo SET MYSQL_ERRNO=8888; /* inner */
|
||
end;
|
||
end $$
|
||
call test_signal() $$
|
||
ERROR 88888: Unhandled user-defined exception condition
|
||
drop procedure test_signal $$
|
||
#
|
||
# Test SET MYSQL_ERRNO
|
||
#
|
||
create procedure test_signal()
|
||
begin
|
||
DECLARE foo CONDITION FOR SQLSTATE '99999';
|
||
SIGNAL foo SET MYSQL_ERRNO = 1111;
|
||
end $$
|
||
call test_signal() $$
|
||
ERROR 99999: Unhandled user-defined exception condition
|
||
drop procedure test_signal $$
|
||
create procedure test_signal()
|
||
begin
|
||
DECLARE warn CONDITION FOR SQLSTATE "01000";
|
||
SIGNAL warn SET MYSQL_ERRNO = 1111;
|
||
end $$
|
||
call test_signal() $$
|
||
Warnings:
|
||
Warning 1111 Unhandled user-defined warning condition
|
||
drop procedure test_signal $$
|
||
create procedure test_signal()
|
||
begin
|
||
DECLARE not_found CONDITION FOR SQLSTATE "02000";
|
||
SIGNAL not_found SET MYSQL_ERRNO = 1111;
|
||
end $$
|
||
call test_signal() $$
|
||
ERROR 02000: Unhandled user-defined not found condition
|
||
drop procedure test_signal $$
|
||
create procedure test_signal()
|
||
begin
|
||
DECLARE error CONDITION FOR SQLSTATE "55000";
|
||
SIGNAL error SET MYSQL_ERRNO = 1111;
|
||
end $$
|
||
call test_signal() $$
|
||
ERROR 55000: Unhandled user-defined exception condition
|
||
drop procedure test_signal $$
|
||
#
|
||
# Test SET MESSAGE_TEXT
|
||
#
|
||
SIGNAL SQLSTATE '77777' SET MESSAGE_TEXT='' $$
|
||
ERROR 77777:
|
||
create procedure test_signal()
|
||
begin
|
||
DECLARE foo CONDITION FOR SQLSTATE '77777';
|
||
SIGNAL foo SET
|
||
MESSAGE_TEXT = "",
|
||
MYSQL_ERRNO=5678;
|
||
end $$
|
||
call test_signal() $$
|
||
ERROR 77777:
|
||
drop procedure test_signal $$
|
||
create procedure test_signal()
|
||
begin
|
||
DECLARE foo CONDITION FOR SQLSTATE '99999';
|
||
SIGNAL foo SET
|
||
MESSAGE_TEXT = "Something bad happened",
|
||
MYSQL_ERRNO=9999;
|
||
end $$
|
||
call test_signal() $$
|
||
ERROR 99999: Something bad happened
|
||
drop procedure test_signal $$
|
||
create procedure test_signal()
|
||
begin
|
||
DECLARE warn CONDITION FOR SQLSTATE "01000";
|
||
SIGNAL warn SET MESSAGE_TEXT = "Something bad happened";
|
||
end $$
|
||
call test_signal() $$
|
||
Warnings:
|
||
Warning 1642 Something bad happened
|
||
drop procedure test_signal $$
|
||
create procedure test_signal()
|
||
begin
|
||
DECLARE not_found CONDITION FOR SQLSTATE "02000";
|
||
SIGNAL not_found SET MESSAGE_TEXT = "Something bad happened";
|
||
end $$
|
||
call test_signal() $$
|
||
ERROR 02000: Something bad happened
|
||
drop procedure test_signal $$
|
||
create procedure test_signal()
|
||
begin
|
||
DECLARE error CONDITION FOR SQLSTATE "55000";
|
||
SIGNAL error SET MESSAGE_TEXT = "Something bad happened";
|
||
end $$
|
||
call test_signal() $$
|
||
ERROR 55000: Something bad happened
|
||
drop procedure test_signal $$
|
||
create procedure test_signal()
|
||
begin
|
||
DECLARE something CONDITION FOR SQLSTATE "01000";
|
||
SIGNAL something SET MESSAGE_TEXT = _utf8 "This is a UTF8 text";
|
||
end $$
|
||
call test_signal() $$
|
||
Warnings:
|
||
Warning 1642 This is a UTF8 text
|
||
drop procedure test_signal $$
|
||
create procedure test_signal()
|
||
begin
|
||
DECLARE something CONDITION FOR SQLSTATE "01000";
|
||
SIGNAL something SET MESSAGE_TEXT = "";
|
||
end $$
|
||
call test_signal() $$
|
||
Warnings:
|
||
Warning 1642
|
||
drop procedure test_signal $$
|
||
create procedure test_signal()
|
||
begin
|
||
DECLARE warn CONDITION FOR SQLSTATE "01111";
|
||
SIGNAL warn SET MESSAGE_TEXT = "á a";
|
||
end $$
|
||
call test_signal() $$
|
||
Warnings:
|
||
Warning 1642 á a
|
||
show warnings $$
|
||
Level Code Message
|
||
Warning 1642 á a
|
||
drop procedure test_signal $$
|
||
#
|
||
# Test SET complex expressions
|
||
#
|
||
create procedure test_signal()
|
||
begin
|
||
DECLARE error CONDITION FOR SQLSTATE '99999';
|
||
SIGNAL error SET
|
||
MYSQL_ERRNO = NULL;
|
||
end $$
|
||
call test_signal() $$
|
||
ERROR 42000: Variable 'MYSQL_ERRNO' can't be set to the value of 'NULL'
|
||
drop procedure test_signal $$
|
||
create procedure test_signal()
|
||
begin
|
||
DECLARE error CONDITION FOR SQLSTATE '99999';
|
||
SIGNAL error SET
|
||
CLASS_ORIGIN = NULL;
|
||
end $$
|
||
call test_signal() $$
|
||
ERROR 42000: Variable 'CLASS_ORIGIN' can't be set to the value of 'NULL'
|
||
drop procedure test_signal $$
|
||
create procedure test_signal()
|
||
begin
|
||
DECLARE error CONDITION FOR SQLSTATE '99999';
|
||
SIGNAL error SET
|
||
SUBCLASS_ORIGIN = NULL;
|
||
end $$
|
||
call test_signal() $$
|
||
ERROR 42000: Variable 'SUBCLASS_ORIGIN' can't be set to the value of 'NULL'
|
||
drop procedure test_signal $$
|
||
create procedure test_signal()
|
||
begin
|
||
DECLARE error CONDITION FOR SQLSTATE '99999';
|
||
SIGNAL error SET
|
||
CONSTRAINT_CATALOG = NULL;
|
||
end $$
|
||
call test_signal() $$
|
||
ERROR 42000: Variable 'CONSTRAINT_CATALOG' can't be set to the value of 'NULL'
|
||
drop procedure test_signal $$
|
||
create procedure test_signal()
|
||
begin
|
||
DECLARE error CONDITION FOR SQLSTATE '99999';
|
||
SIGNAL error SET
|
||
CONSTRAINT_SCHEMA = NULL;
|
||
end $$
|
||
call test_signal() $$
|
||
ERROR 42000: Variable 'CONSTRAINT_SCHEMA' can't be set to the value of 'NULL'
|
||
drop procedure test_signal $$
|
||
create procedure test_signal()
|
||
begin
|
||
DECLARE error CONDITION FOR SQLSTATE '99999';
|
||
SIGNAL error SET
|
||
CONSTRAINT_NAME = NULL;
|
||
end $$
|
||
call test_signal() $$
|
||
ERROR 42000: Variable 'CONSTRAINT_NAME' can't be set to the value of 'NULL'
|
||
drop procedure test_signal $$
|
||
create procedure test_signal()
|
||
begin
|
||
DECLARE error CONDITION FOR SQLSTATE '99999';
|
||
SIGNAL error SET
|
||
CATALOG_NAME = NULL;
|
||
end $$
|
||
call test_signal() $$
|
||
ERROR 42000: Variable 'CATALOG_NAME' can't be set to the value of 'NULL'
|
||
drop procedure test_signal $$
|
||
create procedure test_signal()
|
||
begin
|
||
DECLARE error CONDITION FOR SQLSTATE '99999';
|
||
SIGNAL error SET
|
||
SCHEMA_NAME = NULL;
|
||
end $$
|
||
call test_signal() $$
|
||
ERROR 42000: Variable 'SCHEMA_NAME' can't be set to the value of 'NULL'
|
||
drop procedure test_signal $$
|
||
create procedure test_signal()
|
||
begin
|
||
DECLARE error CONDITION FOR SQLSTATE '99999';
|
||
SIGNAL error SET
|
||
TABLE_NAME = NULL;
|
||
end $$
|
||
call test_signal() $$
|
||
ERROR 42000: Variable 'TABLE_NAME' can't be set to the value of 'NULL'
|
||
drop procedure test_signal $$
|
||
create procedure test_signal()
|
||
begin
|
||
DECLARE error CONDITION FOR SQLSTATE '99999';
|
||
SIGNAL error SET
|
||
COLUMN_NAME = NULL;
|
||
end $$
|
||
call test_signal() $$
|
||
ERROR 42000: Variable 'COLUMN_NAME' can't be set to the value of 'NULL'
|
||
drop procedure test_signal $$
|
||
create procedure test_signal()
|
||
begin
|
||
DECLARE error CONDITION FOR SQLSTATE '99999';
|
||
SIGNAL error SET
|
||
CURSOR_NAME = NULL;
|
||
end $$
|
||
call test_signal() $$
|
||
ERROR 42000: Variable 'CURSOR_NAME' can't be set to the value of 'NULL'
|
||
drop procedure test_signal $$
|
||
create procedure test_signal()
|
||
begin
|
||
DECLARE error CONDITION FOR SQLSTATE '99999';
|
||
SIGNAL error SET
|
||
MESSAGE_TEXT = NULL;
|
||
end $$
|
||
call test_signal() $$
|
||
ERROR 42000: Variable 'MESSAGE_TEXT' can't be set to the value of 'NULL'
|
||
drop procedure test_signal $$
|
||
create procedure test_signal()
|
||
begin
|
||
DECLARE something CONDITION FOR SQLSTATE '99999';
|
||
DECLARE message_text VARCHAR(64) DEFAULT "Local string variable";
|
||
DECLARE sqlcode INTEGER DEFAULT 1234;
|
||
SIGNAL something SET
|
||
MESSAGE_TEXT = message_text,
|
||
MYSQL_ERRNO = sqlcode;
|
||
end $$
|
||
call test_signal() $$
|
||
ERROR 99999: Local string variable
|
||
drop procedure test_signal $$
|
||
create procedure test_signal(message_text VARCHAR(64), sqlcode INTEGER)
|
||
begin
|
||
DECLARE something CONDITION FOR SQLSTATE "12345";
|
||
SIGNAL something SET
|
||
MESSAGE_TEXT = message_text,
|
||
MYSQL_ERRNO = sqlcode;
|
||
end $$
|
||
call test_signal("Parameter string", NULL) $$
|
||
ERROR 42000: Variable 'MYSQL_ERRNO' can't be set to the value of 'NULL'
|
||
call test_signal(NULL, 1234) $$
|
||
ERROR 42000: Variable 'MESSAGE_TEXT' can't be set to the value of 'NULL'
|
||
call test_signal("Parameter string", 5678) $$
|
||
ERROR 12345: Parameter string
|
||
drop procedure test_signal $$
|
||
create procedure test_signal()
|
||
begin
|
||
DECLARE something CONDITION FOR SQLSTATE "AABBB";
|
||
SIGNAL something SET
|
||
MESSAGE_TEXT = @message_text,
|
||
MYSQL_ERRNO = @sqlcode;
|
||
end $$
|
||
call test_signal() $$
|
||
ERROR 42000: Variable 'MESSAGE_TEXT' can't be set to the value of 'NULL'
|
||
set @sqlcode= 12 $$
|
||
call test_signal() $$
|
||
ERROR 42000: Variable 'MESSAGE_TEXT' can't be set to the value of 'NULL'
|
||
set @message_text= "User variable" $$
|
||
call test_signal() $$
|
||
ERROR AABBB: User variable
|
||
drop procedure test_signal $$
|
||
create procedure test_invalid()
|
||
begin
|
||
DECLARE something CONDITION FOR SQLSTATE "AABBB";
|
||
SIGNAL something SET
|
||
MESSAGE_TEXT = @message_text := 'illegal',
|
||
MYSQL_ERRNO = @sqlcode := 1234;
|
||
end $$
|
||
ERROR 42000: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '
|
||
MYSQL_ERRNO = @sqlcode := 1234;
|
||
end' at line 5
|
||
create procedure test_signal()
|
||
begin
|
||
DECLARE aaa VARCHAR(64);
|
||
DECLARE bbb VARCHAR(64);
|
||
DECLARE ccc VARCHAR(64);
|
||
DECLARE ddd VARCHAR(64);
|
||
DECLARE eee VARCHAR(64);
|
||
DECLARE fff VARCHAR(64);
|
||
DECLARE ggg VARCHAR(64);
|
||
DECLARE hhh VARCHAR(64);
|
||
DECLARE iii VARCHAR(64);
|
||
DECLARE jjj VARCHAR(64);
|
||
DECLARE kkk VARCHAR(64);
|
||
DECLARE warn CONDITION FOR SQLSTATE "01234";
|
||
set aaa= repeat("A", 64);
|
||
set bbb= repeat("B", 64);
|
||
set ccc= repeat("C", 64);
|
||
set ddd= repeat("D", 64);
|
||
set eee= repeat("E", 64);
|
||
set fff= repeat("F", 64);
|
||
set ggg= repeat("G", 64);
|
||
set hhh= repeat("H", 64);
|
||
set iii= repeat("I", 64);
|
||
set jjj= repeat("J", 64);
|
||
set kkk= repeat("K", 64);
|
||
SIGNAL warn SET
|
||
CLASS_ORIGIN = aaa,
|
||
SUBCLASS_ORIGIN = bbb,
|
||
CONSTRAINT_CATALOG = ccc,
|
||
CONSTRAINT_SCHEMA = ddd,
|
||
CONSTRAINT_NAME = eee,
|
||
CATALOG_NAME = fff,
|
||
SCHEMA_NAME = ggg,
|
||
TABLE_NAME = hhh,
|
||
COLUMN_NAME = iii,
|
||
CURSOR_NAME = jjj,
|
||
MESSAGE_TEXT = kkk,
|
||
MYSQL_ERRNO = 65535;
|
||
end $$
|
||
call test_signal() $$
|
||
Warnings:
|
||
Warning 65535 KKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKK
|
||
drop procedure test_signal $$
|
||
create procedure test_signal()
|
||
begin
|
||
DECLARE warn CONDITION FOR SQLSTATE "01234";
|
||
SIGNAL warn SET
|
||
MYSQL_ERRNO = 999999999999999999999999999999999999999999999999999;
|
||
end $$
|
||
call test_signal() $$
|
||
ERROR 42000: Variable 'MYSQL_ERRNO' can't be set to the value of '999999999999999999999999999999999999999999999999999'
|
||
drop procedure test_signal $$
|
||
create procedure test_signal()
|
||
begin
|
||
DECLARE aaax VARCHAR(65);
|
||
DECLARE bbbx VARCHAR(65);
|
||
DECLARE cccx VARCHAR(65);
|
||
DECLARE dddx VARCHAR(65);
|
||
DECLARE eeex VARCHAR(65);
|
||
DECLARE fffx VARCHAR(65);
|
||
DECLARE gggx VARCHAR(65);
|
||
DECLARE hhhx VARCHAR(65);
|
||
DECLARE iiix VARCHAR(65);
|
||
DECLARE jjjx VARCHAR(65);
|
||
DECLARE kkkx VARCHAR(65);
|
||
DECLARE lllx VARCHAR(129);
|
||
DECLARE warn CONDITION FOR SQLSTATE "01234";
|
||
set aaax= concat(repeat("A", 64), "X");
|
||
set bbbx= concat(repeat("B", 64), "X");
|
||
set cccx= concat(repeat("C", 64), "X");
|
||
set dddx= concat(repeat("D", 64), "X");
|
||
set eeex= concat(repeat("E", 64), "X");
|
||
set fffx= concat(repeat("F", 64), "X");
|
||
set gggx= concat(repeat("G", 64), "X");
|
||
set hhhx= concat(repeat("H", 64), "X");
|
||
set iiix= concat(repeat("I", 64), "X");
|
||
set jjjx= concat(repeat("J", 64), "X");
|
||
set kkkx= concat(repeat("K", 64), "X");
|
||
set lllx= concat(repeat("1", 100),
|
||
repeat("2", 20),
|
||
repeat("8", 8),
|
||
"X");
|
||
SIGNAL warn SET
|
||
CLASS_ORIGIN = aaax,
|
||
SUBCLASS_ORIGIN = bbbx,
|
||
CONSTRAINT_CATALOG = cccx,
|
||
CONSTRAINT_SCHEMA = dddx,
|
||
CONSTRAINT_NAME = eeex,
|
||
CATALOG_NAME = fffx,
|
||
SCHEMA_NAME = gggx,
|
||
TABLE_NAME = hhhx,
|
||
COLUMN_NAME = iiix,
|
||
CURSOR_NAME = jjjx,
|
||
MESSAGE_TEXT = lllx,
|
||
MYSQL_ERRNO = 10000;
|
||
end $$
|
||
call test_signal() $$
|
||
Warnings:
|
||
Warning 1647 Data truncated for condition item 'CLASS_ORIGIN'
|
||
Warning 1647 Data truncated for condition item 'SUBCLASS_ORIGIN'
|
||
Warning 1647 Data truncated for condition item 'CONSTRAINT_CATALOG'
|
||
Warning 1647 Data truncated for condition item 'CONSTRAINT_SCHEMA'
|
||
Warning 1647 Data truncated for condition item 'CONSTRAINT_NAME'
|
||
Warning 1647 Data truncated for condition item 'CATALOG_NAME'
|
||
Warning 1647 Data truncated for condition item 'SCHEMA_NAME'
|
||
Warning 1647 Data truncated for condition item 'TABLE_NAME'
|
||
Warning 1647 Data truncated for condition item 'COLUMN_NAME'
|
||
Warning 1647 Data truncated for condition item 'CURSOR_NAME'
|
||
Warning 1647 Data truncated for condition item 'MESSAGE_TEXT'
|
||
Warning 10000 11111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111112222222222222222222288888888
|
||
drop procedure test_signal $$
|
||
create procedure test_signal()
|
||
begin
|
||
DECLARE warn CONDITION FOR SQLSTATE "01234";
|
||
DECLARE CONTINUE HANDLER for SQLSTATE "01234"
|
||
begin
|
||
select "Caught by SQLSTATE";
|
||
end;
|
||
SIGNAL warn SET
|
||
MESSAGE_TEXT = "Raising a warning",
|
||
MYSQL_ERRNO = 1012;
|
||
end $$
|
||
call test_signal() $$
|
||
Caught by SQLSTATE
|
||
Caught by SQLSTATE
|
||
Warnings:
|
||
Warning 1012 Raising a warning
|
||
drop procedure test_signal $$
|
||
create procedure test_signal()
|
||
begin
|
||
DECLARE warn CONDITION FOR SQLSTATE "01234";
|
||
DECLARE CONTINUE HANDLER for 1012
|
||
begin
|
||
select "Caught by number";
|
||
end;
|
||
SIGNAL warn SET
|
||
MESSAGE_TEXT = "Raising a warning",
|
||
MYSQL_ERRNO = 1012;
|
||
end $$
|
||
call test_signal() $$
|
||
Caught by number
|
||
Caught by number
|
||
Warnings:
|
||
Warning 1012 Raising a warning
|
||
drop procedure test_signal $$
|
||
create procedure test_signal()
|
||
begin
|
||
DECLARE warn CONDITION FOR SQLSTATE "01234";
|
||
DECLARE CONTINUE HANDLER for SQLWARNING
|
||
begin
|
||
select "Caught by SQLWARNING";
|
||
end;
|
||
SIGNAL warn SET
|
||
MESSAGE_TEXT = "Raising a warning",
|
||
MYSQL_ERRNO = 1012;
|
||
end $$
|
||
call test_signal() $$
|
||
Caught by SQLWARNING
|
||
Caught by SQLWARNING
|
||
Warnings:
|
||
Warning 1012 Raising a warning
|
||
drop procedure test_signal $$
|
||
create procedure test_signal()
|
||
begin
|
||
DECLARE not_found CONDITION FOR SQLSTATE "02ABC";
|
||
DECLARE CONTINUE HANDLER for SQLSTATE "02ABC"
|
||
begin
|
||
select "Caught by SQLSTATE";
|
||
end;
|
||
SIGNAL not_found SET
|
||
MESSAGE_TEXT = "Raising a not found",
|
||
MYSQL_ERRNO = 1012;
|
||
end $$
|
||
call test_signal() $$
|
||
Caught by SQLSTATE
|
||
Caught by SQLSTATE
|
||
Warnings:
|
||
Error 1012 Raising a not found
|
||
drop procedure test_signal $$
|
||
create procedure test_signal()
|
||
begin
|
||
DECLARE not_found CONDITION FOR SQLSTATE "02ABC";
|
||
DECLARE CONTINUE HANDLER for 1012
|
||
begin
|
||
select "Caught by number";
|
||
end;
|
||
SIGNAL not_found SET
|
||
MESSAGE_TEXT = "Raising a not found",
|
||
MYSQL_ERRNO = 1012;
|
||
end $$
|
||
call test_signal() $$
|
||
Caught by number
|
||
Caught by number
|
||
Warnings:
|
||
Error 1012 Raising a not found
|
||
drop procedure test_signal $$
|
||
create procedure test_signal()
|
||
begin
|
||
DECLARE not_found CONDITION FOR SQLSTATE "02ABC";
|
||
DECLARE CONTINUE HANDLER for NOT FOUND
|
||
begin
|
||
select "Caught by NOT FOUND";
|
||
end;
|
||
SIGNAL not_found SET
|
||
MESSAGE_TEXT = "Raising a not found",
|
||
MYSQL_ERRNO = 1012;
|
||
end $$
|
||
call test_signal() $$
|
||
Caught by NOT FOUND
|
||
Caught by NOT FOUND
|
||
Warnings:
|
||
Error 1012 Raising a not found
|
||
drop procedure test_signal $$
|
||
create procedure test_signal()
|
||
begin
|
||
DECLARE error CONDITION FOR SQLSTATE "55555";
|
||
DECLARE CONTINUE HANDLER for SQLSTATE "55555"
|
||
begin
|
||
select "Caught by SQLSTATE";
|
||
end;
|
||
SIGNAL error SET
|
||
MESSAGE_TEXT = "Raising an error",
|
||
MYSQL_ERRNO = 1012;
|
||
end $$
|
||
call test_signal() $$
|
||
Caught by SQLSTATE
|
||
Caught by SQLSTATE
|
||
Warnings:
|
||
Error 1012 Raising an error
|
||
drop procedure test_signal $$
|
||
create procedure test_signal()
|
||
begin
|
||
DECLARE error CONDITION FOR SQLSTATE "55555";
|
||
DECLARE CONTINUE HANDLER for 1012
|
||
begin
|
||
select "Caught by number";
|
||
end;
|
||
SIGNAL error SET
|
||
MESSAGE_TEXT = "Raising an error",
|
||
MYSQL_ERRNO = 1012;
|
||
end $$
|
||
call test_signal() $$
|
||
Caught by number
|
||
Caught by number
|
||
Warnings:
|
||
Error 1012 Raising an error
|
||
drop procedure test_signal $$
|
||
create procedure test_signal()
|
||
begin
|
||
DECLARE error CONDITION FOR SQLSTATE "55555";
|
||
DECLARE CONTINUE HANDLER for SQLEXCEPTION
|
||
begin
|
||
select "Caught by SQLEXCEPTION";
|
||
end;
|
||
SIGNAL error SET
|
||
MESSAGE_TEXT = "Raising an error",
|
||
MYSQL_ERRNO = 1012;
|
||
end $$
|
||
call test_signal() $$
|
||
Caught by SQLEXCEPTION
|
||
Caught by SQLEXCEPTION
|
||
Warnings:
|
||
Error 1012 Raising an error
|
||
drop procedure test_signal $$
|
||
#
|
||
# Test where SIGNAL can be used
|
||
#
|
||
create function test_signal_func() returns integer
|
||
begin
|
||
DECLARE warn CONDITION FOR SQLSTATE "01XXX";
|
||
SIGNAL warn SET
|
||
MESSAGE_TEXT = "This function SIGNAL a warning",
|
||
MYSQL_ERRNO = 1012;
|
||
return 5;
|
||
end $$
|
||
select test_signal_func() $$
|
||
test_signal_func()
|
||
5
|
||
Warnings:
|
||
Warning 1012 This function SIGNAL a warning
|
||
drop function test_signal_func $$
|
||
create function test_signal_func() returns integer
|
||
begin
|
||
DECLARE not_found CONDITION FOR SQLSTATE "02XXX";
|
||
SIGNAL not_found SET
|
||
MESSAGE_TEXT = "This function SIGNAL not found",
|
||
MYSQL_ERRNO = 1012;
|
||
return 5;
|
||
end $$
|
||
select test_signal_func() $$
|
||
ERROR 02XXX: This function SIGNAL not found
|
||
drop function test_signal_func $$
|
||
create function test_signal_func() returns integer
|
||
begin
|
||
DECLARE error CONDITION FOR SQLSTATE "50000";
|
||
SIGNAL error SET
|
||
MESSAGE_TEXT = "This function SIGNAL an error",
|
||
MYSQL_ERRNO = 1012;
|
||
return 5;
|
||
end $$
|
||
select test_signal_func() $$
|
||
ERROR 50000: This function SIGNAL an error
|
||
drop function test_signal_func $$
|
||
drop table if exists t1 $$
|
||
create table t1 (a integer) $$
|
||
create trigger t1_ai after insert on t1 for each row
|
||
begin
|
||
DECLARE msg VARCHAR(128);
|
||
DECLARE warn CONDITION FOR SQLSTATE "01XXX";
|
||
set msg= concat("This trigger SIGNAL a warning, a=", NEW.a);
|
||
SIGNAL warn SET
|
||
MESSAGE_TEXT = msg,
|
||
MYSQL_ERRNO = 1012;
|
||
end $$
|
||
insert into t1 values (1), (2) $$
|
||
drop trigger t1_ai $$
|
||
create trigger t1_ai after insert on t1 for each row
|
||
begin
|
||
DECLARE msg VARCHAR(128);
|
||
DECLARE not_found CONDITION FOR SQLSTATE "02XXX";
|
||
set msg= concat("This trigger SIGNAL a not found, a=", NEW.a);
|
||
SIGNAL not_found SET
|
||
MESSAGE_TEXT = msg,
|
||
MYSQL_ERRNO = 1012;
|
||
end $$
|
||
insert into t1 values (3), (4) $$
|
||
ERROR 02XXX: This trigger SIGNAL a not found, a=3
|
||
drop trigger t1_ai $$
|
||
create trigger t1_ai after insert on t1 for each row
|
||
begin
|
||
DECLARE msg VARCHAR(128);
|
||
DECLARE error CONDITION FOR SQLSTATE "03XXX";
|
||
set msg= concat("This trigger SIGNAL an error, a=", NEW.a);
|
||
SIGNAL error SET
|
||
MESSAGE_TEXT = msg,
|
||
MYSQL_ERRNO = 1012;
|
||
end $$
|
||
insert into t1 values (5), (6) $$
|
||
ERROR 03XXX: This trigger SIGNAL an error, a=5
|
||
drop table t1 $$
|
||
create table t1 (errno integer, msg varchar(128)) $$
|
||
create trigger t1_ai after insert on t1 for each row
|
||
begin
|
||
DECLARE warn CONDITION FOR SQLSTATE "01XXX";
|
||
SIGNAL warn SET
|
||
MESSAGE_TEXT = NEW.msg,
|
||
MYSQL_ERRNO = NEW.errno;
|
||
end $$
|
||
insert into t1 set errno=1012, msg='Warning message 1 in trigger' $$
|
||
insert into t1 set errno=1013, msg='Warning message 2 in trigger' $$
|
||
drop table t1 $$
|
||
drop table if exists t1 $$
|
||
drop procedure if exists p1 $$
|
||
drop function if exists f1 $$
|
||
create table t1 (s1 int) $$
|
||
insert into t1 values (1) $$
|
||
create procedure p1()
|
||
begin
|
||
declare a int;
|
||
declare c cursor for select f1() from t1;
|
||
declare continue handler for sqlstate '03000'
|
||
select "caught 03000";
|
||
declare continue handler for 1326
|
||
select "caught cursor is not open";
|
||
select "Before open";
|
||
open c;
|
||
select "Before fetch";
|
||
fetch c into a;
|
||
select "Before close";
|
||
close c;
|
||
end $$
|
||
create function f1() returns int
|
||
begin
|
||
signal sqlstate '03000';
|
||
return 5;
|
||
end $$
|
||
drop table t1 $$
|
||
drop procedure p1 $$
|
||
drop function f1 $$
|
||
#
|
||
# Test the RESIGNAL runtime
|
||
#
|
||
create procedure test_resignal()
|
||
begin
|
||
DECLARE warn CONDITION FOR SQLSTATE "01234";
|
||
DECLARE CONTINUE HANDLER for 1012
|
||
begin
|
||
select "before RESIGNAL";
|
||
RESIGNAL;
|
||
select "after RESIGNAL";
|
||
end;
|
||
SIGNAL warn SET
|
||
MESSAGE_TEXT = "Raising a warning",
|
||
MYSQL_ERRNO = 1012;
|
||
end $$
|
||
call test_resignal() $$
|
||
before RESIGNAL
|
||
before RESIGNAL
|
||
after RESIGNAL
|
||
after RESIGNAL
|
||
Warnings:
|
||
Warning 1012 Raising a warning
|
||
Warning 1012 Raising a warning
|
||
drop procedure test_resignal $$
|
||
create procedure test_resignal()
|
||
begin
|
||
DECLARE not_found CONDITION FOR SQLSTATE "02222";
|
||
DECLARE CONTINUE HANDLER for 1012
|
||
begin
|
||
select "before RESIGNAL";
|
||
RESIGNAL;
|
||
select "after RESIGNAL";
|
||
end;
|
||
SIGNAL not_found SET
|
||
MESSAGE_TEXT = "Raising a not found",
|
||
MYSQL_ERRNO = 1012;
|
||
end $$
|
||
call test_resignal() $$
|
||
before RESIGNAL
|
||
before RESIGNAL
|
||
ERROR 02222: Raising a not found
|
||
drop procedure test_resignal $$
|
||
create procedure test_resignal()
|
||
begin
|
||
DECLARE error CONDITION FOR SQLSTATE "55555";
|
||
DECLARE CONTINUE HANDLER for 1012
|
||
begin
|
||
select "before RESIGNAL";
|
||
RESIGNAL;
|
||
select "after RESIGNAL";
|
||
end;
|
||
SIGNAL error SET
|
||
MESSAGE_TEXT = "Raising an error",
|
||
MYSQL_ERRNO = 1012;
|
||
end $$
|
||
call test_resignal() $$
|
||
before RESIGNAL
|
||
before RESIGNAL
|
||
ERROR 55555: Raising an error
|
||
drop procedure test_resignal $$
|
||
create procedure test_resignal()
|
||
begin
|
||
DECLARE CONTINUE HANDLER for sqlwarning
|
||
begin
|
||
select "before RESIGNAL";
|
||
RESIGNAL;
|
||
select "after RESIGNAL";
|
||
end;
|
||
insert into t_warn set a= 9999999999999999;
|
||
end $$
|
||
call test_resignal() $$
|
||
before RESIGNAL
|
||
before RESIGNAL
|
||
after RESIGNAL
|
||
after RESIGNAL
|
||
Warnings:
|
||
Warning 1264 Out of range value for column 'a' at row 1
|
||
Warning 1264 Out of range value for column 'a' at row 1
|
||
drop procedure test_resignal $$
|
||
create procedure test_resignal()
|
||
begin
|
||
DECLARE x integer;
|
||
DECLARE c cursor for select * from t_cursor;
|
||
DECLARE CONTINUE HANDLER for not found
|
||
begin
|
||
select "before RESIGNAL";
|
||
RESIGNAL;
|
||
select "after RESIGNAL";
|
||
end;
|
||
open c;
|
||
fetch c into x;
|
||
close c;
|
||
end $$
|
||
call test_resignal() $$
|
||
before RESIGNAL
|
||
before RESIGNAL
|
||
ERROR 02000: No data - zero rows fetched, selected, or processed
|
||
drop procedure test_resignal $$
|
||
create procedure test_resignal()
|
||
begin
|
||
DECLARE CONTINUE HANDLER for sqlexception
|
||
begin
|
||
select "before RESIGNAL";
|
||
RESIGNAL;
|
||
select "after RESIGNAL";
|
||
end;
|
||
drop table no_such_table;
|
||
end $$
|
||
call test_resignal() $$
|
||
before RESIGNAL
|
||
before RESIGNAL
|
||
ERROR 42S02: Unknown table 'no_such_table'
|
||
drop procedure test_resignal $$
|
||
create procedure test_resignal()
|
||
begin
|
||
DECLARE warn CONDITION FOR SQLSTATE "01234";
|
||
DECLARE CONTINUE HANDLER for 1012
|
||
begin
|
||
select "before RESIGNAL";
|
||
RESIGNAL SET
|
||
MESSAGE_TEXT = "RESIGNAL of a warning",
|
||
MYSQL_ERRNO = 5555 ;
|
||
select "after RESIGNAL";
|
||
end;
|
||
SIGNAL warn SET
|
||
MESSAGE_TEXT = "Raising a warning",
|
||
MYSQL_ERRNO = 1012;
|
||
end $$
|
||
call test_resignal() $$
|
||
before RESIGNAL
|
||
before RESIGNAL
|
||
after RESIGNAL
|
||
after RESIGNAL
|
||
Warnings:
|
||
Warning 1012 Raising a warning
|
||
Warning 5555 RESIGNAL of a warning
|
||
drop procedure test_resignal $$
|
||
create procedure test_resignal()
|
||
begin
|
||
DECLARE not_found CONDITION FOR SQLSTATE "02111";
|
||
DECLARE CONTINUE HANDLER for 1012
|
||
begin
|
||
select "before RESIGNAL";
|
||
RESIGNAL SET
|
||
MESSAGE_TEXT = "RESIGNAL of a not found",
|
||
MYSQL_ERRNO = 5555 ;
|
||
select "after RESIGNAL";
|
||
end;
|
||
SIGNAL not_found SET
|
||
MESSAGE_TEXT = "Raising a not found",
|
||
MYSQL_ERRNO = 1012;
|
||
end $$
|
||
call test_resignal() $$
|
||
before RESIGNAL
|
||
before RESIGNAL
|
||
ERROR 02111: RESIGNAL of a not found
|
||
drop procedure test_resignal $$
|
||
create procedure test_resignal()
|
||
begin
|
||
DECLARE error CONDITION FOR SQLSTATE "33333";
|
||
DECLARE CONTINUE HANDLER for 1012
|
||
begin
|
||
select "before RESIGNAL";
|
||
RESIGNAL SET
|
||
MESSAGE_TEXT = "RESIGNAL of an error",
|
||
MYSQL_ERRNO = 5555 ;
|
||
select "after RESIGNAL";
|
||
end;
|
||
SIGNAL error SET
|
||
MESSAGE_TEXT = "Raising an error",
|
||
MYSQL_ERRNO = 1012;
|
||
end $$
|
||
call test_resignal() $$
|
||
before RESIGNAL
|
||
before RESIGNAL
|
||
ERROR 33333: RESIGNAL of an error
|
||
drop procedure test_resignal $$
|
||
create procedure test_resignal()
|
||
begin
|
||
DECLARE CONTINUE HANDLER for sqlwarning
|
||
begin
|
||
select "before RESIGNAL";
|
||
RESIGNAL SET
|
||
MESSAGE_TEXT = "RESIGNAL of a warning",
|
||
MYSQL_ERRNO = 5555 ;
|
||
select "after RESIGNAL";
|
||
end;
|
||
insert into t_warn set a= 9999999999999999;
|
||
end $$
|
||
call test_resignal() $$
|
||
before RESIGNAL
|
||
before RESIGNAL
|
||
after RESIGNAL
|
||
after RESIGNAL
|
||
Warnings:
|
||
Warning 1264 Out of range value for column 'a' at row 1
|
||
Warning 5555 RESIGNAL of a warning
|
||
drop procedure test_resignal $$
|
||
create procedure test_resignal()
|
||
begin
|
||
DECLARE x integer;
|
||
DECLARE c cursor for select * from t_cursor;
|
||
DECLARE CONTINUE HANDLER for not found
|
||
begin
|
||
select "before RESIGNAL";
|
||
RESIGNAL SET
|
||
MESSAGE_TEXT = "RESIGNAL of not found",
|
||
MYSQL_ERRNO = 5555 ;
|
||
select "after RESIGNAL";
|
||
end;
|
||
open c;
|
||
fetch c into x;
|
||
close c;
|
||
end $$
|
||
call test_resignal() $$
|
||
before RESIGNAL
|
||
before RESIGNAL
|
||
ERROR 02000: RESIGNAL of not found
|
||
drop procedure test_resignal $$
|
||
create procedure test_resignal()
|
||
begin
|
||
DECLARE CONTINUE HANDLER for sqlexception
|
||
begin
|
||
select "before RESIGNAL";
|
||
RESIGNAL SET
|
||
MESSAGE_TEXT = "RESIGNAL of an error",
|
||
MYSQL_ERRNO = 5555 ;
|
||
select "after RESIGNAL";
|
||
end;
|
||
drop table no_such_table;
|
||
end $$
|
||
call test_resignal() $$
|
||
before RESIGNAL
|
||
before RESIGNAL
|
||
ERROR 42S02: RESIGNAL of an error
|
||
drop procedure test_resignal $$
|
||
create procedure test_resignal()
|
||
begin
|
||
DECLARE warn CONDITION FOR SQLSTATE "01111";
|
||
DECLARE CONTINUE HANDLER for 1012
|
||
begin
|
||
select "before RESIGNAL";
|
||
RESIGNAL SQLSTATE "01222" SET
|
||
MESSAGE_TEXT = "RESIGNAL to warning",
|
||
MYSQL_ERRNO = 5555 ;
|
||
select "after RESIGNAL";
|
||
end;
|
||
SIGNAL warn SET
|
||
MESSAGE_TEXT = "Raising a warning",
|
||
MYSQL_ERRNO = 1012;
|
||
end $$
|
||
call test_resignal() $$
|
||
before RESIGNAL
|
||
before RESIGNAL
|
||
after RESIGNAL
|
||
after RESIGNAL
|
||
Warnings:
|
||
Warning 1012 Raising a warning
|
||
Warning 5555 RESIGNAL to warning
|
||
drop procedure test_resignal $$
|
||
create procedure test_resignal()
|
||
begin
|
||
DECLARE warn CONDITION FOR SQLSTATE "01111";
|
||
DECLARE CONTINUE HANDLER for 1012
|
||
begin
|
||
select "before RESIGNAL";
|
||
RESIGNAL SQLSTATE "02222" SET
|
||
MESSAGE_TEXT = "RESIGNAL to not found",
|
||
MYSQL_ERRNO = 5555 ;
|
||
select "after RESIGNAL";
|
||
end;
|
||
SIGNAL warn SET
|
||
MESSAGE_TEXT = "Raising a warning",
|
||
MYSQL_ERRNO = 1012;
|
||
end $$
|
||
call test_resignal() $$
|
||
before RESIGNAL
|
||
before RESIGNAL
|
||
ERROR 02222: RESIGNAL to not found
|
||
show warnings $$
|
||
Level Code Message
|
||
Warning 1012 Raising a warning
|
||
Error 5555 RESIGNAL to not found
|
||
drop procedure test_resignal $$
|
||
create procedure test_resignal()
|
||
begin
|
||
DECLARE warn CONDITION FOR SQLSTATE "01111";
|
||
DECLARE CONTINUE HANDLER for 1012
|
||
begin
|
||
select "before RESIGNAL";
|
||
RESIGNAL SQLSTATE "33333" SET
|
||
MESSAGE_TEXT = "RESIGNAL to error",
|
||
MYSQL_ERRNO = 5555 ;
|
||
select "after RESIGNAL";
|
||
end;
|
||
SIGNAL warn SET
|
||
MESSAGE_TEXT = "Raising a warning",
|
||
MYSQL_ERRNO = 1012;
|
||
end $$
|
||
call test_resignal() $$
|
||
before RESIGNAL
|
||
before RESIGNAL
|
||
ERROR 33333: RESIGNAL to error
|
||
show warnings $$
|
||
Level Code Message
|
||
Warning 1012 Raising a warning
|
||
Error 5555 RESIGNAL to error
|
||
drop procedure test_resignal $$
|
||
create procedure test_resignal()
|
||
begin
|
||
DECLARE not_found CONDITION FOR SQLSTATE "02ABC";
|
||
DECLARE CONTINUE HANDLER for 1012
|
||
begin
|
||
select "before RESIGNAL";
|
||
RESIGNAL SQLSTATE "01222" SET
|
||
MESSAGE_TEXT = "RESIGNAL to warning",
|
||
MYSQL_ERRNO = 5555 ;
|
||
select "after RESIGNAL";
|
||
end;
|
||
SIGNAL not_found SET
|
||
MESSAGE_TEXT = "Raising a not found",
|
||
MYSQL_ERRNO = 1012;
|
||
end $$
|
||
call test_resignal() $$
|
||
before RESIGNAL
|
||
before RESIGNAL
|
||
after RESIGNAL
|
||
after RESIGNAL
|
||
Warnings:
|
||
Error 1012 Raising a not found
|
||
Warning 5555 RESIGNAL to warning
|
||
drop procedure test_resignal $$
|
||
create procedure test_resignal()
|
||
begin
|
||
DECLARE not_found CONDITION FOR SQLSTATE "02ABC";
|
||
DECLARE CONTINUE HANDLER for 1012
|
||
begin
|
||
select "before RESIGNAL";
|
||
RESIGNAL SQLSTATE "02222" SET
|
||
MESSAGE_TEXT = "RESIGNAL to not found",
|
||
MYSQL_ERRNO = 5555 ;
|
||
select "after RESIGNAL";
|
||
end;
|
||
SIGNAL not_found SET
|
||
MESSAGE_TEXT = "Raising a not found",
|
||
MYSQL_ERRNO = 1012;
|
||
end $$
|
||
call test_resignal() $$
|
||
before RESIGNAL
|
||
before RESIGNAL
|
||
ERROR 02222: RESIGNAL to not found
|
||
show warnings $$
|
||
Level Code Message
|
||
Error 1012 Raising a not found
|
||
Error 5555 RESIGNAL to not found
|
||
drop procedure test_resignal $$
|
||
create procedure test_resignal()
|
||
begin
|
||
DECLARE not_found CONDITION FOR SQLSTATE "02ABC";
|
||
DECLARE CONTINUE HANDLER for 1012
|
||
begin
|
||
select "before RESIGNAL";
|
||
RESIGNAL SQLSTATE "33333" SET
|
||
MESSAGE_TEXT = "RESIGNAL to error",
|
||
MYSQL_ERRNO = 5555 ;
|
||
select "after RESIGNAL";
|
||
end;
|
||
SIGNAL not_found SET
|
||
MESSAGE_TEXT = "Raising a not found",
|
||
MYSQL_ERRNO = 1012;
|
||
end $$
|
||
call test_resignal() $$
|
||
before RESIGNAL
|
||
before RESIGNAL
|
||
ERROR 33333: RESIGNAL to error
|
||
show warnings $$
|
||
Level Code Message
|
||
Error 1012 Raising a not found
|
||
Error 5555 RESIGNAL to error
|
||
drop procedure test_resignal $$
|
||
create procedure test_resignal()
|
||
begin
|
||
DECLARE error CONDITION FOR SQLSTATE "AAAAA";
|
||
DECLARE CONTINUE HANDLER for 1012
|
||
begin
|
||
select "before RESIGNAL";
|
||
RESIGNAL SQLSTATE "01222" SET
|
||
MESSAGE_TEXT = "RESIGNAL to warning",
|
||
MYSQL_ERRNO = 5555 ;
|
||
select "after RESIGNAL";
|
||
end;
|
||
SIGNAL error SET
|
||
MESSAGE_TEXT = "Raising an error",
|
||
MYSQL_ERRNO = 1012;
|
||
end $$
|
||
call test_resignal() $$
|
||
before RESIGNAL
|
||
before RESIGNAL
|
||
after RESIGNAL
|
||
after RESIGNAL
|
||
Warnings:
|
||
Error 1012 Raising an error
|
||
Warning 5555 RESIGNAL to warning
|
||
drop procedure test_resignal $$
|
||
create procedure test_resignal()
|
||
begin
|
||
DECLARE error CONDITION FOR SQLSTATE "AAAAA";
|
||
DECLARE CONTINUE HANDLER for 1012
|
||
begin
|
||
select "before RESIGNAL";
|
||
RESIGNAL SQLSTATE "02222" SET
|
||
MESSAGE_TEXT = "RESIGNAL to not found",
|
||
MYSQL_ERRNO = 5555 ;
|
||
select "after RESIGNAL";
|
||
end;
|
||
SIGNAL error SET
|
||
MESSAGE_TEXT = "Raising an error",
|
||
MYSQL_ERRNO = 1012;
|
||
end $$
|
||
call test_resignal() $$
|
||
before RESIGNAL
|
||
before RESIGNAL
|
||
ERROR 02222: RESIGNAL to not found
|
||
show warnings $$
|
||
Level Code Message
|
||
Error 1012 Raising an error
|
||
Error 5555 RESIGNAL to not found
|
||
drop procedure test_resignal $$
|
||
create procedure test_resignal()
|
||
begin
|
||
DECLARE error CONDITION FOR SQLSTATE "AAAAA";
|
||
DECLARE CONTINUE HANDLER for 1012
|
||
begin
|
||
select "before RESIGNAL";
|
||
RESIGNAL SQLSTATE "33333" SET
|
||
MESSAGE_TEXT = "RESIGNAL to error",
|
||
MYSQL_ERRNO = 5555 ;
|
||
select "after RESIGNAL";
|
||
end;
|
||
SIGNAL error SET
|
||
MESSAGE_TEXT = "Raising an error",
|
||
MYSQL_ERRNO = 1012;
|
||
end $$
|
||
call test_resignal() $$
|
||
before RESIGNAL
|
||
before RESIGNAL
|
||
ERROR 33333: RESIGNAL to error
|
||
show warnings $$
|
||
Level Code Message
|
||
Error 1012 Raising an error
|
||
Error 5555 RESIGNAL to error
|
||
drop procedure test_resignal $$
|
||
create procedure test_resignal()
|
||
begin
|
||
DECLARE CONTINUE HANDLER for sqlwarning
|
||
begin
|
||
select "before RESIGNAL";
|
||
RESIGNAL SQLSTATE "01111" SET
|
||
MESSAGE_TEXT = "RESIGNAL to a warning",
|
||
MYSQL_ERRNO = 5555 ;
|
||
select "after RESIGNAL";
|
||
end;
|
||
insert into t_warn set a= 9999999999999999;
|
||
end $$
|
||
call test_resignal() $$
|
||
before RESIGNAL
|
||
before RESIGNAL
|
||
after RESIGNAL
|
||
after RESIGNAL
|
||
Warnings:
|
||
Warning 1264 Out of range value for column 'a' at row 1
|
||
Warning 5555 RESIGNAL to a warning
|
||
drop procedure test_resignal $$
|
||
create procedure test_resignal()
|
||
begin
|
||
DECLARE CONTINUE HANDLER for sqlwarning
|
||
begin
|
||
select "before RESIGNAL";
|
||
RESIGNAL SQLSTATE "02444" SET
|
||
MESSAGE_TEXT = "RESIGNAL to a not found",
|
||
MYSQL_ERRNO = 5555 ;
|
||
select "after RESIGNAL";
|
||
end;
|
||
insert into t_warn set a= 9999999999999999;
|
||
end $$
|
||
call test_resignal() $$
|
||
before RESIGNAL
|
||
before RESIGNAL
|
||
ERROR 02444: RESIGNAL to a not found
|
||
show warnings $$
|
||
Level Code Message
|
||
Warning 1264 Out of range value for column 'a' at row 1
|
||
Error 5555 RESIGNAL to a not found
|
||
drop procedure test_resignal $$
|
||
create procedure test_resignal()
|
||
begin
|
||
DECLARE CONTINUE HANDLER for sqlwarning
|
||
begin
|
||
select "before RESIGNAL";
|
||
RESIGNAL SQLSTATE "44444" SET
|
||
MESSAGE_TEXT = "RESIGNAL to an error",
|
||
MYSQL_ERRNO = 5555 ;
|
||
select "after RESIGNAL";
|
||
end;
|
||
insert into t_warn set a= 9999999999999999;
|
||
end $$
|
||
call test_resignal() $$
|
||
before RESIGNAL
|
||
before RESIGNAL
|
||
ERROR 44444: RESIGNAL to an error
|
||
show warnings $$
|
||
Level Code Message
|
||
Warning 1264 Out of range value for column 'a' at row 1
|
||
Error 5555 RESIGNAL to an error
|
||
drop procedure test_resignal $$
|
||
create procedure test_resignal()
|
||
begin
|
||
DECLARE x integer;
|
||
DECLARE c cursor for select * from t_cursor;
|
||
DECLARE CONTINUE HANDLER for not found
|
||
begin
|
||
select "before RESIGNAL";
|
||
RESIGNAL SQLSTATE "01111" SET
|
||
MESSAGE_TEXT = "RESIGNAL to a warning",
|
||
MYSQL_ERRNO = 5555 ;
|
||
select "after RESIGNAL";
|
||
end;
|
||
open c;
|
||
fetch c into x;
|
||
close c;
|
||
end $$
|
||
call test_resignal() $$
|
||
before RESIGNAL
|
||
before RESIGNAL
|
||
after RESIGNAL
|
||
after RESIGNAL
|
||
Warnings:
|
||
Error 1329 No data - zero rows fetched, selected, or processed
|
||
Warning 5555 RESIGNAL to a warning
|
||
drop procedure test_resignal $$
|
||
create procedure test_resignal()
|
||
begin
|
||
DECLARE x integer;
|
||
DECLARE c cursor for select * from t_cursor;
|
||
DECLARE CONTINUE HANDLER for not found
|
||
begin
|
||
select "before RESIGNAL";
|
||
RESIGNAL SQLSTATE "02444" SET
|
||
MESSAGE_TEXT = "RESIGNAL to a not found",
|
||
MYSQL_ERRNO = 5555 ;
|
||
select "after RESIGNAL";
|
||
end;
|
||
open c;
|
||
fetch c into x;
|
||
close c;
|
||
end $$
|
||
call test_resignal() $$
|
||
before RESIGNAL
|
||
before RESIGNAL
|
||
ERROR 02444: RESIGNAL to a not found
|
||
show warnings $$
|
||
Level Code Message
|
||
Error 1329 No data - zero rows fetched, selected, or processed
|
||
Error 5555 RESIGNAL to a not found
|
||
drop procedure test_resignal $$
|
||
create procedure test_resignal()
|
||
begin
|
||
DECLARE x integer;
|
||
DECLARE c cursor for select * from t_cursor;
|
||
DECLARE CONTINUE HANDLER for not found
|
||
begin
|
||
select "before RESIGNAL";
|
||
RESIGNAL SQLSTATE "44444" SET
|
||
MESSAGE_TEXT = "RESIGNAL to an error",
|
||
MYSQL_ERRNO = 5555 ;
|
||
select "after RESIGNAL";
|
||
end;
|
||
open c;
|
||
fetch c into x;
|
||
close c;
|
||
end $$
|
||
call test_resignal() $$
|
||
before RESIGNAL
|
||
before RESIGNAL
|
||
ERROR 44444: RESIGNAL to an error
|
||
show warnings $$
|
||
Level Code Message
|
||
Error 1329 No data - zero rows fetched, selected, or processed
|
||
Error 5555 RESIGNAL to an error
|
||
drop procedure test_resignal $$
|
||
create procedure test_resignal()
|
||
begin
|
||
DECLARE CONTINUE HANDLER for sqlexception
|
||
begin
|
||
select "before RESIGNAL";
|
||
RESIGNAL SQLSTATE "01111" SET
|
||
MESSAGE_TEXT = "RESIGNAL to a warning",
|
||
MYSQL_ERRNO = 5555 ;
|
||
select "after RESIGNAL";
|
||
end;
|
||
drop table no_such_table;
|
||
end $$
|
||
call test_resignal() $$
|
||
before RESIGNAL
|
||
before RESIGNAL
|
||
after RESIGNAL
|
||
after RESIGNAL
|
||
Warnings:
|
||
Error 1051 Unknown table 'no_such_table'
|
||
Warning 5555 RESIGNAL to a warning
|
||
drop procedure test_resignal $$
|
||
create procedure test_resignal()
|
||
begin
|
||
DECLARE CONTINUE HANDLER for sqlexception
|
||
begin
|
||
select "before RESIGNAL";
|
||
RESIGNAL SQLSTATE "02444" SET
|
||
MESSAGE_TEXT = "RESIGNAL to a not found",
|
||
MYSQL_ERRNO = 5555 ;
|
||
select "after RESIGNAL";
|
||
end;
|
||
drop table no_such_table;
|
||
end $$
|
||
call test_resignal() $$
|
||
before RESIGNAL
|
||
before RESIGNAL
|
||
ERROR 02444: RESIGNAL to a not found
|
||
show warnings $$
|
||
Level Code Message
|
||
Error 1051 Unknown table 'no_such_table'
|
||
Error 5555 RESIGNAL to a not found
|
||
drop procedure test_resignal $$
|
||
create procedure test_resignal()
|
||
begin
|
||
DECLARE CONTINUE HANDLER for sqlexception
|
||
begin
|
||
select "before RESIGNAL";
|
||
RESIGNAL SQLSTATE "44444" SET
|
||
MESSAGE_TEXT = "RESIGNAL to an error",
|
||
MYSQL_ERRNO = 5555 ;
|
||
select "after RESIGNAL";
|
||
end;
|
||
drop table no_such_table;
|
||
end $$
|
||
call test_resignal() $$
|
||
before RESIGNAL
|
||
before RESIGNAL
|
||
ERROR 44444: RESIGNAL to an error
|
||
show warnings $$
|
||
Level Code Message
|
||
Error 1051 Unknown table 'no_such_table'
|
||
Error 5555 RESIGNAL to an error
|
||
drop procedure test_resignal $$
|
||
#
|
||
# More complex cases
|
||
#
|
||
drop procedure if exists peter_p1 $$
|
||
drop procedure if exists peter_p2 $$
|
||
CREATE PROCEDURE peter_p1 ()
|
||
BEGIN
|
||
DECLARE x CONDITION FOR 1231;
|
||
DECLARE EXIT HANDLER FOR x
|
||
BEGIN
|
||
SELECT '2';
|
||
RESIGNAL SET MYSQL_ERRNO = 9999;
|
||
END;
|
||
BEGIN
|
||
DECLARE EXIT HANDLER FOR x
|
||
BEGIN
|
||
SELECT '1';
|
||
RESIGNAL SET SCHEMA_NAME = 'test';
|
||
END;
|
||
SET @@sql_mode=NULL;
|
||
END;
|
||
END
|
||
$$
|
||
CREATE PROCEDURE peter_p2 ()
|
||
BEGIN
|
||
DECLARE x CONDITION for 9999;
|
||
DECLARE EXIT HANDLER FOR x
|
||
BEGIN
|
||
SELECT '3';
|
||
RESIGNAL SET MESSAGE_TEXT = 'Hi, I am a useless error message';
|
||
END;
|
||
CALL peter_p1();
|
||
END
|
||
$$
|
||
CALL peter_p2() $$
|
||
1
|
||
1
|
||
2
|
||
2
|
||
3
|
||
3
|
||
ERROR 42000: Hi, I am a useless error message
|
||
show warnings $$
|
||
Level Code Message
|
||
Error 1231 Variable 'sql_mode' can't be set to the value of 'NULL'
|
||
Error 1231 Variable 'sql_mode' can't be set to the value of 'NULL'
|
||
Error 9999 Variable 'sql_mode' can't be set to the value of 'NULL'
|
||
Error 9999 Hi, I am a useless error message
|
||
drop procedure peter_p1 $$
|
||
drop procedure peter_p2 $$
|
||
CREATE PROCEDURE peter_p1 ()
|
||
BEGIN
|
||
DECLARE x CONDITION FOR SQLSTATE '42000';
|
||
DECLARE EXIT HANDLER FOR x
|
||
BEGIN
|
||
SELECT '2';
|
||
SHOW WARNINGS;
|
||
RESIGNAL x SET MYSQL_ERRNO = 9999;
|
||
END;
|
||
BEGIN
|
||
DECLARE EXIT HANDLER FOR x
|
||
BEGIN
|
||
SELECT '1';
|
||
SHOW WARNINGS;
|
||
RESIGNAL x SET
|
||
SCHEMA_NAME = 'test',
|
||
MYSQL_ERRNO= 1232;
|
||
END;
|
||
/* Raises ER_WRONG_VALUE_FOR_VAR : 1231, SQLSTATE 42000 */
|
||
SET @@sql_mode=NULL;
|
||
END;
|
||
END
|
||
$$
|
||
CREATE PROCEDURE peter_p2 ()
|
||
BEGIN
|
||
DECLARE x CONDITION for SQLSTATE '42000';
|
||
DECLARE EXIT HANDLER FOR x
|
||
BEGIN
|
||
SELECT '3';
|
||
SHOW WARNINGS;
|
||
RESIGNAL x SET
|
||
MESSAGE_TEXT = 'Hi, I am a useless error message',
|
||
MYSQL_ERRNO = 9999;
|
||
END;
|
||
CALL peter_p1();
|
||
END
|
||
$$
|
||
CALL peter_p2() $$
|
||
1
|
||
1
|
||
Level Code Message
|
||
Error 1231 Variable 'sql_mode' can't be set to the value of 'NULL'
|
||
2
|
||
2
|
||
Level Code Message
|
||
Error 1231 Variable 'sql_mode' can't be set to the value of 'NULL'
|
||
Error 1232 Variable 'sql_mode' can't be set to the value of 'NULL'
|
||
3
|
||
3
|
||
Level Code Message
|
||
Error 1231 Variable 'sql_mode' can't be set to the value of 'NULL'
|
||
Error 1232 Variable 'sql_mode' can't be set to the value of 'NULL'
|
||
Error 9999 Variable 'sql_mode' can't be set to the value of 'NULL'
|
||
ERROR 42000: Hi, I am a useless error message
|
||
show warnings $$
|
||
Level Code Message
|
||
Error 1231 Variable 'sql_mode' can't be set to the value of 'NULL'
|
||
Error 1232 Variable 'sql_mode' can't be set to the value of 'NULL'
|
||
Error 9999 Variable 'sql_mode' can't be set to the value of 'NULL'
|
||
Error 9999 Hi, I am a useless error message
|
||
drop procedure peter_p1 $$
|
||
drop procedure peter_p2 $$
|
||
drop procedure if exists peter_p3 $$
|
||
Warnings:
|
||
Note 1305 PROCEDURE test.peter_p3 does not exist
|
||
create procedure peter_p3()
|
||
begin
|
||
declare continue handler for sqlexception
|
||
resignal sqlstate '99002' set mysql_errno = 2;
|
||
signal sqlstate '99001' set mysql_errno = 1, message_text = "Original";
|
||
end $$
|
||
call peter_p3() $$
|
||
ERROR 99002: Original
|
||
show warnings $$
|
||
Level Code Message
|
||
Error 1 Original
|
||
Error 2 Original
|
||
drop procedure peter_p3 $$
|
||
drop table t_warn;
|
||
drop table t_cursor;
|
||
#
|
||
# Miscelaneous test cases
|
||
#
|
||
create procedure test_signal()
|
||
begin
|
||
DECLARE foo CONDITION FOR SQLSTATE '12345';
|
||
SIGNAL foo SET MYSQL_ERRNO = 0x12; /* 18 */
|
||
end $$
|
||
call test_signal $$
|
||
ERROR 12345: Unhandled user-defined exception condition
|
||
drop procedure test_signal $$
|
||
create procedure test_signal()
|
||
begin
|
||
DECLARE foo CONDITION FOR SQLSTATE '12345';
|
||
SIGNAL foo SET MYSQL_ERRNO = 0b00010010; /* 18 */
|
||
end $$
|
||
call test_signal $$
|
||
ERROR 12345: Unhandled user-defined exception condition
|
||
drop procedure test_signal $$
|
||
create procedure test_signal()
|
||
begin
|
||
DECLARE foo CONDITION FOR SQLSTATE '12345';
|
||
SIGNAL foo SET MYSQL_ERRNO = '65'; /* 65 */
|
||
end $$
|
||
call test_signal $$
|
||
ERROR 12345: Unhandled user-defined exception condition
|
||
drop procedure test_signal $$
|
||
create procedure test_signal()
|
||
begin
|
||
DECLARE foo CONDITION FOR SQLSTATE '12345';
|
||
SIGNAL foo SET MYSQL_ERRNO = 'A'; /* illegal */
|
||
end $$
|
||
call test_signal $$
|
||
ERROR 42000: Variable 'MYSQL_ERRNO' can't be set to the value of 'A'
|
||
drop procedure test_signal $$
|
||
create procedure test_signal()
|
||
begin
|
||
DECLARE foo CONDITION FOR SQLSTATE '12345';
|
||
SIGNAL foo SET MYSQL_ERRNO = "65"; /* 65 */
|
||
end $$
|
||
call test_signal $$
|
||
ERROR 12345: Unhandled user-defined exception condition
|
||
drop procedure test_signal $$
|
||
create procedure test_signal()
|
||
begin
|
||
DECLARE foo CONDITION FOR SQLSTATE '12345';
|
||
SIGNAL foo SET MYSQL_ERRNO = "A"; /* illegal */
|
||
end $$
|
||
call test_signal $$
|
||
ERROR 42000: Variable 'MYSQL_ERRNO' can't be set to the value of 'A'
|
||
drop procedure test_signal $$
|
||
create procedure test_signal()
|
||
begin
|
||
DECLARE foo CONDITION FOR SQLSTATE '12345';
|
||
SIGNAL foo SET MYSQL_ERRNO = `65`; /* illegal */
|
||
end $$
|
||
call test_signal $$
|
||
ERROR 42S22: Unknown column '65' in 'field list'
|
||
drop procedure test_signal $$
|
||
create procedure test_signal()
|
||
begin
|
||
DECLARE foo CONDITION FOR SQLSTATE '12345';
|
||
SIGNAL foo SET MYSQL_ERRNO = `A`; /* illegal */
|
||
end $$
|
||
call test_signal $$
|
||
ERROR 42S22: Unknown column 'A' in 'field list'
|
||
drop procedure test_signal $$
|
||
create procedure test_signal()
|
||
begin
|
||
DECLARE foo CONDITION FOR SQLSTATE '12345';
|
||
SIGNAL foo SET MYSQL_ERRNO = 3.141592; /* 3 */
|
||
end $$
|
||
call test_signal $$
|
||
ERROR 12345: Unhandled user-defined exception condition
|
||
drop procedure test_signal $$
|
||
create procedure test_signal()
|
||
begin
|
||
DECLARE foo CONDITION FOR SQLSTATE '12345';
|
||
SIGNAL foo SET MYSQL_ERRNO = 1000,
|
||
MESSAGE_TEXT= 0x41; /* A */
|
||
end $$
|
||
call test_signal $$
|
||
ERROR 12345: A
|
||
drop procedure test_signal $$
|
||
create procedure test_signal()
|
||
begin
|
||
DECLARE foo CONDITION FOR SQLSTATE '12345';
|
||
SIGNAL foo SET MYSQL_ERRNO = 1000,
|
||
MESSAGE_TEXT= 0b01000001; /* A */
|
||
end $$
|
||
call test_signal $$
|
||
ERROR 12345: A
|
||
drop procedure test_signal $$
|
||
create procedure test_signal()
|
||
begin
|
||
DECLARE foo CONDITION FOR SQLSTATE '12345';
|
||
SIGNAL foo SET MYSQL_ERRNO = 1000,
|
||
MESSAGE_TEXT = "Hello";
|
||
end $$
|
||
call test_signal $$
|
||
ERROR 12345: Hello
|
||
drop procedure test_signal $$
|
||
create procedure test_signal()
|
||
begin
|
||
DECLARE foo CONDITION FOR SQLSTATE '12345';
|
||
SIGNAL foo SET MYSQL_ERRNO = 1000,
|
||
MESSAGE_TEXT = 'Hello';
|
||
end $$
|
||
call test_signal $$
|
||
ERROR 12345: Hello
|
||
drop procedure test_signal $$
|
||
create procedure test_signal()
|
||
begin
|
||
DECLARE foo CONDITION FOR SQLSTATE '12345';
|
||
SIGNAL foo SET MYSQL_ERRNO = 1000,
|
||
MESSAGE_TEXT = `Hello`;
|
||
end $$
|
||
call test_signal $$
|
||
ERROR 42S22: Unknown column 'Hello' in 'field list'
|
||
drop procedure test_signal $$
|
||
create procedure test_signal()
|
||
begin
|
||
DECLARE foo CONDITION FOR SQLSTATE '12345';
|
||
SIGNAL foo SET MYSQL_ERRNO = 1000,
|
||
MESSAGE_TEXT = 65.4321;
|
||
end $$
|
||
call test_signal $$
|
||
ERROR 12345: 65.4321
|
||
drop procedure test_signal $$
|
||
create procedure test_signal()
|
||
begin
|
||
DECLARE céèçà foo CONDITION FOR SQLSTATE '12345';
|
||
SIGNAL céèçà SET MYSQL_ERRNO = 1000;
|
||
end $$
|
||
ERROR 42000: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '<27>èçà foo CONDITION FOR SQLSTATE '12345';
|
||
SIGNAL céèçà SET ' at line 3
|
||
create procedure test_signal()
|
||
begin
|
||
DECLARE "céèçà" CONDITION FOR SQLSTATE '12345';
|
||
SIGNAL "céèçà" SET MYSQL_ERRNO = 1000;
|
||
end $$
|
||
ERROR 42000: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '"céèçà" CONDITION FOR SQLSTATE '12345';
|
||
SIGNAL "céèçà" S' at line 3
|
||
create procedure test_signal()
|
||
begin
|
||
DECLARE 'céèçà' CONDITION FOR SQLSTATE '12345';
|
||
SIGNAL 'céèçà' SET MYSQL_ERRNO = 1000;
|
||
end $$
|
||
ERROR 42000: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ''céèçà' CONDITION FOR SQLSTATE '12345';
|
||
SIGNAL 'céèçà' S' at line 3
|
||
create procedure test_signal()
|
||
begin
|
||
DECLARE `céèçà` CONDITION FOR SQLSTATE '12345';
|
||
SIGNAL `céèçà` SET MYSQL_ERRNO = 1000;
|
||
end $$
|
||
call test_signal $$
|
||
ERROR 12345: Unhandled user-defined exception condition
|
||
drop procedure test_signal $$
|
||
create procedure test_signal()
|
||
begin
|
||
SIGNAL SQLSTATE '77777' SET MYSQL_ERRNO = 1000, MESSAGE_TEXT='ÁÂÃÅÄ';
|
||
end $$
|
||
drop procedure test_signal $$
|