diff --git a/src/backend/utils/misc/guc.c b/src/backend/utils/misc/guc.c index 2f855b13aa..6839a165dd 100644 --- a/src/backend/utils/misc/guc.c +++ b/src/backend/utils/misc/guc.c @@ -10,7 +10,7 @@ * Written by Peter Eisentraut . * * IDENTIFICATION - * $PostgreSQL: pgsql/src/backend/utils/misc/guc.c,v 1.438 2008/03/16 16:42:44 mha Exp $ + * $PostgreSQL: pgsql/src/backend/utils/misc/guc.c,v 1.439 2008/03/17 17:45:09 mha Exp $ * *-------------------------------------------------------------------- */ @@ -168,9 +168,6 @@ static const char *show_tcp_keepalives_count(void); static bool assign_autovacuum_max_workers(int newval, bool doit, GucSource source); static bool assign_maxconnections(int newval, bool doit, GucSource source); -static const char *config_enum_lookup_value(struct config_enum *record, int val); -static bool config_enum_lookup_name(struct config_enum *record, - const char *value, int *retval); static char *config_enum_get_options(struct config_enum *record, const char *prefix, const char *suffix); @@ -3144,7 +3141,7 @@ InitializeGUCOptions(void) PGC_S_DEFAULT)) elog(FATAL, "failed to initialize %s to %s", conf->gen.name, - config_enum_lookup_value(conf, conf->boot_val)); + config_enum_lookup_by_value(conf, conf->boot_val)); *conf->variable = conf->reset_val = conf->boot_val; break; } @@ -4219,8 +4216,8 @@ parse_real(const char *value, double *result) * The returned string is a pointer to static data and not * allocated for modification. */ -static const char * -config_enum_lookup_value(struct config_enum *record, int val) +const char * +config_enum_lookup_by_value(struct config_enum *record, int val) { const struct config_enum_entry *entry = record->options; while (entry && entry->name) @@ -4242,8 +4239,8 @@ config_enum_lookup_value(struct config_enum *record, int val) * true. If it's not found, return FALSE and retval is set to 0. * */ -static bool -config_enum_lookup_name(struct config_enum *record, const char *value, int *retval) +bool +config_enum_lookup_by_name(struct config_enum *record, const char *value, int *retval) { const struct config_enum_entry *entry = record->options; @@ -4876,7 +4873,7 @@ set_config_option(const char *name, const char *value, if (value) { - if (!config_enum_lookup_name(conf, value, &newval)) + if (!config_enum_lookup_by_name(conf, value, &newval)) { char *hintmsg = config_enum_get_options(conf, "Available values: ", "."); @@ -4906,7 +4903,7 @@ set_config_option(const char *name, const char *value, (errcode(ERRCODE_INVALID_PARAMETER_VALUE), errmsg("invalid value for parameter \"%s\": \"%s\"", name, - config_enum_lookup_value(conf, newval)))); + config_enum_lookup_by_value(conf, newval)))); return false; } @@ -5007,7 +5004,7 @@ GetConfigOption(const char *name) return *((struct config_string *) record)->variable; case PGC_ENUM: - return config_enum_lookup_value((struct config_enum *) record, + return config_enum_lookup_by_value((struct config_enum *) record, *((struct config_enum *) record)->variable); } return NULL; @@ -5055,7 +5052,7 @@ GetConfigOptionResetString(const char *name) return ((struct config_string *) record)->reset_val; case PGC_ENUM: - return config_enum_lookup_value((struct config_enum *) record, + return config_enum_lookup_by_value((struct config_enum *) record, ((struct config_enum *) record)->reset_val); } return NULL; @@ -6265,7 +6262,7 @@ _ShowOption(struct config_generic * record, bool use_units) if(conf->show_hook) val = (*conf->show_hook) (); else - val = config_enum_lookup_value(conf, *conf->variable); + val = config_enum_lookup_by_value(conf, *conf->variable); } break; @@ -6331,7 +6328,7 @@ is_newvalue_equal(struct config_generic * record, const char *newvalue) struct config_enum *conf = (struct config_enum *) record; int newval; - return config_enum_lookup_name(conf, newvalue, &newval) + return config_enum_lookup_by_name(conf, newvalue, &newval) && *conf->variable == newval; } } @@ -6425,7 +6422,7 @@ write_nondefault_variables(GucContext context) { struct config_enum *conf = (struct config_enum *) gconf; - fprintf(fp, "%s", config_enum_lookup_value(conf, *conf->variable)); + fprintf(fp, "%s", config_enum_lookup_by_value(conf, *conf->variable)); } break; } diff --git a/src/backend/utils/misc/help_config.c b/src/backend/utils/misc/help_config.c index 1fdd134b72..543aeb7ed3 100644 --- a/src/backend/utils/misc/help_config.c +++ b/src/backend/utils/misc/help_config.c @@ -10,7 +10,7 @@ * Portions Copyright (c) 1996-2008, PostgreSQL Global Development Group * * IDENTIFICATION - * $PostgreSQL: pgsql/src/backend/utils/misc/help_config.c,v 1.20 2008/02/23 19:23:33 tgl Exp $ + * $PostgreSQL: pgsql/src/backend/utils/misc/help_config.c,v 1.21 2008/03/17 17:45:09 mha Exp $ * *------------------------------------------------------------------------- */ @@ -35,6 +35,7 @@ typedef union struct config_real real; struct config_int integer; struct config_string string; + struct config_enum _enum; } mixedStruct; @@ -120,6 +121,12 @@ printMixedStruct(mixedStruct *structToPrint) structToPrint->string.boot_val ? structToPrint->string.boot_val : ""); break; + case PGC_ENUM: + printf("ENUM\t%s\t\t\t", + config_enum_lookup_by_value(&structToPrint->_enum, + structToPrint->_enum.boot_val)); + break; + default: write_stderr("internal error: unrecognized run-time parameter type\n"); break; diff --git a/src/include/utils/guc_tables.h b/src/include/utils/guc_tables.h index f81826fe4c..9e52adfcc8 100644 --- a/src/include/utils/guc_tables.h +++ b/src/include/utils/guc_tables.h @@ -7,7 +7,7 @@ * * Portions Copyright (c) 1996-2008, PostgreSQL Global Development Group * - * $PostgreSQL: pgsql/src/include/utils/guc_tables.h,v 1.40 2008/03/16 16:42:44 mha Exp $ + * $PostgreSQL: pgsql/src/include/utils/guc_tables.h,v 1.41 2008/03/17 17:45:09 mha Exp $ * *------------------------------------------------------------------------- */ @@ -236,4 +236,10 @@ extern struct config_generic **get_guc_variables(void); extern void build_guc_variables(void); +/* search in enum options */ +extern const char *config_enum_lookup_by_value(struct config_enum *record, int val); +extern bool config_enum_lookup_by_name(struct config_enum *record, + const char *value, int *retval); + + #endif /* GUC_TABLES_H */