diff options
author | serg@serg.mysql.com <> | 2002-10-25 14:09:47 +0000 |
---|---|---|
committer | serg@serg.mysql.com <> | 2002-10-25 14:09:47 +0000 |
commit | d552ba7d8a75cbaa676b487c240aa745f12906af (patch) | |
tree | 924363f29111df2ea0eb851433529662bc1aa664 /sql | |
parent | 0ca3212a8cc3bafab07556e5dab2294fce17258a (diff) | |
download | mariadb-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.cc | 12 | ||||
-rw-r--r-- | sql/sql_handler.cc | 2 |
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, |