Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
M
mariadb
Project overview
Project overview
Details
Activity
Releases
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Issues
0
Issues
0
List
Boards
Labels
Milestones
Merge Requests
0
Merge Requests
0
Analytics
Analytics
Repository
Value Stream
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Create a new issue
Commits
Issue Boards
Open sidebar
Kirill Smelkov
mariadb
Commits
41a324ea
Commit
41a324ea
authored
Nov 08, 2006
by
bar@bar.intranet.mysql.r18.ru
Browse files
Options
Browse Files
Download
Plain Diff
Merge mysql.com:/usr/home/bar/mysql-5.0.b23451
into mysql.com:/usr/home/bar/mysql-5.1.b23451
parents
a932160a
9870d87f
Changes
3
Hide whitespace changes
Inline
Side-by-side
Showing
3 changed files
with
124 additions
and
4 deletions
+124
-4
mysql-test/r/func_gconcat.result
mysql-test/r/func_gconcat.result
+70
-0
mysql-test/t/func_gconcat.test
mysql-test/t/func_gconcat.test
+35
-0
sql/item_sum.cc
sql/item_sum.cc
+19
-4
No files found.
mysql-test/r/func_gconcat.result
View file @
41a324ea
...
@@ -664,3 +664,73 @@ GROUP_CONCAT(a) x
...
@@ -664,3 +664,73 @@ GROUP_CONCAT(a) x
2 1,2
2 1,2
1 2,3
1 2,3
DROP TABLE t1;
DROP TABLE t1;
set names utf8;
create table t1
(
x text character set utf8 not null,
y integer not null
);
insert into t1 values (repeat('a', 1022), 0), (repeat(_utf8 0xc3b7, 4), 0);
set group_concat_max_len= 1022 + 10;
select @x:=group_concat(x) from t1 group by y;
select @@group_concat_max_len, length(@x), char_length(@x), right(@x,12), right(HEX(@x),12);
@@group_concat_max_len length(@x) char_length(@x) right(@x,12) right(HEX(@x),12)
1032 1031 1027 aaaaaaa,÷÷÷÷ C3B7C3B7C3B7
set group_concat_max_len= 1022 + 9;
select @x:=group_concat(x) from t1 group by y;
select @@group_concat_max_len, length(@x), char_length(@x), right(@x,12), right(HEX(@x),12);
@@group_concat_max_len length(@x) char_length(@x) right(@x,12) right(HEX(@x),12)
1031 1031 1027 aaaaaaa,÷÷÷÷ C3B7C3B7C3B7
set group_concat_max_len= 1022 + 8;
select @x:=group_concat(x) from t1 group by y;
select @@group_concat_max_len, length(@x), char_length(@x), right(@x,12), right(HEX(@x),12);
@@group_concat_max_len length(@x) char_length(@x) right(@x,12) right(HEX(@x),12)
1030 1029 1026 aaaaaaaa,÷÷÷ C3B7C3B7C3B7
set group_concat_max_len= 1022 + 7;
select @x:=group_concat(x) from t1 group by y;
select @@group_concat_max_len, length(@x), char_length(@x), right(@x,12), right(HEX(@x),12);
@@group_concat_max_len length(@x) char_length(@x) right(@x,12) right(HEX(@x),12)
1029 1029 1026 aaaaaaaa,÷÷÷ C3B7C3B7C3B7
set group_concat_max_len= 1022 + 6;
select @x:=group_concat(x) from t1 group by y;
select @@group_concat_max_len, length(@x), char_length(@x), right(@x,12), right(HEX(@x),12);
@@group_concat_max_len length(@x) char_length(@x) right(@x,12) right(HEX(@x),12)
1028 1027 1025 aaaaaaaaa,÷÷ 612CC3B7C3B7
set group_concat_max_len= 1022 + 5;
select @x:=group_concat(x) from t1 group by y;
select @@group_concat_max_len, length(@x), char_length(@x), right(@x,12), right(HEX(@x),12);
@@group_concat_max_len length(@x) char_length(@x) right(@x,12) right(HEX(@x),12)
1027 1027 1025 aaaaaaaaa,÷÷ 612CC3B7C3B7
set group_concat_max_len= 1022 + 4;
select @x:=group_concat(x) from t1 group by y;
select @@group_concat_max_len, length(@x), char_length(@x), right(@x,12), right(HEX(@x),12);
@@group_concat_max_len length(@x) char_length(@x) right(@x,12) right(HEX(@x),12)
1026 1025 1024 aaaaaaaaaa,÷ 6161612CC3B7
set group_concat_max_len= 1022 + 3;
select @x:=group_concat(x) from t1 group by y;
select @@group_concat_max_len, length(@x), char_length(@x), right(@x,12), right(HEX(@x),12);
@@group_concat_max_len length(@x) char_length(@x) right(@x,12) right(HEX(@x),12)
1025 1025 1024 aaaaaaaaaa,÷ 6161612CC3B7
set group_concat_max_len= 1022 + 2;
select @x:=group_concat(x) from t1 group by y;
select @@group_concat_max_len, length(@x), char_length(@x), right(@x,12), right(HEX(@x),12);
@@group_concat_max_len length(@x) char_length(@x) right(@x,12) right(HEX(@x),12)
1024 1023 1023 aaaaaaaaaaa, 61616161612C
set group_concat_max_len= 1022 + 1;
select @x:=group_concat(x) from t1 group by y;
select @@group_concat_max_len, length(@x), char_length(@x), right(@x,12), right(HEX(@x),12);
@@group_concat_max_len length(@x) char_length(@x) right(@x,12) right(HEX(@x),12)
1023 1023 1023 aaaaaaaaaaa, 61616161612C
drop table t1;
set group_concat_max_len=1024;
set names latin1;
create table t1 (f1 int unsigned, f2 varchar(255));
insert into t1 values (1,repeat('a',255)),(2,repeat('b',255));
select f2,group_concat(f1) from t1 group by f2;
Catalog Database Table Table_alias Column Column_alias Type Length Max length Is_null Flags Decimals Charsetnr
def test t1 t1 f2 f2 253 255 255 Y 0 0 8
def group_concat(f1) 252 1024 1 Y 128 0 63
f2 group_concat(f1)
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa 1
bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb 2
drop table t1;
mysql-test/t/func_gconcat.test
View file @
41a324ea
...
@@ -461,3 +461,38 @@ SELECT GROUP_CONCAT(a), x
...
@@ -461,3 +461,38 @@ SELECT GROUP_CONCAT(a), x
GROUP
BY
x
;
GROUP
BY
x
;
DROP
TABLE
t1
;
DROP
TABLE
t1
;
#
# Bug#23451 GROUP_CONCAT truncates a multibyte utf8 character
#
set
names
utf8
;
create
table
t1
(
x
text
character
set
utf8
not
null
,
y
integer
not
null
);
insert
into
t1
values
(
repeat
(
'a'
,
1022
),
0
),
(
repeat
(
_utf8
0xc3b7
,
4
),
0
);
let
$
1
=
10
;
while
(
$
1
)
{
eval
set
group_concat_max_len
=
1022
+
$
1
;
--
disable_result_log
select
@
x
:=
group_concat
(
x
)
from
t1
group
by
y
;
--
enable_result_log
select
@@
group_concat_max_len
,
length
(
@
x
),
char_length
(
@
x
),
right
(
@
x
,
12
),
right
(
HEX
(
@
x
),
12
);
dec
$
1
;
}
drop
table
t1
;
set
group_concat_max_len
=
1024
;
set
names
latin1
;
#
# Bug#14169 type of group_concat() result changed to blob if tmp_table was used
#
create
table
t1
(
f1
int
unsigned
,
f2
varchar
(
255
));
insert
into
t1
values
(
1
,
repeat
(
'a'
,
255
)),(
2
,
repeat
(
'b'
,
255
));
--
enable_metadata
select
f2
,
group_concat
(
f1
)
from
t1
group
by
f2
;
--
disable_metadata
drop
table
t1
;
# End of 4.1 tests
sql/item_sum.cc
View file @
41a324ea
...
@@ -3019,6 +3019,7 @@ int dump_leaf_key(byte* key, element_count count __attribute__((unused)),
...
@@ -3019,6 +3019,7 @@ int dump_leaf_key(byte* key, element_count count __attribute__((unused)),
String
tmp2
;
String
tmp2
;
String
*
result
=
&
item
->
result
;
String
*
result
=
&
item
->
result
;
Item
**
arg
=
item
->
args
,
**
arg_end
=
item
->
args
+
item
->
arg_count_field
;
Item
**
arg
=
item
->
args
,
**
arg_end
=
item
->
args
+
item
->
arg_count_field
;
uint
old_length
=
result
->
length
();
if
(
item
->
no_appended
)
if
(
item
->
no_appended
)
item
->
no_appended
=
FALSE
;
item
->
no_appended
=
FALSE
;
...
@@ -3053,8 +3054,22 @@ int dump_leaf_key(byte* key, element_count count __attribute__((unused)),
...
@@ -3053,8 +3054,22 @@ int dump_leaf_key(byte* key, element_count count __attribute__((unused)),
/* stop if length of result more than max_length */
/* stop if length of result more than max_length */
if
(
result
->
length
()
>
item
->
max_length
)
if
(
result
->
length
()
>
item
->
max_length
)
{
{
int
well_formed_error
;
CHARSET_INFO
*
cs
=
item
->
collation
.
collation
;
const
char
*
ptr
=
result
->
ptr
();
uint
add_length
;
/*
It's ok to use item->result.length() as the fourth argument
as this is never used to limit the length of the data.
Cut is done with the third argument.
*/
add_length
=
cs
->
cset
->
well_formed_len
(
cs
,
ptr
+
old_length
,
ptr
+
item
->
max_length
,
result
->
length
(),
&
well_formed_error
);
result
->
length
(
old_length
+
add_length
);
item
->
count_cut_values
++
;
item
->
count_cut_values
++
;
result
->
length
(
item
->
max_length
);
item
->
warning_for_row
=
TRUE
;
item
->
warning_for_row
=
TRUE
;
return
1
;
return
1
;
}
}
...
@@ -3244,8 +3259,7 @@ bool Item_func_group_concat::add()
...
@@ -3244,8 +3259,7 @@ bool Item_func_group_concat::add()
we can dump the row here in case of GROUP_CONCAT(DISTINCT...)
we can dump the row here in case of GROUP_CONCAT(DISTINCT...)
instead of doing tree traverse later.
instead of doing tree traverse later.
*/
*/
if
(
result
.
length
()
<=
max_length
&&
if
(
!
warning_for_row
&&
!
warning_for_row
&&
(
!
tree
||
(
el
->
count
==
1
&&
distinct
&&
!
arg_count_order
)))
(
!
tree
||
(
el
->
count
==
1
&&
distinct
&&
!
arg_count_order
)))
dump_leaf_key
(
table
->
record
[
0
]
+
table
->
s
->
null_bytes
,
1
,
this
);
dump_leaf_key
(
table
->
record
[
0
]
+
table
->
s
->
null_bytes
,
1
,
this
);
...
@@ -3314,7 +3328,8 @@ bool Item_func_group_concat::setup(THD *thd)
...
@@ -3314,7 +3328,8 @@ bool Item_func_group_concat::setup(THD *thd)
DBUG_RETURN
(
TRUE
);
DBUG_RETURN
(
TRUE
);
/* We'll convert all blobs to varchar fields in the temporary table */
/* We'll convert all blobs to varchar fields in the temporary table */
tmp_table_param
->
convert_blob_length
=
max_length
;
tmp_table_param
->
convert_blob_length
=
max_length
*
collation
.
collation
->
mbmaxlen
;
/* Push all not constant fields to the list and create a temp table */
/* Push all not constant fields to the list and create a temp table */
always_null
=
0
;
always_null
=
0
;
for
(
uint
i
=
0
;
i
<
arg_count_field
;
i
++
)
for
(
uint
i
=
0
;
i
<
arg_count_field
;
i
++
)
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment