1
0
mirror of https://github.com/mariadb-corporation/mariadb-columnstore-engine.git synced 2025-11-02 06:13:16 +03:00

MDEV-32854: Make JSON_DEPTH_LIMIT unlimited

This patch is the columnstore-part of the task. Columnstore wanted to have
previous 32 depth, so this patch aims at keeping the compatibility.
This commit is contained in:
Rucha Deodhar
2025-05-22 15:42:12 +05:30
committed by Leonid Fedorov
parent 9a2ebebaf9
commit 9fe37d5919
50 changed files with 1047 additions and 952 deletions

View File

@@ -4,7 +4,14 @@ Note 1008 Can't drop database 'json_arrayagg_db'; database doesn't exist
CREATE DATABASE json_arrayagg_db;
USE json_arrayagg_db;
CREATE TABLE t1 (a INT, b INT)ENGINE=COLUMNSTORE;
INSERT INTO t1 VALUES (1, 1),(2, 1), (1, 1),(2, 1), (3, 2),(2, 2),(2, 2),(2, 2);
INSERT INTO t1 VALUES (1, 1);
INSERT INTO t1 VALUES (2, 1);
INSERT INTO t1 VALUES (1, 1);
INSERT INTO t1 VALUES (2, 1);
INSERT INTO t1 VALUES (3, 2);
INSERT INTO t1 VALUES (2, 2);
INSERT INTO t1 VALUES (2, 2);
INSERT INTO t1 VALUES (2, 2);
SELECT JSON_VALID(JSON_ARRAYAGG(a)) FROM t1;
JSON_VALID(JSON_ARRAYAGG(a))
1
@@ -20,7 +27,10 @@ DROP TABLE t1;
# Real aggregation
#
CREATE TABLE t1 (a FLOAT, b DOUBLE, c DECIMAL(10, 2))ENGINE=COLUMNSTORE;
INSERT INTO t1 VALUES (1.0, 2.0, 3.0),(1.0, 3.0, 9.0),(1.0, 4.0, 16.0),(1.0, 5.0, 25.0);
INSERT INTO t1 VALUES (1.0, 2.0, 3.0);
INSERT INTO t1 VALUES (1.0, 3.0, 9.0);
INSERT INTO t1 VALUES (1.0, 4.0, 16.0);
INSERT INTO t1 VALUES (1.0, 5.0, 25.0);
SELECT JSON_VALID(JSON_ARRAYAGG(a)) FROM t1;
JSON_VALID(JSON_ARRAYAGG(a))
1
@@ -32,7 +42,10 @@ DROP TABLE t1;
# Boolean aggregation
#
CREATE TABLE t1 (a BOOLEAN, b BOOLEAN)ENGINE=COLUMNSTORE;
INSERT INTO t1 VALUES (TRUE, TRUE), (TRUE, FALSE), (FALSE, TRUE), (FALSE, FALSE);
INSERT INTO t1 VALUES (TRUE, TRUE);
INSERT INTO t1 VALUES (TRUE, FALSE);
INSERT INTO t1 VALUES (FALSE, TRUE);
INSERT INTO t1 VALUES (FALSE, FALSE);
SELECT JSON_VALID(JSON_ARRAYAGG(a)) FROM t1;
JSON_VALID(JSON_ARRAYAGG(a))
1
@@ -51,9 +64,10 @@ DROP TABLE t1;
# Aggregation of strings with quoted
#
CREATE TABLE t1 (a VARCHAR(80))ENGINE=COLUMNSTORE;
INSERT INTO t1 VALUES
('"double_quoted_value"'), ("'single_quoted_value'"),
('"double_quoted_value"'), ("'single_quoted_value'");
INSERT INTO t1 VALUES ('"double_quoted_value"');
INSERT INTO t1 VALUES ("'single_quoted_value'");
INSERT INTO t1 VALUES ('"double_quoted_value"');
INSERT INTO t1 VALUES ("'single_quoted_value'");
SELECT JSON_VALID(JSON_ARRAYAGG(a)) FROM t1;
JSON_VALID(JSON_ARRAYAGG(a))
1
@@ -65,9 +79,20 @@ DROP TABLE t1;
# Strings and NULLs
#
CREATE TABLE t1 (a INT, b VARCHAR(80))ENGINE=COLUMNSTORE;
INSERT INTO t1 VALUES
(1, "Hello"),(1, "World"), (2, "This"),(2, "Will"), (2, "Work"),(2, "!"), (3, NULL),
(1, "Hello"),(1, "World"), (2, "This"),(2, "Will"), (2, "Work"),(2, "!"), (3, NULL);
INSERT INTO t1 VALUES (1, "Hello");
INSERT INTO t1 VALUES (1, "World");
INSERT INTO t1 VALUES (2, "This");
INSERT INTO t1 VALUES (2, "Will");
INSERT INTO t1 VALUES (2, "Work");
INSERT INTO t1 VALUES (2, "!");
INSERT INTO t1 VALUES (3, NULL);
INSERT INTO t1 VALUES (1, "Hello");
INSERT INTO t1 VALUES (1, "World");
INSERT INTO t1 VALUES (2, "This");
INSERT INTO t1 VALUES (2, "Will");
INSERT INTO t1 VALUES (2, "Work");
INSERT INTO t1 VALUES (2, "!");
INSERT INTO t1 VALUES (3, NULL);
SELECT JSON_VALID(JSON_ARRAYAGG(b)) FROM t1;
JSON_VALID(JSON_ARRAYAGG(b))
1
@@ -102,18 +127,6 @@ JSON_ARRAYAGG(b LIMIT 2)
["Hello","World","Hello","World"]
["This","Will","Work","!","This","Will","Work","!"]
[null,null]
SELECT JSON_ARRAYAGG(DISTINCT a ORDER BY a ASC) FROM t1;
JSON_ARRAYAGG(DISTINCT a ORDER BY a ASC)
[1,2,3]
SELECT JSON_ARRAYAGG(DISTINCT b ORDER BY b ASC) FROM t1;
JSON_ARRAYAGG(DISTINCT b ORDER BY b ASC)
[null,"!","Hello","This","Will","Work","World"]
SELECT JSON_ARRAYAGG(DISTINCT a ORDER BY a ASC LIMIT 2) FROM t1;
JSON_ARRAYAGG(DISTINCT a ORDER BY a ASC LIMIT 2)
[1,2,3]
SELECT JSON_ARRAYAGG(DISTINCT b ORDER BY b ASC LIMIT 2) FROM t1;
JSON_ARRAYAGG(DISTINCT b ORDER BY b ASC LIMIT 2)
[null,"!","Hello","This","Will","Work","World"]
#
# JSON aggregation
#
@@ -184,43 +197,42 @@ json_object('x', json_arrayagg(json_object('a', 1)))
#
#
CREATE TABLE t1(a INT, b INT)ENGINE=COLUMNSTORE;
INSERT INTO t1 VALUES (1,1), (2,2), (3,3);
INSERT INTO t1 VALUES (1,1), (2,2), (3,3);
INSERT INTO t1 VALUES (1,1);
INSERT INTO t1 VALUES (2,2);
INSERT INTO t1 VALUES (3,3);
INSERT INTO t1 VALUES (1,1);
INSERT INTO t1 VALUES (2,2);
INSERT INTO t1 VALUES (3,3);
SELECT JSON_ARRAYAGG(a) FROM t1;
JSON_ARRAYAGG(a)
[1,2,3,1,2,3]
SELECT JSON_ARRAYAGG(DISTINCT a ORDER BY a ASC) FROM t1;
JSON_ARRAYAGG(DISTINCT a ORDER BY a ASC)
[1,2,3]
INSERT INTO t1 VALUES (NULL,NULL), (NULL,NULL);
INSERT INTO t1 VALUES (NULL,NULL);
INSERT INTO t1 VALUES (NULL,NULL);
SELECT JSON_ARRAYAGG(a) FROM t1;
JSON_ARRAYAGG(a)
[1,2,3,1,2,3,null,null]
SELECT JSON_ARRAYAGG(DISTINCT a ORDER BY a ASC) FROM t1;
JSON_ARRAYAGG(DISTINCT a ORDER BY a ASC)
[null,1,2,3]
DROP TABLE t1;
CREATE TABLE t1(a VARCHAR(10), b INT)ENGINE=COLUMNSTORE;
INSERT INTO t1 VALUES (1,1), (2,2), (3,3);
INSERT INTO t1 VALUES (1,1), (2,2), (3,3);
INSERT INTO t1 VALUES (1,1);
INSERT INTO t1 VALUES (2,2);
INSERT INTO t1 VALUES (3,3);
INSERT INTO t1 VALUES (1,1);
INSERT INTO t1 VALUES (2,2);
INSERT INTO t1 VALUES (3,3);
SELECT JSON_ARRAYAGG(a) FROM t1;
JSON_ARRAYAGG(a)
[1,2,3,1,2,3]
SELECT JSON_ARRAYAGG(DISTINCT a ORDER BY a ASC) FROM t1;
JSON_ARRAYAGG(DISTINCT a ORDER BY a ASC)
[1,2,3]
INSERT INTO t1 VALUES (NULL,NULL), (NULL,NULL);
INSERT INTO t1 VALUES (NULL,NULL);
INSERT INTO t1 VALUES (NULL,NULL);
SELECT JSON_ARRAYAGG(a) FROM t1;
JSON_ARRAYAGG(a)
[1,2,3,1,2,3,null,null]
SELECT JSON_ARRAYAGG(DISTINCT a ORDER BY a ASC) FROM t1;
JSON_ARRAYAGG(DISTINCT a ORDER BY a ASC)
[null,1,2,3]
DROP TABLE t1;
#
#
CREATE TABLE t1(a VARCHAR(255))ENGINE=COLUMNSTORE;
INSERT INTO t1 VALUES ('red'),('blue');
INSERT INTO t1 VALUES ('red');
INSERT INTO t1 VALUES ('blue');
SELECT JSON_ARRAYAGG(a) FROM t1;
JSON_ARRAYAGG(a)
["red","blue"]
@@ -253,8 +265,13 @@ drop table t1;
SET group_concat_max_len= default;
CREATE TABLE t1(id int, name varchar(50))ENGINE=COLUMNSTORE;
CREATE TABLE t2(id int, owner_id int)ENGINE=COLUMNSTORE;
INSERT INTO t1 VALUES (1, "name1"), (2, "name2"), (3, "name3");
INSERT INTO t2 VALUES (1, 1), (2, 1), (3, 2), (4, 3);
INSERT INTO t1 VALUES (1, "name1");
INSERT INTO t1 VALUES (2, "name2");
INSERT INTO t1 VALUES (3, "name3");
INSERT INTO t2 VALUES (1, 1);
INSERT INTO t2 VALUES (2, 1);
INSERT INTO t2 VALUES (3, 2);
INSERT INTO t2 VALUES (4, 3);
SELECT t1.id, JSON_ARRAYAGG(JSON_OBJECT('id',t2.id) ORDER BY t2.id) as materials
from t1 LEFT JOIN t2 on t1.id = t2.owner_id
GROUP BY t1.id ORDER BY id;
@@ -276,7 +293,8 @@ json_object('a', coalesce(json_object('b', 'c')))
#
CREATE TABLE t (a VARCHAR(8))ENGINE=COLUMNSTORE;
CREATE VIEW v AS SELECT * FROM t;
INSERT INTO t VALUES ('foo'),('bar');
INSERT INTO t VALUES ('foo');
INSERT INTO t VALUES ('bar');
SELECT JSON_ARRAYAGG(a) AS f FROM v;
f
["foo","bar"]