summaryrefslogtreecommitdiff
path: root/innobase/rem
diff options
context:
space:
mode:
authorunknown <jan@hundin.mysql.fi>2004-09-03 15:26:29 +0300
committerunknown <jan@hundin.mysql.fi>2004-09-03 15:26:29 +0300
commitbbd402dc4f45947ff282775eea7b921c66667058 (patch)
treebb1dba9818e4bb46971804c5f7b810602a9a6d25 /innobase/rem
parent3e3981b558befa08a3278f86e5fd0a12417abba1 (diff)
downloadmariadb-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.c34
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);