Merge rkalimullin@work.mysql.com:/home/bk/mysql-4.1
into gw.udmsearch.izhnet.ru:/usr/home/ram/mysql-4.1
This commit is contained in:
commit
016fe78800
@ -20,10 +20,12 @@
|
||||
|
||||
static int check_one_key(HP_KEYDEF *keydef, uint keynr, ulong records,
|
||||
ulong blength, my_bool print_status);
|
||||
static int check_one_rb_key(HP_INFO *info, uint keynr, ulong records,
|
||||
my_bool print_status);
|
||||
|
||||
/* Returns 0 if the HEAP is ok */
|
||||
|
||||
int heap_check_heap(HP_INFO *info,my_bool print_status)
|
||||
int heap_check_heap(HP_INFO *info, my_bool print_status)
|
||||
{
|
||||
int error;
|
||||
uint key;
|
||||
@ -32,9 +34,11 @@ int heap_check_heap(HP_INFO *info,my_bool print_status)
|
||||
|
||||
for (error=key=0 ; key < share->keys ; key++)
|
||||
{
|
||||
if (!(share->keydef[key].algorithm == HA_KEY_ALG_BTREE))
|
||||
error|=check_one_key(share->keydef+key,key, share->records,share->blength,
|
||||
print_status);
|
||||
if (share->keydef[key].algorithm == HA_KEY_ALG_BTREE)
|
||||
error|= check_one_rb_key(info, key, share->records, print_status);
|
||||
else
|
||||
error|= check_one_key(share->keydef + key, key, share->records,
|
||||
share->blength, print_status);
|
||||
}
|
||||
|
||||
DBUG_RETURN(error);
|
||||
@ -90,3 +94,46 @@ static int check_one_key(HP_KEYDEF *keydef, uint keynr, ulong records,
|
||||
(float) seek / (float) (records ? records : 1));
|
||||
return error;
|
||||
}
|
||||
|
||||
static int check_one_rb_key(HP_INFO *info, uint keynr, ulong records,
|
||||
my_bool print_status)
|
||||
{
|
||||
HP_KEYDEF *keydef= info->s->keydef + keynr;
|
||||
int error= 0;
|
||||
ulong found= 0;
|
||||
byte *key, *recpos;
|
||||
uint key_length;
|
||||
uint not_used;
|
||||
|
||||
if ((key= tree_search_edge(&keydef->rb_tree, info->parents,
|
||||
&info->last_pos, offsetof(TREE_ELEMENT, left))))
|
||||
{
|
||||
do
|
||||
{
|
||||
memcpy(&recpos, key + (*keydef->get_key_length)(keydef,key), sizeof(byte*));
|
||||
key_length= hp_rb_make_key(keydef, info->recbuf, recpos, 0);
|
||||
if (ha_key_cmp(keydef->seg, info->recbuf, key, key_length,
|
||||
SEARCH_FIND | SEARCH_SAME, ¬_used))
|
||||
{
|
||||
error= 1;
|
||||
DBUG_PRINT("error",("Record in wrong link: Link %d Record: %lx\n",
|
||||
link, recpos));
|
||||
}
|
||||
else
|
||||
{
|
||||
found++;
|
||||
}
|
||||
key= tree_search_next(&keydef->rb_tree, &info->last_pos,
|
||||
offsetof(TREE_ELEMENT, left),
|
||||
offsetof(TREE_ELEMENT, right));
|
||||
} while (key);
|
||||
}
|
||||
if (found != records)
|
||||
{
|
||||
DBUG_PRINT("error",("Found %ld of %ld records"));
|
||||
error= 1;
|
||||
}
|
||||
if (print_status)
|
||||
printf("Key: %d records: %ld\n", keynr, records);
|
||||
return error;
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user