]> granicus.if.org Git - postgresql/commitdiff
> Having read the list, and noticed the message about table inheritance I
authorBruce Momjian <bruce@momjian.us>
Fri, 25 Jul 2003 21:42:26 +0000 (21:42 +0000)
committerBruce Momjian <bruce@momjian.us>
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,