create schema test_json_valid;
set current_schema to 'test_json_valid';

select json_valid(NULL);

select json_valid('1');

select json_valid('31.35621312');

select json_valid('31.356213.12');

select json_valid('03135621312');

select json_valid('0.3135621312');

select json_valid('true');

select json_valid('truee');

select json_valid('false');

select json_valid('null');

select json_valid('"hello world"');

select json_valid('3a');

select json_valid('"3a"');

select json_valid('{"a":1}');

select json_valid('{"a":1');

select json_valid('"a":1}');

select json_valid('{a":1}');

select json_valid('{"a"1}');

select json_valid('{"a":true}');

select json_valid('{"a":false}');

select json_valid('{"a":null}');

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

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

select json_valid('{"a":{"b":"happy"}}');

select json_valid('{"a":{}}');

select json_valid('{"a":{}');

select json_valid('[1, 2, 3, true, false, "hello", "world"]');

select json_valid('[1, 2, 3');

select json_valid('1, 2, 3]');

select json_valid('[1, , 3]');

select json_valid('[1, 2 3]');

select json_valid('[1, {"hello": "world"}]');

select json_valid('[1, {"hello": world"}]');

select json_valid('[1, [[[[["test"]]]], "huawei"]]');

select json_valid('[1, [[[#["test"]]]], "huawei"]]');

select json_valid('"\uG123"');

select json_valid('"\uA123"');

select json_valid('"\123"');

select json_valid('"\t"');

select json_valid('"\a"');

select json_valid('"\udbff\udfff"');

select json_valid('"\udfff\udfff"');

select json_valid('-1.1');

select json_valid('-1.1.1');

select json_valid('"""');

select json_valid('{"a":""}');

select json_valid('{"a":"""}');

select json_valid('{"a":"\u"}');

select json_valid('{"a":truee}');

select json_valid('{"a":{"b":ffalse}}');

select json_valid('[{"a":[{"b":-2.3.3}]}]');

select json_valid('[{"a":[{"b":"\u"}]}]');

select json_valid('[{"a":[{"b":nul}]}]');


select json_valid('1'::json);

select json_valid('31.35621312'::json);

select json_valid('31.356213.12'::json);

select json_valid('03135621312'::json);

select json_valid('0.3135621312'::json);

select json_valid('true'::json);

select json_valid('truee'::json);

select json_valid('false'::json);

select json_valid('null'::json);

select json_valid('"hello world"'::json);

select json_valid('3a'::json);

select json_valid('"3a"'::json);

select json_valid('{"a":1}'::json);

select json_valid('{"a":1'::json);

select json_valid('"a":1}'::json);

select json_valid('{a":1}'::json);

select json_valid('{"a"1}'::json);

select json_valid('{"a":true}'::json);

select json_valid('{"a":false}'::json);

select json_valid('{"a":null}'::json);

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

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

select json_valid('{"a":{"b":"happy"}}'::json);

select json_valid('{"a":{}}'::json);

select json_valid('{"a":{}'::json);

select json_valid('[1, 2, 3, true, false, "hello", "world"]'::json);

select json_valid('[1, 2, 3'::json);

select json_valid('1, 2, 3]'::json);

select json_valid('[1, , 3]'::json);

select json_valid('[1, 2 3]'::json);

select json_valid('[1, {"hello": "world"}]'::json);

select json_valid('[1, {"hello": world"}]'::json);

select json_valid('[1, [[[[["test"]]]], "huawei"]]'::json);

select json_valid('[1, [[[#["test"]]]], "huawei"]]'::json);

select json_valid('"\uG123"'::json);

select json_valid('"\uA123"'::json);

select json_valid('"\123"'::json);

select json_valid('"\t"'::json);

select json_valid('"\a"'::json);

select json_valid('-1.1'::json);

select json_valid('-1.1.1'::json);

select json_valid('"""'::json);

select json_valid('{"a":""}'::json);

select json_valid('{"a":"""}'::json);

select json_valid('{"a":"\u"}'::json);

select json_valid('{"a":truee}'::json);

select json_valid('{"a":{"b":ffalse}}'::json);

select json_valid('[{"a":[{"b":-2.3.3}]}]'::json);

select json_valid('[{"a":[{"b":"\u"}]}]'::json);

select json_valid('[{"a":[{"b":nul}]}]'::json);

create table json_valid_test (
    target text
);

insert into json_valid_test values('[1, [[[[["test"]]]], "huawei"]]');
insert into json_valid_test values('{"a":{"b":"happy"}}');
insert into json_valid_test values('[1, , 3]');

select target, json_valid(target) from json_valid_test;

drop table json_valid_test;


set dolphin.b_compatibility_mode = on;

create table test_type_table
(
   `int1` tinyint,
   `uint1` tinyint unsigned,
   `int2` smallint,
   `uint2` smallint unsigned,
   `int4` integer,
   `uint4` integer unsigned,
   `int8` bigint,
   `uint8` bigint unsigned,
   `float4` float4,
   `float8` float8,
   `numeric` decimal(20, 6),
   `bit1` bit(1),
   `bit64` bit(64),
   `boolean` boolean,
   `date` date,
   `time` time,
   `time(4)` time(4),
   `datetime` datetime,
   `datetime(4)` datetime(4) default '2022-11-11 11:11:11',
   `timestamp` timestamp,
   `timestamp(4)` timestamp(4) default '2022-11-11 11:11:11',
   `year` year,
   `char` char(100),
   `varchar` varchar(100),
   `binary` binary(100),
   `varbinary` varbinary(100),
   `tinyblob` tinyblob,
   `blob` blob,
   `mediumblob` mediumblob,
   `longblob` longblob,
   `text` text,
   `enum_t` enum('a', 'b', 'c'),
   `set_t` set('a', 'b', 'c'),
   `json` json
);

insert into test_type_table values (1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, b'1', b'111', true, '2023-02-05', '19:10:50', '19:10:50.3456', '2023-02-05 19:10:50', '2023-02-05 19:10:50.456', '2023-02-05 19:10:50', '2023-02-05 19:10:50.456',
'2023', '1.23a', '1.23a', '1.23a', '1.23a', '1.23a', '1.23a', '1.23a', '1.23a', '1.23a', 'a', 'a,c', json_object('a', 1, 'b', 2));


select json_valid(`int1`), json_valid(`uint1`), json_valid(`int2`), json_valid(`uint2`), json_valid(`int4`), json_valid(`uint4`), json_valid(`int8`), json_valid(`uint8`), json_valid(`float4`), json_valid(`float8`), json_valid(`numeric`), json_valid(`bit1`), json_valid(`bit64`), json_valid(`boolean`), json_valid(`date`), json_valid(`time`), json_valid(`time(4)`), json_valid(`datetime`), json_valid(`datetime(4)`), json_valid(`timestamp`), json_valid(`timestamp(4)`), json_valid(`year`), json_valid(`char`), json_valid(`varchar`), json_valid(`binary`), json_valid(`varbinary`), json_valid(`tinyblob`), json_valid(`blob`), json_valid(`mediumblob`), json_valid(`longblob`), json_valid(`text`), json_valid(`enum_t`), json_valid(`set_t`), json_valid(`json`),
pg_typeof(json_valid(`int1`)), pg_typeof(json_valid(`uint1`)), pg_typeof(json_valid(`int2`)), pg_typeof(json_valid(`uint2`)), pg_typeof(json_valid(`int4`)), pg_typeof(json_valid(`uint4`)), pg_typeof(json_valid(`int8`)), pg_typeof(json_valid(`uint8`)), pg_typeof(json_valid(`float4`)), pg_typeof(json_valid(`float8`)), pg_typeof(json_valid(`numeric`)), pg_typeof(json_valid(`bit1`)), pg_typeof(json_valid(`bit64`)), pg_typeof(json_valid(`boolean`)), pg_typeof(json_valid(`date`)), pg_typeof(json_valid(`time`)), pg_typeof(json_valid(`time(4)`)), pg_typeof(json_valid(`datetime`)), pg_typeof(json_valid(`datetime(4)`)), pg_typeof(json_valid(`timestamp`)), pg_typeof(json_valid(`timestamp(4)`)), pg_typeof(json_valid(`year`)), pg_typeof(json_valid(`char`)), pg_typeof(json_valid(`varchar`)), pg_typeof(json_valid(`binary`)), pg_typeof(json_valid(`varbinary`)), pg_typeof(json_valid(`tinyblob`)), pg_typeof(json_valid(`blob`)), pg_typeof(json_valid(`mediumblob`)), pg_typeof(json_valid(`longblob`)), pg_typeof(json_valid(`text`)), pg_typeof(json_valid(`enum_t`)), pg_typeof(json_valid(`set_t`)), pg_typeof(json_valid(`json`)) from test_type_table;

create table test_json_valid_cts as select json_valid(`int1`) as json_valid_1, json_valid(`uint1`) as json_valid_2, json_valid(`int2`) as json_valid_3, json_valid(`uint2`) as json_valid_4, json_valid(`int4`) as json_valid_5, json_valid(`uint4`) as json_valid_6, json_valid(`int8`) as json_valid_7, json_valid(`uint8`) as json_valid_8, json_valid(`float4`) as json_valid_9, json_valid(`float8`) as json_valid_10, json_valid(`numeric`) as json_valid_11, json_valid(`bit1`) as json_valid_12, json_valid(`bit64`) as json_valid_13, json_valid(`boolean`) as json_valid_14, json_valid(`date`) as json_valid_15, json_valid(`time`) as json_valid_16, json_valid(`time(4)`) as json_valid_17, json_valid(`datetime`) as json_valid_18, json_valid(`datetime(4)`) as json_valid_19, json_valid(`timestamp`) as json_valid_20, json_valid(`timestamp(4)`) as json_valid_21, json_valid(`char`) as json_valid_23, json_valid(`varchar`) as json_valid_24,  json_valid(`binary`) as json_valid_25, json_valid(`varbinary`) as json_valid_26, json_valid(`tinyblob`) as json_valid_27, json_valid(`blob`) as json_valid_28, json_valid(`mediumblob`) as json_valid_29, json_valid(`longblob`) as json_valid_30, json_valid(`text`) as json_valid_31, json_valid(`enum_t`) as json_valid_32, json_valid(`set_t`) as json_valid_33 from test_type_table;


select * from test_json_valid_cts;
drop table test_json_valid_cts;
drop table test_type_table;
drop schema test_json_valid cascade;
reset current_schema;