]> granicus.if.org Git - postgresql/commitdiff
Teach psql to display comments on languages and casts.
authorRobert Haas <rhaas@postgresql.org>
Thu, 4 Aug 2011 16:22:26 +0000 (12:22 -0400)
committerRobert Haas <rhaas@postgresql.org>
Thu, 4 Aug 2011 16:22:26 +0000 (12:22 -0400)
The output of \dL (list languages) is fairly narrow, so we just always
display the comment.  \dC (list casts) can get fairly wide, so we only
display comments if the new \dC+ option is specified.

Josh Kupershmidt

doc/src/sgml/ref/psql-ref.sgml
src/bin/psql/command.c
src/bin/psql/describe.c
src/bin/psql/describe.h
src/bin/psql/help.c

index 54fc3ee24ec0f6162f526a0cf0f7d2ef454be481..ecfafadc61575fd0cb4cdf472104f7b454de6aa5 100644 (file)
@@ -966,7 +966,7 @@ testdb=&gt;
 
 
       <varlistentry>
-        <term><literal>\dC [ <link linkend="APP-PSQL-patterns"><replaceable class="parameter">pattern</replaceable></link> ]</literal></term>
+        <term><literal>\dC[+] [ <link linkend="APP-PSQL-patterns"><replaceable class="parameter">pattern</replaceable></link> ]</literal></term>
         <listitem>
         <para>
         Lists type casts.
index 3608b725963e56fa9a228abd5500b9c0177e5b11..84e031dd53eee6f69faea1dd916482df3eaaae2b 100644 (file)
@@ -381,7 +381,7 @@ exec_command(const char *cmd,
                                success = listConversions(pattern, show_system);
                                break;
                        case 'C':
-                               success = listCasts(pattern);
+                               success = listCasts(pattern, show_verbose);
                                break;
                        case 'd':
                                if (strncmp(cmd, "ddp", 3) == 0)
index b50c5d647f6cae51c21997a39c5b87e15e61a4ef..e46568654e534fbdf46474d4144e4ec70d255abf 100644 (file)
@@ -2647,8 +2647,10 @@ listLanguages(const char *pattern, bool verbose, bool showSystem)
                                                  gettext_noop("Owner"));
 
        appendPQExpBuffer(&buf,
-                                         "       l.lanpltrusted AS \"%s\"",
-                                         gettext_noop("Trusted"));
+                                         "       l.lanpltrusted AS \"%s\",\n"
+                                         "       d.description AS \"%s\"",
+                                         gettext_noop("Trusted"),
+                                         gettext_noop("Description"));
 
        if (verbose)
        {
@@ -2666,13 +2668,18 @@ listLanguages(const char *pattern, bool verbose, bool showSystem)
        }
 
        appendPQExpBuffer(&buf,
-                                         "\nFROM pg_catalog.pg_language l\n");
+                                         "\nFROM pg_catalog.pg_language l\n"
+                                         "LEFT JOIN pg_catalog.pg_description d\n"
+                                         "  ON d.classoid = l.tableoid AND d.objoid = l.oid\n"
+                                         "  AND d.objsubid = 0\n");
 
-       processSQLNamePattern(pset.db, &buf, pattern, false, false,
-                                                 NULL, "l.lanname", NULL, NULL);
+       if (pattern)
+               processSQLNamePattern(pset.db, &buf, pattern, false, false,
+                                                         NULL, "l.lanname", NULL, NULL);
 
        if (!showSystem && !pattern)
-               appendPQExpBuffer(&buf, "WHERE lanplcallfoid != 0\n");
+               appendPQExpBuffer(&buf, "WHERE l.lanplcallfoid != 0\n");
+
 
        appendPQExpBuffer(&buf, "ORDER BY 1;");
 
@@ -2820,7 +2827,7 @@ listConversions(const char *pattern, bool showSystem)
  * Describes casts.
  */
 bool
-listCasts(const char *pattern)
+listCasts(const char *pattern, bool verbose)
 {
        PQExpBufferData buf;
        PGresult   *res;
@@ -2844,7 +2851,21 @@ listCasts(const char *pattern)
                                          "       CASE WHEN c.castcontext = 'e' THEN '%s'\n"
                                          "            WHEN c.castcontext = 'a' THEN '%s'\n"
                                          "            ELSE '%s'\n"
-                                         "       END as \"%s\"\n"
+                                         "       END as \"%s\"",
+                                         gettext_noop("Source type"),
+                                         gettext_noop("Target type"),
+                                         gettext_noop("Function"),
+                                         gettext_noop("no"),
+                                         gettext_noop("in assignment"),
+                                         gettext_noop("yes"),
+                                         gettext_noop("Implicit?"));
+
+       if (verbose)
+               appendPQExpBuffer(&buf,
+                                                 ",\n       d.description AS \"%s\"\n",
+                                                 gettext_noop("Description"));
+
+       appendPQExpBuffer(&buf,
                                 "FROM pg_catalog.pg_cast c LEFT JOIN pg_catalog.pg_proc p\n"
                                          "     ON c.castfunc = p.oid\n"
                                          "     LEFT JOIN pg_catalog.pg_type ts\n"
@@ -2854,13 +2875,15 @@ listCasts(const char *pattern)
                                          "     LEFT JOIN pg_catalog.pg_type tt\n"
                                          "     ON c.casttarget = tt.oid\n"
                                          "     LEFT JOIN pg_catalog.pg_namespace nt\n"
-                                         "     ON nt.oid = tt.typnamespace\n"
-                                         "WHERE (true",
-                                         gettext_noop("Source type"),
-                                         gettext_noop("Target type"),
-                                         gettext_noop("Function"),
-         gettext_noop("no"), gettext_noop("in assignment"), gettext_noop("yes"),
-                                         gettext_noop("Implicit?"));
+                                         "     ON nt.oid = tt.typnamespace\n");
+
+       if (verbose)
+               appendPQExpBuffer(&buf,
+                                                 "     LEFT JOIN pg_catalog.pg_description d\n"
+                                                 "     ON d.classoid = c.tableoid AND d.objoid = "
+                                                 "c.oid AND d.objsubid = 0\n");
+
+       appendPQExpBuffer(&buf, "WHERE ( (true");
 
        /*
         * Match name pattern against either internal or external name of either
@@ -2878,7 +2901,7 @@ listCasts(const char *pattern)
                                                  "pg_catalog.format_type(tt.oid, NULL)",
                                                  "pg_catalog.pg_type_is_visible(tt.oid)");
 
-       appendPQExpBuffer(&buf, ")\nORDER BY 1, 2;");
+       appendPQExpBuffer(&buf, ") )\nORDER BY 1, 2;");
 
        res = PSQLexec(buf.data, false);
        termPQExpBuffer(&buf);
index fb86d1e487d98e9e55bce8a01ae112f7be70d03d..7dc9a2c1548515d8896261097ad8ccc9be6c771f 100644 (file)
@@ -67,7 +67,7 @@ extern bool listDomains(const char *pattern, bool showSystem);
 extern bool listConversions(const char *pattern, bool showSystem);
 
 /* \dC */
-extern bool listCasts(const char *pattern);
+extern bool listCasts(const char *pattern, bool verbose);
 
 /* \dO */
 extern bool listCollations(const char *pattern, bool verbose, bool showSystem);
index e56ab61ac63a66c67fa6b8dda4f6eb880c83eebd..d3b8c170fa95374e768937a0b62e8d099f697bef 100644 (file)
@@ -196,7 +196,7 @@ slashUsage(unsigned short int pager)
        fprintf(output, _("  \\da[S]  [PATTERN]      list aggregates\n"));
        fprintf(output, _("  \\db[+]  [PATTERN]      list tablespaces\n"));
        fprintf(output, _("  \\dc[S]  [PATTERN]      list conversions\n"));
-       fprintf(output, _("  \\dC     [PATTERN]      list casts\n"));
+       fprintf(output, _("  \\dC[+]  [PATTERN]      list casts\n"));
        fprintf(output, _("  \\dd[S]  [PATTERN]      show comments on objects\n"));
        fprintf(output, _("  \\ddp    [PATTERN]      list default privileges\n"));
        fprintf(output, _("  \\dD[S]  [PATTERN]      list domains\n"));