00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016 #include "heap_priv.h"
00017
00018 #include <string.h>
00019
00020 using namespace drizzled;
00021
00022
00023
00024 int heap_rnext(HP_INFO *info, unsigned char *record)
00025 {
00026 unsigned char *pos;
00027 HP_SHARE *share=info->getShare();
00028 HP_KEYDEF *keyinfo;
00029
00030 if (info->lastinx < 0)
00031 return(errno=HA_ERR_WRONG_INDEX);
00032
00033 keyinfo = share->keydef + info->lastinx;
00034 {
00035 if (info->current_hash_ptr)
00036 pos= hp_search_next(info, keyinfo, &info->lastkey[0],
00037 info->current_hash_ptr);
00038 else
00039 {
00040 if (!info->current_ptr && (info->update & HA_STATE_NEXT_FOUND))
00041 {
00042 pos=0;
00043 errno=HA_ERR_KEY_NOT_FOUND;
00044 }
00045 else if (!info->current_ptr)
00046 pos= hp_search(info, keyinfo, &info->lastkey[0], 0);
00047 else
00048 pos= hp_search(info, keyinfo, &info->lastkey[0], 1);
00049 }
00050 }
00051 if (!pos)
00052 {
00053 info->update=HA_STATE_NEXT_FOUND;
00054 if (errno == HA_ERR_KEY_NOT_FOUND)
00055 errno=HA_ERR_END_OF_FILE;
00056 return(errno);
00057 }
00058 hp_extract_record(share, record, pos);
00059 info->update=HA_STATE_AKTIV | HA_STATE_NEXT_FOUND;
00060 return(0);
00061 }