Tweak guc.c to allow underscores in the names of custom variable classes,
authorTom Lane <tgl@sss.pgh.pa.us>
Fri, 2 Jan 2009 01:16:02 +0000 (01:16 +0000)
committerTom Lane <tgl@sss.pgh.pa.us>
Fri, 2 Jan 2009 01:16:02 +0000 (01:16 +0000)
and change auto_explain's custom GUC variables to be named auto_explain.xxx
not just explain.xxx.  Per discussion in connection with the
pg_stat_statements patch, it seems like a good idea to have the convention
that custom variable classes are named the same as their defining module.
Committing separately since this should happen regardless of what happens
with pg_stat_statements itself.

contrib/auto_explain/auto_explain.c
doc/src/sgml/auto-explain.sgml
src/backend/utils/misc/guc.c

index 63e6a12e7cf923abda050979caa2663964fbc3e0..f76dcbd1c72a55f8475af6a31e84a0073d6e028d 100644 (file)
 
 PG_MODULE_MAGIC;
 
-#define GUCNAME(name)          ("explain." name)
-
 /* GUC variables */
-static int     explain_log_min_duration = -1;  /* msec or -1 */
-static bool explain_log_analyze = false;
-static bool explain_log_verbose = false;
-static bool explain_log_nested = false;
+static int     auto_explain_log_min_duration = -1;             /* msec or -1 */
+static bool auto_explain_log_analyze = false;
+static bool auto_explain_log_verbose = false;
+static bool auto_explain_log_nested_statements = false;
 
 /* Current nesting depth of ExecutorRun calls */
 static int     nesting_level = 0;
@@ -35,8 +33,8 @@ static ExecutorRun_hook_type  prev_ExecutorRun = NULL;
 static ExecutorEnd_hook_type   prev_ExecutorEnd = NULL;
 
 #define auto_explain_enabled() \
-       (explain_log_min_duration >= 0 && \
-        (nesting_level == 0 || explain_log_nested))
+       (auto_explain_log_min_duration >= 0 && \
+        (nesting_level == 0 || auto_explain_log_nested_statements))
 
 void   _PG_init(void);
 void   _PG_fini(void);
@@ -55,10 +53,10 @@ void
 _PG_init(void)
 {
        /* Define custom GUC variables. */
-       DefineCustomIntVariable(GUCNAME("log_min_duration"),
+       DefineCustomIntVariable("auto_explain.log_min_duration",
                                                        "Sets the minimum execution time above which plans will be logged.",
                                                        "Zero prints all plans. -1 turns this feature off.",
-                                                       &explain_log_min_duration,
+                                                       &auto_explain_log_min_duration,
                                                        -1,
                                                        -1, INT_MAX / 1000,
                                                        PGC_SUSET,
@@ -66,30 +64,30 @@ _PG_init(void)
                                                        NULL,
                                                        NULL);
 
-       DefineCustomBoolVariable(GUCNAME("log_analyze"),
+       DefineCustomBoolVariable("auto_explain.log_analyze",
                                                         "Use EXPLAIN ANALYZE for plan logging.",
                                                         NULL,
-                                                        &explain_log_analyze,
+                                                        &auto_explain_log_analyze,
                                                         false,
                                                         PGC_SUSET,
                                                         0,
                                                         NULL,
                                                         NULL);
 
-       DefineCustomBoolVariable(GUCNAME("log_verbose"),
+       DefineCustomBoolVariable("auto_explain.log_verbose",
                                                         "Use EXPLAIN VERBOSE for plan logging.",
                                                         NULL,
-                                                        &explain_log_verbose,
+                                                        &auto_explain_log_verbose,
                                                         false,
                                                         PGC_SUSET,
                                                         0,
                                                         NULL,
                                                         NULL);
 
-       DefineCustomBoolVariable(GUCNAME("log_nested_statements"),
+       DefineCustomBoolVariable("auto_explain.log_nested_statements",
                                                         "Log nested statements.",
                                                         NULL,
-                                                        &explain_log_nested,
+                                                        &auto_explain_log_nested_statements,
                                                         false,
                                                         PGC_SUSET,
                                                         0,
@@ -126,7 +124,7 @@ explain_ExecutorStart(QueryDesc *queryDesc, int eflags)
        if (auto_explain_enabled())
        {
                /* Enable per-node instrumentation iff log_analyze is required. */
-               if (explain_log_analyze && (eflags & EXEC_FLAG_EXPLAIN_ONLY) == 0)
+               if (auto_explain_log_analyze && (eflags & EXEC_FLAG_EXPLAIN_ONLY) == 0)
                        queryDesc->doInstrument = true;
        }
 
@@ -194,14 +192,14 @@ explain_ExecutorEnd(QueryDesc *queryDesc)
 
                /* Log plan if duration is exceeded. */
                msec = queryDesc->totaltime->total * 1000.0;
-               if (msec >= explain_log_min_duration)
+               if (msec >= auto_explain_log_min_duration)
                {
                        StringInfoData  buf;
 
                        initStringInfo(&buf);
                        ExplainPrintPlan(&buf, queryDesc,
-                                                        queryDesc->doInstrument && explain_log_analyze,
-                                                        explain_log_verbose);
+                                                        queryDesc->doInstrument && auto_explain_log_analyze,
+                                                        auto_explain_log_verbose);
 
                        /* Remove last line break */
                        if (buf.len > 0 && buf.data[buf.len - 1] == '\n')
index 137cd01c83c3cd52fd0fd84bb4141a1c3a12ed07..c8fe4d3e3db90268668b70246c0717e2a5fea4a5 100644 (file)
@@ -38,20 +38,20 @@ LOAD 'auto_explain';
   There are several configuration parameters that control the behavior of
   <filename>auto_explain</filename>.  Note that the default behavior is
   to do nothing, so you must set at least
-  <varname>explain.log_min_duration</varname> if you want any results.
+  <varname>auto_explain.log_min_duration</varname> if you want any results.
  </para>
 
   <variablelist>
    <varlistentry>
     <term>
-     <varname>explain.log_min_duration</varname> (<type>integer</type>)
+     <varname>auto_explain.log_min_duration</varname> (<type>integer</type>)
     </term>
     <indexterm>
-     <primary><varname>explain.log_min_duration</> configuration parameter</primary>
+     <primary><varname>auto_explain.log_min_duration</> configuration parameter</primary>
     </indexterm>
     <listitem>
      <para>
-      <varname>explain.log_min_duration</varname> is the minimum statement
+      <varname>auto_explain.log_min_duration</varname> is the minimum statement
       execution time, in milliseconds, that will cause the statement's plan to
       be logged. Setting this to zero logs all plans. Minus-one (the default)
       disables logging of plans.  For example, if you set it to
@@ -63,14 +63,14 @@ LOAD 'auto_explain';
 
    <varlistentry>
     <term>
-     <varname>explain.log_analyze</varname> (<type>boolean</type>)
+     <varname>auto_explain.log_analyze</varname> (<type>boolean</type>)
     </term>
     <indexterm>
-     <primary><varname>explain.log_analyze</> configuration parameter</primary>
+     <primary><varname>auto_explain.log_analyze</> configuration parameter</primary>
     </indexterm>
     <listitem>
      <para>
-      <varname>explain.log_analyze</varname> causes <command>EXPLAIN ANALYZE</>
+      <varname>auto_explain.log_analyze</varname> causes <command>EXPLAIN ANALYZE</>
       output, rather than just <command>EXPLAIN</> output, to be printed
       when an execution plan is logged. This parameter is off by default.
       Only superusers can change this setting.
@@ -87,14 +87,14 @@ LOAD 'auto_explain';
 
    <varlistentry>
     <term>
-     <varname>explain.log_verbose</varname> (<type>boolean</type>)
+     <varname>auto_explain.log_verbose</varname> (<type>boolean</type>)
     </term>
     <indexterm>
-     <primary><varname>explain.log_verbose</> configuration parameter</primary>
+     <primary><varname>auto_explain.log_verbose</> configuration parameter</primary>
     </indexterm>
     <listitem>
      <para>
-      <varname>explain.log_verbose</varname> causes <command>EXPLAIN VERBOSE</>
+      <varname>auto_explain.log_verbose</varname> causes <command>EXPLAIN VERBOSE</>
       output, rather than just <command>EXPLAIN</> output, to be printed
       when an execution plan is logged. This parameter is off by default.
       Only superusers can change this setting.
@@ -104,14 +104,14 @@ LOAD 'auto_explain';
 
    <varlistentry>
     <term>
-     <varname>explain.log_nested_statements</varname> (<type>boolean</type>)
+     <varname>auto_explain.log_nested_statements</varname> (<type>boolean</type>)
     </term>
     <indexterm>
-     <primary><varname>explain.log_nested_statements</> configuration parameter</primary>
+     <primary><varname>auto_explain.log_nested_statements</> configuration parameter</primary>
     </indexterm>
     <listitem>
      <para>
-      <varname>explain.log_nested_statements</varname> causes nested
+      <varname>auto_explain.log_nested_statements</varname> causes nested
       statements (statements executed inside a function) to be considered
       for logging.  When it is off, only top-level query plans are logged. This
       parameter is off by default. Only superusers can change this setting.
@@ -122,16 +122,16 @@ LOAD 'auto_explain';
 
   <para>
    In order to set these parameters in your <filename>postgresql.conf</> file,
-   you will need to add <literal>explain</> in
-   <varname>custom_variable_classes</>.  Typical usage might be:
+   you will need to add <literal>auto_explain</> to
+   <xref linkend="guc-custom-variable-classes">.  Typical usage might be:
   </para>
 
   <programlisting>
 # postgresql.conf
 shared_preload_libraries = 'auto_explain'
 
-custom_variable_classes = 'explain'
-explain.log_min_duration = '3s'
+custom_variable_classes = 'auto_explain'
+auto_explain.log_min_duration = '3s'
   </programlisting>
  </sect2>
 
@@ -140,7 +140,7 @@ explain.log_min_duration = '3s'
 
   <programlisting>
   postgres=# LOAD 'auto_explain';
-  postgres=# SET explain.log_min_duration = 0;
+  postgres=# SET auto_explain.log_min_duration = 0;
   postgres=# SELECT count(*)
                FROM pg_class, pg_index
               WHERE oid = indrelid AND indisunique;
index 1378abd328adf3137778dcadb84237e8e3b7d26f..93413608201b21d443015ed0a680a5794bea3fad 100644 (file)
@@ -7283,11 +7283,11 @@ assign_custom_variable_classes(const char *newval, bool doit, GucSource source)
                        continue;
                }
 
-               if (hasSpaceAfterToken || !isalnum((unsigned char) c))
+               if (hasSpaceAfterToken || !(isalnum((unsigned char) c) || c == '_'))
                {
                        /*
-                        * Syntax error due to token following space after token or non
-                        * alpha numeric character
+                        * Syntax error due to token following space after token or
+                        * non-identifier character
                         */
                        pfree(buf.data);
                        return NULL;