00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019 #include "myisam_priv.h"
00020
00021 int mi_delete_all_rows(MI_INFO *info)
00022 {
00023 uint32_t i;
00024 MYISAM_SHARE *share=info->s;
00025 MI_STATE_INFO *state=&share->state;
00026
00027 if (share->options & HA_OPTION_READ_ONLY_DATA)
00028 {
00029 return(errno=EACCES);
00030 }
00031 if (_mi_readinfo(info,F_WRLCK,1))
00032 return(errno);
00033 if (_mi_mark_file_changed(info))
00034 goto err;
00035
00036 info->state->records=info->state->del=state->split=0;
00037 state->dellink = HA_OFFSET_ERROR;
00038 state->sortkey= UINT16_MAX;
00039 info->state->key_file_length=share->base.keystart;
00040 info->state->data_file_length=0;
00041 info->state->empty=info->state->key_empty=0;
00042 info->state->checksum=0;
00043
00044 for (i=share->base.max_key_block_length/MI_MIN_KEY_BLOCK_LENGTH ; i-- ; )
00045 state->key_del[i]= HA_OFFSET_ERROR;
00046 for (i=0 ; i < share->base.keys ; i++)
00047 state->key_root[i]= HA_OFFSET_ERROR;
00048
00049
00050
00051
00052
00053 flush_key_blocks(share->getKeyCache(), share->kfile, FLUSH_IGNORE_CHANGED);
00054 if (ftruncate(info->dfile, 0) || ftruncate(share->kfile, share->base.keystart))
00055 goto err;
00056 _mi_writeinfo(info,WRITEINFO_UPDATE_KEYFILE);
00057 return(0);
00058
00059 err:
00060 {
00061 int save_errno=errno;
00062 _mi_writeinfo(info,WRITEINFO_UPDATE_KEYFILE);
00063 info->update|=HA_STATE_WRITTEN;
00064 return(errno=save_errno);
00065 }
00066 }