Drizzled Public API Documentation

mi_rrnd.cc
1 /* Copyright (C) 2000-2002, 2004 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 /* Read a record with random-access. The position to the record must
17  get by MI_INFO. The next record can be read with pos= MI_POS_ERROR */
18 
19 
20 #include "myisam_priv.h"
21 
22 using namespace drizzled;
23 
24 /*
25  Read a row based on position.
26  If filepos= HA_OFFSET_ERROR then read next row
27  Return values
28  Returns one of following values:
29  0 = Ok.
30  HA_ERR_RECORD_DELETED = Record is deleted.
31  HA_ERR_END_OF_FILE = EOF.
32 */
33 
34 int mi_rrnd(MI_INFO *info, unsigned char *buf, register internal::my_off_t filepos)
35 {
36  bool skip_deleted_blocks;
37 
38  skip_deleted_blocks=0;
39 
40  if (filepos == HA_OFFSET_ERROR)
41  {
42  skip_deleted_blocks=1;
43  if (info->lastpos == HA_OFFSET_ERROR) /* First read ? */
44  filepos= info->s->pack.header_length; /* Read first record */
45  else
46  filepos= info->nextpos;
47  }
48 
49  if (info->once_flags & RRND_PRESERVE_LASTINX)
50  info->once_flags&= ~RRND_PRESERVE_LASTINX;
51  else
52  info->lastinx= -1; /* Can't forward or backward */
53  /* Init all but update-flag */
54  info->update&= (HA_STATE_CHANGED | HA_STATE_ROW_CHANGED);
55 
56  if (info->opt_flag & WRITE_CACHE_USED && info->rec_cache.flush())
57  return(errno);
58 
59  return ((*info->s->read_rnd)(info,buf,filepos,skip_deleted_blocks));
60 }