[MDEV-32443] load data ignore check constraint applied not on every row Created: 2023-10-11  Updated: 2023-10-12  Resolved: 2023-10-12

Status: Closed
Project: MariaDB Server
Component/s: Data Manipulation - Insert
Affects Version/s: 10.4.31
Fix Version/s: N/A

Type: Bug Priority: Major
Reporter: Daniel Black Assignee: Sergei Golubchik
Resolution: Not a Bug Votes: 0
Labels: None


 Description   

Test:

loaddata.test

SET sql_mode='';
CREATE TABLE t1 (v1 varchar(10), v2 varchar(10), constraint unequal check (v1 != v2));
LOAD DATA INFILE '../../std_data/loaddata7.dat' IGNORE INTO TABLE t1 FIELDS TERMINATED BY ',';
SELECT * FROM t1;
TRUNCATE TABLE t1;
INSERT IGNORE INTO t1 VALUES (11,12),(33,33);
SELECT * FROM t1;
DROP TABLE t1;

mysql-test/std_data/loaddata7.dat

2,2
3,3
4,4
5,5
6,6

Result:

+SET sql_mode='';
+CREATE TABLE t1 (v1 varchar(10), v2 varchar(10), constraint unequal check (v1 != v2));
+LOAD DATA INFILE '../../std_data/loaddata7.dat' IGNORE INTO TABLE t1 FIELDS TERMINATED BY ',';
+Warnings:
+Warning	4025	CONSTRAINT `unequal` failed for `test`.`t1`
+SELECT * FROM t1;
+v1	v2
+2	2
+3	3
+4	4
+5	5
+TRUNCATE TABLE t1;
+INSERT IGNORE INTO t1 VALUES (11,12),(33,33);
+Warnings:
+Warning	4025	CONSTRAINT `unequal` failed for `test`.`t1`
+SELECT * FROM t1;
+v1	v2
+11	12
+DROP TABLE t1;

values 2,2 to 5,5 shouldn't have been inserted.

Expected result:

+LOAD DATA INFILE '../../std_data/loaddata7.dat' IGNORE INTO TABLE t1 FIELDS TERMINATED BY ',';
+Warnings:
+Note	1265	Data truncated for column 'v2' at row 1
+Warning	4025	CONSTRAINT `unequal` failed for `test`.`t1`
+Note	1265	Data truncated for column 'v2' at row 1
+Warning	4025	CONSTRAINT `unequal` failed for `test`.`t1`
+Note	1265	Data truncated for column 'v2' at row 1
+Warning	4025	CONSTRAINT `unequal` failed for `test`.`t1`
+Note	1265	Data truncated for column 'v2' at row 1
+Warning	4025	CONSTRAINT `unequal` failed for `test`.`t1`
+Warning	4025	CONSTRAINT `unequal` failed for `test`.`t1`
+SELECT * FROM t1;
+v1	v2
+INSERT IGNORE INTO t1 VALUES (11,12),(33,33);
+Warnings:
+Warning	4025	CONSTRAINT `unequal` failed for `test`.`t1`
+SELECT * FROM t1;
+v1	v2
+11	12
+DROP TABLE t1;

Which is the result if the v1,v2 where int rather than varchar or text



 Comments   
Comment by Sergei Golubchik [ 2023-10-12 ]

Everything behaves correctly, adding one more command to the test file resolves the mistery:

SELECT hex(v1),hex(v2) FROM t1;
hex(v1) hex(v2)
32      320D
33      330D
34      340D
35      350D

Generated at Thu Feb 08 10:31:24 UTC 2024 using Jira 8.20.16#820016-sha1:9d11dbea5f4be3d4cc21f03a88dd11d8c8687422.