diff options
author | unknown <jan@hundin.mysql.fi> | 2004-09-03 15:26:29 +0300 |
---|---|---|
committer | unknown <jan@hundin.mysql.fi> | 2004-09-03 15:26:29 +0300 |
commit | bbd402dc4f45947ff282775eea7b921c66667058 (patch) | |
tree | bb1dba9818e4bb46971804c5f7b810602a9a6d25 /innobase/rem | |
parent | 3e3981b558befa08a3278f86e5fd0a12417abba1 (diff) | |
download | mariadb-git-bbd402dc4f45947ff282775eea7b921c66667058.tar.gz |
Fixed unique prefix key bug for multibyte character sets (BUG #4521) for
InnoDB. This fixes also a second part of the same problem with prefix keys
on a multibyte string column for InnoDB.
innobase/btr/btr0btr.c:
Multibyte character set prefix indexes are not any more fixed size. Therefore,
we have to chect that length of the index field in not greater than
prefix length.
innobase/rem/rem0cmp.c:
Remove unnecessary changes.
innobase/row/row0ins.c:
Fixed unique prefix key or prefix key using multibyte character set bugs for
InnoDB (BUG #4521). For prefix keys we have to get the storage length
for the prefix length of characters in the key.
innobase/row/row0row.c:
Fixed unique prefix key or prefix key using multibyte character set bugs for
InnoDB (BUG #4521). For prefix keys we have to get the storage length
for the prefix length of characters in the key.
innobase/row/row0sel.c:
Fixed unique prefix key or prefix key using multibyte character set bugs for
InnoDB (BUG #4521). For prefix keys we have to get the storage length
for the prefix length of characters in the key.
innobase/row/row0upd.c:
Fixed unique prefix key or prefix key using multibyte character set bugs for
InnoDB (BUG #4521). For prefix keys we have to get the storage length
for the prefix length of characters in the key.
mysql-test/r/ctype_utf8.result:
Added utf8 character test cases for InnoDB.
mysql-test/t/ctype_utf8.test:
Added utf8 character expected test results for InnoDB.
sql/ha_innodb.cc:
Added function innobase_get_at_most_n_mbchars to return position of
the nth character in the multibyte character string.
sql/ha_innodb.h:
Remove unnecessary changes.
Diffstat (limited to 'innobase/rem')
-rw-r--r-- | innobase/rem/rem0cmp.c | 34 |
1 files changed, 2 insertions, 32 deletions
diff --git a/innobase/rem/rem0cmp.c b/innobase/rem/rem0cmp.c index f6c82102839..041fb7914e2 100644 --- a/innobase/rem/rem0cmp.c +++ b/innobase/rem/rem0cmp.c @@ -14,9 +14,6 @@ Created 7/1/1994 Heikki Tuuri #include "srv0srv.h" -#include <m_ctype.h> -#include <my_sys.h> - /* ALPHABETICAL ORDER ================== @@ -455,8 +452,6 @@ cmp_dtuple_rec_with_match( ulint cur_bytes; /* number of already matched bytes in current field */ int ret = 3333; /* return value */ - - CHARSET_INFO* charset; /* charset used in the field */ ut_ad(dtuple && rec && matched_fields && matched_bytes); ut_ad(dtuple_check_typed(dtuple)); @@ -546,33 +541,8 @@ cmp_dtuple_rec_with_match( && dtype_get_charset_coll(cur_type->prtype) != data_mysql_latin1_swedish_charset_coll)) { - /* If character set is not latin1_swedish - we have to devide character length by the - maximum bytes needed for that character - set. For example if we have unique prefix - index for 1 utf8 character then we have - actually 3 bytes allocated in the index. - Therefore, we have to divide that with - maximum bytes needed for utf8 character i.e. - 3 byges.*/ - - if ( dtuple_f_len > 0) { - charset = get_charset( - dtype_get_charset_coll(cur_type->prtype), - MYF(MY_WME)); - - ut_ad(charset); - ut_ad(charset->mbmaxlen); - - dtuple_f_len = dtuple_f_len / charset->mbmaxlen; - - if ( dtuple_f_len == 0) - dtuple_f_len = 1; - - rec_f_len = dtuple_f_len; - } - - ret = cmp_whole_field(cur_type, + ret = cmp_whole_field( + cur_type, dfield_get_data(dtuple_field), dtuple_f_len, rec_b_ptr, rec_f_len); |