Fix error message wording
authorÁlvaro Herrera <alvherre@alvh.no-ip.org>
Tue, 7 Jan 2025 19:07:32 +0000 (20:07 +0100)
committerÁlvaro Herrera <alvherre@alvh.no-ip.org>
Tue, 7 Jan 2025 19:07:32 +0000 (20:07 +0100)
The originals are ambiguous and a bit out of style.

Reviewed-by: Amit Langote <amitlangote09@gmail.com>
Discussion: https://postgr.es/m/202412141243.efesjyyvzxsz@alvherre.pgsql

src/backend/parser/parse_expr.c
src/interfaces/ecpg/test/expected/sql-sqljson.stderr
src/test/regress/expected/sqljson.out

index 84d214f5c74770268469c03bc01940542bd54399..d1f64f8f0a51941fb9180b76456e28ff9aef2526 100644 (file)
@@ -4113,8 +4113,9 @@ transformJsonReturning(ParseState *pstate, JsonOutput *output, const char *fname
        if (returning->typid != JSONOID && returning->typid != JSONBOID)
            ereport(ERROR,
                    (errcode(ERRCODE_DATATYPE_MISMATCH),
-                    errmsg("cannot use RETURNING type %s in %s",
+                    errmsg("cannot use type %s in RETURNING clause of %s",
                            format_type_be(returning->typid), fname),
+                    errhint("Try returning json or jsonb."),
                     parser_errposition(pstate, output->typeName->location)));
    }
    else
@@ -4233,7 +4234,7 @@ transformJsonSerializeExpr(ParseState *pstate, JsonSerializeExpr *expr)
            if (typcategory != TYPCATEGORY_STRING)
                ereport(ERROR,
                        (errcode(ERRCODE_DATATYPE_MISMATCH),
-                        errmsg("cannot use RETURNING type %s in %s",
+                        errmsg("cannot use type %s in RETURNING clause of %s",
                                format_type_be(returning->typid),
                                "JSON_SERIALIZE()"),
                         errhint("Try returning a string type or bytea.")));
index c030fe3a986cc38a7757a70bbf0dc5890cbb094b..e55a95dd711a422bda6820981e15ff67022e0c3b 100644 (file)
@@ -240,12 +240,12 @@ SQL error: null value without indicator on line 84
 [NO_PID]: sqlca: code: 0, state: 00000
 [NO_PID]: ecpg_execute on line 99: using PQexec
 [NO_PID]: sqlca: code: 0, state: 00000
-[NO_PID]: ecpg_check_PQresult on line 99: bad response - ERROR:  cannot use RETURNING type jsonb in JSON_SERIALIZE()
+[NO_PID]: ecpg_check_PQresult on line 99: bad response - ERROR:  cannot use type jsonb in RETURNING clause of JSON_SERIALIZE()
 HINT:  Try returning a string type or bytea.
 [NO_PID]: sqlca: code: 0, state: 00000
-[NO_PID]: raising sqlstate 42804 (sqlcode -400): cannot use RETURNING type jsonb in JSON_SERIALIZE() on line 99
+[NO_PID]: raising sqlstate 42804 (sqlcode -400): cannot use type jsonb in RETURNING clause of JSON_SERIALIZE() on line 99
 [NO_PID]: sqlca: code: -400, state: 42804
-SQL error: cannot use RETURNING type jsonb in JSON_SERIALIZE() on line 99
+SQL error: cannot use type jsonb in RETURNING clause of JSON_SERIALIZE() on line 99
 [NO_PID]: ecpg_execute on line 102: query: with val ( js ) as ( values ( '{ "a": 1, "b": [{ "a": 1, "b": 0, "a": 2 }] }' ) ) select js is json "IS JSON" , js is not json "IS NOT JSON" , js is json value "IS VALUE" , js is json object "IS OBJECT" , js is json array "IS ARRAY" , js is json scalar "IS SCALAR" , js is json without unique keys "WITHOUT UNIQUE" , js is json with unique keys "WITH UNIQUE" from val; with 0 parameter(s) on connection ecpg1_regression
 [NO_PID]: sqlca: code: 0, state: 00000
 [NO_PID]: ecpg_execute on line 102: using PQexec
index 435d61dd4a3e16b6346e1f754b5ff0382f856164..5e664fae084ba72cbb4636c65944012ad82842b9 100644 (file)
@@ -272,7 +272,7 @@ SELECT pg_typeof(JSON_SERIALIZE(NULL));
 
 -- only string types or bytea allowed
 SELECT JSON_SERIALIZE('{ "a" : 1 } ' RETURNING jsonb);
-ERROR:  cannot use RETURNING type jsonb in JSON_SERIALIZE()
+ERROR:  cannot use type jsonb in RETURNING clause of JSON_SERIALIZE()
 HINT:  Try returning a string type or bytea.
 EXPLAIN (VERBOSE, COSTS OFF) SELECT JSON_SERIALIZE('{}');
                      QUERY PLAN