PATCH: recursive json_populate_record()
Nikita Glukhov <n.gluhov@postgrespro.ru>
From: Nikita Glukhov <n.gluhov@postgrespro.ru>
To: pgsql-hackers@postgresql.org
Date: 2016-12-13T00:38:59Z
Lists: pgsql-hackers
Attachments
- 0001_recursive_json_populate_record_v01.patch (text/x-patch) patch v1
- 0002_assign_ndims_to_record_function_result_types_v01.patch (text/x-patch) patch v1
Hi.
The first attached patch implements recursive processing of nested
objects and arrays in json[b]_populate_record[set](),
json[b]_to_record[set](). See regression tests for examples.
It also fixes the following errors/inconsistencies caused by lost
quoting of string json values:
[master]=# select * from json_to_record('{"js": "a"}') as rec(js json);
ERROR: invalid input syntax for type json
DETAIL: Token "a" is invalid.
CONTEXT: JSON data, line 1: a
[master]=# select * from json_to_record('{"js": "true"}') as rec(js json);
js
------
true
[patched]=# select * from json_to_record('{"js": "a"}') as rec(js json);
js
-----
"a"
[patched]=# select * from json_to_record('{"js": "true"}') as rec(js json);
js
--------
"true"
The second patch adds assignment of correct ndims to array fields of
RECORD function result types.
Without this patch, attndims in tuple descriptors of RECORD types is
always 0 and the corresponding assertion fails in the next test:
[patched]=# select json_to_record('{"a": [1, 2, 3]}') as rec(a int[]);
Should I submit these patches to commitfest?
--
Nikita Glukhov
Postgres Professional: http://www.postgrespro.com
The Russian Postgres Company
Commits
-
Make edge-case behavior of jsonb_populate_record match json_populate_record
- 68cff231e3a3 10.0 landed
-
Fix thinko in JsObjectSize() macro.
- e45c5be99d08 10.0 landed
-
Introduce convenience macros to hide JsonbContainer header accesses better.
- f7c624624029 10.0 landed