Commit 7dd86f75 authored by unknown's avatar unknown

Fix bug #14466 lost sort order in GROUP_CONCAT() in a view

Item_func_group_concat::print() wasn't printing sort order thus creating wrong
view. This results in reported error.


sql/item_sum.cc:
  Fix bug #14466 lost sort order in GROUP_CONCAT() in a view
  Now Item_func_group_concat::print() prints sort order.
mysql-test/r/view.result:
  Test case for bug #14466 lost sort order in GROUP_CONCAT() in a view
mysql-test/t/view.test:
  Test case for bug #14466 lost sort order in GROUP_CONCAT() in a view
parent f9dbcd55
...@@ -2323,3 +2323,15 @@ id select_type table type possible_keys key key_len ref rows Extra ...@@ -2323,3 +2323,15 @@ id select_type table type possible_keys key key_len ref rows Extra
1 PRIMARY t3 ALL NULL NULL NULL NULL 3 Using where 1 PRIMARY t3 ALL NULL NULL NULL NULL 3 Using where
DROP VIEW v1,v2; DROP VIEW v1,v2;
DROP TABLE t1,t2,t3; DROP TABLE t1,t2,t3;
create table t1 (f1 int, f2 int);
insert into t1 values(1,1),(1,2),(1,3);
create view v1 as select f1 ,group_concat(f2 order by f2 asc) from t1 group by f1;
create view v2 as select f1 ,group_concat(f2 order by f2 desc) from t1 group by f1;
select * from v1;
f1 group_concat(f2 order by f2 asc)
1 1,2,3
select * from v2;
f1 group_concat(f2 order by f2 desc)
1 3,2,1
drop view v1,v2;
drop table t1;
...@@ -2189,4 +2189,14 @@ EXPLAIN SELECT * FROM v2 WHERE a=1; ...@@ -2189,4 +2189,14 @@ EXPLAIN SELECT * FROM v2 WHERE a=1;
DROP VIEW v1,v2; DROP VIEW v1,v2;
DROP TABLE t1,t2,t3; DROP TABLE t1,t2,t3;
#
# Bug #14466 lost sort order in GROUP_CONCAT() in a view
#
create table t1 (f1 int, f2 int);
insert into t1 values(1,1),(1,2),(1,3);
create view v1 as select f1 ,group_concat(f2 order by f2 asc) from t1 group by f1;
create view v2 as select f1 ,group_concat(f2 order by f2 desc) from t1 group by f1;
select * from v1;
select * from v2;
drop view v1,v2;
drop table t1;
...@@ -3173,6 +3173,10 @@ void Item_func_group_concat::print(String *str) ...@@ -3173,6 +3173,10 @@ void Item_func_group_concat::print(String *str)
if (i) if (i)
str->append(','); str->append(',');
(*order[i]->item)->print(str); (*order[i]->item)->print(str);
if (order[i]->asc)
str->append(" ASC");
else
str->append(" DESC");
} }
} }
str->append(" separator \'", 12); str->append(" separator \'", 12);
......
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