summaryrefslogtreecommitdiff
path: root/myisam/mi_key.c
diff options
context:
space:
mode:
authorunknown <monty@mysql.com>2004-12-18 06:05:16 +0200
committerunknown <monty@mysql.com>2004-12-18 06:05:16 +0200
commite8b60b16121a68111e84c6a8671a3ebde9500d5d (patch)
tree8e8581b17151730ec13c7ed6ec00128c62a192a8 /myisam/mi_key.c
parent491baa972a2a2f373ae4dd3a1de2470169527326 (diff)
parent8eaef91fff849885a7369a21a752e87cb1e592c8 (diff)
downloadmariadb-git-e8b60b16121a68111e84c6a8671a3ebde9500d5d.tar.gz
Merge with global tree
myisam/mi_key.c: Auto merged myisam/mi_open.c: Auto merged mysql-test/r/information_schema.result: Auto merged mysql-test/r/ps_1general.result: Auto merged mysys/my_handler.c: Auto merged sql/field.cc: Auto merged sql/field.h: Auto merged sql/field_conv.cc: Auto merged sql/ha_myisam.cc: Auto merged sql/sql_parse.cc: Auto merged sql/sql_select.cc: Auto merged sql/sql_show.cc: Auto merged sql/sql_table.cc: Auto merged include/my_base.h: Merge
Diffstat (limited to 'myisam/mi_key.c')
-rw-r--r--myisam/mi_key.c31
1 files changed, 23 insertions, 8 deletions
diff --git a/myisam/mi_key.c b/myisam/mi_key.c
index c1400033254..caca63452b0 100644
--- a/myisam/mi_key.c
+++ b/myisam/mi_key.c
@@ -34,10 +34,20 @@
static int _mi_put_key_in_record(MI_INFO *info,uint keynr,byte *record);
- /*
- ** Make a intern key from a record
- ** Ret: Length of key
- */
+/*
+ Make a intern key from a record
+
+ SYNOPSIS
+ _mi_make_key()
+ info MyiSAM handler
+ keynr key number
+ key Store created key here
+ record Record
+ filepos Position to record in the data file
+
+ RETURN
+ Length of key
+*/
uint _mi_make_key(register MI_INFO *info, uint keynr, uchar *key,
const byte *record, my_off_t filepos)
@@ -117,8 +127,10 @@ uint _mi_make_key(register MI_INFO *info, uint keynr, uchar *key,
}
if (keyseg->flag & HA_VAR_LENGTH_PART)
{
- uint tmp_length=uint2korr(pos);
- pos+=2; /* Skip VARCHAR length */
+ uint pack_length= keyseg->bit_start;
+ uint tmp_length= (pack_length == 1 ? (uint) *(uchar*) pos :
+ uint2korr(pos));
+ pos+= pack_length; /* Skip VARCHAR length */
set_if_smaller(length,tmp_length);
FIX_LENGTH(cs, pos, length, char_length);
store_key_length_inc(key,char_length);
@@ -398,9 +410,12 @@ static int _mi_put_key_in_record(register MI_INFO *info, uint keynr,
goto err;
#endif
/* Store key length */
- int2store(record+keyseg->start, length);
+ if (keyseg->bit_start == 1)
+ *(uchar*) (record+keyseg->start)= (uchar) length;
+ else
+ int2store(record+keyseg->start, length);
/* And key data */
- memcpy(record+keyseg->start+2,(byte*) key, length);
+ memcpy(record+keyseg->start + keyseg->bit_start, (byte*) key, length);
key+= length;
}
else if (keyseg->flag & HA_BLOB_PART)