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))
|
if (packed || (flags & HA_PACK_RECORD))
|
||||||
options|=HA_OPTION_PACK_RECORD; /* Must use packed records */
|
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))
|
if (options & (HA_OPTION_PACK_RECORD | HA_OPTION_COMPRESS_RECORD))
|
||||||
min_pack_length+=varchar_count; /* Min length to pack */
|
min_pack_length+=varchar_count; /* Min length to pack */
|
||||||
else
|
else
|
||||||
@ -445,7 +448,7 @@ int mi_create(const char *name,uint keys,MI_KEYDEF *keydefs,
|
|||||||
share.base.records=ci->max_rows;
|
share.base.records=ci->max_rows;
|
||||||
share.base.reloc= ci->reloc_rows;
|
share.base.reloc= ci->reloc_rows;
|
||||||
share.base.reclength=real_reclength;
|
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.max_pack_length=pack_reclength;
|
||||||
share.base.min_pack_length=min_pack_length;
|
share.base.min_pack_length=min_pack_length;
|
||||||
share.base.pack_bits=packed;
|
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)
|
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;
|
break;
|
||||||
goto fix_flag;
|
goto fix_flag;
|
||||||
}
|
}
|
||||||
|
@ -73,7 +73,7 @@ int _mi_write_static_record(MI_INFO *info, const byte *record)
|
|||||||
bzero((char*) temp,length);
|
bzero((char*) temp,length);
|
||||||
if (my_pwrite(info->dfile, (byte*) temp,length,
|
if (my_pwrite(info->dfile, (byte*) temp,length,
|
||||||
info->state->data_file_length+
|
info->state->data_file_length+
|
||||||
info->s->base.pack_reclength,
|
info->s->base.reclength,
|
||||||
info->s->write_flag))
|
info->s->write_flag))
|
||||||
goto err;
|
goto err;
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user