Commit 31ec957a authored by Tom Lane's avatar Tom Lane

Fix define_custom_variable so that SUSET custom variables behave

somewhat reasonably.  It's not perfect, but it beats the kluge
proposed in the auto-explain patch ...
parent cd35e9d7
...@@ -10,7 +10,7 @@ ...@@ -10,7 +10,7 @@
* Written by Peter Eisentraut <peter_e@gmx.net>. * Written by Peter Eisentraut <peter_e@gmx.net>.
* *
* IDENTIFICATION * IDENTIFICATION
* $PostgreSQL: pgsql/src/backend/utils/misc/guc.c,v 1.478 2008/11/19 01:10:23 tgl Exp $ * $PostgreSQL: pgsql/src/backend/utils/misc/guc.c,v 1.479 2008/11/19 02:07:07 tgl Exp $
* *
*-------------------------------------------------------------------- *--------------------------------------------------------------------
*/ */
...@@ -5657,6 +5657,7 @@ define_custom_variable(struct config_generic * variable) ...@@ -5657,6 +5657,7 @@ define_custom_variable(struct config_generic * variable)
const char **nameAddr = &name; const char **nameAddr = &name;
const char *value; const char *value;
struct config_string *pHolder; struct config_string *pHolder;
GucContext phcontext;
struct config_generic **res; struct config_generic **res;
/* /*
...@@ -5702,6 +5703,28 @@ define_custom_variable(struct config_generic * variable) ...@@ -5702,6 +5703,28 @@ define_custom_variable(struct config_generic * variable)
*/ */
*res = variable; *res = variable;
/*
* Infer context for assignment based on source of existing value.
* We can't tell this with exact accuracy, but we can at least do
* something reasonable in typical cases.
*/
switch (pHolder->gen.source)
{
case PGC_S_DEFAULT:
case PGC_S_ENV_VAR:
case PGC_S_FILE:
case PGC_S_ARGV:
phcontext = PGC_SIGHUP;
break;
case PGC_S_DATABASE:
case PGC_S_USER:
case PGC_S_CLIENT:
case PGC_S_SESSION:
default:
phcontext = PGC_USERSET;
break;
}
/* /*
* Assign the string value stored in the placeholder to the real variable. * Assign the string value stored in the placeholder to the real variable.
* *
...@@ -5713,7 +5736,7 @@ define_custom_variable(struct config_generic * variable) ...@@ -5713,7 +5736,7 @@ define_custom_variable(struct config_generic * variable)
if (value) if (value)
set_config_option(name, value, set_config_option(name, value,
pHolder->gen.context, pHolder->gen.source, phcontext, pHolder->gen.source,
GUC_ACTION_SET, true); GUC_ACTION_SET, true);
/* /*
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment