summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorunknown <monty@hundin.mysql.fi>2001-06-26 10:23:50 +0300
committerunknown <monty@hundin.mysql.fi>2001-06-26 10:23:50 +0300
commitf246b619153704f78ecc60361470f3f664fc6493 (patch)
treec0fdcacb616884cc66417017b1d2de4754d92d7f
parent4d5dcac35ea0fc25632d17657b3f42af41bd2c7d (diff)
downloadmariadb-git-f246b619153704f78ecc60361470f3f664fc6493.tar.gz
Fixed length rows should not use row checksum in MyISAM tables
Fixed bug in handling of packed MyISAM keys myisam/mi_create.c: Fixed length rows should not use row checksum myisam/mi_search.c: Fixed bug in handling packed keys. myisam/mi_statrec.c: Fixed bug when using --checksum on fixed length rows
-rw-r--r--myisam/mi_create.c5
-rw-r--r--myisam/mi_search.c2
-rw-r--r--myisam/mi_statrec.c2
3 files changed, 6 insertions, 3 deletions
diff --git a/myisam/mi_create.c b/myisam/mi_create.c
index d95941e142a..d3e5e819742 100644
--- a/myisam/mi_create.c
+++ b/myisam/mi_create.c
@@ -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;
diff --git a/myisam/mi_search.c b/myisam/mi_search.c
index b6e85d2c0db..b9dd8879694 100644
--- a/myisam/mi_search.c
+++ b/myisam/mi_search.c
@@ -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;
}
diff --git a/myisam/mi_statrec.c b/myisam/mi_statrec.c
index 7af8c304c0f..e0fce6d3e1c 100644
--- a/myisam/mi_statrec.c
+++ b/myisam/mi_statrec.c
@@ -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;
}