mirror of
https://github.com/MariaDB/server.git
synced 2025-07-29 05:21:33 +03:00
MDEV-22011: DISTINCT with JSON_ARRAYAGG gives wrong results
For DISTINCT to be handled with JSON_ARRAYAGG, we need to make sure that the Unique tree also holds the NULL bytes of a table record inside the node of the tree. This behaviour for JSON_ARRAYAGG is different from GROUP_CONCAT because in GROUP_CONCAT we just reject NULL values for columns. Also introduced a comparator function for the unique tree to handle null values for distinct inside JSON_ARRAYAGG.
This commit is contained in:
@ -1160,13 +1160,13 @@ JSON_ARRAYAGG(DISTINCT a)
|
||||
[1,2,3]
|
||||
SELECT JSON_ARRAYAGG(DISTINCT b) FROM t1;
|
||||
JSON_ARRAYAGG(DISTINCT b)
|
||||
["Hello","World","This","Will","Work","!",null]
|
||||
[null,"!","Hello","This","Will","Work","World"]
|
||||
SELECT JSON_ARRAYAGG(DISTINCT a LIMIT 2) FROM t1;
|
||||
JSON_ARRAYAGG(DISTINCT a LIMIT 2)
|
||||
[1,2]
|
||||
SELECT JSON_ARRAYAGG(DISTINCT b LIMIT 2) FROM t1;
|
||||
JSON_ARRAYAGG(DISTINCT b LIMIT 2)
|
||||
["Hello","World"]
|
||||
[null,"!"]
|
||||
#
|
||||
# JSON aggregation
|
||||
#
|
||||
@ -1247,5 +1247,42 @@ select json_object('x', json_arrayagg(json_object('a', 1)));
|
||||
json_object('x', json_arrayagg(json_object('a', 1)))
|
||||
{"x": [{"a": 1}]}
|
||||
#
|
||||
# MDEV-22011: DISTINCT with JSON_ARRAYAGG gives wrong results
|
||||
#
|
||||
CREATE TABLE t1(a INT, b INT);
|
||||
INSERT INTO t1 VALUES (1,1), (2,2), (3,3);
|
||||
INSERT INTO t1 VALUES (1,1), (2,2), (3,3);
|
||||
SELECT JSON_ARRAYAGG(a) FROM t1;
|
||||
JSON_ARRAYAGG(a)
|
||||
[1,2,3,1,2,3]
|
||||
SELECT JSON_ARRAYAGG(DISTINCT a) FROM t1;
|
||||
JSON_ARRAYAGG(DISTINCT a)
|
||||
[1,2,3]
|
||||
INSERT INTO t1 VALUES (NULL,NULL), (NULL,NULL);
|
||||
SELECT JSON_ARRAYAGG(a) FROM t1;
|
||||
JSON_ARRAYAGG(a)
|
||||
[1,2,3,1,2,3,null,null]
|
||||
SELECT JSON_ARRAYAGG(DISTINCT a) FROM t1;
|
||||
JSON_ARRAYAGG(DISTINCT a)
|
||||
[null,1,2,3]
|
||||
DROP TABLE t1;
|
||||
CREATE TABLE t1(a VARCHAR(10), b INT);
|
||||
INSERT INTO t1 VALUES (1,1), (2,2), (3,3);
|
||||
INSERT INTO t1 VALUES (1,1), (2,2), (3,3);
|
||||
SELECT JSON_ARRAYAGG(a) FROM t1;
|
||||
JSON_ARRAYAGG(a)
|
||||
["1","2","3","1","2","3"]
|
||||
SELECT JSON_ARRAYAGG(DISTINCT a) FROM t1;
|
||||
JSON_ARRAYAGG(DISTINCT a)
|
||||
["1","2","3"]
|
||||
INSERT INTO t1 VALUES (NULL,NULL), (NULL,NULL);
|
||||
SELECT JSON_ARRAYAGG(a) FROM t1;
|
||||
JSON_ARRAYAGG(a)
|
||||
["1","2","3","1","2","3",null,null]
|
||||
SELECT JSON_ARRAYAGG(DISTINCT a) FROM t1;
|
||||
JSON_ARRAYAGG(DISTINCT a)
|
||||
[null,"1","2","3"]
|
||||
DROP TABLE t1;
|
||||
#
|
||||
# End of 10.5 tests
|
||||
#
|
||||
|
Reference in New Issue
Block a user