Re: take 2: show all / reset all - Mailing list pgsql-patches

From Bruce Momjian
Subject Re: take 2: show all / reset all
Date
Msg-id 200106042131.f54LV4q13496@candle.pha.pa.us
Whole thread Raw
In response to take 2: show all / reset all  (Marko Kreen <marko@l-t.ee>)
List 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@candle.pha.pa.us               |  (610) 853-3000
  +  If your life is a hard drive,     |  830 Blythe Avenue
  +  Christ can be your backup.        |  Drexel Hill, Pennsylvania 19026

pgsql-patches by date:

Previous
From: Bruce Momjian
Date:
Subject: Re: unary plus
Next
From: Bruce Momjian
Date:
Subject: Re: Re: AW: [HACKERS] Re: Support for %TYPE in CREATE FUNCTION