Commit 1d771aa4 authored by Venkata Sidagam's avatar Venkata Sidagam

Bug #11759445: CAN'T DELETE ROWS FROM MEMORY TABLE WITH HASH KEY.

Merging from 5.1 to 5.5
parents 9e13157b 2226b108
...@@ -104,7 +104,7 @@ int hp_rb_delete_key(HP_INFO *info, register HP_KEYDEF *keyinfo, ...@@ -104,7 +104,7 @@ int hp_rb_delete_key(HP_INFO *info, register HP_KEYDEF *keyinfo,
int hp_delete_key(HP_INFO *info, register HP_KEYDEF *keyinfo, int hp_delete_key(HP_INFO *info, register HP_KEYDEF *keyinfo,
const uchar *record, uchar *recpos, int flag) const uchar *record, uchar *recpos, int flag)
{ {
ulong blength,pos2,pos_hashnr,lastpos_hashnr; ulong blength, pos2, pos_hashnr, lastpos_hashnr, key_pos;
HASH_INFO *lastpos,*gpos,*pos,*pos3,*empty,*last_ptr; HASH_INFO *lastpos,*gpos,*pos,*pos3,*empty,*last_ptr;
HP_SHARE *share=info->s; HP_SHARE *share=info->s;
DBUG_ENTER("hp_delete_key"); DBUG_ENTER("hp_delete_key");
...@@ -116,9 +116,9 @@ int hp_delete_key(HP_INFO *info, register HP_KEYDEF *keyinfo, ...@@ -116,9 +116,9 @@ int hp_delete_key(HP_INFO *info, register HP_KEYDEF *keyinfo,
last_ptr=0; last_ptr=0;
/* Search after record with key */ /* Search after record with key */
pos= hp_find_hash(&keyinfo->block, key_pos= hp_mask(hp_rec_hashnr(keyinfo, record), blength, share->records + 1);
hp_mask(hp_rec_hashnr(keyinfo, record), blength, pos= hp_find_hash(&keyinfo->block, key_pos);
share->records + 1));
gpos = pos3 = 0; gpos = pos3 = 0;
while (pos->ptr_to_rec != recpos) while (pos->ptr_to_rec != recpos)
...@@ -188,6 +188,16 @@ int hp_delete_key(HP_INFO *info, register HP_KEYDEF *keyinfo, ...@@ -188,6 +188,16 @@ int hp_delete_key(HP_INFO *info, register HP_KEYDEF *keyinfo,
DBUG_RETURN(0); DBUG_RETURN(0);
} }
pos3= pos; /* Link pos->next after lastpos */ pos3= pos; /* Link pos->next after lastpos */
/*
One of elements from the bucket we're scanning is moved to the
beginning of the list. Reset search since this element may not have
been processed yet.
*/
if (flag && pos2 == key_pos)
{
info->current_ptr= 0;
info->current_hash_ptr= 0;
}
} }
else else
{ {
......
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