From 8b632e14022f3a2dd15cbbba81fd83d26925466e Mon Sep 17 00:00:00 2001 From: Peter Eisentraut Date: Fri, 3 Oct 2025 08:27:18 +0200 Subject: [PATCH v1 5/8] Change config_generic.vartype to be initialized at compile time Previously, this was initialized at run time so that it did not have to be maintained by hand in guc_tables.c, but since that table is now generated anyway, we might as well generate this bit as well. --- src/backend/utils/misc/gen_guc_tables.pl | 3 ++- src/backend/utils/misc/guc.c | 28 +----------------------- src/include/utils/guc_tables.h | 2 +- 3 files changed, 4 insertions(+), 29 deletions(-) diff --git a/src/backend/utils/misc/gen_guc_tables.pl b/src/backend/utils/misc/gen_guc_tables.pl index b221fd8c71e..8a416ca48d1 100644 --- a/src/backend/utils/misc/gen_guc_tables.pl +++ b/src/backend/utils/misc/gen_guc_tables.pl @@ -64,6 +64,7 @@ sub print_one_table printf $ofh "\t\t\t.short_desc = gettext_noop(%s),\n", dquote($entry->{short_desc}); printf $ofh "\t\t\t.long_desc = gettext_noop(%s),\n", dquote($entry->{long_desc}) if $entry->{long_desc}; printf $ofh "\t\t\t.flags = %s,\n", $entry->{flags} if $entry->{flags}; + printf $ofh "\t\t\t.vartype = %s,\n", ('PGC_' . uc($type)); print $ofh "\t\t},\n"; printf $ofh "\t\t.variable = &%s,\n", $entry->{variable}; printf $ofh "\t\t.boot_val = %s,\n", $entry->{boot_val}; @@ -79,7 +80,7 @@ sub print_one_table } print $ofh "\t/* End-of-list marker */\n"; - print $ofh "\t{0}\n"; + print $ofh "\t{{0}}\n"; print $ofh "};\n"; return; diff --git a/src/backend/utils/misc/guc.c b/src/backend/utils/misc/guc.c index d3c3179a053..647a0166adc 100644 --- a/src/backend/utils/misc/guc.c +++ b/src/backend/utils/misc/guc.c @@ -889,48 +889,22 @@ build_guc_variables(void) ALLOCSET_DEFAULT_SIZES); /* - * Count all the built-in variables, and set their vartypes correctly. + * Count all the built-in variables. */ for (int i = 0; ConfigureNamesBool[i].gen.name; i++) - { - struct config_bool *conf = &ConfigureNamesBool[i]; - - /* Rather than requiring vartype to be filled in by hand, do this: */ - conf->gen.vartype = PGC_BOOL; num_vars++; - } for (int i = 0; ConfigureNamesInt[i].gen.name; i++) - { - struct config_int *conf = &ConfigureNamesInt[i]; - - conf->gen.vartype = PGC_INT; num_vars++; - } for (int i = 0; ConfigureNamesReal[i].gen.name; i++) - { - struct config_real *conf = &ConfigureNamesReal[i]; - - conf->gen.vartype = PGC_REAL; num_vars++; - } for (int i = 0; ConfigureNamesString[i].gen.name; i++) - { - struct config_string *conf = &ConfigureNamesString[i]; - - conf->gen.vartype = PGC_STRING; num_vars++; - } for (int i = 0; ConfigureNamesEnum[i].gen.name; i++) - { - struct config_enum *conf = &ConfigureNamesEnum[i]; - - conf->gen.vartype = PGC_ENUM; num_vars++; - } /* * Create hash table with 20% slack diff --git a/src/include/utils/guc_tables.h b/src/include/utils/guc_tables.h index c5776be029b..3de3d809545 100644 --- a/src/include/utils/guc_tables.h +++ b/src/include/utils/guc_tables.h @@ -177,8 +177,8 @@ struct config_generic const char *short_desc; /* short desc. of this variable's purpose */ const char *long_desc; /* long desc. of this variable's purpose */ int flags; /* flag bits, see guc.h */ + enum config_type vartype; /* type of variable */ /* variable fields, initialized at runtime: */ - enum config_type vartype; /* type of variable (set only at startup) */ int status; /* status bits, see below */ GucSource source; /* source of the current actual value */ GucSource reset_source; /* source of the reset_value */ -- 2.51.0