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:
unknown 2002-11-28 14:04:39 +04:00
commit 683d777ad8

View File

@ -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;
}