summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorunknown <bar@bar.intranet.mysql.r18.ru>2004-03-25 16:15:52 +0400
committerunknown <bar@bar.intranet.mysql.r18.ru>2004-03-25 16:15:52 +0400
commit7674fd064c7a2d8b2efec1ee8d7b4eaae0dd7fc5 (patch)
tree409ca2309c9bbd7900c64a6bfafa1718815520d5
parent65bed530a8707081c203e1efd00f57cd7e3f0351 (diff)
downloadmariadb-git-7674fd064c7a2d8b2efec1ee8d7b4eaae0dd7fc5.tar.gz
Bug #3290 [Ver]: Can't convert sjis&ujis half-width katakana correctly
UJIS part fix
-rw-r--r--mysql-test/r/ctype_ujis.result28
-rw-r--r--mysql-test/t/ctype_ujis.test20
-rw-r--r--strings/ctype-ujis.c29
3 files changed, 60 insertions, 17 deletions
diff --git a/mysql-test/r/ctype_ujis.result b/mysql-test/r/ctype_ujis.result
index 1730b17eaed..b66ede3bed4 100644
--- a/mysql-test/r/ctype_ujis.result
+++ b/mysql-test/r/ctype_ujis.result
@@ -64,3 +64,31 @@ select 'A' like 'a';
select 'A' like 'a' collate ujis_bin;
'A' like 'a' collate ujis_bin
0
+set @ujis1= _ujis 0x8EA18EA28EA38EA48EA58EA68EA78EA88EA98EAA8EAB8EAC8EAD8EAE8EAF;
+set @ujis2= _ujis 0x8EB08EB18EB28EB38EB48EB58EB68EB78EB88EB98EBA8EBB8EBC8EBD8EBE8EBF;
+set @ujis3= _ujis 0x8EC08EC18EC28EC38EC48EC58EC68EC78EC88EC98ECA8ECB8ECC8ECD8ECE8ECF;
+set @ujis4= _ujis 0x8ED08ED18ED28ED38ED48ED58ED68ED78ED88ED98EDA8EDB8EDC8EDD8EDE8EDF;
+select hex(@utf81:= CONVERT(@ujis1 USING utf8));
+hex(@utf81:= CONVERT(@ujis1 USING utf8))
+EFBDA1EFBDA2EFBDA3EFBDA4EFBDA5EFBDA6EFBDA7EFBDA8EFBDA9EFBDAAEFBDABEFBDACEFBDADEFBDAEEFBDAF
+select hex(@utf82:= CONVERT(@ujis2 USING utf8));
+hex(@utf82:= CONVERT(@ujis2 USING utf8))
+EFBDB0EFBDB1EFBDB2EFBDB3EFBDB4EFBDB5EFBDB6EFBDB7EFBDB8EFBDB9EFBDBAEFBDBBEFBDBCEFBDBDEFBDBEEFBDBF
+select hex(@utf83:= CONVERT(@ujis3 USING utf8));
+hex(@utf83:= CONVERT(@ujis3 USING utf8))
+EFBE80EFBE81EFBE82EFBE83EFBE84EFBE85EFBE86EFBE87EFBE88EFBE89EFBE8AEFBE8BEFBE8CEFBE8DEFBE8EEFBE8F
+select hex(@utf84:= CONVERT(@ujis4 USING utf8));
+hex(@utf84:= CONVERT(@ujis4 USING utf8))
+EFBE90EFBE91EFBE92EFBE93EFBE94EFBE95EFBE96EFBE97EFBE98EFBE99EFBE9AEFBE9BEFBE9CEFBE9DEFBE9EEFBE9F
+select @ujis1 = CONVERT(@utf81 USING ujis);
+@ujis1 = CONVERT(@utf81 USING ujis)
+1
+select @ujis2 = CONVERT(@utf82 USING ujis);
+@ujis2 = CONVERT(@utf82 USING ujis)
+1
+select @ujis3 = CONVERT(@utf83 USING ujis);
+@ujis3 = CONVERT(@utf83 USING ujis)
+1
+select @ujis4 = CONVERT(@utf84 USING ujis);
+@ujis4 = CONVERT(@utf84 USING ujis)
+1
diff --git a/mysql-test/t/ctype_ujis.test b/mysql-test/t/ctype_ujis.test
index bcf6507b4c7..abfded5a6c2 100644
--- a/mysql-test/t/ctype_ujis.test
+++ b/mysql-test/t/ctype_ujis.test
@@ -41,3 +41,23 @@ select _ujis 0xa1a2a1a3 like concat(_ujis'%',_ujis 0xa2a1, _ujis'%') collate uji
select 'a' like 'a';
select 'A' like 'a';
select 'A' like 'a' collate ujis_bin;
+
+#
+# Bug 3290: Hald-width Katakana conversion problem.
+# Check ujis-utf8-ujis round trip.
+#
+set @ujis1= _ujis 0x8EA18EA28EA38EA48EA58EA68EA78EA88EA98EAA8EAB8EAC8EAD8EAE8EAF;
+set @ujis2= _ujis 0x8EB08EB18EB28EB38EB48EB58EB68EB78EB88EB98EBA8EBB8EBC8EBD8EBE8EBF;
+set @ujis3= _ujis 0x8EC08EC18EC28EC38EC48EC58EC68EC78EC88EC98ECA8ECB8ECC8ECD8ECE8ECF;
+set @ujis4= _ujis 0x8ED08ED18ED28ED38ED48ED58ED68ED78ED88ED98EDA8EDB8EDC8EDD8EDE8EDF;
+
+select hex(@utf81:= CONVERT(@ujis1 USING utf8));
+select hex(@utf82:= CONVERT(@ujis2 USING utf8));
+select hex(@utf83:= CONVERT(@ujis3 USING utf8));
+select hex(@utf84:= CONVERT(@ujis4 USING utf8));
+
+select @ujis1 = CONVERT(@utf81 USING ujis);
+select @ujis2 = CONVERT(@utf82 USING ujis);
+select @ujis3 = CONVERT(@utf83 USING ujis);
+select @ujis4 = CONVERT(@utf84 USING ujis);
+
diff --git a/strings/ctype-ujis.c b/strings/ctype-ujis.c
index 997618d7645..51b7cd4f7d7 100644
--- a/strings/ctype-ujis.c
+++ b/strings/ctype-ujis.c
@@ -8342,18 +8342,14 @@ my_mb_wc_euc_jp(CHARSET_INFO *cs,my_wc_t *pwc, const uchar *s, const uchar *e)
static int
my_wc_mb_euc_jp(CHARSET_INFO *c,my_wc_t wc, unsigned char *s, unsigned char *e)
{
- unsigned char buf[2];
unsigned char c1;
- int ret,jp;
-
+ int jp;
+
if (s >= e)
return MY_CS_TOOSMALL;
if ((int) wc < 0x80)
{
- if (s>e)
- return MY_CS_TOOSMALL;
-
*s= (uchar) wc;
return 1;
}
@@ -8368,22 +8364,21 @@ my_wc_mb_euc_jp(CHARSET_INFO *c,my_wc_t wc, unsigned char *s, unsigned char *e)
s[1]=jp&0xFF;
return 2;
}
-
- ret=my_wc_mb_jisx0201(c,wc,buf,buf+2);
- if (ret==1)
+
+ /* Half width Katakana */
+ if (my_wc_mb_jisx0201(c,wc,s,e) == 1)
{
- if (s+1>e)
+ if (s+2>e)
return MY_CS_TOOSMALL;
-
- s[0]=0x8E;
- s[1]=buf[0];
- return 1;
+ s[1]= s[0];
+ s[0]= 0x8E;
+ return 2;
}
-
+
if ((jp=my_uni_jisx0212_onechar(wc)))
{
- if (s+2>e)
+ if (s+3>e)
return MY_CS_TOOSMALL;
jp+=0x8080;
@@ -8393,7 +8388,7 @@ my_wc_mb_euc_jp(CHARSET_INFO *c,my_wc_t wc, unsigned char *s, unsigned char *e)
return 3;
}
-
+
/* User defined range */
if (wc>=0xE000 && wc<0xE3AC)
{