diff options
author | Andres Freund <andres@anarazel.de> | 2025-03-30 16:10:51 -0400 |
---|---|---|
committer | Andres Freund <andres@anarazel.de> | 2025-03-30 16:10:51 -0400 |
commit | 4244cf68769773ba30b868354f1f2fe93238e98b (patch) | |
tree | 55f286503652fe88b1f219697746c24b8766b341 /src/backend/utils/error/elog.c | |
parent | 49b82522f13fa5f756687f5609f687877fc970ff (diff) |
Add errhint_internal()
We have errmsg_internal(), errdetail_internal(), but not errhint_internal().
Sometimes it is useful to output a hint with already translated format
string (e.g. because there different messages depending on the condition). For
message/detail we do that with the _internal() variants, but we can't do that
with hint today. It's possible to work around that that by using something
like
str = psprintf(translated_format, args);
ereport(...
errhint("%s", str);
but that's not exactly pretty and makes it harder to avoid memory leaks.
Reviewed-by: Noah Misch <noah@leadboat.com>
Discussion: https://postgr.es/m/ym3dqpa4xcvoeknewcw63x77vnqdosbqcetjinb2zfoh65k55m@m4ozmwhr6lk6
Diffstat (limited to 'src/backend/utils/error/elog.c')
-rw-r--r-- | src/backend/utils/error/elog.c | 21 |
1 files changed, 21 insertions, 0 deletions
diff --git a/src/backend/utils/error/elog.c b/src/backend/utils/error/elog.c index 97014c1a5a5..8a6b6905079 100644 --- a/src/backend/utils/error/elog.c +++ b/src/backend/utils/error/elog.c @@ -1330,6 +1330,27 @@ errhint(const char *fmt,...) return 0; /* return value does not matter */ } +/* + * errhint_internal --- add a hint error message text to the current error + * + * Non-translated version of errhint(), see also errmsg_internal(). + */ +int +errhint_internal(const char *fmt,...) +{ + ErrorData *edata = &errordata[errordata_stack_depth]; + MemoryContext oldcontext; + + recursion_depth++; + CHECK_STACK_DEPTH(); + oldcontext = MemoryContextSwitchTo(edata->assoc_context); + + EVALUATE_MESSAGE(edata->domain, hint, false, false); + + MemoryContextSwitchTo(oldcontext); + recursion_depth--; + return 0; /* return value does not matter */ +} /* * errhint_plural --- add a hint error message text to the current error, |