From 18963479937bee58570a3a20329e5f7f573ffd84 Mon Sep 17 00:00:00 2001 From: Shinya Sugamoto Date: Fri, 7 Nov 2025 23:04:03 +0900 Subject: [PATCH] Added error hints for invalid binary encoding names so users immediately see the supported options --- src/backend/utils/adt/encode.c | 8 ++++++-- src/test/regress/expected/strings.out | 7 +++++++ src/test/regress/sql/strings.sql | 4 ++++ 3 files changed, 17 insertions(+), 2 deletions(-) diff --git a/src/backend/utils/adt/encode.c b/src/backend/utils/adt/encode.c index aabe9913eee..7f15705e69e 100644 --- a/src/backend/utils/adt/encode.c +++ b/src/backend/utils/adt/encode.c @@ -64,7 +64,9 @@ binary_encode(PG_FUNCTION_ARGS) if (enc == NULL) ereport(ERROR, (errcode(ERRCODE_INVALID_PARAMETER_VALUE), - errmsg("unrecognized encoding: \"%s\"", namebuf))); + errmsg("unrecognized encoding: \"%s\"", namebuf), + errhint("Valid binary encodings are: %s", + "\"hex\", \"base64\", \"base64url\", \"escape\"."))); dataptr = VARDATA_ANY(data); datalen = VARSIZE_ANY_EXHDR(data); @@ -112,7 +114,9 @@ binary_decode(PG_FUNCTION_ARGS) if (enc == NULL) ereport(ERROR, (errcode(ERRCODE_INVALID_PARAMETER_VALUE), - errmsg("unrecognized encoding: \"%s\"", namebuf))); + errmsg("unrecognized encoding: \"%s\"", namebuf), + errhint("Valid binary encodings are: %s", + "\"hex\", \"base64\", \"base64url\", \"escape\"."))); dataptr = VARDATA_ANY(data); datalen = VARSIZE_ANY_EXHDR(data); diff --git a/src/test/regress/expected/strings.out b/src/test/regress/expected/strings.out index b9dc08d5f61..c5f04aa0440 100644 --- a/src/test/regress/expected/strings.out +++ b/src/test/regress/expected/strings.out @@ -2575,6 +2575,13 @@ SELECT decode(encode('\x1234567890abcdef00', 'escape'), 'escape'); \x1234567890abcdef00 (1 row) +-- invalid encoding names should report the valid options +SELECT encode('\x01'::bytea, 'invalid'); -- error +ERROR: unrecognized encoding: "invalid" +HINT: Valid binary encodings are: "hex", "base64", "base64url", "escape". +SELECT decode('00', 'invalid'); -- error +ERROR: unrecognized encoding: "invalid" +HINT: Valid binary encodings are: "hex", "base64", "base64url", "escape". -- -- base64url encoding/decoding -- diff --git a/src/test/regress/sql/strings.sql b/src/test/regress/sql/strings.sql index a2a91523404..e70bc37f00e 100644 --- a/src/test/regress/sql/strings.sql +++ b/src/test/regress/sql/strings.sql @@ -815,6 +815,10 @@ SELECT decode(encode(('\x' || repeat('1234567890abcdef0001', 7))::bytea, SELECT encode('\x1234567890abcdef00', 'escape'); SELECT decode(encode('\x1234567890abcdef00', 'escape'), 'escape'); +-- invalid encoding names should report the valid options +SELECT encode('\x01'::bytea, 'invalid'); -- error +SELECT decode('00', 'invalid'); -- error + -- -- base64url encoding/decoding -- -- 2.50.1 (Apple Git-155)