Commit ed7ed767 authored by Tom Lane's avatar Tom Lane

Add an errdetail_internal() ereport auxiliary routine.

This function supports untranslated detail messages, in the same way that
errmsg_internal supports untranslated primary messages.  We've needed this
for some time IMO, but discussion of some cases in the SSI code provided
the impetus to actually add it.

Kevin Grittner, with minor adjustments by me
parent 0886dde5
...@@ -214,13 +214,12 @@ ereport(ERROR, ...@@ -214,13 +214,12 @@ ereport(ERROR,
</listitem> </listitem>
<listitem> <listitem>
<para> <para>
<function>errdetail_log(const char *msg, ...)</function> is the same as <function>errdetail_internal(const char *msg, ...)</function> is the same
<function>errdetail</> except that this string goes only to the server as <function>errdetail</>, except that the message string will not be
log, never to the client. If both <function>errdetail</> and translated nor included in the internationalization message dictionary.
<function>errdetail_log</> are used then one string goes to the client This should be used for detail messages that are not worth expending
and the other to the log. This is useful for error details that are translation effort on, for instance because they are too technical to be
too security-sensitive or too bulky to include in the report useful to most users.
sent to the client.
</para> </para>
</listitem> </listitem>
<listitem> <listitem>
...@@ -231,6 +230,18 @@ ereport(ERROR, ...@@ -231,6 +230,18 @@ ereport(ERROR,
For more information see <xref linkend="nls-guidelines">. For more information see <xref linkend="nls-guidelines">.
</para> </para>
</listitem> </listitem>
<listitem>
<para>
<function>errdetail_log(const char *msg, ...)</function> is the same as
<function>errdetail</> except that this string goes only to the server
log, never to the client. If both <function>errdetail</> (or one of
its equivalents above) and
<function>errdetail_log</> are used then one string goes to the client
and the other to the log. This is useful for error details that are
too security-sensitive or too bulky to include in the report
sent to the client.
</para>
</listitem>
<listitem> <listitem>
<para> <para>
<function>errhint(const char *msg, ...)</function> supplies an optional <function>errhint(const char *msg, ...)</function> supplies an optional
......
...@@ -842,6 +842,33 @@ errdetail(const char *fmt,...) ...@@ -842,6 +842,33 @@ errdetail(const char *fmt,...)
} }
/*
* errdetail_internal --- add a detail error message text to the current error
*
* This is exactly like errdetail() except that strings passed to
* errdetail_internal are not translated, and are customarily left out of the
* internationalization message dictionary. This should be used for detail
* messages that seem not worth translating for one reason or another
* (typically, that they don't seem to be useful to average users).
*/
int
errdetail_internal(const char *fmt,...)
{
ErrorData *edata = &errordata[errordata_stack_depth];
MemoryContext oldcontext;
recursion_depth++;
CHECK_STACK_DEPTH();
oldcontext = MemoryContextSwitchTo(ErrorContext);
EVALUATE_MESSAGE(detail, false, false);
MemoryContextSwitchTo(oldcontext);
recursion_depth--;
return 0; /* return value does not matter */
}
/* /*
* errdetail_log --- add a detail_log error message text to the current error * errdetail_log --- add a detail_log error message text to the current error
*/ */
......
...@@ -146,6 +146,12 @@ errdetail(const char *fmt,...) ...@@ -146,6 +146,12 @@ errdetail(const char *fmt,...)
the supplied arguments. */ the supplied arguments. */
__attribute__((format(PG_PRINTF_ATTRIBUTE, 1, 2))); __attribute__((format(PG_PRINTF_ATTRIBUTE, 1, 2)));
extern int
errdetail_internal(const char *fmt,...)
/* This extension allows gcc to check the format string for consistency with
the supplied arguments. */
__attribute__((format(PG_PRINTF_ATTRIBUTE, 1, 2)));
extern int extern int
errdetail_log(const char *fmt,...) errdetail_log(const char *fmt,...)
/* This extension allows gcc to check the format string for consistency with /* This extension allows gcc to check the format string for consistency with
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment