1
0
mirror of https://github.com/mariadb-corporation/mariadb-columnstore-engine.git synced 2025-08-01 06:46:55 +03:00

fix(PrimProc): MCOL-5394 JSON_ARRAYAGG in MCS works differently than in InnoDB

This commit is contained in:
Aleksei Antipovskii
2025-03-27 03:38:42 +01:00
committed by Alexey Antipovsky
parent 21ebd1ac20
commit c618fa284d
4 changed files with 315 additions and 43 deletions

View File

@ -0,0 +1,100 @@
DROP DATABASE IF EXISTS mcol_5394 ;
CREATE DATABASE mcol_5394 ;
USE mcol_5394 ;
CREATE TABLE t1 (a int, k int, b VARCHAR(10)) engine=columnstore;
INSERT INTO t1 VALUES
(1, 1, "alfa"),
(1, 2, null),
(2, 3, "doi"),
(1, 4, "unu"),
(3, 5, "trei"),
(4, 6, null),
(4, 7, null),
(1, 8, "one");
SELECT a, JSON_ARRAYAGG(b) FROM t1 GROUP BY a;
a JSON_ARRAYAGG(b)
1 ["alfa",null,"unu","one"]
2 ["doi"]
3 ["trei"]
4 [null,null]
SELECT JSON_ARRAYAGG(b) FROM t1;
JSON_ARRAYAGG(b)
["alfa",null,"doi","unu","trei",null,null,"one"]
PREPARE p1 FROM "SELECT a, JSON_ARRAYAGG(b) FROM t1 GROUP BY a";
EXECUTE p1;
a JSON_ARRAYAGG(b)
1 ["alfa",null,"unu","one"]
2 ["doi"]
3 ["trei"]
4 [null,null]
EXECUTE p1;
a JSON_ARRAYAGG(b)
1 ["alfa",null,"unu","one"]
2 ["doi"]
3 ["trei"]
4 [null,null]
deallocate prepare p1;
PREPARE p3 FROM
"SELECT SQL_BUFFER_RESULT a, JSON_ARRAYAGG(b) FROM t1 GROUP BY a";
EXECUTE p3;
a JSON_ARRAYAGG(b)
1 ["alfa",null,"unu","one"]
2 ["doi"]
3 ["trei"]
4 [null,null]
EXECUTE p3;
a JSON_ARRAYAGG(b)
1 ["alfa",null,"unu","one"]
2 ["doi"]
3 ["trei"]
4 [null,null]
deallocate prepare p3;
PREPARE p4 FROM "SELECT JSON_ARRAYAGG(b) FROM t1";
EXECUTE p4;
JSON_ARRAYAGG(b)
["alfa",null,"doi","unu","trei",null,null,"one"]
EXECUTE p4;
JSON_ARRAYAGG(b)
["alfa",null,"doi","unu","trei",null,null,"one"]
deallocate prepare p4;
SELECT JSON_MERGE_PRESERVE(JSON_ARRAYAGG(b), '[true, false]') FROM t1;
JSON_MERGE_PRESERVE(JSON_ARRAYAGG(b), '[true, false]')
["alfa", null, "doi", "unu", "trei", null, null, "one", true, false]
PREPARE p1 FROM
"SELECT a, JSON_MERGE_PRESERVE(JSON_ARRAYAGG(b), '[true, false]') FROM t1 GROUP BY a";
EXECUTE p1;
a JSON_MERGE_PRESERVE(JSON_ARRAYAGG(b), '[true, false]')
1 ["alfa", null, "unu", "one", true, false]
2 ["doi", true, false]
3 ["trei", true, false]
4 [null, null, true, false]
EXECUTE p1;
a JSON_MERGE_PRESERVE(JSON_ARRAYAGG(b), '[true, false]')
1 ["alfa", null, "unu", "one", true, false]
2 ["doi", true, false]
3 ["trei", true, false]
4 [null, null, true, false]
deallocate prepare p1;
PREPARE p4 FROM
"SELECT JSON_MERGE_PRESERVE(JSON_ARRAYAGG(b), '[true, false]') FROM t1";
EXECUTE p4;
JSON_MERGE_PRESERVE(JSON_ARRAYAGG(b), '[true, false]')
["alfa", null, "doi", "unu", "trei", null, null, "one", true, false]
EXECUTE p4;
JSON_MERGE_PRESERVE(JSON_ARRAYAGG(b), '[true, false]')
["alfa", null, "doi", "unu", "trei", null, null, "one", true, false]
deallocate prepare p4;
SELECT a, JSON_ARRAYAGG(b) as jarray
FROM t1
GROUP BY a
HAVING jarray= JSON_ARRAY("trei");
a jarray
3 ["trei"]
TRUNCATE TABLE t1;
SELECT a, JSON_ARRAYAGG(b) FROM t1 GROUP BY a;
a JSON_ARRAYAGG(b)
SELECT JSON_ARRAYAGG(b) FROM t1;
JSON_ARRAYAGG(b)
NULL
DROP TABLE t1;
DROP DATABASE mcol_5394;

View File

@ -0,0 +1,82 @@
--source ../include/have_columnstore.inc
--disable_warnings
DROP DATABASE IF EXISTS mcol_5394 ;
--enable_warnings
CREATE DATABASE mcol_5394 ;
USE mcol_5394 ;
CREATE TABLE t1 (a int, k int, b VARCHAR(10)) engine=columnstore;
INSERT INTO t1 VALUES
(1, 1, "alfa"),
(1, 2, null),
(2, 3, "doi"),
(1, 4, "unu"),
(3, 5, "trei"),
(4, 6, null),
(4, 7, null),
(1, 8, "one");
--sorted_result
SELECT a, JSON_ARRAYAGG(b) FROM t1 GROUP BY a;
--sorted_result
SELECT JSON_ARRAYAGG(b) FROM t1;
PREPARE p1 FROM "SELECT a, JSON_ARRAYAGG(b) FROM t1 GROUP BY a";
--sorted_result
EXECUTE p1;
--sorted_result
EXECUTE p1;
deallocate prepare p1;
PREPARE p3 FROM
"SELECT SQL_BUFFER_RESULT a, JSON_ARRAYAGG(b) FROM t1 GROUP BY a";
--sorted_result
EXECUTE p3;
--sorted_result
EXECUTE p3;
deallocate prepare p3;
PREPARE p4 FROM "SELECT JSON_ARRAYAGG(b) FROM t1";
--sorted_result
EXECUTE p4;
--sorted_result
EXECUTE p4;
deallocate prepare p4;
--sorted_result
SELECT JSON_MERGE_PRESERVE(JSON_ARRAYAGG(b), '[true, false]') FROM t1;
PREPARE p1 FROM
"SELECT a, JSON_MERGE_PRESERVE(JSON_ARRAYAGG(b), '[true, false]') FROM t1 GROUP BY a";
--sorted_result
EXECUTE p1;
--sorted_result
EXECUTE p1;
deallocate prepare p1;
PREPARE p4 FROM
"SELECT JSON_MERGE_PRESERVE(JSON_ARRAYAGG(b), '[true, false]') FROM t1";
--sorted_result
EXECUTE p4;
--sorted_result
EXECUTE p4;
deallocate prepare p4;
--sorted_result
SELECT a, JSON_ARRAYAGG(b) as jarray
FROM t1
GROUP BY a
HAVING jarray= JSON_ARRAY("trei");
TRUNCATE TABLE t1;
SELECT a, JSON_ARRAYAGG(b) FROM t1 GROUP BY a;
SELECT JSON_ARRAYAGG(b) FROM t1;
DROP TABLE t1;
DROP DATABASE mcol_5394;