mirror of
https://github.com/MariaDB/server.git
synced 2025-12-24 11:21:21 +03:00
Merge mysql.com:/home/svoj/devel/mysql/BUG30590/mysql-5.0-engines
into mysql.com:/home/svoj/devel/mysql/BUG30590/mysql-5.1-engines
This commit is contained in:
@@ -33,11 +33,40 @@ int heap_rnext(HP_INFO *info, uchar *record)
|
||||
heap_rb_param custom_arg;
|
||||
|
||||
if (info->last_pos)
|
||||
{
|
||||
/*
|
||||
We enter this branch for non-DELETE queries after heap_rkey()
|
||||
or heap_rfirst(). As last key position (info->last_pos) is available,
|
||||
we only need to climb the tree using tree_search_next().
|
||||
*/
|
||||
pos = tree_search_next(&keyinfo->rb_tree, &info->last_pos,
|
||||
offsetof(TREE_ELEMENT, left),
|
||||
offsetof(TREE_ELEMENT, right));
|
||||
}
|
||||
else if (!info->lastkey_len)
|
||||
{
|
||||
/*
|
||||
We enter this branch only for DELETE queries after heap_rfirst(). E.g.
|
||||
DELETE FROM t1 WHERE a<10. As last key position is not available
|
||||
(last key is removed by heap_delete()), we must restart search as it
|
||||
is done in heap_rfirst().
|
||||
|
||||
It should be safe to handle this situation without this branch. That is
|
||||
branch below should find smallest element in a tree as lastkey_len is
|
||||
zero. tree_search_edge() is a kind of optimisation here as it should be
|
||||
faster than tree_search_key().
|
||||
*/
|
||||
pos= tree_search_edge(&keyinfo->rb_tree, info->parents,
|
||||
&info->last_pos, offsetof(TREE_ELEMENT, left));
|
||||
}
|
||||
else
|
||||
{
|
||||
/*
|
||||
We enter this branch only for DELETE queries after heap_rkey(). E.g.
|
||||
DELETE FROM t1 WHERE a=10. As last key position is not available
|
||||
(last key is removed by heap_delete()), we must restart search as it
|
||||
is done in heap_rkey().
|
||||
*/
|
||||
custom_arg.keyseg = keyinfo->seg;
|
||||
custom_arg.key_length = info->lastkey_len;
|
||||
custom_arg.search_flag = SEARCH_SAME | SEARCH_FIND;
|
||||
|
||||
Reference in New Issue
Block a user