Folks,

Here's a patch that adds a "Function Type" column to \df while
removing the now-redundant \da.

Cheers,
David.
-- 
David Fetter <da...@fetter.org> http://fetter.org/
Phone: +1 415 235 3778  AIM: dfetter666  Yahoo!: dfetter
Skype: davidfetter      XMPP: david.fet...@gmail.com

Remember to vote!
Consider donating to Postgres: http://www.postgresql.org/about/donate
diff --git a/doc/src/sgml/ref/psql-ref.sgml b/doc/src/sgml/ref/psql-ref.sgml
index 10d42ca..4cd1d27 100644
--- a/doc/src/sgml/ref/psql-ref.sgml
+++ b/doc/src/sgml/ref/psql-ref.sgml
@@ -873,22 +873,6 @@ testdb=&gt;
         </listitem>
       </varlistentry>
 
-      <varlistentry>
-        <term><literal>\da[S] [ <replaceable 
class="parameter">pattern</replaceable> ]</literal></term>
-
-        <listitem>
-        <para>
-        Lists all available aggregate functions, together with their
-        return type and the data types they operate on. If <replaceable
-        class="parameter">pattern</replaceable>
-        is specified, only aggregates whose names match the pattern are shown.
-        By default, only user-created objects are shown;  supply a
-        pattern or the <literal>S</literal> modifier to include system
-        objects.
-        </para>
-        </listitem>
-      </varlistentry>
-
 
       <varlistentry>
         <term><literal>\db[+] [ <replaceable 
class="parameter">pattern</replaceable> ]</literal></term>
@@ -1043,11 +1027,13 @@ testdb=&gt;
         <listitem>
         <para>
         Lists available functions, together with their argument and
-        return types. If <replaceable
-        class="parameter">pattern</replaceable>
-        is specified, only functions whose names match the pattern are shown.
-        If the form <literal>\df+</literal> is used, additional information 
about
-        each function, including volatility, language, source code and 
description, is shown.
+        return types and their function type: 'n' for normal, 'a' for
+        aggregates, 't' for trigger, and 'w' for windowing.  If
+        <replaceable class="parameter">pattern</replaceable> is
+        specified, only functions whose names match the pattern are
+        shown.  If the form <literal>\df+</literal> is used,
+        additional information about each function, including
+        volatility, language, source code and description, is shown.
         By default, only user-created objects are shown;  supply a
         pattern or the <literal>S</literal> modifier to include system
         objects.
diff --git a/doc/src/sgml/release.sgml b/doc/src/sgml/release.sgml
index fc56c3d..469397a 100644
--- a/doc/src/sgml/release.sgml
+++ b/doc/src/sgml/release.sgml
@@ -183,6 +183,14 @@ do it for earlier branch release files.
      </para>
     </listitem>
 
+    <listitem>
+     <para>
+      The \da command is no longer in psql.  Instead, \df now shows
+      which type of function it is: 'n' for normal, 'a' for aggregate,
+      't' for trigger, and 'w' for windowing.
+     </para>
+    </listitem>
+
    </itemizedlist>
 
    <para>
diff --git a/src/bin/psql/command.c b/src/bin/psql/command.c
index b39466d..3a1c8a4 100644
--- a/src/bin/psql/command.c
+++ b/src/bin/psql/command.c
@@ -347,9 +347,6 @@ exec_command(const char *cmd,
                                        /* standard listing of interesting 
things */
                                        success = listTables("tvs", NULL, 
show_verbose, show_system);
                                break;
-                       case 'a':
-                               success = describeAggregates(pattern, 
show_verbose, show_system);
-                               break;
                        case 'b':
                                success = describeTablespaces(pattern, 
show_verbose);
                                break;
diff --git a/src/bin/psql/describe.c b/src/bin/psql/describe.c
index 731baf8..1b9ae49 100644
--- a/src/bin/psql/describe.c
+++ b/src/bin/psql/describe.c
@@ -48,77 +48,6 @@ static void printACLColumn(PQExpBuffer buf, const char 
*colname);
  *----------------
  */
 
-
-/* \da
- * Takes an optional regexp to select particular aggregates
- */
-bool
-describeAggregates(const char *pattern, bool verbose, bool showSystem)
-{
-       PQExpBufferData buf;
-       PGresult   *res;
-       printQueryOpt myopt = pset.popt;
-
-       initPQExpBuffer(&buf);
-
-       printfPQExpBuffer(&buf,
-                                         "SELECT n.nspname as \"%s\",\n"
-                                         "  p.proname AS \"%s\",\n"
-                                         "  
pg_catalog.format_type(p.prorettype, NULL) AS \"%s\",\n",
-                                         gettext_noop("Schema"),
-                                         gettext_noop("Name"),
-                                         gettext_noop("Result data type"));
-
-       if (pset.sversion >= 80200)
-           appendPQExpBuffer(&buf,
-                                         "  CASE WHEN p.pronargs = 0\n"
-                                         "    THEN CAST('*' AS 
pg_catalog.text)\n"
-                                         "    ELSE\n"
-                                         "    
pg_catalog.array_to_string(ARRAY(\n"
-                                         "      SELECT\n"
-                                         "        
pg_catalog.format_type(p.proargtypes[s.i], NULL)\n"
-                                         "      FROM\n"
-                                         "        
pg_catalog.generate_series(0, pg_catalog.array_upper(p.proargtypes, 1)) AS 
s(i)\n"
-                                         "    ), ', ')\n"
-                                         "  END AS \"%s\",\n",
-                                         gettext_noop("Argument data types"));
-       else
-           appendPQExpBuffer(&buf,
-                                         "  
pg_catalog.format_type(p.proargtypes[0], NULL) AS \"%s\",\n",
-                                         gettext_noop("Argument data types"));
-
-       appendPQExpBuffer(&buf,
-                                "  pg_catalog.obj_description(p.oid, 
'pg_proc') as \"%s\"\n"
-                                         "FROM pg_catalog.pg_proc p\n"
-          "     LEFT JOIN pg_catalog.pg_namespace n ON n.oid = 
p.pronamespace\n"
-                                         "WHERE p.proisagg\n",
-                                         gettext_noop("Description"));
-
-       if (!showSystem && !pattern)
-               appendPQExpBuffer(&buf, "      AND n.nspname <> 'pg_catalog'\n"
-                                                               "      AND 
n.nspname <> 'information_schema'\n");
-
-       processSQLNamePattern(pset.db, &buf, pattern, true, false,
-                                                 "n.nspname", "p.proname", 
NULL,
-                                                 
"pg_catalog.pg_function_is_visible(p.oid)");
-
-       appendPQExpBuffer(&buf, "ORDER BY 1, 2, 4;");
-
-       res = PSQLexec(buf.data, false);
-       termPQExpBuffer(&buf);
-       if (!res)
-               return false;
-
-       myopt.nullPrint = NULL;
-       myopt.title = _("List of aggregate functions");
-       myopt.translate_header = true;
-
-       printQuery(res, &myopt, pset.queryFout, pset.logfile);
-
-       PQclear(res);
-       return true;
-}
-
 /* \db
  * Takes an optional regexp to select particular tablespaces
  */
@@ -203,9 +132,16 @@ describeFunctions(const char *pattern, bool verbose, bool 
showSystem)
     if (pset.sversion >= 80400)
                appendPQExpBuffer(&buf,
                                                  "  
pg_catalog.pg_get_function_result(p.oid) as \"%s\",\n"
-                                                 "  
pg_catalog.pg_get_function_arguments(p.oid) as \"%s\"",
+                                                 "  
pg_catalog.pg_get_function_arguments(p.oid) as \"%s\",\n"
+                                                 " CASE\n"
+                                                 "  WHEN p.proisagg THEN 'a'\n"
+                                                 "  WHEN p.proiswindow THEN 
'w'\n"
+                                                 "  WHEN 
pg_catalog.pg_get_function_result(p.oid) = 'trigger' THEN 't'\n"
+                                                 "  ELSE 'n'\n"
+                                                 "END as \"%s\"",
                                                  gettext_noop("Result data 
type"),
-                                                 gettext_noop("Argument data 
types"));
+                                                 gettext_noop("Argument data 
types"),
+                                                 gettext_noop("Function 
Type"));
     else if (pset.sversion >= 80100)
                appendPQExpBuffer(&buf,
                                          "  CASE WHEN p.proretset THEN 'SETOF 
' ELSE '' END ||\n"
@@ -238,16 +174,28 @@ describeFunctions(const char *pattern, bool verbose, bool 
showSystem)
                                          "      FROM\n"
                                          "        
pg_catalog.generate_series(0, pg_catalog.array_upper(p.proargtypes, 1)) AS 
s(i)\n"
                                          "    ), ', ')\n"
+                                         "  END AS \"%s\",\n"
+                                         "  CASE\n"
+                                         "    WHEN p.proisagg THEN 'a'\n"
+                                         "    WHEN 'trigger' = 
pg_catalog.format_type(p.prorettype, NULL) THEN 't'\n"
+                                         "    ELSE 'n'\n"
                                          "  END AS \"%s\"",
                                                  gettext_noop("Result data 
type"),
-                                                 gettext_noop("Argument data 
types"));
+                                                 gettext_noop("Argument data 
types"),
+                                                 gettext_noop("Function 
Type"));
        else
                appendPQExpBuffer(&buf,
                                          "  CASE WHEN p.proretset THEN 'SETOF 
' ELSE '' END ||\n"
                                  "  pg_catalog.format_type(p.prorettype, NULL) 
as \"%s\",\n"
-                                         "  
pg_catalog.oidvectortypes(p.proargtypes) as \"%s\"",
+                                         "  
pg_catalog.oidvectortypes(p.proargtypes) as \"%s\""
+                                         "  CASE\n"
+                                         "    WHEN p.proisagg THEN 'a'\n"
+                                         "    WHEN 'trigger' = 
pg_catalog.format_type(p.prorettype, NULL) THEN 't'\n"
+                                         "    ELSE 'n'\n"
+                                         "  END AS \"%s\"",
                                                  gettext_noop("Result data 
type"),
-                                                 gettext_noop("Argument data 
types"));
+                                                 gettext_noop("Argument data 
types"),
+                                                 gettext_noop("Function 
Type"));
 
        if (verbose)
                appendPQExpBuffer(&buf,
@@ -274,16 +222,14 @@ describeFunctions(const char *pattern, bool verbose, bool 
showSystem)
                appendPQExpBuffer(&buf,
                                                  "     LEFT JOIN 
pg_catalog.pg_language l ON l.oid = p.prolang\n");
 
-       appendPQExpBuffer(&buf, "WHERE NOT p.proisagg\n");
+       processSQLNamePattern(pset.db, &buf, pattern, false, true,
+                                                 "n.nspname", "p.proname", 
NULL,
+                                                 
"pg_catalog.pg_function_is_visible(p.oid)");
 
        if (!showSystem && !pattern)
                appendPQExpBuffer(&buf, "      AND n.nspname <> 'pg_catalog'\n"
                                                                "      AND 
n.nspname <> 'information_schema'\n");
 
-       processSQLNamePattern(pset.db, &buf, pattern, true, false,
-                                                 "n.nspname", "p.proname", 
NULL,
-                                                 
"pg_catalog.pg_function_is_visible(p.oid)");
-
        appendPQExpBuffer(&buf, "ORDER BY 1, 2, 4;");
 
        res = PSQLexec(buf.data, false);
diff --git a/src/bin/psql/describe.h b/src/bin/psql/describe.h
index 57e5c7b..d3fbbb8 100644
--- a/src/bin/psql/describe.h
+++ b/src/bin/psql/describe.h
@@ -9,9 +9,6 @@
 #define DESCRIBE_H
 
 
-/* \da */
-extern bool describeAggregates(const char *pattern, bool verbose, bool 
showSystem);
-
 /* \db */
 extern bool describeTablespaces(const char *pattern, bool verbose);
 
diff --git a/src/bin/psql/help.c b/src/bin/psql/help.c
index 93ff5d0..05ca071 100644
--- a/src/bin/psql/help.c
+++ b/src/bin/psql/help.c
@@ -196,7 +196,6 @@ slashUsage(unsigned short int pager)
        fprintf(output, _("  (options: S = show system objects, + = additional 
detail)\n"));
        fprintf(output, _("  \\d[S+]                 list tables, views, and 
sequences\n"));
        fprintf(output, _("  \\d[S+]  NAME           describe table, view, 
sequence, or index\n"));
-       fprintf(output, _("  \\da[S]  [PATTERN]      list aggregate 
functions\n"));
        fprintf(output, _("  \\db[+]  [PATTERN]      list tablespaces\n"));
        fprintf(output, _("  \\dc[S]  [PATTERN]      list conversions\n"));
        fprintf(output, _("  \\dC     [PATTERN]      list casts\n"));
-- 
Sent via pgsql-hackers mailing list (pgsql-hackers@postgresql.org)
To make changes to your subscription:
http://www.postgresql.org/mailpref/pgsql-hackers

Reply via email to