manual merge

This commit is contained in:
konstantin@mysql.com 2005-01-13 17:31:49 +03:00
commit a676498977
36 changed files with 351 additions and 51 deletions

View file

@ -0,0 +1,15 @@
#
# Set desired charset_connection and collation_collation
# before including this file.
#
# The next query creates a LONGTEXT column
# using the current character_set_connection
# and collation_connection.
create table t1 select repeat('a',4000) a;
delete from t1;
insert into t1 values ('a'), ('a '), ('a\t');
select collation(a),hex(a) from t1 order by a;
drop table t1;

View file

@ -56,3 +56,24 @@ DROP DATABASE d1;
USE test; USE test;
SET character_set_server= @safe_character_set_server; SET character_set_server= @safe_character_set_server;
SET collation_server= @safe_collation_server; SET collation_server= @safe_collation_server;
SET NAMES big5;
SET collation_connection='big5_chinese_ci';
create table t1 select repeat('a',4000) a;
delete from t1;
insert into t1 values ('a'), ('a '), ('a\t');
select collation(a),hex(a) from t1 order by a;
collation(a) hex(a)
big5_chinese_ci 6109
big5_chinese_ci 61
big5_chinese_ci 6120
drop table t1;
SET collation_connection='big5_bin';
create table t1 select repeat('a',4000) a;
delete from t1;
insert into t1 values ('a'), ('a '), ('a\t');
select collation(a),hex(a) from t1 order by a;
collation(a) hex(a)
big5_bin 6109
big5_bin 61
big5_bin 6120
drop table t1;

View file

@ -305,3 +305,23 @@ select 'a' regexp 'A' collate latin1_general_cs;
select 'a' regexp 'A' collate latin1_bin; select 'a' regexp 'A' collate latin1_bin;
'a' regexp 'A' collate latin1_bin 'a' regexp 'A' collate latin1_bin
0 0
SET collation_connection='latin1_swedish_ci';
create table t1 select repeat('a',4000) a;
delete from t1;
insert into t1 values ('a'), ('a '), ('a\t');
select collation(a),hex(a) from t1 order by a;
collation(a) hex(a)
latin1_swedish_ci 6109
latin1_swedish_ci 61
latin1_swedish_ci 6120
drop table t1;
SET collation_connection='latin1_bin';
create table t1 select repeat('a',4000) a;
delete from t1;
insert into t1 values ('a'), ('a '), ('a\t');
select collation(a),hex(a) from t1 order by a;
collation(a) hex(a)
latin1_bin 6109
latin1_bin 61
latin1_bin 6120
drop table t1;

View file

@ -317,3 +317,12 @@ FIELD('ue',s1) FIELD('
1 1 1 1 1 1 1 1
1 1 1 1 1 1 1 1
DROP TABLE t1; DROP TABLE t1;
create table t1 select repeat('a',4000) a;
delete from t1;
insert into t1 values ('a'), ('a '), ('a\t');
select collation(a),hex(a) from t1 order by a;
collation(a) hex(a)
latin1_german2_ci 6109
latin1_german2_ci 61
latin1_german2_ci 6120
drop table t1;

View file

@ -71,3 +71,23 @@ B1
B2 B2
B3 B3
drop table t1; drop table t1;
SET collation_connection='sjis_japanese_ci';
create table t1 select repeat('a',4000) a;
delete from t1;
insert into t1 values ('a'), ('a '), ('a\t');
select collation(a),hex(a) from t1 order by a;
collation(a) hex(a)
sjis_japanese_ci 6109
sjis_japanese_ci 61
sjis_japanese_ci 6120
drop table t1;
SET collation_connection='sjis_bin';
create table t1 select repeat('a',4000) a;
delete from t1;
insert into t1 values ('a'), ('a '), ('a\t');
select collation(a),hex(a) from t1 order by a;
collation(a) hex(a)
sjis_bin 6109
sjis_bin 61
sjis_bin 6120
drop table t1;

View file

@ -2937,3 +2937,23 @@ Screensaver 2 2002-01-22 491 0 519 0 0
3 http://www.siamzone.com/download/download/000003-jasonx2(800x600).jpg Jaso 3 http://www.siamzone.com/download/download/000003-jasonx2(800x600).jpg Jaso
n X Wallpapers 1 2002-05-31 579 0 1091 0 0 n X Wallpapers 1 2002-05-31 579 0 1091 0 0
DROP TABLE t1; DROP TABLE t1;
SET collation_connection='tis620_thai_ci';
create table t1 select repeat('a',4000) a;
delete from t1;
insert into t1 values ('a'), ('a '), ('a\t');
select collation(a),hex(a) from t1 order by a;
collation(a) hex(a)
tis620_thai_ci 6109
tis620_thai_ci 61
tis620_thai_ci 6120
drop table t1;
SET collation_connection='tis620_bin';
create table t1 select repeat('a',4000) a;
delete from t1;
insert into t1 values ('a'), ('a '), ('a\t');
select collation(a),hex(a) from t1 order by a;
collation(a) hex(a)
tis620_bin 6109
tis620_bin 61
tis620_bin 6120
drop table t1;

View file

@ -2386,3 +2386,13 @@ a 1
b 0 b 0
c 0 c 0
drop table t1; drop table t1;
SET collation_connection='utf8_unicode_ci';
create table t1 select repeat('a',4000) a;
delete from t1;
insert into t1 values ('a'), ('a '), ('a\t');
select collation(a),hex(a) from t1 order by a;
collation(a) hex(a)
utf8_unicode_ci 6109
utf8_unicode_ci 61
utf8_unicode_ci 6120
drop table t1;

View file

@ -602,3 +602,24 @@ a NULL
b NULL b NULL
c NULL c NULL
drop table t1; drop table t1;
SET collation_connection='ucs2_general_ci';
create table t1 select repeat('a',4000) a;
delete from t1;
insert into t1 values ('a'), ('a '), ('a\t');
select collation(a),hex(a) from t1 order by a;
collation(a) hex(a)
ucs2_general_ci 00610009
ucs2_general_ci 0061
ucs2_general_ci 00610020
drop table t1;
SET NAMES latin1;
SET collation_connection='ucs2_bin';
create table t1 select repeat('a',4000) a;
delete from t1;
insert into t1 values ('a'), ('a '), ('a\t');
select collation(a),hex(a) from t1 order by a;
collation(a) hex(a)
ucs2_bin 00610009
ucs2_bin 0061
ucs2_bin 00610020
drop table t1;

View file

@ -2207,3 +2207,23 @@ F4FC
F4FD F4FD
F4FE F4FE
DROP TABLE t1; DROP TABLE t1;
SET collation_connection='ujis_japanese_ci';
create table t1 select repeat('a',4000) a;
delete from t1;
insert into t1 values ('a'), ('a '), ('a\t');
select collation(a),hex(a) from t1 order by a;
collation(a) hex(a)
ujis_japanese_ci 6109
ujis_japanese_ci 61
ujis_japanese_ci 6120
drop table t1;
SET collation_connection='ujis_bin';
create table t1 select repeat('a',4000) a;
delete from t1;
insert into t1 values ('a'), ('a '), ('a\t');
select collation(a),hex(a) from t1 order by a;
collation(a) hex(a)
ujis_bin 6109
ujis_bin 61
ujis_bin 6120
drop table t1;

View file

@ -829,3 +829,23 @@ select * from t1 where soundex(a) = soundex('test');
id a id a
1 Test 1 Test
drop table t1; drop table t1;
SET collation_connection='utf8_general_ci';
create table t1 select repeat('a',4000) a;
delete from t1;
insert into t1 values ('a'), ('a '), ('a\t');
select collation(a),hex(a) from t1 order by a;
collation(a) hex(a)
utf8_general_ci 6109
utf8_general_ci 61
utf8_general_ci 6120
drop table t1;
SET collation_connection='utf8_bin';
create table t1 select repeat('a',4000) a;
delete from t1;
insert into t1 values ('a'), ('a '), ('a\t');
select collation(a),hex(a) from t1 order by a;
collation(a) hex(a)
utf8_bin 6109
utf8_bin 61
utf8_bin 6120
drop table t1;

View file

@ -295,7 +295,7 @@ execute stmt4;
prepare stmt4 from ' show full processlist '; prepare stmt4 from ' show full processlist ';
execute stmt4; execute stmt4;
Id User Host db Command Time State Info Id User Host db Command Time State Info
number root localhost test Query seconds NULL show full processlist number root localhost test Query time NULL show full processlist
prepare stmt4 from ' show grants for user '; prepare stmt4 from ' show grants for user ';
prepare stmt4 from ' show create table t2 '; prepare stmt4 from ' show create table t2 ';
ERROR HY000: This command is not supported in the prepared statement protocol yet ERROR HY000: This command is not supported in the prepared statement protocol yet

View file

@ -10,3 +10,9 @@ drop table if exists t1;
SET @test_character_set= 'big5'; SET @test_character_set= 'big5';
SET @test_collation= 'big5_chinese_ci'; SET @test_collation= 'big5_chinese_ci';
-- source include/ctype_common.inc -- source include/ctype_common.inc
SET NAMES big5;
SET collation_connection='big5_chinese_ci';
-- source include/ctype_filesort.inc
SET collation_connection='big5_bin';
-- source include/ctype_filesort.inc

View file

@ -60,3 +60,9 @@ DROP TABLE t1;
select 'a' regexp 'A' collate latin1_general_ci; select 'a' regexp 'A' collate latin1_general_ci;
select 'a' regexp 'A' collate latin1_general_cs; select 'a' regexp 'A' collate latin1_general_cs;
select 'a' regexp 'A' collate latin1_bin; select 'a' regexp 'A' collate latin1_bin;
SET collation_connection='latin1_swedish_ci';
-- source include/ctype_filesort.inc
SET collation_connection='latin1_bin';
-- source include/ctype_filesort.inc

View file

@ -114,3 +114,5 @@ SELECT s1,COUNT(*) FROM t1 GROUP BY s1;
SELECT COUNT(DISTINCT s1) FROM t1; SELECT COUNT(DISTINCT s1) FROM t1;
SELECT FIELD('ue',s1), FIELD('Ü',s1), s1='ue', s1='Ü' FROM t1; SELECT FIELD('ue',s1), FIELD('Ü',s1), s1='ue', s1='Ü' FROM t1;
DROP TABLE t1; DROP TABLE t1;
-- source include/ctype_filesort.inc

View file

@ -62,3 +62,9 @@ CREATE TABLE t1 (
insert into t1 values(0xb1),(0xb2),(0xb3); insert into t1 values(0xb1),(0xb2),(0xb3);
select hex(c) from t1; select hex(c) from t1;
drop table t1; drop table t1;
SET collation_connection='sjis_japanese_ci';
-- source include/ctype_filesort.inc
SET collation_connection='sjis_bin';
-- source include/ctype_filesort.inc

View file

@ -151,3 +151,9 @@ INSERT INTO t1 VALUES
n X Wallpapers',1,'','2002-05-31','',579,0,'',1091,0,0,''); n X Wallpapers',1,'','2002-05-31','',579,0,'',1091,0,0,'');
select * from t1 order by id; select * from t1 order by id;
DROP TABLE t1; DROP TABLE t1;
SET collation_connection='tis620_thai_ci';
-- source include/ctype_filesort.inc
SET collation_connection='tis620_bin';
-- source include/ctype_filesort.inc

View file

@ -452,3 +452,6 @@ create table t1 (a varchar(1)) character set utf8 collate utf8_estonian_ci;
insert into t1 values ('A'),('B'),('C'),('a'),('b'),('c'); insert into t1 values ('A'),('B'),('C'),('a'),('b'),('c');
select a, a regexp '[a]' from t1 order by binary a; select a, a regexp '[a]' from t1 order by binary a;
drop table t1; drop table t1;
SET collation_connection='utf8_unicode_ci';
-- source include/ctype_filesort.inc

View file

@ -386,3 +386,9 @@ alter table t1 add b char(1);
show warnings; show warnings;
select * from t1 order by a; select * from t1 order by a;
drop table t1; drop table t1;
SET collation_connection='ucs2_general_ci';
-- source include/ctype_filesort.inc
SET NAMES latin1;
SET collation_connection='ucs2_bin';
-- source include/ctype_filesort.inc

View file

@ -1141,3 +1141,9 @@ INSERT INTO t1 VALUES(0xF4FD);
INSERT INTO t1 VALUES(0xF4FE); INSERT INTO t1 VALUES(0xF4FE);
SELECT HEX(c) FROM t1 ORDER BY BINARY c; SELECT HEX(c) FROM t1 ORDER BY BINARY c;
DROP TABLE t1; DROP TABLE t1;
SET collation_connection='ujis_japanese_ci';
-- source include/ctype_filesort.inc
SET collation_connection='ujis_bin';
-- source include/ctype_filesort.inc

View file

@ -675,3 +675,9 @@ select * from t1 where soundex(a) = soundex('Test');
select * from t1 where soundex(a) = soundex('TEST'); select * from t1 where soundex(a) = soundex('TEST');
select * from t1 where soundex(a) = soundex('test'); select * from t1 where soundex(a) = soundex('test');
drop table t1; drop table t1;
SET collation_connection='utf8_general_ci';
-- source include/ctype_filesort.inc
SET collation_connection='utf8_bin';
-- source include/ctype_filesort.inc

View file

@ -11,10 +11,6 @@
--disable_warnings --disable_warnings
drop table if exists t5, t6, t7, t8; drop table if exists t5, t6, t7, t8;
drop database if exists mysqltest ; drop database if exists mysqltest ;
# Cleanup from other tests
drop database if exists testtets;
drop table if exists t1Aa,t2Aa,v1Aa,v2Aa;
drop view if exists t1Aa,t2Aa,v1Aa,v2Aa;
--enable_warnings --enable_warnings
--disable_query_log --disable_query_log
@ -321,7 +317,7 @@ prepare stmt4 from ' show engine bdb logs ';
execute stmt4; execute stmt4;
--enable_result_log --enable_result_log
prepare stmt4 from ' show full processlist '; prepare stmt4 from ' show full processlist ';
--replace_column 1 number 6 seconds --replace_column 1 number 6 time
execute stmt4; execute stmt4;
prepare stmt4 from ' show grants for user '; prepare stmt4 from ' show grants for user ';
--error 1295 --error 1295
@ -478,7 +474,9 @@ prepare stmt1 from ' handler t1 open ';
## commit/rollback ## commit/rollback
--error 1295
prepare stmt3 from ' commit ' ; prepare stmt3 from ' commit ' ;
--error 1295
prepare stmt3 from ' rollback ' ; prepare stmt3 from ' rollback ' ;
@ -579,8 +577,11 @@ execute stmt3 using @arg00;
select m from t3; select m from t3;
drop table t3; drop table t3;
--error 1295
prepare stmt3 from ' create index t2_idx on t2(b) '; prepare stmt3 from ' create index t2_idx on t2(b) ';
--error 1295
prepare stmt3 from ' drop index t2_idx on t2 ' ; prepare stmt3 from ' drop index t2_idx on t2 ' ;
--error 1295
prepare stmt3 from ' alter table t2 drop primary key '; prepare stmt3 from ' alter table t2 drop primary key ';
## RENAME TABLE ## RENAME TABLE

View file

@ -4482,8 +4482,7 @@ void Field_string::sort_string(char *to,uint length)
uint tmp=my_strnxfrm(field_charset, uint tmp=my_strnxfrm(field_charset,
(unsigned char *) to, length, (unsigned char *) to, length,
(unsigned char *) ptr, field_length); (unsigned char *) ptr, field_length);
if (tmp < length) DBUG_ASSERT(tmp == length);
field_charset->cset->fill(field_charset, to + tmp, length - tmp, ' ');
} }
@ -4834,9 +4833,7 @@ void Field_varstring::sort_string(char *to,uint length)
(uchar*) to, length, (uchar*) to, length,
(uchar*) ptr + length_bytes, (uchar*) ptr + length_bytes,
tot_length); tot_length);
if (tot_length < length) DBUG_ASSERT(tot_length == length);
field_charset->cset->fill(field_charset, to+tot_length,length-tot_length,
binary() ? (char) 0 : ' ');
} }
@ -5511,10 +5508,7 @@ void Field_blob::sort_string(char *to,uint length)
blob_length=my_strnxfrm(field_charset, blob_length=my_strnxfrm(field_charset,
(uchar*) to, length, (uchar*) to, length,
(uchar*) blob, blob_length); (uchar*) blob, blob_length);
if (blob_length < length) DBUG_ASSERT(blob_length == length);
field_charset->cset->fill(field_charset, to+blob_length,
length-blob_length,
binary() ? (char) 0 : ' ');
} }
} }

View file

@ -660,10 +660,7 @@ static void make_sortkey(register SORTPARAM *param,
} }
uint tmp_length=my_strnxfrm(cs,to,sort_field->length, uint tmp_length=my_strnxfrm(cs,to,sort_field->length,
(unsigned char *) from, length); (unsigned char *) from, length);
if (tmp_length < sort_field->length) DBUG_ASSERT(tmp_length == sort_field->length);
cs->cset->fill(cs, (char*) to+tmp_length,
sort_field->length-tmp_length,
fill_char);
} }
else else
{ {

View file

@ -307,6 +307,7 @@ static int my_strnxfrm_big5(CHARSET_INFO *cs __attribute__((unused)),
const uchar * src, uint srclen) const uchar * src, uint srclen)
{ {
uint16 e; uint16 e;
uint dstlen= len;
len = srclen; len = srclen;
while (len--) while (len--)
@ -321,7 +322,9 @@ static int my_strnxfrm_big5(CHARSET_INFO *cs __attribute__((unused)),
} else } else
*dest++ = sort_order_big5[(uchar) *src++]; *dest++ = sort_order_big5[(uchar) *src++];
} }
return srclen; if (dstlen > srclen)
bfill(dest, dstlen - srclen, ' ');
return dstlen;
} }
#if 0 #if 0

View file

@ -356,13 +356,27 @@ static int my_wildcmp_bin(CHARSET_INFO *cs,
static int my_strnxfrm_bin(CHARSET_INFO *cs __attribute__((unused)), static int my_strnxfrm_bin(CHARSET_INFO *cs __attribute__((unused)),
uchar * dest, uint len, uchar * dest, uint dstlen,
const uchar *src, const uchar *src, uint srclen)
uint srclen __attribute__((unused)))
{ {
if (dest != src) if (dest != src)
memcpy(dest,src,len= min(len,srclen)); memcpy(dest, src, min(dstlen,srclen));
return len; if (dstlen > srclen)
bfill(dest + srclen, dstlen - srclen, 0);
return dstlen;
}
static
int my_strnxfrm_8bit_bin(CHARSET_INFO *cs __attribute__((unused)),
uchar * dest, uint dstlen,
const uchar *src, uint srclen)
{
if (dest != src)
memcpy(dest, src, min(dstlen,srclen));
if (dstlen > srclen)
bfill(dest + srclen, dstlen - srclen, ' ');
return dstlen;
} }
@ -432,7 +446,7 @@ MY_COLLATION_HANDLER my_collation_8bit_bin_handler =
NULL, /* init */ NULL, /* init */
my_strnncoll_8bit_bin, my_strnncoll_8bit_bin,
my_strnncollsp_8bit_bin, my_strnncollsp_8bit_bin,
my_strnxfrm_bin, my_strnxfrm_8bit_bin,
my_like_range_simple, my_like_range_simple,
my_wildcmp_bin, my_wildcmp_bin,
my_strcasecmp_bin, my_strcasecmp_bin,

View file

@ -298,16 +298,18 @@ static int my_strnxfrm_czech(CHARSET_INFO *cs __attribute__((unused)),
int value; int value;
const uchar * p, * store; const uchar * p, * store;
int pass = 0; int pass = 0;
int totlen = 0; uint totlen = 0;
p = src; store = src; p = src; store = src;
do do
{ {
NEXT_CMP_VALUE(src, p, store, pass, value, (int)srclen); NEXT_CMP_VALUE(src, p, store, pass, value, (int)srclen);
ADD_TO_RESULT(dest, (int)len, totlen, value); ADD_TO_RESULT(dest, len, totlen, value);
} }
while (value); while (value);
return totlen; if (len > totlen)
bfill(dest + totlen, len - totlen, ' ');
return len;
} }
#undef IS_END #undef IS_END

View file

@ -2668,6 +2668,7 @@ static int my_strnxfrm_gbk(CHARSET_INFO *cs __attribute__((unused)),
const uchar * src, uint srclen) const uchar * src, uint srclen)
{ {
uint16 e; uint16 e;
uint dstlen= len;
len = srclen; len = srclen;
while (len--) while (len--)
@ -2682,7 +2683,9 @@ static int my_strnxfrm_gbk(CHARSET_INFO *cs __attribute__((unused)),
} else } else
*dest++ = sort_order_gbk[(uchar) *src++]; *dest++ = sort_order_gbk[(uchar) *src++];
} }
return srclen; if (dstlen > srclen)
bfill(dest, dstlen - srclen, ' ');
return dstlen;
} }

View file

@ -646,7 +646,6 @@ static int my_strnxfrm_latin1_de(CHARSET_INFO *cs __attribute__((unused)),
uchar * dest, uint len, uchar * dest, uint len,
const uchar * src, uint srclen) const uchar * src, uint srclen)
{ {
const uchar *dest_orig = dest;
const uchar *de = dest + len; const uchar *de = dest + len;
const uchar *se = src + srclen; const uchar *se = src + srclen;
for ( ; src < se && dest < de ; src++) for ( ; src < se && dest < de ; src++)
@ -656,7 +655,9 @@ static int my_strnxfrm_latin1_de(CHARSET_INFO *cs __attribute__((unused)),
if ((chr=combo2map[*src]) && dest < de) if ((chr=combo2map[*src]) && dest < de)
*dest++=chr; *dest++=chr;
} }
return (int) (dest - dest_orig); if (dest < de)
bfill(dest, de - dest, ' ');
return (int) len;
} }

View file

@ -425,13 +425,14 @@ static int my_strnncollsp_mb_bin(CHARSET_INFO * cs __attribute__((unused)),
static int my_strnxfrm_mb_bin(CHARSET_INFO *cs __attribute__((unused)), static int my_strnxfrm_mb_bin(CHARSET_INFO *cs __attribute__((unused)),
uchar * dest, uint len, uchar * dest, uint dstlen,
const uchar *src, const uchar *src, uint srclen)
uint srclen __attribute__((unused)))
{ {
if (dest != src) if (dest != src)
memcpy(dest,src,len= min(len,srclen)); memcpy(dest, src, min(dstlen, srclen));
return len; if (dstlen > srclen)
bfill(dest + srclen, dstlen - srclen, ' ');
return dstlen;
} }

View file

@ -21,27 +21,68 @@
#include "stdarg.h" #include "stdarg.h"
/*
Converts a string into its sort key.
SYNOPSIS
my_strnxfrm_xxx()
IMPLEMENTATION
The my_strxfrm_xxx() function transforms a string pointed to by
'src' with length 'srclen' according to the charset+collation
pair 'cs' and copies the result key into 'dest'.
Comparing two strings using memcmp() after my_strnxfrm_xxx()
is equal to comparing two original strings with my_strnncollsp_xxx().
Not more than 'dstlen' bytes are written into 'dst'.
To garantee that the whole string is transformed, 'dstlen' must be
at least srclen*cs->strnxfrm_multiply bytes long. Otherwise,
consequent memcmp() may return a non-accurate result.
If the source string is too short to fill whole 'dstlen' bytes,
then the 'dest' string is padded up to 'dstlen', ensuring that:
"a" == "a "
"a\0" < "a"
"a\0" < "a "
my_strnxfrm_simple() is implemented for 8bit charsets and
simple collations with one-to-one string->key transformation.
See also implementations for various charsets/collations in
other ctype-xxx.c files.
RETURN
Target len 'dstlen'.
*/
int my_strnxfrm_simple(CHARSET_INFO * cs, int my_strnxfrm_simple(CHARSET_INFO * cs,
uchar *dest, uint len, uchar *dest, uint len,
const uchar *src, uint srclen) const uchar *src, uint srclen)
{ {
uchar *map= cs->sort_order; uchar *map= cs->sort_order;
uint dstlen= len;
set_if_smaller(len, srclen); set_if_smaller(len, srclen);
if (dest != src) if (dest != src)
{ {
const uchar *end; const uchar *end;
for ( end=src+len; src < end ; ) for ( end=src+len; src < end ; )
*dest++= map[*src++]; *dest++= map[*src++];
return len;
} }
else else
{ {
const uchar *end; const uchar *end;
for ( end=dest+len; dest < end ; dest++) for ( end=dest+len; dest < end ; dest++)
*dest= (char) map[(uchar) *dest]; *dest= (char) map[(uchar) *dest];
return len;
} }
if (dstlen > len)
bfill(dest, dstlen - len, ' ');
return dstlen;
} }
int my_strnncoll_simple(CHARSET_INFO * cs, const uchar *s, uint slen, int my_strnncoll_simple(CHARSET_INFO * cs, const uchar *s, uint slen,

View file

@ -299,7 +299,9 @@ static int my_strnxfrm_sjis(CHARSET_INFO *cs __attribute__((unused)),
else else
*dest++ = sort_order_sjis[(uchar)*src++]; *dest++ = sort_order_sjis[(uchar)*src++];
} }
return srclen; if (len > srclen)
bfill(dest, len - srclen, ' ');
return len;
} }

View file

@ -638,9 +638,13 @@ int my_strnxfrm_tis620(CHARSET_INFO *cs __attribute__((unused)),
uchar * dest, uint len, uchar * dest, uint len,
const uchar * src, uint srclen) const uchar * src, uint srclen)
{ {
uint dstlen= len;
len= (uint) (strmake((char*) dest, (char*) src, min(len, srclen)) - len= (uint) (strmake((char*) dest, (char*) src, min(len, srclen)) -
(char*) dest); (char*) dest);
return (int) thai2sortable(dest, len); len= thai2sortable(dest, len);
if (dstlen > len)
bfill(dest + len, dstlen - len, ' ');
return dstlen;
} }

View file

@ -7220,8 +7220,7 @@ static int my_strnxfrm_uca(CHARSET_INFO *cs,
uchar *dst, uint dstlen, uchar *dst, uint dstlen,
const uchar *src, uint srclen) const uchar *src, uint srclen)
{ {
uchar *de = dst + dstlen; uchar *de = dst + (dstlen & (uint) ~1); // add even length for easier code
const uchar *dst_orig = dst;
int s_res; int s_res;
my_uca_scanner scanner; my_uca_scanner scanner;
scanner_handler->init(&scanner, cs, src, srclen); scanner_handler->init(&scanner, cs, src, srclen);
@ -7232,8 +7231,17 @@ static int my_strnxfrm_uca(CHARSET_INFO *cs,
dst[1]= s_res & 0xFF; dst[1]= s_res & 0xFF;
dst+= 2; dst+= 2;
} }
for ( ; dst < de; *dst++='\0'); s_res= cs->sort_order_big[0][0x20 * cs->sort_order[0]];
return dst - dst_orig; while (dst < de)
{
dst[0]= s_res >> 8;
dst[1]= s_res & 0xFF;
dst+= 2;
}
if (dstlen & 1) // if odd number then fill the last char
*dst= '\0';
return dstlen;
} }

View file

@ -352,7 +352,6 @@ static int my_strnxfrm_ucs2(CHARSET_INFO *cs,
int plane; int plane;
uchar *de = dst + dstlen; uchar *de = dst + dstlen;
const uchar *se = src + srclen; const uchar *se = src + srclen;
const uchar *dst_orig = dst;
while( src < se && dst < de ) while( src < se && dst < de )
{ {
@ -372,7 +371,9 @@ static int my_strnxfrm_ucs2(CHARSET_INFO *cs,
} }
dst+=res; dst+=res;
} }
return dst - dst_orig; if (dst < de)
cs->cset->fill(cs, dst, de - dst, ' ');
return dstlen;
} }
@ -1385,7 +1386,9 @@ int my_strnxfrm_ucs2_bin(CHARSET_INFO *cs __attribute__((unused)),
{ {
if (dst != src) if (dst != src)
memcpy(dst,src,srclen= min(dstlen,srclen)); memcpy(dst,src,srclen= min(dstlen,srclen));
return srclen; if (dstlen > srclen)
cs->cset->fill(cs, dst + srclen, dstlen - srclen, ' ');
return dstlen;
} }

View file

@ -2247,7 +2247,6 @@ static int my_strnxfrm_utf8(CHARSET_INFO *cs,
int plane; int plane;
uchar *de = dst + dstlen; uchar *de = dst + dstlen;
const uchar *se = src + srclen; const uchar *se = src + srclen;
const uchar *dst_orig = dst;
while( src < se && dst < de ) while( src < se && dst < de )
{ {
@ -2267,7 +2266,9 @@ static int my_strnxfrm_utf8(CHARSET_INFO *cs,
} }
dst+=res; dst+=res;
} }
return dst - dst_orig; if (dst < de)
bfill(dst, de - dst, ' ');
return dstlen;
} }
static int my_ismbchar_utf8(CHARSET_INFO *cs,const char *b, const char *e) static int my_ismbchar_utf8(CHARSET_INFO *cs,const char *b, const char *e)

View file

@ -505,7 +505,9 @@ static int my_strnxfrm_win1250ch(CHARSET_INFO * cs __attribute__((unused)),
dest[totlen] = value; dest[totlen] = value;
totlen++; totlen++;
} while (value) ; } while (value) ;
return totlen; if (len > totlen)
bfill(dest + totlen, len - totlen, ' ');
return len;
} }
#undef IS_END #undef IS_END