|
|
|
@ -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; |
|
|
|
|