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.c105
1 files changed, 100 insertions, 5 deletions
diff --git a/src/backend/utils/misc/guc.c b/src/backend/utils/misc/guc.c
index 6e080594f8b..78c569f80b8 100644
--- a/src/backend/utils/misc/guc.c
+++ b/src/backend/utils/misc/guc.c
@@ -4,7 +4,7 @@
* Support for grand unified configuration scheme, including SET
* command, configuration file, and command line options.
*
- * $Header: /cvsroot/pgsql/src/backend/utils/misc/guc.c,v 1.36 2001/05/17 17:44:18 petere Exp $
+ * $Header: /cvsroot/pgsql/src/backend/utils/misc/guc.c,v 1.37 2001/06/07 04:50:57 momjian Exp $
*
* Copyright 2000 by PostgreSQL Global Development Group
* Written by Peter Eisentraut <peter_e@gmx.net>.
@@ -136,9 +136,10 @@ struct config_string
const char *name;
GucContext context;
char **variable;
- const char *default_val;
+ const char *boot_default_val;
bool (*parse_hook) (const char *proposed);
void (*assign_hook) (const char *newval);
+ char *default_val;
};
@@ -433,6 +434,15 @@ ResetAllOptions(void)
{
char *str = NULL;
+ if (!ConfigureNamesString[i].default_val
+ && ConfigureNamesString[i].boot_default_val)
+ {
+ str = strdup(ConfigureNamesString[i].boot_default_val);
+ if (str == NULL)
+ elog(ERROR, "out of memory");
+
+ ConfigureNamesString[i].default_val = str;
+ }
if (ConfigureNamesString[i].default_val)
{
str = strdup(ConfigureNamesString[i].default_val);
@@ -582,7 +592,7 @@ parse_real(const char *value, double *result)
*/
bool
set_config_option(const char *name, const char *value, GucContext
- context, bool DoIt)
+ context, bool DoIt, bool makeDefault)
{
struct config_generic *record;
enum config_type type;
@@ -653,7 +663,11 @@ set_config_option(const char *name, const char *value, GucContext
return false;
}
if (DoIt)
+ {
*conf->variable = boolval;
+ if (makeDefault)
+ conf->default_val = boolval;
+ }
}
else if (DoIt)
*conf->variable = conf->default_val;
@@ -681,7 +695,11 @@ set_config_option(const char *name, const char *value, GucContext
return false;
}
if (DoIt)
+ {
*conf->variable = intval;
+ if (makeDefault)
+ conf->default_val = intval;
+ }
}
else if (DoIt)
*conf->variable = conf->default_val;
@@ -709,7 +727,11 @@ set_config_option(const char *name, const char *value, GucContext
return false;
}
if (DoIt)
+ {
*conf->variable = dval;
+ if (makeDefault)
+ conf->default_val = dval;
+ }
}
else if (DoIt)
*conf->variable = conf->default_val;
@@ -742,12 +764,33 @@ set_config_option(const char *name, const char *value, GucContext
if (*conf->variable)
free(*conf->variable);
*conf->variable = str;
+ if (makeDefault)
+ {
+ if (conf->default_val)
+ free(conf->default_val);
+ str = strdup(value);
+ if (str == NULL) {
+ elog(elevel, "out of memory");
+ return false;
+ }
+ conf->default_val = str;
+ }
}
}
else if (DoIt)
{
char *str;
+ if (!conf->default_val && conf->boot_default_val)
+ {
+ str = strdup(conf->boot_default_val);
+ if (str == NULL)
+ {
+ elog(elevel, "out of memory");
+ return false;
+ }
+ conf->boot_default_val = str;
+ }
str = strdup(conf->default_val);
if (str == NULL)
{
@@ -776,9 +819,9 @@ set_config_option(const char *name, const char *value, GucContext
*/
void
SetConfigOption(const char *name, const char *value, GucContext
- context)
+ context, bool makeDefault)
{
- (void) set_config_option(name, value, context, true);
+ (void) set_config_option(name, value, context, true, makeDefault);
}
@@ -826,6 +869,58 @@ GetConfigOption(const char *name)
return NULL;
}
+static void
+_ShowOption(enum config_type opttype, struct config_generic *record)
+{
+ static char buffer[256];
+ char *val;
+
+ switch (opttype)
+ {
+ case PGC_BOOL:
+ val = *((struct config_bool *) record)->variable ? "on" : "off";
+ break;
+ case PGC_INT:
+ snprintf(buffer, 256, "%d", *((struct config_int *) record)->variable);
+ val = buffer;
+ break;
+
+ case PGC_REAL:
+ snprintf(buffer, 256, "%g", *((struct config_real *) record)->variable);
+ val = buffer;
+ break;
+
+ case PGC_STRING:
+ val = strlen(*((struct config_string *) record)->variable) != 0 ?
+ *((struct config_string *) record)->variable : "unset";
+ break;
+
+ default:
+ val = "???";
+ }
+ elog(NOTICE, "%s is %s", record->name, val);
+}
+
+void
+ShowAllGUCConfig(void)
+{
+ int i;
+
+ for (i = 0; ConfigureNamesBool[i].name; i++)
+ _ShowOption(PGC_BOOL, (struct config_generic *)&ConfigureNamesBool[i]);
+
+ for (i = 0; ConfigureNamesInt[i].name; i++)
+ _ShowOption(PGC_INT, (struct config_generic *)&ConfigureNamesInt[i]);
+
+ for (i = 0; ConfigureNamesReal[i].name; i++)
+ _ShowOption(PGC_REAL, (struct config_generic *)&ConfigureNamesReal[i]);
+
+ for (i = 0; ConfigureNamesString[i].name; i++)
+ _ShowOption(PGC_STRING, (struct config_generic *)&ConfigureNamesString[i]);
+}
+
+
+
/*