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 BitKeeper/etc/ignore: Added configure.lineno innobase/configure.lineno innobase/stamp-h1 myisam/rt_test.MYD myisam/rt_test.MYI stamp-h1 to the ignore list include/my_base.h: support for HA_READ_PREFIX_LAST_OR_PREV myisam/mi_search.c: full support of HA_READ_PREFIX_LAST_OR_PREV in MyISAM myisam/mi_static.c: full support of HA_READ_PREFIX_LAST_OR_PREV in MyISAM sql/opt_range.cc: support for HA_READ_PREFIX_LAST_OR_PREV protected by #if NOT_IMPLEMENTED_YET, not all table handlers support it sql/sql_handler.cc: support for HA_READ_PREFIX_LAST_OR_PREV
This commit is contained in:
parent
372b26e778
commit
14e6526a0b
@ -505,3 +505,11 @@ vio/test-sslserver
|
|||||||
vio/viotest-ssl
|
vio/viotest-ssl
|
||||||
sql_error.cc
|
sql_error.cc
|
||||||
sql_prepare.cc
|
sql_prepare.cc
|
||||||
|
autom4te.cache/*
|
||||||
|
innobase/autom4te.cache/*
|
||||||
|
configure.lineno
|
||||||
|
innobase/configure.lineno
|
||||||
|
innobase/stamp-h1
|
||||||
|
myisam/rt_test.MYD
|
||||||
|
myisam/rt_test.MYI
|
||||||
|
stamp-h1
|
||||||
|
@ -57,6 +57,7 @@ enum ha_rkey_function {
|
|||||||
HA_READ_BEFORE_KEY, /* Find next rec. before key-record */
|
HA_READ_BEFORE_KEY, /* Find next rec. before key-record */
|
||||||
HA_READ_PREFIX, /* Key which as same prefix */
|
HA_READ_PREFIX, /* Key which as same prefix */
|
||||||
HA_READ_PREFIX_LAST, /* Last key with the same prefix */
|
HA_READ_PREFIX_LAST, /* Last key with the same prefix */
|
||||||
|
HA_READ_PREFIX_LAST_OR_PREV, /* Last or prev key with the same prefix */
|
||||||
HA_READ_MBR_CONTAIN,
|
HA_READ_MBR_CONTAIN,
|
||||||
HA_READ_MBR_INTERSECT,
|
HA_READ_MBR_INTERSECT,
|
||||||
HA_READ_MBR_WITHIN,
|
HA_READ_MBR_WITHIN,
|
||||||
|
@ -132,7 +132,7 @@ int _mi_search(register MI_INFO *info, register MI_KEYDEF *keyinfo,
|
|||||||
if (_mi_get_prev_key(info,keyinfo, buff, info->lastkey, keypos,
|
if (_mi_get_prev_key(info,keyinfo, buff, info->lastkey, keypos,
|
||||||
&info->lastkey_length))
|
&info->lastkey_length))
|
||||||
goto err;
|
goto err;
|
||||||
if ((nextflag & SEARCH_LAST) &&
|
if (!(nextflag & SEARCH_SMALLER) &&
|
||||||
ha_key_cmp(keyinfo->seg, info->lastkey, key, key_len, SEARCH_FIND,
|
ha_key_cmp(keyinfo->seg, info->lastkey, key, key_len, SEARCH_FIND,
|
||||||
¬_used))
|
¬_used))
|
||||||
{
|
{
|
||||||
|
@ -51,12 +51,12 @@ uint NEAR myisam_read_vec[]=
|
|||||||
{
|
{
|
||||||
SEARCH_FIND, SEARCH_FIND | SEARCH_BIGGER, SEARCH_FIND | SEARCH_SMALLER,
|
SEARCH_FIND, SEARCH_FIND | SEARCH_BIGGER, SEARCH_FIND | SEARCH_SMALLER,
|
||||||
SEARCH_NO_FIND | SEARCH_BIGGER, SEARCH_NO_FIND | SEARCH_SMALLER,
|
SEARCH_NO_FIND | SEARCH_BIGGER, SEARCH_NO_FIND | SEARCH_SMALLER,
|
||||||
SEARCH_FIND | SEARCH_PREFIX, SEARCH_LAST,
|
SEARCH_FIND | SEARCH_PREFIX, SEARCH_LAST, SEARCH_LAST | SEARCH_SMALLER,
|
||||||
MBR_CONTAIN, MBR_INTERSECT, MBR_WITHIN, MBR_DISJOINT, MBR_EQUAL
|
MBR_CONTAIN, MBR_INTERSECT, MBR_WITHIN, MBR_DISJOINT, MBR_EQUAL
|
||||||
};
|
};
|
||||||
|
|
||||||
uint NEAR myisam_readnext_vec[]=
|
uint NEAR myisam_readnext_vec[]=
|
||||||
{
|
{
|
||||||
SEARCH_BIGGER, SEARCH_BIGGER, SEARCH_SMALLER, SEARCH_BIGGER, SEARCH_SMALLER,
|
SEARCH_BIGGER, SEARCH_BIGGER, SEARCH_SMALLER, SEARCH_BIGGER, SEARCH_SMALLER,
|
||||||
SEARCH_BIGGER, SEARCH_SMALLER
|
SEARCH_BIGGER, SEARCH_SMALLER, SEARCH_SMALLER
|
||||||
};
|
};
|
||||||
|
@ -2705,20 +2705,28 @@ int QUICK_SELECT_DESC::get_next()
|
|||||||
}
|
}
|
||||||
else
|
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
|
/* 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
|
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,
|
key columns specified, we must use below HA_READ_KEY_OR_NEXT,
|
||||||
so that InnoDB stores the cursor position and is able to move
|
so that InnoDB stores the cursor position and is able to move
|
||||||
the cursor one step backward after the search. */
|
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
|
/* 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 */
|
* do the right thing - go past all keys which match the prefix */
|
||||||
|
|
||||||
result=file->index_read(record, (byte*) range->max_key,
|
result=file->index_read(record, (byte*) range->max_key,
|
||||||
range->max_length,
|
range->max_length,
|
||||||
((range->flag & NEAR_MAX) ?
|
((range->flag & NEAR_MAX) ?
|
||||||
HA_READ_KEY_OR_NEXT : HA_READ_AFTER_KEY));
|
HA_READ_KEY_OR_NEXT : HA_READ_AFTER_KEY));
|
||||||
result = file->index_prev(record);
|
result = file->index_prev(record);
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
if (result)
|
if (result)
|
||||||
{
|
{
|
||||||
|
@ -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[]=
|
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,
|
int mysql_ha_read(THD *thd, TABLE_LIST *tables,
|
||||||
|
Loading…
x
Reference in New Issue
Block a user