aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/backend/utils/misc/guc.c15
-rw-r--r--src/test/regress/expected/guc.out20
-rw-r--r--src/test/regress/sql/guc.sql5
3 files changed, 31 insertions, 9 deletions
diff --git a/src/backend/utils/misc/guc.c b/src/backend/utils/misc/guc.c
index 87bc6887046..68b62d523dc 100644
--- a/src/backend/utils/misc/guc.c
+++ b/src/backend/utils/misc/guc.c
@@ -5368,13 +5368,14 @@ add_guc_variable(struct config_generic *var, int elevel)
/*
* Decide whether a proposed custom variable name is allowed.
*
- * It must be "identifier.identifier", where the rules for what is an
- * identifier agree with scan.l.
+ * It must be two or more identifiers separated by dots, where the rules
+ * for what is an identifier agree with scan.l. (If you change this rule,
+ * adjust the errdetail in find_option().)
*/
static bool
valid_custom_variable_name(const char *name)
{
- int num_sep = 0;
+ bool saw_sep = false;
bool name_start = true;
for (const char *p = name; *p; p++)
@@ -5383,7 +5384,7 @@ valid_custom_variable_name(const char *name)
{
if (name_start)
return false; /* empty name component */
- num_sep++;
+ saw_sep = true;
name_start = true;
}
else if (strchr("ABCDEFGHIJKLMNOPQRSTUVWXYZ"
@@ -5400,8 +5401,8 @@ valid_custom_variable_name(const char *name)
}
if (name_start)
return false; /* empty name component */
- /* OK if we had exactly one separator */
- return (num_sep == 1);
+ /* OK if we found at least one separator */
+ return saw_sep;
}
/*
@@ -5516,7 +5517,7 @@ find_option(const char *name, bool create_placeholders, bool skip_errors,
(errcode(ERRCODE_INVALID_NAME),
errmsg("invalid configuration parameter name \"%s\"",
name),
- errdetail("Custom parameter names must be of the form \"identifier.identifier\".")));
+ errdetail("Custom parameter names must be two or more simple identifiers separated by dots.")));
return NULL;
}
}
diff --git a/src/test/regress/expected/guc.out b/src/test/regress/expected/guc.out
index c55871a972e..59da91ff04d 100644
--- a/src/test/regress/expected/guc.out
+++ b/src/test/regress/expected/guc.out
@@ -515,6 +515,8 @@ SET no_such_variable TO 42;
ERROR: unrecognized configuration parameter "no_such_variable"
-- Test "custom" GUCs created on the fly (which aren't really an
-- intended feature, but many people use them).
+SHOW custom.my_guc; -- error, not known yet
+ERROR: unrecognized configuration parameter "custom.my_guc"
SET custom.my_guc = 42;
SHOW custom.my_guc;
custom.my_guc
@@ -522,14 +524,28 @@ SHOW custom.my_guc;
42
(1 row)
+RESET custom.my_guc; -- this makes it go to empty, not become unknown again
+SHOW custom.my_guc;
+ custom.my_guc
+---------------
+
+(1 row)
+
+SET custom.my.qualified.guc = 'foo';
+SHOW custom.my.qualified.guc;
+ custom.my.qualified.guc
+-------------------------
+ foo
+(1 row)
+
SET custom."bad-guc" = 42; -- disallowed because -c cannot set this name
ERROR: invalid configuration parameter name "custom.bad-guc"
-DETAIL: Custom parameter names must be of the form "identifier.identifier".
+DETAIL: Custom parameter names must be two or more simple identifiers separated by dots.
SHOW custom."bad-guc";
ERROR: unrecognized configuration parameter "custom.bad-guc"
SET special."weird name" = 'foo'; -- could be allowed, but we choose not to
ERROR: invalid configuration parameter name "special.weird name"
-DETAIL: Custom parameter names must be of the form "identifier.identifier".
+DETAIL: Custom parameter names must be two or more simple identifiers separated by dots.
SHOW special."weird name";
ERROR: unrecognized configuration parameter "special.weird name"
--
diff --git a/src/test/regress/sql/guc.sql b/src/test/regress/sql/guc.sql
index 3650188d9d7..c39c11388d5 100644
--- a/src/test/regress/sql/guc.sql
+++ b/src/test/regress/sql/guc.sql
@@ -151,8 +151,13 @@ SET no_such_variable TO 42;
-- Test "custom" GUCs created on the fly (which aren't really an
-- intended feature, but many people use them).
+SHOW custom.my_guc; -- error, not known yet
SET custom.my_guc = 42;
SHOW custom.my_guc;
+RESET custom.my_guc; -- this makes it go to empty, not become unknown again
+SHOW custom.my_guc;
+SET custom.my.qualified.guc = 'foo';
+SHOW custom.my.qualified.guc;
SET custom."bad-guc" = 42; -- disallowed because -c cannot set this name
SHOW custom."bad-guc";
SET special."weird name" = 'foo'; -- could be allowed, but we choose not to