Loading mysql-test/r/ctype_ucs.result +21 −0 Original line number Diff line number Diff line Loading @@ -865,4 +865,25 @@ blob 65535 65535 text 65535 65535 text 65535 32767 drop table t1; create table t1 (a char(1) character set ucs2); insert into t1 values ('a'),('b'),('c'); select hex(group_concat(a)) from t1; hex(group_concat(a)) 0061002C0062002C0063 select collation(group_concat(a)) from t1; collation(group_concat(a)) ucs2_general_ci drop table t1; set names latin1; create table t1 (a char(1) character set latin1); insert into t1 values ('a'),('b'),('c'); set character_set_connection=ucs2; select hex(group_concat(a separator ',')) from t1; hex(group_concat(a separator ',')) 612C622C63 select collation(group_concat(a separator ',')) from t1; collation(group_concat(a separator ',')) latin1_swedish_ci drop table t1; set names latin1; End of 5.0 tests mysql-test/r/ctype_ucs2_def.result +7 −0 Original line number Diff line number Diff line Loading @@ -7,6 +7,13 @@ character_set_server ucs2 DROP TABLE IF EXISTS t1; create table t1 (a int); drop table t1; End of 4.1 tests create table t1 (a char(1) character set latin1); insert into t1 values ('a'),('b'),('c'); select hex(group_concat(a)) from t1; hex(group_concat(a)) 612C622C63 drop table t1; CREATE TABLE t1(col1 VARCHAR(32) CHARACTER SET ucs2 COLLATE ucs2_bin NOT NULL, col2 VARCHAR(32) CHARACTER SET ucs2 COLLATE ucs2_bin NOT NULL, UNIQUE KEY key1 USING HASH (col1, col2)) ENGINE=MEMORY; Loading mysql-test/t/ctype_ucs.test +18 −0 Original line number Diff line number Diff line Loading @@ -594,4 +594,22 @@ select data_type, character_octet_length, character_maximum_length from information_schema.columns where table_name='t1'; drop table t1; # # Bug#28925 GROUP_CONCAT inserts wrong separators for a ucs2 column # create table t1 (a char(1) character set ucs2); insert into t1 values ('a'),('b'),('c'); select hex(group_concat(a)) from t1; select collation(group_concat(a)) from t1; drop table t1; set names latin1; create table t1 (a char(1) character set latin1); insert into t1 values ('a'),('b'),('c'); set character_set_connection=ucs2; select hex(group_concat(a separator ',')) from t1; select collation(group_concat(a separator ',')) from t1; drop table t1; set names latin1; --echo End of 5.0 tests mysql-test/t/ctype_ucs2_def.test +10 −0 Original line number Diff line number Diff line Loading @@ -15,6 +15,16 @@ DROP TABLE IF EXISTS t1; create table t1 (a int); drop table t1; --echo End of 4.1 tests # # Bug #28925 GROUP_CONCAT inserts wrong separators for a ucs2 column # Check that GROUP_CONCAT works fine with --default-character-set=ucs2 # create table t1 (a char(1) character set latin1); insert into t1 values ('a'),('b'),('c'); select hex(group_concat(a)) from t1; drop table t1; # # Bug #27643: query failed : 1114 (The table '' is full) # Loading sql/item_sum.cc +21 −0 Original line number Diff line number Diff line Loading @@ -3209,6 +3209,27 @@ Item_func_group_concat::fix_fields(THD *thd, Item **ref) null_value= 1; max_length= thd->variables.group_concat_max_len; uint32 offset; if (separator->needs_conversion(separator->length(), separator->charset(), collation.collation, &offset)) { uint32 buflen= collation.collation->mbmaxlen * separator->length(); uint errors, conv_length; char *buf; String *new_separator; if (!(buf= thd->stmt_arena->alloc(buflen)) || !(new_separator= new(thd->stmt_arena->mem_root) String(buf, buflen, collation.collation))) return TRUE; conv_length= copy_and_convert(buf, buflen, collation.collation, separator->ptr(), separator->length(), separator->charset(), &errors); new_separator->length(conv_length); separator= new_separator; } if (check_sum_func(thd, ref)) return TRUE; Loading Loading
mysql-test/r/ctype_ucs.result +21 −0 Original line number Diff line number Diff line Loading @@ -865,4 +865,25 @@ blob 65535 65535 text 65535 65535 text 65535 32767 drop table t1; create table t1 (a char(1) character set ucs2); insert into t1 values ('a'),('b'),('c'); select hex(group_concat(a)) from t1; hex(group_concat(a)) 0061002C0062002C0063 select collation(group_concat(a)) from t1; collation(group_concat(a)) ucs2_general_ci drop table t1; set names latin1; create table t1 (a char(1) character set latin1); insert into t1 values ('a'),('b'),('c'); set character_set_connection=ucs2; select hex(group_concat(a separator ',')) from t1; hex(group_concat(a separator ',')) 612C622C63 select collation(group_concat(a separator ',')) from t1; collation(group_concat(a separator ',')) latin1_swedish_ci drop table t1; set names latin1; End of 5.0 tests
mysql-test/r/ctype_ucs2_def.result +7 −0 Original line number Diff line number Diff line Loading @@ -7,6 +7,13 @@ character_set_server ucs2 DROP TABLE IF EXISTS t1; create table t1 (a int); drop table t1; End of 4.1 tests create table t1 (a char(1) character set latin1); insert into t1 values ('a'),('b'),('c'); select hex(group_concat(a)) from t1; hex(group_concat(a)) 612C622C63 drop table t1; CREATE TABLE t1(col1 VARCHAR(32) CHARACTER SET ucs2 COLLATE ucs2_bin NOT NULL, col2 VARCHAR(32) CHARACTER SET ucs2 COLLATE ucs2_bin NOT NULL, UNIQUE KEY key1 USING HASH (col1, col2)) ENGINE=MEMORY; Loading
mysql-test/t/ctype_ucs.test +18 −0 Original line number Diff line number Diff line Loading @@ -594,4 +594,22 @@ select data_type, character_octet_length, character_maximum_length from information_schema.columns where table_name='t1'; drop table t1; # # Bug#28925 GROUP_CONCAT inserts wrong separators for a ucs2 column # create table t1 (a char(1) character set ucs2); insert into t1 values ('a'),('b'),('c'); select hex(group_concat(a)) from t1; select collation(group_concat(a)) from t1; drop table t1; set names latin1; create table t1 (a char(1) character set latin1); insert into t1 values ('a'),('b'),('c'); set character_set_connection=ucs2; select hex(group_concat(a separator ',')) from t1; select collation(group_concat(a separator ',')) from t1; drop table t1; set names latin1; --echo End of 5.0 tests
mysql-test/t/ctype_ucs2_def.test +10 −0 Original line number Diff line number Diff line Loading @@ -15,6 +15,16 @@ DROP TABLE IF EXISTS t1; create table t1 (a int); drop table t1; --echo End of 4.1 tests # # Bug #28925 GROUP_CONCAT inserts wrong separators for a ucs2 column # Check that GROUP_CONCAT works fine with --default-character-set=ucs2 # create table t1 (a char(1) character set latin1); insert into t1 values ('a'),('b'),('c'); select hex(group_concat(a)) from t1; drop table t1; # # Bug #27643: query failed : 1114 (The table '' is full) # Loading
sql/item_sum.cc +21 −0 Original line number Diff line number Diff line Loading @@ -3209,6 +3209,27 @@ Item_func_group_concat::fix_fields(THD *thd, Item **ref) null_value= 1; max_length= thd->variables.group_concat_max_len; uint32 offset; if (separator->needs_conversion(separator->length(), separator->charset(), collation.collation, &offset)) { uint32 buflen= collation.collation->mbmaxlen * separator->length(); uint errors, conv_length; char *buf; String *new_separator; if (!(buf= thd->stmt_arena->alloc(buflen)) || !(new_separator= new(thd->stmt_arena->mem_root) String(buf, buflen, collation.collation))) return TRUE; conv_length= copy_and_convert(buf, buflen, collation.collation, separator->ptr(), separator->length(), separator->charset(), &errors); new_separator->length(conv_length); separator= new_separator; } if (check_sum_func(thd, ref)) return TRUE; Loading