# # WL#2111: GET DIAGNOSTICS tests # # # In MariaDB GET is not reserved # CREATE TABLE t1 (get INT); DROP TABLE t1; CREATE PROCEDURE p1() BEGIN DECLARE get INT DEFAULT 1; END| DROP PROCEDURE p1; CREATE PROCEDURE p1() get: BEGIN SELECT 1; END get| ERROR 42000: You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near ': BEGIN SELECT 1; END get' at line 2 # # Test non-reserved keywords: CURRENT, DIAGNOSTICS, NUMBER, RETURNED_SQLSTATE # CREATE TABLE t1 (current INT, diagnostics INT, number INT, returned_sqlstate INT); INSERT INTO t1 (current, diagnostics, number, returned_sqlstate) values (1,2,3,4); SELECT current, diagnostics, number, returned_sqlstate FROM t1 WHERE number = 3; current diagnostics number returned_sqlstate 1 2 3 4 SELECT `current`, `number` FROM t1 WHERE `current` = 1 AND `number` = 3; current number 1 3 DROP TABLE t1; CREATE PROCEDURE p1() BEGIN DECLARE current INT DEFAULT 1; DECLARE diagnostics INT DEFAULT 2; DECLARE number INT DEFAULT 3; DECLARE returned_sqlstate INT DEFAULT 4; SELECT current, diagnostics, number, returned_sqlstate; END| CALL p1(); current diagnostics number returned_sqlstate 1 2 3 4 DROP PROCEDURE p1; # # Test GET DIAGNOSTICS syntax # DROP PROCEDURE IF EXISTS p1; GET; ERROR 42000: You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near '' at line 1 GET CURRENT; ERROR 42000: You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near '' at line 1 GET DIAGNOSTICS; ERROR 42000: You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near '' at line 1 GET CURRENT DIAGNOSTICS; ERROR 42000: You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near '' at line 1 # Statement information syntax GET DIAGNOSTICS @var; ERROR 42000: You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near '' at line 1 GET DIAGNOSTICS var; ERROR 42000: Undeclared variable: var CREATE PROCEDURE p1() BEGIN GET DIAGNOSTICS var; END| ERROR 42000: Undeclared variable: var CREATE PROCEDURE p1() BEGIN DECLARE var INT; GET DIAGNOSTICS var; END| ERROR 42000: You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near '; END' at line 4 GET DIAGNOSTICS @var =; ERROR 42000: You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near '' at line 1 GET DIAGNOSTICS @var = INVALID; ERROR 42000: You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near 'INVALID' at line 1 GET DIAGNOSTICS @var = MORE; ERROR 42000: You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near 'MORE' at line 1 GET DIAGNOSTICS @var = CLASS_ORIGIN; ERROR 42000: You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near 'CLASS_ORIGIN' at line 1 GET DIAGNOSTICS @var = INVALID,; ERROR 42000: You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near 'INVALID,' at line 1 GET DIAGNOSTICS @var1 = NUMBER, @var2; ERROR 42000: You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near '' at line 1 GET DIAGNOSTICS @var1 = NUMBER, @var2 = INVALID; ERROR 42000: You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near 'INVALID' at line 1 GET DIAGNOSTICS @@var1 = NUMBER; ERROR 42000: You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near '@var1 = NUMBER' at line 1 GET DIAGNOSTICS @var1 = NUMBER, @@var2 = NUMBER; ERROR 42000: You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near '@var2 = NUMBER' at line 1 CREATE PROCEDURE p1() BEGIN DECLARE var INT; GET DIAGNOSTICS var = INVALID; END| ERROR 42000: You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near 'INVALID; END' at line 4 CREATE PROCEDURE p1() BEGIN DECLARE var CONDITION FOR SQLSTATE '12345'; GET DIAGNOSTICS var = NUMBER; END| ERROR 42000: Undeclared variable: var CREATE PROCEDURE p1() BEGIN DECLARE var INT; GET DIAGNOSTICS var = NUMBER, var1 = ROW_COUNT; END| ERROR 42000: Undeclared variable: var1 GET DIAGNOSTICS @var = NUMBER; GET DIAGNOSTICS @var = ROW_COUNT; GET DIAGNOSTICS @var1 = NUMBER, @var2 = ROW_COUNT; GET DIAGNOSTICS @var1 = ROW_COUNT, @var2 = NUMBER; CREATE PROCEDURE p1() BEGIN DECLARE var INT; DECLARE var1 INT; DECLARE var2 INT; GET DIAGNOSTICS var = NUMBER; GET DIAGNOSTICS var = ROW_COUNT; GET DIAGNOSTICS var1 = NUMBER, var2 = ROW_COUNT; GET DIAGNOSTICS var1 = ROW_COUNT, var2 = NUMBER; END| DROP PROCEDURE p1; # Condition information syntax GET DIAGNOSTICS CONDITION; ERROR 42000: You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near '' at line 1 GET DIAGNOSTICS CONDITION a; ERROR 42S22: Unknown column 'a' in 'field list' GET DIAGNOSTICS CONDITION 1; ERROR 42000: You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near '' at line 1 GET DIAGNOSTICS CONDITION 1 @var; ERROR 42000: You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near '' at line 1 GET DIAGNOSTICS CONDITION 1 var; ERROR 42000: Undeclared variable: var CREATE PROCEDURE p1() BEGIN GET DIAGNOSTICS CONDITION 1 var; END| ERROR 42000: Undeclared variable: var CREATE PROCEDURE p1() BEGIN DECLARE var INT; GET DIAGNOSTICS CONDITION 1 var; END| ERROR 42000: You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near '; END' at line 4 GET DIAGNOSTICS CONDITION 1 @var =; ERROR 42000: You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near '' at line 1 GET DIAGNOSTICS CONDITION 1 @var = INVALID; ERROR 42000: You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near 'INVALID' at line 1 GET DIAGNOSTICS CONDITION 1 @var = NUMBER; ERROR 42000: You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near 'NUMBER' at line 1 GET DIAGNOSTICS CONDITION 1 @var = INVALID,; ERROR 42000: You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near 'INVALID,' at line 1 GET DIAGNOSTICS CONDITION 1 @var1 = CLASS_ORIGIN, @var2; ERROR 42000: You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near '' at line 1 GET DIAGNOSTICS CONDITION 1 @var1 = CLASS_ORIGIN, @var2 = INVALID; ERROR 42000: You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near 'INVALID' at line 1 GET DIAGNOSTICS CONDITION 1 @@var1 = CLASS_ORIGIN; ERROR 42000: You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near '@var1 = CLASS_ORIGIN' at line 1 GET DIAGNOSTICS CONDITION 1 @var1 = CLASS_ORIGIN, @@var2 = CLASS_ORIGIN; ERROR 42000: You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near '@var2 = CLASS_ORIGIN' at line 1 CREATE PROCEDURE p1() BEGIN DECLARE var INT; GET DIAGNOSTICS CONDITION 1 var = INVALID; END| ERROR 42000: You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near 'INVALID; END' at line 4 CREATE PROCEDURE p1() BEGIN DECLARE var CONDITION FOR SQLSTATE '12345'; GET DIAGNOSTICS CONDITION 1 var = NUMBER; END| ERROR 42000: Undeclared variable: var CREATE PROCEDURE p1() BEGIN DECLARE var INT; GET DIAGNOSTICS CONDITION 1 var = CLASS_ORIGIN, var1 = SUBCLASS_ORIGIN; END| ERROR 42000: Undeclared variable: var1 GET DIAGNOSTICS CONDITION 1 @var = CLASS_ORIGIN; GET DIAGNOSTICS CONDITION 1 @var = SUBCLASS_ORIGIN; GET DIAGNOSTICS CONDITION 1 @var1 = CLASS_ORIGIN, @var2 = SUBCLASS_ORIGIN; GET DIAGNOSTICS CONDITION 1 @var1 = SUBCLASS_ORIGIN, @var2 = CLASS_ORIGIN; CREATE PROCEDURE p1() BEGIN DECLARE var INT; DECLARE var1 INT; DECLARE var2 INT; GET DIAGNOSTICS CONDITION 1 var = CLASS_ORIGIN; GET DIAGNOSTICS CONDITION 1 var = SUBCLASS_ORIGIN; GET DIAGNOSTICS CONDITION 1 var1 = CLASS_ORIGIN, var2 = SUBCLASS_ORIGIN; GET DIAGNOSTICS CONDITION 1 var1 = SUBCLASS_ORIGIN, var2 = CLASS_ORIGIN; END| DROP PROCEDURE p1; # Condition number expression GET DIAGNOSTICS CONDITION -1 @var = CLASS_ORIGIN; ERROR 42000: You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near '-1 @var = CLASS_ORIGIN' at line 1 GET DIAGNOSTICS CONDITION 1+1 @var = CLASS_ORIGIN; ERROR 42000: You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near '+1 @var = CLASS_ORIGIN' at line 1 GET DIAGNOSTICS CONDITION ? @var = CLASS_ORIGIN; ERROR 42000: You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near '? @var = CLASS_ORIGIN' at line 1 GET DIAGNOSTICS CONDITION (1) @var = CLASS_ORIGIN; ERROR 42000: You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near '(1) @var = CLASS_ORIGIN' at line 1 GET DIAGNOSTICS CONDITION p1() @var = CLASS_ORIGIN; ERROR 42S22: Unknown column 'p1' in 'field list' GET DIAGNOSTICS CONDITION ABS(2) @var = CLASS_ORIGIN; ERROR 42S22: Unknown column 'ABS' in 'field list' GET DIAGNOSTICS CONDITION 1.1 @var = CLASS_ORIGIN; GET DIAGNOSTICS CONDITION "1" @var = CLASS_ORIGIN; SELECT COUNT(max_questions) INTO @var FROM mysql.user; GET DIAGNOSTICS CONDITION 9999 @var = CLASS_ORIGIN; Warnings: Error 1758 Invalid condition number GET DIAGNOSTICS CONDITION NULL @var = CLASS_ORIGIN; Warnings: Error 1758 Invalid condition number Error 1758 Invalid condition number GET DIAGNOSTICS CONDITION a @var = CLASS_ORIGIN; ERROR 42S22: Unknown column 'a' in 'field list' SELECT COUNT(max_questions) INTO @var FROM mysql.user; SET @cond = 1; GET DIAGNOSTICS CONDITION @cond @var1 = CLASS_ORIGIN; Warnings: Error 1758 Invalid condition number SET @cond = "invalid"; GET DIAGNOSTICS CONDITION @cond @var1 = CLASS_ORIGIN; Warnings: Error 1758 Invalid condition number Error 1758 Invalid condition number SELECT COUNT(max_questions) INTO @var FROM mysql.user; CREATE PROCEDURE p1() BEGIN DECLARE cond INT DEFAULT 1; DECLARE var INT; GET DIAGNOSTICS CONDITION cond var = CLASS_ORIGIN; END| DROP PROCEDURE p1; CREATE PROCEDURE p1() BEGIN DECLARE cond TEXT; DECLARE var INT; GET DIAGNOSTICS CONDITION cond var = CLASS_ORIGIN; END| CALL p1(); DROP PROCEDURE p1; # # Test GET DIAGNOSTICS runtime # # GET DIAGNOSTICS cannot be the object of a PREPARE statement. PREPARE stmt FROM "GET DIAGNOSTICS CONDITION 1 @var = CLASS_ORIGIN"; ERROR HY000: This command is not supported in the prepared statement protocol yet PREPARE stmt FROM "GET DIAGNOSTICS @var = NUMBER"; ERROR HY000: This command is not supported in the prepared statement protocol yet # GET DIAGNOSTICS does not clear the diagnostics area. SELECT CAST(-19999999999999999999 AS SIGNED); CAST(-19999999999999999999 AS SIGNED) -9223372036854775808 Warnings: Warning 1916 Got overflow when converting '-19999999999999999999' to INT. Value truncated GET DIAGNOSTICS @var = NUMBER; SHOW WARNINGS; Level Code Message Warning 1916 Got overflow when converting '-19999999999999999999' to INT. Value truncated # # If GET DIAGNOSTICS itself causes an error, an error message is appended. # SELECT CAST(-19999999999999999999 AS SIGNED); CAST(-19999999999999999999 AS SIGNED) -9223372036854775808 Warnings: Warning 1916 Got overflow when converting '-19999999999999999999' to INT. Value truncated GET DIAGNOSTICS CONDITION 99999 @var = CLASS_ORIGIN; Warnings: Warning 1916 Got overflow when converting '-19999999999999999999' to INT. Value truncated Error 1758 Invalid condition number SHOW WARNINGS; Level Code Message Warning 1916 Got overflow when converting '-19999999999999999999' to INT. Value truncated Error 1758 Invalid condition number # Statement information runtime SELECT CAST(-19999999999999999999 AS SIGNED), CAST(-19999999999999999999 AS SIGNED); CAST(-19999999999999999999 AS SIGNED) CAST(-19999999999999999999 AS SIGNED) -9223372036854775808 -9223372036854775808 Warnings: Warning 1916 Got overflow when converting '-19999999999999999999' to INT. Value truncated Warning 1916 Got overflow when converting '-19999999999999999999' to INT. Value truncated GET DIAGNOSTICS @var = NUMBER; SELECT @var; @var 2 SELECT COUNT(max_questions) INTO @var FROM mysql.user; GET DIAGNOSTICS @var = NUMBER; SELECT @var; @var 0 SELECT 1; 1 1 GET DIAGNOSTICS @var = ROW_COUNT; SELECT @var; @var -1 CREATE TABLE t1 (a INT); INSERT INTO t1 VALUES (1),(2),(3); GET DIAGNOSTICS @var = ROW_COUNT; SELECT @var; @var 3 DROP TABLE t1; CREATE PROCEDURE p1() BEGIN DECLARE number INT; DECLARE row_count INT; SELECT CAST(-19999999999999999999 AS SIGNED), CAST(-19999999999999999999 AS SIGNED); GET DIAGNOSTICS number = NUMBER; CREATE TABLE t1 (a INT); INSERT INTO t1 VALUES (1),(2),(3); GET DIAGNOSTICS row_count = ROW_COUNT; DROP TABLE t1; SELECT number, row_count; END| CALL p1(); CAST(-19999999999999999999 AS SIGNED) CAST(-19999999999999999999 AS SIGNED) -9223372036854775808 -9223372036854775808 number row_count 2 3 DROP PROCEDURE p1; # Condition information runtime SELECT CAST(-19999999999999999999 AS SIGNED); CAST(-19999999999999999999 AS SIGNED) -9223372036854775808 Warnings: Warning 1916 Got overflow when converting '-19999999999999999999' to INT. Value truncated GET DIAGNOSTICS CONDITION 1 @class_origin = CLASS_ORIGIN, @subclass_origin = SUBCLASS_ORIGIN, @constraint_catalog = CONSTRAINT_CATALOG, @constraint_schema = CONSTRAINT_SCHEMA, @constraint_name = CONSTRAINT_NAME, @catalog_name = CATALOG_NAME, @schema_name = SCHEMA_NAME, @table_name = TABLE_NAME, @column_name = COLUMN_NAME, @cursor_name = CURSOR_NAME, @message_text = MESSAGE_TEXT, @mysql_errno = MYSQL_ERRNO, @returned_sqlstate = RETURNED_SQLSTATE; SELECT @class_origin, @subclass_origin, @constraint_catalog, @constraint_schema, @constraint_name, @catalog_name, @schema_name, @table_name, @column_name, @cursor_name, @message_text, @mysql_errno, @returned_sqlstate; @class_origin @subclass_origin @constraint_catalog @constraint_schema @constraint_name @catalog_name @schema_name @table_name @column_name @cursor_name @message_text Got overflow when converting '-19999999999999999999' to INT. Value truncated @mysql_errno 1916 @returned_sqlstate 22003 CREATE PROCEDURE p1() BEGIN DECLARE class_origin TEXT DEFAULT "a"; DECLARE subclass_origin TEXT DEFAULT "a"; DECLARE constraint_catalog TEXT DEFAULT "a"; DECLARE constraint_schema TEXT DEFAULT "a"; DECLARE constraint_name TEXT DEFAULT "a"; DECLARE catalog_name TEXT DEFAULT "a"; DECLARE schema_name TEXT DEFAULT "a"; DECLARE table_name TEXT DEFAULT "a"; DECLARE column_name TEXT DEFAULT "a"; DECLARE cursor_name TEXT DEFAULT "a"; DECLARE message_text TEXT DEFAULT "a"; DECLARE mysql_errno INT DEFAULT 1; DECLARE returned_sqlstate TEXT DEFAULT "a"; SELECT CAST(-19999999999999999999 AS SIGNED); GET DIAGNOSTICS CONDITION 1 class_origin = CLASS_ORIGIN, subclass_origin = SUBCLASS_ORIGIN, constraint_catalog = CONSTRAINT_CATALOG, constraint_schema = CONSTRAINT_SCHEMA, constraint_name = CONSTRAINT_NAME, catalog_name = CATALOG_NAME, schema_name = SCHEMA_NAME, table_name = TABLE_NAME, column_name = COLUMN_NAME, cursor_name = CURSOR_NAME, message_text = MESSAGE_TEXT, mysql_errno = MYSQL_ERRNO, returned_sqlstate = RETURNED_SQLSTATE; SELECT class_origin, subclass_origin, constraint_catalog, constraint_schema, constraint_name, catalog_name, schema_name, table_name, column_name, cursor_name, message_text, mysql_errno, returned_sqlstate; END| CALL p1(); CAST(-19999999999999999999 AS SIGNED) -9223372036854775808 class_origin subclass_origin constraint_catalog constraint_schema constraint_name catalog_name schema_name table_name column_name cursor_name message_text Got overflow when converting '-19999999999999999999' to INT. Value truncated mysql_errno 1916 returned_sqlstate 22003 Warnings: Level Warning Code 1916 Message Got overflow when converting '-19999999999999999999' to INT. Value truncated DROP PROCEDURE p1; CREATE PROCEDURE p1() BEGIN DECLARE errno1 INT; DECLARE errno2 INT; DECLARE msg1 TEXT; DECLARE msg2 TEXT; SELECT CAST(-19999999999999999999 AS SIGNED); GET DIAGNOSTICS CONDITION 99999 msg1 = MESSAGE_TEXT; GET DIAGNOSTICS CONDITION 1 errno1 = MYSQL_ERRNO, msg1 = MESSAGE_TEXT; GET DIAGNOSTICS CONDITION 2 errno2 = MYSQL_ERRNO, msg2 = MESSAGE_TEXT; SELECT errno1, msg1, errno2, msg2; END| CALL p1(); CAST(-19999999999999999999 AS SIGNED) -9223372036854775808 errno1 1916 msg1 Got overflow when converting '-19999999999999999999' to INT. Value truncated errno2 1758 msg2 Invalid condition number Warnings: Level Warning Code 1916 Message Got overflow when converting '-19999999999999999999' to INT. Value truncated Level Error Code 1758 Message Invalid condition number DROP PROCEDURE p1; # Interaction with SIGNAL CREATE PROCEDURE p1() BEGIN DECLARE errno INT DEFAULT 0; DECLARE msg TEXT DEFAULT "foo"; DECLARE cond CONDITION FOR SQLSTATE "01234"; DECLARE CONTINUE HANDLER for 1012 BEGIN GET DIAGNOSTICS CONDITION 1 errno = MYSQL_ERRNO, msg = MESSAGE_TEXT; END; SIGNAL cond SET MESSAGE_TEXT = "Signal message", MYSQL_ERRNO = 1012; SELECT errno, msg; END| CALL p1(); errno 1012 msg Signal message DROP PROCEDURE p1; CREATE PROCEDURE p1() BEGIN SIGNAL SQLSTATE '77777' SET MYSQL_ERRNO = 1000, MESSAGE_TEXT='ÁÂÃÅÄ'; END| CALL p1(); ERROR 77777: ÁÂÃÅÄ GET DIAGNOSTICS CONDITION 1 @mysql_errno = MYSQL_ERRNO, @message_text = MESSAGE_TEXT, @returned_sqlstate = RETURNED_SQLSTATE, @class_origin = CLASS_ORIGIN; SELECT @mysql_errno, @message_text, @returned_sqlstate, @class_origin; @mysql_errno 1000 @message_text ÁÂÃÅÄ @returned_sqlstate 77777 @class_origin DROP PROCEDURE p1; CREATE PROCEDURE p1() BEGIN DECLARE cond CONDITION FOR SQLSTATE '12345'; SIGNAL cond SET CLASS_ORIGIN = 'CLASS_ORIGIN text', SUBCLASS_ORIGIN = 'SUBCLASS_ORIGIN text', CONSTRAINT_CATALOG = 'CONSTRAINT_CATALOG text', CONSTRAINT_SCHEMA = 'CONSTRAINT_SCHEMA text', CONSTRAINT_NAME = 'CONSTRAINT_NAME text', CATALOG_NAME = 'CATALOG_NAME text', SCHEMA_NAME = 'SCHEMA_NAME text', TABLE_NAME = 'TABLE_NAME text', COLUMN_NAME = 'COLUMN_NAME text', CURSOR_NAME = 'CURSOR_NAME text', MESSAGE_TEXT = 'MESSAGE_TEXT text', MYSQL_ERRNO = 54321; END| CALL p1(); ERROR 12345: MESSAGE_TEXT text GET DIAGNOSTICS CONDITION 1 @class_origin = CLASS_ORIGIN, @subclass_origin = SUBCLASS_ORIGIN, @constraint_catalog = CONSTRAINT_CATALOG, @constraint_schema = CONSTRAINT_SCHEMA, @constraint_name = CONSTRAINT_NAME, @catalog_name = CATALOG_NAME, @schema_name = SCHEMA_NAME, @table_name = TABLE_NAME, @column_name = COLUMN_NAME, @cursor_name = CURSOR_NAME, @message_text = MESSAGE_TEXT, @mysql_errno = MYSQL_ERRNO, @returned_sqlstate = RETURNED_SQLSTATE; SELECT @class_origin, @subclass_origin, @constraint_catalog, @constraint_schema, @constraint_name, @catalog_name, @schema_name, @table_name, @column_name, @cursor_name, @message_text, @mysql_errno, @returned_sqlstate; @class_origin CLASS_ORIGIN text @subclass_origin SUBCLASS_ORIGIN text @constraint_catalog CONSTRAINT_CATALOG text @constraint_schema CONSTRAINT_SCHEMA text @constraint_name CONSTRAINT_NAME text @catalog_name CATALOG_NAME text @schema_name SCHEMA_NAME text @table_name TABLE_NAME text @column_name COLUMN_NAME text @cursor_name CURSOR_NAME text @message_text MESSAGE_TEXT text @mysql_errno 54321 @returned_sqlstate 12345 DROP PROCEDURE p1; # # Demonstration # # The same statement information item can be used multiple times. SHOW WARNINGS; Level Code Message Error 54321 MESSAGE_TEXT text Note 4094 At line 16 in test.p1 CREATE PROCEDURE p1() BEGIN DECLARE var INT; GET DIAGNOSTICS var = NUMBER, @var = NUMBER; SELECT var, @var; END| CALL p1(); var @var 2 2 DROP PROCEDURE p1; # Setting TABLE_NAME is currently not implemented. CREATE PROCEDURE p1() BEGIN DECLARE v VARCHAR(64); DECLARE CONTINUE HANDLER FOR SQLEXCEPTION GET DIAGNOSTICS CONDITION 1 v = TABLE_NAME; DROP TABLE no_such_table; SELECT v; END| CALL p1(); v DROP PROCEDURE p1; # Message is truncated to fit into target. No truncation warning. CREATE PROCEDURE p1() BEGIN DECLARE v CHAR(1); CREATE TABLE IF NOT EXISTS t1 (a INT); GET DIAGNOSTICS CONDITION 1 v = MESSAGE_TEXT; SELECT v; END| CREATE TABLE t1 (a INT); CALL p1(); v NULL Warnings: Note 1050 Table 't1' already exists Error 1406 Data too long for column 'v' at row 1 DROP TABLE t1; DROP PROCEDURE p1; # Returns number of rows updated by the UPDATE statements. CREATE PROCEDURE p1(IN param INT) LANGUAGE SQL BEGIN DECLARE v INT DEFAULT 0; DECLARE rcount_each INT; DECLARE rcount_total INT DEFAULT 0; WHILE v < 5 DO UPDATE t1 SET a = a * 1.1 WHERE b = param; GET DIAGNOSTICS rcount_each = ROW_COUNT; SET rcount_total = rcount_total + rcount_each; SET v = v + 1; END WHILE; SELECT rcount_total; END| CREATE TABLE t1 (a REAL, b INT); INSERT INTO t1 VALUES (1.1, 1); CALL p1(1); rcount_total 5 DROP TABLE t1; DROP PROCEDURE p1; # GET DIAGNOSTICS doesn't clear the diagnostics area. CREATE PROCEDURE p1() BEGIN DECLARE CONTINUE HANDLER FOR SQLWARNING BEGIN GET CURRENT DIAGNOSTICS CONDITION 1 @x = RETURNED_SQLSTATE; SIGNAL SQLSTATE '01002'; GET CURRENT DIAGNOSTICS CONDITION 1 @y = RETURNED_SQLSTATE; END; SIGNAL SQLSTATE '01001'; SELECT @x, @y; END| CALL p1(); @x @y 01001 01002 Warnings: Warning 1642 Unhandled user-defined warning condition DROP PROCEDURE p1; # Using OUT and INOUT parameters as the target variables. CREATE PROCEDURE p1(OUT number INT, INOUT message TEXT) BEGIN DECLARE warn CONDITION FOR SQLSTATE "01234"; DECLARE CONTINUE HANDLER FOR SQLWARNING BEGIN GET DIAGNOSTICS number = NUMBER; GET DIAGNOSTICS CONDITION 1 message = MESSAGE_TEXT; END; SELECT message; SIGNAL warn SET MESSAGE_TEXT = "inout parameter"; END| SET @var1 = 0; SET @var2 = "message text"; CALL p1(@var1, @var2); message message text SELECT @var1, @var2; @var1 @var2 1 inout parameter DROP PROCEDURE p1; # Using an IN parameter as the target variable. CREATE PROCEDURE p1(IN number INT) BEGIN SELECT number; GET DIAGNOSTICS number = NUMBER; SELECT number; END| SET @var1 = 9999; CALL p1(@var1); number 9999 number 0 SELECT @var1; @var1 9999 DROP PROCEDURE p1; # Using GET DIAGNOSTICS in a stored function. CREATE FUNCTION f1() RETURNS TEXT BEGIN DECLARE message TEXT; DECLARE warn CONDITION FOR SQLSTATE "01234"; DECLARE CONTINUE HANDLER FOR SQLWARNING BEGIN GET DIAGNOSTICS CONDITION 1 message = MESSAGE_TEXT; END; SIGNAL warn SET MESSAGE_TEXT = "message text"; return message; END| SELECT f1(); f1() message text DROP FUNCTION f1; # Using GET DIAGNOSTICS in a trigger. CREATE TABLE t1 (a INT); CREATE TRIGGER trg1 BEFORE INSERT ON t1 FOR EACH ROW BEGIN DECLARE var INT DEFAULT row_count(); GET DIAGNOSTICS @var1 = ROW_COUNT; SET @var2 = var; END| SET @var1 = 9999, @var2 = 9999; INSERT INTO t1 VALUES (1), (2); SELECT @var1, @var2; @var1 @var2 0 0 DROP TRIGGER trg1; DROP TABLE t1; # GET DIAGNOSTICS does not reset ROW_COUNT CREATE TABLE t1 (a INT); INSERT INTO t1 VALUES (1); GET DIAGNOSTICS @var1 = ROW_COUNT; GET DIAGNOSTICS @var2 = ROW_COUNT; SELECT @var1, @var2; @var1 @var2 1 1 DROP TABLE t1; # Items are UTF8 (utf8_general_ci default collation) SELECT CAST(-19999999999999999999 AS SIGNED); CAST(-19999999999999999999 AS SIGNED) -9223372036854775808 Warnings: Warning 1916 Got overflow when converting '-19999999999999999999' to INT. Value truncated GET DIAGNOSTICS CONDITION 1 @var1 = MESSAGE_TEXT, @var2 = CLASS_ORIGIN; SELECT CHARSET(@var1), COLLATION(@var1), COERCIBILITY(@var1); CHARSET(@var1) COLLATION(@var1) COERCIBILITY(@var1) utf8 utf8_general_ci 2 SELECT CHARSET(@var2), COLLATION(@var2), COERCIBILITY(@var2); CHARSET(@var2) COLLATION(@var2) COERCIBILITY(@var2) utf8 utf8_general_ci 2 # # Command statistics # FLUSH STATUS; SHOW STATUS LIKE 'Com%get_diagnostics'; Variable_name Value Com_get_diagnostics 0 GET DIAGNOSTICS @var1 = NUMBER; SHOW STATUS LIKE 'Com%get_diagnostics'; Variable_name Value Com_get_diagnostics 1