aboutsummaryrefslogtreecommitdiff
path: root/src/backend/utils/misc/guc.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/backend/utils/misc/guc.c')
-rw-r--r--src/backend/utils/misc/guc.c161
1 files changed, 89 insertions, 72 deletions
diff --git a/src/backend/utils/misc/guc.c b/src/backend/utils/misc/guc.c
index bc38810a810..b3409111b11 100644
--- a/src/backend/utils/misc/guc.c
+++ b/src/backend/utils/misc/guc.c
@@ -10,7 +10,7 @@
* Written by Peter Eisentraut <peter_e@gmx.net>.
*
* IDENTIFICATION
- * $PostgreSQL: pgsql/src/backend/utils/misc/guc.c,v 1.455 2008/05/26 18:54:29 tgl Exp $
+ * $PostgreSQL: pgsql/src/backend/utils/misc/guc.c,v 1.456 2008/05/28 09:04:06 mha Exp $
*
*--------------------------------------------------------------------
*/
@@ -173,90 +173,90 @@ static char *config_enum_get_options(struct config_enum *record,
* Options for enum values defined in this module.
*/
static const struct config_enum_entry message_level_options[] = {
- {"debug", DEBUG2},
- {"debug5", DEBUG5},
- {"debug4", DEBUG4},
- {"debug3", DEBUG3},
- {"debug2", DEBUG2},
- {"debug1", DEBUG1},
- {"log", LOG},
- {"info", INFO},
- {"notice", NOTICE},
- {"warning", WARNING},
- {"error", ERROR},
- {"fatal", FATAL},
- {"panic", PANIC},
- {NULL, 0}
+ {"debug", DEBUG2, false},
+ {"debug5", DEBUG5, false},
+ {"debug4", DEBUG4, false},
+ {"debug3", DEBUG3, false},
+ {"debug2", DEBUG2, false},
+ {"debug1", DEBUG1, false},
+ {"log", LOG, false},
+ {"info", INFO, false},
+ {"notice", NOTICE, false},
+ {"warning", WARNING, false},
+ {"error", ERROR, false},
+ {"fatal", FATAL, false},
+ {"panic", PANIC, false},
+ {NULL, 0, false}
};
static const struct config_enum_entry log_error_verbosity_options[] = {
- {"default", PGERROR_DEFAULT},
- {"terse", PGERROR_TERSE},
- {"verbose", PGERROR_VERBOSE},
- {NULL, 0}
+ {"default", PGERROR_DEFAULT, false},
+ {"terse", PGERROR_TERSE, false},
+ {"verbose", PGERROR_VERBOSE, false},
+ {NULL, 0, false}
};
static const struct config_enum_entry log_statement_options[] = {
- {"none", LOGSTMT_NONE},
- {"ddl", LOGSTMT_DDL},
- {"mod", LOGSTMT_MOD},
- {"all", LOGSTMT_ALL},
- {NULL, 0}
+ {"none", LOGSTMT_NONE, false},
+ {"ddl", LOGSTMT_DDL, false},
+ {"mod", LOGSTMT_MOD, false},
+ {"all", LOGSTMT_ALL, false},
+ {NULL, 0, false}
};
static const struct config_enum_entry regex_flavor_options[] = {
- {"advanced", REG_ADVANCED},
- {"extended", REG_EXTENDED},
- {"basic", REG_BASIC},
- {NULL, 0}
+ {"advanced", REG_ADVANCED, false},
+ {"extended", REG_EXTENDED, false},
+ {"basic", REG_BASIC, false},
+ {NULL, 0, false}
};
static const struct config_enum_entry isolation_level_options[] = {
- {"serializable", XACT_SERIALIZABLE},
- {"repeatable read", XACT_REPEATABLE_READ},
- {"read committed", XACT_READ_COMMITTED},
- {"read uncommitted", XACT_READ_UNCOMMITTED},
+ {"serializable", XACT_SERIALIZABLE, false},
+ {"repeatable read", XACT_REPEATABLE_READ, false},
+ {"read committed", XACT_READ_COMMITTED, false},
+ {"read uncommitted", XACT_READ_UNCOMMITTED, false},
{NULL, 0}
};
static const struct config_enum_entry session_replication_role_options[] = {
- {"origin", SESSION_REPLICATION_ROLE_ORIGIN},
- {"replica", SESSION_REPLICATION_ROLE_REPLICA},
- {"local", SESSION_REPLICATION_ROLE_LOCAL},
- {NULL, 0}
+ {"origin", SESSION_REPLICATION_ROLE_ORIGIN, false},
+ {"replica", SESSION_REPLICATION_ROLE_REPLICA, false},
+ {"local", SESSION_REPLICATION_ROLE_LOCAL, false},
+ {NULL, 0, false}
};
#ifdef HAVE_SYSLOG
static const struct config_enum_entry syslog_facility_options[] = {
- {"local0", LOG_LOCAL0},
- {"local1", LOG_LOCAL1},
- {"local2", LOG_LOCAL2},
- {"local3", LOG_LOCAL3},
- {"local4", LOG_LOCAL4},
- {"local5", LOG_LOCAL5},
- {"local6", LOG_LOCAL6},
- {"local7", LOG_LOCAL7},
+ {"local0", LOG_LOCAL0, false},
+ {"local1", LOG_LOCAL1, false},
+ {"local2", LOG_LOCAL2, false},
+ {"local3", LOG_LOCAL3, false},
+ {"local4", LOG_LOCAL4, false},
+ {"local5", LOG_LOCAL5, false},
+ {"local6", LOG_LOCAL6, false},
+ {"local7", LOG_LOCAL7, false},
{NULL, 0}
};
#endif
static const struct config_enum_entry track_function_options[] = {
- {"none", TRACK_FUNC_OFF},
- {"pl", TRACK_FUNC_PL},
- {"all", TRACK_FUNC_ALL},
- {NULL, 0}
+ {"none", TRACK_FUNC_OFF, false},
+ {"pl", TRACK_FUNC_PL, false},
+ {"all", TRACK_FUNC_ALL, false},
+ {NULL, 0, false}
};
static const struct config_enum_entry xmlbinary_options[] = {
- {"base64", XMLBINARY_BASE64},
- {"hex", XMLBINARY_HEX},
- {NULL, 0}
+ {"base64", XMLBINARY_BASE64, false},
+ {"hex", XMLBINARY_HEX, false},
+ {NULL, 0, false}
};
static const struct config_enum_entry xmloption_options[] = {
- {"content", XMLOPTION_CONTENT},
- {"document", XMLOPTION_DOCUMENT},
- {NULL, 0}
+ {"content", XMLOPTION_CONTENT, false},
+ {"document", XMLOPTION_DOCUMENT, false},
+ {NULL, 0, false}
};
/*
@@ -264,16 +264,16 @@ static const struct config_enum_entry xmloption_options[] = {
* accept all the likely variants of "on" and "off".
*/
static const struct config_enum_entry backslash_quote_options[] = {
- {"safe_encoding", BACKSLASH_QUOTE_SAFE_ENCODING},
- {"on", BACKSLASH_QUOTE_ON},
- {"off", BACKSLASH_QUOTE_OFF},
- {"true", BACKSLASH_QUOTE_ON},
- {"false", BACKSLASH_QUOTE_OFF},
- {"yes", BACKSLASH_QUOTE_ON},
- {"no", BACKSLASH_QUOTE_OFF},
- {"1", BACKSLASH_QUOTE_ON},
- {"0", BACKSLASH_QUOTE_OFF},
- {NULL, 0}
+ {"safe_encoding", BACKSLASH_QUOTE_SAFE_ENCODING, false},
+ {"on", BACKSLASH_QUOTE_ON, false},
+ {"off", BACKSLASH_QUOTE_OFF, false},
+ {"true", BACKSLASH_QUOTE_ON, true},
+ {"false", BACKSLASH_QUOTE_OFF, true},
+ {"yes", BACKSLASH_QUOTE_ON, true},
+ {"no", BACKSLASH_QUOTE_OFF, true},
+ {"1", BACKSLASH_QUOTE_ON, true},
+ {"0", BACKSLASH_QUOTE_OFF, true},
+ {NULL, 0, false}
};
/*
@@ -4339,8 +4339,8 @@ config_enum_lookup_by_name(struct config_enum *record, const char *value, int *r
/*
- * Return a list of all available options for an enum, separated
- * by ", " (comma-space).
+ * Return a list of all available options for an enum, excluding
+ * hidden ones, separated by ", " (comma-space).
* If prefix is non-NULL, it is added before the first enum value.
* If suffix is non-NULL, it is added to the end of the string.
*/
@@ -4353,10 +4353,12 @@ config_enum_get_options(struct config_enum *record, const char *prefix, const ch
if (!entry || !entry->name)
return NULL; /* Should not happen */
-
+
while (entry && entry->name)
{
- len += strlen(entry->name) + 2; /* string and ", " */
+ if (!entry->hidden)
+ len += strlen(entry->name) + 2; /* string and ", " */
+
entry++;
}
@@ -4367,13 +4369,28 @@ config_enum_get_options(struct config_enum *record, const char *prefix, const ch
entry = record->options;
while (entry && entry->name)
{
- strcat(hintmsg, entry->name);
- strcat(hintmsg, ", ");
+ if (!entry->hidden)
+ {
+ strcat(hintmsg, entry->name);
+ strcat(hintmsg, ", ");
+ }
+
entry++;
}
- /* Replace final comma/space */
- hintmsg[strlen(hintmsg)-2] = '\0';
+ len = strlen(hintmsg);
+
+ /*
+ * All the entries may have been hidden, leaving the string empty
+ * if no prefix was given. This indicates a broken GUC setup, since
+ * there is no use for an enum without any values, so we just check
+ * to make sure we don't write to invalid memory instead of actually
+ * trying to do something smart with it.
+ */
+ if (len > 1)
+ /* Replace final comma/space */
+ hintmsg[len-2] = '\0';
+
strcat(hintmsg, suffix);
return hintmsg;