Commit 4467b464 authored by unknown's avatar unknown

Merge

parents d83c2643 84da8b22
...@@ -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;
......
...@@ -511,8 +511,13 @@ int ha_ndbcluster::ndb_err(NdbTransaction *trans) ...@@ -511,8 +511,13 @@ int ha_ndbcluster::ndb_err(NdbTransaction *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)
m_dupkey= table->s->primary_key; {
if (m_rows_to_insert == 1)
m_dupkey= table->s->primary_key;
else
// We are batching inserts, offending key is not available
m_dupkey= (uint) -1;
}
DBUG_RETURN(res); DBUG_RETURN(res);
} }
...@@ -3119,6 +3124,13 @@ double ha_ndbcluster::scan_time() ...@@ -3119,6 +3124,13 @@ double ha_ndbcluster::scan_time()
DBUG_RETURN(res); DBUG_RETURN(res);
} }
/*
Convert MySQL table locks into locks supported by Ndb Cluster.
Note that MySQL Cluster does currently not support distributed
table locks, so to be safe one should set cluster in Single
User Mode, before relying on table locks when updating tables
from several MySQL servers
*/
THR_LOCK_DATA **ha_ndbcluster::store_lock(THD *thd, THR_LOCK_DATA **ha_ndbcluster::store_lock(THD *thd,
THR_LOCK_DATA **to, THR_LOCK_DATA **to,
...@@ -3134,7 +3146,7 @@ THR_LOCK_DATA **ha_ndbcluster::store_lock(THD *thd, ...@@ -3134,7 +3146,7 @@ THR_LOCK_DATA **ha_ndbcluster::store_lock(THD *thd,
/* Since NDB does not currently have table locks /* Since NDB does not currently have table locks
this is treated as a ordinary lock */ this is treated as a ordinary lock */
if ((lock_type >= TL_WRITE_ALLOW_WRITE && if ((lock_type >= TL_WRITE_CONCURRENT_INSERT &&
lock_type <= TL_WRITE) && !thd->in_lock_tables) lock_type <= TL_WRITE) && !thd->in_lock_tables)
lock_type= TL_WRITE_ALLOW_WRITE; lock_type= TL_WRITE_ALLOW_WRITE;
......
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