Loading include/m_ctype.h +11 −0 Original line number Diff line number Diff line Loading @@ -78,8 +78,14 @@ extern MY_UNICASE_INFO *my_unicase_turkish[256]; #define MY_CS_READY 256 /* if a charset is initialized */ #define MY_CS_AVAILABLE 512 /* If either compiled-in or loaded*/ #define MY_CS_CSSORT 1024 /* if case sensitive sort order */ #define MY_CS_PUREASCII 2048 /* if a charset is pure ascii */ #define MY_CHARSET_UNDEFINED 0 /* Character repertoire flags */ #define MY_REPERTOIRE_ASCII 1 /* Pure ASCII U+0000..U+007F */ #define MY_REPERTOIRE_EXTENDED 2 /* Extended characters: U+0080..U+FFFF */ #define MY_REPERTOIRE_UNICODE30 3 /* ASCII | EXTENDED: U+0000..U+FFFF */ typedef struct my_uni_idx_st { Loading Loading @@ -436,6 +442,11 @@ my_bool my_propagate_simple(CHARSET_INFO *cs, const uchar *str, uint len); my_bool my_propagate_complex(CHARSET_INFO *cs, const uchar *str, uint len); uint my_string_repertoire(CHARSET_INFO *cs, const char *str, ulong len); my_bool my_charset_is_ascii_based(CHARSET_INFO *cs); my_bool my_charset_is_8bit_pure_ascii(CHARSET_INFO *cs); #define _MY_U 01 /* Upper case */ #define _MY_L 02 /* Lower case */ #define _MY_NMR 04 /* Numeral (digit) */ Loading mysql-test/r/ctype_ucs.result +26 −0 Original line number Diff line number Diff line Loading @@ -896,4 +896,30 @@ select hex(convert(s1 using latin1)) from t1; hex(convert(s1 using latin1)) 7F drop table t1; create table t1 (a varchar(15) character set ascii not null, b int); insert into t1 values ('a',1); select concat(a,if(b<10,_ucs2 0x0061,_ucs2 0x0062)) from t1; concat(a,if(b<10,_ucs2 0x0061,_ucs2 0x0062)) aa select concat(a,if(b>10,_ucs2 0x0061,_ucs2 0x0062)) from t1; concat(a,if(b>10,_ucs2 0x0061,_ucs2 0x0062)) ab select * from t1 where a=if(b<10,_ucs2 0x0061,_ucs2 0x0062); a b a 1 select * from t1 where a=if(b>10,_ucs2 0x0061,_ucs2 0x0062); a b select concat(a,if(b<10,_ucs2 0x00C0,_ucs2 0x0062)) from t1; ERROR HY000: Illegal mix of collations (ascii_general_ci,IMPLICIT) and (ucs2_general_ci,COERCIBLE) for operation 'concat' select concat(a,if(b>10,_ucs2 0x00C0,_ucs2 0x0062)) from t1; ERROR HY000: Illegal mix of collations (ascii_general_ci,IMPLICIT) and (ucs2_general_ci,COERCIBLE) for operation 'concat' select concat(a,if(b<10,_ucs2 0x0062,_ucs2 0x00C0)) from t1; ERROR HY000: Illegal mix of collations (ascii_general_ci,IMPLICIT) and (ucs2_general_ci,COERCIBLE) for operation 'concat' select concat(a,if(b>10,_ucs2 0x0062,_ucs2 0x00C0)) from t1; ERROR HY000: Illegal mix of collations (ascii_general_ci,IMPLICIT) and (ucs2_general_ci,COERCIBLE) for operation 'concat' select * from t1 where a=if(b<10,_ucs2 0x00C0,_ucs2 0x0062); ERROR HY000: Illegal mix of collations (ascii_general_ci,IMPLICIT) and (ucs2_general_ci,COERCIBLE) for operation '=' select * from t1 where a=if(b<10,_ucs2 0x0062,_ucs2 0x00C0); ERROR HY000: Illegal mix of collations (ascii_general_ci,IMPLICIT) and (ucs2_general_ci,COERCIBLE) for operation '=' drop table t1; End of 5.0 tests mysql-test/r/ctype_utf8.result +36 −0 Original line number Diff line number Diff line Loading @@ -1639,6 +1639,42 @@ coercibility(col1) collation(col1) 0 utf8_swedish_ci drop view v1, v2; drop table t1; set names utf8; create table t1 (a varchar(10) character set latin1, b int); insert into t1 values ('a',1); select concat(a, if(b>10, N'x', N'y')) from t1; concat(a, if(b>10, N'x', N'y')) ay select concat(a, if(b>10, N'æ', N'ß')) from t1; ERROR HY000: Illegal mix of collations (latin1_swedish_ci,IMPLICIT) and (utf8_general_ci,COERCIBLE) for operation 'concat' drop table t1; set names utf8; create table t1 (a varchar(10) character set latin1, b int); insert into t1 values ('a',1); select concat(a, if(b>10, _utf8'x', _utf8'y')) from t1; concat(a, if(b>10, _utf8'x', _utf8'y')) ay select concat(a, if(b>10, _utf8'æ', _utf8'ß')) from t1; ERROR HY000: Illegal mix of collations (latin1_swedish_ci,IMPLICIT) and (utf8_general_ci,COERCIBLE) for operation 'concat' drop table t1; set names utf8; create table t1 (a varchar(10) character set latin1, b int); insert into t1 values ('a',1); select concat(a, if(b>10, _utf8 0x78, _utf8 0x79)) from t1; concat(a, if(b>10, _utf8 0x78, _utf8 0x79)) ay select concat(a, if(b>10, _utf8 0xC3A6, _utf8 0xC3AF)) from t1; ERROR HY000: Illegal mix of collations (latin1_swedish_ci,IMPLICIT) and (utf8_general_ci,COERCIBLE) for operation 'concat' drop table t1; set names utf8; create table t1 (a varchar(10) character set latin1, b int); insert into t1 values ('a',1); select concat(a, if(b>10, 'x' 'x', 'y' 'y')) from t1; concat(a, if(b>10, 'x' 'x', 'y' 'y')) ayy select concat(a, if(b>10, 'x' 'æ', 'y' 'ß')) from t1; ERROR HY000: Illegal mix of collations (latin1_swedish_ci,IMPLICIT) and (utf8_general_ci,COERCIBLE) for operation 'concat' drop table t1; CREATE TABLE t1 ( colA int(11) NOT NULL, colB varchar(255) character set utf8 NOT NULL, Loading mysql-test/r/func_time.result +16 −0 Original line number Diff line number Diff line Loading @@ -1246,3 +1246,19 @@ SELECT TIME_FORMAT(SEC_TO_TIME(a),"%H:%i:%s") FROM (SELECT 3020399 AS a UNION SE TIME_FORMAT(SEC_TO_TIME(a),"%H:%i:%s") 838:59:58 838:59:59 set names latin1; create table t1 (a varchar(15) character set ascii not null); insert into t1 values ('070514-000000'); select concat(a,ifnull(min(date_format(now(), '%Y-%m-%d')),' ull')) from t1; concat(a,ifnull(min(date_format(now(), '%Y-%m-%d')),' ull')) # set names swe7; select concat(a,ifnull(min(date_format(now(), '%Y-%m-%d')),' ull')) from t1; ERROR HY000: Illegal mix of collations (ascii_general_ci,IMPLICIT) and (swe7_swedish_ci,COERCIBLE) for operation 'concat' set names latin1; set lc_time_names=fr_FR; select concat(a,ifnull(min(date_format(now(), '%Y-%m-%d')),' ull')) from t1; ERROR HY000: Illegal mix of collations (ascii_general_ci,IMPLICIT) and (latin1_swedish_ci,COERCIBLE) for operation 'concat' set lc_time_names=en_US; drop table t1; End of 5.0 tests mysql-test/t/ctype_ucs.test +29 −0 Original line number Diff line number Diff line Loading @@ -622,4 +622,33 @@ select hex(s2) from t1; select hex(convert(s1 using latin1)) from t1; drop table t1; # # Conversion from UCS2 to ASCII is possible # if the UCS2 string consists of only ASCII characters # create table t1 (a varchar(15) character set ascii not null, b int); insert into t1 values ('a',1); select concat(a,if(b<10,_ucs2 0x0061,_ucs2 0x0062)) from t1; select concat(a,if(b>10,_ucs2 0x0061,_ucs2 0x0062)) from t1; select * from t1 where a=if(b<10,_ucs2 0x0061,_ucs2 0x0062); select * from t1 where a=if(b>10,_ucs2 0x0061,_ucs2 0x0062); # # Conversion from UCS2 to ASCII is not possible if # the UCS2 string has non-ASCII characters # --error 1267 select concat(a,if(b<10,_ucs2 0x00C0,_ucs2 0x0062)) from t1; --error 1267 select concat(a,if(b>10,_ucs2 0x00C0,_ucs2 0x0062)) from t1; --error 1267 select concat(a,if(b<10,_ucs2 0x0062,_ucs2 0x00C0)) from t1; --error 1267 select concat(a,if(b>10,_ucs2 0x0062,_ucs2 0x00C0)) from t1; --error 1267 select * from t1 where a=if(b<10,_ucs2 0x00C0,_ucs2 0x0062); --error 1267 select * from t1 where a=if(b<10,_ucs2 0x0062,_ucs2 0x00C0); drop table t1; --echo End of 5.0 tests Loading
include/m_ctype.h +11 −0 Original line number Diff line number Diff line Loading @@ -78,8 +78,14 @@ extern MY_UNICASE_INFO *my_unicase_turkish[256]; #define MY_CS_READY 256 /* if a charset is initialized */ #define MY_CS_AVAILABLE 512 /* If either compiled-in or loaded*/ #define MY_CS_CSSORT 1024 /* if case sensitive sort order */ #define MY_CS_PUREASCII 2048 /* if a charset is pure ascii */ #define MY_CHARSET_UNDEFINED 0 /* Character repertoire flags */ #define MY_REPERTOIRE_ASCII 1 /* Pure ASCII U+0000..U+007F */ #define MY_REPERTOIRE_EXTENDED 2 /* Extended characters: U+0080..U+FFFF */ #define MY_REPERTOIRE_UNICODE30 3 /* ASCII | EXTENDED: U+0000..U+FFFF */ typedef struct my_uni_idx_st { Loading Loading @@ -436,6 +442,11 @@ my_bool my_propagate_simple(CHARSET_INFO *cs, const uchar *str, uint len); my_bool my_propagate_complex(CHARSET_INFO *cs, const uchar *str, uint len); uint my_string_repertoire(CHARSET_INFO *cs, const char *str, ulong len); my_bool my_charset_is_ascii_based(CHARSET_INFO *cs); my_bool my_charset_is_8bit_pure_ascii(CHARSET_INFO *cs); #define _MY_U 01 /* Upper case */ #define _MY_L 02 /* Lower case */ #define _MY_NMR 04 /* Numeral (digit) */ Loading
mysql-test/r/ctype_ucs.result +26 −0 Original line number Diff line number Diff line Loading @@ -896,4 +896,30 @@ select hex(convert(s1 using latin1)) from t1; hex(convert(s1 using latin1)) 7F drop table t1; create table t1 (a varchar(15) character set ascii not null, b int); insert into t1 values ('a',1); select concat(a,if(b<10,_ucs2 0x0061,_ucs2 0x0062)) from t1; concat(a,if(b<10,_ucs2 0x0061,_ucs2 0x0062)) aa select concat(a,if(b>10,_ucs2 0x0061,_ucs2 0x0062)) from t1; concat(a,if(b>10,_ucs2 0x0061,_ucs2 0x0062)) ab select * from t1 where a=if(b<10,_ucs2 0x0061,_ucs2 0x0062); a b a 1 select * from t1 where a=if(b>10,_ucs2 0x0061,_ucs2 0x0062); a b select concat(a,if(b<10,_ucs2 0x00C0,_ucs2 0x0062)) from t1; ERROR HY000: Illegal mix of collations (ascii_general_ci,IMPLICIT) and (ucs2_general_ci,COERCIBLE) for operation 'concat' select concat(a,if(b>10,_ucs2 0x00C0,_ucs2 0x0062)) from t1; ERROR HY000: Illegal mix of collations (ascii_general_ci,IMPLICIT) and (ucs2_general_ci,COERCIBLE) for operation 'concat' select concat(a,if(b<10,_ucs2 0x0062,_ucs2 0x00C0)) from t1; ERROR HY000: Illegal mix of collations (ascii_general_ci,IMPLICIT) and (ucs2_general_ci,COERCIBLE) for operation 'concat' select concat(a,if(b>10,_ucs2 0x0062,_ucs2 0x00C0)) from t1; ERROR HY000: Illegal mix of collations (ascii_general_ci,IMPLICIT) and (ucs2_general_ci,COERCIBLE) for operation 'concat' select * from t1 where a=if(b<10,_ucs2 0x00C0,_ucs2 0x0062); ERROR HY000: Illegal mix of collations (ascii_general_ci,IMPLICIT) and (ucs2_general_ci,COERCIBLE) for operation '=' select * from t1 where a=if(b<10,_ucs2 0x0062,_ucs2 0x00C0); ERROR HY000: Illegal mix of collations (ascii_general_ci,IMPLICIT) and (ucs2_general_ci,COERCIBLE) for operation '=' drop table t1; End of 5.0 tests
mysql-test/r/ctype_utf8.result +36 −0 Original line number Diff line number Diff line Loading @@ -1639,6 +1639,42 @@ coercibility(col1) collation(col1) 0 utf8_swedish_ci drop view v1, v2; drop table t1; set names utf8; create table t1 (a varchar(10) character set latin1, b int); insert into t1 values ('a',1); select concat(a, if(b>10, N'x', N'y')) from t1; concat(a, if(b>10, N'x', N'y')) ay select concat(a, if(b>10, N'æ', N'ß')) from t1; ERROR HY000: Illegal mix of collations (latin1_swedish_ci,IMPLICIT) and (utf8_general_ci,COERCIBLE) for operation 'concat' drop table t1; set names utf8; create table t1 (a varchar(10) character set latin1, b int); insert into t1 values ('a',1); select concat(a, if(b>10, _utf8'x', _utf8'y')) from t1; concat(a, if(b>10, _utf8'x', _utf8'y')) ay select concat(a, if(b>10, _utf8'æ', _utf8'ß')) from t1; ERROR HY000: Illegal mix of collations (latin1_swedish_ci,IMPLICIT) and (utf8_general_ci,COERCIBLE) for operation 'concat' drop table t1; set names utf8; create table t1 (a varchar(10) character set latin1, b int); insert into t1 values ('a',1); select concat(a, if(b>10, _utf8 0x78, _utf8 0x79)) from t1; concat(a, if(b>10, _utf8 0x78, _utf8 0x79)) ay select concat(a, if(b>10, _utf8 0xC3A6, _utf8 0xC3AF)) from t1; ERROR HY000: Illegal mix of collations (latin1_swedish_ci,IMPLICIT) and (utf8_general_ci,COERCIBLE) for operation 'concat' drop table t1; set names utf8; create table t1 (a varchar(10) character set latin1, b int); insert into t1 values ('a',1); select concat(a, if(b>10, 'x' 'x', 'y' 'y')) from t1; concat(a, if(b>10, 'x' 'x', 'y' 'y')) ayy select concat(a, if(b>10, 'x' 'æ', 'y' 'ß')) from t1; ERROR HY000: Illegal mix of collations (latin1_swedish_ci,IMPLICIT) and (utf8_general_ci,COERCIBLE) for operation 'concat' drop table t1; CREATE TABLE t1 ( colA int(11) NOT NULL, colB varchar(255) character set utf8 NOT NULL, Loading
mysql-test/r/func_time.result +16 −0 Original line number Diff line number Diff line Loading @@ -1246,3 +1246,19 @@ SELECT TIME_FORMAT(SEC_TO_TIME(a),"%H:%i:%s") FROM (SELECT 3020399 AS a UNION SE TIME_FORMAT(SEC_TO_TIME(a),"%H:%i:%s") 838:59:58 838:59:59 set names latin1; create table t1 (a varchar(15) character set ascii not null); insert into t1 values ('070514-000000'); select concat(a,ifnull(min(date_format(now(), '%Y-%m-%d')),' ull')) from t1; concat(a,ifnull(min(date_format(now(), '%Y-%m-%d')),' ull')) # set names swe7; select concat(a,ifnull(min(date_format(now(), '%Y-%m-%d')),' ull')) from t1; ERROR HY000: Illegal mix of collations (ascii_general_ci,IMPLICIT) and (swe7_swedish_ci,COERCIBLE) for operation 'concat' set names latin1; set lc_time_names=fr_FR; select concat(a,ifnull(min(date_format(now(), '%Y-%m-%d')),' ull')) from t1; ERROR HY000: Illegal mix of collations (ascii_general_ci,IMPLICIT) and (latin1_swedish_ci,COERCIBLE) for operation 'concat' set lc_time_names=en_US; drop table t1; End of 5.0 tests
mysql-test/t/ctype_ucs.test +29 −0 Original line number Diff line number Diff line Loading @@ -622,4 +622,33 @@ select hex(s2) from t1; select hex(convert(s1 using latin1)) from t1; drop table t1; # # Conversion from UCS2 to ASCII is possible # if the UCS2 string consists of only ASCII characters # create table t1 (a varchar(15) character set ascii not null, b int); insert into t1 values ('a',1); select concat(a,if(b<10,_ucs2 0x0061,_ucs2 0x0062)) from t1; select concat(a,if(b>10,_ucs2 0x0061,_ucs2 0x0062)) from t1; select * from t1 where a=if(b<10,_ucs2 0x0061,_ucs2 0x0062); select * from t1 where a=if(b>10,_ucs2 0x0061,_ucs2 0x0062); # # Conversion from UCS2 to ASCII is not possible if # the UCS2 string has non-ASCII characters # --error 1267 select concat(a,if(b<10,_ucs2 0x00C0,_ucs2 0x0062)) from t1; --error 1267 select concat(a,if(b>10,_ucs2 0x00C0,_ucs2 0x0062)) from t1; --error 1267 select concat(a,if(b<10,_ucs2 0x0062,_ucs2 0x00C0)) from t1; --error 1267 select concat(a,if(b>10,_ucs2 0x0062,_ucs2 0x00C0)) from t1; --error 1267 select * from t1 where a=if(b<10,_ucs2 0x00C0,_ucs2 0x0062); --error 1267 select * from t1 where a=if(b<10,_ucs2 0x0062,_ucs2 0x00C0); drop table t1; --echo End of 5.0 tests