1
0
mirror of https://github.com/MariaDB/server.git synced 2025-07-30 16:24:05 +03:00

Bug#32798: DISTINCT in GROUP_CONCAT clause fails when ordering by a column

with null values

For queries containing GROUP_CONCAT(DISTINCT fields ORDER BY fields), there 
was a limitation that the DISTINCT fields had to be the same as ORDER BY 
fields, owing to the fact that one single sorted tree was used for keeping 
track of tuples, ordering and uniqueness. Fixed by introducing a second 
structure to handle uniqueness so that the original structure has only to 
order the result.


mysql-test/r/func_gconcat.result:
  Bug#32798:
  - Wrong test result turned correct after fix.
  - Correct test result
mysql-test/t/func_gconcat.test:
  Bug#32798: Test case
sql/item_sum.cc:
  Bug#32798: Implementation of fix. Dead code removal.
  
  - removed comment describing this bug
  - replaced body of function group_concat_key_cmp_with_distinct
  - removed function group_concat_key_cmp_with_distinct_and_order
  - Added a Unique object to maintain uniqueness of values.
sql/item_sum.h:
  Bug#32798: Declarations and comments.
This commit is contained in:
unknown
2007-12-14 12:24:20 +01:00
parent 62a7e160bc
commit 0c4b3f5784
4 changed files with 203 additions and 83 deletions

View File

@ -562,4 +562,47 @@ insert into t1 (id, name) values (2, "
select b.id, group_concat(b.name) from t1 a, t1 b group by b.id;
drop table t1;
#
# Bug#32798: DISTINCT in GROUP_CONCAT clause fails when ordering by a column
# with null values
#'
CREATE TABLE t1 (a INT, b INT);
INSERT INTO t1 VALUES (1, 1), (2, 2), (2, 3);
SELECT GROUP_CONCAT(DISTINCT a ORDER BY b) FROM t1;
SELECT GROUP_CONCAT(DISTINCT a ORDER BY b DESC) FROM t1;
SELECT GROUP_CONCAT(DISTINCT a) FROM t1;
SELECT GROUP_CONCAT(DISTINCT a + 1 ORDER BY 3 - b) FROM t1;
SELECT GROUP_CONCAT(DISTINCT a + 1 ORDER BY b) FROM t1;
SELECT GROUP_CONCAT(a ORDER BY 3 - b) FROM t1;
CREATE TABLE t2 (a INT, b INT, c INT, d INT);
# There is one duplicate in the expression list: 1,10
# There is one duplicate in ORDER BY list, but that shouldnt matter: 1,10
INSERT INTO t2 VALUES (1,1, 1,1), (1,1, 2,2), (1,2, 2,1), (2,1, 1,2);
SELECT GROUP_CONCAT(DISTINCT a, b ORDER BY c, d) FROM t2;
SELECT GROUP_CONCAT(DISTINCT a, b ORDER BY d, c) FROM t2;
CREATE TABLE t3 (a INT, b INT, c INT);
INSERT INTO t3 VALUES (1, 1, 1), (2, 1, 2), (3, 2, 1);
SELECT GROUP_CONCAT(DISTINCT a, b ORDER BY b, c) FROM t3;
SELECT GROUP_CONCAT(DISTINCT a, b ORDER BY c, b) FROM t3;
SELECT GROUP_CONCAT(DISTINCT a, b ORDER BY a, b) FROM t1;
SELECT GROUP_CONCAT(DISTINCT b, a ORDER BY a, b) FROM t1;
SELECT GROUP_CONCAT(DISTINCT a, b ORDER BY b, a) FROM t1;
SELECT GROUP_CONCAT(DISTINCT b, a ORDER BY a, b) FROM t1;
SELECT GROUP_CONCAT(DISTINCT a ORDER BY a, b) FROM t1;
SELECT GROUP_CONCAT(DISTINCT b ORDER BY b, a) FROM t1;
SELECT GROUP_CONCAT(DISTINCT a, b ORDER BY a) FROM t1;
SELECT GROUP_CONCAT(DISTINCT b, a ORDER BY b) FROM t1;
DROP TABLE t1, t2, t3;
--echo End of 5.0 tests