mariadb/mysql-test/main/json_equals.result
Rucha Deodhar 2a0fcd3757 MDEV-32854: Make JSON_DEPTH_LIMIT unlimited
The initial hard capped limit on the depth was 32. It was implemented using
static arrays of relevant type and size 32.
Hence, to implement unlimited depth, dynamic array on mem_root was
implemented which grows by 3200 as needed. Relevant arrays were replaced
with this dynamic array.
2025-07-22 17:32:21 +05:30

96 lines
3.7 KiB
Text

select json_equals("{}", "{}");
json_equals("{}", "{}")
1
select json_equals("{}", "[]");
json_equals("{}", "[]")
0
select json_equals("{}", NULL);
json_equals("{}", NULL)
NULL
select json_equals("", "");
json_equals("", "")
NULL
select json_equals("", 1);
json_equals("", 1)
NULL
select json_equals(now(), now());
json_equals(now(), now())
NULL
select json_equals('{"a":[1, 2, 3]}', '{"a":[1, 2, 3, 4]}');
json_equals('{"a":[1, 2, 3]}', '{"a":[1, 2, 3, 4]}')
0
select json_equals('{"a":[1, 2, 3]}', '{"a":[1, 2, 3]}');
json_equals('{"a":[1, 2, 3]}', '{"a":[1, 2, 3]}')
1
select json_equals('{"țanțoș":[1, 2, "ț", {"some uâ߀":"uâßr"}]}',
'{"țanțoș":[1, 2, "ț", {"some uâ߀":"uâßr"}]}') as je;
je
1
select json_equals('{"a" : [0.123456789123456789], "b" : [1, 2, 3]}',
'{"b" : [1, 2, 3], "a" : [0.123456789123456789]}') as je;
je
1
#
# Test max json depth for json_equals.
#
with recursive rec_json (step, obj) as (
select 1, cast('{"key":"value"}' as varchar(1000))
union
select r.step + 1, JSON_INSERT('{}', '$.obj', JSON_QUERY(r.obj, '$'))
from rec_json r
where r.step < 10
)
select step, obj, json_equals(obj, obj) from rec_json;
step obj json_equals(obj, obj)
1 {"key":"value"} 1
2 {"obj": {"key": "value"}} 1
3 {"obj": {"obj": {"key": "value"}}} 1
4 {"obj": {"obj": {"obj": {"key": "value"}}}} 1
5 {"obj": {"obj": {"obj": {"obj": {"key": "value"}}}}} 1
6 {"obj": {"obj": {"obj": {"obj": {"obj": {"key": "value"}}}}}} 1
7 {"obj": {"obj": {"obj": {"obj": {"obj": {"obj": {"key": "value"}}}}}}} 1
8 {"obj": {"obj": {"obj": {"obj": {"obj": {"obj": {"obj": {"key": "value"}}}}}}}} 1
9 {"obj": {"obj": {"obj": {"obj": {"obj": {"obj": {"obj": {"obj": {"key": "value"}}}}}}}}} 1
10 {"obj": {"obj": {"obj": {"obj": {"obj": {"obj": {"obj": {"obj": {"obj": {"key": "value"}}}}}}}}}} 1
#
# 31 levels of nesting.
#
select json_equals('{"obj": {"obj": {"obj": {"obj": {"obj": {"obj": {"obj": {"obj": {"obj": {"obj": {"obj": {"obj": {"obj": {"obj": {"obj": {"obj": {"obj": {"obj": {"obj": {"obj": {"obj": {"obj": {"obj": {"obj": {"obj": {"obj": {"obj": {"obj": {"obj": {"obj": {"key": "value"}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}',
'{"obj": {"obj": {"obj": {"obj": {"obj": {"obj": {"obj": {"obj": {"obj": {"obj": {"obj": {"obj": {"obj": {"obj": {"obj": {"obj": {"obj": {"obj": {"obj": {"obj": {"obj": {"obj": {"obj": {"obj": {"obj": {"obj": {"obj": {"obj": {"obj": {"obj": {"key": "value"}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}') as 31_levels;
31_levels
1
#
# 32 Levels of nesting. This should hit max json depth.
#
select json_equals('{"obj":{"obj": {"obj": {"obj": {"obj": {"obj": {"obj": {"obj": {"obj": {"obj": {"obj": {"obj": {"obj": {"obj": {"obj": {"obj": {"obj": {"obj": {"obj": {"obj": {"obj": {"obj": {"obj": {"obj": {"obj": {"obj": {"obj": {"obj": {"obj": {"obj": {"obj": {"key": "value"}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}',
'{"obj":{"obj": {"obj": {"obj": {"obj": {"obj": {"obj": {"obj": {"obj": {"obj": {"obj": {"obj": {"obj": {"obj": {"obj": {"obj": {"obj": {"obj": {"obj": {"obj": {"obj": {"obj": {"obj": {"obj": {"obj": {"obj": {"obj": {"obj": {"obj": {"obj": {"obj": {"key": "value"}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}') as 32_levels;
32_levels
1
#
# test values from different charset
# (UTF-8 two-bytes vs. latin1 single high-byte)
#
create table t1 (a varchar(200) character set latin1);
create table t2 (a varchar(200) character set utf8);
insert into t1 values (UNHEX('22CA22'));
set names utf8;
insert into t2 values (UNHEX('22C38A22'));
select a from t1;
a
"Ê"
select hex(a) from t1;
hex(a)
22CA22
select a from t2;
a
"Ê"
select hex(a) from t2;
hex(a)
22C38A22
select t1.a, t2.a, t1.a = t2.a,
json_valid(t1.a), json_valid(t2.a), json_equals(t1.a, t2.a)
from t1, t2;
a a t1.a = t2.a json_valid(t1.a) json_valid(t2.a) json_equals(t1.a, t2.a)
"Ê" "Ê" 1 1 1 1
drop table t1;
drop table t2;