00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016 #include "myisam_priv.h"
00017 #include <drizzled/util/test.h>
00018
00019 using namespace drizzled;
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029
00030
00031 int mi_rsame(MI_INFO *info, unsigned char *record, int inx)
00032 {
00033 if (inx != -1 && ! mi_is_key_active(info->s->state.key_map, inx))
00034 {
00035 return(errno=HA_ERR_WRONG_INDEX);
00036 }
00037 if (info->lastpos == HA_OFFSET_ERROR || info->update & HA_STATE_DELETED)
00038 {
00039 return(errno=HA_ERR_KEY_NOT_FOUND);
00040 }
00041 info->update&= (HA_STATE_CHANGED | HA_STATE_ROW_CHANGED);
00042
00043
00044 if (fast_mi_readinfo(info))
00045 return(errno);
00046
00047 if (inx >= 0)
00048 {
00049 info->lastinx=inx;
00050 info->lastkey_length=_mi_make_key(info,(uint) inx,info->lastkey,record,
00051 info->lastpos);
00052 _mi_search(info,info->s->keyinfo+inx,info->lastkey, USE_WHOLE_KEY,
00053 SEARCH_SAME,
00054 info->s->state.key_root[inx]);
00055 }
00056
00057 if (!(*info->read_record)(info,info->lastpos,record))
00058 return(0);
00059 if (errno == HA_ERR_RECORD_DELETED)
00060 errno=HA_ERR_KEY_NOT_FOUND;
00061 return(errno);
00062 }