Commit 65255d35 authored by unknown's avatar unknown
Browse files

don't check record's checksum in REPAIR


myisam/mi_dynrec.c:
  new parameter for _mi_rec_check().
myisam/myisamdef.h:
  new parameter for _mi_rec_check().
parent 93b4fbea
Loading
Loading
Loading
Loading
+5 −2
Original line number Diff line number Diff line
@@ -971,7 +971,8 @@ int chk_data_link(MI_CHECK *param, MI_INFO *info,int extend)
	  info->checksum=mi_checksum(info,record);
	  if (param->testflag & (T_EXTEND | T_MEDIUM | T_VERBOSE))
	  {
	    if (_mi_rec_check(info,record, info->rec_buff,block_info.rec_len))
	    if (_mi_rec_check(info,record, info->rec_buff,block_info.rec_len,
                              test(info->s->calc_checksum)))
	    {
	      mi_check_print_error(param,"Found wrong packed record at %s",
			  llstr(start_recpos,llbuff));
@@ -3024,7 +3025,9 @@ static int sort_get_next_record(MI_SORT_PARAM *sort_param)
	if ((param->testflag & (T_EXTEND | T_REP)) || searching)
	{
	  if (_mi_rec_check(info, sort_param->record, sort_param->rec_buff,
                            sort_param->find_length))
                            sort_param->find_length,
                            (param->testflag & T_QUICK) &&
                            test(info->s->calc_checksum)))
	  {
	    mi_check_print_info(param,"Found wrong packed record at %s",
				llstr(sort_param->start_recpos,llbuff));
+4 −7
Original line number Diff line number Diff line
@@ -806,7 +806,7 @@ uint _mi_rec_pack(MI_INFO *info, register byte *to, register const byte *from)
*/

my_bool _mi_rec_check(MI_INFO *info,const char *record, byte *rec_buff,
                      ulong packed_length)
                      ulong packed_length, my_bool with_checksum)
{
  uint		length,new_length,flag,bit,i;
  char		*pos,*end,*packpos,*to;
@@ -901,14 +901,11 @@ my_bool _mi_rec_check(MI_INFO *info,const char *record, byte *rec_buff,
  if (packed_length != (uint) (to - rec_buff) + test(info->s->calc_checksum) ||
      (bit != 1 && (flag & ~(bit - 1))))
    goto err;
  if (info->s->calc_checksum)
  {
    if ((uchar) info->checksum != (uchar) *to)
  if (with_checksum && ((uchar) info->checksum != (uchar) *to))
  {
    DBUG_PRINT("error",("wrong checksum for row"));
    goto err;
  }
  }
  DBUG_RETURN(0);

err:
+1 −1
Original line number Diff line number Diff line
@@ -582,7 +582,7 @@ extern byte *mi_alloc_rec_buff(MI_INFO *,ulong, byte**);
extern ulong _mi_rec_unpack(MI_INFO *info,byte *to,byte *from,
			    ulong reclength);
extern my_bool _mi_rec_check(MI_INFO *info,const char *record, byte *packpos,
                             ulong reclength);
                             ulong packed_length, my_bool with_checkum);
extern int _mi_write_part_record(MI_INFO *info,my_off_t filepos,ulong length,
				 my_off_t next_filepos,byte **record,
				 ulong *reclength,int *flag);