Index: doc/src/sgml/ref/reset.sgml =================================================================== RCS file: /home/projects/pgsql/cvsroot/pgsql/doc/src/sgml/ref/reset.sgml,v retrieving revision 1.10 diff -c -r1.10 reset.sgml *** doc/src/sgml/ref/reset.sgml 2000/12/25 23:15:26 1.10 --- doc/src/sgml/ref/reset.sgml 2001/06/07 04:43:17 *************** *** 16,21 **** --- 16,24 ---- RESET variable + + RESET ALL + Inputs *************** *** 27,32 **** --- 30,43 ---- The name of a run-time parameter. See for a list. + + + + + ALL + + + Resets all run-time parameters to default values. Index: doc/src/sgml/ref/show.sgml =================================================================== RCS file: /home/projects/pgsql/cvsroot/pgsql/doc/src/sgml/ref/show.sgml,v retrieving revision 1.11 diff -c -r1.11 show.sgml *** doc/src/sgml/ref/show.sgml 2000/12/25 23:15:26 1.11 --- doc/src/sgml/ref/show.sgml 2001/06/07 04:43:17 *************** *** 16,21 **** --- 16,24 ---- SHOW name + + SHOW ALL + Inputs *************** *** 29,34 **** --- 32,45 ---- The name of a run-time parameter. See for a list. + + + + + ALL + + + Show all current session parameters. Index: src/backend/commands/variable.c =================================================================== RCS file: /home/projects/pgsql/cvsroot/pgsql/src/backend/commands/variable.c,v retrieving revision 1.48 diff -c -r1.48 variable.c *** src/backend/commands/variable.c 2001/05/08 21:06:42 1.48 --- src/backend/commands/variable.c 2001/06/07 04:43:17 *************** *** 39,47 **** #endif ! static bool show_date(void); ! static bool reset_date(void); ! static bool parse_date(char *); static bool show_timezone(void); static bool reset_timezone(void); static bool parse_timezone(char *); --- 39,47 ---- #endif ! 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,198 **** static bool DefaultEuroDates; static bool ! parse_date(char *value) { char *tok; int dcnt = 0, --- 192,198 ---- static bool DefaultEuroDates; static bool ! parse_datestyle(char *value) { char *tok; int dcnt = 0, *************** *** 200,206 **** if (value == NULL) { ! reset_date(); return TRUE; } --- 200,206 ---- if (value == NULL) { ! reset_datestyle(); return TRUE; } *************** *** 261,267 **** } static bool ! show_date(void) { char buf[64]; --- 261,267 ---- } static bool ! show_datestyle(void) { char buf[64]; *************** *** 291,297 **** } static bool ! reset_date(void) { DateStyle = DefaultDateStyle; EuroDates = DefaultEuroDates; --- 291,297 ---- } static bool ! reset_datestyle(void) { DateStyle = DefaultDateStyle; EuroDates = DefaultEuroDates; *************** *** 325,331 **** DBDate = strdup(DBDate); /* Parse desired setting into DateStyle/EuroDates */ ! parse_date(DBDate); free(DBDate); --- 325,331 ---- DBDate = strdup(DBDate); /* Parse desired setting into DateStyle/EuroDates */ ! parse_datestyle(DBDate); free(DBDate); *************** *** 396,402 **** tz = getenv("TZ"); ! elog(NOTICE, "Time zone is %s", ((tz != NULL) ? tz : "unknown")); return TRUE; } /* show_timezone() */ --- 396,402 ---- tz = getenv("TZ"); ! elog(NOTICE, "Time zone is %s", ((tz != NULL) ? tz : "unset")); return TRUE; } /* show_timezone() */ *************** *** 586,592 **** static bool show_random_seed(void) { ! elog(NOTICE, "Seed for random number generator is not known"); return (TRUE); } --- 586,592 ---- static bool show_random_seed(void) { ! elog(NOTICE, "Seed for random number generator is unavailable"); return (TRUE); } *************** *** 708,714 **** * Special cases ought to be removed and handled separately by TCOP */ if (strcasecmp(name, "datestyle") == 0) ! parse_date(mvalue); else if (strcasecmp(name, "timezone") == 0) parse_timezone(mvalue); else if (strcasecmp(name, "DefaultXactIsoLevel") == 0) --- 708,714 ---- * Special cases ought to be removed and handled separately by TCOP */ if (strcasecmp(name, "datestyle") == 0) ! parse_datestyle(mvalue); else if (strcasecmp(name, "timezone") == 0) parse_timezone(mvalue); else if (strcasecmp(name, "DefaultXactIsoLevel") == 0) *************** *** 724,741 **** else if (strcasecmp(name, "session_authorization") == 0) SetSessionAuthorization(value); else ! SetConfigOption(name, value, superuser() ? PGC_SUSET : PGC_USERSET); if (mvalue) pfree(mvalue); } - void GetPGVariable(const char *name) { if (strcasecmp(name, "datestyle") == 0) ! show_date(); else if (strcasecmp(name, "timezone") == 0) show_timezone(); else if (strcasecmp(name, "DefaultXactIsoLevel") == 0) --- 724,740 ---- else if (strcasecmp(name, "session_authorization") == 0) SetSessionAuthorization(value); else ! SetConfigOption(name, value, superuser() ? PGC_SUSET : PGC_USERSET, false); if (mvalue) pfree(mvalue); } void GetPGVariable(const char *name) { if (strcasecmp(name, "datestyle") == 0) ! show_datestyle(); else if (strcasecmp(name, "timezone") == 0) show_timezone(); else if (strcasecmp(name, "DefaultXactIsoLevel") == 0) *************** *** 748,754 **** show_server_encoding(); else if (strcasecmp(name, "seed") == 0) show_random_seed(); ! else { const char *val = GetConfigOption(name); --- 747,763 ---- show_server_encoding(); else if (strcasecmp(name, "seed") == 0) show_random_seed(); ! 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,766 **** ResetPGVariable(const char *name) { if (strcasecmp(name, "datestyle") == 0) ! reset_date(); else if (strcasecmp(name, "timezone") == 0) reset_timezone(); else if (strcasecmp(name, "DefaultXactIsoLevel") == 0) --- 769,775 ---- ResetPGVariable(const char *name) { if (strcasecmp(name, "datestyle") == 0) ! reset_datestyle(); else if (strcasecmp(name, "timezone") == 0) reset_timezone(); else if (strcasecmp(name, "DefaultXactIsoLevel") == 0) *************** *** 773,778 **** reset_server_encoding(); else if (strcasecmp(name, "seed") == 0) reset_random_seed(); ! else ! SetConfigOption(name, NULL, superuser() ? PGC_SUSET : PGC_USERSET); } --- 782,798 ---- reset_server_encoding(); else if (strcasecmp(name, "seed") == 0) reset_random_seed(); ! 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); } Index: src/backend/parser/gram.y =================================================================== RCS file: /home/projects/pgsql/cvsroot/pgsql/src/backend/parser/gram.y,v retrieving revision 2.228 diff -c -r2.228 gram.y *** src/backend/parser/gram.y 2001/06/04 23:27:23 2.228 --- src/backend/parser/gram.y 2001/06/07 04:43:21 *************** *** 860,865 **** --- 860,871 ---- n->name = "timezone"; $$ = (Node *) n; } + | SHOW ALL + { + VariableShowStmt *n = makeNode(VariableShowStmt); + n->name = "all"; + $$ = (Node *) n; + } | SHOW TRANSACTION ISOLATION LEVEL { VariableShowStmt *n = makeNode(VariableShowStmt); *************** *** 884,889 **** --- 890,901 ---- { VariableResetStmt *n = makeNode(VariableResetStmt); n->name = "XactIsoLevel"; + $$ = (Node *) n; + } + | RESET ALL + { + VariableResetStmt *n = makeNode(VariableResetStmt); + n->name = "all"; $$ = (Node *) n; } ; Index: src/backend/postmaster/postmaster.c =================================================================== RCS file: /home/projects/pgsql/cvsroot/pgsql/src/backend/postmaster/postmaster.c,v retrieving revision 1.216 diff -c -r1.216 postmaster.c *** src/backend/postmaster/postmaster.c 2001/06/03 14:53:56 1.216 --- src/backend/postmaster/postmaster.c 2001/06/07 04:43:23 *************** *** 533,539 **** elog(ERROR, "-c %s requires argument", optarg); } ! SetConfigOption(name, value, PGC_POSTMASTER); free(name); if (value) free(value); --- 533,539 ---- elog(ERROR, "-c %s requires argument", optarg); } ! SetConfigOption(name, value, PGC_POSTMASTER, true); free(name); if (value) free(value); Index: src/backend/tcop/postgres.c =================================================================== RCS file: /home/projects/pgsql/cvsroot/pgsql/src/backend/tcop/postgres.c,v retrieving revision 1.218 diff -c -r1.218 postgres.c *** src/backend/tcop/postgres.c 2001/04/14 19:11:45 1.218 --- src/backend/tcop/postgres.c 2001/06/07 04:43:29 *************** *** 1462,1468 **** /* all options are allowed if not under postmaster */ SetConfigOption(name, value, ! (IsUnderPostmaster) ? PGC_BACKEND : PGC_POSTMASTER); free(name); if (value) free(value); --- 1462,1468 ---- /* all options are allowed if not under postmaster */ SetConfigOption(name, value, ! (IsUnderPostmaster) ? PGC_BACKEND : PGC_POSTMASTER, true); free(name); if (value) free(value); Index: src/backend/utils/misc/guc-file.l =================================================================== RCS file: /home/projects/pgsql/cvsroot/pgsql/src/backend/utils/misc/guc-file.l,v retrieving revision 1.7 diff -c -r1.7 guc-file.l *** src/backend/utils/misc/guc-file.l 2001/06/01 20:29:43 1.7 --- src/backend/utils/misc/guc-file.l 2001/06/07 04:43:29 *************** *** 260,272 **** */ for(item = head; item; item=item->next) { ! if (!set_config_option(item->name, item->value, context, 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); cleanup_exit: free_name_value_list(head); --- 260,272 ---- */ for(item = head; item; item=item->next) { ! 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, true); cleanup_exit: free_name_value_list(head); Index: src/backend/utils/misc/guc.c =================================================================== RCS file: /home/projects/pgsql/cvsroot/pgsql/src/backend/utils/misc/guc.c,v retrieving revision 1.36 diff -c -r1.36 guc.c *** src/backend/utils/misc/guc.c 2001/05/17 17:44:18 1.36 --- src/backend/utils/misc/guc.c 2001/06/07 04:43:30 *************** *** 136,144 **** const char *name; GucContext context; char **variable; ! const char *default_val; bool (*parse_hook) (const char *proposed); void (*assign_hook) (const char *newval); }; --- 136,145 ---- const char *name; GucContext context; char **variable; ! const char *boot_default_val; bool (*parse_hook) (const char *proposed); void (*assign_hook) (const char *newval); + char *default_val; }; *************** *** 433,438 **** --- 434,448 ---- { 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,588 **** */ bool set_config_option(const char *name, const char *value, GucContext ! context, bool DoIt) { struct config_generic *record; enum config_type type; --- 592,598 ---- */ bool set_config_option(const char *name, const char *value, GucContext ! context, bool DoIt, bool makeDefault) { struct config_generic *record; enum config_type type; *************** *** 653,659 **** --- 663,673 ---- return false; } if (DoIt) + { *conf->variable = boolval; + if (makeDefault) + conf->default_val = boolval; + } } else if (DoIt) *conf->variable = conf->default_val; *************** *** 681,687 **** --- 695,705 ---- return false; } if (DoIt) + { *conf->variable = intval; + if (makeDefault) + conf->default_val = intval; + } } else if (DoIt) *conf->variable = conf->default_val; *************** *** 709,715 **** --- 727,737 ---- return false; } if (DoIt) + { *conf->variable = dval; + if (makeDefault) + conf->default_val = dval; + } } else if (DoIt) *conf->variable = conf->default_val; *************** *** 742,753 **** --- 764,796 ---- 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,784 **** */ void SetConfigOption(const char *name, const char *value, GucContext ! context) { ! (void) set_config_option(name, value, context, true); } --- 819,827 ---- */ void SetConfigOption(const char *name, const char *value, GucContext ! context, bool makeDefault) { ! (void) set_config_option(name, value, context, true, makeDefault); } *************** *** 825,830 **** --- 868,925 ---- } 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]); + } + + Index: src/include/utils/guc.h =================================================================== RCS file: /home/projects/pgsql/cvsroot/pgsql/src/include/utils/guc.h,v retrieving revision 1.6 diff -c -r1.6 guc.h *** src/include/utils/guc.h 2001/03/22 04:01:12 1.6 --- src/include/utils/guc.h 2001/06/07 04:43:32 *************** *** 46,57 **** } GucContext; ! void SetConfigOption(const char *name, const char *value, GucContext context); 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); extern bool Debug_print_query; --- 46,58 ---- } GucContext; ! 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 makeDefault); ! void ShowAllGUCConfig(void); extern bool Debug_print_query;