diff options
46 files changed, 1541 insertions, 57 deletions
@@ -4,5 +4,5 @@ # MYSQL_VERSION_MAJOR=10 MYSQL_VERSION_MINOR=0 -MYSQL_VERSION_PATCH=5 +MYSQL_VERSION_PATCH=6 MYSQL_VERSION_EXTRA= diff --git a/client/mysqlcheck.c b/client/mysqlcheck.c index 74c33c75a27..8651a8686d4 100644 --- a/client/mysqlcheck.c +++ b/client/mysqlcheck.c @@ -18,7 +18,7 @@ /* By Jani Tolonen, 2001-04-20, MySQL Development Team */ -#define CHECK_VERSION "2.7.1" +#define CHECK_VERSION "2.7.2" #include "client_priv.h" #include <m_ctype.h> @@ -681,6 +681,8 @@ static int rebuild_table(char *name) fprintf(stderr, "Error: %s\n", mysql_error(sock)); rc= 1; } + if (verbose) + printf("%-50s %s\n", name, rc ? "FAILED" : "FIXED"); my_free(query); DBUG_RETURN(rc); } diff --git a/include/m_ctype.h b/include/m_ctype.h index 1b60f2091b1..6357bbed17d 100644 --- a/include/m_ctype.h +++ b/include/m_ctype.h @@ -240,6 +240,32 @@ extern MY_UNI_CTYPE my_uni_ctype[256]; #define MY_STRXFRM_REVERSE_LEVEL6 0x00200000 /* if reverse order for level6 */ #define MY_STRXFRM_REVERSE_SHIFT 16 +/* + Collation IDs for MariaDB that should not conflict with MySQL. + We reserve 256..511, because MySQL will most likely use this range + when the range 0..255 is full. + + We use the next 256 IDs starting from 512 and divide + them into 8 chunks, 32 collations each, as follows: + + 512 + (0..31) for single byte collations (e.g. latin9) + 512 + (32..63) reserved (e.g. for utf32le, or more single byte collations) + 512 + (64..95) for utf8 + 512 + (96..127) for utf8mb4 + 512 + (128..159) for ucs2 + 512 + (160..192) for utf16 + 512 + (192..223) for utf16le + 512 + (224..255) for utf32 +*/ +#define MY_PAGE2_COLLATION_ID_8BIT 0x200 +#define MY_PAGE2_COLLATION_ID_RESERVED 0x220 +#define MY_PAGE2_COLLATION_ID_UTF8 0x240 +#define MY_PAGE2_COLLATION_ID_UTF8MB4 0x260 +#define MY_PAGE2_COLLATION_ID_UCS2 0x280 +#define MY_PAGE2_COLLATION_ID_UTF16 0x2A0 +#define MY_PAGE2_COLLATION_ID_UTF16LE 0x2C0 +#define MY_PAGE2_COLLATION_ID_UTF32 0x2E0 + struct my_uni_idx_st { uint16 from; diff --git a/include/my_base.h b/include/my_base.h index c195830e35a..ed27ef7e843 100644 --- a/include/my_base.h +++ b/include/my_base.h @@ -48,6 +48,11 @@ #define HA_OPEN_INTERNAL_TABLE 512 #define HA_OPEN_NO_PSI_CALL 1024 /* Don't call/connect PSI */ #define HA_OPEN_MERGE_TABLE 2048 +/* + Allow opening even if table is incompatible as this is for ALTER TABLE which + will fix the table structure. +*/ +#define HA_OPEN_FOR_ALTER 4096 /* The following is parameter to ha_rkey() how to use key */ diff --git a/mysql-test/r/ctype_ldml.result b/mysql-test/r/ctype_ldml.result index bd96a1f6255..932df0322db 100644 --- a/mysql-test/r/ctype_ldml.result +++ b/mysql-test/r/ctype_ldml.result @@ -407,7 +407,7 @@ select "foo" = "foo " collate latin1_test; "foo" = "foo " collate latin1_test 1 The following tests check that two-byte collation IDs work -select * from information_schema.collations where id>256 order by id; +select * from information_schema.collations where id>256 and is_compiled<>'Yes' order by id; COLLATION_NAME CHARACTER_SET_NAME ID IS_DEFAULT IS_COMPILED SORTLEN utf8mb4_test_ci utf8mb4 326 8 utf16_test_ci utf16 327 8 diff --git a/mysql-test/r/ctype_uca.result b/mysql-test/r/ctype_uca.result index 29099a581ef..b67fb8fdc98 100644 --- a/mysql-test/r/ctype_uca.result +++ b/mysql-test/r/ctype_uca.result @@ -2168,6 +2168,116 @@ Z,z,Ź,ź,Ż,ż,Ž,ž ǁ ǂ ǃ +select group_concat(c1 order by c1) from t1 group by c1 collate utf8_croatian_mysql561_ci; +group_concat(c1 order by c1) +÷ +× +A,a,À,Á,Â,Ã,Ä,Å,à,á,â,ã,ä,å,Ā,ā,Ă,ă,Ą,ą,Ǎ,ǎ,Ǟ,ǟ,Ǡ,ǡ,Ǻ,ǻ,Ạ,ạ,Ả,ả,Ấ,ấ,Ầ,ầ,Ẩ,ẩ,Ẫ,ẫ,Ậ,ậ,Ắ,ắ,Ằ,ằ,Ẳ,ẳ,Ẵ,ẵ,Ặ,ặ +AA,Aa,aA,aa +AE,Ae,aE,ae +Æ,æ,Ǣ,ǣ,Ǽ,ǽ +B,b +ƀ +Ɓ +Ƃ,ƃ +C,c,Ç,ç,Ĉ,ĉ,Ċ,ċ +CH,Ch,cH,ch +Č,č +Ć,ć +Ƈ,ƈ +D,d,Ď,ď +DZ,Dz,dZ,dz,DZ,Dz,dz +DŽ,Dž,dŽ,dž,DŽ,Dž,dž +Đ,đ +Ɖ +Ɗ +Ƌ,ƌ +Ð,ð +E,e,È,É,Ê,Ë,è,é,ê,ë,Ē,ē,Ĕ,ĕ,Ė,ė,Ę,ę,Ě,ě,Ẹ,ẹ,Ẻ,ẻ,Ẽ,ẽ,Ế,ế,Ề,ề,Ể,ể,Ễ,ễ,Ệ,ệ +Ǝ,ǝ +Ə +Ɛ +F,f +Ƒ,ƒ +G,g,Ĝ,ĝ,Ğ,ğ,Ġ,ġ,Ģ,ģ,Ǧ,ǧ,Ǵ,ǵ +Ǥ,ǥ +Ɠ +Ɣ +Ƣ,ƣ +H,h,Ĥ,ĥ +ƕ,Ƕ +Ħ,ħ +I,i,Ì,Í,Î,Ï,ì,í,î,ï,Ĩ,ĩ,Ī,ī,Ĭ,ĭ,Į,į,İ,Ǐ,ǐ,Ỉ,ỉ,Ị,ị +IJ,Ij,iJ,ij,IJ,ij +ı +Ɨ +Ɩ +J,j,Ĵ,ĵ,ǰ +K,k,Ķ,ķ,Ǩ,ǩ +Ƙ,ƙ +L,l,Ĺ,ĺ,Ļ,ļ,Ľ,ľ +Ŀ,ŀ +LL,Ll,lL,ll +LJ,Lj,lJ,lj,LJ,Lj,lj +Ł,ł +ƚ +ƛ +M,m +N,n,Ñ,ñ,Ń,ń,Ņ,ņ,Ň,ň,Ǹ,ǹ +NJ,Nj,nJ,nj,NJ,Nj,nj +Ɲ +ƞ +Ŋ,ŋ +O,o,Ò,Ó,Ô,Õ,Ö,ò,ó,ô,õ,ö,Ō,ō,Ŏ,ŏ,Ő,ő,Ơ,ơ,Ǒ,ǒ,Ǫ,ǫ,Ǭ,ǭ,Ọ,ọ,Ỏ,ỏ,Ố,ố,Ồ,ồ,Ổ,ổ,Ỗ,ỗ,Ộ,ộ,Ớ,ớ,Ờ,ờ,Ở,ở,Ỡ,ỡ,Ợ,ợ +OE,Oe,oE,oe,Œ,œ +Ø,ø,Ǿ,ǿ +Ɔ +Ɵ +P,p +Ƥ,ƥ +Q,q +ĸ +R,r,Ŕ,ŕ,Ŗ,ŗ,Ř,ř +RR,Rr,rR,rr +Ʀ +S,s,Ś,ś,Ŝ,ŝ,Ş,ş,ſ +SS,Ss,sS,ss,ß +Š,š +Ʃ +ƪ +T,t,Ţ,ţ,Ť,ť +ƾ +Ŧ,ŧ +ƫ +Ƭ,ƭ +Ʈ +U,u,Ù,Ú,Û,Ü,ù,ú,û,ü,Ũ,ũ,Ū,ū,Ŭ,ŭ,Ů,ů,Ű,ű,Ų,ų,Ư,ư,Ǔ,ǔ,Ǖ,ǖ,Ǘ,ǘ,Ǚ,ǚ,Ǜ,ǜ,Ụ,ụ,Ủ,ủ,Ứ,ứ,Ừ,ừ,Ử,ử,Ữ,ữ,Ự,ự +Ɯ +Ʊ +V,v +Ʋ +W,w,Ŵ,ŵ +X,x +Y,y,Ý,ý,ÿ,Ŷ,ŷ,Ÿ +Ƴ,ƴ +Z,z,Ź,ź,Ż,ż +ƍ +Ž,ž +Ƶ,ƶ +Ʒ,Ǯ,ǯ +Ƹ,ƹ +ƺ +Þ,þ +ƿ,Ƿ +ƻ +Ƨ,ƨ +Ƽ,ƽ +Ƅ,ƅ +ʼn +ǀ +ǁ +ǂ +ǃ select group_concat(c1 order by c1) from t1 group by c1 collate utf8_croatian_ci; group_concat(c1 order by c1) ÷ @@ -4367,6 +4477,116 @@ Z,z,Ź,ź,Ż,ż,Ž,ž ǁ ǂ ǃ +SELECT GROUP_CONCAT(c1 ORDER BY c1) FROM t1 GROUP BY c1 COLLATE ucs2_croatian_mysql561_ci; +GROUP_CONCAT(c1 ORDER BY c1) +÷ +× +A,a,À,Á,Â,Ã,Ä,Å,à,á,â,ã,ä,å,Ā,ā,Ă,ă,Ą,ą,Ǎ,ǎ,Ǟ,ǟ,Ǡ,ǡ,Ǻ,ǻ,Ạ,ạ,Ả,ả,Ấ,ấ,Ầ,ầ,Ẩ,ẩ,Ẫ,ẫ,Ậ,ậ,Ắ,ắ,Ằ,ằ,Ẳ,ẳ,Ẵ,ẵ,Ặ,ặ +AA,Aa,aA,aa +AE,Ae,aE,ae +Æ,æ,Ǣ,ǣ,Ǽ,ǽ +B,b +ƀ +Ɓ +Ƃ,ƃ +C,c,Ç,ç,Ĉ,ĉ,Ċ,ċ +CH,Ch,cH,ch +Č,č +Ć,ć +Ƈ,ƈ +D,d,Ď,ď +DZ,Dz,dZ,dz,DZ,Dz,dz +DŽ,Dž,dŽ,dž,DŽ,Dž,dž +Đ,đ +Ɖ +Ɗ +Ƌ,ƌ +Ð,ð +E,e,È,É,Ê,Ë,è,é,ê,ë,Ē,ē,Ĕ,ĕ,Ė,ė,Ę,ę,Ě,ě,Ẹ,ẹ,Ẻ,ẻ,Ẽ,ẽ,Ế,ế,Ề,ề,Ể,ể,Ễ,ễ,Ệ,ệ +Ǝ,ǝ +Ə +Ɛ +F,f +Ƒ,ƒ +G,g,Ĝ,ĝ,Ğ,ğ,Ġ,ġ,Ģ,ģ,Ǧ,ǧ,Ǵ,ǵ +Ǥ,ǥ +Ɠ +Ɣ +Ƣ,ƣ +H,h,Ĥ,ĥ +ƕ,Ƕ +Ħ,ħ +I,i,Ì,Í,Î,Ï,ì,í,î,ï,Ĩ,ĩ,Ī,ī,Ĭ,ĭ,Į,į,İ,Ǐ,ǐ,Ỉ,ỉ,Ị,ị +IJ,Ij,iJ,ij,IJ,ij +ı +Ɨ +Ɩ +J,j,Ĵ,ĵ,ǰ +K,k,Ķ,ķ,Ǩ,ǩ +Ƙ,ƙ +L,l,Ĺ,ĺ,Ļ,ļ,Ľ,ľ +Ŀ,ŀ +LL,Ll,lL,ll +LJ,Lj,lJ,lj,LJ,Lj,lj +Ł,ł +ƚ +ƛ +M,m +N,n,Ñ,ñ,Ń,ń,Ņ,ņ,Ň,ň,Ǹ,ǹ +NJ,Nj,nJ,nj,NJ,Nj,nj +Ɲ +ƞ +Ŋ,ŋ +O,o,Ò,Ó,Ô,Õ,Ö,ò,ó,ô,õ,ö,Ō,ō,Ŏ,ŏ,Ő,ő,Ơ,ơ,Ǒ,ǒ,Ǫ,ǫ,Ǭ,ǭ,Ọ,ọ,Ỏ,ỏ,Ố,ố,Ồ,ồ,Ổ,ổ,Ỗ,ỗ,Ộ,ộ,Ớ,ớ,Ờ,ờ,Ở,ở,Ỡ,ỡ,Ợ,ợ +OE,Oe,oE,oe,Œ,œ +Ø,ø,Ǿ,ǿ +Ɔ +Ɵ +P,p +Ƥ,ƥ +Q,q +ĸ +R,r,Ŕ,ŕ,Ŗ,ŗ,Ř,ř +RR,Rr,rR,rr +Ʀ +S,s,Ś,ś,Ŝ,ŝ,Ş,ş,ſ +SS,Ss,sS,ss,ß +Š,š +Ʃ +ƪ +T,t,Ţ,ţ,Ť,ť +ƾ +Ŧ,ŧ +ƫ +Ƭ,ƭ +Ʈ +U,u,Ù,Ú,Û,Ü,ù,ú,û,ü,Ũ,ũ,Ū,ū,Ŭ,ŭ,Ů,ů,Ű,ű,Ų,ų,Ư,ư,Ǔ,ǔ,Ǖ,ǖ,Ǘ,ǘ,Ǚ,ǚ,Ǜ,ǜ,Ụ,ụ,Ủ,ủ,Ứ,ứ,Ừ,ừ,Ử,ử,Ữ,ữ,Ự,ự +Ɯ +Ʊ +V,v +Ʋ +W,w,Ŵ,ŵ +X,x +Y,y,Ý,ý,ÿ,Ŷ,ŷ,Ÿ +Ƴ,ƴ +Z,z,Ź,ź,Ż,ż +ƍ +Ž,ž +Ƶ,ƶ +Ʒ,Ǯ,ǯ +Ƹ,ƹ +ƺ +Þ,þ +ƿ,Ƿ +ƻ +Ƨ,ƨ +Ƽ,ƽ +Ƅ,ƅ +ʼn +ǀ +ǁ +ǂ +ǃ SELECT GROUP_CONCAT(c1 ORDER BY c1) FROM t1 GROUP BY c1 COLLATE ucs2_croatian_ci; GROUP_CONCAT(c1 ORDER BY c1) ÷ @@ -5661,7 +5881,7 @@ HEX(s1) 0061000000000000000000000009 0061 DROP TABLE t1; -create table t1 (a int, c1 varchar(200) collate utf8_croatian_ci, key (c1)); +create table t1 (a int, c1 varchar(200) collate utf8_croatian_mysql561_ci, key (c1)); insert into t1 values (1,'=> DZ'),(2,'=> Dz'),(3,'=> dz'),(4,'=> dZ'); insert into t1 values (5,'=> DŽ'),(6,'=> Dž'),(7,'=> dž'),(8,'=> dŽ'); insert into t1 values (9,'=> dž'),(10,'=> DŽ'); @@ -5671,10 +5891,10 @@ c1 => Dz => dz => dZ -=> dŽ => DŽ => Dž => dž +=> dŽ => dž => DŽ select concat(c1) from t1 order by c1; @@ -5683,10 +5903,10 @@ concat(c1) => Dz => dz => dZ -=> dŽ => DŽ => Dž => dž +=> dŽ => dž => DŽ select * from t1 where c1 like '=> d%'; @@ -5738,6 +5958,7 @@ a c1 5 => DŽ 6 => Dž 7 => dž +8 => dŽ 9 => dž 10 => DŽ select * from t1 where concat(c1) = '=> dž'; @@ -5745,6 +5966,7 @@ a c1 5 => DŽ 6 => Dž 7 => dž +8 => dŽ 9 => dž 10 => DŽ drop table t1; diff --git a/mysql-test/r/ctype_upgrade.result b/mysql-test/r/ctype_upgrade.result new file mode 100644 index 00000000000..0fc73203494 --- /dev/null +++ b/mysql-test/r/ctype_upgrade.result @@ -0,0 +1,389 @@ +call mtr.add_suppression("Table rebuild required"); +# +# Upgrade from Maria-5.3.13: +# Checking utf8_croatian_ci in a VARCHAR column +# +# Copying maria050313_utf8_croatian_ci.* to MYSQLD_DATADIR +CHECK TABLE maria050313_utf8_croatian_ci FOR UPGRADE; +Table Op Msg_type Msg_text +test.maria050313_utf8_croatian_ci check error Table upgrade required. Please do "REPAIR TABLE `maria050313_utf8_croatian_ci`" or dump/reload to fix it! +SHOW CREATE TABLE maria050313_utf8_croatian_ci; +ERROR HY000: Table rebuild required. Please do "ALTER TABLE `test.maria050313_utf8_croatian_c` FORCE" or dump/reload to fix it! +REPAIR TABLE maria050313_utf8_croatian_ci; +Table Op Msg_type Msg_text +test.maria050313_utf8_croatian_ci repair status OK +CHECK TABLE maria050313_utf8_croatian_ci FOR UPGRADE; +Table Op Msg_type Msg_text +test.maria050313_utf8_croatian_ci check status OK +SHOW CREATE TABLE maria050313_utf8_croatian_ci; +Table Create Table +maria050313_utf8_croatian_ci CREATE TABLE `maria050313_utf8_croatian_ci` ( + `a` varchar(10) CHARACTER SET utf8 COLLATE utf8_croatian_ci DEFAULT NULL +) ENGINE=MyISAM DEFAULT CHARSET=latin1 +SELECT count(*) FROM maria050313_utf8_croatian_ci; +count(*) +4 +DROP TABLE maria050313_utf8_croatian_ci; +# Copying maria050313_utf8_croatian_ci.* to MYSQLD_DATADIR +ALTER TABLE maria050313_utf8_croatian_ci FORCE; +SHOW CREATE TABLE maria050313_utf8_croatian_ci; +Table Create Table +maria050313_utf8_croatian_ci CREATE TABLE `maria050313_utf8_croatian_ci` ( + `a` varchar(10) CHARACTER SET utf8 COLLATE utf8_croatian_ci DEFAULT NULL +) ENGINE=MyISAM DEFAULT CHARSET=latin1 +SELECT GROUP_CONCAT(a ORDER BY BINARY a) FROM maria050313_utf8_croatian_ci GROUP BY a; +GROUP_CONCAT(a ORDER BY BINARY a) +nJ +NJ,Nj,nj +DROP TABLE maria050313_utf8_croatian_ci; +# +# Upgrade from Maria-5.3.13: +# Checking ucs2_croatian_ci in the table default collation +# +# Copying maria050313_ucs2_croatian_ci.* to MYSQLD_DATADIR +CHECK TABLE maria050313_ucs2_croatian_ci_def FOR UPGRADE; +Table Op Msg_type Msg_text +test.maria050313_ucs2_croatian_ci_def check error Table upgrade required. Please do "REPAIR TABLE `maria050313_ucs2_croatian_ci_def`" or dump/reload to fix it! +SELECT count(*) FROM maria050313_ucs2_croatian_ci_def; +ERROR HY000: Table rebuild required. Please do "ALTER TABLE `test.maria050313_ucs2_croatian_c` FORCE" or dump/reload to fix it! +REPAIR TABLE maria050313_ucs2_croatian_ci_def; +Table Op Msg_type Msg_text +test.maria050313_ucs2_croatian_ci_def repair status OK +SHOW CREATE TABLE maria050313_ucs2_croatian_ci_def; +Table Create Table +maria050313_ucs2_croatian_ci_def CREATE TABLE `maria050313_ucs2_croatian_ci_def` ( + `a` int(11) DEFAULT NULL +) ENGINE=MyISAM DEFAULT CHARSET=utf8 COLLATE=utf8_croatian_ci +DROP TABLE maria050313_ucs2_croatian_ci_def; +# Copying maria050313_ucs2_croatian_ci.* to MYSQLD_DATADIR +CHECK TABLE maria050313_ucs2_croatian_ci_def; +Table Op Msg_type Msg_text +test.maria050313_ucs2_croatian_ci_def check error Table upgrade required. Please do "REPAIR TABLE `maria050313_ucs2_croatian_ci_def`" or dump/reload to fix it! +REPAIR TABLE maria050313_ucs2_croatian_ci_def; +Table Op Msg_type Msg_text +test.maria050313_ucs2_croatian_ci_def repair status OK +CHECK TABLE maria050313_ucs2_croatian_ci_def; +Table Op Msg_type Msg_text +test.maria050313_ucs2_croatian_ci_def check status OK +SHOW CREATE TABLE maria050313_ucs2_croatian_ci_def; +Table Create Table +maria050313_ucs2_croatian_ci_def CREATE TABLE `maria050313_ucs2_croatian_ci_def` ( + `a` int(11) DEFAULT NULL +) ENGINE=MyISAM DEFAULT CHARSET=utf8 COLLATE=utf8_croatian_ci +SELECT * FROM maria050313_ucs2_croatian_ci_def ORDER BY a; +a +1 +2 +3 +DROP TABLE maria050313_ucs2_croatian_ci_def; +# +# Upgrade from Maria-5.5.33 +# Checking utf8_croatian_ci, utf8mb4_croatian_ci, ucs2_croatian_ci, +# utf16_croatian_ci, utf32_croatian_ci +# +# Copying maria050533_xxx_croatian_ci.* to MYSQLD_DATADIR +CHECK TABLE maria050533_xxx_croatian_ci FOR UPGRADE; +Table Op Msg_type Msg_text +test.maria050533_xxx_croatian_ci check error Table upgrade required. Please do "REPAIR TABLE `maria050533_xxx_croatian_ci`" or dump/reload to fix it! +REPAIR TABLE maria050533_xxx_croatian_ci; +Table Op Msg_type Msg_text +test.maria050533_xxx_croatian_ci repair status OK +SHOW CREATE TABLE maria050533_xxx_croatian_ci; +Table Create Table +maria050533_xxx_croatian_ci CREATE TABLE `maria050533_xxx_croatian_ci` ( + `a` varchar(10) CHARACTER SET utf8 COLLATE utf8_croatian_ci DEFAULT NULL, + `b` varchar(10) CHARACTER SET utf8mb4 COLLATE utf8mb4_croatian_ci DEFAULT NULL, + `c` varchar(10) CHARACTER SET ucs2 COLLATE ucs2_croatian_ci DEFAULT NULL, + `d` varchar(10) CHARACTER SET utf16 COLLATE utf16_croatian_ci DEFAULT NULL, + `e` varchar(10) CHARACTER SET utf32 COLLATE utf32_croatian_ci DEFAULT NULL +) ENGINE=MyISAM DEFAULT CHARSET=latin1 +SELECT count(*) FROM maria050533_xxx_croatian_ci; +count(*) +4 +DROP TABLE maria050533_xxx_croatian_ci; +# Copying maria050533_xxx_croatian_ci.* to MYSQLD_DATADIR +ALTER TABLE maria050533_xxx_croatian_ci FORCE; +SHOW CREATE TABLE maria050533_xxx_croatian_ci; +Table Create Table +maria050533_xxx_croatian_ci CREATE TABLE `maria050533_xxx_croatian_ci` ( + `a` varchar(10) CHARACTER SET utf8 COLLATE utf8_croatian_ci DEFAULT NULL, + `b` varchar(10) CHARACTER SET utf8mb4 COLLATE utf8mb4_croatian_ci DEFAULT NULL, + `c` varchar(10) CHARACTER SET ucs2 COLLATE ucs2_croatian_ci DEFAULT NULL, + `d` varchar(10) CHARACTER SET utf16 COLLATE utf16_croatian_ci DEFAULT NULL, + `e` varchar(10) CHARACTER SET utf32 COLLATE utf32_croatian_ci DEFAULT NULL +) ENGINE=MyISAM DEFAULT CHARSET=latin1 +SELECT GROUP_CONCAT(a ORDER BY BINARY a) FROM maria050533_xxx_croatian_ci GROUP BY a; +GROUP_CONCAT(a ORDER BY BINARY a) +nJ +NJ,Nj,nj +SELECT GROUP_CONCAT(b ORDER BY BINARY b) FROM maria050533_xxx_croatian_ci GROUP BY b; +GROUP_CONCAT(b ORDER BY BINARY b) +nJ +NJ,Nj,nj +SELECT GROUP_CONCAT(c ORDER BY BINARY c) FROM maria050533_xxx_croatian_ci GROUP BY c; +GROUP_CONCAT(c ORDER BY BINARY c) +nJ +NJ,Nj,nj +SELECT GROUP_CONCAT(d ORDER BY BINARY d) FROM maria050533_xxx_croatian_ci GROUP BY d; +GROUP_CONCAT(d ORDER BY BINARY d) +nJ +NJ,Nj,nj +SELECT GROUP_CONCAT(e ORDER BY BINARY e) FROM maria050533_xxx_croatian_ci GROUP BY e; +GROUP_CONCAT(e ORDER BY BINARY e) +nJ +NJ,Nj,nj +DROP TABLE maria050533_xxx_croatian_ci; +# +# Upgrade from Maria-10.0.4 +# Checking utf8_croatian_ci, utf8mb4_croatian_ci, ucs2_croatian_ci, +# utf16_croatian_ci, utf32_croatian_ci +# +# Copying maria100004_xxx_croatian_ci.* to MYSQLD_DATADIR +CHECK TABLE maria100004_xxx_croatian_ci FOR UPGRADE; +Table Op Msg_type Msg_text +test.maria100004_xxx_croatian_ci check error Table upgrade required. Please do "REPAIR TABLE `maria100004_xxx_croatian_ci`" or dump/reload to fix it! +SELECT count(*) FROM maria100004_xxx_croatian_ci; +ERROR HY000: Table rebuild required. Please do "ALTER TABLE `test.maria100004_xxx_croatian_ci` FORCE" or dump/reload to fix it! +REPAIR TABLE maria100004_xxx_croatian_ci; +Table Op Msg_type Msg_text +test.maria100004_xxx_croatian_ci repair status OK +SHOW CREATE TABLE maria100004_xxx_croatian_ci; +Table Create Table +maria100004_xxx_croatian_ci CREATE TABLE `maria100004_xxx_croatian_ci` ( + `a` varchar(10) COLLATE utf8_croatian_ci DEFAULT NULL, + `b` varchar(10) CHARACTER SET utf8mb4 COLLATE utf8mb4_croatian_ci DEFAULT NULL, + `c` varchar(10) CHARACTER SET ucs2 COLLATE ucs2_croatian_ci DEFAULT NULL, + `d` varchar(10) CHARACTER SET utf16 COLLATE utf16_croatian_ci DEFAULT NULL, + `e` varchar(10) CHARACTER SET utf32 COLLATE utf32_croatian_ci DEFAULT NULL +) ENGINE=MyISAM DEFAULT CHARSET=utf8 COLLATE=utf8_croatian_ci +DROP TABLE maria100004_xxx_croatian_ci; +# Copying maria100004_xxx_croatian_ci.* to MYSQLD_DATADIR +ALTER TABLE maria100004_xxx_croatian_ci FORCE; +SHOW CREATE TABLE maria100004_xxx_croatian_ci; +Table Create Table +maria100004_xxx_croatian_ci CREATE TABLE `maria100004_xxx_croatian_ci` ( + `a` varchar(10) COLLATE utf8_croatian_ci DEFAULT NULL, + `b` varchar(10) CHARACTER SET utf8mb4 COLLATE utf8mb4_croatian_ci DEFAULT NULL, + `c` varchar(10) CHARACTER SET ucs2 COLLATE ucs2_croatian_ci DEFAULT NULL, + `d` varchar(10) CHARACTER SET utf16 COLLATE utf16_croatian_ci DEFAULT NULL, + `e` varchar(10) CHARACTER SET utf32 COLLATE utf32_croatian_ci DEFAULT NULL +) ENGINE=MyISAM DEFAULT CHARSET=utf8 COLLATE=utf8_croatian_ci +SELECT GROUP_CONCAT(a ORDER BY BINARY a) FROM maria100004_xxx_croatian_ci GROUP BY a; +GROUP_CONCAT(a ORDER BY BINARY a) +nJ +NJ,Nj,nj +SELECT GROUP_CONCAT(b ORDER BY BINARY b) FROM maria100004_xxx_croatian_ci GROUP BY b; +GROUP_CONCAT(b ORDER BY BINARY b) +nJ +NJ,Nj,nj +SELECT GROUP_CONCAT(c ORDER BY BINARY c) FROM maria100004_xxx_croatian_ci GROUP BY c; +GROUP_CONCAT(c ORDER BY BINARY c) +nJ +NJ,Nj,nj +SELECT GROUP_CONCAT(d ORDER BY BINARY d) FROM maria100004_xxx_croatian_ci GROUP BY d; +GROUP_CONCAT(d ORDER BY BINARY d) +nJ +NJ,Nj,nj +SELECT GROUP_CONCAT(e ORDER BY BINARY e) FROM maria100004_xxx_croatian_ci GROUP BY e; +GROUP_CONCAT(e ORDER BY BINARY e) +nJ +NJ,Nj,nj +DROP TABLE maria100004_xxx_croatian_ci; +# +# Upgrade from MySQL-5.6.14 +# Checking utf8_croatian_ci, utf8mb4_croatian_ci, ucs2_croatian_ci, +# utf16_croatian_ci, utf32_croatian_ci +# +# Copying mysql050614_xxx_croatian_ci.* to MYSQLD_DATADIR +CHECK TABLE mysql050614_xxx_croatian_ci FOR UPGRADE; +Table Op Msg_type Msg_text +test.mysql050614_xxx_croatian_ci check status OK +SHOW CREATE TABLE mysql050614_xxx_croatian_ci; +Table Create Table +mysql050614_xxx_croatian_ci CREATE TABLE `mysql050614_xxx_croatian_ci` ( + `a` varchar(10) COLLATE utf8_croatian_mysql561_ci DEFAULT NULL, + `b` varchar(10) CHARACTER SET utf8mb4 COLLATE utf8mb4_croatian_mysql561_ci DEFAULT NULL, + `c` varchar(10) CHARACTER SET ucs2 COLLATE ucs2_croatian_mysql561_ci DEFAULT NULL, + `d` varchar(10) CHARACTER SET utf16 COLLATE utf16_croatian_mysql561_ci DEFAULT NULL, + `e` varchar(10) CHARACTER SET utf32 COLLATE utf32_croatian_mysql561_ci DEFAULT NULL +) ENGINE=MyISAM DEFAULT CHARSET=utf8 COLLATE=utf8_croatian_mysql561_ci +SELECT GROUP_CONCAT(a ORDER BY BINARY a) FROM mysql050614_xxx_croatian_ci GROUP BY a; +GROUP_CONCAT(a ORDER BY BINARY a) +NJ,Nj,nJ,nj +SELECT GROUP_CONCAT(b ORDER BY BINARY b) FROM mysql050614_xxx_croatian_ci GROUP BY b; +GROUP_CONCAT(b ORDER BY BINARY b) +NJ,Nj,nJ,nj +SELECT GROUP_CONCAT(c ORDER BY BINARY c) FROM mysql050614_xxx_croatian_ci GROUP BY c; +GROUP_CONCAT(c ORDER BY BINARY c) +NJ,Nj,nJ,nj +SELECT GROUP_CONCAT(d ORDER BY BINARY d) FROM mysql050614_xxx_croatian_ci GROUP BY d; +GROUP_CONCAT(d ORDER BY BINARY d) +NJ,Nj,nJ,nj +SELECT GROUP_CONCAT(e ORDER BY BINARY e) FROM mysql050614_xxx_croatian_ci GROUP BY e; +GROUP_CONCAT(e ORDER BY BINARY e) +NJ,Nj,nJ,nj +DROP TABLE mysql050614_xxx_croatian_ci; +# +# Checking mysql_upgrade +# +# Running mysql_upgrade +Phase 1/3: Fixing table and database names +Phase 2/3: Checking and upgrading tables +Processing databases +information_schema +mtr +mtr.global_suppressions OK +mtr.test_suppressions OK +mysql +mysql.column_stats OK +mysql.columns_priv OK +mysql.db OK +mysql.event OK +mysql.func OK +mysql.gtid_slave_pos OK +mysql.help_category OK +mysql.help_keyword OK +mysql.help_relation OK +mysql.help_topic OK +mysql.host OK +mysql.index_stats OK +mysql.innodb_index_stats OK +mysql.innodb_table_stats OK +mysql.plugin OK +mysql.proc OK +mysql.procs_priv OK +mysql.proxies_priv OK +mysql.roles_mapping OK +mysql.servers OK +mysql.table_stats OK +mysql.tables_priv OK +mysql.time_zone OK +mysql.time_zone_leap_second OK +mysql.time_zone_name OK +mysql.time_zone_transition OK +mysql.time_zone_transition_type OK +mysql.user OK +performance_schema +test +test.maria050313_ucs2_croatian_ci_def Needs upgrade +test.maria050313_utf8_croatian_ci Needs upgrade +test.maria050533_xxx_croatian_ci Needs upgrade +test.maria100004_xxx_croatian_ci Needs upgrade +test.mysql050614_xxx_croatian_ci OK + +Repairing tables +test.maria050313_ucs2_croatian_ci_def OK +test.maria050313_utf8_croatian_ci OK +test.maria050533_xxx_croatian_ci OK +test.maria100004_xxx_croatian_ci OK +Phase 3/3: Running 'mysql_fix_privilege_tables'... +OK +# Running mysql_upgrade for the second time +# This should report OK for all tables +Phase 1/3: Fixing table and database names +Phase 2/3: Checking and upgrading tables +Processing databases +information_schema +mtr +mtr.global_suppressions OK +mtr.test_suppressions OK +mysql +mysql.column_stats OK +mysql.columns_priv OK +mysql.db OK +mysql.event OK +mysql.func OK +mysql.gtid_slave_pos OK +mysql.help_category OK +mysql.help_keyword OK +mysql.help_relation OK +mysql.help_topic OK +mysql.host OK +mysql.index_stats OK +mysql.innodb_index_stats OK +mysql.innodb_table_stats OK +mysql.plugin OK +mysql.proc OK +mysql.procs_priv OK +mysql.proxies_priv OK +mysql.roles_mapping OK +mysql.servers OK +mysql.table_stats OK +mysql.tables_priv OK +mysql.time_zone OK +mysql.time_zone_leap_second OK +mysql.time_zone_name OK +mysql.time_zone_transition OK +mysql.time_zone_transition_type OK +mysql.user OK +performance_schema +test +test.maria050313_ucs2_croatian_ci_def OK +test.maria050313_utf8_croatian_ci OK +test.maria050533_xxx_croatian_ci OK +test.maria100004_xxx_croatian_ci OK +test.mysql050614_xxx_croatian_ci OK +Phase 3/3: Running 'mysql_fix_privilege_tables'... +OK +SHOW CREATE TABLE maria050313_ucs2_croatian_ci_def; +Table Create Table +maria050313_ucs2_croatian_ci_def CREATE TABLE `maria050313_ucs2_croatian_ci_def` ( + `a` int(11) DEFAULT NULL +) ENGINE=MyISAM DEFAULT CHARSET=utf8 COLLATE=utf8_croatian_ci +SELECT * FROM maria050313_ucs2_croatian_ci_def ORDER BY a; +a +1 +2 +3 +SHOW CREATE TABLE maria050313_utf8_croatian_ci; +Table Create Table +maria050313_utf8_croatian_ci CREATE TABLE `maria050313_utf8_croatian_ci` ( + `a` varchar(10) CHARACTER SET utf8 COLLATE utf8_croatian_ci DEFAULT NULL +) ENGINE=MyISAM DEFAULT CHARSET=latin1 +SELECT GROUP_CONCAT(a ORDER BY BINARY a) FROM maria050313_utf8_croatian_ci GROUP BY a; +GROUP_CONCAT(a ORDER BY BINARY a) +nJ +NJ,Nj,nj +SHOW CREATE TABLE maria050533_xxx_croatian_ci; +Table Create Table +maria050533_xxx_croatian_ci CREATE TABLE `maria050533_xxx_croatian_ci` ( + `a` varchar(10) CHARACTER SET utf8 COLLATE utf8_croatian_ci DEFAULT NULL, + `b` varchar(10) CHARACTER SET utf8mb4 COLLATE utf8mb4_croatian_ci DEFAULT NULL, + `c` varchar(10) CHARACTER SET ucs2 COLLATE ucs2_croatian_ci DEFAULT NULL, + `d` varchar(10) CHARACTER SET utf16 COLLATE utf16_croatian_ci DEFAULT NULL, + `e` varchar(10) CHARACTER SET utf32 COLLATE utf32_croatian_ci DEFAULT NULL +) ENGINE=MyISAM DEFAULT CHARSET=latin1 +SELECT GROUP_CONCAT(a ORDER BY BINARY a) FROM maria050533_xxx_croatian_ci GROUP BY a; +GROUP_CONCAT(a ORDER BY BINARY a) +nJ +NJ,Nj,nj +SHOW CREATE TABLE maria100004_xxx_croatian_ci; +Table Create Table +maria100004_xxx_croatian_ci CREATE TABLE `maria100004_xxx_croatian_ci` ( + `a` varchar(10) COLLATE utf8_croatian_ci DEFAULT NULL, + `b` varchar(10) CHARACTER SET utf8mb4 COLLATE utf8mb4_croatian_ci DEFAULT NULL, + `c` varchar(10) CHARACTER SET ucs2 COLLATE ucs2_croatian_ci DEFAULT NULL, + `d` varchar(10) CHARACTER SET utf16 COLLATE utf16_croatian_ci DEFAULT NULL, + `e` varchar(10) CHARACTER SET utf32 COLLATE utf32_croatian_ci DEFAULT NULL +) ENGINE=MyISAM DEFAULT CHARSET=utf8 COLLATE=utf8_croatian_ci +SELECT GROUP_CONCAT(a ORDER BY BINARY a) FROM maria100004_xxx_croatian_ci GROUP BY a; +GROUP_CONCAT(a ORDER BY BINARY a) +nJ +NJ,Nj,nj +SHOW CREATE TABLE mysql050614_xxx_croatian_ci; +Table Create Table +mysql050614_xxx_croatian_ci CREATE TABLE `mysql050614_xxx_croatian_ci` ( + `a` varchar(10) COLLATE utf8_croatian_mysql561_ci DEFAULT NULL, + `b` varchar(10) CHARACTER SET utf8mb4 COLLATE utf8mb4_croatian_mysql561_ci DEFAULT NULL, + `c` varchar(10) CHARACTER SET ucs2 COLLATE ucs2_croatian_mysql561_ci DEFAULT NULL, + `d` varchar(10) CHARACTER SET utf16 COLLATE utf16_croatian_mysql561_ci DEFAULT NULL, + `e` varchar(10) CHARACTER SET utf32 COLLATE utf32_croatian_mysql561_ci DEFAULT NULL +) ENGINE=MyISAM DEFAULT CHARSET=utf8 COLLATE=utf8_croatian_mysql561_ci +SELECT GROUP_CONCAT(a ORDER BY BINARY a) FROM mysql050614_xxx_croatian_ci GROUP BY a; +GROUP_CONCAT(a ORDER BY BINARY a) +NJ,Nj,nJ,nj +DROP TABLE maria050313_ucs2_croatian_ci_def; +DROP TABLE maria050313_utf8_croatian_ci; +DROP TABLE maria050533_xxx_croatian_ci; +DROP TABLE maria100004_xxx_croatian_ci; +DROP TABLE mysql050614_xxx_croatian_ci; diff --git a/mysql-test/r/ctype_utf16_uca.result b/mysql-test/r/ctype_utf16_uca.result index d471f1747da..9e7cf97f8f1 100644 --- a/mysql-test/r/ctype_utf16_uca.result +++ b/mysql-test/r/ctype_utf16_uca.result @@ -2177,6 +2177,116 @@ ZzŹźŻżŽž ǁ ǂ ǃ +select group_concat(c1 order by binary c1 separator '') from t1 group by c1 collate utf16_croatian_mysql561_ci; +group_concat(c1 order by binary c1 separator '') +÷ +× +AaÀÁÂÃÄÅàáâãäåĀāĂ㥹ǍǎǞǟǠǡǺǻẠạẢảẤấẦầẨẩẪẫẬậẮắẰằẲẳẴẵẶặ +AAAaaAaa +AEAeaEae +ÆæǢǣǼǽ +Bb +ƀ +Ɓ +Ƃƃ +CcÇçĈĉĊċ +CHChcHch +Čč +Ćć +Ƈƈ +DdĎď +DZDzdZdzDZDzdz +DŽDždŽdžDŽDždž +Đđ +Ɖ +Ɗ +Ƌƌ +Ðð +EeÈÉÊËèéêëĒēĔĕĖėĘęĚěẸẹẺẻẼẽẾếỀềỂểỄễỆệ +Ǝǝ +Ə +Ɛ +Ff +Ƒƒ +GgĜĝĞğĠġĢģǦǧǴǵ +Ǥǥ +Ɠ +Ɣ +Ƣƣ +HhĤĥ +ƕǶ +Ħħ +IiÌÍÎÏìíîïĨĩĪīĬĭĮįİǏǐỈỉỊị +IJIjiJijIJij +ı +Ɨ +Ɩ +JjĴĵǰ +KkĶķǨǩ +Ƙƙ +LlĹĺĻļĽľ +Ŀŀ +LLLllLll +LJLjlJljLJLjlj +Łł +ƚ +ƛ +Mm +NnÑñŃńŅņŇňǸǹ +NJNjnJnjNJNjnj +Ɲ +ƞ +Ŋŋ +OoÒÓÔÕÖòóôõöŌōŎŏŐőƠơǑǒǪǫǬǭỌọỎỏỐốỒồỔổỖỗỘộỚớỜờỞởỠỡỢợ +OEOeoEoeŒœ +ØøǾǿ +Ɔ +Ɵ +Pp +Ƥƥ +Qq +ĸ +RrŔŕŖŗŘř +RRRrrRrr +Ʀ +SsŚśŜŝŞşſ +SSSssSssß +Šš +Ʃ +ƪ +TtŢţŤť +ƾ +Ŧŧ +ƫ +Ƭƭ +Ʈ +UuÙÚÛÜùúûüŨũŪūŬŭŮůŰűŲųƯưǓǔǕǖǗǘǙǚǛǜỤụỦủỨứỪừỬửỮữỰự +Ɯ +Ʊ +Vv +Ʋ +WwŴŵ +Xx +YyÝýÿŶŷŸ +Ƴƴ +ZzŹźŻż +ƍ +Žž +Ƶƶ +ƷǮǯ +Ƹƹ +ƺ +Þþ +ƿǷ +ƻ +Ƨƨ +Ƽƽ +Ƅƅ +ʼn +ǀ +ǁ +ǂ +ǃ select group_concat(c1 order by binary c1 separator '') from t1 group by c1 collate utf16_croatian_ci; group_concat(c1 order by binary c1 separator '') ÷ diff --git a/mysql-test/r/ctype_utf32_uca.result b/mysql-test/r/ctype_utf32_uca.result index cfc918f238a..ab68764a263 100644 --- a/mysql-test/r/ctype_utf32_uca.result +++ b/mysql-test/r/ctype_utf32_uca.result @@ -2177,6 +2177,116 @@ ZzŹźŻżŽž ǁ ǂ ǃ +select group_concat(c1 order by binary c1 separator '') from t1 group by c1 collate utf32_croatian_mysql561_ci; +group_concat(c1 order by binary c1 separator '') +÷ +× +AaÀÁÂÃÄÅàáâãäåĀāĂ㥹ǍǎǞǟǠǡǺǻẠạẢảẤấẦầẨẩẪẫẬậẮắẰằẲẳẴẵẶặ +AAAaaAaa +AEAeaEae +ÆæǢǣǼǽ +Bb +ƀ +Ɓ +Ƃƃ +CcÇçĈĉĊċ +CHChcHch +Čč +Ćć +Ƈƈ +DdĎď +DZDzdZdzDZDzdz +DŽDždŽdžDŽDždž +Đđ +Ɖ +Ɗ +Ƌƌ +Ðð +EeÈÉÊËèéêëĒēĔĕĖėĘęĚěẸẹẺẻẼẽẾếỀềỂểỄễỆệ +Ǝǝ +Ə +Ɛ +Ff +Ƒƒ +GgĜĝĞğĠġĢģǦǧǴǵ +Ǥǥ +Ɠ +Ɣ +Ƣƣ +HhĤĥ +ƕǶ +Ħħ +IiÌÍÎÏìíîïĨĩĪīĬĭĮįİǏǐỈỉỊị +IJIjiJijIJij +ı +Ɨ +Ɩ +JjĴĵǰ +KkĶķǨǩ +Ƙƙ +LlĹĺĻļĽľ +Ŀŀ +LLLllLll +LJLjlJljLJLjlj +Łł +ƚ +ƛ +Mm +NnÑñŃńŅņŇňǸǹ +NJNjnJnjNJNjnj +Ɲ +ƞ +Ŋŋ +OoÒÓÔÕÖòóôõöŌōŎŏŐőƠơǑǒǪǫǬǭỌọỎỏỐốỒồỔổỖỗỘộỚớỜờỞởỠỡỢợ +OEOeoEoeŒœ +ØøǾǿ +Ɔ +Ɵ +Pp +Ƥƥ +Qq +ĸ +RrŔŕŖŗŘř +RRRrrRrr +Ʀ +SsŚśŜŝŞşſ +SSSssSssß +Šš +Ʃ +ƪ +TtŢţŤť +ƾ +Ŧŧ +ƫ +Ƭƭ +Ʈ +UuÙÚÛÜùúûüŨũŪūŬŭŮůŰűŲųƯưǓǔǕǖǗǘǙǚǛǜỤụỦủỨứỪừỬửỮữỰự +Ɯ +Ʊ +Vv +Ʋ +WwŴŵ +Xx +YyÝýÿŶŷŸ +Ƴƴ +ZzŹźŻż +ƍ +Žž +Ƶƶ +ƷǮǯ +Ƹƹ +ƺ +Þþ +ƿǷ +ƻ +Ƨƨ +Ƽƽ +Ƅƅ +ʼn +ǀ +ǁ +ǂ +ǃ select group_concat(c1 order by binary c1 separator '') from t1 group by c1 collate utf32_croatian_ci; group_concat(c1 order by binary c1 separator '') ÷ diff --git a/mysql-test/r/ctype_utf8mb4_uca.result b/mysql-test/r/ctype_utf8mb4_uca.result index 22beb8ee4cc..1e4648eedd6 100644 --- a/mysql-test/r/ctype_utf8mb4_uca.result +++ b/mysql-test/r/ctype_utf8mb4_uca.result @@ -2138,6 +2138,116 @@ ZzŹźŻżŽž ǁ ǂ ǃ +SELECT GROUP_CONCAT(c1 ORDER BY c1 SEPARATOR '') FROM t1 GROUP BY c1 COLLATE utf8mb4_croatian_mysql561_ci; +GROUP_CONCAT(c1 ORDER BY c1 SEPARATOR '') +÷ +× +AaÀÁÂÃÄÅàáâãäåĀāĂ㥹ǍǎǞǟǠǡǺǻẠạẢảẤấẦầẨẩẪẫẬậẮắẰằẲẳẴẵẶặ +AAAaaAaa +AEAeaEae +ÆæǢǣǼǽ +Bb +ƀ +Ɓ +Ƃƃ +CcÇçĈĉĊċ +CHChcHch +Čč +Ćć +Ƈƈ +DdĎď +DZDzdZdzDZDzdz +DŽDždŽdžDŽDždž +Đđ +Ɖ +Ɗ +Ƌƌ +Ðð +EeÈÉÊËèéêëĒēĔĕĖėĘęĚěẸẹẺẻẼẽẾếỀềỂểỄễỆệ +Ǝǝ +Ə +Ɛ +Ff +Ƒƒ +GgĜĝĞğĠġĢģǦǧǴǵ +Ǥǥ +Ɠ +Ɣ +Ƣƣ +HhĤĥ +ƕǶ +Ħħ +IiÌÍÎÏìíîïĨĩĪīĬĭĮįİǏǐỈỉỊị +IJIjiJijIJij +ı +Ɨ +Ɩ +JjĴĵǰ +KkĶķǨǩ +Ƙƙ +LlĹĺĻļĽľ +Ŀŀ +LLLllLll +LJLjlJljLJLjlj +Łł +ƚ +ƛ +Mm +NnÑñŃńŅņŇňǸǹ +NJNjnJnjNJNjnj +Ɲ +ƞ +Ŋŋ +OoÒÓÔÕÖòóôõöŌōŎŏŐőƠơǑǒǪǫǬǭỌọỎỏỐốỒồỔổỖỗỘộỚớỜờỞởỠỡỢợ +OEOeoEoeŒœ +ØøǾǿ +Ɔ +Ɵ +Pp +Ƥƥ +Qq +ĸ +RrŔŕŖŗŘř +RRRrrRrr +Ʀ +SsŚśŜŝŞşſ +SSSssSssß +Šš +Ʃ +ƪ +TtŢţŤť +ƾ +Ŧŧ +ƫ +Ƭƭ +Ʈ +UuÙÚÛÜùúûüŨũŪūŬŭŮůŰűŲųƯưǓǔǕǖǗǘǙǚǛǜỤụỦủỨứỪừỬửỮữỰự +Ɯ +Ʊ +Vv +Ʋ +WwŴŵ +Xx +YyÝýÿŶŷŸ +Ƴƴ +ZzŹźŻż +ƍ +Žž +Ƶƶ +ƷǮǯ +Ƹƹ +ƺ +Þþ +ƿǷ +ƻ +Ƨƨ +Ƽƽ +Ƅƅ +ʼn +ǀ +ǁ +ǂ +ǃ SELECT GROUP_CONCAT(c1 ORDER BY c1 SEPARATOR '') FROM t1 GROUP BY c1 COLLATE utf8mb4_croatian_ci; GROUP_CONCAT(c1 ORDER BY c1 SEPARATOR '') ÷ diff --git a/mysql-test/std_data/ctype_upgrade/maria050313_ucs2_croatian_ci_def.MYD b/mysql-test/std_data/ctype_upgrade/maria050313_ucs2_croatian_ci_def.MYD Binary files differnew file mode 100644 index 00000000000..4d8505c8ef4 --- /dev/null +++ b/mysql-test/std_data/ctype_upgrade/maria050313_ucs2_croatian_ci_def.MYD diff --git a/mysql-test/std_data/ctype_upgrade/maria050313_ucs2_croatian_ci_def.MYI b/mysql-test/std_data/ctype_upgrade/maria050313_ucs2_croatian_ci_def.MYI Binary files differnew file mode 100644 index 00000000000..a8992fd55e0 --- /dev/null +++ b/mysql-test/std_data/ctype_upgrade/maria050313_ucs2_croatian_ci_def.MYI diff --git a/mysql-test/std_data/ctype_upgrade/maria050313_ucs2_croatian_ci_def.frm b/mysql-test/std_data/ctype_upgrade/maria050313_ucs2_croatian_ci_def.frm Binary files differnew file mode 100644 index 00000000000..936f485f80e --- /dev/null +++ b/mysql-test/std_data/ctype_upgrade/maria050313_ucs2_croatian_ci_def.frm diff --git a/mysql-test/std_data/ctype_upgrade/maria050313_utf8_croatian_ci.MYD b/mysql-test/std_data/ctype_upgrade/maria050313_utf8_croatian_ci.MYD Binary files differnew file mode 100644 index 00000000000..1a6557647d1 --- /dev/null +++ b/mysql-test/std_data/ctype_upgrade/maria050313_utf8_croatian_ci.MYD diff --git a/mysql-test/std_data/ctype_upgrade/maria050313_utf8_croatian_ci.MYI b/mysql-test/std_data/ctype_upgrade/maria050313_utf8_croatian_ci.MYI Binary files differnew file mode 100644 index 00000000000..b55b64612dd --- /dev/null +++ b/mysql-test/std_data/ctype_upgrade/maria050313_utf8_croatian_ci.MYI diff --git a/mysql-test/std_data/ctype_upgrade/maria050313_utf8_croatian_ci.frm b/mysql-test/std_data/ctype_upgrade/maria050313_utf8_croatian_ci.frm Binary files differnew file mode 100644 index 00000000000..22645fbec0d --- /dev/null +++ b/mysql-test/std_data/ctype_upgrade/maria050313_utf8_croatian_ci.frm diff --git a/mysql-test/std_data/ctype_upgrade/maria050533_xxx_croatian_ci.MYD b/mysql-test/std_data/ctype_upgrade/maria050533_xxx_croatian_ci.MYD Binary files differnew file mode 100644 index 00000000000..4b9377d704c --- /dev/null +++ b/mysql-test/std_data/ctype_upgrade/maria050533_xxx_croatian_ci.MYD diff --git a/mysql-test/std_data/ctype_upgrade/maria050533_xxx_croatian_ci.MYI b/mysql-test/std_data/ctype_upgrade/maria050533_xxx_croatian_ci.MYI Binary files differnew file mode 100644 index 00000000000..7d349ed7bb3 --- /dev/null +++ b/mysql-test/std_data/ctype_upgrade/maria050533_xxx_croatian_ci.MYI diff --git a/mysql-test/std_data/ctype_upgrade/maria050533_xxx_croatian_ci.frm b/mysql-test/std_data/ctype_upgrade/maria050533_xxx_croatian_ci.frm Binary files differnew file mode 100644 index 00000000000..759d57f3088 --- /dev/null +++ b/mysql-test/std_data/ctype_upgrade/maria050533_xxx_croatian_ci.frm diff --git a/mysql-test/std_data/ctype_upgrade/maria100004_xxx_croatian_ci.MYD b/mysql-test/std_data/ctype_upgrade/maria100004_xxx_croatian_ci.MYD Binary files differnew file mode 100644 index 00000000000..4b9377d704c --- /dev/null +++ b/mysql-test/std_data/ctype_upgrade/maria100004_xxx_croatian_ci.MYD diff --git a/mysql-test/std_data/ctype_upgrade/maria100004_xxx_croatian_ci.MYI b/mysql-test/std_data/ctype_upgrade/maria100004_xxx_croatian_ci.MYI Binary files differnew file mode 100644 index 00000000000..15336f19ec9 --- /dev/null +++ b/mysql-test/std_data/ctype_upgrade/maria100004_xxx_croatian_ci.MYI diff --git a/mysql-test/std_data/ctype_upgrade/maria100004_xxx_croatian_ci.frm b/mysql-test/std_data/ctype_upgrade/maria100004_xxx_croatian_ci.frm Binary files differnew file mode 100644 index 00000000000..adb520df85c --- /dev/null +++ b/mysql-test/std_data/ctype_upgrade/maria100004_xxx_croatian_ci.frm diff --git a/mysql-test/std_data/ctype_upgrade/mysql050614_xxx_croatian_ci.MYD b/mysql-test/std_data/ctype_upgrade/mysql050614_xxx_croatian_ci.MYD Binary files differnew file mode 100644 index 00000000000..4b9377d704c --- /dev/null +++ b/mysql-test/std_data/ctype_upgrade/mysql050614_xxx_croatian_ci.MYD diff --git a/mysql-test/std_data/ctype_upgrade/mysql050614_xxx_croatian_ci.MYI b/mysql-test/std_data/ctype_upgrade/mysql050614_xxx_croatian_ci.MYI Binary files differnew file mode 100644 index 00000000000..de1ec112abb --- /dev/null +++ b/mysql-test/std_data/ctype_upgrade/mysql050614_xxx_croatian_ci.MYI diff --git a/mysql-test/std_data/ctype_upgrade/mysql050614_xxx_croatian_ci.frm b/mysql-test/std_data/ctype_upgrade/mysql050614_xxx_croatian_ci.frm Binary files differnew file mode 100644 index 00000000000..d26ba4f7e85 --- /dev/null +++ b/mysql-test/std_data/ctype_upgrade/mysql050614_xxx_croatian_ci.frm diff --git a/mysql-test/suite/engines/funcs/r/db_alter_collate_ascii.result b/mysql-test/suite/engines/funcs/r/db_alter_collate_ascii.result index 231954975ad..5345ead7b20 100644 --- a/mysql-test/suite/engines/funcs/r/db_alter_collate_ascii.result +++ b/mysql-test/suite/engines/funcs/r/db_alter_collate_ascii.result @@ -78,8 +78,9 @@ utf8_esperanto_ci utf8 209 # # utf8_hungarian_ci utf8 210 # # utf8_sinhala_ci utf8 211 # # utf8_german2_ci utf8 212 # # -utf8_croatian_ci utf8 213 # # +utf8_croatian_mysql561_ci utf8 213 # # utf8_general_mysql500_ci utf8 223 # # +utf8_croatian_ci utf8 576 # # ucs2_general_ci ucs2 35 Yes # # ucs2_bin ucs2 90 # # ucs2_unicode_ci ucs2 128 # # @@ -103,8 +104,9 @@ ucs2_esperanto_ci ucs2 145 # # ucs2_hungarian_ci ucs2 146 # # ucs2_sinhala_ci ucs2 147 # # ucs2_german2_ci ucs2 148 # # -ucs2_croatian_ci ucs2 149 # # +ucs2_croatian_mysql561_ci ucs2 149 # # ucs2_general_mysql500_ci ucs2 159 # # +ucs2_croatian_ci ucs2 640 # # cp866_general_ci cp866 36 Yes # # cp866_bin cp866 68 # # keybcs2_general_ci keybcs2 37 Yes # # @@ -142,7 +144,8 @@ utf8mb4_esperanto_ci utf8mb4 241 # # utf8mb4_hungarian_ci utf8mb4 242 # # utf8mb4_sinhala_ci utf8mb4 243 # # utf8mb4_german2_ci utf8mb4 244 # # -utf8mb4_croatian_ci utf8mb4 245 # # +utf8mb4_croatian_mysql561_ci utf8mb4 245 # # +utf8mb4_croatian_ci utf8mb4 608 # # cp1251_bulgarian_ci cp1251 14 # # cp1251_ukrainian_ci cp1251 23 # # cp1251_bin cp1251 50 # # @@ -171,7 +174,8 @@ utf16_esperanto_ci utf16 118 # # utf16_hungarian_ci utf16 119 # # utf16_sinhala_ci utf16 120 # # utf16_german2_ci utf16 121 # # -utf16_croatian_ci utf16 215 # # +utf16_croatian_mysql561_ci utf16 122 # # +utf16_croatian_ci utf16 672 # # utf16le_general_ci utf16le 56 Yes # # utf16le_bin utf16le 62 # # cp1256_general_ci cp1256 57 Yes # # @@ -202,7 +206,8 @@ utf32_esperanto_ci utf32 177 # # utf32_hungarian_ci utf32 178 # # utf32_sinhala_ci utf32 179 # # utf32_german2_ci utf32 180 # # -utf32_croatian_ci utf32 214 # # +utf32_croatian_mysql561_ci utf32 181 # # +utf32_croatian_ci utf32 736 # # binary binary 63 Yes # # geostd8_general_ci geostd8 92 Yes # # geostd8_bin geostd8 93 # # diff --git a/mysql-test/suite/engines/funcs/r/db_alter_collate_utf8.result b/mysql-test/suite/engines/funcs/r/db_alter_collate_utf8.result index 4ca2aa14117..51ae9004b43 100644 --- a/mysql-test/suite/engines/funcs/r/db_alter_collate_utf8.result +++ b/mysql-test/suite/engines/funcs/r/db_alter_collate_utf8.result @@ -78,8 +78,9 @@ utf8_esperanto_ci utf8 209 # # utf8_hungarian_ci utf8 210 # # utf8_sinhala_ci utf8 211 # # utf8_german2_ci utf8 212 # # -utf8_croatian_ci utf8 213 # # +utf8_croatian_mysql561_ci utf8 213 # # utf8_general_mysql500_ci utf8 223 # # +utf8_croatian_ci utf8 576 # # ucs2_general_ci ucs2 35 Yes # # ucs2_bin ucs2 90 # # ucs2_unicode_ci ucs2 128 # # @@ -103,8 +104,9 @@ ucs2_esperanto_ci ucs2 145 # # ucs2_hungarian_ci ucs2 146 # # ucs2_sinhala_ci ucs2 147 # # ucs2_german2_ci ucs2 148 # # -ucs2_croatian_ci ucs2 149 # # +ucs2_croatian_mysql561_ci ucs2 149 # # ucs2_general_mysql500_ci ucs2 159 # # +ucs2_croatian_ci ucs2 640 # # cp866_general_ci cp866 36 Yes # # cp866_bin cp866 68 # # keybcs2_general_ci keybcs2 37 Yes # # @@ -142,7 +144,8 @@ utf8mb4_esperanto_ci utf8mb4 241 # # utf8mb4_hungarian_ci utf8mb4 242 # # utf8mb4_sinhala_ci utf8mb4 243 # # utf8mb4_german2_ci utf8mb4 244 # # -utf8mb4_croatian_ci utf8mb4 245 # # +utf8mb4_croatian_mysql561_ci utf8mb4 245 # # +utf8mb4_croatian_ci utf8mb4 608 # # cp1251_bulgarian_ci cp1251 14 # # cp1251_ukrainian_ci cp1251 23 # # cp1251_bin cp1251 50 # # @@ -171,7 +174,8 @@ utf16_esperanto_ci utf16 118 # # utf16_hungarian_ci utf16 119 # # utf16_sinhala_ci utf16 120 # # utf16_german2_ci utf16 121 # # -utf16_croatian_ci utf16 215 # # +utf16_croatian_mysql561_ci utf16 122 # # +utf16_croatian_ci utf16 672 # # utf16le_general_ci utf16le 56 Yes # # utf16le_bin utf16le 62 # # cp1256_general_ci cp1256 57 Yes # # @@ -202,7 +206,8 @@ utf32_esperanto_ci utf32 177 # # utf32_hungarian_ci utf32 178 # # utf32_sinhala_ci utf32 179 # # utf32_german2_ci utf32 180 # # -utf32_croatian_ci utf32 214 # # +utf32_croatian_mysql561_ci utf32 181 # # +utf32_croatian_ci utf32 736 # # binary binary 63 Yes # # geostd8_general_ci geostd8 92 Yes # # geostd8_bin geostd8 93 # # diff --git a/mysql-test/suite/innodb/r/innodb_ctype_ldml.result b/mysql-test/suite/innodb/r/innodb_ctype_ldml.result index 8da04d8828b..0008de141dc 100644 --- a/mysql-test/suite/innodb/r/innodb_ctype_ldml.result +++ b/mysql-test/suite/innodb/r/innodb_ctype_ldml.result @@ -388,7 +388,7 @@ select "foo" = "foo " collate latin1_test; "foo" = "foo " collate latin1_test 1 The following tests check that two-byte collation IDs work -select * from information_schema.collations where id>256 order by id; +select * from information_schema.collations where id>256 and is_compiled<>'Yes' order by id; COLLATION_NAME CHARACTER_SET_NAME ID IS_DEFAULT IS_COMPILED SORTLEN utf8mb4_test_ci utf8mb4 326 8 utf16_test_ci utf16 327 8 diff --git a/mysql-test/suite/innodb/t/innodb_ctype_ldml.test b/mysql-test/suite/innodb/t/innodb_ctype_ldml.test index ddc3bac36c7..011271e4e22 100644 --- a/mysql-test/suite/innodb/t/innodb_ctype_ldml.test +++ b/mysql-test/suite/innodb/t/innodb_ctype_ldml.test @@ -170,7 +170,7 @@ select "foo" = "foo " collate latin1_test; # The file ../std-data/Index.xml has a number of collations with high IDs. # Test that the "ID" column in I_S and SHOW queries can handle two bytes -select * from information_schema.collations where id>256 order by id; +select * from information_schema.collations where id>256 and is_compiled<>'Yes' order by id; show collation like '%test%'; # Test that two-byte collation ID is correctly transfered to the client side. diff --git a/mysql-test/suite/plugins/r/show_all_plugins.result b/mysql-test/suite/plugins/r/show_all_plugins.result index fb31a49ab89..72ad829727c 100644 --- a/mysql-test/suite/plugins/r/show_all_plugins.result +++ b/mysql-test/suite/plugins/r/show_all_plugins.result @@ -4,8 +4,8 @@ Variable_name Value Opened_plugin_libraries 0 select * from information_schema.all_plugins where plugin_library='ha_example.so'; PLUGIN_NAME PLUGIN_VERSION PLUGIN_STATUS PLUGIN_TYPE PLUGIN_TYPE_VERSION PLUGIN_LIBRARY PLUGIN_LIBRARY_VERSION PLUGIN_AUTHOR PLUGIN_DESCRIPTION PLUGIN_LICENSE LOAD_OPTION PLUGIN_MATURITY PLUGIN_AUTH_VERSION -EXAMPLE 0.1 NOT INSTALLED STORAGE ENGINE 100004.0 ha_example.so 1.7 Brian Aker, MySQL AB Example storage engine GPL OFF Experimental 0.1 -UNUSABLE 3.14 NOT INSTALLED DAEMON 100004.0 ha_example.so 1.7 Sergei Golubchik Unusable Daemon GPL OFF Experimental 3.14.15.926 +EXAMPLE 0.1 NOT INSTALLED STORAGE ENGINE 100006.0 ha_example.so 1.7 Brian Aker, MySQL AB Example storage engine GPL OFF Experimental 0.1 +UNUSABLE 3.14 NOT INSTALLED DAEMON 100006.0 ha_example.so 1.7 Sergei Golubchik Unusable Daemon GPL OFF Experimental 3.14.15.926 show status like '%libraries%'; Variable_name Value Opened_plugin_libraries 1 diff --git a/mysql-test/suite/roles/create_and_drop_role_invalid_user_table.result b/mysql-test/suite/roles/create_and_drop_role_invalid_user_table.result index d0254fc2c44..7946f32663f 100644 --- a/mysql-test/suite/roles/create_and_drop_role_invalid_user_table.result +++ b/mysql-test/suite/roles/create_and_drop_role_invalid_user_table.result @@ -2,7 +2,7 @@ use mysql; alter table user drop column is_role; flush privileges; create role test_role; -ERROR HY000: Column count of mysql.user is wrong. Expected 44, found 43. Created with MariaDB 100004, now running 100004. Please use mysql_upgrade to fix this error. +ERROR HY000: Column count of mysql.user is wrong. Expected 44, found 43. Created with MariaDB 100006, now running 100006. Please use mysql_upgrade to fix this error. drop role test_role; ERROR HY000: Operation DROP ROLE failed for 'test_role' alter table user add column is_role enum('N', 'Y') default 'N' not null diff --git a/mysql-test/t/ctype_ldml.test b/mysql-test/t/ctype_ldml.test index 82dfd1c8591..11ef73e3360 100644 --- a/mysql-test/t/ctype_ldml.test +++ b/mysql-test/t/ctype_ldml.test @@ -152,7 +152,7 @@ select "foo" = "foo " collate latin1_test; # The file ../std-data/Index.xml has a number of collations with high IDs. # Test that the "ID" column in I_S and SHOW queries can handle two bytes -select * from information_schema.collations where id>256 order by id; +select * from information_schema.collations where id>256 and is_compiled<>'Yes' order by id; show collation like '%test%'; # Test that two-byte collation ID is correctly transfered to the client side. diff --git a/mysql-test/t/ctype_uca.test b/mysql-test/t/ctype_uca.test index 16ec673de34..ca03f57952e 100644 --- a/mysql-test/t/ctype_uca.test +++ b/mysql-test/t/ctype_uca.test @@ -65,6 +65,7 @@ select group_concat(c1 order by c1) from t1 group by c1 collate utf8_spanish2_ci select group_concat(c1 order by c1) from t1 group by c1 collate utf8_roman_ci; select group_concat(c1 order by c1) from t1 group by c1 collate utf8_esperanto_ci; select group_concat(c1 order by c1) from t1 group by c1 collate utf8_hungarian_ci; +select group_concat(c1 order by c1) from t1 group by c1 collate utf8_croatian_mysql561_ci; select group_concat(c1 order by c1) from t1 group by c1 collate utf8_croatian_ci; select group_concat(c1 order by c1) from t1 group by c1 collate utf8_german2_ci; @@ -87,6 +88,7 @@ SELECT GROUP_CONCAT(c1 ORDER BY c1) FROM t1 GROUP BY c1 COLLATE ucs2_spanish2_ci SELECT GROUP_CONCAT(c1 ORDER BY c1) FROM t1 GROUP BY c1 COLLATE ucs2_roman_ci; SELECT GROUP_CONCAT(c1 ORDER BY c1) FROM t1 GROUP BY c1 COLLATE ucs2_esperanto_ci; SELECT GROUP_CONCAT(c1 ORDER BY c1) FROM t1 GROUP BY c1 COLLATE ucs2_hungarian_ci; +SELECT GROUP_CONCAT(c1 ORDER BY c1) FROM t1 GROUP BY c1 COLLATE ucs2_croatian_mysql561_ci; SELECT GROUP_CONCAT(c1 ORDER BY c1) FROM t1 GROUP BY c1 COLLATE ucs2_croatian_ci; SELECT GROUP_CONCAT(c1 ORDER BY c1) FROM t1 GROUP BY c1 COLLATE ucs2_german2_ci; @@ -485,7 +487,7 @@ SET collation_connection=ucs2_czech_ci; --source include/ctype_czech.inc --source include/ctype_like_ignorable.inc -create table t1 (a int, c1 varchar(200) collate utf8_croatian_ci, key (c1)); +create table t1 (a int, c1 varchar(200) collate utf8_croatian_mysql561_ci, key (c1)); insert into t1 values (1,'=> DZ'),(2,'=> Dz'),(3,'=> dz'),(4,'=> dZ'); insert into t1 values (5,'=> DŽ'),(6,'=> Dž'),(7,'=> dž'),(8,'=> dŽ'); insert into t1 values (9,'=> dž'),(10,'=> DŽ'); diff --git a/mysql-test/t/ctype_upgrade.test b/mysql-test/t/ctype_upgrade.test new file mode 100644 index 00000000000..cc59d1e4401 --- /dev/null +++ b/mysql-test/t/ctype_upgrade.test @@ -0,0 +1,198 @@ +-- source include/mysql_upgrade_preparation.inc +-- source include/have_innodb.inc + +call mtr.add_suppression("Table rebuild required"); +let $MYSQLD_DATADIR= `select @@datadir`; + +--echo # +--echo # Upgrade from Maria-5.3.13: +--echo # Checking utf8_croatian_ci in a VARCHAR column +--echo # + +--echo # Copying maria050313_utf8_croatian_ci.* to MYSQLD_DATADIR +--copy_file std_data/ctype_upgrade/maria050313_utf8_croatian_ci.frm $MYSQLD_DATADIR/test/maria050313_utf8_croatian_ci.frm +--copy_file std_data/ctype_upgrade/maria050313_utf8_croatian_ci.MYD $MYSQLD_DATADIR/test/maria050313_utf8_croatian_ci.MYD +--copy_file std_data/ctype_upgrade/maria050313_utf8_croatian_ci.MYI $MYSQLD_DATADIR/test/maria050313_utf8_croatian_ci.MYI +# Following test should show that table is corrupted +CHECK TABLE maria050313_utf8_croatian_ci FOR UPGRADE; +--error ER_TABLE_NEEDS_REBUILD +SHOW CREATE TABLE maria050313_utf8_croatian_ci; +# Check that REPAIR fixes the table +REPAIR TABLE maria050313_utf8_croatian_ci; +CHECK TABLE maria050313_utf8_croatian_ci FOR UPGRADE; +SHOW CREATE TABLE maria050313_utf8_croatian_ci; +SELECT count(*) FROM maria050313_utf8_croatian_ci; +DROP TABLE maria050313_utf8_croatian_ci; + +--echo # Copying maria050313_utf8_croatian_ci.* to MYSQLD_DATADIR +--copy_file std_data/ctype_upgrade/maria050313_utf8_croatian_ci.frm $MYSQLD_DATADIR/test/maria050313_utf8_croatian_ci.frm +--copy_file std_data/ctype_upgrade/maria050313_utf8_croatian_ci.MYD $MYSQLD_DATADIR/test/maria050313_utf8_croatian_ci.MYD +--copy_file std_data/ctype_upgrade/maria050313_utf8_croatian_ci.MYI $MYSQLD_DATADIR/test/maria050313_utf8_croatian_ci.MYI +ALTER TABLE maria050313_utf8_croatian_ci FORCE; +SHOW CREATE TABLE maria050313_utf8_croatian_ci; +SELECT GROUP_CONCAT(a ORDER BY BINARY a) FROM maria050313_utf8_croatian_ci GROUP BY a; +DROP TABLE maria050313_utf8_croatian_ci; + + +--echo # +--echo # Upgrade from Maria-5.3.13: +--echo # Checking ucs2_croatian_ci in the table default collation +--echo # + +--echo # Copying maria050313_ucs2_croatian_ci.* to MYSQLD_DATADIR +--copy_file std_data/ctype_upgrade/maria050313_ucs2_croatian_ci_def.frm $MYSQLD_DATADIR/test/maria050313_ucs2_croatian_ci_def.frm +--copy_file std_data/ctype_upgrade/maria050313_ucs2_croatian_ci_def.MYD $MYSQLD_DATADIR/test/maria050313_ucs2_croatian_ci_def.MYD +--copy_file std_data/ctype_upgrade/maria050313_ucs2_croatian_ci_def.MYI $MYSQLD_DATADIR/test/maria050313_ucs2_croatian_ci_def.MYI +CHECK TABLE maria050313_ucs2_croatian_ci_def FOR UPGRADE; +--error ER_TABLE_NEEDS_REBUILD +SELECT count(*) FROM maria050313_ucs2_croatian_ci_def; +REPAIR TABLE maria050313_ucs2_croatian_ci_def; +SHOW CREATE TABLE maria050313_ucs2_croatian_ci_def; +DROP TABLE maria050313_ucs2_croatian_ci_def; + +--echo # Copying maria050313_ucs2_croatian_ci.* to MYSQLD_DATADIR +--copy_file std_data/ctype_upgrade/maria050313_ucs2_croatian_ci_def.frm $MYSQLD_DATADIR/test/maria050313_ucs2_croatian_ci_def.frm +--copy_file std_data/ctype_upgrade/maria050313_ucs2_croatian_ci_def.MYD $MYSQLD_DATADIR/test/maria050313_ucs2_croatian_ci_def.MYD +--copy_file std_data/ctype_upgrade/maria050313_ucs2_croatian_ci_def.MYI $MYSQLD_DATADIR/test/maria050313_ucs2_croatian_ci_def.MYI +CHECK TABLE maria050313_ucs2_croatian_ci_def; +REPAIR TABLE maria050313_ucs2_croatian_ci_def; +CHECK TABLE maria050313_ucs2_croatian_ci_def; +SHOW CREATE TABLE maria050313_ucs2_croatian_ci_def; +SELECT * FROM maria050313_ucs2_croatian_ci_def ORDER BY a; +DROP TABLE maria050313_ucs2_croatian_ci_def; + + + +--echo # +--echo # Upgrade from Maria-5.5.33 +--echo # Checking utf8_croatian_ci, utf8mb4_croatian_ci, ucs2_croatian_ci, +--echo # utf16_croatian_ci, utf32_croatian_ci +--echo # + +--echo # Copying maria050533_xxx_croatian_ci.* to MYSQLD_DATADIR +--copy_file std_data/ctype_upgrade/maria050533_xxx_croatian_ci.frm $MYSQLD_DATADIR/test/maria050533_xxx_croatian_ci.frm +--copy_file std_data/ctype_upgrade/maria050533_xxx_croatian_ci.MYD $MYSQLD_DATADIR/test/maria050533_xxx_croatian_ci.MYD +--copy_file std_data/ctype_upgrade/maria050533_xxx_croatian_ci.MYI $MYSQLD_DATADIR/test/maria050533_xxx_croatian_ci.MYI +CHECK TABLE maria050533_xxx_croatian_ci FOR UPGRADE; +REPAIR TABLE maria050533_xxx_croatian_ci; +SHOW CREATE TABLE maria050533_xxx_croatian_ci; +SELECT count(*) FROM maria050533_xxx_croatian_ci; +DROP TABLE maria050533_xxx_croatian_ci; + +--echo # Copying maria050533_xxx_croatian_ci.* to MYSQLD_DATADIR +--copy_file std_data/ctype_upgrade/maria050533_xxx_croatian_ci.frm $MYSQLD_DATADIR/test/maria050533_xxx_croatian_ci.frm +--copy_file std_data/ctype_upgrade/maria050533_xxx_croatian_ci.MYD $MYSQLD_DATADIR/test/maria050533_xxx_croatian_ci.MYD +--copy_file std_data/ctype_upgrade/maria050533_xxx_croatian_ci.MYI $MYSQLD_DATADIR/test/maria050533_xxx_croatian_ci.MYI +ALTER TABLE maria050533_xxx_croatian_ci FORCE; +SHOW CREATE TABLE maria050533_xxx_croatian_ci; +SELECT GROUP_CONCAT(a ORDER BY BINARY a) FROM maria050533_xxx_croatian_ci GROUP BY a; +SELECT GROUP_CONCAT(b ORDER BY BINARY b) FROM maria050533_xxx_croatian_ci GROUP BY b; +SELECT GROUP_CONCAT(c ORDER BY BINARY c) FROM maria050533_xxx_croatian_ci GROUP BY c; +SELECT GROUP_CONCAT(d ORDER BY BINARY d) FROM maria050533_xxx_croatian_ci GROUP BY d; +SELECT GROUP_CONCAT(e ORDER BY BINARY e) FROM maria050533_xxx_croatian_ci GROUP BY e; +DROP TABLE maria050533_xxx_croatian_ci; + + +--echo # +--echo # Upgrade from Maria-10.0.4 +--echo # Checking utf8_croatian_ci, utf8mb4_croatian_ci, ucs2_croatian_ci, +--echo # utf16_croatian_ci, utf32_croatian_ci +--echo # + +--echo # Copying maria100004_xxx_croatian_ci.* to MYSQLD_DATADIR +--copy_file std_data/ctype_upgrade/maria100004_xxx_croatian_ci.frm $MYSQLD_DATADIR/test/maria100004_xxx_croatian_ci.frm +--copy_file std_data/ctype_upgrade/maria100004_xxx_croatian_ci.MYD $MYSQLD_DATADIR/test/maria100004_xxx_croatian_ci.MYD +--copy_file std_data/ctype_upgrade/maria100004_xxx_croatian_ci.MYI $MYSQLD_DATADIR/test/maria100004_xxx_croatian_ci.MYI +CHECK TABLE maria100004_xxx_croatian_ci FOR UPGRADE; +--error ER_TABLE_NEEDS_REBUILD +SELECT count(*) FROM maria100004_xxx_croatian_ci; +REPAIR TABLE maria100004_xxx_croatian_ci; +SHOW CREATE TABLE maria100004_xxx_croatian_ci; +DROP TABLE maria100004_xxx_croatian_ci; + +--echo # Copying maria100004_xxx_croatian_ci.* to MYSQLD_DATADIR +--copy_file std_data/ctype_upgrade/maria100004_xxx_croatian_ci.frm $MYSQLD_DATADIR/test/maria100004_xxx_croatian_ci.frm +--copy_file std_data/ctype_upgrade/maria100004_xxx_croatian_ci.MYD $MYSQLD_DATADIR/test/maria100004_xxx_croatian_ci.MYD +--copy_file std_data/ctype_upgrade/maria100004_xxx_croatian_ci.MYI $MYSQLD_DATADIR/test/maria100004_xxx_croatian_ci.MYI +ALTER TABLE maria100004_xxx_croatian_ci FORCE; +SHOW CREATE TABLE maria100004_xxx_croatian_ci; +SELECT GROUP_CONCAT(a ORDER BY BINARY a) FROM maria100004_xxx_croatian_ci GROUP BY a; +SELECT GROUP_CONCAT(b ORDER BY BINARY b) FROM maria100004_xxx_croatian_ci GROUP BY b; +SELECT GROUP_CONCAT(c ORDER BY BINARY c) FROM maria100004_xxx_croatian_ci GROUP BY c; +SELECT GROUP_CONCAT(d ORDER BY BINARY d) FROM maria100004_xxx_croatian_ci GROUP BY d; +SELECT GROUP_CONCAT(e ORDER BY BINARY e) FROM maria100004_xxx_croatian_ci GROUP BY e; +DROP TABLE maria100004_xxx_croatian_ci; + + + +--echo # +--echo # Upgrade from MySQL-5.6.14 +--echo # Checking utf8_croatian_ci, utf8mb4_croatian_ci, ucs2_croatian_ci, +--echo # utf16_croatian_ci, utf32_croatian_ci +--echo # + +--echo # Copying mysql050614_xxx_croatian_ci.* to MYSQLD_DATADIR +--copy_file std_data/ctype_upgrade/mysql050614_xxx_croatian_ci.frm $MYSQLD_DATADIR/test/mysql050614_xxx_croatian_ci.frm +--copy_file std_data/ctype_upgrade/mysql050614_xxx_croatian_ci.MYD $MYSQLD_DATADIR/test/mysql050614_xxx_croatian_ci.MYD +--copy_file std_data/ctype_upgrade/mysql050614_xxx_croatian_ci.MYI $MYSQLD_DATADIR/test/mysql050614_xxx_croatian_ci.MYI +CHECK TABLE mysql050614_xxx_croatian_ci FOR UPGRADE; +SHOW CREATE TABLE mysql050614_xxx_croatian_ci; +SELECT GROUP_CONCAT(a ORDER BY BINARY a) FROM mysql050614_xxx_croatian_ci GROUP BY a; +SELECT GROUP_CONCAT(b ORDER BY BINARY b) FROM mysql050614_xxx_croatian_ci GROUP BY b; +SELECT GROUP_CONCAT(c ORDER BY BINARY c) FROM mysql050614_xxx_croatian_ci GROUP BY c; +SELECT GROUP_CONCAT(d ORDER BY BINARY d) FROM mysql050614_xxx_croatian_ci GROUP BY d; +SELECT GROUP_CONCAT(e ORDER BY BINARY e) FROM mysql050614_xxx_croatian_ci GROUP BY e; +DROP TABLE mysql050614_xxx_croatian_ci; + + +--echo # +--echo # Checking mysql_upgrade +--echo # +--copy_file std_data/ctype_upgrade/maria050313_utf8_croatian_ci.frm $MYSQLD_DATADIR/test/maria050313_utf8_croatian_ci.frm +--copy_file std_data/ctype_upgrade/maria050313_utf8_croatian_ci.MYD $MYSQLD_DATADIR/test/maria050313_utf8_croatian_ci.MYD +--copy_file std_data/ctype_upgrade/maria050313_utf8_croatian_ci.MYI $MYSQLD_DATADIR/test/maria050313_utf8_croatian_ci.MYI + +--copy_file std_data/ctype_upgrade/maria050313_ucs2_croatian_ci_def.frm $MYSQLD_DATADIR/test/maria050313_ucs2_croatian_ci_def.frm +--copy_file std_data/ctype_upgrade/maria050313_ucs2_croatian_ci_def.MYD $MYSQLD_DATADIR/test/maria050313_ucs2_croatian_ci_def.MYD +--copy_file std_data/ctype_upgrade/maria050313_ucs2_croatian_ci_def.MYI $MYSQLD_DATADIR/test/maria050313_ucs2_croatian_ci_def.MYI + +--copy_file std_data/ctype_upgrade/maria050533_xxx_croatian_ci.frm $MYSQLD_DATADIR/test/maria050533_xxx_croatian_ci.frm +--copy_file std_data/ctype_upgrade/maria050533_xxx_croatian_ci.MYD $MYSQLD_DATADIR/test/maria050533_xxx_croatian_ci.MYD +--copy_file std_data/ctype_upgrade/maria050533_xxx_croatian_ci.MYI $MYSQLD_DATADIR/test/maria050533_xxx_croatian_ci.MYI + +--copy_file std_data/ctype_upgrade/maria100004_xxx_croatian_ci.frm $MYSQLD_DATADIR/test/maria100004_xxx_croatian_ci.frm +--copy_file std_data/ctype_upgrade/maria100004_xxx_croatian_ci.MYD $MYSQLD_DATADIR/test/maria100004_xxx_croatian_ci.MYD +--copy_file std_data/ctype_upgrade/maria100004_xxx_croatian_ci.MYI $MYSQLD_DATADIR/test/maria100004_xxx_croatian_ci.MYI + +--copy_file std_data/ctype_upgrade/mysql050614_xxx_croatian_ci.frm $MYSQLD_DATADIR/test/mysql050614_xxx_croatian_ci.frm +--copy_file std_data/ctype_upgrade/mysql050614_xxx_croatian_ci.MYD $MYSQLD_DATADIR/test/mysql050614_xxx_croatian_ci.MYD +--copy_file std_data/ctype_upgrade/mysql050614_xxx_croatian_ci.MYI $MYSQLD_DATADIR/test/mysql050614_xxx_croatian_ci.MYI + +--echo # Running mysql_upgrade +--exec $MYSQL_UPGRADE 2>&1 + + +--echo # Running mysql_upgrade for the second time +--echo # This should report OK for all tables +--exec $MYSQL_UPGRADE --force 2>&1 + +SHOW CREATE TABLE maria050313_ucs2_croatian_ci_def; +SELECT * FROM maria050313_ucs2_croatian_ci_def ORDER BY a; + +SHOW CREATE TABLE maria050313_utf8_croatian_ci; +SELECT GROUP_CONCAT(a ORDER BY BINARY a) FROM maria050313_utf8_croatian_ci GROUP BY a; + +SHOW CREATE TABLE maria050533_xxx_croatian_ci; +SELECT GROUP_CONCAT(a ORDER BY BINARY a) FROM maria050533_xxx_croatian_ci GROUP BY a; + +SHOW CREATE TABLE maria100004_xxx_croatian_ci; +SELECT GROUP_CONCAT(a ORDER BY BINARY a) FROM maria100004_xxx_croatian_ci GROUP BY a; + +SHOW CREATE TABLE mysql050614_xxx_croatian_ci; +SELECT GROUP_CONCAT(a ORDER BY BINARY a) FROM mysql050614_xxx_croatian_ci GROUP BY a; + +DROP TABLE maria050313_ucs2_croatian_ci_def; +DROP TABLE maria050313_utf8_croatian_ci; +DROP TABLE maria050533_xxx_croatian_ci; +DROP TABLE maria100004_xxx_croatian_ci; +DROP TABLE mysql050614_xxx_croatian_ci; diff --git a/mysql-test/t/ctype_utf16_uca.test b/mysql-test/t/ctype_utf16_uca.test index 2070d12cd1e..ee09f70fa03 100644 --- a/mysql-test/t/ctype_utf16_uca.test +++ b/mysql-test/t/ctype_utf16_uca.test @@ -52,6 +52,7 @@ select group_concat(c1 order by binary c1 separator '') from t1 group by c1 coll select group_concat(c1 order by binary c1 separator '') from t1 group by c1 collate utf16_roman_ci; select group_concat(c1 order by binary c1 separator '') from t1 group by c1 collate utf16_esperanto_ci; select group_concat(c1 order by binary c1 separator '') from t1 group by c1 collate utf16_hungarian_ci; +select group_concat(c1 order by binary c1 separator '') from t1 group by c1 collate utf16_croatian_mysql561_ci; select group_concat(c1 order by binary c1 separator '') from t1 group by c1 collate utf16_croatian_ci; select group_concat(c1 order by binary c1 separator '') from t1 group by c1 collate utf16_german2_ci; diff --git a/mysql-test/t/ctype_utf32_uca.test b/mysql-test/t/ctype_utf32_uca.test index f3fef1cf54c..e08e747445e 100644 --- a/mysql-test/t/ctype_utf32_uca.test +++ b/mysql-test/t/ctype_utf32_uca.test @@ -53,6 +53,7 @@ select group_concat(c1 order by binary c1 separator '') from t1 group by c1 coll select group_concat(c1 order by binary c1 separator '') from t1 group by c1 collate utf32_roman_ci; select group_concat(c1 order by binary c1 separator '') from t1 group by c1 collate utf32_esperanto_ci; select group_concat(c1 order by binary c1 separator '') from t1 group by c1 collate utf32_hungarian_ci; +select group_concat(c1 order by binary c1 separator '') from t1 group by c1 collate utf32_croatian_mysql561_ci; select group_concat(c1 order by binary c1 separator '') from t1 group by c1 collate utf32_croatian_ci; select group_concat(c1 order by binary c1 separator '') from t1 group by c1 collate utf32_german2_ci; diff --git a/mysql-test/t/ctype_utf8mb4_uca.test b/mysql-test/t/ctype_utf8mb4_uca.test index a84e06883ab..0b01dfc33a5 100644 --- a/mysql-test/t/ctype_utf8mb4_uca.test +++ b/mysql-test/t/ctype_utf8mb4_uca.test @@ -32,6 +32,7 @@ SELECT GROUP_CONCAT(c1 ORDER BY c1 SEPARATOR '') FROM t1 GROUP BY c1 COLLATE utf SELECT GROUP_CONCAT(c1 ORDER BY c1 SEPARATOR '') FROM t1 GROUP BY c1 COLLATE utf8mb4_roman_ci; SELECT GROUP_CONCAT(c1 ORDER BY c1 SEPARATOR '') FROM t1 GROUP BY c1 COLLATE utf8mb4_esperanto_ci; SELECT GROUP_CONCAT(c1 ORDER BY c1 SEPARATOR '') FROM t1 GROUP BY c1 COLLATE utf8mb4_hungarian_ci; +SELECT GROUP_CONCAT(c1 ORDER BY c1 SEPARATOR '') FROM t1 GROUP BY c1 COLLATE utf8mb4_croatian_mysql561_ci; SELECT GROUP_CONCAT(c1 ORDER BY c1 SEPARATOR '') FROM t1 GROUP BY c1 COLLATE utf8mb4_croatian_ci; SELECT GROUP_CONCAT(c1 ORDER BY c1 SEPARATOR '') FROM t1 GROUP BY c1 COLLATE utf8mb4_german2_ci; diff --git a/mysys/charset-def.c b/mysys/charset-def.c index de4d6387a52..938d228b020 100644 --- a/mysys/charset-def.c +++ b/mysys/charset-def.c @@ -43,6 +43,7 @@ extern struct charset_info_st my_charset_ucs2_roman_uca_ci; extern struct charset_info_st my_charset_ucs2_persian_uca_ci; extern struct charset_info_st my_charset_ucs2_esperanto_uca_ci; extern struct charset_info_st my_charset_ucs2_hungarian_uca_ci; +extern struct charset_info_st my_charset_ucs2_croatian_mysql561_uca_ci; extern struct charset_info_st my_charset_ucs2_sinhala_uca_ci; extern struct charset_info_st my_charset_ucs2_croatian_uca_ci; #endif @@ -68,6 +69,7 @@ extern struct charset_info_st my_charset_utf32_roman_uca_ci; extern struct charset_info_st my_charset_utf32_persian_uca_ci; extern struct charset_info_st my_charset_utf32_esperanto_uca_ci; extern struct charset_info_st my_charset_utf32_hungarian_uca_ci; +extern struct charset_info_st my_charset_utf32_croatian_mysql561_uca_ci; extern struct charset_info_st my_charset_utf32_sinhala_uca_ci; extern struct charset_info_st my_charset_utf32_croatian_uca_ci; #endif /* HAVE_CHARSET_utf32 */ @@ -93,6 +95,7 @@ extern struct charset_info_st my_charset_utf16_roman_uca_ci; extern struct charset_info_st my_charset_utf16_persian_uca_ci; extern struct charset_info_st my_charset_utf16_esperanto_uca_ci; extern struct charset_info_st my_charset_utf16_hungarian_uca_ci; +extern struct charset_info_st my_charset_utf16_croatian_mysql561_uca_ci; extern struct charset_info_st my_charset_utf16_sinhala_uca_ci; extern struct charset_info_st my_charset_utf16_croatian_uca_ci; #endif /* HAVE_CHARSET_utf16 */ @@ -118,6 +121,7 @@ extern struct charset_info_st my_charset_utf8_roman_uca_ci; extern struct charset_info_st my_charset_utf8_persian_uca_ci; extern struct charset_info_st my_charset_utf8_esperanto_uca_ci; extern struct charset_info_st my_charset_utf8_hungarian_uca_ci; +extern struct charset_info_st my_charset_utf8_croatian_mysql561_uca_ci; extern struct charset_info_st my_charset_utf8_sinhala_uca_ci; extern struct charset_info_st my_charset_utf8_croatian_uca_ci; #ifdef HAVE_UTF8_GENERAL_CS @@ -145,6 +149,7 @@ extern struct charset_info_st my_charset_utf8mb4_roman_uca_ci; extern struct charset_info_st my_charset_utf8mb4_persian_uca_ci; extern struct charset_info_st my_charset_utf8mb4_esperanto_uca_ci; extern struct charset_info_st my_charset_utf8mb4_hungarian_uca_ci; +extern struct charset_info_st my_charset_utf8mb4_croatian_mysql561_uca_ci; extern struct charset_info_st my_charset_utf8mb4_sinhala_uca_ci; extern struct charset_info_st my_charset_utf8mb4_croatian_uca_ci; #endif /* HAVE_CHARSET_utf8mb4 */ @@ -235,6 +240,7 @@ my_bool init_compiled_charsets(myf flags __attribute__((unused))) add_compiled_collation(&my_charset_ucs2_persian_uca_ci); add_compiled_collation(&my_charset_ucs2_esperanto_uca_ci); add_compiled_collation(&my_charset_ucs2_hungarian_uca_ci); + add_compiled_collation(&my_charset_ucs2_croatian_mysql561_uca_ci); add_compiled_collation(&my_charset_ucs2_sinhala_uca_ci); add_compiled_collation(&my_charset_ucs2_croatian_uca_ci); #endif @@ -273,6 +279,7 @@ my_bool init_compiled_charsets(myf flags __attribute__((unused))) add_compiled_collation(&my_charset_utf8_persian_uca_ci); add_compiled_collation(&my_charset_utf8_esperanto_uca_ci); add_compiled_collation(&my_charset_utf8_hungarian_uca_ci); + add_compiled_collation(&my_charset_utf8_croatian_mysql561_uca_ci); add_compiled_collation(&my_charset_utf8_sinhala_uca_ci); add_compiled_collation(&my_charset_utf8_croatian_uca_ci); #endif @@ -303,6 +310,7 @@ my_bool init_compiled_charsets(myf flags __attribute__((unused))) add_compiled_collation(&my_charset_utf8mb4_persian_uca_ci); add_compiled_collation(&my_charset_utf8mb4_esperanto_uca_ci); add_compiled_collation(&my_charset_utf8mb4_hungarian_uca_ci); + add_compiled_collation(&my_charset_utf8mb4_croatian_mysql561_uca_ci); add_compiled_collation(&my_charset_utf8mb4_sinhala_uca_ci); add_compiled_collation(&my_charset_utf8mb4_croatian_uca_ci); #endif /* HAVE_UCA_COLLATIONS */ @@ -335,6 +343,7 @@ my_bool init_compiled_charsets(myf flags __attribute__((unused))) add_compiled_collation(&my_charset_utf16_persian_uca_ci); add_compiled_collation(&my_charset_utf16_esperanto_uca_ci); add_compiled_collation(&my_charset_utf16_hungarian_uca_ci); + add_compiled_collation(&my_charset_utf16_croatian_mysql561_uca_ci); add_compiled_collation(&my_charset_utf16_sinhala_uca_ci); add_compiled_collation(&my_charset_utf16_croatian_uca_ci); #endif /* HAVE_UCA_COLLATIONS */ @@ -365,6 +374,7 @@ my_bool init_compiled_charsets(myf flags __attribute__((unused))) add_compiled_collation(&my_charset_utf32_persian_uca_ci); add_compiled_collation(&my_charset_utf32_esperanto_uca_ci); add_compiled_collation(&my_charset_utf32_hungarian_uca_ci); + add_compiled_collation(&my_charset_utf32_croatian_mysql561_uca_ci); add_compiled_collation(&my_charset_utf32_sinhala_uca_ci); add_compiled_collation(&my_charset_utf32_croatian_uca_ci); #endif /* HAVE_UCA_COLLATIONS */ diff --git a/mysys/charset.c b/mysys/charset.c index f9d1286088d..b7e535136a5 100644 --- a/mysys/charset.c +++ b/mysys/charset.c @@ -648,19 +648,19 @@ get_internal_charset(MY_CHARSET_LOADER *loader, uint cs_number, myf flags) CHARSET_INFO *get_charset(uint cs_number, myf flags) { - CHARSET_INFO *cs; - MY_CHARSET_LOADER loader; + CHARSET_INFO *cs= NULL; if (cs_number == default_charset_info->number) return default_charset_info; my_pthread_once(&charsets_initialized, init_available_charsets); - - if (cs_number >= array_elements(all_charsets)) - return NULL; - my_charset_loader_init_mysys(&loader); - cs= get_internal_charset(&loader, cs_number, flags); + if (cs_number < array_elements(all_charsets)) + { + MY_CHARSET_LOADER loader; + my_charset_loader_init_mysys(&loader); + cs= get_internal_charset(&loader, cs_number, flags); + } if (!cs && (flags & MY_WME)) { diff --git a/sql/handler.cc b/sql/handler.cc index dece51839c7..28422794969 100644 --- a/sql/handler.cc +++ b/sql/handler.cc @@ -3534,6 +3534,38 @@ bool handler::get_error_message(int error, String* buf) return FALSE; } +/** + Check if a collation has changed number + + @param mysql_version + @param current collation number + + @retval new collation number (same as current collation number of no change) +*/ + +uint upgrade_collation(ulong mysql_version, uint cs_number) +{ + if (mysql_version >= 50300 && mysql_version <= 50399) + { + switch (cs_number) { + case 149: return MY_PAGE2_COLLATION_ID_UCS2; // ucs2_crotian_ci + case 213: return MY_PAGE2_COLLATION_ID_UTF8; // utf8_crotian_ci + } + } + if ((mysql_version >= 50500 && mysql_version <= 50599) || + (mysql_version >= 100000 && mysql_version <= 100005)) + { + switch (cs_number) { + case 149: return MY_PAGE2_COLLATION_ID_UCS2; // ucs2_crotian_ci + case 213: return MY_PAGE2_COLLATION_ID_UTF8; // utf8_crotian_ci + case 214: return MY_PAGE2_COLLATION_ID_UTF32; // utf32_croatian_ci + case 215: return MY_PAGE2_COLLATION_ID_UTF16; // utf16_croatian_ci + case 245: return MY_PAGE2_COLLATION_ID_UTF8MB4;// utf8mb4_croatian_ci + } + } + return cs_number; +} + /** Check for incompatible collation changes. @@ -3575,9 +3607,29 @@ int handler::check_collation_compatibility() (cs_number == 33 || /* utf8_general_ci - bug #27877 */ cs_number == 35))) /* ucs2_general_ci - bug #27877 */ return HA_ADMIN_NEEDS_UPGRADE; - } - } - } + } + } + } + + if (mysql_version < 100006) + { + /* + Check if we are using collations from that has changed numbering. + This happend at least between MariaDB 5.5 and MariaDB 10.0 as MySQL + added conflicting numbers. + */ + + if (table->s->table_charset->number != + upgrade_collation(mysql_version, table->s->table_charset->number)) + return HA_ADMIN_NEEDS_ALTER; + + for (Field **field= table->field; (*field); field++) + { + if ((*field)->charset()->number != + upgrade_collation(mysql_version, (*field)->charset()->number)) + return HA_ADMIN_NEEDS_ALTER; + } + } return 0; } @@ -3588,6 +3640,9 @@ int handler::ha_check_for_upgrade(HA_CHECK_OPT *check_opt) KEY *keyinfo, *keyend; KEY_PART_INFO *keypart, *keypartend; + if (table->s->incompatible_version) + return HA_ADMIN_NEEDS_ALTER; + if (!table->s->mysql_version) { /* check for blob-in-key error */ diff --git a/sql/handler.h b/sql/handler.h index 360120615f3..0c1ae1d01c2 100644 --- a/sql/handler.h +++ b/sql/handler.h @@ -4055,4 +4055,5 @@ inline const char *table_case_name(HA_CREATE_INFO *info, const char *name) void print_keydup_error(TABLE *table, KEY *key, const char *msg, myf errflag); void print_keydup_error(TABLE *table, KEY *key, myf errflag); +uint upgrade_collation(ulong mysql_version, uint cs_number); #endif diff --git a/sql/sql_table.cc b/sql/sql_table.cc index f78f1b56489..df33c3535b5 100644 --- a/sql/sql_table.cc +++ b/sql/sql_table.cc @@ -6740,7 +6740,7 @@ mysql_prepare_alter_table(THD *thd, TABLE *table, List<Key_part_spec> key_parts; uint db_create_options= (table->s->db_create_options & ~(HA_OPTION_PACK_RECORD)); - uint used_fields= create_info->used_fields; + uint used_fields; KEY *key_info=table->key_info; bool rc= TRUE; bool modified_primary_key= FALSE; @@ -6748,6 +6748,14 @@ mysql_prepare_alter_table(THD *thd, TABLE *table, Field **f_ptr,*field; DBUG_ENTER("mysql_prepare_alter_table"); + /* + Merge incompatible changes flag in case of upgrade of a table from an + old MariaDB or MySQL version. This ensures that we don't try to do an + online alter table if field packing or character set changes are required. + */ + create_info->used_fields|= table->s->incompatible_version; + used_fields= create_info->used_fields; + create_info->varchar= FALSE; /* Let new create options override the old ones */ if (!(used_fields & HA_CREATE_USED_MIN_ROWS)) @@ -7732,8 +7740,11 @@ bool mysql_alter_table(THD *thd,char *new_db, char *new_name, DEBUG_SYNC(thd, "alter_table_before_open_tables"); uint tables_opened; + + thd->open_options|= HA_OPEN_FOR_ALTER; bool error= open_tables(thd, &table_list, &tables_opened, 0, &alter_prelocking_strategy); + thd->open_options&= ~HA_OPEN_FOR_ALTER; DEBUG_SYNC(thd, "alter_opened_table"); diff --git a/sql/table.cc b/sql/table.cc index eed1de9bb35..c8c43ea3de1 100644 --- a/sql/table.cc +++ b/sql/table.cc @@ -1009,12 +1009,18 @@ int TABLE_SHARE::init_from_binary_frm_image(THD *thd, bool write, share->null_field_first= 0; if (!frm_image[32]) // New frm file in 3.23 { + uint cs_org= (((uint) frm_image[41]) << 8) + (uint) frm_image[38]; + uint cs_new= upgrade_collation(share->mysql_version, cs_org); + if (cs_org != cs_new) + share->incompatible_version|= HA_CREATE_USED_CHARSET; + share->avg_row_length= uint4korr(frm_image+34); share->transactional= (ha_choice) (frm_image[39] & 3); share->page_checksum= (ha_choice) ((frm_image[39] >> 2) & 3); share->row_type= (enum row_type) frm_image[40]; - share->table_charset= get_charset((((uint) frm_image[41]) << 8) + - (uint) frm_image[38], MYF(0)); + + if (cs_new && !(share->table_charset= get_charset(cs_new, MYF(MY_WME)))) + goto err; share->null_field_first= 1; share->stats_sample_pages= uint2korr(frm_image+42); share->stats_auto_recalc= (enum_stats_auto_recalc)(frm_image[44]); @@ -1032,6 +1038,7 @@ int TABLE_SHARE::init_from_binary_frm_image(THD *thd, bool write, } share->table_charset= default_charset_info; } + share->db_record_offset= 1; share->max_rows= uint4korr(frm_image+18); share->min_rows= uint4korr(frm_image+22); @@ -1418,16 +1425,19 @@ int TABLE_SHARE::init_from_binary_frm_image(THD *thd, bool write, } else { - uint csid= strpos[14] + (((uint) strpos[11]) << 8); - if (!csid) + uint cs_org= strpos[14] + (((uint) strpos[11]) << 8); + uint cs_new= upgrade_collation(share->mysql_version, cs_org); + if (cs_org != cs_new) + share->incompatible_version|= HA_CREATE_USED_CHARSET; + if (!cs_new) charset= &my_charset_bin; - else if (!(charset= get_charset(csid, MYF(0)))) + else if (!(charset= get_charset(cs_new, MYF(0)))) { - const char *csname= get_charset_name((uint) csid); + const char *csname= get_charset_name((uint) cs_new); char tmp[10]; if (!csname || csname[0] =='?') { - my_snprintf(tmp, sizeof(tmp), "#%d", csid); + my_snprintf(tmp, sizeof(tmp), "#%d", cs_new); csname= tmp; } my_printf_error(ER_UNKNOWN_COLLATION, @@ -2489,6 +2499,13 @@ enum open_frm_error open_table_from_share(THD *thd, TABLE_SHARE *share, outparam->db_stat= db_stat; outparam->write_row_record= NULL; + if (share->incompatible_version && + !(ha_open_flags & (HA_OPEN_FOR_ALTER | HA_OPEN_FOR_REPAIR))) + { + /* one needs to run mysql_upgrade on the table */ + error= OPEN_FRM_NEEDS_REBUILD; + goto err; + } init_sql_alloc(&outparam->mem_root, TABLE_ALLOC_BLOCK_SIZE, 0, MYF(0)); if (outparam->alias.copy(alias, strlen(alias), table_alias_charset)) @@ -3012,6 +3029,11 @@ void open_table_error(TABLE_SHARE *share, enum open_frm_error error, strxmov(buff, share->normalized_path.str, reg_ext, NullS); my_error(ER_ERROR_ON_READ, errortype, buff, db_errno); break; + case OPEN_FRM_NEEDS_REBUILD: + strxnmov(buff, sizeof(buff)-1, + share->db.str, ".", share->table_name.str, NullS); + my_error(ER_TABLE_NEEDS_REBUILD, errortype, buff); + break; } DBUG_VOID_RETURN; } /* open_table_error */ diff --git a/sql/table.h b/sql/table.h index ce7032b4c60..301b98a5ec2 100644 --- a/sql/table.h +++ b/sql/table.h @@ -560,7 +560,8 @@ enum open_frm_error { OPEN_FRM_DISCOVER, OPEN_FRM_ERROR_ALREADY_ISSUED, OPEN_FRM_NOT_A_VIEW, - OPEN_FRM_NOT_A_TABLE + OPEN_FRM_NOT_A_TABLE, + OPEN_FRM_NEEDS_REBUILD }; /** @@ -734,6 +735,13 @@ struct TABLE_SHARE ulong table_map_id; /* for row-based replication */ /* + Things that are incompatible between the stored version and the + current version. This is a set of HA_CREATE... bits that can be used + to modify create_info->used_fields for ALTER TABLE. + */ + ulong incompatible_version; + + /* Cache for row-based replication table share checks that does not need to be repeated. Possible values are: -1 when cache value is not calculated yet, 0 when table *shall not* be replicated, 1 when diff --git a/storage/connect/ha_connect.cc b/storage/connect/ha_connect.cc index a066c48bf0e..9708fd9a521 100644 --- a/storage/connect/ha_connect.cc +++ b/storage/connect/ha_connect.cc @@ -3765,7 +3765,8 @@ static int connect_assisted_discovery(handlerton *hton, THD* thd, #if defined(WIN32) char *nsp= NULL, *cls= NULL; #endif // WIN32 - int port= 0, hdr= 0, mxr= 0, rc= 0, cop= 0; + int port= 0, hdr= 0, mxr= 0, rc= 0; + int cop __attribute__((unused)) = 0; uint tm, fnc= FNC_NO, supfnc= (FNC_NO | FNC_COL); bool bif, ok= false, dbf= false; TABTYPE ttp= TAB_UNDEF; diff --git a/strings/ctype-uca.c b/strings/ctype-uca.c index e3138f7f310..39de420044b 100644 --- a/strings/ctype-uca.c +++ b/strings/ctype-uca.c @@ -6775,6 +6775,17 @@ static const char hungarian[]= "&O < \\u00F6 <<< \\u00D6 << \\u0151 <<< \\u0150" "&U < \\u00FC <<< \\u00DC << \\u0171 <<< \\u0170"; + +static const char croatian_mysql561[]= + "&C < \\u010D <<< \\u010C < \\u0107 <<< \\u0106" + "&D < d\\u017E = \\u01C6 <<< d\\u017D <<< D\\u017E = \\u01C5 <<< D\\u017D = \\u01C4" + " < \\u0111 <<< \\u0110" + "&L < lj = \\u01C9 <<< lJ <<< Lj = \\u01C8 <<< LJ = \\u01C7" + "&N < nj = \\u01CC <<< nJ <<< Nj = \\u01CB <<< NJ = \\u01CA" + "&S < \\u0161 <<< \\u0160" + "&Z < \\u017E <<< \\u017D"; + + /* SCCII Part 1 : Collation Sequence (SLS1134) 2006/11/24 @@ -6804,7 +6815,22 @@ static const char sinhala[]= #endif -static const char croatian[]= +/* + Croatian that was added into MariaDB-5.3 uses + slightly different rules comparing to the MySQL-5.6 version. + The difference is in the following combinations of + a small letter followed by a capital letter: + - U+0064 U+017D (LATIN SMALL LETTER D + LATIN CAPITAL LETTER Z WITH CARON) + - U+006C U+004A (LATIN SMALL LETTER L + LATIN CAPITAL LETTER J) + - U+006E U+004A (LATIN SMALL LETTER N + LATIN CAPITAL LETTER J) + MySQL consider these pairs as contractions and sorts near their + "CAPITAL + SMALL" and "SMALL + SMALL" counterparts. + MariaDB consider these pairs as individual characters. + Note, the MariaDB version is closer to CLDR: + http://unicode.org/cldr/trac/browser/trunk/common/collation/hr.xml?rev=9244 + (the latest hr.xml revision as of 2013-11-06). +*/ +static const char croatian_mariadb[]= "&C < \\u010D <<< \\u010C < \\u0107 <<< \\u0106 " "&D < d\\u017E <<< \\u01C6 <<< D\\u017E <<< \\u01C5 <<< D\\u017D <<< \\u01C4 " " < \\u0111 <<< \\u0110 " @@ -10273,14 +10299,47 @@ struct charset_info_st my_charset_ucs2_german2_uca_ci= &my_collation_ucs2_uca_handler }; -struct charset_info_st my_charset_ucs2_croatian_uca_ci= +struct charset_info_st my_charset_ucs2_croatian_mysql561_uca_ci= { 149,0,0, /* number */ MY_CS_COMPILED|MY_CS_STRNXFRM|MY_CS_UNICODE|MY_CS_NONASCII, "ucs2", /* cs name */ - "ucs2_croatian_ci", /* name */ + "ucs2_croatian_mysql561_ci", /* name */ "", /* comment */ - croatian, /* tailoring */ + croatian_mysql561, /* tailoring */ + NULL, /* ctype */ + NULL, /* to_lower */ + NULL, /* to_upper */ + NULL, /* sort_order */ + NULL, /* uca */ + NULL, /* tab_to_uni */ + NULL, /* tab_from_uni */ + &my_unicase_default, /* caseinfo */ + NULL, /* state_map */ + NULL, /* ident_map */ + 8, /* strxfrm_multiply */ + 1, /* caseup_multiply */ + 1, /* casedn_multiply */ + 2, /* mbminlen */ + 2, /* mbmaxlen */ + 9, /* min_sort_char */ + 0xFFFF, /* max_sort_char */ + ' ', /* pad char */ + 0, /* escape_with_backslash_is_dangerous */ + 1, /* levels_for_order */ + &my_charset_ucs2_handler, + &my_collation_ucs2_uca_handler +}; + + +struct charset_info_st my_charset_ucs2_croatian_uca_ci= +{ + MY_PAGE2_COLLATION_ID_UCS2,0,0, /* number */ + MY_CS_COMPILED|MY_CS_STRNXFRM|MY_CS_UNICODE|MY_CS_NONASCII, + "ucs2", /* cs name */ + "ucs2_croatian_ci", /* name */ + "", /* comment */ + croatian_mariadb, /* tailoring */ NULL, /* ctype */ NULL, /* to_lower */ NULL, /* to_upper */ @@ -11030,14 +11089,47 @@ struct charset_info_st my_charset_utf8_german2_uca_ci= &my_collation_any_uca_handler }; -struct charset_info_st my_charset_utf8_croatian_uca_ci= +struct charset_info_st my_charset_utf8_croatian_mysql561_uca_ci= { 213,0,0, /* number */ MY_CS_UTF8MB3_UCA_FLAGS,/* flags */ MY_UTF8MB3, /* cs name */ + MY_UTF8MB3 "_croatian_mysql561_ci",/* name */ + "", /* comment */ + croatian_mysql561, /* tailoring */ + ctype_utf8, /* ctype */ + NULL, /* to_lower */ + NULL, /* to_upper */ + NULL, /* sort_order */ + NULL, /* uca */ + NULL, /* tab_to_uni */ + NULL, /* tab_from_uni */ + &my_unicase_default, /* caseinfo */ + NULL, /* state_map */ + NULL, /* ident_map */ + 8, /* strxfrm_multiply */ + 1, /* caseup_multiply */ + 1, /* casedn_multiply */ + 1, /* mbminlen */ + 3, /* mbmaxlen */ + 9, /* min_sort_char */ + 0xFFFF, /* max_sort_char */ + ' ', /* pad char */ + 0, /* escape_with_backslash_is_dangerous */ + 1, /* levels_for_order */ + &my_charset_utf8_handler, + &my_collation_any_uca_handler +}; + + +struct charset_info_st my_charset_utf8_croatian_uca_ci= +{ + MY_PAGE2_COLLATION_ID_UTF8,0,0, /* number */ + MY_CS_UTF8MB3_UCA_FLAGS,/* flags */ + MY_UTF8MB3, /* cs name */ MY_UTF8MB3 "_croatian_ci",/* name */ "", /* comment */ - croatian, /* tailoring */ + croatian_mariadb, /* tailoring */ ctype_utf8, /* ctype */ NULL, /* to_lower */ NULL, /* to_upper */ @@ -11746,14 +11838,46 @@ struct charset_info_st my_charset_utf8mb4_german2_uca_ci= &my_collation_any_uca_handler }; -struct charset_info_st my_charset_utf8mb4_croatian_uca_ci= +struct charset_info_st my_charset_utf8mb4_croatian_mysql561_uca_ci= { 245,0,0, /* number */ MY_CS_UTF8MB4_UCA_FLAGS,/* state */ MY_UTF8MB4, /* csname */ - MY_UTF8MB4 "_croatian_ci",/* name */ + MY_UTF8MB4 "_croatian_mysql561_ci",/* name */ + "", /* comment */ + croatian_mysql561, /* tailoring */ + ctype_utf8, /* ctype */ + NULL, /* to_lower */ + NULL, /* to_upper */ + NULL, /* sort_order */ + NULL, /* uca */ + NULL, /* tab_to_uni */ + NULL, /* tab_from_uni */ + &my_unicase_default,/* caseinfo */ + NULL, /* state_map */ + NULL, /* ident_map */ + 8, /* strxfrm_multiply */ + 1, /* caseup_multiply */ + 1, /* casedn_multiply */ + 1, /* mbminlen */ + 4, /* mbmaxlen */ + 9, /* min_sort_char */ + 0xFFFF, /* max_sort_char */ + ' ', /* pad char */ + 0, /* escape_with_backslash_is_dangerous */ + 1, /* levels_for_order */ + &my_charset_utf8mb4_handler, + &my_collation_any_uca_handler +}; + +struct charset_info_st my_charset_utf8mb4_croatian_uca_ci= +{ + MY_PAGE2_COLLATION_ID_UTF8MB4,0,0, /* number */ + MY_CS_UTF8MB4_UCA_FLAGS,/* state */ + MY_UTF8MB4, /* csname */ + MY_UTF8MB4 "_croatian_ci",/* name */ "", /* comment */ - croatian, /* tailoring */ + croatian_mariadb, /* tailoring */ ctype_utf8, /* ctype */ NULL, /* to_lower */ NULL, /* to_upper */ @@ -12476,14 +12600,46 @@ struct charset_info_st my_charset_utf32_german2_uca_ci= &my_collation_utf32_uca_handler }; +struct charset_info_st my_charset_utf32_croatian_mysql561_uca_ci= +{ + 181,0,0, /* number */ + MY_CS_UTF32_UCA_FLAGS,/* state */ + "utf32", /* csname */ + "utf32_croatian_mysql561_ci", /* name */ + "", /* comment */ + croatian_mysql561, /* tailoring */ + NULL, /* ctype */ + NULL, /* to_lower */ + NULL, /* to_upper */ + NULL, /* sort_order */ + NULL, /* uca */ + NULL, /* tab_to_uni */ + NULL, /* tab_from_uni */ + &my_unicase_default,/* caseinfo */ + NULL, /* state_map */ + NULL, /* ident_map */ + 8, /* strxfrm_multiply */ + 1, /* caseup_multiply */ + 1, /* casedn_multiply */ + 4, /* mbminlen */ + 4, /* mbmaxlen */ + 9, /* min_sort_char */ + 0xFFFF, /* max_sort_char */ + ' ', /* pad char */ + 0, /* escape_with_backslash_is_dangerous */ + 1, /* levels_for_order */ + &my_charset_utf32_handler, + &my_collation_utf32_uca_handler +}; + struct charset_info_st my_charset_utf32_croatian_uca_ci= { - 214,0,0, /* number */ + MY_PAGE2_COLLATION_ID_UTF32,0,0, /* number */ MY_CS_UTF32_UCA_FLAGS,/* state */ "utf32", /* csname */ "utf32_croatian_ci", /* name */ "", /* comment */ - croatian, /* tailoring */ + croatian_mariadb, /* tailoring */ NULL, /* ctype */ NULL, /* to_lower */ NULL, /* to_upper */ @@ -13208,14 +13364,47 @@ struct charset_info_st my_charset_utf16_german2_uca_ci= }; +struct charset_info_st my_charset_utf16_croatian_mysql561_uca_ci= +{ + 122,0,0, /* number */ + MY_CS_UTF16_UCA_FLAGS,/* state */ + "utf16", /* cs name */ + "utf16_croatian_mysql561_ci",/* name */ + "", /* comment */ + croatian_mysql561, /* tailoring */ + NULL, /* ctype */ + NULL, /* to_lower */ + NULL, /* to_upper */ + NULL, /* sort_order */ + NULL, /* uca */ + NULL, /* tab_to_uni */ + NULL, /* tab_from_uni */ + &my_unicase_default,/* caseinfo */ + NULL, /* state_map */ + NULL, /* ident_map */ + 8, /* strxfrm_multiply */ + 1, /* caseup_multiply */ + 1, /* casedn_multiply */ + 2, /* mbminlen */ + 4, /* mbmaxlen */ + 9, /* min_sort_char */ + 0xFFFF, /* max_sort_char */ + ' ', /* pad char */ + 0, /* escape_with_backslash_is_dangerous */ + 1, /* levels_for_order */ + &my_charset_utf16_handler, + &my_collation_utf16_uca_handler +}; + + struct charset_info_st my_charset_utf16_croatian_uca_ci= { - 215,0,0, /* number */ + MY_PAGE2_COLLATION_ID_UTF16,0,0, /* number */ MY_CS_UTF16_UCA_FLAGS,/* state */ "utf16", /* cs name */ - "utf16_croatian_ci",/* name */ + "utf16_croatian_ci",/* name */ "", /* comment */ - croatian, /* tailoring */ + croatian_mariadb, /* tailoring */ NULL, /* ctype */ NULL, /* to_lower */ NULL, /* to_upper */ |