1
0
mirror of https://github.com/MariaDB/server.git synced 2025-08-07 00:04:31 +03:00
This commit is contained in:
unknown
2005-06-20 18:02:47 +02:00
3 changed files with 33 additions and 16 deletions

View File

@@ -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;
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;
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;
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;
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;
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;
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);

View File

@@ -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;
# #
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;
# #
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;
# #
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;
# #
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;
# #
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;
# 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;

View File

@@ -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()
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,
/* 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;