Commit dc5e1444 authored by mskold@mysql.com's avatar mskold@mysql.com

Fix for bug#10936: Cluster engine shows wrong key value for duplicate key error

parent 152adbaf
...@@ -416,10 +416,12 @@ INSERT INTO t1 VALUES ...@@ -416,10 +416,12 @@ INSERT INTO t1 VALUES
SELECT COUNT(*) FROM t1; SELECT COUNT(*) FROM t1;
COUNT(*) COUNT(*)
2000 2000
INSERT INTO t1 VALUES (1,1,1);
ERROR 23000: Duplicate entry '1' for key 1
INSERT INTO t1 VALUES INSERT INTO t1 VALUES
(1,1,1),(2,2,2),(3,3,3),(4,4,4),(5,5,5), (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); (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; select count(*) from t1;
count(*) count(*)
2000 2000
...@@ -437,7 +439,7 @@ begin; ...@@ -437,7 +439,7 @@ begin;
INSERT INTO t1 VALUES INSERT INTO t1 VALUES
(1,1,1),(2,2,2),(3,3,3),(4,4,4),(5,5,5), (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); (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; commit;
ERROR HY000: Got error 4350 'Transaction already aborted' from ndbcluster ERROR HY000: Got error 4350 'Transaction already aborted' from ndbcluster
select * from t1 where pk1=1; select * from t1 where pk1=1;
...@@ -456,7 +458,7 @@ begin; ...@@ -456,7 +458,7 @@ begin;
INSERT INTO t1 VALUES INSERT INTO t1 VALUES
(1,1,1),(2,2,2),(3,3,3),(4,4,4),(5,5,5), (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); (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; rollback;
select * from t1 where pk1=1; select * from t1 where pk1=1;
pk1 b c pk1 b c
...@@ -474,7 +476,7 @@ begin; ...@@ -474,7 +476,7 @@ begin;
INSERT INTO t1 VALUES INSERT INTO t1 VALUES
(1,1,1),(2,2,2),(3,3,3),(4,4,4),(5,5,5), (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); (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; SELECT * FROM t1 WHERE pk1=10;
ERROR HY000: Got error 4350 'Transaction already aborted' from ndbcluster ERROR HY000: Got error 4350 'Transaction already aborted' from ndbcluster
rollback; rollback;
...@@ -494,7 +496,7 @@ begin; ...@@ -494,7 +496,7 @@ begin;
INSERT INTO t1 VALUES INSERT INTO t1 VALUES
(1,1,1),(2,2,2),(3,3,3),(4,4,4),(5,5,5), (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); (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; SELECT * FROM t1 WHERE pk1=10;
ERROR HY000: Got error 4350 'Transaction already aborted' from ndbcluster ERROR HY000: Got error 4350 'Transaction already aborted' from ndbcluster
SELECT * FROM t1 WHERE pk1=10; SELECT * FROM t1 WHERE pk1=10;
...@@ -517,7 +519,7 @@ begin; ...@@ -517,7 +519,7 @@ begin;
INSERT INTO t1 VALUES INSERT INTO t1 VALUES
(1,1,1),(2,2,2),(3,3,3),(4,4,4),(5,5,5), (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); (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); INSERT INTO t1 values (4000, 40, 44);
ERROR HY000: Got error 4350 'Transaction already aborted' from ndbcluster ERROR HY000: Got error 4350 'Transaction already aborted' from ndbcluster
rollback; rollback;
...@@ -534,7 +536,7 @@ select count(*) from t1; ...@@ -534,7 +536,7 @@ select count(*) from t1;
count(*) count(*)
2000 2000
insert into t1 select * from t1 where b < 10 order by pk1; 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; DELETE FROM t1 WHERE pk1=2;
begin; begin;
INSERT IGNORE INTO t1 VALUES(1,2,3),(2,3,4); INSERT IGNORE INTO t1 VALUES(1,2,3),(2,3,4);
......
...@@ -434,6 +434,9 @@ SELECT COUNT(*) FROM t1; ...@@ -434,6 +434,9 @@ SELECT COUNT(*) FROM t1;
# Insert duplicate rows # Insert duplicate rows
# #
--error 1062 --error 1062
INSERT INTO t1 VALUES (1,1,1);
--error 1022
INSERT INTO t1 VALUES INSERT INTO t1 VALUES
(1,1,1),(2,2,2),(3,3,3),(4,4,4),(5,5,5), (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); (6,6,6),(7,7,7),(8,8,8),(9,9,9),(10,10,10);
...@@ -457,7 +460,7 @@ rollback; ...@@ -457,7 +460,7 @@ rollback;
# #
begin; begin;
--error 1062 --error 1022
INSERT INTO t1 VALUES INSERT INTO t1 VALUES
(1,1,1),(2,2,2),(3,3,3),(4,4,4),(5,5,5), (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); (6,6,6),(7,7,7),(8,8,8),(9,9,9),(10,10,10);
...@@ -477,7 +480,7 @@ select count(*) from t1; ...@@ -477,7 +480,7 @@ select count(*) from t1;
# #
begin; begin;
--error 1062 --error 1022
INSERT INTO t1 VALUES INSERT INTO t1 VALUES
(1,1,1),(2,2,2),(3,3,3),(4,4,4),(5,5,5), (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); (6,6,6),(7,7,7),(8,8,8),(9,9,9),(10,10,10);
...@@ -496,7 +499,7 @@ select count(*) from t1; ...@@ -496,7 +499,7 @@ select count(*) from t1;
# #
begin; begin;
--error 1062 --error 1022
INSERT INTO t1 VALUES INSERT INTO t1 VALUES
(1,1,1),(2,2,2),(3,3,3),(4,4,4),(5,5,5), (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); (6,6,6),(7,7,7),(8,8,8),(9,9,9),(10,10,10);
...@@ -517,7 +520,7 @@ select count(*) from t1; ...@@ -517,7 +520,7 @@ select count(*) from t1;
# #
begin; begin;
--error 1062 --error 1022
INSERT INTO t1 VALUES INSERT INTO t1 VALUES
(1,1,1),(2,2,2),(3,3,3),(4,4,4),(5,5,5), (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); (6,6,6),(7,7,7),(8,8,8),(9,9,9),(10,10,10);
...@@ -543,7 +546,7 @@ select count(*) from t1; ...@@ -543,7 +546,7 @@ select count(*) from t1;
# #
begin; begin;
--error 1062 --error 1022
INSERT INTO t1 VALUES INSERT INTO t1 VALUES
(1,1,1),(2,2,2),(3,3,3),(4,4,4),(5,5,5), (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); (6,6,6),(7,7,7),(8,8,8),(9,9,9),(10,10,10);
...@@ -562,7 +565,7 @@ select count(*) from t1; ...@@ -562,7 +565,7 @@ select count(*) from t1;
# Insert duplicate rows using "insert .. select" # Insert duplicate rows using "insert .. select"
# #
--error 1062 --error 1022
insert into t1 select * from t1 where b < 10 order by pk1; insert into t1 select * from t1 where b < 10 order by pk1;
DELETE FROM t1 WHERE pk1=2; DELETE FROM t1 WHERE pk1=2;
......
...@@ -435,8 +435,13 @@ int ha_ndbcluster::ndb_err(NdbConnection *trans) ...@@ -435,8 +435,13 @@ int ha_ndbcluster::ndb_err(NdbConnection *trans)
DBUG_PRINT("info", ("transformed ndbcluster error %d to mysql error %d", DBUG_PRINT("info", ("transformed ndbcluster error %d to mysql error %d",
err.code, res)); err.code, res));
if (res == HA_ERR_FOUND_DUPP_KEY) if (res == HA_ERR_FOUND_DUPP_KEY)
{
if (m_rows_to_insert == 1)
m_dupkey= table->primary_key; m_dupkey= table->primary_key;
else
// We are batching inserts, offending key is not available
m_dupkey= (uint) -1;
}
DBUG_RETURN(res); DBUG_RETURN(res);
} }
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment