summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTom Lane2011-07-16 17:41:48 +0000
committerTom Lane2011-07-16 18:22:32 +0000
commit657836741410563be35180ba34adcdae6c767ce5 (patch)
tree663a823d2553b78b0084544e5e9205d7ffb57ebd
parent885604d112d5b20d94e2d5d8b352d47a6e585ceb (diff)
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
-rw-r--r--doc/src/sgml/sources.sgml25
-rw-r--r--src/backend/utils/error/elog.c27
-rw-r--r--src/include/utils/elog.h6
3 files changed, 51 insertions, 7 deletions
diff --git a/doc/src/sgml/sources.sgml b/doc/src/sgml/sources.sgml
index ac8f462de0e..4ed83d6189b 100644
--- a/doc/src/sgml/sources.sgml
+++ b/doc/src/sgml/sources.sgml
@@ -214,13 +214,12 @@ ereport(ERROR,
</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</> 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.
+ <function>errdetail_internal(const char *msg, ...)</function> is the same
+ as <function>errdetail</>, except that the message string will not be
+ translated nor included in the internationalization message dictionary.
+ This should be used for detail messages that are not worth expending
+ translation effort on, for instance because they are too technical to be
+ useful to most users.
</para>
</listitem>
<listitem>
@@ -233,6 +232,18 @@ ereport(ERROR,
</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>
+ <para>
<function>errhint(const char *msg, ...)</function> supplies an optional
<quote>hint</> message; this is to be used when offering suggestions
about how to fix the problem, as opposed to factual details about
diff --git a/src/backend/utils/error/elog.c b/src/backend/utils/error/elog.c
index 337b875fe20..7c7927509b5 100644
--- a/src/backend/utils/error/elog.c
+++ b/src/backend/utils/error/elog.c
@@ -843,6 +843,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
*/
int
diff --git a/src/include/utils/elog.h b/src/include/utils/elog.h
index 4a3bd026895..93b141d6839 100644
--- a/src/include/utils/elog.h
+++ b/src/include/utils/elog.h
@@ -147,6 +147,12 @@ errdetail(const char *fmt,...)
__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
errdetail_log(const char *fmt,...)
/* This extension allows gcc to check the format string for consistency with
the supplied arguments. */