Commit d88cd7db authored by Magnus Hagander's avatar Magnus Hagander

Add a field to guc enums to allow hiding of values from display while

still accepting them as input, used to allow alternate syntax for the
same setting.

Alex Hunsaker
parent a8f98c06
......@@ -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;
......
......@@ -7,7 +7,7 @@
* Copyright (c) 2000-2008, PostgreSQL Global Development Group
* Written by Peter Eisentraut <peter_e@gmx.net>.
*
* $PostgreSQL: pgsql/src/include/utils/guc.h,v 1.95 2008/05/12 08:35:05 mha Exp $
* $PostgreSQL: pgsql/src/include/utils/guc.h,v 1.96 2008/05/28 09:04:06 mha Exp $
*--------------------------------------------------------------------
*/
#ifndef GUC_H
......@@ -100,6 +100,7 @@ struct config_enum_entry
{
const char *name;
int val;
bool hidden;
};
......
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