LCOV - code coverage report
Current view: top level - src/backend/utils/misc - help_config.c (source / functions) Hit Total Coverage
Test: PostgreSQL Lines: 0 34 0.0 %
Date: 2017-09-29 15:12:54 Functions: 0 3 0.0 %
Legend: Lines: hit not hit

          Line data    Source code
       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-2017, 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 <float.h>
      20             : #include <limits.h>
      21             : #include <unistd.h>
      22             : 
      23             : #include "utils/guc_tables.h"
      24             : #include "utils/help_config.h"
      25             : 
      26             : 
      27             : /*
      28             :  * This union allows us to mix the numerous different types of structs
      29             :  * that we are organizing.
      30             :  */
      31             : typedef union
      32             : {
      33             :     struct config_generic generic;
      34             :     struct config_bool _bool;
      35             :     struct config_real real;
      36             :     struct config_int integer;
      37             :     struct config_string string;
      38             :     struct config_enum _enum;
      39             : } mixedStruct;
      40             : 
      41             : 
      42             : static void printMixedStruct(mixedStruct *structToPrint);
      43             : static bool displayStruct(mixedStruct *structToDisplay);
      44             : 
      45             : 
      46             : void
      47           0 : GucInfoMain(void)
      48             : {
      49             :     struct config_generic **guc_vars;
      50             :     int         numOpts,
      51             :                 i;
      52             : 
      53             :     /* Initialize the guc_variables[] array */
      54           0 :     build_guc_variables();
      55             : 
      56           0 :     guc_vars = get_guc_variables();
      57           0 :     numOpts = GetNumConfigOptions();
      58             : 
      59           0 :     for (i = 0; i < numOpts; i++)
      60             :     {
      61           0 :         mixedStruct *var = (mixedStruct *) guc_vars[i];
      62             : 
      63           0 :         if (displayStruct(var))
      64           0 :             printMixedStruct(var);
      65             :     }
      66             : 
      67           0 :     exit(0);
      68             : }
      69             : 
      70             : 
      71             : /*
      72             :  * This function will return true if the struct passed to it
      73             :  * should be displayed to the user.
      74             :  */
      75             : static bool
      76           0 : displayStruct(mixedStruct *structToDisplay)
      77             : {
      78           0 :     return !(structToDisplay->generic.flags & (GUC_NO_SHOW_ALL |
      79             :                                                GUC_NOT_IN_SAMPLE |
      80             :                                                GUC_DISALLOW_IN_FILE));
      81             : }
      82             : 
      83             : 
      84             : /*
      85             :  * This function prints out the generic struct passed to it. It will print out
      86             :  * a different format, depending on what the user wants to see.
      87             :  */
      88             : static void
      89           0 : printMixedStruct(mixedStruct *structToPrint)
      90             : {
      91           0 :     printf("%s\t%s\t%s\t",
      92             :            structToPrint->generic.name,
      93           0 :            GucContext_Names[structToPrint->generic.context],
      94           0 :            _(config_group_names[structToPrint->generic.group]));
      95             : 
      96           0 :     switch (structToPrint->generic.vartype)
      97             :     {
      98             : 
      99             :         case PGC_BOOL:
     100           0 :             printf("BOOLEAN\t%s\t\t\t",
     101           0 :                    (structToPrint->_bool.reset_val == 0) ?
     102             :                    "FALSE" : "TRUE");
     103           0 :             break;
     104             : 
     105             :         case PGC_INT:
     106           0 :             printf("INTEGER\t%d\t%d\t%d\t",
     107             :                    structToPrint->integer.reset_val,
     108             :                    structToPrint->integer.min,
     109             :                    structToPrint->integer.max);
     110           0 :             break;
     111             : 
     112             :         case PGC_REAL:
     113           0 :             printf("REAL\t%g\t%g\t%g\t",
     114             :                    structToPrint->real.reset_val,
     115             :                    structToPrint->real.min,
     116             :                    structToPrint->real.max);
     117           0 :             break;
     118             : 
     119             :         case PGC_STRING:
     120           0 :             printf("STRING\t%s\t\t\t",
     121           0 :                    structToPrint->string.boot_val ? structToPrint->string.boot_val : "");
     122           0 :             break;
     123             : 
     124             :         case PGC_ENUM:
     125           0 :             printf("ENUM\t%s\t\t\t",
     126             :                    config_enum_lookup_by_value(&structToPrint->_enum,
     127             :                                                structToPrint->_enum.boot_val));
     128           0 :             break;
     129             : 
     130             :         default:
     131           0 :             write_stderr("internal error: unrecognized run-time parameter type\n");
     132           0 :             break;
     133             :     }
     134             : 
     135           0 :     printf("%s\t%s\n",
     136           0 :            (structToPrint->generic.short_desc == NULL) ? "" : _(structToPrint->generic.short_desc),
     137           0 :            (structToPrint->generic.long_desc == NULL) ? "" : _(structToPrint->generic.long_desc));
     138           0 : }

Generated by: LCOV version 1.11