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;
|