1
0
mirror of https://github.com/postgres/postgres.git synced 2025-11-24 00:23:06 +03:00

Add HINT listing valid encodings to encode() and decode() errors.

This commit updates encode() and decode() so that when an invalid encoding
is specified, their error message includes a HINT listing all valid encodings.
This helps users quickly see which encodings are supported without needing
to consult the documentation.

Author: Shinya Sugamoto <shinya34892@gmail.com>
Reviewed-by: Chao Li <lic@highgo.com>
Reviewed-by: Daniel Gustafsson <daniel@yesql.se>
Reviewed-by: Masahiko Sawada <sawada.mshk@gmail.com>
Reviewed-by: Peter Eisentraut <peter@eisentraut.org>
Reviewed-by: Nathan Bossart <nathandbossart@gmail.com>
Reviewed-by: Fujii Masao <masao.fujii@gmail.com>
Discussion: https://postgr.es/m/CAAe3y+99sfPv8UDF1VM-rC1i5HBdqxUh=2HrbJJFm2+i=1OwOw@mail.gmail.com
This commit is contained in:
Fujii Masao
2025-11-20 09:14:02 +09:00
parent 6b46669883
commit 99780da720
3 changed files with 17 additions and 2 deletions

View File

@@ -64,7 +64,9 @@ binary_encode(PG_FUNCTION_ARGS)
if (enc == NULL) if (enc == NULL)
ereport(ERROR, ereport(ERROR,
(errcode(ERRCODE_INVALID_PARAMETER_VALUE), (errcode(ERRCODE_INVALID_PARAMETER_VALUE),
errmsg("unrecognized encoding: \"%s\"", namebuf))); errmsg("unrecognized encoding: \"%s\"", namebuf),
errhint("Valid encodings are \"%s\", \"%s\", \"%s\", and \"%s\".",
"base64", "base64url", "escape", "hex")));
dataptr = VARDATA_ANY(data); dataptr = VARDATA_ANY(data);
datalen = VARSIZE_ANY_EXHDR(data); datalen = VARSIZE_ANY_EXHDR(data);
@@ -112,7 +114,9 @@ binary_decode(PG_FUNCTION_ARGS)
if (enc == NULL) if (enc == NULL)
ereport(ERROR, ereport(ERROR,
(errcode(ERRCODE_INVALID_PARAMETER_VALUE), (errcode(ERRCODE_INVALID_PARAMETER_VALUE),
errmsg("unrecognized encoding: \"%s\"", namebuf))); errmsg("unrecognized encoding: \"%s\"", namebuf),
errhint("Valid encodings are \"%s\", \"%s\", \"%s\", and \"%s\".",
"base64", "base64url", "escape", "hex")));
dataptr = VARDATA_ANY(data); dataptr = VARDATA_ANY(data);
datalen = VARSIZE_ANY_EXHDR(data); datalen = VARSIZE_ANY_EXHDR(data);

View File

@@ -2575,6 +2575,13 @@ SELECT decode(encode('\x1234567890abcdef00', 'escape'), 'escape');
\x1234567890abcdef00 \x1234567890abcdef00
(1 row) (1 row)
-- report an error with a hint listing valid encodings when an invalid encoding is specified
SELECT encode('\x01'::bytea, 'invalid'); -- error
ERROR: unrecognized encoding: "invalid"
HINT: Valid encodings are "base64", "base64url", "escape", and "hex".
SELECT decode('00', 'invalid'); -- error
ERROR: unrecognized encoding: "invalid"
HINT: Valid encodings are "base64", "base64url", "escape", and "hex".
-- --
-- base64url encoding/decoding -- base64url encoding/decoding
-- --

View File

@@ -815,6 +815,10 @@ SELECT decode(encode(('\x' || repeat('1234567890abcdef0001', 7))::bytea,
SELECT encode('\x1234567890abcdef00', 'escape'); SELECT encode('\x1234567890abcdef00', 'escape');
SELECT decode(encode('\x1234567890abcdef00', 'escape'), 'escape'); SELECT decode(encode('\x1234567890abcdef00', 'escape'), 'escape');
-- report an error with a hint listing valid encodings when an invalid encoding is specified
SELECT encode('\x01'::bytea, 'invalid'); -- error
SELECT decode('00', 'invalid'); -- error
-- --
-- base64url encoding/decoding -- base64url encoding/decoding
-- --