From 31f403e95fdf88338d3fc9c6af80fcf6d8241044 Mon Sep 17 00:00:00 2001 From: Tom Lane Date: Mon, 20 Jan 2020 14:26:56 -0500 Subject: [PATCH] Further tweaking of jsonb_set_lax(). Some buildfarm members were still warning about this, because in 9c679a08f I'd missed decorating one of the ereport() code paths with a dummy return. Also, adjust the error messages to be more in line with project style guide. --- src/backend/utils/adt/jsonfuncs.c | 11 ++++++----- src/test/regress/expected/jsonb.out | 10 +++++----- 2 files changed, 11 insertions(+), 10 deletions(-) diff --git a/src/backend/utils/adt/jsonfuncs.c b/src/backend/utils/adt/jsonfuncs.c index 3c1a0319fe..38758a626b 100644 --- a/src/backend/utils/adt/jsonfuncs.c +++ b/src/backend/utils/adt/jsonfuncs.c @@ -4415,7 +4415,7 @@ jsonb_set_lax(PG_FUNCTION_ARGS) if (PG_ARGISNULL(4)) ereport(ERROR, (errcode(ERRCODE_INVALID_PARAMETER_VALUE), - errmsg("need delete_key, return_target, use_json_null, or raise_exception"))); + errmsg("null_value_treatment must be \"delete_key\", \"return_target\", \"use_json_null\", or \"raise_exception\""))); /* if the new value isn't an SQL NULL just call jsonb_set */ if (! PG_ARGISNULL(2)) @@ -4428,9 +4428,10 @@ jsonb_set_lax(PG_FUNCTION_ARGS) { ereport(ERROR, (errcode(ERRCODE_NULL_VALUE_NOT_ALLOWED), - errmsg("NULL is not allowed"), - errdetail("exception raised due to \"null_value_treatment => 'raise_exception'\""), - errhint("to avoid, either change the null_value_treatment argument or ensure that an SQL NULL is not used"))); + errmsg("JSON value must not be null"), + errdetail("Exception was raised because null_value_treatment is \"raise_exception\"."), + errhint("To avoid, either change the null_value_treatment argument or ensure that an SQL NULL is not passed."))); + return (Datum) 0; /* silence stupider compilers */ } else if (strcmp(handle_val, "use_json_null") == 0) { @@ -4455,7 +4456,7 @@ jsonb_set_lax(PG_FUNCTION_ARGS) { ereport(ERROR, (errcode(ERRCODE_INVALID_PARAMETER_VALUE), - errmsg("need delete_key, return_target, use_json_null, or raise_exception"))); + errmsg("null_value_treatment must be \"delete_key\", \"return_target\", \"use_json_null\", or \"raise_exception\""))); return (Datum) 0; /* silence stupider compilers */ } } diff --git a/src/test/regress/expected/jsonb.out b/src/test/regress/expected/jsonb.out index b92f8e8dbc..a70cd0b7c1 100644 --- a/src/test/regress/expected/jsonb.out +++ b/src/test/regress/expected/jsonb.out @@ -4541,14 +4541,14 @@ select jsonb_set_lax('{"a":1,"b":2}','{d}',null,true); -- errors select jsonb_set_lax('{"a":1,"b":2}', '{b}', null, true, null); -ERROR: need delete_key, return_target, use_json_null, or raise_exception +ERROR: null_value_treatment must be "delete_key", "return_target", "use_json_null", or "raise_exception" select jsonb_set_lax('{"a":1,"b":2}', '{b}', null, true, 'no_such_treatment'); -ERROR: need delete_key, return_target, use_json_null, or raise_exception +ERROR: null_value_treatment must be "delete_key", "return_target", "use_json_null", or "raise_exception" -- explicit treatments select jsonb_set_lax('{"a":1,"b":2}', '{b}', null, null_value_treatment => 'raise_exception') as raise_exception; -ERROR: NULL is not allowed -DETAIL: exception raised due to "null_value_treatment => 'raise_exception'" -HINT: to avoid, either change the null_value_treatment argument or ensure that an SQL NULL is not used +ERROR: JSON value must not be null +DETAIL: Exception was raised because null_value_treatment is "raise_exception". +HINT: To avoid, either change the null_value_treatment argument or ensure that an SQL NULL is not passed. select jsonb_set_lax('{"a":1,"b":2}', '{b}', null, null_value_treatment => 'return_target') as return_target; return_target ------------------