From 57748fc25d95d1daa8a251c01e9014361c36c1b2 Mon Sep 17 00:00:00 2001
From: Bruce Momjian <bruce@momjian.us>
Date: Fri, 25 Jul 2003 21:42:26 +0000
Subject: [PATCH] > Having read the list, and noticed the message about table
 inheritance I > 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 | 35 +++++++++++++++++++++++++++++++----
 1 file changed, 31 insertions(+), 4 deletions(-)

diff --git a/src/bin/psql/describe.c b/src/bin/psql/describe.c
index 7edb1d3b01..c44b527bb0 100644
--- a/src/bin/psql/describe.c
+++ b/src/bin/psql/describe.c
@@ -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,
-- 
2.40.0