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
00025 int heap_rprev(HP_INFO *info, unsigned char *record)
00026 {
00027 unsigned char *pos;
00028 HP_SHARE *share=info->getShare();
00029 HP_KEYDEF *keyinfo;
00030
00031 if (info->lastinx < 0)
00032 return(errno=HA_ERR_WRONG_INDEX);
00033 keyinfo = share->keydef + info->lastinx;
00034 {
00035 if (info->current_ptr || (info->update & HA_STATE_NEXT_FOUND))
00036 {
00037 if ((info->update & HA_STATE_DELETED))
00038 pos= hp_search(info, share->keydef + info->lastinx, &info->lastkey[0], 3);
00039 else
00040 pos= hp_search(info, share->keydef + info->lastinx, &info->lastkey[0], 2);
00041 }
00042 else
00043 {
00044 pos=0;
00045 errno=HA_ERR_KEY_NOT_FOUND;
00046 }
00047 }
00048 if (!pos)
00049 {
00050 info->update=HA_STATE_PREV_FOUND;
00051 if (errno == HA_ERR_KEY_NOT_FOUND)
00052 errno=HA_ERR_END_OF_FILE;
00053 return(errno);
00054 }
00055 hp_extract_record(share, record, pos);
00056 info->update=HA_STATE_AKTIV | HA_STATE_PREV_FOUND;
00057 return(0);
00058 }