PostgreSQL Source Code  git master
 All Data Structures Namespaces Files Functions Variables Typedefs Enumerations Enumerator Macros
guc_tables.h
Go to the documentation of this file.
1 /*-------------------------------------------------------------------------
2  *
3  * guc_tables.h
4  * Declarations of tables used by GUC.
5  *
6  * See src/backend/utils/misc/README for design notes.
7  *
8  * Portions Copyright (c) 1996-2017, PostgreSQL Global Development Group
9  *
10  * src/include/utils/guc_tables.h
11  *
12  *-------------------------------------------------------------------------
13  */
14 #ifndef GUC_TABLES_H
15 #define GUC_TABLES_H 1
16 
17 #include "utils/guc.h"
18 
19 /*
20  * GUC supports these types of variables:
21  */
23 {
29 };
30 
32 {
33  bool boolval;
34  int intval;
35  double realval;
36  char *stringval;
37  int enumval;
38 };
39 
40 /*
41  * The actual value of a GUC variable can include a malloc'd opaque struct
42  * "extra", which is created by its check_hook and used by its assign_hook.
43  */
44 typedef struct config_var_value
45 {
47  void *extra;
49 
50 /*
51  * Groupings to help organize all the run-time options for display
52  */
54 {
67  WAL,
103 };
104 
105 /*
106  * Stack entry for saving the state a variable had prior to an uncommitted
107  * transactional change
108  */
109 typedef enum
110 {
111  /* This is almost GucAction, but we need a fourth state for SET+LOCAL */
112  GUC_SAVE, /* entry caused by function SET option */
113  GUC_SET, /* entry caused by plain SET command */
114  GUC_LOCAL, /* entry caused by SET LOCAL command */
115  GUC_SET_LOCAL /* entry caused by SET then SET LOCAL */
116 } GucStackState;
117 
118 typedef struct guc_stack
119 {
120  struct guc_stack *prev; /* previous stack item, if any */
121  int nest_level; /* nesting depth at which we made entry */
122  GucStackState state; /* see enum above */
123  GucSource source; /* source of the prior value */
124  /* masked value's source must be PGC_S_SESSION, so no need to store it */
125  GucContext scontext; /* context that set the prior value */
126  GucContext masked_scontext; /* context that set the masked value */
127  config_var_value prior; /* previous value of variable */
128  config_var_value masked; /* SET value in a GUC_SET_LOCAL entry */
129 } GucStack;
130 
131 /*
132  * Generic fields applicable to all types of variables
133  *
134  * The short description should be less than 80 chars in length. Some
135  * applications may use the long description as well, and will append
136  * it to the short description. (separated by a newline or '. ')
137  *
138  * Note that sourcefile/sourceline are kept here, and not pushed into stacked
139  * values, although in principle they belong with some stacked value if the
140  * active value is session- or transaction-local. This is to avoid bloating
141  * stack entries. We know they are only relevant when source == PGC_S_FILE.
142  */
144 {
145  /* constant fields, must be set correctly in initial value: */
146  const char *name; /* name of variable - MUST BE FIRST */
147  GucContext context; /* context required to set the variable */
148  enum config_group group; /* to help organize variables by function */
149  const char *short_desc; /* short desc. of this variable's purpose */
150  const char *long_desc; /* long desc. of this variable's purpose */
151  int flags; /* flag bits, see guc.h */
152  /* variable fields, initialized at runtime: */
153  enum config_type vartype; /* type of variable (set only at startup) */
154  int status; /* status bits, see below */
155  GucSource source; /* source of the current actual value */
156  GucSource reset_source; /* source of the reset_value */
157  GucContext scontext; /* context that set the current value */
158  GucContext reset_scontext; /* context that set the reset value */
159  GucStack *stack; /* stacked prior values */
160  void *extra; /* "extra" pointer for current actual value */
161  char *sourcefile; /* file current setting is from (NULL if not
162  * set in config file) */
163  int sourceline; /* line in source file */
164 };
165 
166 /* bit values in status field */
167 #define GUC_IS_IN_FILE 0x0001 /* found it in config file */
168 /*
169  * Caution: the GUC_IS_IN_FILE bit is transient state for ProcessConfigFile.
170  * Do not assume that its value represents useful information elsewhere.
171  */
172 #define GUC_PENDING_RESTART 0x0002
173 
174 
175 /* GUC records for specific variable types */
176 
178 {
180  /* constant fields, must be set correctly in initial value: */
181  bool *variable;
182  bool boot_val;
186  /* variable fields, initialized at runtime: */
187  bool reset_val;
188  void *reset_extra;
189 };
190 
192 {
194  /* constant fields, must be set correctly in initial value: */
195  int *variable;
196  int boot_val;
197  int min;
198  int max;
202  /* variable fields, initialized at runtime: */
204  void *reset_extra;
205 };
206 
208 {
210  /* constant fields, must be set correctly in initial value: */
211  double *variable;
212  double boot_val;
213  double min;
214  double max;
218  /* variable fields, initialized at runtime: */
219  double reset_val;
220  void *reset_extra;
221 };
222 
224 {
226  /* constant fields, must be set correctly in initial value: */
227  char **variable;
228  const char *boot_val;
232  /* variable fields, initialized at runtime: */
233  char *reset_val;
234  void *reset_extra;
235 };
236 
238 {
240  /* constant fields, must be set correctly in initial value: */
241  int *variable;
242  int boot_val;
243  const struct config_enum_entry *options;
247  /* variable fields, initialized at runtime: */
249  void *reset_extra;
250 };
251 
252 /* constant tables corresponding to enums above and in guc.h */
253 extern const char *const config_group_names[];
254 extern const char *const config_type_names[];
255 extern const char *const GucContext_Names[];
256 extern const char *const GucSource_Names[];
257 
258 /* get the current set of variables */
259 extern struct config_generic **get_guc_variables(void);
260 
261 extern void build_guc_variables(void);
262 
263 /* search in enum options */
264 extern const char *config_enum_lookup_by_value(struct config_enum *record, int val);
265 extern bool config_enum_lookup_by_name(struct config_enum *record,
266  const char *value, int *retval);
267 
268 #endif /* GUC_TABLES_H */
struct guc_stack * prev
Definition: guc_tables.h:120
GucSource source
Definition: guc_tables.h:155
GucEnumCheckHook check_hook
Definition: guc_tables.h:244
void(* GucRealAssignHook)(double newval, void *extra)
Definition: guc.h:182
void * reset_extra
Definition: guc_tables.h:204
GucContext
Definition: guc.h:68
union config_var_val val
Definition: guc_tables.h:46
config_group
Definition: guc_tables.h:53
const char * config_enum_lookup_by_value(struct config_enum *record, int val)
Definition: guc.c:5626
int nest_level
Definition: guc_tables.h:121
const char * long_desc
Definition: guc_tables.h:150
const char *const config_type_names[]
Definition: guc.c:673
GucRealAssignHook assign_hook
Definition: guc_tables.h:216
double reset_val
Definition: guc_tables.h:219
void(* GucStringAssignHook)(const char *newval, void *extra)
Definition: guc.h:183
Definition: guc.h:164
void(* GucBoolAssignHook)(bool newval, void *extra)
Definition: guc.h:180
char ** variable
Definition: guc_tables.h:227
const char * name
Definition: guc_tables.h:146
bool * variable
Definition: guc_tables.h:181
const char * short_desc
Definition: guc_tables.h:149
int boot_val
Definition: guc_tables.h:196
GucStringCheckHook check_hook
Definition: guc_tables.h:229
const char * boot_val
Definition: guc_tables.h:228
GucEnumAssignHook assign_hook
Definition: guc_tables.h:245
GucBoolAssignHook assign_hook
Definition: guc_tables.h:184
config_var_value masked
Definition: guc_tables.h:128
bool(* GucStringCheckHook)(char **newval, void **extra, GucSource source)
Definition: guc.h:177
void build_guc_variables(void)
Definition: guc.c:4208
GucRealCheckHook check_hook
Definition: guc_tables.h:215
bool(* GucEnumCheckHook)(int *newval, void **extra, GucSource source)
Definition: guc.h:178
GucContext scontext
Definition: guc_tables.h:157
struct config_var_value config_var_value
GucIntAssignHook assign_hook
Definition: guc_tables.h:200
GucIntCheckHook check_hook
Definition: guc_tables.h:199
GucStackState
Definition: guc_tables.h:109
GucSource
Definition: guc.h:105
Definition: guc_tables.h:67
GucShowHook show_hook
Definition: guc_tables.h:201
int * variable
Definition: guc_tables.h:195
int * variable
Definition: guc_tables.h:241
void * reset_extra
Definition: guc_tables.h:249
static struct @121 value
char * sourcefile
Definition: guc_tables.h:161
bool boot_val
Definition: guc_tables.h:182
const struct config_enum_entry * options
Definition: guc_tables.h:243
bool config_enum_lookup_by_name(struct config_enum *record, const char *value, int *retval)
Definition: guc.c:5649
GucSource source
Definition: guc_tables.h:123
GucShowHook show_hook
Definition: guc_tables.h:231
GucSource reset_source
Definition: guc_tables.h:156
struct config_generic gen
Definition: guc_tables.h:179
struct config_generic gen
Definition: guc_tables.h:193
GucContext masked_scontext
Definition: guc_tables.h:126
GucShowHook show_hook
Definition: guc_tables.h:217
double * variable
Definition: guc_tables.h:211
const char *const config_group_names[]
Definition: guc.c:566
const char *const GucContext_Names[]
Definition: guc.c:529
bool(* GucIntCheckHook)(int *newval, void **extra, GucSource source)
Definition: guc.h:175
enum config_type vartype
Definition: guc_tables.h:153
void * reset_extra
Definition: guc_tables.h:220
GucShowHook show_hook
Definition: guc_tables.h:246
GucContext scontext
Definition: guc_tables.h:125
config_type
Definition: guc_tables.h:22
struct config_generic gen
Definition: guc_tables.h:239
double max
Definition: guc_tables.h:214
GucBoolCheckHook check_hook
Definition: guc_tables.h:183
struct guc_stack GucStack
GucShowHook show_hook
Definition: guc_tables.h:185
const char *const GucSource_Names[]
Definition: guc.c:545
struct config_generic gen
Definition: guc_tables.h:225
void(* GucIntAssignHook)(int newval, void *extra)
Definition: guc.h:181
struct config_generic ** get_guc_variables(void)
Definition: guc.c:4196
char * reset_val
Definition: guc_tables.h:233
GucStackState state
Definition: guc_tables.h:122
GucStringAssignHook assign_hook
Definition: guc_tables.h:230
double boot_val
Definition: guc_tables.h:212
bool(* GucRealCheckHook)(double *newval, void **extra, GucSource source)
Definition: guc.h:176
double min
Definition: guc_tables.h:213
void * reset_extra
Definition: guc_tables.h:234
const char *(* GucShowHook)(void)
Definition: guc.h:186
void * reset_extra
Definition: guc_tables.h:188
char * stringval
Definition: guc_tables.h:36
GucStack * stack
Definition: guc_tables.h:159
enum config_group group
Definition: guc_tables.h:148
void(* GucEnumAssignHook)(int newval, void *extra)
Definition: guc.h:184
double realval
Definition: guc_tables.h:35
bool reset_val
Definition: guc_tables.h:187
long val
Definition: informix.c:689
config_var_value prior
Definition: guc_tables.h:127
GucContext context
Definition: guc_tables.h:147
bool(* GucBoolCheckHook)(bool *newval, void **extra, GucSource source)
Definition: guc.h:174
struct config_generic gen
Definition: guc_tables.h:209
GucContext reset_scontext
Definition: guc_tables.h:158
int reset_val
Definition: guc_tables.h:203