Drizzled Public API Documentation

hp_rprev.cc
1 /* Copyright (C) 2000-2002 MySQL AB
2 
3  This program is free software; you can redistribute it and/or modify
4  it under the terms of the GNU General Public License as published by
5  the Free Software Foundation; version 2 of the License.
6 
7  This program is distributed in the hope that it will be useful,
8  but WITHOUT ANY WARRANTY; without even the implied warranty of
9  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
10  GNU General Public License for more details.
11 
12  You should have received a copy of the GNU General Public License
13  along with this program; if not, write to the Free Software
14  Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */
15 
16 #include "heap_priv.h"
17 
18 #include <string.h>
19 #include <drizzled/error_t.h>
20 
21 using namespace drizzled;
22 
23  /* Read prev record for key */
24 
25 
26 int heap_rprev(HP_INFO *info, unsigned char *record)
27 {
28  unsigned char *pos;
29  HP_SHARE *share=info->getShare();
30 
31  if (info->lastinx < 0)
32  return(errno=HA_ERR_WRONG_INDEX);
33  {
34  if (info->current_ptr || (info->update & HA_STATE_NEXT_FOUND))
35  {
36  if ((info->update & HA_STATE_DELETED))
37  pos= hp_search(info, share->keydef + info->lastinx, &info->lastkey[0], 3);
38  else
39  pos= hp_search(info, share->keydef + info->lastinx, &info->lastkey[0], 2);
40  }
41  else
42  {
43  pos=0; /* Read next after last */
44  errno=HA_ERR_KEY_NOT_FOUND;
45  }
46  }
47  if (!pos)
48  {
49  info->update=HA_STATE_PREV_FOUND; /* For heap_rprev */
50  if (errno == HA_ERR_KEY_NOT_FOUND)
51  errno=HA_ERR_END_OF_FILE;
52  return(errno);
53  }
54  hp_extract_record(share, record, pos);
55  info->update=HA_STATE_AKTIV | HA_STATE_PREV_FOUND;
56  return(0);
57 }