Commit bb424944 authored by unknown's avatar unknown

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.


mysql-test/r/insert_update.result:
  Test for Bug#9725
mysql-test/t/insert_update.test:
  Test for Bug#9725
sql/sql_insert.cc:
  Ignore the failure in update_row when IGNORE is set.
BitKeeper/etc/logging_ok:
  Logging to logging@openlogging.org accepted
parent cae0d728
...@@ -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