summaryrefslogtreecommitdiff
path: root/myisam
diff options
context:
space:
mode:
authorunknown <monty@mashka.mysql.fi>2003-01-16 20:47:46 +0200
committerunknown <monty@mashka.mysql.fi>2003-01-16 20:47:46 +0200
commit90b2534f8f8fda105fdda2731273ba839b328da3 (patch)
treee1fdb60db4adfe4fafddb5d063b62fbb7cff6326 /myisam
parentef3091541e34703138e1c9f2fa5037faefaf20ba (diff)
parent3d00544c0f101cdadb52126245c534a62578ad91 (diff)
downloadmariadb-git-90b2534f8f8fda105fdda2731273ba839b328da3.tar.gz
Merge with 3.23
innobase/btr/btr0btr.c: Auto merged ltconfig: Auto merged innobase/include/btr0btr.h: Auto merged innobase/log/log0log.c: Auto merged libmysql/Makefile.shared: Auto merged man/isamlog.1: Auto merged man/mysql.1: Auto merged man/mysql_zap.1: Auto merged man/isamchk.1: Auto merged man/mysqlaccess.1: Auto merged man/mysqladmin.1: Auto merged man/mysqld_multi.1: Auto merged man/mysqld.1: Auto merged man/mysqld_safe.1: Auto merged man/mysqldump.1: Auto merged man/mysqlshow.1: Auto merged man/replace.1: Auto merged myisam/mi_unique.c: Auto merged scripts/mysqld_safe.sh: Auto merged sql/net_pkg.cc: Auto merged sql/sql_table.cc: Auto merged strings/Makefile.am: Auto merged man/perror.1: Auto merged Makefile.am: merge with 3.23 client/mysqltest.c: merge with 3.23 innobase/btr/btr0pcur.c: merge with 3.23 (use local file) innobase/row/row0purge.c: merge with 3.23 (use local file) scripts/mysql_fix_privilege_tables.sh: Merge with 3.23 (Apply debian patches) sql/ha_innodb.cc: merge with 3.23 (use local file) sql/mysqld.cc: Merge with 3.23 (use local file) sql/net_serv.cc: Merge with 3.23 (use local file) sql/sql_db.cc: Merge with 3.23 (use local file)
Diffstat (limited to 'myisam')
-rw-r--r--myisam/mi_create.c4
-rw-r--r--myisam/mi_unique.c11
2 files changed, 12 insertions, 3 deletions
diff --git a/myisam/mi_create.c b/myisam/mi_create.c
index 8aa2dd53027..184f126a5b6 100644
--- a/myisam/mi_create.c
+++ b/myisam/mi_create.c
@@ -228,7 +228,7 @@ int mi_create(const char *name,uint keys,MI_KEYDEF *keydefs,
if (uniques)
{
max_key_block_length= myisam_block_size;
- max_key_length= MI_UNIQUE_HASH_LENGTH;
+ max_key_length= MI_UNIQUE_HASH_LENGTH + pointer;
}
for (i=0, keydef=keydefs ; i < keys ; i++ , keydef++)
@@ -449,7 +449,7 @@ int mi_create(const char *name,uint keys,MI_KEYDEF *keydefs,
share.base.keystart = share.state.state.key_file_length=
MY_ALIGN(info_length, myisam_block_size);
share.base.max_key_block_length=max_key_block_length;
- share.base.max_key_length=ALIGN_SIZE(max_key_length+4);
+ share.base.max_key_length=ALIGN_SIZE(max_key_length[+4);
share.base.records=ci->max_rows;
share.base.reloc= ci->reloc_rows;
share.base.reclength=real_reclength;
diff --git a/myisam/mi_unique.c b/myisam/mi_unique.c
index b373693e6e0..ddba40214e7 100644
--- a/myisam/mi_unique.c
+++ b/myisam/mi_unique.c
@@ -24,7 +24,7 @@ my_bool mi_check_unique(MI_INFO *info, MI_UNIQUEDEF *def, byte *record,
{
my_off_t lastpos=info->lastpos;
MI_KEYDEF *key= &info->s->keyinfo[def->key];
- uchar *key_buff=info->lastkey+info->s->base.max_key_length;
+ uchar *key_buff=info->lastkey2;
DBUG_ENTER("mi_check_unique");
mi_unique_store(record+key->seg->start, unique_hash);
@@ -80,7 +80,16 @@ ha_checksum mi_unique_hash(MI_UNIQUEDEF *def, const byte *record)
if (keyseg->null_bit)
{
if (record[keyseg->null_pos] & keyseg->null_bit)
+ {
+ /*
+ Change crc in a way different from an empty string or 0.
+ (This is an optimisation; The code will work even if this isn't
+ done)
+ */
+ crc=((crc << 8) + 511+
+ (crc >> (8*sizeof(ha_checksum)-8)));
continue;
+ }
}
pos= record+keyseg->start;
if (keyseg->flag & HA_VAR_LENGTH)