Bug#9725 - "disapearing query/hang" and "unknown error" with "on duplicate key update"

  INSERT IGNORE...UPDATE causes break in protocol or unknown error message.
  Fix so that protocol doesn't break by properly ignoring dups.
parent 6b10b260
...@@ -13,6 +13,7 @@ administrador@light.hegel.local ...@@ -13,6 +13,7 @@ administrador@light.hegel.local
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.mysql.com
antony@ltantony.rdg.cyberkinetica.com antony@ltantony.rdg.cyberkinetica.com
antony@ltantony.rdg.cyberkinetica.homeunix.net antony@ltantony.rdg.cyberkinetica.homeunix.net
arjen@bitbike.com arjen@bitbike.com
......
...@@ -167,3 +167,16 @@ a b c VALUES(a) ...@@ -167,3 +167,16 @@ a b c VALUES(a)
2 1 11 NULL 2 1 11 NULL
DROP TABLE t1; DROP TABLE t1;
DROP TABLE t2; DROP TABLE t2;
create table t1 (a int not null unique);
insert into t1 values (1),(2);
insert ignore into t1 select 1 on duplicate key update a=2;
select * from t1;
a
1
2
insert ignore into t1 select a from t1 on duplicate key update a=a+1 ;
select * from t1;
a
1
3
drop table t1;
...@@ -80,3 +80,15 @@ INSERT t1 SELECT a,b,c FROM t2 WHERE d=2 ON DUPLICATE KEY UPDATE c=c+VALUES(a); ...@@ -80,3 +80,15 @@ INSERT t1 SELECT a,b,c FROM t2 WHERE d=2 ON DUPLICATE KEY UPDATE c=c+VALUES(a);
SELECT *, VALUES(a) FROM t1; SELECT *, VALUES(a) FROM t1;
DROP TABLE t1; DROP TABLE t1;
DROP TABLE t2; DROP TABLE t2;
#
# Bug#9725 - "disapearing query/hang" and "unknown error" with "on duplicate key update"
# INSERT INGORE...UPDATE gives bad error or breaks protocol.
#
create table t1 (a int not null unique);
insert into t1 values (1),(2);
insert ignore into t1 select 1 on duplicate key update a=2;
select * from t1;
insert ignore into t1 select a from t1 on duplicate key update a=a+1 ;
select * from t1;
drop table t1;
...@@ -632,7 +632,11 @@ int write_record(TABLE *table,COPY_INFO *info) ...@@ -632,7 +632,11 @@ int write_record(TABLE *table,COPY_INFO *info)
if (fill_record(*info->update_fields, *info->update_values, 0)) if (fill_record(*info->update_fields, *info->update_values, 0))
goto err; goto err;
if ((error=table->file->update_row(table->record[1],table->record[0]))) if ((error=table->file->update_row(table->record[1],table->record[0])))
{
if ((error == HA_ERR_FOUND_DUPP_KEY) && info->ignore)
break;
goto err; goto err;
}
info->updated++; info->updated++;
break; break;
} }
......
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