diff --git a/doc/src/sgml/ref/reset.sgml b/doc/src/sgml/ref/reset.sgml
index 7bb87570ad..85194663eb 100644
--- a/doc/src/sgml/ref/reset.sgml
+++ b/doc/src/sgml/ref/reset.sgml
@@ -1,5 +1,5 @@
@@ -16,6 +16,9 @@ Postgres documentation
RESET variable
+
+RESET ALL
+
Inputs
@@ -30,6 +33,14 @@ RESET variable
+
+ ALL
+
+
+ Resets all run-time parameters to default values.
+
+
+
diff --git a/doc/src/sgml/ref/show.sgml b/doc/src/sgml/ref/show.sgml
index 934b0567f2..3674a97c5b 100644
--- a/doc/src/sgml/ref/show.sgml
+++ b/doc/src/sgml/ref/show.sgml
@@ -1,5 +1,5 @@
@@ -16,6 +16,9 @@ Postgres documentation
SHOW name
+
+SHOW ALL
+
Inputs
@@ -32,6 +35,14 @@ SHOW name
+
+ ALL
+
+
+ Show all current session parameters.
+
+
+
diff --git a/src/backend/commands/variable.c b/src/backend/commands/variable.c
index eb43be8f3f..6f22bcc33d 100644
--- a/src/backend/commands/variable.c
+++ b/src/backend/commands/variable.c
@@ -9,7 +9,7 @@
*
*
* IDENTIFICATION
- * $Header: /cvsroot/pgsql/src/backend/commands/variable.c,v 1.48 2001/05/08 21:06:42 petere Exp $
+ * $Header: /cvsroot/pgsql/src/backend/commands/variable.c,v 1.49 2001/06/07 04:50:56 momjian Exp $
*
*-------------------------------------------------------------------------
*/
@@ -39,9 +39,9 @@
#endif
-static bool show_date(void);
-static bool reset_date(void);
-static bool parse_date(char *);
+static bool show_datestyle(void);
+static bool reset_datestyle(void);
+static bool parse_datestyle(char *);
static bool show_timezone(void);
static bool reset_timezone(void);
static bool parse_timezone(char *);
@@ -192,7 +192,7 @@ static int DefaultDateStyle;
static bool DefaultEuroDates;
static bool
-parse_date(char *value)
+parse_datestyle(char *value)
{
char *tok;
int dcnt = 0,
@@ -200,7 +200,7 @@ parse_date(char *value)
if (value == NULL)
{
- reset_date();
+ reset_datestyle();
return TRUE;
}
@@ -261,7 +261,7 @@ parse_date(char *value)
}
static bool
-show_date(void)
+show_datestyle(void)
{
char buf[64];
@@ -291,7 +291,7 @@ show_date(void)
}
static bool
-reset_date(void)
+reset_datestyle(void)
{
DateStyle = DefaultDateStyle;
EuroDates = DefaultEuroDates;
@@ -325,7 +325,7 @@ set_default_datestyle(void)
DBDate = strdup(DBDate);
/* Parse desired setting into DateStyle/EuroDates */
- parse_date(DBDate);
+ parse_datestyle(DBDate);
free(DBDate);
@@ -396,7 +396,7 @@ show_timezone(void)
tz = getenv("TZ");
- elog(NOTICE, "Time zone is %s", ((tz != NULL) ? tz : "unknown"));
+ elog(NOTICE, "Time zone is %s", ((tz != NULL) ? tz : "unset"));
return TRUE;
} /* show_timezone() */
@@ -586,7 +586,7 @@ parse_random_seed(char *value)
static bool
show_random_seed(void)
{
- elog(NOTICE, "Seed for random number generator is not known");
+ elog(NOTICE, "Seed for random number generator is unavailable");
return (TRUE);
}
@@ -708,7 +708,7 @@ SetPGVariable(const char *name, const char *value)
* Special cases ought to be removed and handled separately by TCOP
*/
if (strcasecmp(name, "datestyle") == 0)
- parse_date(mvalue);
+ parse_datestyle(mvalue);
else if (strcasecmp(name, "timezone") == 0)
parse_timezone(mvalue);
else if (strcasecmp(name, "DefaultXactIsoLevel") == 0)
@@ -724,18 +724,17 @@ SetPGVariable(const char *name, const char *value)
else if (strcasecmp(name, "session_authorization") == 0)
SetSessionAuthorization(value);
else
- SetConfigOption(name, value, superuser() ? PGC_SUSET : PGC_USERSET);
+ SetConfigOption(name, value, superuser() ? PGC_SUSET : PGC_USERSET, false);
if (mvalue)
pfree(mvalue);
}
-
void
GetPGVariable(const char *name)
{
if (strcasecmp(name, "datestyle") == 0)
- show_date();
+ show_datestyle();
else if (strcasecmp(name, "timezone") == 0)
show_timezone();
else if (strcasecmp(name, "DefaultXactIsoLevel") == 0)
@@ -748,7 +747,17 @@ GetPGVariable(const char *name)
show_server_encoding();
else if (strcasecmp(name, "seed") == 0)
show_random_seed();
- else
+ else if (strcasecmp(name, "all") == 0)
+ {
+ ShowAllGUCConfig();
+ show_datestyle();
+ show_timezone();
+ show_DefaultXactIsoLevel();
+ show_XactIsoLevel();
+ show_client_encoding();
+ show_server_encoding();
+ show_random_seed();
+ } else
{
const char *val = GetConfigOption(name);
@@ -760,7 +769,7 @@ void
ResetPGVariable(const char *name)
{
if (strcasecmp(name, "datestyle") == 0)
- reset_date();
+ reset_datestyle();
else if (strcasecmp(name, "timezone") == 0)
reset_timezone();
else if (strcasecmp(name, "DefaultXactIsoLevel") == 0)
@@ -773,6 +782,17 @@ ResetPGVariable(const char *name)
reset_server_encoding();
else if (strcasecmp(name, "seed") == 0)
reset_random_seed();
- else
- SetConfigOption(name, NULL, superuser() ? PGC_SUSET : PGC_USERSET);
+ else if (strcasecmp(name, "all") == 0)
+ {
+ reset_DefaultXactIsoLevel();
+ reset_XactIsoLevel();
+ reset_random_seed();
+ /* reset_server_encoding(); */
+ reset_client_encoding();
+ reset_datestyle();
+ reset_timezone();
+
+ ResetAllOptions();
+ } else
+ SetConfigOption(name, NULL, superuser() ? PGC_SUSET : PGC_USERSET, false);
}
diff --git a/src/backend/parser/gram.y b/src/backend/parser/gram.y
index 6cf2adcb5b..308b49fd72 100644
--- a/src/backend/parser/gram.y
+++ b/src/backend/parser/gram.y
@@ -11,7 +11,7 @@
*
*
* IDENTIFICATION
- * $Header: /cvsroot/pgsql/src/backend/parser/gram.y,v 2.228 2001/06/04 23:27:23 momjian Exp $
+ * $Header: /cvsroot/pgsql/src/backend/parser/gram.y,v 2.229 2001/06/07 04:50:56 momjian Exp $
*
* HISTORY
* AUTHOR DATE MAJOR EVENT
@@ -860,6 +860,12 @@ VariableShowStmt: SHOW ColId
n->name = "timezone";
$$ = (Node *) n;
}
+ | SHOW ALL
+ {
+ VariableShowStmt *n = makeNode(VariableShowStmt);
+ n->name = "all";
+ $$ = (Node *) n;
+ }
| SHOW TRANSACTION ISOLATION LEVEL
{
VariableShowStmt *n = makeNode(VariableShowStmt);
@@ -886,6 +892,12 @@ VariableResetStmt: RESET ColId
n->name = "XactIsoLevel";
$$ = (Node *) n;
}
+ | RESET ALL
+ {
+ VariableResetStmt *n = makeNode(VariableResetStmt);
+ n->name = "all";
+ $$ = (Node *) n;
+ }
;
diff --git a/src/backend/postmaster/postmaster.c b/src/backend/postmaster/postmaster.c
index 6ccc9e577b..96d7d1e3ad 100644
--- a/src/backend/postmaster/postmaster.c
+++ b/src/backend/postmaster/postmaster.c
@@ -28,7 +28,7 @@
*
*
* IDENTIFICATION
- * $Header: /cvsroot/pgsql/src/backend/postmaster/postmaster.c,v 1.216 2001/06/03 14:53:56 petere Exp $
+ * $Header: /cvsroot/pgsql/src/backend/postmaster/postmaster.c,v 1.217 2001/06/07 04:50:57 momjian Exp $
*
* NOTES
*
@@ -533,7 +533,7 @@ PostmasterMain(int argc, char *argv[])
elog(ERROR, "-c %s requires argument", optarg);
}
- SetConfigOption(name, value, PGC_POSTMASTER);
+ SetConfigOption(name, value, PGC_POSTMASTER, true);
free(name);
if (value)
free(value);
diff --git a/src/backend/tcop/postgres.c b/src/backend/tcop/postgres.c
index 19a44ff67d..8e5115f755 100644
--- a/src/backend/tcop/postgres.c
+++ b/src/backend/tcop/postgres.c
@@ -8,7 +8,7 @@
*
*
* IDENTIFICATION
- * $Header: /cvsroot/pgsql/src/backend/tcop/postgres.c,v 1.218 2001/04/14 19:11:45 momjian Exp $
+ * $Header: /cvsroot/pgsql/src/backend/tcop/postgres.c,v 1.219 2001/06/07 04:50:57 momjian Exp $
*
* NOTES
* this is the "main" module of the postgres backend and
@@ -1462,7 +1462,7 @@ PostgresMain(int argc, char *argv[], int real_argc, char *real_argv[], const cha
/* all options are allowed if not under postmaster */
SetConfigOption(name, value,
- (IsUnderPostmaster) ? PGC_BACKEND : PGC_POSTMASTER);
+ (IsUnderPostmaster) ? PGC_BACKEND : PGC_POSTMASTER, true);
free(name);
if (value)
free(value);
@@ -1709,7 +1709,7 @@ PostgresMain(int argc, char *argv[], int real_argc, char *real_argv[], const cha
if (!IsUnderPostmaster)
{
puts("\nPOSTGRES backend interactive interface ");
- puts("$Revision: 1.218 $ $Date: 2001/04/14 19:11:45 $\n");
+ puts("$Revision: 1.219 $ $Date: 2001/06/07 04:50:57 $\n");
}
/*
diff --git a/src/backend/utils/misc/guc-file.l b/src/backend/utils/misc/guc-file.l
index cb39525df9..950dbb6ef9 100644
--- a/src/backend/utils/misc/guc-file.l
+++ b/src/backend/utils/misc/guc-file.l
@@ -4,7 +4,7 @@
*
* Copyright 2000 by PostgreSQL Global Development Group
*
- * $Header: /cvsroot/pgsql/src/backend/utils/misc/guc-file.l,v 1.7 2001/06/01 20:29:43 tgl Exp $
+ * $Header: /cvsroot/pgsql/src/backend/utils/misc/guc-file.l,v 1.8 2001/06/07 04:50:57 momjian Exp $
*/
%{
@@ -260,13 +260,13 @@ ProcessConfigFile(GucContext context)
*/
for(item = head; item; item=item->next)
{
- if (!set_config_option(item->name, item->value, context, false))
+ if (!set_config_option(item->name, item->value, context, false, false))
goto cleanup_exit;
}
/* If we got here all the options parsed okay. */
for(item = head; item; item=item->next)
- set_config_option(item->name, item->value, context, true);
+ set_config_option(item->name, item->value, context, true, true);
cleanup_exit:
free_name_value_list(head);
diff --git a/src/backend/utils/misc/guc.c b/src/backend/utils/misc/guc.c
index 6e080594f8..78c569f80b 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 .
@@ -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]);
+}
+
+
+
/*
diff --git a/src/include/utils/guc.h b/src/include/utils/guc.h
index 978b9da859..1d925f0c3e 100644
--- a/src/include/utils/guc.h
+++ b/src/include/utils/guc.h
@@ -4,7 +4,7 @@
* External declarations pertaining to backend/utils/misc/guc.c and
* backend/utils/misc/guc-file.l
*
- * $Header: /cvsroot/pgsql/src/include/utils/guc.h,v 1.6 2001/03/22 04:01:12 momjian Exp $
+ * $Header: /cvsroot/pgsql/src/include/utils/guc.h,v 1.7 2001/06/07 04:50:57 momjian Exp $
*/
#ifndef GUC_H
#define GUC_H
@@ -46,12 +46,13 @@ typedef enum
} GucContext;
-void SetConfigOption(const char *name, const char *value, GucContext context);
+void SetConfigOption(const char *name, const char *value, GucContext context, bool makeDefault);
const char *GetConfigOption(const char *name);
void ProcessConfigFile(GucContext context);
void ResetAllOptions(void);
void ParseLongOption(const char *string, char **name, char **value);
-bool set_config_option(const char *name, const char *value, GucContext context, bool DoIt);
+bool set_config_option(const char *name, const char *value, GucContext context, bool DoIt, bool makeDefault);
+void ShowAllGUCConfig(void);
extern bool Debug_print_query;