From 31ec957a1500380d7f9a9e81cd344cc680ca67f6 Mon Sep 17 00:00:00 2001 From: Tom Lane Date: Wed, 19 Nov 2008 02:07:07 +0000 Subject: [PATCH] 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 ... --- src/backend/utils/misc/guc.c | 27 +++++++++++++++++++++++++-- 1 file changed, 25 insertions(+), 2 deletions(-) diff --git a/src/backend/utils/misc/guc.c b/src/backend/utils/misc/guc.c index 3e967527bf..2d1babc5ae 100644 --- a/src/backend/utils/misc/guc.c +++ b/src/backend/utils/misc/guc.c @@ -10,7 +10,7 @@ * Written by Peter Eisentraut . * * 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) const char **nameAddr = &name; const char *value; struct config_string *pHolder; + GucContext phcontext; struct config_generic **res; /* @@ -5702,6 +5703,28 @@ define_custom_variable(struct config_generic * 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. * @@ -5713,7 +5736,7 @@ define_custom_variable(struct config_generic * variable) if (value) set_config_option(name, value, - pHolder->gen.context, pHolder->gen.source, + phcontext, pHolder->gen.source, GUC_ACTION_SET, true); /*