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,
|
static int check_one_key(HP_KEYDEF *keydef, uint keynr, ulong records,
|
||||||
ulong blength, my_bool print_status);
|
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 */
|
/* 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;
|
int error;
|
||||||
uint key;
|
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++)
|
for (error=key=0 ; key < share->keys ; key++)
|
||||||
{
|
{
|
||||||
if (!(share->keydef[key].algorithm == HA_KEY_ALG_BTREE))
|
if (share->keydef[key].algorithm == HA_KEY_ALG_BTREE)
|
||||||
error|=check_one_key(share->keydef+key,key, share->records,share->blength,
|
error|= check_one_rb_key(info, key, share->records, print_status);
|
||||||
print_status);
|
else
|
||||||
|
error|= check_one_key(share->keydef + key, key, share->records,
|
||||||
|
share->blength, print_status);
|
||||||
}
|
}
|
||||||
|
|
||||||
DBUG_RETURN(error);
|
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));
|
(float) seek / (float) (records ? records : 1));
|
||||||
return error;
|
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