Details
-
Bug
-
Status: Confirmed (View Workflow)
-
Major
-
Resolution: Unresolved
-
10.11, 11.4, 11.8, 12.3, 13.1
Description
Hi,
I found that the ORDER BY may not return the correct order in JSON_ARRAYAGG. This is an example:
SET SESSION group_concat_max_len=100; |
SET SESSION max_recursive_iterations=2000; |
|
|
CREATE TABLE t(a INT, b VARCHAR(200) NULL); |
|
|
INSERT INTO t |
WITH RECURSIVE seq AS ( |
SELECT 1 AS n |
UNION ALL |
SELECT n + 1 FROM seq WHERE n < 1500 |
)
|
SELECT n, RPAD(CONCAT('v', LPAD(n, 4, '0')), 80, CHAR(64 + (n % 26))) FROM seq; |
|
|
SELECT LENGTH(JSON_ARRAYAGG(b ORDER BY a)) AS len_all, |
JSON_ARRAYAGG(b ORDER BY a) AS all_rows |
FROM t; -- 102 ["v0001AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA","v1294TTTTTTTTTT"] |
|
|
SELECT LENGTH(JSON_ARRAYAGG(b ORDER BY a)) AS len_two, |
JSON_ARRAYAGG(b ORDER BY a) AS two_rows |
FROM t |
WHERE a <= 2; -- 102 ["v0001AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA","v0002BBBBBBBBBB"] |
These two SELECT queries should have the same results; however, they return different ones.