Commit 2b09b6c5 authored by unknown's avatar unknown

Merge mysql.com:/nfsdisk1/lars/bkroot/mysql-5.0-rpl

into  mysql.com:/nfsdisk1/lars/MERGE/mysql-5.0-merge


sql/item_sum.cc:
  Auto merged
sql/sql_yacc.yy:
  Auto merged
parents 8dcd5fca 9b940d0c
...@@ -865,4 +865,25 @@ blob 65535 65535 ...@@ -865,4 +865,25 @@ blob 65535 65535
text 65535 65535 text 65535 65535
text 65535 32767 text 65535 32767
drop table t1; 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 End of 5.0 tests
...@@ -7,6 +7,13 @@ character_set_server ucs2 ...@@ -7,6 +7,13 @@ character_set_server ucs2
DROP TABLE IF EXISTS t1; DROP TABLE IF EXISTS t1;
create table t1 (a int); create table t1 (a int);
drop table t1; 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, 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, col2 VARCHAR(32) CHARACTER SET ucs2 COLLATE ucs2_bin NOT NULL,
UNIQUE KEY key1 USING HASH (col1, col2)) ENGINE=MEMORY; UNIQUE KEY key1 USING HASH (col1, col2)) ENGINE=MEMORY;
......
...@@ -594,4 +594,22 @@ select data_type, character_octet_length, character_maximum_length ...@@ -594,4 +594,22 @@ select data_type, character_octet_length, character_maximum_length
from information_schema.columns where table_name='t1'; from information_schema.columns where table_name='t1';
drop table 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 --echo End of 5.0 tests
...@@ -15,6 +15,16 @@ DROP TABLE IF EXISTS t1; ...@@ -15,6 +15,16 @@ DROP TABLE IF EXISTS t1;
create table t1 (a int); create table t1 (a int);
drop table t1; 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) # Bug #27643: query failed : 1114 (The table '' is full)
# #
......
...@@ -3209,6 +3209,27 @@ Item_func_group_concat::fix_fields(THD *thd, Item **ref) ...@@ -3209,6 +3209,27 @@ Item_func_group_concat::fix_fields(THD *thd, Item **ref)
null_value= 1; null_value= 1;
max_length= thd->variables.group_concat_max_len; 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)) if (check_sum_func(thd, ref))
return TRUE; return TRUE;
......
...@@ -5424,8 +5424,11 @@ opt_distinct: ...@@ -5424,8 +5424,11 @@ opt_distinct:
|DISTINCT { $$ = 1; }; |DISTINCT { $$ = 1; };
opt_gconcat_separator: opt_gconcat_separator:
/* empty */ { $$ = new (YYTHD->mem_root) String(",",1,default_charset_info); } /* empty */
|SEPARATOR_SYM text_string { $$ = $2; }; {
$$= new (YYTHD->mem_root) String(",", 1, &my_charset_latin1);
}
| SEPARATOR_SYM text_string { $$ = $2; };
opt_gorder_clause: opt_gorder_clause:
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment