Further tweaking of jsonb_set_lax().
authorTom Lane <tgl@sss.pgh.pa.us>
Mon, 20 Jan 2020 19:26:56 +0000 (14:26 -0500)
committerTom Lane <tgl@sss.pgh.pa.us>
Mon, 20 Jan 2020 19:26:56 +0000 (14:26 -0500)
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
src/test/regress/expected/jsonb.out

index 3c1a0319fe9f2864f65938afbae37ccd6e61db4d..38758a626b2ff6973b8568000fc3c3f984984b76 100644 (file)
@@ -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 */
    }
 }
index b92f8e8dbc5879fbd9cad0d70496498c63a06545..a70cd0b7c13d853dcccf7c257931d2ac1f9f3e12 100644 (file)
@@ -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   
 ------------------