take 2: show all / reset all

From: Marko Kreen <marko(at)l-t(dot)ee>
To: pgsql-patches(at)postgresql(dot)org
Subject: take 2: show all / reset all
Date: 2001-06-02 11:18:07
Message-ID: 20010602131807.A16109@l-t.ee
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-patches


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;

Responses

Browse pgsql-patches by date

  From Date Subject
Next Message Bruce Momjian 2001-06-02 14:12:54 Re: show all;
Previous Message Gerhard Häring 2001-06-02 08:07:59 Patch for incomplete libpq DLL .def file