Re: take 2: show all / reset all

From: Bruce Momjian <pgman(at)candle(dot)pha(dot)pa(dot)us>
To: Marko Kreen <marko(at)l-t(dot)ee>
Cc: pgsql-patches(at)postgresql(dot)org
Subject: Re: take 2: show all / reset all
Date: 2001-06-04 21:31:04
Message-ID: 200106042131.f54LV4q13496@candle.pha.pa.us
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-patches


I will make some manual patches to this before applying and show you the
changes. Thanks.

Your patch has been added to the PostgreSQL unapplied patches list at:

http://candle.pha.pa.us/cgi-bin/pgpatches

I will try to apply it within the next 48 hours.


>
> Ok, now I am awake. How about this one?
>
> reset all: command line and .conf options change defaults
> on RESET ALL those are restored.
>
> show all: GUC + non-GUC.
>
> --
> marko
>
>
>
> 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/02 11:04:32
> ***************
> *** 16,21 ****
> --- 16,24 ----
> <synopsis>
> RESET <replaceable class="PARAMETER">variable</replaceable>
> </synopsis>
> + <synopsis>
> + RESET ALL
> + </synopsis>
>
> <refsect2 id="R2-SQL-RESET-1">
> <title>Inputs</title>
> ***************
> *** 27,32 ****
> --- 30,43 ----
> <para>
> The name of a run-time parameter. See <xref
> linkend="sql-set" endterm="sql-set-title"> for a list.
> + </para>
> + </listitem>
> + </varlistentry>
> + <varlistentry>
> + <term>ALL</term>
> + <listitem>
> + <para>
> + Resets all run-time parameters to default values.
> </para>
> </listitem>
> </varlistentry>
> 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/02 11:04:32
> ***************
> *** 16,21 ****
> --- 16,24 ----
> <synopsis>
> SHOW <replaceable class="PARAMETER">name</replaceable>
> </synopsis>
> + <synopsis>
> + SHOW ALL
> + </synopsis>
>
> <refsect2 id="R2-SQL-SHOW-1">
> <title>Inputs</title>
> ***************
> *** 29,34 ****
> --- 32,45 ----
> The name of a run-time parameter. See
> <xref linkend="sql-set" endterm="sql-set-title">
> for a list.
> + </para>
> + </listitem>
> + </varlistentry>
> + <varlistentry>
> + <term>ALL</term>
> + <listitem>
> + <para>
> + Show all current session parameters.
> </para>
> </listitem>
> </varlistentry>
> 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/02 11:04:34
> ***************
> *** 724,736 ****
> 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)
> {
> --- 724,735 ----
> 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)
> {
> ***************
> *** 747,754 ****
> else if (strcasecmp(name, "server_encoding") == 0)
> show_server_encoding();
> else if (strcasecmp(name, "seed") == 0)
> show_random_seed();
> ! else
> {
> const char *val = GetConfigOption(name);
>
> --- 746,763 ----
> else if (strcasecmp(name, "server_encoding") == 0)
> show_server_encoding();
> else if (strcasecmp(name, "seed") == 0)
> + show_random_seed();
> + else if (strcasecmp(name, "all") == 0)
> + {
> + ShowAllGUCConfig();
> + show_date();
> + show_timezone();
> + show_DefaultXactIsoLevel();
> + show_XactIsoLevel();
> + show_client_encoding();
> + show_server_encoding();
> show_random_seed();
> ! } else
> {
> const char *val = GetConfigOption(name);
>
> ***************
> *** 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_date();
> ! 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.227
> diff -c -r2.227 gram.y
> *** src/backend/parser/gram.y 2001/05/27 09:59:29 2.227
> --- src/backend/parser/gram.y 2001/06/02 11:04:46
> ***************
> *** 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.215
> diff -c -r1.215 postmaster.c
> *** src/backend/postmaster/postmaster.c 2001/05/30 14:15:26 1.215
> --- src/backend/postmaster/postmaster.c 2001/06/02 11:04:52
> ***************
> *** 530,536 ****
> elog(ERROR, "-c %s requires argument", optarg);
> }
>
> ! SetConfigOption(name, value, PGC_POSTMASTER);
> free(name);
> if (value)
> free(value);
> --- 530,536 ----
> 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/02 11:04:57
> ***************
> *** 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.6
> diff -c -r1.6 guc-file.l
> *** src/backend/utils/misc/guc-file.l 2001/01/24 19:01:31 1.6
> --- src/backend/utils/misc/guc-file.l 2001/06/02 11:05:07
> ***************
> *** 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/02 11:05:10
> ***************
> *** 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,924 ----
> }
> 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 = *((struct config_string *) record)->variable;
> + 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/02 11:05:23
> ***************
> *** 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;
>
> ---------------------------(end of broadcast)---------------------------
> TIP 5: Have you checked our extensive FAQ?
>
> http://www.postgresql.org/users-lounge/docs/faq.html
>

--
Bruce Momjian | http://candle.pha.pa.us
pgman(at)candle(dot)pha(dot)pa(dot)us | (610) 853-3000
+ If your life is a hard drive, | 830 Blythe Avenue
+ Christ can be your backup. | Drexel Hill, Pennsylvania 19026

In response to

Browse pgsql-patches by date

  From Date Subject
Next Message Bruce Momjian 2001-06-04 23:25:54 Re: Re: AW: [HACKERS] Re: Support for %TYPE in CREATE FUNCTION
Previous Message Bruce Momjian 2001-06-04 21:20:09 Re: unary plus