diff options
Diffstat (limited to 'src/test/regress')
-rw-r--r-- | src/test/regress/expected/jsonb.out | 115 | ||||
-rw-r--r-- | src/test/regress/sql/jsonb.sql | 37 |
2 files changed, 152 insertions, 0 deletions
diff --git a/src/test/regress/expected/jsonb.out b/src/test/regress/expected/jsonb.out index b597d01a55e..66bee5162b4 100644 --- a/src/test/regress/expected/jsonb.out +++ b/src/test/regress/expected/jsonb.out @@ -2505,6 +2505,121 @@ SELECT rec FROM jsonb_populate_record( (abc,3,"Thu Jan 02 00:00:00 2003") (1 row) +-- Tests to check soft-error support for populate_record_field() +-- populate_scalar() +create type jsb_char2 as (a char(2)); +select jsonb_populate_record_valid(NULL::jsb_char2, '{"a": "aaa"}'); + jsonb_populate_record_valid +----------------------------- + f +(1 row) + +select * from jsonb_populate_record(NULL::jsb_char2, '{"a": "aaa"}') q; +ERROR: value too long for type character(2) +select jsonb_populate_record_valid(NULL::jsb_char2, '{"a": "aa"}'); + jsonb_populate_record_valid +----------------------------- + t +(1 row) + +select * from jsonb_populate_record(NULL::jsb_char2, '{"a": "aa"}') q; + a +---- + aa +(1 row) + +-- populate_array() +create type jsb_ia as (a int[]); +create type jsb_ia2 as (a int[][]); +select jsonb_populate_record_valid(NULL::jsb_ia, '{"a": 43.2}'); + jsonb_populate_record_valid +----------------------------- + f +(1 row) + +select * from jsonb_populate_record(NULL::jsb_ia, '{"a": 43.2}') q; +ERROR: expected JSON array +HINT: See the value of key "a". +select jsonb_populate_record_valid(NULL::jsb_ia, '{"a": [1, 2]}'); + jsonb_populate_record_valid +----------------------------- + t +(1 row) + +select * from jsonb_populate_record(NULL::jsb_ia, '{"a": [1, 2]}') q; + a +------- + {1,2} +(1 row) + +select jsonb_populate_record_valid(NULL::jsb_ia2, '{"a": [[1], [2, 3]]}'); + jsonb_populate_record_valid +----------------------------- + f +(1 row) + +select * from jsonb_populate_record(NULL::jsb_ia2, '{"a": [[1], [2, 3]]}') q; +ERROR: malformed JSON array +DETAIL: Multidimensional arrays must have sub-arrays with matching dimensions. +select jsonb_populate_record_valid(NULL::jsb_ia2, '{"a": [[1, 0], [2, 3]]}'); + jsonb_populate_record_valid +----------------------------- + t +(1 row) + +select * from jsonb_populate_record(NULL::jsb_ia2, '{"a": [[1, 0], [2, 3]]}') q; + a +--------------- + {{1,0},{2,3}} +(1 row) + +-- populate_domain() +create domain jsb_i_not_null as int not null; +create domain jsb_i_gt_1 as int check (value > 1); +create type jsb_i_not_null_rec as (a jsb_i_not_null); +create type jsb_i_gt_1_rec as (a jsb_i_gt_1); +select jsonb_populate_record_valid(NULL::jsb_i_not_null_rec, '{"a": null}'); + jsonb_populate_record_valid +----------------------------- + f +(1 row) + +select * from jsonb_populate_record(NULL::jsb_i_not_null_rec, '{"a": null}') q; +ERROR: domain jsb_i_not_null does not allow null values +select jsonb_populate_record_valid(NULL::jsb_i_not_null_rec, '{"a": 1}'); + jsonb_populate_record_valid +----------------------------- + t +(1 row) + +select * from jsonb_populate_record(NULL::jsb_i_not_null_rec, '{"a": 1}') q; + a +--- + 1 +(1 row) + +select jsonb_populate_record_valid(NULL::jsb_i_gt_1_rec, '{"a": 1}'); + jsonb_populate_record_valid +----------------------------- + f +(1 row) + +select * from jsonb_populate_record(NULL::jsb_i_gt_1_rec, '{"a": 1}') q; +ERROR: value for domain jsb_i_gt_1 violates check constraint "jsb_i_gt_1_check" +select jsonb_populate_record_valid(NULL::jsb_i_gt_1_rec, '{"a": 2}'); + jsonb_populate_record_valid +----------------------------- + t +(1 row) + +select * from jsonb_populate_record(NULL::jsb_i_gt_1_rec, '{"a": 2}') q; + a +--- + 2 +(1 row) + +drop type jsb_ia, jsb_ia2, jsb_char2, jsb_i_not_null_rec, jsb_i_gt_1_rec; +drop domain jsb_i_not_null, jsb_i_gt_1; -- anonymous record type SELECT jsonb_populate_record(null::record, '{"x": 0, "y": 1}'); ERROR: could not determine row type for result of jsonb_populate_record diff --git a/src/test/regress/sql/jsonb.sql b/src/test/regress/sql/jsonb.sql index 6dae715afd8..97bc2242a13 100644 --- a/src/test/regress/sql/jsonb.sql +++ b/src/test/regress/sql/jsonb.sql @@ -679,6 +679,43 @@ SELECT rec FROM jsonb_populate_record( '{"rec": {"a": "abc", "c": "01.02.2003", "x": 43.2}}' ) q; +-- Tests to check soft-error support for populate_record_field() + +-- populate_scalar() +create type jsb_char2 as (a char(2)); +select jsonb_populate_record_valid(NULL::jsb_char2, '{"a": "aaa"}'); +select * from jsonb_populate_record(NULL::jsb_char2, '{"a": "aaa"}') q; +select jsonb_populate_record_valid(NULL::jsb_char2, '{"a": "aa"}'); +select * from jsonb_populate_record(NULL::jsb_char2, '{"a": "aa"}') q; + +-- populate_array() +create type jsb_ia as (a int[]); +create type jsb_ia2 as (a int[][]); +select jsonb_populate_record_valid(NULL::jsb_ia, '{"a": 43.2}'); +select * from jsonb_populate_record(NULL::jsb_ia, '{"a": 43.2}') q; +select jsonb_populate_record_valid(NULL::jsb_ia, '{"a": [1, 2]}'); +select * from jsonb_populate_record(NULL::jsb_ia, '{"a": [1, 2]}') q; +select jsonb_populate_record_valid(NULL::jsb_ia2, '{"a": [[1], [2, 3]]}'); +select * from jsonb_populate_record(NULL::jsb_ia2, '{"a": [[1], [2, 3]]}') q; +select jsonb_populate_record_valid(NULL::jsb_ia2, '{"a": [[1, 0], [2, 3]]}'); +select * from jsonb_populate_record(NULL::jsb_ia2, '{"a": [[1, 0], [2, 3]]}') q; + +-- populate_domain() +create domain jsb_i_not_null as int not null; +create domain jsb_i_gt_1 as int check (value > 1); +create type jsb_i_not_null_rec as (a jsb_i_not_null); +create type jsb_i_gt_1_rec as (a jsb_i_gt_1); +select jsonb_populate_record_valid(NULL::jsb_i_not_null_rec, '{"a": null}'); +select * from jsonb_populate_record(NULL::jsb_i_not_null_rec, '{"a": null}') q; +select jsonb_populate_record_valid(NULL::jsb_i_not_null_rec, '{"a": 1}'); +select * from jsonb_populate_record(NULL::jsb_i_not_null_rec, '{"a": 1}') q; +select jsonb_populate_record_valid(NULL::jsb_i_gt_1_rec, '{"a": 1}'); +select * from jsonb_populate_record(NULL::jsb_i_gt_1_rec, '{"a": 1}') q; +select jsonb_populate_record_valid(NULL::jsb_i_gt_1_rec, '{"a": 2}'); +select * from jsonb_populate_record(NULL::jsb_i_gt_1_rec, '{"a": 2}') q; +drop type jsb_ia, jsb_ia2, jsb_char2, jsb_i_not_null_rec, jsb_i_gt_1_rec; +drop domain jsb_i_not_null, jsb_i_gt_1; + -- anonymous record type SELECT jsonb_populate_record(null::record, '{"x": 0, "y": 1}'); SELECT jsonb_populate_record(row(1,2), '{"f1": 0, "f2": 1}'); |