summaryrefslogtreecommitdiff
path: root/heap/_check.c
diff options
context:
space:
mode:
authormonty@mashka.mysql.fi <>2002-11-29 16:40:18 +0200
committermonty@mashka.mysql.fi <>2002-11-29 16:40:18 +0200
commit6603d75213d45c9b75f7c5ab9e612663da943f61 (patch)
tree9914e2306a30c63d173b56a8ac8f100ee49823d7 /heap/_check.c
parentfa7798596d409251d542c938b89e1b2e428c5ca7 (diff)
downloadmariadb-git-6603d75213d45c9b75f7c5ab9e612663da943f61.tar.gz
New multi-table-update code
New (simpler) internal timestamp handling. More debuging to heap tables. Small cleanups to multi-table-delete false -> 0 and true -> 1 (We should use TRUE and FALSE)
Diffstat (limited to 'heap/_check.c')
-rw-r--r--heap/_check.c57
1 files changed, 54 insertions, 3 deletions
diff --git a/heap/_check.c b/heap/_check.c
index 03fb664cba9..6cc19aba137 100644
--- a/heap/_check.c
+++ b/heap/_check.c
@@ -21,19 +21,70 @@
static int check_one_key(HP_KEYDEF *keydef, uint keynr, ulong records,
ulong blength, my_bool print_status);
-/* Returns 0 if the HEAP is ok */
+/*
+ Check if keys and rows are ok in a heap table
+
+ SYNOPSIS
+ heap_check_heap()
+ info Table handler
+ print_status Prints some extra status
+
+ NOTES
+ Doesn't change the state of the table handler
+
+ RETURN VALUES
+ 0 ok
+ 1 error
+*/
int heap_check_heap(HP_INFO *info,my_bool print_status)
{
int error;
uint key;
+ ulong records=0, deleted=0, pos, next_block;
HP_SHARE *share=info->s;
- DBUG_ENTER("heap_check_keys");
+ HP_INFO save_info= *info; /* Needed because scan_init */
+ DBUG_ENTER("heap_check_heap");
- for (error=key=0 ; key < share->keys ; key++)
+ for (error=key= 0 ; key < share->keys ; key++)
error|=check_one_key(share->keydef+key,key, share->records,share->blength,
print_status);
+ /*
+ This is basicly the same code as in hp_scan, but we repeat it here to
+ get shorter DBUG log file.
+ */
+ for (pos=next_block= 0 ; ; pos++)
+ {
+ if (pos < next_block)
+ {
+ info->current_ptr+= share->block.recbuffer;
+ }
+ else
+ {
+ next_block+= share->block.records_in_block;
+ if (next_block >= share->records+share->deleted)
+ {
+ next_block= share->records+share->deleted;
+ if (pos >= next_block)
+ break; /* End of file */
+ }
+ }
+ _hp_find_record(info,pos);
+
+ if (!info->current_ptr[share->reclength])
+ deleted++;
+ else
+ records++;
+ }
+
+ if (records != share->records || deleted != share->deleted)
+ {
+ DBUG_PRINT("error",("Found rows: %lu (%lu) deleted %lu (%lu)",
+ records, share->records, deleted, share->deleted));
+ error= 1;
+ }
+ *info= save_info;
DBUG_RETURN(error);
}