File: json_equals.test

package info (click to toggle)
mariadb 1%3A11.8.3-1
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid
  • size: 772,520 kB
  • sloc: ansic: 2,414,714; cpp: 1,791,394; asm: 381,336; perl: 62,905; sh: 49,647; pascal: 40,897; java: 39,363; python: 20,791; yacc: 20,432; sql: 17,907; xml: 12,344; ruby: 8,544; cs: 6,542; makefile: 6,145; ada: 1,879; lex: 1,193; javascript: 996; objc: 80; tcl: 73; awk: 46; php: 22
file content (69 lines) | stat: -rw-r--r-- 2,884 bytes parent folder | download | duplicates (4)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69

select json_equals("{}", "{}");

select json_equals("{}", "[]");

select json_equals("{}", NULL);

select json_equals("", "");

select json_equals("", 1);

select json_equals(now(), now());

select json_equals('{"a":[1, 2, 3]}', '{"a":[1, 2, 3, 4]}');

select json_equals('{"a":[1, 2, 3]}', '{"a":[1, 2, 3]}');

select json_equals('{"țanțoș":[1, 2, "ț", {"some uâ߀":"uâßr"}]}',
                   '{"țanțoș":[1, 2, "ț", {"some uâ߀":"uâßr"}]}') as je;

select json_equals('{"a" : [0.123456789123456789], "b" : [1, 2, 3]}',
                   '{"b" : [1, 2, 3], "a" : [0.123456789123456789]}') as je;

--echo #
--echo # Test max json depth for json_equals.
--echo #
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;

--echo #
--echo # 31 levels of nesting.
--echo #
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;

--echo #
--echo # 32 Levels of nesting. This should hit max json depth.
--echo #
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;


--echo #
--echo # test values from different charset
--echo # (UTF-8 two-bytes vs. latin1 single high-byte)
--echo #
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;
select hex(a) from t1;
select a from t2;
select hex(a) from t2;

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;

drop table t1;
drop table t2;