mirror of
https://github.com/MariaDB/server.git
synced 2025-07-29 05:21:33 +03:00
MDEV-10075: Provide index of error causing error in array INSERT
Extended the parser for GET DIAGNOSTICS to use ERROR_INDEX to get warning/error index. Error information is stored in Sql_condition. So it can be used to store the index of warning/error too. THD::current_insert_index keeps a track of count for each row that is processed or going to be inserted in the table (or first row in case of prepare phase). When an error occurs, first we need to fetch corrected error index (using correct_error_index()) for an error number. This is needed because in prepare phase, the error may not be because of rows/values. In such case, correct value of error_index should be 0. Once correct value if fetched, assign it to Sql_condition::error_index when the object is created during error/warning. This error_index variable is returned when ERROR_INDEX is used in GET DIAGNOSTICS.
This commit is contained in:
committed by
Sergei Golubchik
parent
50e08f3da0
commit
ea06c67a49
@ -851,3 +851,582 @@ FLUSH STATUS;
|
||||
SHOW STATUS LIKE 'Com%get_diagnostics';
|
||||
GET DIAGNOSTICS @var1 = NUMBER;
|
||||
SHOW STATUS LIKE 'Com%get_diagnostics';
|
||||
|
||||
--echo #
|
||||
--echo # MDEV-10075: Provide index of error causing error in array INSERT
|
||||
--echo #
|
||||
|
||||
--echo #
|
||||
--echo # INSERT STATEMENT
|
||||
--echo #
|
||||
|
||||
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);
|
||||
|
||||
|
||||
--echo # Simple INSERT statement
|
||||
|
||||
INSERT INTO t1 VALUES(1,'a',1.00101), (2,'b',1.00102), (3,'c',1.00103);
|
||||
--error ER_DUP_ENTRY
|
||||
INSERT INTO t1 VALUES (4,'d',1.00104),(1,'a',1.00101),(2,'b',1.00102);
|
||||
GET DIAGNOSTICS CONDITION 1 @var1= ERROR_INDEX;
|
||||
GET DIAGNOSTICS CONDITION 2 @var2= ERROR_INDEX;
|
||||
SELECT @var1, @var2;
|
||||
|
||||
--error ER_ILLEGAL_VALUE_FOR_TYPE
|
||||
INSERT INTO t1 VALUES (5,'e',1.00105),(6,'f',1.79769313486232e+308);
|
||||
GET DIAGNOSTICS CONDITION 1 @var3= ERROR_INDEX;
|
||||
GET DIAGNOSTICS CONDITION 2 @var4= ERROR_INDEX;
|
||||
SELECT @var3, @var4;
|
||||
|
||||
--error ER_WRONG_VALUE_COUNT_ON_ROW
|
||||
INSERT INTO t1 VALUES (7,'g',1.00107),(8,'h',1.00108),(9,'i'),(10,'j');
|
||||
GET DIAGNOSTICS CONDITION 1 @var5= ERROR_INDEX;
|
||||
GET DIAGNOSTICS CONDITION 2 @var6= ERROR_INDEX;
|
||||
SELECT @var5, @var6;
|
||||
|
||||
--error ER_TRUNCATED_WRONG_VALUE
|
||||
INSERT INTO t1 VALUES (9,CAST(123 AS CHAR(1)),1.00109);
|
||||
GET DIAGNOSTICS CONDITION 1 @var7= ERROR_INDEX;
|
||||
GET DIAGNOSTICS CONDITION 2 @var8= ERROR_INDEX;
|
||||
SELECT @var7, @var8;
|
||||
|
||||
--error ER_TRUNCATED_WRONG_VALUE_FOR_FIELD
|
||||
INSERT INTO t1 VALUES ('x','foo',1.0203);
|
||||
GET DIAGNOSTICS CONDITION 1 @var9= ERROR_INDEX;
|
||||
GET DIAGNOSTICS CONDITION 2 @var10= ERROR_INDEX;
|
||||
SELECT @var9, @var10;
|
||||
|
||||
--error ER_OPERAND_COLUMNS
|
||||
INSERT INTO t1 VALUES ((13,'m',1.0113));
|
||||
GET DIAGNOSTICS CONDITION 1 @var11= ERROR_INDEX;
|
||||
GET DIAGNOSTICS CONDITION 2 @var12= ERROR_INDEX;
|
||||
SELECT @var11, @var12;
|
||||
|
||||
INSERT INTO t1 VALUES (14,'n',1.0114), (15,'o',1.0115), (16/0,'p',1.0116);
|
||||
GET DIAGNOSTICS CONDITION 1 @var13= ERROR_INDEX;
|
||||
GET DIAGNOSTICS CONDITION 2 @var14= ERROR_INDEX;
|
||||
GET DIAGNOSTICS CONDITION 3 @var15= ERROR_INDEX;
|
||||
SELECT @var13, @var14, @var15;
|
||||
|
||||
TRUNCATE TABLE t1;
|
||||
|
||||
--echo # 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);
|
||||
GET DIAGNOSTICS CONDITION 1 @var16= ERROR_INDEX;
|
||||
GET DIAGNOSTICS CONDITION 2 @var17= ERROR_INDEX;
|
||||
GET DIAGNOSTICS CONDITION 3 @var18= ERROR_INDEX;
|
||||
SELECT @var16, @var17, @var18;
|
||||
|
||||
--error ER_ILLEGAL_VALUE_FOR_TYPE
|
||||
INSERT IGNORE INTO t1 VALUES (5,'e',1.00105),(6,'f',1.79769313486232e+308);
|
||||
GET DIAGNOSTICS CONDITION 1 @var19= ERROR_INDEX;
|
||||
GET DIAGNOSTICS CONDITION 2 @var20= ERROR_INDEX;
|
||||
SELECT @var19, @var20;
|
||||
|
||||
--error ER_WRONG_VALUE_COUNT_ON_ROW
|
||||
INSERT IGNORE INTO t1 VALUES (7,'g',1.00107),(8,'h',1.00108),(9,'i'),(10,'j');
|
||||
GET DIAGNOSTICS CONDITION 1 @var21= ERROR_INDEX;
|
||||
GET DIAGNOSTICS CONDITION 2 @var22= ERROR_INDEX;
|
||||
SELECT @var21, @var22;
|
||||
|
||||
INSERT IGNORE INTO t1 VALUES (9,CAST(123 AS CHAR(1)),1.00109);
|
||||
GET DIAGNOSTICS CONDITION 1 @var23= ERROR_INDEX;
|
||||
GET DIAGNOSTICS CONDITION 2 @var24= ERROR_INDEX;
|
||||
SELECT @var23, @var24;
|
||||
|
||||
INSERT IGNORE INTO t1 VALUES ('x','foo',1.0203);
|
||||
GET DIAGNOSTICS CONDITION 1 @var25= ERROR_INDEX;
|
||||
GET DIAGNOSTICS CONDITION 2 @var26= ERROR_INDEX;
|
||||
SELECT @var25, @var26;
|
||||
|
||||
--error ER_OPERAND_COLUMNS
|
||||
INSERT IGNORE INTO t1 VALUES ((13,'m',1.0113));
|
||||
GET DIAGNOSTICS CONDITION 1 @var27= ERROR_INDEX;
|
||||
GET DIAGNOSTICS CONDITION 2 @var28= ERROR_INDEX;
|
||||
SELECT @var27, @var28;
|
||||
|
||||
INSERT IGNORE INTO t1 VALUES (14,'n',1.0114), (15,'o',1.0115),
|
||||
(16/0,'p',1.0116);
|
||||
GET DIAGNOSTICS CONDITION 1 @var29= ERROR_INDEX;
|
||||
GET DIAGNOSTICS CONDITION 2 @var30= ERROR_INDEX;
|
||||
GET DIAGNOSTICS CONDITION 3 @var31= ERROR_INDEX;
|
||||
GET DIAGNOSTICS CONDITION 4 @var32= ERROR_INDEX;
|
||||
SELECT @var29, @var30, @var31, @var32;
|
||||
|
||||
TRUNCATE TABLE t1;
|
||||
|
||||
--echo # 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;
|
||||
|
||||
--error ER_DUP_ENTRY
|
||||
INSERT INTO t1 SET id1=1, val1='a', d1=1.00101;
|
||||
GET DIAGNOSTICS CONDITION 1 @var33= ERROR_INDEX;
|
||||
GET DIAGNOSTICS CONDITION 2 @var34= ERROR_INDEX;
|
||||
SELECT @var33, @var34;
|
||||
|
||||
--error ER_ILLEGAL_VALUE_FOR_TYPE
|
||||
INSERT INTO t1 SET id1=6, val1='f', d1=1.79769313486232e+308);
|
||||
GET DIAGNOSTICS CONDITION 1 @var35= ERROR_INDEX;
|
||||
GET DIAGNOSTICS CONDITION 2 @var36= ERROR_INDEX;
|
||||
SELECT @var35, @var36;
|
||||
|
||||
|
||||
--error ER_TRUNCATED_WRONG_VALUE
|
||||
INSERT INTO t1 SET id1=9, val1=CAST(123 AS CHAR(1)), d1=1.00109;
|
||||
GET DIAGNOSTICS CONDITION 1 @var37= ERROR_INDEX;
|
||||
GET DIAGNOSTICS CONDITION 2 @var38= ERROR_INDEX;
|
||||
SELECT @var37, @var38;
|
||||
|
||||
--error ER_TRUNCATED_WRONG_VALUE_FOR_FIELD
|
||||
INSERT INTO t1 SET id1='x', val1='foo', d1=1.0203;
|
||||
GET DIAGNOSTICS CONDITION 1 @var39= ERROR_INDEX;
|
||||
GET DIAGNOSTICS CONDITION 2 @var40= ERROR_INDEX;
|
||||
SELECT @var39, @var40;
|
||||
|
||||
--error ER_DIVISION_BY_ZERO
|
||||
INSERT INTO t1 SET id1=3/0, val1='p', d1=1.0116;
|
||||
GET DIAGNOSTICS CONDITION 1 @var41= ERROR_INDEX;
|
||||
GET DIAGNOSTICS CONDITION 2 @var42= ERROR_INDEX;
|
||||
GET DIAGNOSTICS CONDITION 3 @var43= ERROR_INDEX;
|
||||
GET DIAGNOSTICS CONDITION 4 @var44= ERROR_INDEX;
|
||||
SELECT @var41, @var42, @var43, @var44;
|
||||
|
||||
TRUNCATE TABLE t1;
|
||||
|
||||
--echo # 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= ERROR_INDEX;
|
||||
GET DIAGNOSTICS CONDITION 2 @var46= ERROR_INDEX;
|
||||
SELECT @var45, @var46;
|
||||
|
||||
--error ER_ILLEGAL_VALUE_FOR_TYPE
|
||||
INSERT INTO t1 VALUES (5,'e',1.00105),(3,'f',1.79769313486232e+308)
|
||||
ON DUPLICATE KEY UPDATE val1='c';
|
||||
GET DIAGNOSTICS CONDITION 1 @var47= ERROR_INDEX;
|
||||
GET DIAGNOSTICS CONDITION 2 @var48= ERROR_INDEX;
|
||||
SELECT @var47, @var48;
|
||||
|
||||
--error ER_WRONG_VALUE_COUNT_ON_ROW
|
||||
INSERT INTO t1 VALUES (5,'e',1.00105), (3,'i')
|
||||
ON DUPLICATE KEY UPDATE val1='c';
|
||||
GET DIAGNOSTICS CONDITION 1 @var49= ERROR_INDEX;
|
||||
GET DIAGNOSTICS CONDITION 2 @var50= ERROR_INDEX;
|
||||
SELECT @var49, @var50;
|
||||
|
||||
--error ER_TRUNCATED_WRONG_VALUE
|
||||
INSERT INTO t1 VALUES (3, CAST(123 AS CHAR(1)), 1.00103)
|
||||
ON DUPLICATE KEY UPDATE val1='c';
|
||||
GET DIAGNOSTICS CONDITION 1 @var51= ERROR_INDEX;
|
||||
GET DIAGNOSTICS CONDITION 2 @var52= ERROR_INDEX;
|
||||
SELECT @var51, @var52;
|
||||
|
||||
--error ER_TRUNCATED_WRONG_VALUE_FOR_FIELD
|
||||
INSERT INTO t1 VALUES ('x','foo',1.0203)
|
||||
ON DUPLICATE KEY UPDATE val1='c';
|
||||
GET DIAGNOSTICS CONDITION 1 @var53= ERROR_INDEX;
|
||||
GET DIAGNOSTICS CONDITION 2 @var54= ERROR_INDEX;
|
||||
SELECT @var53, @var54;
|
||||
|
||||
--error ER_OPERAND_COLUMNS
|
||||
INSERT INTO t1 VALUES ((13,'m',1.0113)) ON DUPLICATE KEY UPDATE val1='c';
|
||||
GET DIAGNOSTICS CONDITION 1 @var55= ERROR_INDEX;
|
||||
GET DIAGNOSTICS CONDITION 2 @var56= ERROR_INDEX;
|
||||
SELECT @var55, @var56;
|
||||
|
||||
INSERT INTO t1 VALUES (14,'n',1.0114), (15,'o',1.0115), (2/0,'p',1.00102)
|
||||
ON DUPLICATE KEY UPDATE val1='b';
|
||||
GET DIAGNOSTICS CONDITION 1 @var57= ERROR_INDEX;
|
||||
GET DIAGNOSTICS CONDITION 2 @var58= ERROR_INDEX;
|
||||
GET DIAGNOSTICS CONDITION 3 @var59= ERROR_INDEX;
|
||||
SELECT @var57, @var58, @var59;
|
||||
|
||||
--error ER_DUP_ENTRY
|
||||
INSERT INTO t1 VALUES (1,'e',1.0),(5,'e',1.0),(5,'f',1.7)
|
||||
ON DUPLICATE KEY UPDATE id1='1';
|
||||
GET DIAGNOSTICS CONDITION 1 @var60= ERROR_INDEX;
|
||||
GET DIAGNOSTICS CONDITION 2 @var61= ERROR_INDEX;
|
||||
SELECT @var60, @var61;
|
||||
|
||||
TRUNCATE TABLE t1;
|
||||
|
||||
DROP TABLE t1;
|
||||
DROP TABLE t2;
|
||||
|
||||
--echo 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;
|
||||
|
||||
--error ER_DUP_ENTRY
|
||||
INSERT INTO t1 SELECT id2, val2, d2 FROM t2 WHERE id2=1;
|
||||
GET DIAGNOSTICS CONDITION 1 @var62= ERROR_INDEX;
|
||||
GET DIAGNOSTICS CONDITION 2 @var63= ERROR_INDEX;
|
||||
SELECT @var62, @var63;
|
||||
|
||||
--error ER_TRUNCATED_WRONG_VALUE_FOR_FIELD
|
||||
INSERT INTO t1 SELECT id2, val2, p2 from t2;
|
||||
GET DIAGNOSTICS CONDITION 1 @var64= ERROR_INDEX;
|
||||
GET DIAGNOSTICS CONDITION 2 @var65= ERROR_INDEX;
|
||||
SELECT @var64, @var65;
|
||||
|
||||
--error ER_WRONG_VALUE_COUNT_ON_ROW
|
||||
INSERT INTO t1 SELECT id2, val2 FROM t2;
|
||||
GET DIAGNOSTICS CONDITION 1 @var66= ERROR_INDEX;
|
||||
GET DIAGNOSTICS CONDITION 2 @var67= ERROR_INDEX;
|
||||
SELECT @var66, @var67;
|
||||
|
||||
INSERT INTO t2 VALUES(4,'a',1.00101,PointFromText('POINT(20 10)'));
|
||||
--error ER_TRUNCATED_WRONG_VALUE
|
||||
INSERT INTO t1 SELECT id2, CAST(123 AS CHAR(1)), d2 FROM t2 WHERE id2=4;
|
||||
GET DIAGNOSTICS CONDITION 1 @var68= ERROR_INDEX;
|
||||
GET DIAGNOSTICS CONDITION 2 @var69= ERROR_INDEX;
|
||||
SELECT @var68, @var69;
|
||||
|
||||
--error ER_ILLEGAL_VALUE_FOR_TYPE
|
||||
INSERT INTO t1 SELECT id2, val2, 1.79769313486232e+308 FROM t2;
|
||||
GET DIAGNOSTICS CONDITION 1 @var70= ERROR_INDEX;
|
||||
GET DIAGNOSTICS CONDITION 2 @var71= ERROR_INDEX;
|
||||
SELECT @var70, @var71;
|
||||
|
||||
|
||||
--error ER_DIVISION_BY_ZERO
|
||||
INSERT INTO t1 SELECT id2/0, val2, d2 FROM t2;
|
||||
GET DIAGNOSTICS CONDITION 1 @var72= ERROR_INDEX;
|
||||
GET DIAGNOSTICS CONDITION 2 @var73= ERROR_INDEX;
|
||||
GET DIAGNOSTICS CONDITION 3 @var74= ERROR_INDEX;
|
||||
SELECT @var72, @var73, @var74;
|
||||
|
||||
DROP TABLE t1,t2;
|
||||
|
||||
--echo # Checking ERROR_INDEX in STORED PROCEDURE for INSERT
|
||||
|
||||
CREATE TABLE t1(id1 INT PRIMARY KEY);
|
||||
|
||||
DELIMITER |;
|
||||
|
||||
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= ERROR_INDEX;
|
||||
GET DIAGNOSTICS CONDITION 2 var76= ERROR_INDEX;
|
||||
|
||||
SELECT var75, var76;
|
||||
|
||||
END;
|
||||
|
|
||||
|
||||
DELIMITER ;|
|
||||
|
||||
CALL proc1();
|
||||
TRUNCATE TABLE t1;
|
||||
|
||||
--echo # Checking ERROR_INDEX in PREPARED STATEMENTS for INSERT
|
||||
|
||||
INSERT INTO t1 VALUES (1), (2), (3);
|
||||
INSERT IGNORE INTO t1 VALUES(2),(3),(4);
|
||||
|
||||
PREPARE stmt1 FROM "GET DIAGNOSTICS CONDITION 2 @var77= ERROR_INDEX";
|
||||
EXECUTE stmt1;
|
||||
SELECT @var77;
|
||||
|
||||
DROP PROCEDURE proc1;
|
||||
DROP PREPARE stmt1;
|
||||
DROP TABLE t1;
|
||||
|
||||
--echo #
|
||||
--echo # REPLACE STATEMENT
|
||||
--echo #
|
||||
|
||||
CREATE TABLE t1(id1 INT PRIMARY KEY, val1 VARCHAR(10), d1 DOUBLE);
|
||||
CREATE TABLE t2(id2 INT PRIMARY KEY, val2 VARCHAR(10), d2 DOUBLE);
|
||||
|
||||
|
||||
--echo # 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= ERROR_INDEX;
|
||||
SELECT @var78;
|
||||
|
||||
--error ER_ILLEGAL_VALUE_FOR_TYPE
|
||||
REPLACE INTO t1 VALUES (5,'e',1.00105),(6,'f',1.79769313486232e+308);
|
||||
GET DIAGNOSTICS CONDITION 1 @var79= ERROR_INDEX;
|
||||
GET DIAGNOSTICS CONDITION 2 @var80= ERROR_INDEX;
|
||||
SELECT @var79, @var80;
|
||||
|
||||
--error ER_WRONG_VALUE_COUNT_ON_ROW
|
||||
REPLACE INTO t1 VALUES (7,'g',1.00107),(8,'h',1.00108),(9,'i'),(10,'j');
|
||||
GET DIAGNOSTICS CONDITION 1 @var81= ERROR_INDEX;
|
||||
GET DIAGNOSTICS CONDITION 2 @var82= ERROR_INDEX;
|
||||
SELECT @var81, @var82;
|
||||
|
||||
--error ER_TRUNCATED_WRONG_VALUE
|
||||
REPLACE INTO t1 VALUES (9,CAST(123 AS CHAR(1)),1.00109);
|
||||
GET DIAGNOSTICS CONDITION 1 @var83= ERROR_INDEX;
|
||||
GET DIAGNOSTICS CONDITION 2 @var84= ERROR_INDEX;
|
||||
SELECT @var83, @var84;
|
||||
|
||||
--error ER_TRUNCATED_WRONG_VALUE_FOR_FIELD
|
||||
REPLACE INTO t1 VALUES ('x','foo',1.0203);
|
||||
GET DIAGNOSTICS CONDITION 1 @var85= ERROR_INDEX;
|
||||
GET DIAGNOSTICS CONDITION 2 @var86= ERROR_INDEX;
|
||||
SELECT @var85, @var86;
|
||||
|
||||
--error ER_OPERAND_COLUMNS
|
||||
REPLACE INTO t1 VALUES ((13,'m',1.0113));
|
||||
GET DIAGNOSTICS CONDITION 1 @var87= ERROR_INDEX;
|
||||
GET DIAGNOSTICS CONDITION 2 @var88= ERROR_INDEX;
|
||||
SELECT @var87, @var88;
|
||||
|
||||
REPLACE INTO t1 VALUES (14,'n',1.0114), (15,'o',1.0115), (16/0,'p',1.0116);
|
||||
GET DIAGNOSTICS CONDITION 1 @var89= ERROR_INDEX;
|
||||
GET DIAGNOSTICS CONDITION 2 @var90= ERROR_INDEX;
|
||||
GET DIAGNOSTICS CONDITION 3 @var91= ERROR_INDEX;
|
||||
SELECT @var89, @var90, @var91;
|
||||
|
||||
TRUNCATE TABLE t1;
|
||||
|
||||
--echo # 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= ERROR_INDEX;
|
||||
SELECT @var92;
|
||||
|
||||
--error ER_ILLEGAL_VALUE_FOR_TYPE
|
||||
REPLACE INTO t1 SET id1=6, val1='f', d1=1.79769313486232e+308);
|
||||
GET DIAGNOSTICS CONDITION 1 @var93= ERROR_INDEX;
|
||||
GET DIAGNOSTICS CONDITION 2 @var94= ERROR_INDEX;
|
||||
SELECT @var93, @var94;
|
||||
|
||||
|
||||
--error ER_TRUNCATED_WRONG_VALUE
|
||||
REPLACE INTO t1 SET id1=9, val1=CAST(123 AS CHAR(1)), d1=1.00109;
|
||||
GET DIAGNOSTICS CONDITION 1 @var95= ERROR_INDEX;
|
||||
GET DIAGNOSTICS CONDITION 2 @var96= ERROR_INDEX;
|
||||
SELECT @var95, @var96;
|
||||
|
||||
--error ER_TRUNCATED_WRONG_VALUE_FOR_FIELD
|
||||
REPLACE INTO t1 SET id1='x', val1='foo', d1=1.0203;
|
||||
GET DIAGNOSTICS CONDITION 1 @var97= ERROR_INDEX;
|
||||
GET DIAGNOSTICS CONDITION 2 @var98= ERROR_INDEX;
|
||||
SELECT @var97, @var98;
|
||||
|
||||
--error ER_DIVISION_BY_ZERO
|
||||
REPLACE INTO t1 SET id1=3/0, val1='p', d1=1.0116;
|
||||
GET DIAGNOSTICS CONDITION 1 @var99= ERROR_INDEX;
|
||||
GET DIAGNOSTICS CONDITION 2 @var100= ERROR_INDEX;
|
||||
GET DIAGNOSTICS CONDITION 3 @var101= ERROR_INDEX;
|
||||
GET DIAGNOSTICS CONDITION 4 @var102= ERROR_INDEX;
|
||||
SELECT @var99, @var100, @var101, @var102;
|
||||
|
||||
TRUNCATE TABLE t1;
|
||||
|
||||
DROP TABLE t1;
|
||||
DROP TABLE t2;
|
||||
|
||||
--echo # 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;
|
||||
|
||||
--error ER_DUP_ENTRY
|
||||
INSERT INTO t1 SELECT id2, val2, d2 FROM t2 WHERE id2=1;
|
||||
GET DIAGNOSTICS CONDITION 1 @var103= ERROR_INDEX;
|
||||
GET DIAGNOSTICS CONDITION 2 @var104= ERROR_INDEX;
|
||||
SELECT @var103, @var104;
|
||||
|
||||
--error ER_TRUNCATED_WRONG_VALUE_FOR_FIELD
|
||||
INSERT INTO t1 SELECT id2, val2, p2 from t2;
|
||||
GET DIAGNOSTICS CONDITION 1 @var105= ERROR_INDEX;
|
||||
GET DIAGNOSTICS CONDITION 2 @var106= ERROR_INDEX;
|
||||
SELECT @var105, @var106;
|
||||
|
||||
--error ER_WRONG_VALUE_COUNT_ON_ROW
|
||||
INSERT INTO t1 SELECT id2, val2 FROM t2;
|
||||
GET DIAGNOSTICS CONDITION 1 @var107= ERROR_INDEX;
|
||||
GET DIAGNOSTICS CONDITION 2 @var108= ERROR_INDEX;
|
||||
SELECT @var107, @var108;
|
||||
|
||||
INSERT INTO t2 VALUES(4,'a',1.00101,PointFromText('POINT(20 10)'));
|
||||
--error ER_TRUNCATED_WRONG_VALUE
|
||||
INSERT INTO t1 SELECT id2, CAST(123 AS CHAR(1)), d2 FROM t2 WHERE id2=4;
|
||||
GET DIAGNOSTICS CONDITION 1 @var109= ERROR_INDEX;
|
||||
GET DIAGNOSTICS CONDITION 2 @var110= ERROR_INDEX;
|
||||
SELECT @var109, @var110;
|
||||
|
||||
--error ER_ILLEGAL_VALUE_FOR_TYPE
|
||||
INSERT INTO t1 SELECT id2, val2, 1.79769313486232e+308 FROM t2;
|
||||
GET DIAGNOSTICS CONDITION 1 @var111= ERROR_INDEX;
|
||||
GET DIAGNOSTICS CONDITION 2 @var112= ERROR_INDEX;
|
||||
SELECT @var111, @var112;
|
||||
|
||||
|
||||
--error ER_DIVISION_BY_ZERO
|
||||
INSERT INTO t1 SELECT id2/0, val2, d2 FROM t2;
|
||||
GET DIAGNOSTICS CONDITION 1 @var113= ERROR_INDEX;
|
||||
GET DIAGNOSTICS CONDITION 2 @var114= ERROR_INDEX;
|
||||
GET DIAGNOSTICS CONDITION 3 @var115= ERROR_INDEX;
|
||||
SELECT @var113, @var114, @var115;
|
||||
|
||||
DROP TABLE t1,t2;
|
||||
|
||||
--echo # Checking ERROR_INDEX in STORED PROCEDURE
|
||||
|
||||
CREATE TABLE t1(id1 INT PRIMARY KEY);
|
||||
|
||||
DELIMITER |;
|
||||
|
||||
CREATE PROCEDURE proc1 ()
|
||||
BEGIN
|
||||
|
||||
DECLARE var116 INT;
|
||||
|
||||
REPLACE INTO t1 VALUES (1),(2);
|
||||
|
||||
GET DIAGNOSTICS CONDITION 1 var116= ERROR_INDEX;
|
||||
|
||||
SELECT var116;
|
||||
|
||||
END;
|
||||
|
|
||||
|
||||
DELIMITER ;|
|
||||
|
||||
CALL proc1();
|
||||
TRUNCATE TABLE t1;
|
||||
|
||||
--echo # Checking ERROR_INDEX in PREPARED STATEMENTS
|
||||
|
||||
REPLACE INTO t1 VALUES (1), (2), (3);
|
||||
|
||||
PREPARE stmt1 FROM "GET DIAGNOSTICS CONDITION 2 @var117= ERROR_INDEX";
|
||||
EXECUTE stmt1;
|
||||
SELECT @var117;
|
||||
|
||||
DROP PROCEDURE proc1;
|
||||
DROP PREPARE stmt1;
|
||||
DROP TABLE t1;
|
||||
|
||||
--echo #
|
||||
--echo # Checking that error_index is only for errors with rows/values
|
||||
--echo #
|
||||
|
||||
--echo # 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;
|
||||
|
||||
--error ER_FIELD_SPECIFIED_TWICE
|
||||
INSERT INTO t1(id1, id1) VALUES (1,1);
|
||||
GET DIAGNOSTICS CONDITION 1 @var118= ERROR_INDEX;
|
||||
SELECT @var118;
|
||||
|
||||
delimiter |;
|
||||
CREATE FUNCTION f1() RETURNS INT
|
||||
BEGIN
|
||||
INSERT INTO t1 VALUES (1);
|
||||
RETURN 1;
|
||||
END |
|
||||
delimiter ;|
|
||||
|
||||
--error ER_CANT_UPDATE_USED_TABLE_IN_SF_OR_TRG
|
||||
INSERT INTO t1 VALUES (1), (f1());
|
||||
GET DIAGNOSTICS CONDITION 1 @var119= ERROR_INDEX;
|
||||
SELECT @var119;
|
||||
|
||||
--error ER_BAD_FIELD_ERROR
|
||||
INSERT INTO t1 VALUES (1) RETURNING id2;
|
||||
GET DIAGNOSTICS CONDITION 1 @var120= ERROR_INDEX;
|
||||
SELECT @var120;
|
||||
|
||||
--error ER_BAD_FIELD_ERROR
|
||||
INSERT INTO t1(id2) VALUES(1);
|
||||
GET DIAGNOSTICS CONDITION 1 @var121= ERROR_INDEX;
|
||||
SELECT @var121;
|
||||
|
||||
--error ER_VIEW_NO_INSERT_FIELD_LIST
|
||||
INSERT INTO v VALUES(1,2);
|
||||
GET DIAGNOSTICS CONDITION 1 @var122= ERROR_INDEX;
|
||||
SELECT @var122;
|
||||
|
||||
--error ER_VIEW_MULTIUPDATE
|
||||
INSERT INTO v(a,b) VALUES (1,2);
|
||||
GET DIAGNOSTICS CONDITION 1 @var123= ERROR_INDEX;
|
||||
SELECT @var123;
|
||||
|
||||
--echo # REPLACE STATEMENT
|
||||
|
||||
--error ER_FIELD_SPECIFIED_TWICE
|
||||
REPLACE INTO t1(id1, id1) VALUES (1,1);
|
||||
GET DIAGNOSTICS CONDITION 1 @var124= ERROR_INDEX;
|
||||
SELECT @var124;
|
||||
|
||||
delimiter |;
|
||||
CREATE FUNCTION f2() RETURNS INT
|
||||
BEGIN
|
||||
REPLACE INTO t1 VALUES (1);
|
||||
RETURN 1;
|
||||
END |
|
||||
delimiter ;|
|
||||
|
||||
--error ER_CANT_UPDATE_USED_TABLE_IN_SF_OR_TRG
|
||||
REPLACE INTO t1 VALUES (1), (f2());
|
||||
GET DIAGNOSTICS CONDITION 1 @var125= ERROR_INDEX;
|
||||
SELECT @var125;
|
||||
|
||||
--error ER_BAD_FIELD_ERROR
|
||||
REPLACE INTO t1 VALUES (1) RETURNING id2;
|
||||
GET DIAGNOSTICS CONDITION 1 @var126= ERROR_INDEX;
|
||||
SELECT @var126;
|
||||
|
||||
--error ER_BAD_FIELD_ERROR
|
||||
REPLACE INTO t1(id2) VALUES(1);
|
||||
GET DIAGNOSTICS CONDITION 1 @var127= ERROR_INDEX;
|
||||
SELECT @var127;
|
||||
|
||||
--error ER_VIEW_NO_INSERT_FIELD_LIST
|
||||
REPLACE INTO v VALUES(1,2);
|
||||
GET DIAGNOSTICS CONDITION 1 @var128= ERROR_INDEX;
|
||||
SELECT @var128;
|
||||
|
||||
--error ER_VIEW_MULTIUPDATE
|
||||
REPLACE INTO v(a,b) VALUES (1,2);
|
||||
GET DIAGNOSTICS CONDITION 1 @var129= ERROR_INDEX;
|
||||
SELECT @var129;
|
||||
|
||||
DROP TABLE t1,t2;
|
||||
DROP FUNCTION f1;
|
||||
DROP FUNCTION f2;
|
||||
DROP VIEW v;
|
||||
|
Reference in New Issue
Block a user