diff options
author | unknown <monty@mashka.mysql.fi> | 2002-11-29 16:40:18 +0200 |
---|---|---|
committer | unknown <monty@mashka.mysql.fi> | 2002-11-29 16:40:18 +0200 |
commit | 4653621909f900200c1e3238a4f5d2f58f6edf29 (patch) | |
tree | 9914e2306a30c63d173b56a8ac8f100ee49823d7 /heap/_check.c | |
parent | 7d2d7e3fea4c46857af1e930e04c0d012a084e25 (diff) | |
download | mariadb-git-4653621909f900200c1e3238a4f5d2f58f6edf29.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)
heap/_check.c:
Added checking of rows
heap/hp_delete.c:
Extra debugging
heap/hp_scan.c:
Extra debugging
heap/hp_update.c:
Extra debugging
heap/hp_write.c:
Extra debugging
include/my_base.h:
Added option to disable row cache when using updates
isam/extra.c:
Added option to disable row cache when using updates
myisam/mi_check.c:
Comment cleanup
myisam/mi_extra.c:
Added option to disable row cache when using updates
myisam/sort.c:
Indentaion cleanups
myisammrg/myrg_extra.c:
Added option to disable row cache when using updates
mysql-test/r/multi_update.result:
Updated results
mysql-test/t/multi_update.test:
Cleanup up to only use table names t1, t2,...
mysys/mf_iocache.c:
Safety fix
sql/item_cmpfunc.cc:
change true-> 1 and false -> 0
sql/mysql_priv.h:
Cleaned up SQL_LIST handling
sql/sql_base.cc:
Fixed grant checking if SELECT tablename.*
sql/sql_class.h:
Cleaned up multi-table-update
sql/sql_delete.cc:
Fixed OPTION_SAFE_UPDATE checking in multi-table-delete.
Fixed query-cache invalidation in multi-table-delete
sql/sql_insert.cc:
cleaned up timestamp handling
sql/sql_olap.cc:
false -> 0
sql/sql_parse.cc:
Optimized some list handling.
Moved multi-table-update to sql_update.cc
sql/sql_select.cc:
More comments
Fixed create_tmp_table for multi-table-update
sql/sql_select.h:
New prototypes
sql/sql_union.cc:
false -> 0
Cleaned up timestamp handling
sql/sql_update.cc:
New multi-update-table code
sql/sql_yacc.yy:
false -> 0, true -> 1
Optimized some list handling
sql/table.h:
Added union for temporary values.
Made shared int to be able to store counters.
sql/uniques.cc:
Indentation cleanup
Diffstat (limited to 'heap/_check.c')
-rw-r--r-- | heap/_check.c | 57 |
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); } |