PATCH: recursive json_populate_record()

From: Nikita Glukhov <n(dot)gluhov(at)postgrespro(dot)ru>
To: pgsql-hackers(at)postgresql(dot)org
Subject: PATCH: recursive json_populate_record()
Date: 2016-12-13 00:38:59
Message-ID: 222c7cfb-73c8-a56e-7844-3dc51682760d@postgrespro.ru
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-hackers

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

Attachment Content-Type Size
0001_recursive_json_populate_record_v01.patch text/x-patch 87.3 KB
0002_assign_ndims_to_record_function_result_types_v01.patch text/x-patch 7.7 KB

Responses

Browse pgsql-hackers by date

  From Date Subject
Next Message Tom Lane 2016-12-13 00:40:37 Re: pgsql: Add support for temporary replication slots
Previous Message Andres Freund 2016-12-13 00:33:25 Re: Logical Replication WIP