typedef struct
{
NameData name;
- NameData value;
int flags;
+ char value[1];
} ParamEntry;
if (value)
{
ParamEntry *entry;
- entry = (ParamEntry *) palloc(sizeof (ParamEntry));
+ entry = (ParamEntry *) palloc0(sizeof (ParamEntry) + strlen(value));
strlcpy((char *) (&entry->name), name, NAMEDATALEN);
- strlcpy((char *) (&entry->value), value, NAMEDATALEN);
+ strcpy((char *) (entry->value), value);
entry->flags = flags;
param_list = lappend(param_list, entry);
foreach (lc, param_list)
{
ParamEntry *entry = (ParamEntry *) lfirst(lc);
- const char *value = NameStr(entry->value);
+ const char *value = entry->value;
if (strlen(value) == 0)
value = "''";
if (flags & GUC_LIST_INPUT)
return value;
+ if (flags & GUC_QUOTE_LITERAL)
+ {
+ char *newval = palloc(strlen(value) + 3);
+ int len = strlen(value);
+
+ newval[0] = '\'';
+ strcpy(newval + 1, value);
+ newval[len + 1] = '\'';
+ newval[len + 2] = '\0';
+ return newval;
+ }
+
/*
* Otherwise quote the value. quote_identifier() takes care of correctly
* quoting the value when needed, including GUC_UNIT_MEMORY and
#define GUC_UNIT (GUC_UNIT_MEMORY | GUC_UNIT_TIME)
+/* quote as literal while sending to remote node. */
+#define GUC_QUOTE_LITERAL 0x100000
/* GUC vars that are actually declared in guc.c, rather than elsewhere */
extern bool log_duration;