SET NAMES utf8; # # 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 can be the object of a PREPARE statement. PREPARE stmt FROM "GET DIAGNOSTICS CONDITION 1 @var = CLASS_ORIGIN"; PREPARE stmt FROM "GET DIAGNOSTICS @var = NUMBER"; # 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 0 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) utf8mb3 utf8mb3_general_ci 2 SELECT CHARSET(@var2), COLLATION(@var2), COERCIBILITY(@var2); CHARSET(@var2) COLLATION(@var2) COERCIBILITY(@var2) utf8mb3 utf8mb3_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 # # MDEV-26695: Number of an invalid row is not calculated for table value constructor # CREATE TABLE t1 (a CHAR(1)) VALUES ('a'),('b'),('foo'); Warnings: Warning 1406 Data too long for column 'a' at row 3 CREATE TABLE t2 (a char(1)) VALUES ('a'),('b') UNION VALUES ('foo'); Warnings: Warning 1406 Data too long for column 'a' at row 3 DROP TABLE t1, t2; # # End of 10.6 tests # # # MDEV-10075: Provide index of error causing error in array INSERT # # # INSERT STATEMENT # CREATE TABLE t1(id1 INT PRIMARY KEY, val1 VARCHAR(10), d1 DOUBLE); CREATE TABLE t2(id2 INT PRIMARY KEY, val2 VARCHAR(10), d2 DOUBLE, p2 POINT); # Simple INSERT statement INSERT INTO t1 VALUES(1,'a',1.00101), (2,'b',1.00102), (3,'c',1.00103); INSERT INTO t1 VALUES (4,'d',1.00104),(1,'a',1.00101),(2,'b',1.00102); ERROR 23000: Duplicate entry '1' for key 'PRIMARY' GET DIAGNOSTICS CONDITION 1 @var1= ROW_NUMBER; GET DIAGNOSTICS CONDITION 2 @var2= ROW_NUMBER; Warnings: Error 1062 Duplicate entry '1' for key 'PRIMARY' Error 1758 Invalid condition number SELECT @var1, @var2; @var1 @var2 2 INSERT INTO t1 VALUES (5,'e',1.00105),(6,'f',1.79769313486232e+308); ERROR 22007: Illegal double '1.79769313486232e+308' value found during parsing GET DIAGNOSTICS CONDITION 1 @var3= ROW_NUMBER; GET DIAGNOSTICS CONDITION 2 @var4= ROW_NUMBER; Warnings: Error 1367 Illegal double '1.79769313486232e+308' value found during parsing Error 1758 Invalid condition number SELECT @var3, @var4; @var3 @var4 2 NULL INSERT INTO t1 VALUES (7,'g',1.00107),(8,'h',1.00108),(9,'i'),(10,'j'); ERROR 21S01: Column count doesn't match value count at row 3 GET DIAGNOSTICS CONDITION 1 @var5= ROW_NUMBER; GET DIAGNOSTICS CONDITION 2 @var6= ROW_NUMBER; Warnings: Error 1136 Column count doesn't match value count at row 3 Error 1758 Invalid condition number SELECT @var5, @var6; @var5 @var6 3 NULL INSERT INTO t1 VALUES (8,8,8),(9,CAST(123 AS CHAR(1)),1.00109); Warnings: Warning 1292 Truncated incorrect CHAR(1) value: '123' GET DIAGNOSTICS CONDITION 1 @var7= ROW_NUMBER; GET DIAGNOSTICS CONDITION 2 @var8= ROW_NUMBER; Warnings: Warning 1292 Truncated incorrect CHAR(1) value: '123' Error 1758 Invalid condition number SELECT @var7, @var8; @var7 @var8 2 NULL INSERT INTO t1 VALUES (10,10,10),('x','foo',1.0203); Warnings: Warning 1366 Incorrect integer value: 'x' for column `test`.`t1`.`id1` at row 2 GET DIAGNOSTICS CONDITION 1 @var9= ROW_NUMBER; GET DIAGNOSTICS CONDITION 2 @var10= ROW_NUMBER; Warnings: Warning 1366 Incorrect integer value: 'x' for column `test`.`t1`.`id1` at row 2 Error 1758 Invalid condition number SELECT @var9, @var10; @var9 @var10 2 NULL INSERT INTO t1 VALUES (11,11,11),(12,12,(13,'m',1.0113)); ERROR 21000: Operand should contain 1 column(s) GET DIAGNOSTICS CONDITION 1 @var11= ROW_NUMBER; GET DIAGNOSTICS CONDITION 2 @var12= ROW_NUMBER; Warnings: Error 1241 Operand should contain 1 column(s) Error 1758 Invalid condition number SELECT @var11, @var12; @var11 @var12 2 NULL delete from t1 where id1=0; INSERT INTO t1 VALUES (14,'n',1.0114), (15,'o',1.0115), (16/0,'p',1.0116); Warnings: Warning 1365 Division by 0 Warning 1048 Column 'id1' cannot be null GET DIAGNOSTICS CONDITION 1 @var13= ROW_NUMBER; GET DIAGNOSTICS CONDITION 2 @var14= ROW_NUMBER; GET DIAGNOSTICS CONDITION 3 @var15= ROW_NUMBER; Warnings: Warning 1365 Division by 0 Warning 1048 Column 'id1' cannot be null Error 1758 Invalid condition number SELECT @var13, @var14, @var15; @var13 @var14 @var15 3 3 NULL TRUNCATE TABLE t1; # INSERT ... IGNORE INSERT IGNORE INTO t1 VALUES(1,'a',1.00101), (2,'b',1.00102), (3,'c',1.00103); INSERT IGNORE INTO t1 VALUES (4,'d',1.00104),(1,'a',1.00101),(2,'b',1.00102); Warnings: Warning 1062 Duplicate entry '1' for key 'PRIMARY' Warning 1062 Duplicate entry '2' for key 'PRIMARY' GET DIAGNOSTICS CONDITION 1 @var16= ROW_NUMBER; GET DIAGNOSTICS CONDITION 2 @var17= ROW_NUMBER; GET DIAGNOSTICS CONDITION 3 @var18= ROW_NUMBER; Warnings: Warning 1062 Duplicate entry '1' for key 'PRIMARY' Warning 1062 Duplicate entry '2' for key 'PRIMARY' Error 1758 Invalid condition number SELECT @var16, @var17, @var18; @var16 @var17 @var18 2 3 NULL INSERT IGNORE INTO t1 VALUES (5,'e',1.00105),(6,'f',1.79769313486232e+308); ERROR 22007: Illegal double '1.79769313486232e+308' value found during parsing GET DIAGNOSTICS CONDITION 1 @var19= ROW_NUMBER; GET DIAGNOSTICS CONDITION 2 @var20= ROW_NUMBER; Warnings: Error 1367 Illegal double '1.79769313486232e+308' value found during parsing Error 1758 Invalid condition number SELECT @var19, @var20; @var19 @var20 2 NULL INSERT IGNORE INTO t1 VALUES (7,'g',1.00107),(8,'h',1.00108),(9,'i'),(10,'j'); ERROR 21S01: Column count doesn't match value count at row 3 GET DIAGNOSTICS CONDITION 1 @var21= ROW_NUMBER; GET DIAGNOSTICS CONDITION 2 @var22= ROW_NUMBER; Warnings: Error 1136 Column count doesn't match value count at row 3 Error 1758 Invalid condition number SELECT @var21, @var22; @var21 @var22 3 NULL INSERT IGNORE INTO t1 VALUES (8,8,8),(9,CAST(123 AS CHAR(1)),1.00109); Warnings: Warning 1292 Truncated incorrect CHAR(1) value: '123' GET DIAGNOSTICS CONDITION 1 @var23= ROW_NUMBER; GET DIAGNOSTICS CONDITION 2 @var24= ROW_NUMBER; Warnings: Warning 1292 Truncated incorrect CHAR(1) value: '123' Error 1758 Invalid condition number SELECT @var23, @var24; @var23 @var24 2 NULL INSERT IGNORE INTO t1 VALUES (10,10,10),('x','foo',1.0203); Warnings: Warning 1366 Incorrect integer value: 'x' for column `test`.`t1`.`id1` at row 2 GET DIAGNOSTICS CONDITION 1 @var25= ROW_NUMBER; GET DIAGNOSTICS CONDITION 2 @var26= ROW_NUMBER; Warnings: Warning 1366 Incorrect integer value: 'x' for column `test`.`t1`.`id1` at row 2 Error 1758 Invalid condition number SELECT @var25, @var26; @var25 @var26 2 NULL INSERT IGNORE INTO t1 VALUES (11,11,11),(12,12,(13,'m',1.0113)); ERROR 21000: Operand should contain 1 column(s) GET DIAGNOSTICS CONDITION 1 @var27= ROW_NUMBER; GET DIAGNOSTICS CONDITION 2 @var28= ROW_NUMBER; Warnings: Error 1241 Operand should contain 1 column(s) Error 1758 Invalid condition number SELECT @var27, @var28; @var27 @var28 2 NULL INSERT IGNORE INTO t1 VALUES (14,'n',1.0114), (15,'o',1.0115), (16/0,'p',1.0116); Warnings: Warning 1365 Division by 0 Warning 1048 Column 'id1' cannot be null Warning 1062 Duplicate entry '0' for key 'PRIMARY' GET DIAGNOSTICS CONDITION 1 @var29= ROW_NUMBER; GET DIAGNOSTICS CONDITION 2 @var30= ROW_NUMBER; GET DIAGNOSTICS CONDITION 3 @var31= ROW_NUMBER; GET DIAGNOSTICS CONDITION 4 @var32= ROW_NUMBER; Warnings: Warning 1365 Division by 0 Warning 1048 Column 'id1' cannot be null Warning 1062 Duplicate entry '0' for key 'PRIMARY' Error 1758 Invalid condition number SELECT @var29, @var30, @var31, @var32; @var29 @var30 @var31 @var32 3 3 3 NULL TRUNCATE TABLE t1; # INSERT ... SET INSERT INTO t1 SET id1=1, val1='a', d1=1.00101; INSERT INTO t1 SET id1=2, val1='b', d1=1.00102; INSERT INTO t1 SET id1=3, val1='c', d1=1.00103; INSERT INTO t1 SET id1=1, val1='a', d1=1.00101; ERROR 23000: Duplicate entry '1' for key 'PRIMARY' GET DIAGNOSTICS CONDITION 1 @var33= ROW_NUMBER; GET DIAGNOSTICS CONDITION 2 @var34= ROW_NUMBER; Warnings: Error 1062 Duplicate entry '1' for key 'PRIMARY' Error 1758 Invalid condition number SELECT @var33, @var34; @var33 @var34 1 NULL INSERT INTO t1 SET id1=6, val1='f', d1=1.79769313486232e+308); ERROR 22007: Illegal double '1.79769313486232e+308' value found during parsing GET DIAGNOSTICS CONDITION 1 @var35= ROW_NUMBER; GET DIAGNOSTICS CONDITION 2 @var36= ROW_NUMBER; Warnings: Error 1367 Illegal double '1.79769313486232e+308' value found during parsing Error 1758 Invalid condition number SELECT @var35, @var36; @var35 @var36 1 NULL INSERT INTO t1 SET id1=9, val1=CAST(123 AS CHAR(1)), d1=1.00109; ERROR 22007: Truncated incorrect CHAR(1) value: '123' GET DIAGNOSTICS CONDITION 1 @var37= ROW_NUMBER; GET DIAGNOSTICS CONDITION 2 @var38= ROW_NUMBER; Warnings: Error 1292 Truncated incorrect CHAR(1) value: '123' Error 1758 Invalid condition number SELECT @var37, @var38; @var37 @var38 1 NULL INSERT INTO t1 SET id1='x', val1='foo', d1=1.0203; ERROR 22007: Incorrect integer value: 'x' for column `test`.`t1`.`id1` at row 1 GET DIAGNOSTICS CONDITION 1 @var39= ROW_NUMBER; GET DIAGNOSTICS CONDITION 2 @var40= ROW_NUMBER; Warnings: Error 1366 Incorrect integer value: 'x' for column `test`.`t1`.`id1` at row 1 Error 1758 Invalid condition number SELECT @var39, @var40; @var39 @var40 1 NULL INSERT INTO t1 SET id1=3/0, val1='p', d1=1.0116; ERROR 22012: Division by 0 GET DIAGNOSTICS CONDITION 1 @var41= ROW_NUMBER; GET DIAGNOSTICS CONDITION 2 @var42= ROW_NUMBER; GET DIAGNOSTICS CONDITION 3 @var43= ROW_NUMBER; GET DIAGNOSTICS CONDITION 4 @var44= ROW_NUMBER; Warnings: Error 1365 Division by 0 Error 1048 Column 'id1' cannot be null Error 1105 Unknown error Error 1758 Invalid condition number SELECT @var41, @var42, @var43, @var44; @var41 @var42 @var43 @var44 1 1 1 NULL TRUNCATE TABLE t1; # INSERT ... ON DUPLICATE KEY UPDATE INSERT INTO t1 VALUES(1,'a',1.00101), (2,'b',1.00102), (3,'c',1.00103); INSERT INTO t1 VALUES (4,'d',1.00104),(1,'a',1.00101) ON DUPLICATE KEY UPDATE val1='a', d1=1.00101; GET DIAGNOSTICS CONDITION 1 @var45= ROW_NUMBER; Warnings: Error 1758 Invalid condition number GET DIAGNOSTICS CONDITION 2 @var46= ROW_NUMBER; Warnings: Error 1758 Invalid condition number Error 1758 Invalid condition number SELECT @var45, @var46; @var45 @var46 NULL NULL INSERT INTO t1 VALUES (5,'e',1.00105),(3,'f',1.79769313486232e+308) ON DUPLICATE KEY UPDATE val1='c'; ERROR 22007: Illegal double '1.79769313486232e+308' value found during parsing GET DIAGNOSTICS CONDITION 1 @var47= ROW_NUMBER; GET DIAGNOSTICS CONDITION 2 @var48= ROW_NUMBER; Warnings: Error 1367 Illegal double '1.79769313486232e+308' value found during parsing Error 1758 Invalid condition number SELECT @var47, @var48; @var47 @var48 2 NULL INSERT INTO t1 VALUES (5,'e',1.00105), (3,'i') ON DUPLICATE KEY UPDATE val1='c'; ERROR 21S01: Column count doesn't match value count at row 2 GET DIAGNOSTICS CONDITION 1 @var49= ROW_NUMBER; GET DIAGNOSTICS CONDITION 2 @var50= ROW_NUMBER; Warnings: Error 1136 Column count doesn't match value count at row 2 Error 1758 Invalid condition number SELECT @var49, @var50; @var49 @var50 2 NULL INSERT INTO t1 VALUES (3, CAST(123 AS CHAR(1)), 1.00103) ON DUPLICATE KEY UPDATE val1='c'; ERROR 22007: Truncated incorrect CHAR(1) value: '123' GET DIAGNOSTICS CONDITION 1 @var51= ROW_NUMBER; GET DIAGNOSTICS CONDITION 2 @var52= ROW_NUMBER; Warnings: Error 1292 Truncated incorrect CHAR(1) value: '123' Error 1758 Invalid condition number SELECT @var51, @var52; @var51 @var52 1 NULL INSERT INTO t1 VALUES (10,10,10),('x','foo',1.0203) ON DUPLICATE KEY UPDATE val1='c'; Warnings: Warning 1366 Incorrect integer value: 'x' for column `test`.`t1`.`id1` at row 2 GET DIAGNOSTICS CONDITION 1 @var53= ROW_NUMBER; GET DIAGNOSTICS CONDITION 2 @var54= ROW_NUMBER; Warnings: Warning 1366 Incorrect integer value: 'x' for column `test`.`t1`.`id1` at row 2 Error 1758 Invalid condition number SELECT @var53, @var54; @var53 @var54 2 NULL INSERT INTO t1 VALUES (11,11,11),(12,12,(13,'m',1.0113)) ON DUPLICATE KEY UPDATE val1='c'; ERROR 21000: Operand should contain 1 column(s) GET DIAGNOSTICS CONDITION 1 @var55= ROW_NUMBER; GET DIAGNOSTICS CONDITION 2 @var56= ROW_NUMBER; Warnings: Error 1241 Operand should contain 1 column(s) Error 1758 Invalid condition number SELECT @var55, @var56; @var55 @var56 2 NULL INSERT INTO t1 VALUES (14,'n',1.0114), (15,'o',1.0115), (2/0,'p',1.00102) ON DUPLICATE KEY UPDATE val1='b'; Warnings: Warning 1365 Division by 0 Warning 1048 Column 'id1' cannot be null GET DIAGNOSTICS CONDITION 1 @var57= ROW_NUMBER; GET DIAGNOSTICS CONDITION 2 @var58= ROW_NUMBER; GET DIAGNOSTICS CONDITION 3 @var59= ROW_NUMBER; Warnings: Warning 1365 Division by 0 Warning 1048 Column 'id1' cannot be null Error 1758 Invalid condition number SELECT @var57, @var58, @var59; @var57 @var58 @var59 3 3 NULL INSERT INTO t1 VALUES (1,'e',1.0),(5,'e',1.0),(5,'f',1.7) ON DUPLICATE KEY UPDATE id1='1'; ERROR 23000: Duplicate entry '1' for key 'PRIMARY' GET DIAGNOSTICS CONDITION 1 @var60= ROW_NUMBER; GET DIAGNOSTICS CONDITION 2 @var61= ROW_NUMBER; Warnings: Error 1062 Duplicate entry '1' for key 'PRIMARY' Error 1758 Invalid condition number SELECT @var60, @var61; @var60 @var61 3 NULL TRUNCATE TABLE t1; DROP TABLE t1; DROP TABLE t2; INSERT ... SELECT CREATE TABLE t1(id1 INT PRIMARY KEY, val1 VARCHAR(10), d1 DOUBLE); CREATE TABLE t2(id2 INT PRIMARY KEY, val2 VARCHAR(10), d2 DOUBLE, p2 POINT); INSERT INTO t2 VALUES(1,'a',1.00101,PointFromText('POINT(20 10)')), (2,'b',1.00102,PointFromText('POINT(20 10)')), (3,'c',1.00103,PointFromText('POINT(20 10)')); INSERT INTO t1 SELECT id2, val2, d2 FROM t2; INSERT INTO t1 SELECT id2, val2, d2 FROM t2 WHERE id2=1; ERROR 23000: Duplicate entry '1' for key 'PRIMARY' GET DIAGNOSTICS CONDITION 1 @var62= ROW_NUMBER; GET DIAGNOSTICS CONDITION 2 @var63= ROW_NUMBER; Warnings: Error 1062 Duplicate entry '1' for key 'PRIMARY' Error 1758 Invalid condition number SELECT @var62, @var63; @var62 @var63 1 NULL INSERT INTO t1 SELECT id2, val2, p2 from t2; ERROR HY000: Cannot cast 'point' as 'double' in assignment of `test`.`t1`.`d1` GET DIAGNOSTICS CONDITION 1 @var64= ROW_NUMBER; GET DIAGNOSTICS CONDITION 2 @var65= ROW_NUMBER; Warnings: Error 4078 Cannot cast 'point' as 'double' in assignment of `test`.`t1`.`d1` Error 1758 Invalid condition number SELECT @var64, @var65; @var64 @var65 1 NULL INSERT INTO t1 SELECT id2, val2 FROM t2; ERROR 21S01: Column count doesn't match value count at row 1 GET DIAGNOSTICS CONDITION 1 @var66= ROW_NUMBER; GET DIAGNOSTICS CONDITION 2 @var67= ROW_NUMBER; Warnings: Error 1136 Column count doesn't match value count at row 1 Error 1758 Invalid condition number SELECT @var66, @var67; @var66 @var67 1 NULL INSERT INTO t2 VALUES(4,'a',1.00101,PointFromText('POINT(20 10)')); INSERT INTO t1 SELECT id2, CAST(123 AS CHAR(1)), d2 FROM t2 WHERE id2=4; ERROR 22007: Truncated incorrect CHAR(1) value: '123' GET DIAGNOSTICS CONDITION 1 @var68= ROW_NUMBER; GET DIAGNOSTICS CONDITION 2 @var69= ROW_NUMBER; Warnings: Error 1292 Truncated incorrect CHAR(1) value: '123' Error 1758 Invalid condition number SELECT @var68, @var69; @var68 @var69 1 NULL INSERT INTO t1 SELECT id2, val2, 1.79769313486232e+308 FROM t2; ERROR 22007: Illegal double '1.79769313486232e+308' value found during parsing GET DIAGNOSTICS CONDITION 1 @var70= ROW_NUMBER; GET DIAGNOSTICS CONDITION 2 @var71= ROW_NUMBER; Warnings: Error 1367 Illegal double '1.79769313486232e+308' value found during parsing Error 1758 Invalid condition number SELECT @var70, @var71; @var70 @var71 1 NULL INSERT INTO t1 SELECT id2/0, val2, d2 FROM t2; ERROR 22012: Division by 0 GET DIAGNOSTICS CONDITION 1 @var72= ROW_NUMBER; GET DIAGNOSTICS CONDITION 2 @var73= ROW_NUMBER; GET DIAGNOSTICS CONDITION 3 @var74= ROW_NUMBER; Warnings: Error 1365 Division by 0 Error 1048 Column 'id1' cannot be null Error 1758 Invalid condition number SELECT @var72, @var73, @var74; @var72 @var73 @var74 1 1 NULL DROP TABLE t1,t2; # Checking ROW_NUMBER in STORED PROCEDURE for INSERT CREATE TABLE t1(id1 INT PRIMARY KEY); CREATE PROCEDURE proc1 () BEGIN DECLARE var75 INT; DECLARE var76 INT; INSERT INTO t1 VALUES (1),(2); INSERT IGNORE INTO t1 VALUES(2); GET DIAGNOSTICS CONDITION 1 var75= ROW_NUMBER; GET DIAGNOSTICS CONDITION 2 var76= ROW_NUMBER; SELECT var75, var76; END; | CALL proc1(); var75 var76 1 NULL Warnings: Warning 1062 Duplicate entry '2' for key 'PRIMARY' Error 1758 Invalid condition number TRUNCATE TABLE t1; # Checking ROW_NUMBER in PREPARED STATEMENTS for INSERT INSERT INTO t1 VALUES (1), (2), (3); INSERT IGNORE INTO t1 VALUES(2),(3),(4); Warnings: Warning 1062 Duplicate entry '2' for key 'PRIMARY' Warning 1062 Duplicate entry '3' for key 'PRIMARY' PREPARE stmt1 FROM "GET DIAGNOSTICS CONDITION 2 @var77= ROW_NUMBER"; EXECUTE stmt1; SELECT @var77; @var77 2 DROP PROCEDURE proc1; DROP PREPARE stmt1; DROP TABLE t1; # # REPLACE STATEMENT # CREATE TABLE t1(id1 INT PRIMARY KEY, val1 VARCHAR(10), d1 DOUBLE); CREATE TABLE t2(id2 INT PRIMARY KEY, val2 VARCHAR(10), d2 DOUBLE); # Simple REPLACE statement REPLACE INTO t1 VALUES(1,'a',1.00101), (2,'b',1.00102), (3,'c',1.00103); REPLACE INTO t1 VALUES (4,'d',1.00104),(1,'a',1.00101),(2,'b',1.00102); GET DIAGNOSTICS CONDITION 1 @var78= ROW_NUMBER; Warnings: Error 1758 Invalid condition number SELECT @var78; @var78 NULL REPLACE INTO t1 VALUES (5,'e',1.00105),(6,'f',1.79769313486232e+308); ERROR 22007: Illegal double '1.79769313486232e+308' value found during parsing GET DIAGNOSTICS CONDITION 1 @var79= ROW_NUMBER; GET DIAGNOSTICS CONDITION 2 @var80= ROW_NUMBER; Warnings: Error 1367 Illegal double '1.79769313486232e+308' value found during parsing Error 1758 Invalid condition number SELECT @var79, @var80; @var79 @var80 2 NULL REPLACE INTO t1 VALUES (7,'g',1.00107),(8,'h',1.00108),(9,'i'),(10,'j'); ERROR 21S01: Column count doesn't match value count at row 3 GET DIAGNOSTICS CONDITION 1 @var81= ROW_NUMBER; GET DIAGNOSTICS CONDITION 2 @var82= ROW_NUMBER; Warnings: Error 1136 Column count doesn't match value count at row 3 Error 1758 Invalid condition number SELECT @var81, @var82; @var81 @var82 3 NULL REPLACE INTO t1 VALUES (8,8,8),(9,CAST(123 AS CHAR(1)),1.00109); Warnings: Warning 1292 Truncated incorrect CHAR(1) value: '123' GET DIAGNOSTICS CONDITION 1 @var83= ROW_NUMBER; GET DIAGNOSTICS CONDITION 2 @var84= ROW_NUMBER; Warnings: Warning 1292 Truncated incorrect CHAR(1) value: '123' Error 1758 Invalid condition number SELECT @var83, @var84; @var83 @var84 2 NULL REPLACE INTO t1 VALUES (10,10,10),('x','foo',1.0203); Warnings: Warning 1366 Incorrect integer value: 'x' for column `test`.`t1`.`id1` at row 2 GET DIAGNOSTICS CONDITION 1 @var85= ROW_NUMBER; GET DIAGNOSTICS CONDITION 2 @var86= ROW_NUMBER; Warnings: Warning 1366 Incorrect integer value: 'x' for column `test`.`t1`.`id1` at row 2 Error 1758 Invalid condition number SELECT @var85, @var86; @var85 @var86 2 NULL REPLACE INTO t1 VALUES (11,11,11),(12,12,(13,'m',1.0113)); ERROR 21000: Operand should contain 1 column(s) GET DIAGNOSTICS CONDITION 1 @var87= ROW_NUMBER; GET DIAGNOSTICS CONDITION 2 @var88= ROW_NUMBER; Warnings: Error 1241 Operand should contain 1 column(s) Error 1758 Invalid condition number SELECT @var87, @var88; @var87 @var88 2 NULL REPLACE INTO t1 VALUES (14,'n',1.0114), (15,'o',1.0115), (16/0,'p',1.0116); Warnings: Warning 1365 Division by 0 Warning 1048 Column 'id1' cannot be null GET DIAGNOSTICS CONDITION 1 @var89= ROW_NUMBER; GET DIAGNOSTICS CONDITION 2 @var90= ROW_NUMBER; GET DIAGNOSTICS CONDITION 3 @var91= ROW_NUMBER; Warnings: Warning 1365 Division by 0 Warning 1048 Column 'id1' cannot be null Error 1758 Invalid condition number SELECT @var89, @var90, @var91; @var89 @var90 @var91 3 3 NULL TRUNCATE TABLE t1; # REPLACE ... SET REPLACE INTO t1 SET id1=1, val1='a', d1=1.00101; REPLACE INTO t1 SET id1=2, val1='b', d1=1.00102; REPLACE INTO t1 SET id1=3, val1='c', d1=1.00103; REPLACE INTO t1 SET id1=1, val1='a', d1=1.00101; GET DIAGNOSTICS CONDITION 1 @var92= ROW_NUMBER; Warnings: Error 1758 Invalid condition number SELECT @var92; @var92 NULL REPLACE INTO t1 SET id1=6, val1='f', d1=1.79769313486232e+308); ERROR 22007: Illegal double '1.79769313486232e+308' value found during parsing GET DIAGNOSTICS CONDITION 1 @var93= ROW_NUMBER; GET DIAGNOSTICS CONDITION 2 @var94= ROW_NUMBER; Warnings: Error 1367 Illegal double '1.79769313486232e+308' value found during parsing Error 1758 Invalid condition number SELECT @var93, @var94; @var93 @var94 1 NULL REPLACE INTO t1 SET id1=9, val1=CAST(123 AS CHAR(1)), d1=1.00109; ERROR 22007: Truncated incorrect CHAR(1) value: '123' GET DIAGNOSTICS CONDITION 1 @var95= ROW_NUMBER; GET DIAGNOSTICS CONDITION 2 @var96= ROW_NUMBER; Warnings: Error 1292 Truncated incorrect CHAR(1) value: '123' Error 1758 Invalid condition number SELECT @var95, @var96; @var95 @var96 1 NULL REPLACE INTO t1 SET id1='x', val1='foo', d1=1.0203; ERROR 22007: Incorrect integer value: 'x' for column `test`.`t1`.`id1` at row 1 GET DIAGNOSTICS CONDITION 1 @var97= ROW_NUMBER; GET DIAGNOSTICS CONDITION 2 @var98= ROW_NUMBER; Warnings: Error 1366 Incorrect integer value: 'x' for column `test`.`t1`.`id1` at row 1 Error 1758 Invalid condition number SELECT @var97, @var98; @var97 @var98 1 NULL REPLACE INTO t1 SET id1=3/0, val1='p', d1=1.0116; ERROR 22012: Division by 0 GET DIAGNOSTICS CONDITION 1 @var99= ROW_NUMBER; GET DIAGNOSTICS CONDITION 2 @var100= ROW_NUMBER; GET DIAGNOSTICS CONDITION 3 @var101= ROW_NUMBER; GET DIAGNOSTICS CONDITION 4 @var102= ROW_NUMBER; Warnings: Error 1365 Division by 0 Error 1048 Column 'id1' cannot be null Error 1105 Unknown error Error 1758 Invalid condition number SELECT @var99, @var100, @var101, @var102; @var99 @var100 @var101 @var102 1 1 1 NULL TRUNCATE TABLE t1; DROP TABLE t1; DROP TABLE t2; # REPLACE ... SELECT CREATE TABLE t1(id1 INT PRIMARY KEY, val1 VARCHAR(10), d1 DOUBLE); CREATE TABLE t2(id2 INT PRIMARY KEY, val2 VARCHAR(10), d2 DOUBLE, p2 POINT); INSERT INTO t2 VALUES(1,'a',1.00101,PointFromText('POINT(20 10)')), (2,'b',1.00102,PointFromText('POINT(20 10)')), (3,'c',1.00103,PointFromText('POINT(20 10)')); INSERT INTO t1 SELECT id2, val2, d2 FROM t2; INSERT INTO t1 SELECT id2, val2, d2 FROM t2 WHERE id2=1; ERROR 23000: Duplicate entry '1' for key 'PRIMARY' GET DIAGNOSTICS CONDITION 1 @var103= ROW_NUMBER; GET DIAGNOSTICS CONDITION 2 @var104= ROW_NUMBER; Warnings: Error 1062 Duplicate entry '1' for key 'PRIMARY' Error 1758 Invalid condition number SELECT @var103, @var104; @var103 @var104 1 NULL INSERT INTO t1 SELECT id2, val2, p2 from t2; ERROR HY000: Cannot cast 'point' as 'double' in assignment of `test`.`t1`.`d1` GET DIAGNOSTICS CONDITION 1 @var105= ROW_NUMBER; GET DIAGNOSTICS CONDITION 2 @var106= ROW_NUMBER; Warnings: Error 4078 Cannot cast 'point' as 'double' in assignment of `test`.`t1`.`d1` Error 1758 Invalid condition number SELECT @var105, @var106; @var105 @var106 1 NULL INSERT INTO t1 SELECT id2, val2 FROM t2; ERROR 21S01: Column count doesn't match value count at row 1 GET DIAGNOSTICS CONDITION 1 @var107= ROW_NUMBER; GET DIAGNOSTICS CONDITION 2 @var108= ROW_NUMBER; Warnings: Error 1136 Column count doesn't match value count at row 1 Error 1758 Invalid condition number SELECT @var107, @var108; @var107 @var108 1 NULL INSERT INTO t2 VALUES(4,'a',1.00101,PointFromText('POINT(20 10)')); INSERT INTO t1 SELECT id2, CAST(123 AS CHAR(1)), d2 FROM t2 WHERE id2=4; ERROR 22007: Truncated incorrect CHAR(1) value: '123' GET DIAGNOSTICS CONDITION 1 @var109= ROW_NUMBER; GET DIAGNOSTICS CONDITION 2 @var110= ROW_NUMBER; Warnings: Error 1292 Truncated incorrect CHAR(1) value: '123' Error 1758 Invalid condition number SELECT @var109, @var110; @var109 @var110 1 NULL INSERT INTO t1 SELECT id2, val2, 1.79769313486232e+308 FROM t2; ERROR 22007: Illegal double '1.79769313486232e+308' value found during parsing GET DIAGNOSTICS CONDITION 1 @var111= ROW_NUMBER; GET DIAGNOSTICS CONDITION 2 @var112= ROW_NUMBER; Warnings: Error 1367 Illegal double '1.79769313486232e+308' value found during parsing Error 1758 Invalid condition number SELECT @var111, @var112; @var111 @var112 1 NULL INSERT INTO t1 SELECT id2/0, val2, d2 FROM t2; ERROR 22012: Division by 0 GET DIAGNOSTICS CONDITION 1 @var113= ROW_NUMBER; GET DIAGNOSTICS CONDITION 2 @var114= ROW_NUMBER; GET DIAGNOSTICS CONDITION 3 @var115= ROW_NUMBER; Warnings: Error 1365 Division by 0 Error 1048 Column 'id1' cannot be null Error 1758 Invalid condition number SELECT @var113, @var114, @var115; @var113 @var114 @var115 1 1 NULL DROP TABLE t1,t2; # Checking ROW_NUMBER in STORED PROCEDURE CREATE TABLE t1(id1 INT PRIMARY KEY); CREATE PROCEDURE proc1 () BEGIN DECLARE var116 INT; REPLACE INTO t1 VALUES (1),(2); GET DIAGNOSTICS CONDITION 1 var116= ROW_NUMBER; SELECT var116; END; | CALL proc1(); var116 NULL Warnings: Error 1758 Invalid condition number TRUNCATE TABLE t1; # Checking ROW_NUMBER in PREPARED STATEMENTS REPLACE INTO t1 VALUES (1), (2), (3); PREPARE stmt1 FROM "GET DIAGNOSTICS CONDITION 2 @var117= ROW_NUMBER"; EXECUTE stmt1; Warnings: Error 1758 Invalid condition number SELECT @var117; @var117 NULL DROP PROCEDURE proc1; DROP PREPARE stmt1; DROP TABLE t1; # # Checking that ROW_NUMBER is only for errors with rows/values # # INSERT STATEMENT CREATE TABLE t1(id1 INT); CREATE TABLE t2(id2 INT); CREATE VIEW v AS SELECT t1.id1 AS A, t2.id2 AS b FROM t1,t2; INSERT INTO t1(id1, id1) VALUES (1,1); ERROR 42000: Column 'id1' specified twice GET DIAGNOSTICS CONDITION 1 @var118= ROW_NUMBER; SELECT @var118; @var118 0 CREATE FUNCTION f1() RETURNS INT BEGIN INSERT INTO t1 VALUES (1); RETURN 1; END | INSERT INTO t1 VALUES (1), (f1()); ERROR HY000: Can't update table 't1' in stored function/trigger because it is already used by statement which invoked this stored function/trigger GET DIAGNOSTICS CONDITION 1 @var119= ROW_NUMBER; SELECT @var119; @var119 0 INSERT INTO t1 VALUES (1) RETURNING id2; ERROR 42S22: Unknown column 'id2' in 'field list' GET DIAGNOSTICS CONDITION 1 @var120= ROW_NUMBER; SELECT @var120; @var120 0 INSERT INTO t1(id2) VALUES(1); ERROR 42S22: Unknown column 'id2' in 'field list' GET DIAGNOSTICS CONDITION 1 @var121= ROW_NUMBER; SELECT @var121; @var121 0 INSERT INTO v VALUES(1,2); ERROR HY000: Can not insert into join view 'test.v' without fields list GET DIAGNOSTICS CONDITION 1 @var122= ROW_NUMBER; SELECT @var122; @var122 0 INSERT INTO v(a,b) VALUES (1,2); ERROR HY000: Can not modify more than one base table through a join view 'test.v' GET DIAGNOSTICS CONDITION 1 @var123= ROW_NUMBER; SELECT @var123; @var123 0 # REPLACE STATEMENT REPLACE INTO t1(id1, id1) VALUES (1,1); ERROR 42000: Column 'id1' specified twice GET DIAGNOSTICS CONDITION 1 @var124= ROW_NUMBER; SELECT @var124; @var124 0 CREATE FUNCTION f2() RETURNS INT BEGIN REPLACE INTO t1 VALUES (1); RETURN 1; END | REPLACE INTO t1 VALUES (1), (f2()); ERROR HY000: Can't update table 't1' in stored function/trigger because it is already used by statement which invoked this stored function/trigger GET DIAGNOSTICS CONDITION 1 @var125= ROW_NUMBER; SELECT @var125; @var125 0 REPLACE INTO t1 VALUES (1) RETURNING id2; ERROR 42S22: Unknown column 'id2' in 'field list' GET DIAGNOSTICS CONDITION 1 @var126= ROW_NUMBER; SELECT @var126; @var126 0 REPLACE INTO t1(id2) VALUES(1); ERROR 42S22: Unknown column 'id2' in 'field list' GET DIAGNOSTICS CONDITION 1 @var127= ROW_NUMBER; SELECT @var127; @var127 0 REPLACE INTO v VALUES(1,2); ERROR HY000: Can not insert into join view 'test.v' without fields list GET DIAGNOSTICS CONDITION 1 @var128= ROW_NUMBER; SELECT @var128; @var128 0 REPLACE INTO v(a,b) VALUES (1,2); ERROR HY000: Can not modify more than one base table through a join view 'test.v' GET DIAGNOSTICS CONDITION 1 @var129= ROW_NUMBER; SELECT @var129; @var129 0 DROP TABLE t1,t2; DROP FUNCTION f1; DROP FUNCTION f2; DROP VIEW v; # # MDEV-26606: ROW_NUMBER property value isn't passed from inside a # stored procedure # # Test 1: Without RESIGNAL CREATE OR REPLACE TABLE t1 (pk INT PRIMARY KEY); CREATE OR REPLACE PROCEDURE sp(a INT) INSERT INTO t1 VALUES (2),(a); SET @num=null, @msg=null; INSERT INTO t1 VALUES(1); CALL sp(1); ERROR 23000: Duplicate entry '1' for key 'PRIMARY' GET DIAGNOSTICS CONDITION 1 @num = ROW_NUMBER, @msg = MESSAGE_TEXT; SELECT @num, @msg; @num @msg 2 Duplicate entry '1' for key 'PRIMARY' DROP PROCEDURE sp; DROP TABLE t1; # Test 2: With RESIGNAL CREATE OR REPLACE TABLE t1 (pk INT PRIMARY KEY); CREATE OR REPLACE PROCEDURE sp(a INT) BEGIN DECLARE n INT; DECLARE m VARCHAR(255); DECLARE EXIT HANDLER FOR 1062 BEGIN GET DIAGNOSTICS CONDITION 1 n = ROW_NUMBER, m = MESSAGE_TEXT; SELECT n, m; RESIGNAL; END; INSERT INTO t1 VALUES (2), (a); END | SET @num=null, @msg=null; INSERT INTO t1 VALUES (1); CALL sp(1); n m 2 Duplicate entry '1' for key 'PRIMARY' ERROR 23000: Duplicate entry '1' for key 'PRIMARY' GET DIAGNOSTICS CONDITION 1 @num = ROW_NUMBER, @msg = MESSAGE_TEXT; SELECT @num, @msg; @num @msg 2 Duplicate entry '1' for key 'PRIMARY' DROP PROCEDURE sp; DROP TABLE t1; # Checking more errors CREATE TABLE t1 (val1 TINYINT); CREATE PROCEDURE sp(a INT) INSERT INTO t1 VALUES (2),(a); INSERT INTO t1 VALUES(1); CALL sp(100000); Warnings: Warning 1264 Out of range value for column 'val1' at row 2 GET DIAGNOSTICS CONDITION 1 @var1= ROW_NUMBER; SELECT @var1; @var1 2 DROP TABLE t1; DROP PROCEDURE sp; # # MDEV-26684: Unexpected ROW_NUMBER in a condition raised by a diagnostics statement # CREATE TABLE t1 (a INT); INSERT INTO t1 VALUES (1),(2); GET DIAGNOSTICS CONDITION 5 @msg = MESSAGE_TEXT; Warnings: Error 1758 Invalid condition number SHOW WARNINGS; Level Code Message Error 1758 Invalid condition number GET DIAGNOSTICS CONDITION 1 @ind = ROW_NUMBER, @msg = MESSAGE_TEXT; SELECT @ind, @msg; @ind @msg 0 Invalid condition number INSERT INTO t1 VALUES (3),(4); GET DIAGNOSTICS CONDITION 1 @ind = ROW_NUMBER, @msg = MESSAGE_TEXT; Warnings: Error 1758 Invalid condition number SELECT @ind, @msg; @ind @msg 0 Invalid condition number GET DIAGNOSTICS CONDITION 5 @ind = ROW_NUMBER, @msg = MESSAGE_TEXT; Warnings: Error 1758 Invalid condition number Error 1758 Invalid condition number SELECT @ind, @msg; @ind @msg 0 Invalid condition number DROP TABLE t1; # # MDEV-26681: ROW_NUMBER is not available within compound statement blocks # CREATE OR REPLACE TABLE t1 (pk INT PRIMARY KEY, a CHAR(3)); INSERT IGNORE INTO t1 VALUES (1,'foo'),(1,'bar'),(2,'foobar'); Warnings: Warning 1062 Duplicate entry '1' for key 'PRIMARY' Warning 1265 Data truncated for column 'a' at row 3 BEGIN NOT ATOMIC DECLARE i INT DEFAULT 0; DECLARE rnum INT DEFAULT -1; DECLARE msg VARCHAR(1024) DEFAULT ''; DECLARE err INT DEFAULT -1; WHILE i < @@warning_count DO SET i = i + 1; GET DIAGNOSTICS CONDITION i rnum = ROW_NUMBER, msg = MESSAGE_TEXT, err = MYSQL_ERRNO; SELECT i, rnum, msg, err; END WHILE; END | i rnum msg err 1 2 Duplicate entry '1' for key 'PRIMARY' 1062 i rnum msg err 2 3 Data truncated for column 'a' at row 3 1265 GET DIAGNOSTICS CONDITION 1 @rnum = ROW_NUMBER, @msg = MESSAGE_TEXT, @err = MYSQL_ERRNO; select @rnum, @msg, @err; @rnum @msg @err 2 Duplicate entry '1' for key 'PRIMARY' 1062 GET DIAGNOSTICS CONDITION 2 @rnum = ROW_NUMBER, @msg = MESSAGE_TEXT, @err = MYSQL_ERRNO; SELECT @rnum, @msg, @err; @rnum @msg @err 3 Data truncated for column 'a' at row 3 1265 DROP TABLE t1; # # ROW_NUMBER differs from the number in the error message upon # ER_WARN_DATA_OUT_OF_RANGE # CREATE TABLE t (a INT); INSERT INTO t VALUES (1),(2); SELECT CAST(a AS DECIMAL(2,2)) AS f FROM t; f 0.99 0.99 Warnings: Warning 1264 Out of range value for column 'f' at row 1 Warning 1264 Out of range value for column 'f' at row 2 GET DIAGNOSTICS CONDITION 2 @n= ROW_NUMBER, @m = MESSAGE_TEXT; SELECT @n, @m; @n @m 2 Out of range value for column 'f' at row 2 DROP TABLE t; # # MDEV-26832: ROW_NUMBER in SIGNAL/RESIGNAL causes a syntax error # # using signal CREATE PROCEDURE signal_syntax() BEGIN DECLARE errno INT DEFAULT 0; DECLARE msg TEXT DEFAULT "foo"; DECLARE row_num INT DEFAULT 0; DECLARE cond CONDITION FOR SQLSTATE "01234"; DECLARE CONTINUE HANDLER for 1012 BEGIN GET DIAGNOSTICS CONDITION 1 errno = MYSQL_ERRNO, msg = MESSAGE_TEXT, row_num= ROW_NUMBER; END; SIGNAL cond SET MESSAGE_TEXT = "Signal message", MYSQL_ERRNO = 1012, ROW_NUMBER= 5; SELECT errno, msg, row_num; END| CALL signal_syntax(); errno msg row_num 1012 Signal message 5 DROP PROCEDURE signal_syntax; # using resignal CREATE PROCEDURE resignal_syntax() BEGIN DECLARE CONTINUE HANDLER FOR 1146 BEGIN RESIGNAL SET MESSAGE_TEXT = '`temptab` does not exist', ROW_NUMBER= 105; END; SELECT `c` FROM `temptab`; END| CALL resignal_syntax(); ERROR 42S02: `temptab` does not exist GET DIAGNOSTICS CONDITION 1 @row_num= ROW_NUMBER; SELECT @row_num; @row_num 105 DROP PROCEDURE resignal_syntax; # # MDEV-26842: ROW_NUMBER is not set and differs from the message upon # WARN_DATA_TRUNCATED produced by inplace ALTER # CREATE TABLE t1 (a VARCHAR(64)) ENGINE=InnoDB; INSERT INTO t1 VALUES ('foo'),(null); ALTER TABLE t1 ADD PRIMARY KEY(a), ALGORITHM=INPLACE; ERROR 01000: Data truncated for column 'a' at row 2 GET DIAGNOSTICS CONDITION 1 @n= ROW_NUMBER, @m= MESSAGE_TEXT; SELECT @n, @m; @n @m 2 Data truncated for column 'a' at row 2 DROP TABLE t1; # # MDEV-26841: ROW_NUMBER is not set and differs from the message upon # ER_WRONG_VALUE_COUNT_ON_ROW for the 1st row # CREATE TABLE t1 (a INT); INSERT INTO t1 VALUES (1,2),(3); ERROR 21S01: Column count doesn't match value count at row 1 GET DIAGNOSTICS CONDITION 1 @n= ROW_NUMBER, @m= MESSAGE_TEXT; SELECT @n, @m; @n @m 1 Column count doesn't match value count at row 1 INSERT INTO t1(a) VALUES(1,2), (3); ERROR 21S01: Column count doesn't match value count at row 1 GET DIAGNOSTICS CONDITION 1 @n= ROW_NUMBER, @m= MESSAGE_TEXT; SELECT @n, @m; @n @m 1 Column count doesn't match value count at row 1 DROP TABLE t1; # # MDEV-26830: Wrong ROW_NUMBER in diagnostics upon INSERT IGNORE with # CHECK violation # CREATE TABLE t1 (a INT, CHECK(a>0)); INSERT IGNORE INTO t1 VALUES (1),(0),(2),(0); Warnings: Warning 4025 CONSTRAINT `CONSTRAINT_1` failed for `test`.`t1` Warning 4025 CONSTRAINT `CONSTRAINT_1` failed for `test`.`t1` GET DIAGNOSTICS CONDITION 1 @n= ROW_NUMBER; SELECT @n; @n 2 GET DIAGNOSTICS CONDITION 2 @n= ROW_NUMBER; SELECT @n; @n 4 DROP TABLE t1; # # MDEV-26844: DELETE returns ROW_NUMBER=1 for every row upon # ER_TRUNCATED_WRONG_VALUE # # without ORDER BY CREATE TABLE t (a VARCHAR(8)); INSERT INTO t VALUES ('val1'),('val2'),('100'),('val4'); SELECT * FROM t; a val1 val2 100 val4 DELETE FROM t WHERE a = 100; Warnings: Warning 1292 Truncated incorrect DECIMAL value: 'val1' Warning 1292 Truncated incorrect DECIMAL value: 'val2' Warning 1292 Truncated incorrect DECIMAL value: 'val4' SHOW WARNINGS; Level Code Message Warning 1292 Truncated incorrect DECIMAL value: 'val1' Warning 1292 Truncated incorrect DECIMAL value: 'val2' Warning 1292 Truncated incorrect DECIMAL value: 'val4' GET DIAGNOSTICS CONDITION 3 @n = ROW_NUMBER; SELECT @n; @n 4 DROP TABLE t; # # MDEV-26695: Number of an invalid row is not calculated for table value constructor # CREATE TABLE t1 (a CHAR(1)) VALUES ('a'),('b'),('foo'); Warnings: Warning 1406 Data too long for column 'a' at row 3 GET DIAGNOSTICS CONDITION 1 @n= ROW_NUMBER; SELECT @n; @n 3 CREATE TABLE t2 (a CHAR(1)) VALUES ('a'),('b') UNION VALUES ('foo'); Warnings: Warning 1406 Data too long for column 'a' at row 3 GET DIAGNOSTICS CONDITION 1 @n= ROW_NUMBER; SELECT @n; @n 3 DROP TABLE t1, t2; # Checking that CREATE ... SELECT works CREATE TABLE t1 (val1 CHAR(5)); INSERT INTO t1 VALUES ('A'),('B'),('C'),('DEF'); CREATE TABLE t2 (val2 CHAR(1)) SELECT val1 as val2 FROM t1; Warnings: Warning 1406 Data too long for column 'val2' at row 4 GET DIAGNOSTICS CONDITION 1 @n= ROW_NUMBER; SELECT @n; @n 4 SELECT * FROM t2; val2 A B C D DROP TABLE t1,t2; # # End of 10.7 tests #