> Having read the list, and noticed the message about table inheritance I
authorBruce Momjian
Fri, 25 Jul 2003 21:42:26 +0000 (21:42 +0000)
committerBruce Momjian
Fri, 25 Jul 2003 21:42:26 +0000 (21:42 +0000)
> thought that I would see if I could come up with a simple solution, and
> have my first delve into the code for PostgreSQL.
>
> Attached is a diff against 7.3.3 source, of changes to describe.c for
> psql. This should print out a list of parent tables in a similar style
> to that of the index listing. I have done some testing on my side and it
> all seems fine, can some other people have a quick look? What do people
> think? Useful?

Nick Barr

src/bin/psql/describe.c

index 7edb1d3b019d068c3a4557c78569bd308947f637..c44b527bb05fe32a1fd4771936c90b8f6ecda5eb 100644 (file)
@@ -3,7 +3,7 @@
  *
  * Copyright 2000-2002 by PostgreSQL Global Development Group
  *
- * $Header: /cvsroot/pgsql/src/bin/psql/describe.c,v 1.79 2003/07/23 08:47:39 petere Exp $
+ * $Header: /cvsroot/pgsql/src/bin/psql/describe.c,v 1.80 2003/07/25 21:42:26 momjian Exp $
  */
 #include "postgres_fe.h"
 #include "describe.h"
@@ -928,12 +928,14 @@ describeOneTableDetails(const char *schemaname,
                   *result2 = NULL,
                   *result3 = NULL,
                   *result4 = NULL,
-                  *result5 = NULL;
+                  *result5 = NULL,
+                  *result6 = NULL;
        int         check_count = 0,
                    index_count = 0,
                    foreignkey_count = 0,
                    rule_count = 0,
-                   trigger_count = 0;
+                   trigger_count = 0,
+                   inherits_count = 0;
        int         count_footers = 0;
 
        /* count indexes */
@@ -1037,7 +1039,16 @@ describeOneTableDetails(const char *schemaname,
                foreignkey_count = PQntuples(result5);
        }
 
-       footers = xmalloczero((index_count + check_count + rule_count + trigger_count + foreignkey_count + 6)
+       /* count inherited tables */
+       printfPQExpBuffer(&buf, "SELECT c.relname FROM pg_catalog.pg_class c, pg_catalog.pg_inherits i WHERE c.oid=i.inhparent AND i.inhrelid = '%s' ORDER BY inhseqno ASC", oid);
+
+       result6 = PSQLexec(buf.data, false);
+       if (!result6)
+           goto error_return;
+       else
+           inherits_count = PQntuples(result6);
+
+       footers = xmalloczero((index_count + check_count + rule_count + trigger_count + foreignkey_count + inherits_count + 6)
                              * sizeof(*footers));
 
        /* print indexes */
@@ -1140,6 +1151,21 @@ describeOneTableDetails(const char *schemaname,
            }
        }
 
+       /* print inherits */
+       for (i = 0; i < inherits_count; i++)
+       {
+           char       *s = _("Inherits");
+
+           if (i == 0)
+               printfPQExpBuffer(&buf, "%s: %s", s, PQgetvalue(result6, i, 0));
+           else
+               printfPQExpBuffer(&buf, "%*s  %s", (int) strlen(s), "", PQgetvalue(result6, i, 0));
+           if (i < inherits_count - 1)
+               appendPQExpBuffer(&buf, ",");
+
+           footers[count_footers++] = xstrdup(buf.data);
+       }
+
        /* end of list marker */
        footers[count_footers] = NULL;
 
@@ -1148,6 +1174,7 @@ describeOneTableDetails(const char *schemaname,
        PQclear(result3);
        PQclear(result4);
        PQclear(result5);
+       PQclear(result6);
    }
 
    printTable(title.data, headers,