Commit 85388703 authored by monty@hundin.mysql.fi's avatar monty@hundin.mysql.fi

Fixed length rows should not use row checksum in MyISAM tables

Fixed bug in handling of packed MyISAM keys
parent 65600db5
...@@ -164,6 +164,9 @@ int mi_create(const char *name,uint keys,MI_KEYDEF *keydefs, ...@@ -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, ...@@ -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, ...@@ -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) ...@@ -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;
} }
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment