diff options
Diffstat (limited to 'src/backend/utils/adt/jsonfuncs.c')
-rw-r--r-- | src/backend/utils/adt/jsonfuncs.c | 71 |
1 files changed, 3 insertions, 68 deletions
diff --git a/src/backend/utils/adt/jsonfuncs.c b/src/backend/utils/adt/jsonfuncs.c index 9819e1a45ce..82c43617d85 100644 --- a/src/backend/utils/adt/jsonfuncs.c +++ b/src/backend/utils/adt/jsonfuncs.c @@ -2656,11 +2656,11 @@ populate_array_dim_jsonb(PopulateArrayContext *ctx, /* context */ check_stack_depth(); - if (jbv->type != jbvBinary || - !JsonContainerIsArray(jbc) || - JsonContainerIsScalar(jbc)) + if (jbv->type != jbvBinary || !JsonContainerIsArray(jbc)) populate_array_report_expected_array(ctx, ndim - 1); + Assert(!JsonContainerIsScalar(jbc)); + it = JsonbIteratorInit(jbc); tok = JsonbIteratorNext(&it, &val, true); @@ -3132,51 +3132,6 @@ populate_record_field(ColumnIOData *col, } } -/* recursively populate specified type from a json/jsonb value */ -Datum -json_populate_type(Datum json_val, Oid json_type, Oid typid, int32 typmod, - void **cache, MemoryContext mcxt, bool *isnull) -{ - JsValue jsv = {0}; - JsonbValue jbv; - - jsv.is_json = json_type == JSONOID; - - if (*isnull) - { - if (jsv.is_json) - jsv.val.json.str = NULL; - else - jsv.val.jsonb = NULL; - } - else if (jsv.is_json) - { - text *json = DatumGetTextPP(json_val); - - jsv.val.json.str = VARDATA_ANY(json); - jsv.val.json.len = VARSIZE_ANY_EXHDR(json); - jsv.val.json.type = JSON_TOKEN_INVALID; /* not used in - * populate_composite() */ - } - else - { - Jsonb *jsonb = DatumGetJsonbP(json_val); - - jsv.val.jsonb = &jbv; - - /* fill binary jsonb value pointing to jb */ - jbv.type = jbvBinary; - jbv.val.binary.data = &jsonb->root; - jbv.val.binary.len = VARSIZE(jsonb) - VARHDRSZ; - } - - if (!*cache) - *cache = MemoryContextAllocZero(mcxt, sizeof(ColumnIOData)); - - return populate_record_field(*cache, typid, typmod, NULL, mcxt, - PointerGetDatum(NULL), &jsv, isnull); -} - static RecordIOData * allocate_record_info(MemoryContext mcxt, int ncolumns) { @@ -5566,23 +5521,3 @@ transform_string_values_scalar(void *state, char *token, JsonTokenType tokentype else appendStringInfoString(_state->strval, token); } - -JsonTokenType -json_get_first_token(text *json, bool throw_error) -{ - JsonLexContext *lex; - JsonParseErrorType result; - - lex = makeJsonLexContext(json, false); - - /* Lex exactly one token from the input and check its type. */ - result = json_lex(lex); - - if (result == JSON_SUCCESS) - return lex->token_type; - - if (throw_error) - json_ereport_error(result, lex); - - return JSON_TOKEN_INVALID; /* invalid json */ -} |