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
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
|
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"}]}');
json_equals('{"țanțoș":[1, 2, "ț", {"some uâ߀":"uâßr"}]}',
'{"țanțoș":[1, 2, "ț", {"some uâ߀":"uâßr"}]}')
1
select json_equals('{"a" : [0.123456789123456789], "b" : [1, 2, 3]}',
'{"b" : [1, 2, 3], "a" : [0.123456789123456789]}');
json_equals('{"a" : [0.123456789123456789], "b" : [1, 2, 3]}',
'{"b" : [1, 2, 3], "a" : [0.123456789123456789]}')
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
NULL
#
# 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;
|