summaryrefslogtreecommitdiff
path: root/sql
diff options
context:
space:
mode:
authorserg@serg.mysql.com <>2002-10-25 14:09:47 +0000
committerserg@serg.mysql.com <>2002-10-25 14:09:47 +0000
commitd552ba7d8a75cbaa676b487c240aa745f12906af (patch)
tree924363f29111df2ea0eb851433529662bc1aa664 /sql
parent0ca3212a8cc3bafab07556e5dab2294fce17258a (diff)
downloadmariadb-git-d552ba7d8a75cbaa676b487c240aa745f12906af.tar.gz
support for HA_READ_PREFIX_LAST_OR_PREV in headres
full support for HA_READ_PREFIX_LAST_OR_PREV in MyISAM protected by #if NOT_IMPLEMENTED_YET in opt_range.cc as not all table handlers support it
Diffstat (limited to 'sql')
-rw-r--r--sql/opt_range.cc12
-rw-r--r--sql/sql_handler.cc2
2 files changed, 11 insertions, 3 deletions
diff --git a/sql/opt_range.cc b/sql/opt_range.cc
index 2b0ac08fe95..ed5916aa0c7 100644
--- a/sql/opt_range.cc
+++ b/sql/opt_range.cc
@@ -2238,7 +2238,7 @@ check_quick_keys(PARAM *param,uint idx,SEL_ARG *key_tree,
{
tmp=param->table->file->
records_in_range((int) keynr,(byte*)(param->min_key + 1),
- min_key_length, (ha_rkey_function)(tmp_min_flag ^ GEOM_FLAG),
+ min_key_length, (ha_rkey_function)(tmp_min_flag ^ GEOM_FLAG),
(byte *)NullS,0,HA_READ_KEY_EXACT);
}
else
@@ -2705,20 +2705,28 @@ int QUICK_SELECT_DESC::get_next()
}
else
{
+ DBUG_ASSERT(range->flag & NEAR_MAX || range_reads_after_key(range));
+#if NOT_IMPLEMENTED_YET
+ result=file->index_read(record, (byte*) range->max_key,
+ range->max_length,
+ ((range->flag & NEAR_MAX) ?
+ HA_READ_BEFORE_KEY : HA_READ_PREFIX_LAST_OR_PREV));
+#else
/* Heikki changed Sept 11, 2002: since InnoDB does not store the cursor
position if READ_KEY_EXACT is used to a primary key with all
key columns specified, we must use below HA_READ_KEY_OR_NEXT,
so that InnoDB stores the cursor position and is able to move
the cursor one step backward after the search. */
- DBUG_ASSERT(range->flag & NEAR_MAX || range_reads_after_key(range));
/* Note: even if max_key is only a prefix, HA_READ_AFTER_KEY will
* do the right thing - go past all keys which match the prefix */
+
result=file->index_read(record, (byte*) range->max_key,
range->max_length,
((range->flag & NEAR_MAX) ?
HA_READ_KEY_OR_NEXT : HA_READ_AFTER_KEY));
result = file->index_prev(record);
+#endif
}
if (result)
{
diff --git a/sql/sql_handler.cc b/sql/sql_handler.cc
index ea15f2e5417..c43869d9d55 100644
--- a/sql/sql_handler.cc
+++ b/sql/sql_handler.cc
@@ -88,7 +88,7 @@ int mysql_ha_close(THD *thd, TABLE_LIST *tables, bool dont_send_ok)
}
static enum enum_ha_read_modes rkey_to_rnext[]=
- { RNEXT, RNEXT, RPREV, RNEXT, RPREV, RNEXT, RPREV };
+ { RNEXT, RNEXT, RPREV, RNEXT, RPREV, RNEXT, RPREV, RPREV };
int mysql_ha_read(THD *thd, TABLE_LIST *tables,