25 DBUG_ENTER(
"heap_rnext");
27 if (info->lastinx < 0)
28 DBUG_RETURN(my_errno=HA_ERR_WRONG_INDEX);
30 keyinfo = share->keydef + info->lastinx;
31 if (keyinfo->algorithm == HA_KEY_ALG_BTREE)
42 pos = tree_search_next(&keyinfo->rb_tree, &info->last_pos,
46 else if (!info->lastkey_len)
59 pos= tree_search_edge(&keyinfo->rb_tree, info->parents,
70 custom_arg.keyseg = keyinfo->seg;
71 custom_arg.key_length = info->lastkey_len;
72 custom_arg.search_flag = SEARCH_SAME | SEARCH_FIND;
73 pos = tree_search_key(&keyinfo->rb_tree, info->lastkey, info->parents,
74 &info->last_pos, info->last_find_flag, &custom_arg);
78 memcpy(&pos, pos + (*keyinfo->get_key_length)(keyinfo, pos),
80 info->current_ptr = pos;
84 my_errno = HA_ERR_KEY_NOT_FOUND;
89 if (info->current_hash_ptr)
90 pos= hp_search_next(info, keyinfo, info->lastkey,
91 info->current_hash_ptr);
94 if (!info->current_ptr && (info->update & HA_STATE_NEXT_FOUND))
97 my_errno=HA_ERR_KEY_NOT_FOUND;
99 else if (!info->current_ptr)
100 pos= hp_search(info, keyinfo, info->lastkey, 0);
102 pos= hp_search(info, keyinfo, info->lastkey, 1);
107 info->update=HA_STATE_NEXT_FOUND;
108 if (my_errno == HA_ERR_KEY_NOT_FOUND)
109 my_errno=HA_ERR_END_OF_FILE;
110 DBUG_RETURN(my_errno);
112 memcpy(record,pos,(
size_t) share->reclength);
113 info->update=HA_STATE_AKTIV | HA_STATE_NEXT_FOUND;