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
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Analytics
Analytics
CI / CD
Repository
Value Stream
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
nexedi
MariaDB
Commits
0aa4563e
Commit
0aa4563e
authored
Jul 07, 2003
by
bell@sanja.is.com.ua
Browse files
Options
Browse Files
Download
Plain Diff
Merge sanja.is.com.ua:/home/bell/mysql/bk/mysql-4.1
into sanja.is.com.ua:/home/bell/mysql/bk/work-alloc_group-4.1
parents
bfc70eb9
9b6083db
Changes
4
Hide whitespace changes
Inline
Side-by-side
Showing
4 changed files
with
63 additions
and
51 deletions
+63
-51
mysql-test/r/func_gconcat.result
mysql-test/r/func_gconcat.result
+21
-20
mysql-test/t/func_gconcat.test
mysql-test/t/func_gconcat.test
+22
-16
sql/item_sum.cc
sql/item_sum.cc
+20
-14
sql/item_sum.h
sql/item_sum.h
+0
-1
No files found.
mysql-test/r/func_gconcat.result
View file @
0aa4563e
drop table if exists t1;
Warnings:
Note 1051 Unknown table 't1'
drop table if exists t1, t2;
create table t1 (grp int, a bigint unsigned, c char(10) not null, d char(10) not null);
insert into t1 values (1,1,"a","a");
insert into t1 values (2,2,"b","a");
...
...
@@ -155,25 +153,28 @@ show warnings;
Level Code Message
Warning 1258 1 line(s) was(were) cut by group_concat()
set group_concat_max_len = 1024;
drop table if exists T_URL;
Warnings:
Note 1051 Unknown table 'T_URL'
create table T_URL ( URL_ID int(11), URL varchar(80));
drop table if exists T_REQUEST;
Warnings:
Note 1051 Unknown table 'T_REQUEST'
create table T_REQUEST ( REQ_ID int(11), URL_ID int(11));
insert into T_URL values (4,'www.host.com'), (5,'www.google.com'),(5,'www.help.com');
insert into T_REQUEST values (1,4), (5,4), (5,5);
select REQ_ID, Group_Concat(URL) as URL from T_URL, T_REQUEST where
T_REQUEST.URL_ID = T_URL.URL_ID group by REQ_ID;
REQ_ID URL
1 X
5 X,X,X
drop table T_URL;
drop table T_REQUEST;
select group_concat(sum(a)) from t1 group by grp;
ERROR HY000: Invalid use of group function
select grp,group_concat(c order by 2) from t1 group by grp;
ERROR 42S22: Unknown column '2' in 'group statement'
drop table t1;
create table t1 ( URL_ID int(11), URL varchar(80));
create table t2 ( REQ_ID int(11), URL_ID int(11));
insert into t1 values (4,'www.host.com'), (5,'www.google.com'),(5,'www.help.com');
insert into t2 values (1,4), (5,4), (5,5);
select REQ_ID, Group_Concat(URL) as URL from t1, t2 where
t2.URL_ID = t1.URL_ID group by REQ_ID;
REQ_ID URL
1 X
5 X,X,X
drop table t1;
drop table t2;
create table t1 (id int, name varchar(16));
insert into t1 values (1,'longername'),(1,'evenlongername');
select ifnull(group_concat(concat(t1.id, ':', t1.name)), 'shortname') as 'without distinct: how it should be' from t1;
without distinct: how it should be
1:longername,1:evenlongername
select distinct ifnull(group_concat(concat(t1.id, ':', t1.name)), 'shortname') as 'with distinct: cutoff at length of shortname' from t1;
with distinct: cutoff at length of shortname
1:longername,1:evenlongername
drop table t1;
mysql-test/t/func_gconcat.test
View file @
0aa4563e
#
# simple test of group_concat function
#
--
disable_warnings
drop
table
if
exists
t1
,
t2
;
--
enable_warnings
drop
table
if
exists
t1
;
create
table
t1
(
grp
int
,
a
bigint
unsigned
,
c
char
(
10
)
not
null
,
d
char
(
10
)
not
null
);
insert
into
t1
values
(
1
,
1
,
"a"
,
"a"
);
insert
into
t1
values
(
2
,
2
,
"b"
,
"a"
);
...
...
@@ -70,21 +72,6 @@ select grp,group_concat(c) from t1 group by grp;
show
warnings
;
set
group_concat_max_len
=
1024
;
# Test variable length
drop
table
if
exists
T_URL
;
create
table
T_URL
(
URL_ID
int
(
11
),
URL
varchar
(
80
));
drop
table
if
exists
T_REQUEST
;
create
table
T_REQUEST
(
REQ_ID
int
(
11
),
URL_ID
int
(
11
));
insert
into
T_URL
values
(
4
,
'www.host.com'
),
(
5
,
'www.google.com'
),(
5
,
'www.help.com'
);
insert
into
T_REQUEST
values
(
1
,
4
),
(
5
,
4
),
(
5
,
5
);
# Make this order independent
--
replace_result
www
.
help
.
com
X
www
.
host
.
com
X
www
.
google
.
com
X
select
REQ_ID
,
Group_Concat
(
URL
)
as
URL
from
T_URL
,
T_REQUEST
where
T_REQUEST
.
URL_ID
=
T_URL
.
URL_ID
group
by
REQ_ID
;
drop
table
T_URL
;
drop
table
T_REQUEST
;
# Test errors
--
error
1111
...
...
@@ -93,3 +80,22 @@ select group_concat(sum(a)) from t1 group by grp;
select
grp
,
group_concat
(
c
order
by
2
)
from
t1
group
by
grp
;
drop
table
t1
;
# Test variable length
create
table
t1
(
URL_ID
int
(
11
),
URL
varchar
(
80
));
create
table
t2
(
REQ_ID
int
(
11
),
URL_ID
int
(
11
));
insert
into
t1
values
(
4
,
'www.host.com'
),
(
5
,
'www.google.com'
),(
5
,
'www.help.com'
);
insert
into
t2
values
(
1
,
4
),
(
5
,
4
),
(
5
,
5
);
# Make this order independent
--
replace_result
www
.
help
.
com
X
www
.
host
.
com
X
www
.
google
.
com
X
select
REQ_ID
,
Group_Concat
(
URL
)
as
URL
from
t1
,
t2
where
t2
.
URL_ID
=
t1
.
URL_ID
group
by
REQ_ID
;
drop
table
t1
;
drop
table
t2
;
create
table
t1
(
id
int
,
name
varchar
(
16
));
insert
into
t1
values
(
1
,
'longername'
),(
1
,
'evenlongername'
);
select
ifnull
(
group_concat
(
concat
(
t1
.
id
,
':'
,
t1
.
name
)),
'shortname'
)
as
'without distinct: how it should be'
from
t1
;
select
distinct
ifnull
(
group_concat
(
concat
(
t1
.
id
,
':'
,
t1
.
name
)),
'shortname'
)
as
'with distinct: cutoff at length of shortname'
from
t1
;
drop
table
t1
;
sql/item_sum.cc
View file @
0aa4563e
...
...
@@ -1114,7 +1114,7 @@ void Item_sum_count_distinct::make_unique()
bool
Item_sum_count_distinct
::
setup
(
THD
*
thd
)
{
List
<
Item
>
list
;
SELECT_LEX
*
select_lex
=
current_lex
->
current_select
->
select_lex
();
SELECT_LEX
*
select_lex
=
thd
->
lex
.
current_select
->
select_lex
();
if
(
select_lex
->
linkage
==
GLOBAL_OPTIONS_TYPE
)
return
1
;
...
...
@@ -1599,7 +1599,7 @@ Item_func_group_concat::Item_func_group_concat(bool is_distinct,
warning_available
(
0
),
key_length
(
0
),
rec_offset
(
0
),
tree_mode
(
0
),
distinct
(
is_distinct
),
warning_for_row
(
0
),
separator
(
is_separator
),
tree
(
&
tree_base
),
table
(
0
),
order
(
0
),
tables_list
(
0
),
group_concat_max_len
(
0
),
order
(
0
),
tables_list
(
0
),
show_elements
(
0
),
arg_count_order
(
0
),
arg_count_field
(
0
),
arg_show_fields
(
0
),
count_cut_values
(
0
)
...
...
@@ -1607,8 +1607,11 @@ Item_func_group_concat::Item_func_group_concat(bool is_distinct,
original
=
0
;
quick_group
=
0
;
mark_as_sum_func
();
SELECT_LEX
*
select_lex
=
current_lex
->
current_select
->
select_lex
();
item_thd
=
current_thd
;
SELECT_LEX
*
select_lex
=
item_thd
->
lex
.
current_select
->
select_lex
();
order
=
0
;
group_concat_max_len
=
item_thd
->
variables
.
group_concat_max_len
;
arg_show_fields
=
arg_count_field
=
is_select
->
elements
;
arg_count_order
=
is_order
?
is_order
->
elements
:
0
;
...
...
@@ -1773,7 +1776,7 @@ Item_func_group_concat::fix_fields(THD *thd, TABLE_LIST *tables, Item **ref)
}
result_field
=
0
;
null_value
=
1
;
fix_length_and_dec
()
;
max_length
=
group_concat_max_len
;
thd
->
allow_sum_func
=
1
;
if
(
!
(
tmp_table_param
=
new
TMP_TABLE_PARAM
))
return
1
;
...
...
@@ -1785,11 +1788,12 @@ Item_func_group_concat::fix_fields(THD *thd, TABLE_LIST *tables, Item **ref)
bool
Item_func_group_concat
::
setup
(
THD
*
thd
)
{
DBUG_ENTER
(
"Item_func_group_concat::setup"
);
List
<
Item
>
list
;
SELECT_LEX
*
select_lex
=
current_lex
->
current_select
->
select_lex
();
SELECT_LEX
*
select_lex
=
thd
->
lex
.
current_select
->
select_lex
();
if
(
select_lex
->
linkage
==
GLOBAL_OPTIONS_TYPE
)
return
1
;
DBUG_RETURN
(
1
)
;
/*
all not constant fields are push to list and create temp table
*/
...
...
@@ -1798,7 +1802,7 @@ bool Item_func_group_concat::setup(THD *thd)
{
Item
*
item
=
args
[
i
];
if
(
list
.
push_back
(
item
))
return
1
;
DBUG_RETURN
(
1
)
;
if
(
item
->
const_item
())
{
(
void
)
item
->
val_int
();
...
...
@@ -1807,7 +1811,7 @@ bool Item_func_group_concat::setup(THD *thd)
}
}
if
(
always_null
)
return
0
;
DBUG_RETURN
(
0
)
;
List
<
Item
>
all_fields
(
list
);
if
(
arg_count_order
)
...
...
@@ -1818,13 +1822,18 @@ bool Item_func_group_concat::setup(THD *thd)
}
count_field_types
(
tmp_table_param
,
all_fields
,
0
);
if
(
table
)
{
free_tmp_table
(
thd
,
table
);
tmp_table_param
->
cleanup
();
}
/*
We have to create a temporary table for that we get descriptions of fields
(types, sizes and so on).
*/
if
(
!
(
table
=
create_tmp_table
(
thd
,
tmp_table_param
,
all_fields
,
0
,
0
,
0
,
0
,
select_lex
->
options
|
thd
->
options
)))
return
1
;
0
,
0
,
0
,
select_lex
->
options
|
thd
->
options
)))
DBUG_RETURN
(
1
)
;
table
->
file
->
extra
(
HA_EXTRA_NO_ROWS
);
table
->
no_rows
=
1
;
...
...
@@ -1873,9 +1882,6 @@ bool Item_func_group_concat::setup(THD *thd)
max_elements_in_tree
=
((
key_length
)
?
thd
->
variables
.
max_heap_table_size
/
key_length
:
1
);
};
item_thd
=
thd
;
group_concat_max_len
=
thd
->
variables
.
group_concat_max_len
;
/*
Copy table and tree_mode if they belong to this item (if item have not
...
...
@@ -1886,7 +1892,7 @@ bool Item_func_group_concat::setup(THD *thd)
original
->
table
=
table
;
original
->
tree_mode
=
tree_mode
;
}
return
0
;
DBUG_RETURN
(
0
)
;
}
/* This is used by rollup to create a separate usable copy of the function */
...
...
sql/item_sum.h
View file @
0aa4563e
...
...
@@ -713,7 +713,6 @@ class Item_func_group_concat : public Item_sum
enum
Sumfunctype
sum_func
()
const
{
return
GROUP_CONCAT_FUNC
;}
const
char
*
func_name
()
const
{
return
"group_concat"
;
}
enum
Type
type
()
const
{
return
SUM_FUNC_ITEM
;
}
void
fix_length_and_dec
()
{
max_length
=
group_concat_max_len
;
}
virtual
Item_result
result_type
()
const
{
return
STRING_RESULT
;
}
bool
reset
();
bool
add
();
...
...
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