Bug#5553 - Multi table UPDATE IGNORE fails on dup key
We don't want the update to abort when IGNORE is specified mysql-test/r/update.result: Bug#5553 - UPDATE IGNORE fails on dup key New test mysql-test/t/update.test: Bug#5553 - UPDATE IGNORE fails on dup key New test BitKeeper/etc/logging_ok: Logging to logging@openlogging.org accepted
This commit is contained in:
parent
a2d94d92f5
commit
e84eb55a07
@ -9,6 +9,7 @@ acurtis@pcgem.rdg.cyberkinetica.com
|
|||||||
ahlentz@co3064164-a.rochd1.qld.optusnet.com.au
|
ahlentz@co3064164-a.rochd1.qld.optusnet.com.au
|
||||||
akishkin@work.mysql.com
|
akishkin@work.mysql.com
|
||||||
antony@ltantony.dsl-verizon.net
|
antony@ltantony.dsl-verizon.net
|
||||||
|
antony@ltantony.rdg.cyberkinetica.homeunix.net
|
||||||
arjen@bitbike.com
|
arjen@bitbike.com
|
||||||
arjen@co3064164-a.bitbike.com
|
arjen@co3064164-a.bitbike.com
|
||||||
arjen@fred.bitbike.com
|
arjen@fred.bitbike.com
|
||||||
|
@ -166,3 +166,40 @@ F1 F2 F3 cnt groupid
|
|||||||
2 0 1 2 4
|
2 0 1 2 4
|
||||||
2 2 0 1 7
|
2 2 0 1 7
|
||||||
drop table t1;
|
drop table t1;
|
||||||
|
CREATE TABLE t1 (
|
||||||
|
`colA` int(10) unsigned NOT NULL auto_increment,
|
||||||
|
`colB` int(11) NOT NULL default '0',
|
||||||
|
PRIMARY KEY (`colA`)
|
||||||
|
);
|
||||||
|
INSERT INTO t1 VALUES (4433,5424);
|
||||||
|
CREATE TABLE t2 (
|
||||||
|
`colC` int(10) unsigned NOT NULL default '0',
|
||||||
|
`colA` int(10) unsigned NOT NULL default '0',
|
||||||
|
`colD` int(10) unsigned NOT NULL default '0',
|
||||||
|
`colE` int(10) unsigned NOT NULL default '0',
|
||||||
|
`colF` int(10) unsigned NOT NULL default '0',
|
||||||
|
PRIMARY KEY (`colC`,`colA`,`colD`,`colE`)
|
||||||
|
);
|
||||||
|
INSERT INTO t2 VALUES (3,4433,10005,495,500);
|
||||||
|
INSERT INTO t2 VALUES (3,4433,10005,496,500);
|
||||||
|
INSERT INTO t2 VALUES (3,4433,10009,494,500);
|
||||||
|
INSERT INTO t2 VALUES (3,4433,10011,494,500);
|
||||||
|
INSERT INTO t2 VALUES (3,4433,10005,497,500);
|
||||||
|
INSERT INTO t2 VALUES (3,4433,10013,489,500);
|
||||||
|
INSERT INTO t2 VALUES (3,4433,10005,494,500);
|
||||||
|
INSERT INTO t2 VALUES (3,4433,10005,493,500);
|
||||||
|
INSERT INTO t2 VALUES (3,4433,10005,492,500);
|
||||||
|
UPDATE IGNORE t2,t1 set t2.colE = t2.colE + 1,colF=0 WHERE t1.colA = t2.colA AND (t1.colB & 4096) > 0 AND (colE + 1) < colF;
|
||||||
|
SELECT * FROM t2;
|
||||||
|
colC colA colD colE colF
|
||||||
|
3 4433 10005 495 500
|
||||||
|
3 4433 10005 496 500
|
||||||
|
3 4433 10009 495 0
|
||||||
|
3 4433 10011 495 0
|
||||||
|
3 4433 10005 498 0
|
||||||
|
3 4433 10013 490 0
|
||||||
|
3 4433 10005 494 500
|
||||||
|
3 4433 10005 493 500
|
||||||
|
3 4433 10005 492 500
|
||||||
|
DROP TABLE t1;
|
||||||
|
DROP TABLE t2;
|
||||||
|
@ -122,3 +122,36 @@ insert into t1 (F1,F2,F3,cnt,groupid) values ('0','0','0',1,6),
|
|||||||
delete from t1 using t1 m1,t1 m2 where m1.groupid=m2.groupid and (m1.cnt < m2.cnt or m1.cnt=m2.cnt and m1.F3>m2.F3);
|
delete from t1 using t1 m1,t1 m2 where m1.groupid=m2.groupid and (m1.cnt < m2.cnt or m1.cnt=m2.cnt and m1.F3>m2.F3);
|
||||||
select * from t1;
|
select * from t1;
|
||||||
drop table t1;
|
drop table t1;
|
||||||
|
|
||||||
|
#
|
||||||
|
# Bug#5553 - Multi table UPDATE IGNORE fails on duplicate keys
|
||||||
|
#
|
||||||
|
|
||||||
|
CREATE TABLE t1 (
|
||||||
|
`colA` int(10) unsigned NOT NULL auto_increment,
|
||||||
|
`colB` int(11) NOT NULL default '0',
|
||||||
|
PRIMARY KEY (`colA`)
|
||||||
|
);
|
||||||
|
INSERT INTO t1 VALUES (4433,5424);
|
||||||
|
CREATE TABLE t2 (
|
||||||
|
`colC` int(10) unsigned NOT NULL default '0',
|
||||||
|
`colA` int(10) unsigned NOT NULL default '0',
|
||||||
|
`colD` int(10) unsigned NOT NULL default '0',
|
||||||
|
`colE` int(10) unsigned NOT NULL default '0',
|
||||||
|
`colF` int(10) unsigned NOT NULL default '0',
|
||||||
|
PRIMARY KEY (`colC`,`colA`,`colD`,`colE`)
|
||||||
|
);
|
||||||
|
INSERT INTO t2 VALUES (3,4433,10005,495,500);
|
||||||
|
INSERT INTO t2 VALUES (3,4433,10005,496,500);
|
||||||
|
INSERT INTO t2 VALUES (3,4433,10009,494,500);
|
||||||
|
INSERT INTO t2 VALUES (3,4433,10011,494,500);
|
||||||
|
INSERT INTO t2 VALUES (3,4433,10005,497,500);
|
||||||
|
INSERT INTO t2 VALUES (3,4433,10013,489,500);
|
||||||
|
INSERT INTO t2 VALUES (3,4433,10005,494,500);
|
||||||
|
INSERT INTO t2 VALUES (3,4433,10005,493,500);
|
||||||
|
INSERT INTO t2 VALUES (3,4433,10005,492,500);
|
||||||
|
UPDATE IGNORE t2,t1 set t2.colE = t2.colE + 1,colF=0 WHERE t1.colA = t2.colA AND (t1.colB & 4096) > 0 AND (colE + 1) < colF;
|
||||||
|
SELECT * FROM t2;
|
||||||
|
DROP TABLE t1;
|
||||||
|
DROP TABLE t2;
|
||||||
|
|
||||||
|
@ -792,12 +792,16 @@ bool multi_update::send_data(List<Item> ¬_used_values)
|
|||||||
if ((error=table->file->update_row(table->record[1],
|
if ((error=table->file->update_row(table->record[1],
|
||||||
table->record[0])))
|
table->record[0])))
|
||||||
{
|
{
|
||||||
table->file->print_error(error,MYF(0));
|
|
||||||
updated--;
|
updated--;
|
||||||
|
if (handle_duplicates != DUP_IGNORE ||
|
||||||
|
error != HA_ERR_FOUND_DUPP_KEY)
|
||||||
|
{
|
||||||
|
table->file->print_error(error,MYF(0));
|
||||||
DBUG_RETURN(1);
|
DBUG_RETURN(1);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
int error;
|
int error;
|
||||||
|
Loading…
x
Reference in New Issue
Block a user