]> granicus.if.org Git - postgresql/commitdiff
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 7526396084c7acb674014c8d7d7a342822cd268a..af9975da1251e3769afd4f53f182213e484050e4 100644 (file)
@@ -6,7 +6,7 @@
  * Copyright (c) 2008-2009, PostgreSQL Global Development Group
  *
  * IDENTIFICATION
- *       $PostgreSQL: pgsql/contrib/auto_explain/auto_explain.c,v 1.2 2009/01/01 17:23:31 momjian Exp $
+ *       $PostgreSQL: pgsql/contrib/auto_explain/auto_explain.c,v 1.3 2009/01/02 01:16:02 tgl Exp $
  *
  *-------------------------------------------------------------------------
  */
 
 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 1a6dce0e427e93259fb35a09e91c21360bffe9df..c1e85af10e0f275152ad627e7d806704b8ad4298 100644 (file)
@@ -1,4 +1,4 @@
-<!-- $PostgreSQL: pgsql/doc/src/sgml/auto-explain.sgml,v 1.2 2008/12/07 23:46:39 alvherre Exp $ -->
+<!-- $PostgreSQL: pgsql/doc/src/sgml/auto-explain.sgml,v 1.3 2009/01/02 01:16:02 tgl Exp $ -->
 
 <sect1 id="auto-explain">
  <title>auto_explain</title>
@@ -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 57ccfe256e6fb6f7ee78e40360b354b7e38fa854..62649b8ef42da7ccfcab623cf167b5325149632d 100644 (file)
@@ -10,7 +10,7 @@
  * Written by Peter Eisentraut <peter_e@gmx.net>.
  *
  * IDENTIFICATION
- *       $PostgreSQL: pgsql/src/backend/utils/misc/guc.c,v 1.484 2009/01/01 17:23:53 momjian Exp $
+ *       $PostgreSQL: pgsql/src/backend/utils/misc/guc.c,v 1.485 2009/01/02 01:16:02 tgl Exp $
  *
  *--------------------------------------------------------------------
  */
@@ -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;