diff --git a/include/m_ctype.h b/include/m_ctype.h index b7361cb7d7b..b92fb676a2e 100644 --- a/include/m_ctype.h +++ b/include/m_ctype.h @@ -360,6 +360,11 @@ int my_wildcmp_8bit(CHARSET_INFO *, const char *wildstr,const char *wildend, int escape, int w_one, int w_many); +int my_wildcmp_bin(CHARSET_INFO *, + const char *str,const char *str_end, + const char *wildstr,const char *wildend, + int escape, int w_one, int w_many); + uint my_numchars_8bit(CHARSET_INFO *, const char *b, const char *e); uint my_numcells_8bit(CHARSET_INFO *, const char *b, const char *e); uint my_charpos_8bit(CHARSET_INFO *, const char *b, const char *e, uint pos); diff --git a/mysql-test/include/have_latin2_ch.inc b/mysql-test/include/have_latin2_ch.inc new file mode 100644 index 00000000000..9d3ee6b341c --- /dev/null +++ b/mysql-test/include/have_latin2_ch.inc @@ -0,0 +1,4 @@ +-- require r/have_latin2_ch.require +disable_query_log; +show collation like "latin2_czech_cs"; +enable_query_log; diff --git a/mysql-test/r/ctype_latin2_ch.result b/mysql-test/r/ctype_latin2_ch.result new file mode 100644 index 00000000000..2b3765c07c4 --- /dev/null +++ b/mysql-test/r/ctype_latin2_ch.result @@ -0,0 +1,30 @@ +drop table if exists t1; +set names latin2; +select 'A' = 'a' collate latin2_czech_cs; +'A' = 'a' collate latin2_czech_cs +0 +create table t1 ( +id int(5) not null, +tt char(255) not null +) character set latin2 collate latin2_czech_cs; +insert into t1 values (1,'Aa'); +insert into t1 values (2,'Aas'); +alter table t1 add primary key aaa(tt); +select * from t1 where tt like 'Aa%'; +id tt +1 Aa +2 Aas +select * from t1 ignore index (primary) where tt like 'Aa%'; +id tt +1 Aa +2 Aas +select * from t1 where tt like '%Aa%'; +id tt +1 Aa +2 Aas +select * from t1 where tt like 'AA%'; +id tt +select * from t1 ignore index (primary) where tt like 'AA%'; +id tt +select * from t1 where tt like '%AA%'; +id tt diff --git a/mysql-test/r/have_latin2_ch.require b/mysql-test/r/have_latin2_ch.require new file mode 100644 index 00000000000..352401bbfe8 --- /dev/null +++ b/mysql-test/r/have_latin2_ch.require @@ -0,0 +1,2 @@ +Collation Charset Id Default Compiled Sortlen +latin2_czech_cs latin2 2 Yes 4 diff --git a/mysql-test/t/ctype_latin2_ch.test b/mysql-test/t/ctype_latin2_ch.test new file mode 100644 index 00000000000..626d83fa17d --- /dev/null +++ b/mysql-test/t/ctype_latin2_ch.test @@ -0,0 +1,30 @@ +-- source include/have_latin2_ch.inc + +# +# Tests with latin2_czech_cs +# +--disable_warnings +drop table if exists t1; +--enable_warnings + +# +# Bug#17374: select ... like 'A%' operator fails +# to find value on columuns with key +# +set names latin2; +select 'A' = 'a' collate latin2_czech_cs; +create table t1 ( + id int(5) not null, + tt char(255) not null +) character set latin2 collate latin2_czech_cs; +insert into t1 values (1,'Aa'); +insert into t1 values (2,'Aas'); +alter table t1 add primary key aaa(tt); +select * from t1 where tt like 'Aa%'; +select * from t1 ignore index (primary) where tt like 'Aa%'; +select * from t1 where tt like '%Aa%'; +select * from t1 where tt like 'AA%'; +select * from t1 ignore index (primary) where tt like 'AA%'; +select * from t1 where tt like '%AA%'; + +# End of 4.1 tests diff --git a/strings/ctype-bin.c b/strings/ctype-bin.c index 973a6ebf12a..9708257c1b5 100644 --- a/strings/ctype-bin.c +++ b/strings/ctype-bin.c @@ -295,10 +295,10 @@ void my_hash_sort_bin(CHARSET_INFO *cs __attribute__((unused)), #define INC_PTR(cs,A,B) (A)++ -static int my_wildcmp_bin(CHARSET_INFO *cs, - const char *str,const char *str_end, - const char *wildstr,const char *wildend, - int escape, int w_one, int w_many) +int my_wildcmp_bin(CHARSET_INFO *cs, + const char *str,const char *str_end, + const char *wildstr,const char *wildend, + int escape, int w_one, int w_many) { int result= -1; /* Not found, using wildcards */ diff --git a/strings/ctype-czech.c b/strings/ctype-czech.c index fa3a3bf53fe..d9f95868d6d 100644 --- a/strings/ctype-czech.c +++ b/strings/ctype-czech.c @@ -356,7 +356,7 @@ static int my_strnxfrm_czech(CHARSET_INFO *cs __attribute__((unused)), #ifdef REAL_MYSQL -#define min_sort_char 0 +#define min_sort_char ' ' #define max_sort_char '9' #define EXAMPLE @@ -595,7 +595,7 @@ static MY_COLLATION_HANDLER my_collation_latin2_czech_ci_handler = my_strnxfrm_czech, my_strnxfrmlen_simple, my_like_range_czech, - my_wildcmp_8bit, + my_wildcmp_bin, my_strcasecmp_8bit, my_instr_simple, my_hash_sort_simple,