15.15.8. Implementing the index_read()
Function
The
index_read()
function is used to retrieve a row based on a key:
int ha_foo::index_read(byte * buf, const byte * key, uint key_len, enum ha_rkey_function find_flag)
The *buf
parameter is a byte array that the
storage engine populates with the row that matches the index key
specified in *key
. The
key_len
parameter indicates the prefix length
when matching by prefix, and the find_flag
parameter is an enumerator that dictates the search behavior to
be used.
The index to be used is previously defined in the
index_init()
call and is stored in the active_index
handler variable.
The following values are allowed for
find_flag
:
HA_READ_KEY_EXACT
HA_READ_KEY_OR_NEXT
HA_READ_PREFIX_LAST
HA_READ_PREFIX_LAST_OR_PREV
HA_READ_BEFORE_KEY
HA_READ_AFTER_KEY
HA_READ_KEY_OR_NEXT
HA_READ_KEY_OR_PREV
Storage engines must convert the *key
parameter to a storage engine-specific format, use it to find
the matching row according to the find_flag
,
and then populate *buf
with the matching row
in the MySQL internal row format. For more information on the
internal row format, see
Section 15.9.6, “Implementing the rnd_next()
Function”.
In addition to returning a matching row, the storage engine must
also set a cursor to support sequential index reads.
If the *key
parameter is null the storage
engine should read the first key in the index.