Commit 2b4400e2 authored by unknown's avatar unknown
Browse files

Merge bk-internal.mysql.com:/home/bk/mysql-4.1/

into serg.mylan:/usr/home/serg/Abk/mysql-4.1

parents c3272ae7 6429a0c5
Loading
Loading
Loading
Loading
+2 −2
Original line number Diff line number Diff line
@@ -40,7 +40,7 @@
#endif


const char *filename= "test3.MSI";
const char *filename= "test3";
uint tests=10,forks=10,key_cacheing=0,use_log=0;

static void get_options(int argc, char *argv[]);
@@ -363,7 +363,7 @@ int test_write(MI_INFO *file,int id,int lock_type)
  }

  sprintf(record.id,"%7d",getpid());
  strmov(record.text,"Testing...");
  strnmov(record.text,"Testing...", sizeof(record.text));

  tries=(uint) rnd(100)+10;
  for (i=count=0 ; i < tries ; i++)
+6 −10
Original line number Diff line number Diff line
@@ -165,12 +165,7 @@ int mi_write(MI_INFO *info, byte *record)
    {
      uint j;
      for (j=0 ; j < share->base.keys ; j++)
      {
        if (is_tree_inited(&info->bulk_insert[j]))
        {
          reset_tree(&info->bulk_insert[j]);
        }
      }
        mi_flush_bulk_insert(info, j);
    }
    info->errkey= (int) i;
    while ( i-- > 0)
@@ -329,7 +324,7 @@ static int w_search(register MI_INFO *info, register MI_KEYDEF *keyinfo,
  uchar *temp_buff,*keypos;
  uchar keybuff[MI_MAX_KEY_BUFF];
  my_bool was_last_key;
  my_off_t next_page;
  my_off_t next_page, dupp_key_pos;
  DBUG_ENTER("w_search");
  DBUG_PRINT("enter",("page: %ld",page));

@@ -349,9 +344,9 @@ static int w_search(register MI_INFO *info, register MI_KEYDEF *keyinfo,
	/* get position to record with duplicated key */
    tmp_key_length=(*keyinfo->get_key)(keyinfo,nod_flag,&keypos,keybuff);
    if (tmp_key_length)
      info->dupp_key_pos=_mi_dpos(info,0,keybuff+tmp_key_length);
      dupp_key_pos=_mi_dpos(info,0,keybuff+tmp_key_length);
    else
      info->dupp_key_pos= HA_OFFSET_ERROR;
      dupp_key_pos= HA_OFFSET_ERROR;
    if (keyinfo->flag & HA_FULLTEXT)
    {
      uint off;
@@ -370,7 +365,7 @@ static int w_search(register MI_INFO *info, register MI_KEYDEF *keyinfo,
      else
      {
        /* popular word. two-level tree. going down */
        my_off_t root=info->dupp_key_pos;
        my_off_t root=dupp_key_pos;
        keyinfo=&info->s->ft2_keyinfo;
        get_key_full_length_rdonly(off, key);
        key+=off;
@@ -389,6 +384,7 @@ static int w_search(register MI_INFO *info, register MI_KEYDEF *keyinfo,
    }
    else /* not HA_FULLTEXT, normal HA_NOSAME key */
    {
      info->dupp_key_pos= dupp_key_pos;
      my_afree((byte*) temp_buff);
      my_errno=HA_ERR_FOUND_DUPP_KEY;
      DBUG_RETURN(-1);
+6 −0
Original line number Diff line number Diff line
@@ -399,3 +399,9 @@ select count(*) from t1;
count(*)
1
drop table t1;
create table t1 (a int primary key, b text, fulltext(b));
create table t2 (a int, b text);
insert t1 values (1, "aaaa"), (2, "bbbb");
insert t2 values (10, "aaaa"), (2, "cccc");
replace t1 select * from t2;
drop table t1, t2;
+13 −0
Original line number Diff line number Diff line
@@ -308,3 +308,16 @@ REPAIR TABLE t1;
select count(*) from t1;
drop table t1;

#
# bug#6784
# mi_flush_bulk_insert (on dup key error in mi_write)
# was mangling info->dupp_key_pos
#

create table t1 (a int primary key, b text, fulltext(b));
create table t2 (a int, b text);
insert t1 values (1, "aaaa"), (2, "bbbb");
insert t2 values (10, "aaaa"), (2, "cccc");
replace t1 select * from t2;
drop table t1, t2;