Fixed length rows should not use row checksum in MyISAM tables
Fixed bug in handling of packed MyISAM keys
This commit is contained in:
parent
65600db56d
commit
85388703c4
@ -164,6 +164,9 @@ int mi_create(const char *name,uint keys,MI_KEYDEF *keydefs,
|
||||
|
||||
if (packed || (flags & HA_PACK_RECORD))
|
||||
options|=HA_OPTION_PACK_RECORD; /* Must use packed records */
|
||||
/* We can't use checksum with static length rows */
|
||||
if (!(options & HA_OPTION_PACK_RECORD))
|
||||
options&= ~HA_OPTION_CHECKSUM;
|
||||
if (options & (HA_OPTION_PACK_RECORD | HA_OPTION_COMPRESS_RECORD))
|
||||
min_pack_length+=varchar_count; /* Min length to pack */
|
||||
else
|
||||
@ -445,7 +448,7 @@ int mi_create(const char *name,uint keys,MI_KEYDEF *keydefs,
|
||||
share.base.records=ci->max_rows;
|
||||
share.base.reloc= ci->reloc_rows;
|
||||
share.base.reclength=real_reclength;
|
||||
share.base.pack_reclength=reclength+ test(options & HA_OPTION_CHECKSUM);;
|
||||
share.base.pack_reclength=reclength+ test(options & HA_OPTION_CHECKSUM);
|
||||
share.base.max_pack_length=pack_reclength;
|
||||
share.base.min_pack_length=min_pack_length;
|
||||
share.base.pack_bits=packed;
|
||||
|
@ -417,7 +417,7 @@ int _mi_prefix_search(MI_INFO *info, register MI_KEYDEF *keyinfo, uchar *page,
|
||||
}
|
||||
else if (len > cmplen)
|
||||
{
|
||||
if ((my_flag= (!(nextflag & SEARCH_PREFIX) && key_len_left>0)))
|
||||
if ((my_flag= (!(nextflag & SEARCH_PREFIX) || key_len_left>0)))
|
||||
break;
|
||||
goto fix_flag;
|
||||
}
|
||||
|
@ -73,7 +73,7 @@ int _mi_write_static_record(MI_INFO *info, const byte *record)
|
||||
bzero((char*) temp,length);
|
||||
if (my_pwrite(info->dfile, (byte*) temp,length,
|
||||
info->state->data_file_length+
|
||||
info->s->base.pack_reclength,
|
||||
info->s->base.reclength,
|
||||
info->s->write_flag))
|
||||
goto err;
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user