From d7958daa16351c072af5fbd5d8522f10292e1aa3 Mon Sep 17 00:00:00 2001 From: glyn Date: Wed, 28 Jan 2015 13:37:34 +0000 Subject: [PATCH] Make a couple of minor changes after initial viewing of work at https://github.com/erthalion/jsonbx --- jsonb_opx.c | 26 ++++++++++++++++++++++++++ 1 file changed, 26 insertions(+) diff --git a/jsonb_opx.c b/jsonb_opx.c index d2c498c..a27de35 100755 --- a/jsonb_opx.c +++ b/jsonb_opx.c @@ -87,6 +87,10 @@ jsonb_delete_text(PG_FUNCTION_ARGS) deconstruct_array(input_array, TEXTOID, -1, false, 'i', &datums, &nulls, &count); + /* if the array is empty there's no work to do so return the input value */ + if (count == 0) + PG_RETURN_JSONB(input_jsonb); + /* first check to make sure at least one key exists - this is potentially just extra unwanted work */ for (i=0; iroot); while ((jsonb_iterator_token = JsonbIteratorNext(&jsonb_iterator, &jsonb_iterator_value, skip_nested)) != WJB_DONE) { @@ -362,6 +379,15 @@ jsonb_concat_jsonb(PG_FUNCTION_ARGS) ereport(ERROR, (errcode(ERRCODE_INVALID_PARAMETER_VALUE), errmsg("cannot call on a non-object"))); + + /* + * check if either supplied jsonb is empty and return the other if so + * this idea was copied from https://github.com/erthalion/jsonbx/blob/master/jsonbx.c + */ + if (JB_ROOT_COUNT(input_jsonb_a) == 0) + PG_RETURN_JSONB(input_jsonb_b); + else if (JB_ROOT_COUNT(input_jsonb_b) == 0) + PG_RETURN_JSONB(input_jsonb_a); /* * The following is essentially a cut 'n shut job; discarding the closing root -- 2.39.2