PostgreSQL Source Code  git master
help_config.c
Go to the documentation of this file.
1 /*-------------------------------------------------------------------------
2  * help_config.c
3  *
4  * Displays available options under grand unified configuration scheme
5  *
6  * Options whose flag bits are set to GUC_NO_SHOW_ALL, GUC_NOT_IN_SAMPLE,
7  * or GUC_DISALLOW_IN_FILE are not displayed, unless the user specifically
8  * requests that variable by name
9  *
10  * Portions Copyright (c) 1996-2023, PostgreSQL Global Development Group
11  *
12  * IDENTIFICATION
13  * src/backend/utils/misc/help_config.c
14  *
15  *-------------------------------------------------------------------------
16  */
17 #include "postgres.h"
18 
19 #include <limits.h>
20 #include <unistd.h>
21 
22 #include "utils/guc_tables.h"
23 #include "utils/help_config.h"
24 
25 
26 /*
27  * This union allows us to mix the numerous different types of structs
28  * that we are organizing.
29  */
30 typedef union
31 {
32  struct config_generic generic;
33  struct config_bool _bool;
34  struct config_real real;
35  struct config_int integer;
36  struct config_string string;
37  struct config_enum _enum;
38 } mixedStruct;
39 
40 
41 static void printMixedStruct(mixedStruct *structToPrint);
42 static bool displayStruct(mixedStruct *structToDisplay);
43 
44 
45 void
47 {
48  struct config_generic **guc_vars;
49  int numOpts,
50  i;
51 
52  /* Initialize the GUC hash table */
54 
55  guc_vars = get_guc_variables(&numOpts);
56 
57  for (i = 0; i < numOpts; i++)
58  {
59  mixedStruct *var = (mixedStruct *) guc_vars[i];
60 
61  if (displayStruct(var))
62  printMixedStruct(var);
63  }
64 
65  exit(0);
66 }
67 
68 
69 /*
70  * This function will return true if the struct passed to it
71  * should be displayed to the user.
72  */
73 static bool
74 displayStruct(mixedStruct *structToDisplay)
75 {
76  return !(structToDisplay->generic.flags & (GUC_NO_SHOW_ALL |
79 }
80 
81 
82 /*
83  * This function prints out the generic struct passed to it. It will print out
84  * a different format, depending on what the user wants to see.
85  */
86 static void
88 {
89  printf("%s\t%s\t%s\t",
90  structToPrint->generic.name,
91  GucContext_Names[structToPrint->generic.context],
92  _(config_group_names[structToPrint->generic.group]));
93 
94  switch (structToPrint->generic.vartype)
95  {
96 
97  case PGC_BOOL:
98  printf("BOOLEAN\t%s\t\t\t",
99  (structToPrint->_bool.reset_val == 0) ?
100  "FALSE" : "TRUE");
101  break;
102 
103  case PGC_INT:
104  printf("INTEGER\t%d\t%d\t%d\t",
105  structToPrint->integer.reset_val,
106  structToPrint->integer.min,
107  structToPrint->integer.max);
108  break;
109 
110  case PGC_REAL:
111  printf("REAL\t%g\t%g\t%g\t",
112  structToPrint->real.reset_val,
113  structToPrint->real.min,
114  structToPrint->real.max);
115  break;
116 
117  case PGC_STRING:
118  printf("STRING\t%s\t\t\t",
119  structToPrint->string.boot_val ? structToPrint->string.boot_val : "");
120  break;
121 
122  case PGC_ENUM:
123  printf("ENUM\t%s\t\t\t",
124  config_enum_lookup_by_value(&structToPrint->_enum,
125  structToPrint->_enum.boot_val));
126  break;
127 
128  default:
129  write_stderr("internal error: unrecognized run-time parameter type\n");
130  break;
131  }
132 
133  printf("%s\t%s\n",
134  (structToPrint->generic.short_desc == NULL) ? "" : _(structToPrint->generic.short_desc),
135  (structToPrint->generic.long_desc == NULL) ? "" : _(structToPrint->generic.long_desc));
136 }
#define write_stderr(str)
Definition: parallel.c:184
#define _(x)
Definition: elog.c:91
const char * config_enum_lookup_by_value(struct config_enum *record, int val)
Definition: guc.c:2957
struct config_generic ** get_guc_variables(int *num_vars)
Definition: guc.c:864
void build_guc_variables(void)
Definition: guc.c:895
#define GUC_DISALLOW_IN_FILE
Definition: guc.h:216
#define GUC_NO_SHOW_ALL
Definition: guc.h:210
#define GUC_NOT_IN_SAMPLE
Definition: guc.h:215
const char *const GucContext_Names[]
Definition: guc_tables.c:601
const char *const config_group_names[]
Definition: guc_tables.c:644
@ PGC_BOOL
Definition: guc_tables.h:25
@ PGC_STRING
Definition: guc_tables.h:28
@ PGC_ENUM
Definition: guc_tables.h:29
@ PGC_REAL
Definition: guc_tables.h:27
@ PGC_INT
Definition: guc_tables.h:26
static void printMixedStruct(mixedStruct *structToPrint)
Definition: help_config.c:87
void GucInfoMain(void)
Definition: help_config.c:46
static bool displayStruct(mixedStruct *structToDisplay)
Definition: help_config.c:74
int i
Definition: isn.c:73
exit(1)
#define printf(...)
Definition: port.h:244
char string[11]
Definition: preproc-type.c:52
bool reset_val
Definition: guc_tables.h:207
enum config_group group
Definition: guc_tables.h:157
GucContext context
Definition: guc_tables.h:156
const char * long_desc
Definition: guc_tables.h:159
const char * name
Definition: guc_tables.h:155
const char * short_desc
Definition: guc_tables.h:158
enum config_type vartype
Definition: guc_tables.h:162
int reset_val
Definition: guc_tables.h:223
double reset_val
Definition: guc_tables.h:239
double min
Definition: guc_tables.h:233
double max
Definition: guc_tables.h:234
const char * boot_val
Definition: guc_tables.h:248
struct config_enum _enum
Definition: help_config.c:37
struct config_int integer
Definition: help_config.c:35
struct config_generic generic
Definition: help_config.c:32
struct config_bool _bool
Definition: help_config.c:33
struct config_real real
Definition: help_config.c:34
struct config_string string
Definition: help_config.c:36