Merge rkalimullin@work.mysql.com:/home/bk/mysql-4.1
into mysql.r18.ru:/usr/home/ram/mysql-4.1
This commit is contained in:
commit
683d777ad8
19
mysys/tree.c
19
mysys/tree.c
@ -336,12 +336,11 @@ void *tree_search_key(TREE *tree, const void *key,
|
||||
{
|
||||
int cmp;
|
||||
TREE_ELEMENT *element= tree->root;
|
||||
TREE_ELEMENT **last_left_step_parent = NULL;
|
||||
TREE_ELEMENT **last_left_step_parent= NULL, **last_right_step_parent= NULL;
|
||||
TREE_ELEMENT **last_equal_element= NULL;
|
||||
|
||||
/*
|
||||
TODO: handle HA_READ_KEY_OR_PREV, HA_READ_BEFORE_KEY, HA_READ_PREFIX,
|
||||
HA_READ_PREFIX_LAST flags if needed.
|
||||
TODO: support for HA_READ_KEY_OR_PREV, HA_READ_PREFIX flags if needed.
|
||||
*/
|
||||
|
||||
*parents = &tree->null_element;
|
||||
@ -354,18 +353,25 @@ void *tree_search_key(TREE *tree, const void *key,
|
||||
switch (flag) {
|
||||
case HA_READ_KEY_EXACT:
|
||||
case HA_READ_KEY_OR_NEXT:
|
||||
case HA_READ_BEFORE_KEY:
|
||||
last_equal_element= parents;
|
||||
cmp= 1;
|
||||
break;
|
||||
case HA_READ_AFTER_KEY:
|
||||
cmp= -1;
|
||||
break;
|
||||
case HA_READ_PREFIX_LAST:
|
||||
case HA_READ_PREFIX_LAST_OR_PREV:
|
||||
last_equal_element= parents;
|
||||
cmp= -1;
|
||||
break;
|
||||
default:
|
||||
return NULL;
|
||||
}
|
||||
}
|
||||
if (cmp < 0) /* element < key */
|
||||
{
|
||||
last_right_step_parent= parents;
|
||||
element= element->right;
|
||||
}
|
||||
else
|
||||
@ -376,6 +382,7 @@ void *tree_search_key(TREE *tree, const void *key,
|
||||
}
|
||||
switch (flag) {
|
||||
case HA_READ_KEY_EXACT:
|
||||
case HA_READ_PREFIX_LAST:
|
||||
*last_pos= last_equal_element;
|
||||
break;
|
||||
case HA_READ_KEY_OR_NEXT:
|
||||
@ -384,6 +391,12 @@ void *tree_search_key(TREE *tree, const void *key,
|
||||
case HA_READ_AFTER_KEY:
|
||||
*last_pos= last_left_step_parent;
|
||||
break;
|
||||
case HA_READ_PREFIX_LAST_OR_PREV:
|
||||
*last_pos= last_equal_element ? last_equal_element : last_right_step_parent;
|
||||
break;
|
||||
case HA_READ_BEFORE_KEY:
|
||||
*last_pos= last_right_step_parent;
|
||||
break;
|
||||
default:
|
||||
return NULL;
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user