Coverage Report

Created: 2026-09-28 06:55

next uncovered line (L), next uncovered region (R), next uncovered branch (B)
/src/postgres/src/backend/utils/misc/help_config.c
Line
Count
Source
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-2026, 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
static void printMixedStruct(const struct config_generic *structToPrint);
27
static bool displayStruct(const struct config_generic *structToDisplay);
28
29
30
void
31
GucInfoMain(void)
32
0
{
33
0
  struct config_generic **guc_vars;
34
0
  int     numOpts;
35
36
  /* Initialize the GUC hash table */
37
0
  build_guc_variables();
38
39
0
  guc_vars = get_guc_variables(&numOpts);
40
41
0
  for (int i = 0; i < numOpts; i++)
42
0
  {
43
0
    const struct config_generic *var = guc_vars[i];
44
45
0
    if (displayStruct(var))
46
0
      printMixedStruct(var);
47
0
  }
48
49
0
  exit(0);
50
0
}
51
52
53
/*
54
 * This function will return true if the struct passed to it
55
 * should be displayed to the user.
56
 */
57
static bool
58
displayStruct(const struct config_generic *structToDisplay)
59
0
{
60
0
  return !(structToDisplay->flags & (GUC_NO_SHOW_ALL |
61
0
                     GUC_NOT_IN_SAMPLE |
62
0
                     GUC_DISALLOW_IN_FILE));
63
0
}
64
65
66
/*
67
 * This function prints out the generic struct passed to it. It will print out
68
 * a different format, depending on what the user wants to see.
69
 */
70
static void
71
printMixedStruct(const struct config_generic *structToPrint)
72
0
{
73
0
  printf("%s\t%s\t%s\t",
74
0
       structToPrint->name,
75
0
       GucContext_Names[structToPrint->context],
76
0
       _(config_group_names[structToPrint->group]));
77
78
0
  switch (structToPrint->vartype)
79
0
  {
80
81
0
    case PGC_BOOL:
82
0
      printf("BOOLEAN\t%s\t\t\t",
83
0
           (structToPrint->_bool.reset_val == 0) ?
84
0
           "FALSE" : "TRUE");
85
0
      break;
86
87
0
    case PGC_INT:
88
0
      printf("INTEGER\t%d\t%d\t%d\t",
89
0
           structToPrint->_int.reset_val,
90
0
           structToPrint->_int.min,
91
0
           structToPrint->_int.max);
92
0
      break;
93
94
0
    case PGC_REAL:
95
0
      printf("REAL\t%g\t%g\t%g\t",
96
0
           structToPrint->_real.reset_val,
97
0
           structToPrint->_real.min,
98
0
           structToPrint->_real.max);
99
0
      break;
100
101
0
    case PGC_STRING:
102
0
      printf("STRING\t%s\t\t\t",
103
0
           structToPrint->_string.boot_val ? structToPrint->_string.boot_val : "");
104
0
      break;
105
106
0
    case PGC_ENUM:
107
0
      printf("ENUM\t%s\t\t\t",
108
0
           config_enum_lookup_by_value(structToPrint,
109
0
                         structToPrint->_enum.boot_val));
110
0
      break;
111
112
0
    default:
113
0
      write_stderr("internal error: unrecognized run-time parameter type\n");
114
0
      break;
115
0
  }
116
117
0
  printf("%s\t%s\n",
118
0
       (structToPrint->short_desc == NULL) ? "" : _(structToPrint->short_desc),
119
0
       (structToPrint->long_desc == NULL) ? "" : _(structToPrint->long_desc));
120
0
}