Commit eb36371a authored by unknown's avatar unknown
Browse files

#18487 UPDATE IGNORE not supported for unique constraint violation of...

#18487  UPDATE IGNORE not supported for unique constraint violation of non-primary key: call peek_index_rows


parent 15155fff
Loading
Loading
Loading
Loading
+1 −0
Original line number Diff line number Diff line
@@ -27,6 +27,7 @@ pk1 b c
4	1	1
UPDATE t1 set pk1 = 1, c = 2 where pk1 = 4;
ERROR 23000: Duplicate entry '' for key 0
UPDATE IGNORE t1 set pk1 = 1, c = 2 where pk1 = 4;
select * from t1 order by pk1;
pk1	b	c
0	0	0
+1 −0
Original line number Diff line number Diff line
@@ -29,6 +29,7 @@ UPDATE IGNORE t1 set pk1 = 4 where pk1 = 2;
select * from t1 order by pk1;
-- error 1062
UPDATE t1 set pk1 = 1, c = 2 where pk1 = 4;
UPDATE IGNORE t1 set pk1 = 1, c = 2 where pk1 = 4;
select * from t1 order by pk1;
UPDATE t1 set pk1 = pk1 + 10;
select * from t1 order by pk1;
+15 −0
Original line number Diff line number Diff line
@@ -2387,6 +2387,21 @@ int ha_ndbcluster::update_row(const byte *old_data, byte *new_data)
  uint i;
  DBUG_ENTER("update_row");
  
  /*
   * If IGNORE the ignore constraint violations on primary and unique keys
   */
  if (m_ignore_dup_key)
  {
    int peek_res= peek_indexed_rows(new_data);
    
    if (!peek_res) 
    {
      DBUG_RETURN(HA_ERR_FOUND_DUPP_KEY);
    }
    if (peek_res != HA_ERR_KEY_NOT_FOUND)
      DBUG_RETURN(peek_res);
  }

  statistic_increment(thd->status_var.ha_update_count, &LOCK_status);
  if (table->timestamp_field_type & TIMESTAMP_AUTO_SET_ON_UPDATE)
  {