mirror of
https://github.com/postgres/postgres.git
synced 2025-07-08 11:42:09 +03:00
Make edge-case behavior of jsonb_populate_record match json_populate_record
json_populate_record throws an error if asked to convert a JSON scalar or array into a composite type. jsonb_populate_record was returning a record full of NULL fields instead. It seems better to make it throw an error for this case as well. Nikita Glukhov Discussion: https://postgr.es/m/fbd1d566-bba0-a3de-d6d0-d3b1d7c24ff2@postgrespro.ru
This commit is contained in:
@ -2682,9 +2682,24 @@ JsValueToJsObject(JsValue *jsv, JsObject *jso)
|
||||
|
||||
if (jbv->type == jbvBinary &&
|
||||
JsonContainerIsObject(jbv->val.binary.data))
|
||||
{
|
||||
jso->val.jsonb_cont = jbv->val.binary.data;
|
||||
}
|
||||
else
|
||||
jso->val.jsonb_cont = NULL;
|
||||
{
|
||||
bool is_scalar;
|
||||
|
||||
is_scalar = IsAJsonbScalar(jbv) ||
|
||||
(jbv->type == jbvBinary &&
|
||||
JsonContainerIsScalar(jbv->val.binary.data));
|
||||
ereport(ERROR,
|
||||
(errcode(ERRCODE_INVALID_PARAMETER_VALUE),
|
||||
is_scalar
|
||||
? errmsg("cannot call %s on a scalar",
|
||||
"populate_composite")
|
||||
: errmsg("cannot call %s on an array",
|
||||
"populate_composite")));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
Reference in New Issue
Block a user