Commit 065cdb03 authored by ingo/mydev@chilla.local's avatar ingo/mydev@chilla.local

Merge chilla.local:/home/mydev/mysql-4.1-bug14400

into  chilla.local:/home/mydev/mysql-4.1-amerge
parents eaa9350c 40c10347
...@@ -68,6 +68,7 @@ int mi_rkey(MI_INFO *info, byte *buf, int inx, const byte *key, uint key_len, ...@@ -68,6 +68,7 @@ int mi_rkey(MI_INFO *info, byte *buf, int inx, const byte *key, uint key_len,
if (fast_mi_readinfo(info)) if (fast_mi_readinfo(info))
goto err; goto err;
if (share->concurrent_insert) if (share->concurrent_insert)
rw_rdlock(&share->key_root_lock[inx]); rw_rdlock(&share->key_root_lock[inx]);
...@@ -89,24 +90,35 @@ int mi_rkey(MI_INFO *info, byte *buf, int inx, const byte *key, uint key_len, ...@@ -89,24 +90,35 @@ int mi_rkey(MI_INFO *info, byte *buf, int inx, const byte *key, uint key_len,
case HA_KEY_ALG_BTREE: case HA_KEY_ALG_BTREE:
default: default:
if (!_mi_search(info, keyinfo, key_buff, use_key_length, if (!_mi_search(info, keyinfo, key_buff, use_key_length,
myisam_read_vec[search_flag], info->s->state.key_root[inx])) myisam_read_vec[search_flag], info->s->state.key_root[inx]))
{ {
while (info->lastpos >= info->state->data_file_length) /*
If we are searching for an exact key (including the data pointer)
and this was added by an concurrent insert,
then the result is "key not found".
*/
if ((search_flag == HA_READ_KEY_EXACT) &&
(info->lastpos >= info->state->data_file_length))
{
my_errno= HA_ERR_KEY_NOT_FOUND;
info->lastpos= HA_OFFSET_ERROR;
}
else while (info->lastpos >= info->state->data_file_length)
{ {
/* /*
Skip rows that are inserted by other threads since we got a lock Skip rows that are inserted by other threads since we got a lock
Note that this can only happen if we are not searching after an Note that this can only happen if we are not searching after an
exact key, because the keys are sorted according to position exact key, because the keys are sorted according to position
*/ */
if (_mi_search_next(info, keyinfo, info->lastkey, if (_mi_search_next(info, keyinfo, info->lastkey,
info->lastkey_length, info->lastkey_length,
myisam_readnext_vec[search_flag], myisam_readnext_vec[search_flag],
info->s->state.key_root[inx])) info->s->state.key_root[inx]))
break; break;
} }
} }
} }
if (share->concurrent_insert) if (share->concurrent_insert)
rw_unlock(&share->key_root_lock[inx]); rw_unlock(&share->key_root_lock[inx]);
......
...@@ -822,7 +822,7 @@ bool select_send::send_data(List<Item> &items) ...@@ -822,7 +822,7 @@ bool select_send::send_data(List<Item> &items)
Protocol *protocol= thd->protocol; Protocol *protocol= thd->protocol;
char buff[MAX_FIELD_WIDTH]; char buff[MAX_FIELD_WIDTH];
String buffer(buff, sizeof(buff), &my_charset_bin); String buffer(buff, sizeof(buff), &my_charset_bin);
DBUG_ENTER("send_data"); DBUG_ENTER("select_send::send_data");
protocol->prepare_for_resend(); protocol->prepare_for_resend();
Item *item; Item *item;
...@@ -1033,7 +1033,7 @@ select_export::prepare(List<Item> &list, SELECT_LEX_UNIT *u) ...@@ -1033,7 +1033,7 @@ select_export::prepare(List<Item> &list, SELECT_LEX_UNIT *u)
bool select_export::send_data(List<Item> &items) bool select_export::send_data(List<Item> &items)
{ {
DBUG_ENTER("send_data"); DBUG_ENTER("select_export::send_data");
char buff[MAX_FIELD_WIDTH],null_buff[2],space[MAX_FIELD_WIDTH]; char buff[MAX_FIELD_WIDTH],null_buff[2],space[MAX_FIELD_WIDTH];
bool space_inited=0; bool space_inited=0;
String tmp(buff,sizeof(buff),&my_charset_bin),*res; String tmp(buff,sizeof(buff),&my_charset_bin),*res;
...@@ -1190,7 +1190,7 @@ bool select_dump::send_data(List<Item> &items) ...@@ -1190,7 +1190,7 @@ bool select_dump::send_data(List<Item> &items)
String tmp(buff,sizeof(buff),&my_charset_bin),*res; String tmp(buff,sizeof(buff),&my_charset_bin),*res;
tmp.length(0); tmp.length(0);
Item *item; Item *item;
DBUG_ENTER("send_data"); DBUG_ENTER("select_dump::send_data");
if (unit->offset_limit_cnt) if (unit->offset_limit_cnt)
{ // using limit offset,count { // using limit offset,count
......
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