aboutsummaryrefslogtreecommitdiff
path: root/src/backend/utils/misc/guc.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/backend/utils/misc/guc.c')
-rw-r--r--src/backend/utils/misc/guc.c69
1 files changed, 33 insertions, 36 deletions
diff --git a/src/backend/utils/misc/guc.c b/src/backend/utils/misc/guc.c
index 58ff0918a71..c90c52e8ccf 100644
--- a/src/backend/utils/misc/guc.c
+++ b/src/backend/utils/misc/guc.c
@@ -5,7 +5,7 @@
* command, configuration file, and command line options.
* See src/backend/utils/misc/README for more information.
*
- * $Header: /cvsroot/pgsql/src/backend/utils/misc/guc.c,v 1.74 2002/07/20 06:17:43 momjian Exp $
+ * $Header: /cvsroot/pgsql/src/backend/utils/misc/guc.c,v 1.75 2002/07/20 15:12:55 tgl Exp $
*
* Copyright 2000 by PostgreSQL Global Development Group
* Written by Peter Eisentraut <peter_e@gmx.net>.
@@ -2185,13 +2185,13 @@ set_config_by_name(PG_FUNCTION_ARGS)
elog(ERROR, "SET variable name is required");
/* Get the GUC variable name */
- name = DatumGetCString(DirectFunctionCall1(textout, PointerGetDatum(PG_GETARG_TEXT_P(0))));
+ name = DatumGetCString(DirectFunctionCall1(textout, PG_GETARG_DATUM(0)));
/* Get the desired value or set to NULL for a reset request */
if (PG_ARGISNULL(1))
value = NULL;
else
- value = DatumGetCString(DirectFunctionCall1(textout, PointerGetDatum(PG_GETARG_TEXT_P(1))));
+ value = DatumGetCString(DirectFunctionCall1(textout, PG_GETARG_DATUM(1)));
/*
* Get the desired state of is_local. Default to false
@@ -2211,7 +2211,7 @@ set_config_by_name(PG_FUNCTION_ARGS)
true);
/* get the new current value */
- new_value = GetConfigOptionByName(name);
+ new_value = GetConfigOptionByName(name, NULL);
/* Convert return string to text */
result_text = DatumGetTextP(DirectFunctionCall1(textin, CStringGetDatum(new_value)));
@@ -2259,21 +2259,22 @@ ShowGUCConfigOption(const char *name)
TupOutputState *tstate;
TupleDesc tupdesc;
CommandDest dest = whereToSendOutput;
+ const char *varname;
char *value;
+ /* Get the value and canonical spelling of name */
+ value = GetConfigOptionByName(name, &varname);
+
/* need a tuple descriptor representing a single TEXT column */
tupdesc = CreateTemplateTupleDesc(1, WITHOUTOID);
- TupleDescInitEntry(tupdesc, (AttrNumber) 1, (char *) name,
+ TupleDescInitEntry(tupdesc, (AttrNumber) 1, (char *) varname,
TEXTOID, -1, 0, false);
/* prepare for projection of tuples */
tstate = begin_tup_output_tupdesc(dest, tupdesc);
- /* Get the value */
- value = GetConfigOptionByName(name);
-
/* Send it */
- PROJECT_LINE_OF_TEXT(value);
+ PROJECT_LINE_OF_TEXT(tstate, value);
end_tup_output(tstate);
}
@@ -2288,8 +2289,6 @@ ShowAllGUCConfig(void)
TupOutputState *tstate;
TupleDesc tupdesc;
CommandDest dest = whereToSendOutput;
- char *name;
- char *value;
char *values[2];
/* need a tuple descriptor representing two TEXT columns */
@@ -2304,35 +2303,32 @@ ShowAllGUCConfig(void)
for (i = 0; i < num_guc_variables; i++)
{
- /* Get the next GUC variable name and value */
- value = GetConfigOptionByNum(i, &name);
+ struct config_generic *conf = guc_variables[i];
+
+ if (conf->flags & GUC_NO_SHOW_ALL)
+ continue;
/* assign to the values array */
- values[0] = name;
- values[1] = value;
+ values[0] = (char *) conf->name;
+ values[1] = _ShowOption(conf);
/* send it to dest */
do_tup_output(tstate, values);
- /*
- * clean up
- */
- /* we always should have a name */
- pfree(name);
-
- /* but value can be returned to us as a NULL */
- if (value != NULL)
- pfree(value);
+ /* clean up */
+ if (values[1] != NULL)
+ pfree(values[1]);
}
end_tup_output(tstate);
}
/*
- * Return GUC variable value by name
+ * Return GUC variable value by name; optionally return canonical
+ * form of name. Return value is palloc'd.
*/
char *
-GetConfigOptionByName(const char *name)
+GetConfigOptionByName(const char *name, const char **varname)
{
struct config_generic *record;
@@ -2340,24 +2336,25 @@ GetConfigOptionByName(const char *name)
if (record == NULL)
elog(ERROR, "Option '%s' is not recognized", name);
+ if (varname)
+ *varname = record->name;
+
return _ShowOption(record);
}
/*
- * Return GUC variable value and set varname for a specific
- * variable by number.
+ * Return GUC variable value by variable number; optionally return canonical
+ * form of name. Return value is palloc'd.
*/
char *
-GetConfigOptionByNum(int varnum, char **varname)
+GetConfigOptionByNum(int varnum, const char **varname)
{
struct config_generic *conf = guc_variables[varnum];
- *varname = pstrdup(conf->name);
+ if (varname)
+ *varname = conf->name;
- if ((conf->flags & GUC_NO_SHOW_ALL) == 0)
- return _ShowOption(conf);
- else
- return NULL;
+ return _ShowOption(conf);
}
/*
@@ -2381,10 +2378,10 @@ show_config_by_name(PG_FUNCTION_ARGS)
text *result_text;
/* Get the GUC variable name */
- varname = DatumGetCString(DirectFunctionCall1(textout, PointerGetDatum(PG_GETARG_TEXT_P(0))));
+ varname = DatumGetCString(DirectFunctionCall1(textout, PG_GETARG_DATUM(0)));
/* Get the value */
- varval = GetConfigOptionByName(varname);
+ varval = GetConfigOptionByName(varname, NULL);
/* Convert to text */
result_text = DatumGetTextP(DirectFunctionCall1(textin, CStringGetDatum(varval)));