mirror of
https://github.com/MariaDB/server.git
synced 2025-01-30 18:41:56 +01:00
manual merge
This commit is contained in:
commit
a676498977
36 changed files with 351 additions and 51 deletions
15
mysql-test/include/ctype_filesort.inc
Normal file
15
mysql-test/include/ctype_filesort.inc
Normal 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;
|
|
@ -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;
|
||||||
|
|
|
@ -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;
|
||||||
|
|
|
@ -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;
|
||||||
|
|
|
@ -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;
|
||||||
|
|
|
@ -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;
|
||||||
|
|
|
@ -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;
|
||||||
|
|
|
@ -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;
|
||||||
|
|
|
@ -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;
|
||||||
|
|
|
@ -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;
|
||||||
|
|
|
@ -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
|
||||||
|
|
|
@ -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
|
||||||
|
|
|
@ -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
|
||||||
|
|
|
@ -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
|
||||||
|
|
|
@ -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
|
||||||
|
|
|
@ -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
|
||||||
|
|
|
@ -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
|
||||||
|
|
|
@ -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
|
||||||
|
|
|
@ -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
|
||||||
|
|
|
@ -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
|
||||||
|
|
|
@ -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
|
||||||
|
|
12
sql/field.cc
12
sql/field.cc
|
@ -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 : ' ');
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -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
|
||||||
{
|
{
|
||||||
|
|
|
@ -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
|
||||||
|
|
|
@ -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,
|
||||||
|
|
|
@ -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
|
||||||
|
|
|
@ -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;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -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;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -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;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -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,
|
||||||
|
|
|
@ -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;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -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;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -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;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -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;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -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)
|
||||||
|
|
|
@ -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
|
||||||
|
|
Loading…
Add table
Reference in a new issue