diff options
author | Andrew Dunstan <andrew@dunslane.net> | 2014-03-26 10:18:24 -0400 |
---|---|---|
committer | Andrew Dunstan <andrew@dunslane.net> | 2014-03-26 10:18:24 -0400 |
commit | f9c6d72cbf49257fea4265d994b96e66f25b2474 (patch) | |
tree | cb6117cc88855a54d382bbeae26303ee9a24af0b /src/backend | |
parent | 28475f8e58bd5da2b44a42203665a543f335c6a3 (diff) | |
download | postgresql-f9c6d72cbf49257fea4265d994b96e66f25b2474.tar.gz postgresql-f9c6d72cbf49257fea4265d994b96e66f25b2474.zip |
Cleanup around json_to_record/json_to_recordset
Set function parameter names and defaults. Add jsonb versions (which the
code already provided for so the actual new code is trivial). Add jsonb
regression tests and docs.
Bump catalog version (which I apparently forgot to do when jsonb was
committed).
Diffstat (limited to 'src/backend')
-rw-r--r-- | src/backend/catalog/system_views.sql | 16 | ||||
-rw-r--r-- | src/backend/utils/adt/jsonfuncs.c | 36 |
2 files changed, 40 insertions, 12 deletions
diff --git a/src/backend/catalog/system_views.sql b/src/backend/catalog/system_views.sql index 662040261e9..42a4c00a1ed 100644 --- a/src/backend/catalog/system_views.sql +++ b/src/backend/catalog/system_views.sql @@ -833,6 +833,22 @@ CREATE OR REPLACE FUNCTION jsonb_populate_recordset(base anyelement, from_json jsonb, use_json_as_text boolean DEFAULT false) RETURNS SETOF anyelement LANGUAGE internal STABLE ROWS 100 AS 'jsonb_populate_recordset'; +CREATE OR REPLACE FUNCTION + json_to_record(from_json json, nested_as_text boolean DEFAULT false) + RETURNS record LANGUAGE internal STABLE AS 'json_to_record'; + +CREATE OR REPLACE FUNCTION + json_to_recordset(from_json json, nested_as_text boolean DEFAULT false) + RETURNS SETOF record LANGUAGE internal STABLE ROWS 100 AS 'json_to_recordset'; + +CREATE OR REPLACE FUNCTION + jsonb_to_record(from_json jsonb, nested_as_text boolean DEFAULT false) + RETURNS record LANGUAGE internal STABLE AS 'jsonb_to_record'; + +CREATE OR REPLACE FUNCTION + jsonb_to_recordset(from_json jsonb, nested_as_text boolean DEFAULT false) + RETURNS SETOF record LANGUAGE internal STABLE ROWS 100 AS 'jsonb_to_recordset'; + CREATE OR REPLACE FUNCTION pg_logical_slot_get_changes( IN slotname name, IN upto_lsn pg_lsn, IN upto_nchanges int, VARIADIC options text[] DEFAULT '{}', OUT location pg_lsn, OUT xid xid, OUT data text) diff --git a/src/backend/utils/adt/jsonfuncs.c b/src/backend/utils/adt/jsonfuncs.c index 94595998029..bf164677142 100644 --- a/src/backend/utils/adt/jsonfuncs.c +++ b/src/backend/utils/adt/jsonfuncs.c @@ -2015,6 +2015,12 @@ jsonb_populate_record(PG_FUNCTION_ARGS) } Datum +jsonb_to_record(PG_FUNCTION_ARGS) +{ + return populate_record_worker(fcinfo, false); +} + +Datum json_populate_record(PG_FUNCTION_ARGS) { return populate_record_worker(fcinfo, true); @@ -2449,6 +2455,24 @@ jsonb_populate_recordset(PG_FUNCTION_ARGS) return populate_recordset_worker(fcinfo, true); } +Datum +jsonb_to_recordset(PG_FUNCTION_ARGS) +{ + return populate_recordset_worker(fcinfo, false); +} + +Datum +json_populate_recordset(PG_FUNCTION_ARGS) +{ + return populate_recordset_worker(fcinfo, true); +} + +Datum +json_to_recordset(PG_FUNCTION_ARGS) +{ + return populate_recordset_worker(fcinfo, false); +} + static void make_row_from_rec_and_jsonb(Jsonb * element, PopulateRecordsetState *state) { @@ -2571,18 +2595,6 @@ make_row_from_rec_and_jsonb(Jsonb * element, PopulateRecordsetState *state) tuplestore_puttuple(state->tuple_store, rettuple); } -Datum -json_populate_recordset(PG_FUNCTION_ARGS) -{ - return populate_recordset_worker(fcinfo, true); -} - -Datum -json_to_recordset(PG_FUNCTION_ARGS) -{ - return populate_recordset_worker(fcinfo, false); -} - /* * common worker for json_populate_recordset() and json_to_recordset() */ |