From fd5b397ca4963bf91a54678be51207bf827e512a Mon Sep 17 00:00:00 2001
From: Peter Eisentraut <peter_e@gmx.net>
Date: Sat, 27 Aug 2011 15:03:02 +0300
Subject: [PATCH] Implement the information schema with_hierarchy column

In PostgreSQL, this is included in the SELECT privilege, so show YES
or NO depending on whether SELECT is granted.
---
 doc/src/sgml/information_schema.sgml       | 18 ++++++++++++++++--
 src/backend/catalog/information_schema.sql |  2 +-
 2 files changed, 17 insertions(+), 3 deletions(-)

diff --git a/doc/src/sgml/information_schema.sgml b/doc/src/sgml/information_schema.sgml
index 0f0cbfaa83a..8063d059c8d 100644
--- a/doc/src/sgml/information_schema.sgml
+++ b/doc/src/sgml/information_schema.sgml
@@ -3684,7 +3684,14 @@ ORDER BY c.ordinal_position;
      <row>
       <entry><literal>with_hierarchy</literal></entry>
       <entry><type>yes_or_no</type></entry>
-      <entry>Applies to a feature not available in <productname>PostgreSQL</></entry>
+      <entry>
+       In the SQL standard, <literal>WITH HIERARCHY OPTION</literal>
+       is a separate (sub-)privilege allowing certain operations on
+       table inheritance hierarchies.  In PostgreSQL, this is included
+       in the <literal>SELECT</literal> privilege, so this column
+       shows <literal>YES</literal> if the privilege
+       is <literal>SELECT</literal>, else <literal>NO</literal>.
+      </entry>
      </row>
     </tbody>
    </tgroup>
@@ -5364,7 +5371,14 @@ ORDER BY c.ordinal_position;
      <row>
       <entry><literal>with_hierarchy</literal></entry>
       <entry><type>yes_or_no</type></entry>
-      <entry>Applies to a feature not available in <productname>PostgreSQL</></entry>
+      <entry>
+       In the SQL standard, <literal>WITH HIERARCHY OPTION</literal>
+       is a separate (sub-)privilege allowing certain operations on
+       table inheritance hierarchies.  In PostgreSQL, this is included
+       in the <literal>SELECT</literal> privilege, so this column
+       shows <literal>YES</literal> if the privilege
+       is <literal>SELECT</literal>, else <literal>NO</literal>.
+      </entry>
      </row>
     </tbody>
    </tgroup>
diff --git a/src/backend/catalog/information_schema.sql b/src/backend/catalog/information_schema.sql
index 47c48bfb275..e5555d6148e 100644
--- a/src/backend/catalog/information_schema.sql
+++ b/src/backend/catalog/information_schema.sql
@@ -1785,7 +1785,7 @@ CREATE VIEW table_privileges AS
                   pg_has_role(grantee.oid, c.relowner, 'USAGE')
                   OR c.grantable
                   THEN 'YES' ELSE 'NO' END AS yes_or_no) AS is_grantable,
-           CAST('NO' AS yes_or_no) AS with_hierarchy
+           CAST(CASE WHEN c.prtype = 'SELECT' THEN 'YES' ELSE 'NO' END AS yes_or_no) AS with_hierarchy
 
     FROM (
             SELECT oid, relname, relnamespace, relkind, relowner, (aclexplode(relacl)).* FROM pg_class
-- 
GitLab