diff --git a/mysql-test/r/ndb_insert.result b/mysql-test/r/ndb_insert.result index 7503010a66b..464eeb6d607 100644 --- a/mysql-test/r/ndb_insert.result +++ b/mysql-test/r/ndb_insert.result @@ -416,10 +416,12 @@ INSERT INTO t1 VALUES SELECT COUNT(*) FROM t1; COUNT(*) 2000 +INSERT INTO t1 VALUES (1,1,1); +ERROR 23000: Duplicate entry '1' for key 1 INSERT INTO t1 VALUES (1,1,1),(2,2,2),(3,3,3),(4,4,4),(5,5,5), (6,6,6),(7,7,7),(8,8,8),(9,9,9),(10,10,10); -ERROR 23000: Duplicate entry '10' for key 1 +ERROR 23000: Can't write; duplicate key in table 't1' select count(*) from t1; count(*) 2000 @@ -437,7 +439,7 @@ begin; INSERT INTO t1 VALUES (1,1,1),(2,2,2),(3,3,3),(4,4,4),(5,5,5), (6,6,6),(7,7,7),(8,8,8),(9,9,9),(10,10,10); -ERROR 23000: Duplicate entry '10' for key 1 +ERROR 23000: Can't write; duplicate key in table 't1' commit; ERROR HY000: Got error 4350 'Transaction already aborted' from ndbcluster select * from t1 where pk1=1; @@ -456,7 +458,7 @@ begin; INSERT INTO t1 VALUES (1,1,1),(2,2,2),(3,3,3),(4,4,4),(5,5,5), (6,6,6),(7,7,7),(8,8,8),(9,9,9),(10,10,10); -ERROR 23000: Duplicate entry '10' for key 1 +ERROR 23000: Can't write; duplicate key in table 't1' rollback; select * from t1 where pk1=1; pk1 b c @@ -474,7 +476,7 @@ begin; INSERT INTO t1 VALUES (1,1,1),(2,2,2),(3,3,3),(4,4,4),(5,5,5), (6,6,6),(7,7,7),(8,8,8),(9,9,9),(10,10,10); -ERROR 23000: Duplicate entry '10' for key 1 +ERROR 23000: Can't write; duplicate key in table 't1' SELECT * FROM t1 WHERE pk1=10; ERROR HY000: Got error 4350 'Transaction already aborted' from ndbcluster rollback; @@ -494,7 +496,7 @@ begin; INSERT INTO t1 VALUES (1,1,1),(2,2,2),(3,3,3),(4,4,4),(5,5,5), (6,6,6),(7,7,7),(8,8,8),(9,9,9),(10,10,10); -ERROR 23000: Duplicate entry '10' for key 1 +ERROR 23000: Can't write; duplicate key in table 't1' SELECT * FROM t1 WHERE pk1=10; ERROR HY000: Got error 4350 'Transaction already aborted' from ndbcluster SELECT * FROM t1 WHERE pk1=10; @@ -517,7 +519,7 @@ begin; INSERT INTO t1 VALUES (1,1,1),(2,2,2),(3,3,3),(4,4,4),(5,5,5), (6,6,6),(7,7,7),(8,8,8),(9,9,9),(10,10,10); -ERROR 23000: Duplicate entry '10' for key 1 +ERROR 23000: Can't write; duplicate key in table 't1' INSERT INTO t1 values (4000, 40, 44); ERROR HY000: Got error 4350 'Transaction already aborted' from ndbcluster rollback; @@ -534,7 +536,7 @@ select count(*) from t1; count(*) 2000 insert into t1 select * from t1 where b < 10 order by pk1; -ERROR 23000: Duplicate entry '9' for key 1 +ERROR 23000: Can't write; duplicate key in table 't1' DELETE FROM t1 WHERE pk1=2; begin; INSERT IGNORE INTO t1 VALUES(1,2,3),(2,3,4); diff --git a/mysql-test/t/ndb_insert.test b/mysql-test/t/ndb_insert.test index f88d33f22f4..68f3817e134 100644 --- a/mysql-test/t/ndb_insert.test +++ b/mysql-test/t/ndb_insert.test @@ -434,6 +434,9 @@ SELECT COUNT(*) FROM t1; # Insert duplicate rows # --error 1062 +INSERT INTO t1 VALUES (1,1,1); + +--error 1022 INSERT INTO t1 VALUES (1,1,1),(2,2,2),(3,3,3),(4,4,4),(5,5,5), (6,6,6),(7,7,7),(8,8,8),(9,9,9),(10,10,10); @@ -457,7 +460,7 @@ rollback; # begin; ---error 1062 +--error 1022 INSERT INTO t1 VALUES (1,1,1),(2,2,2),(3,3,3),(4,4,4),(5,5,5), (6,6,6),(7,7,7),(8,8,8),(9,9,9),(10,10,10); @@ -477,7 +480,7 @@ select count(*) from t1; # begin; ---error 1062 +--error 1022 INSERT INTO t1 VALUES (1,1,1),(2,2,2),(3,3,3),(4,4,4),(5,5,5), (6,6,6),(7,7,7),(8,8,8),(9,9,9),(10,10,10); @@ -496,7 +499,7 @@ select count(*) from t1; # begin; ---error 1062 +--error 1022 INSERT INTO t1 VALUES (1,1,1),(2,2,2),(3,3,3),(4,4,4),(5,5,5), (6,6,6),(7,7,7),(8,8,8),(9,9,9),(10,10,10); @@ -517,7 +520,7 @@ select count(*) from t1; # begin; ---error 1062 +--error 1022 INSERT INTO t1 VALUES (1,1,1),(2,2,2),(3,3,3),(4,4,4),(5,5,5), (6,6,6),(7,7,7),(8,8,8),(9,9,9),(10,10,10); @@ -543,7 +546,7 @@ select count(*) from t1; # begin; ---error 1062 +--error 1022 INSERT INTO t1 VALUES (1,1,1),(2,2,2),(3,3,3),(4,4,4),(5,5,5), (6,6,6),(7,7,7),(8,8,8),(9,9,9),(10,10,10); @@ -562,7 +565,7 @@ select count(*) from t1; # Insert duplicate rows using "insert .. select" # ---error 1062 +--error 1022 insert into t1 select * from t1 where b < 10 order by pk1; DELETE FROM t1 WHERE pk1=2; diff --git a/sql/ha_ndbcluster.cc b/sql/ha_ndbcluster.cc index 97c40f03d93..5e8286684ea 100644 --- a/sql/ha_ndbcluster.cc +++ b/sql/ha_ndbcluster.cc @@ -435,8 +435,13 @@ int ha_ndbcluster::ndb_err(NdbConnection *trans) DBUG_PRINT("info", ("transformed ndbcluster error %d to mysql error %d", err.code, res)); if (res == HA_ERR_FOUND_DUPP_KEY) - m_dupkey= table->primary_key; - + { + if (m_rows_to_insert == 1) + m_dupkey= table->primary_key; + else + // We are batching inserts, offending key is not available + m_dupkey= (uint) -1; + } DBUG_RETURN(res); }