From 36ea26793a14d016059de2f1c83a05cf87a8bb92 Mon Sep 17 00:00:00 2001
From: Peter Eisentraut <peter_e@gmx.net>
Date: Fri, 10 Jan 2003 11:02:51 +0000
Subject: [PATCH] Add optional drop behavior clause to REVOKE command, for SQL
 conformance. Currently, only RESTRICT is allowed.

---
 doc/src/sgml/features.sgml   | 14 +++++++-------
 doc/src/sgml/ref/revoke.sgml | 12 +++++++++++-
 src/backend/parser/gram.y    |  8 ++++++--
 3 files changed, 24 insertions(+), 10 deletions(-)

diff --git a/doc/src/sgml/features.sgml b/doc/src/sgml/features.sgml
index 30f20bf51e4..fd01cd3cce6 100644
--- a/doc/src/sgml/features.sgml
+++ b/doc/src/sgml/features.sgml
@@ -1,5 +1,5 @@
 <!--
-$Header: /cvsroot/pgsql/doc/src/sgml/features.sgml,v 2.12 2002/12/14 00:24:23 petere Exp $
+$Header: /cvsroot/pgsql/doc/src/sgml/features.sgml,v 2.13 2003/01/10 11:02:41 petere Exp $
 -->
 
 <appendix id="features">
@@ -740,6 +740,12 @@ $Header: /cvsroot/pgsql/doc/src/sgml/features.sgml,v 2.12 2002/12/14 00:24:23 pe
         <entry>DROP VIEW statement: RESTRICT clause</entry>
         <entry></entry>
        </row>
+       <row>
+        <entry>F031-19</entry>
+        <entry>Core</entry>
+        <entry>REVOKE statement: RESTRICT clause</entry>
+        <entry></entry>
+       </row>
        <row>
         <entry>F032</entry>
         <entry></entry>
@@ -1629,12 +1635,6 @@ $Header: /cvsroot/pgsql/doc/src/sgml/features.sgml,v 2.12 2002/12/14 00:24:23 pe
         <entry>Module language</entry>
         <entry></entry>
        </row>
-       <row>
-        <entry>F031-19</entry>
-        <entry>Core</entry>
-        <entry>REVOKE statement: RESTRICT clause</entry>
-        <entry></entry>
-       </row>
        <row>
         <entry>F034</entry>
         <entry></entry>
diff --git a/doc/src/sgml/ref/revoke.sgml b/doc/src/sgml/ref/revoke.sgml
index 2b8334d3ee9..345024bb7cc 100644
--- a/doc/src/sgml/ref/revoke.sgml
+++ b/doc/src/sgml/ref/revoke.sgml
@@ -1,5 +1,5 @@
 <!--
-$Header: /cvsroot/pgsql/doc/src/sgml/ref/revoke.sgml,v 1.23 2002/11/21 23:34:43 petere Exp $
+$Header: /cvsroot/pgsql/doc/src/sgml/ref/revoke.sgml,v 1.24 2003/01/10 11:02:51 petere Exp $
 PostgreSQL documentation
 -->
 
@@ -20,22 +20,27 @@ REVOKE { { SELECT | INSERT | UPDATE | DELETE | RULE | REFERENCES | TRIGGER }
     [,...] | ALL [ PRIVILEGES ] }
     ON [ TABLE ] <replaceable class="PARAMETER">tablename</replaceable> [, ...]
     FROM { <replaceable class="PARAMETER">username</replaceable> | GROUP <replaceable class="PARAMETER">groupname</replaceable> | PUBLIC } [, ...]
+    [ RESTRICT ]
 
 REVOKE { { CREATE | TEMPORARY | TEMP } [,...] | ALL [ PRIVILEGES ] }
     ON DATABASE <replaceable>dbname</replaceable> [, ...]
     FROM { <replaceable class="PARAMETER">username</replaceable> | GROUP <replaceable class="PARAMETER">groupname</replaceable> | PUBLIC } [, ...]
+    [ RESTRICT ]
 
 REVOKE { EXECUTE | ALL [ PRIVILEGES ] }
     ON FUNCTION <replaceable>funcname</replaceable> ([<replaceable>type</replaceable>, ...]) [, ...]
     FROM { <replaceable class="PARAMETER">username</replaceable> | GROUP <replaceable class="PARAMETER">groupname</replaceable> | PUBLIC } [, ...]
+    [ RESTRICT ]
 
 REVOKE { USAGE | ALL [ PRIVILEGES ] }
     ON LANGUAGE <replaceable>langname</replaceable> [, ...]
     FROM { <replaceable class="PARAMETER">username</replaceable> | GROUP <replaceable class="PARAMETER">groupname</replaceable> | PUBLIC } [, ...]
+    [ RESTRICT ]
 
 REVOKE { { CREATE | USAGE } [,...] | ALL [ PRIVILEGES ] }
     ON SCHEMA <replaceable>schemaname</replaceable> [, ...]
     FROM { <replaceable class="PARAMETER">username</replaceable> | GROUP <replaceable class="PARAMETER">groupname</replaceable> | PUBLIC } [, ...]
+    [ RESTRICT ]
 </synopsis>
  </refsynopsisdiv>
 
@@ -63,6 +68,11 @@ REVOKE { { CREATE | USAGE } [,...] | ALL [ PRIVILEGES ] }
    See the description of the <xref linkend="sql-grant" endterm="sql-grant-title"> command for
    the meaning of the privilege types.
   </para>
+
+  <para>
+   The <literal>RESTRICT</literal> key word is currently only noise.
+   See also the compatibility notes below.
+  </para>
  </refsect1>
 
  <refsect1 id="SQL-REVOKE-notes">
diff --git a/src/backend/parser/gram.y b/src/backend/parser/gram.y
index 7626fe0e449..bfb1e427fb4 100644
--- a/src/backend/parser/gram.y
+++ b/src/backend/parser/gram.y
@@ -11,7 +11,7 @@
  *
  *
  * IDENTIFICATION
- *	  $Header: /cvsroot/pgsql/src/backend/parser/gram.y,v 2.392 2003/01/09 20:50:51 tgl Exp $
+ *	  $Header: /cvsroot/pgsql/src/backend/parser/gram.y,v 2.393 2003/01/10 11:02:51 petere Exp $
  *
  * HISTORY
  *	  AUTHOR			DATE			MAJOR EVENT
@@ -2751,7 +2751,7 @@ GrantStmt:	GRANT privileges ON privilege_target TO grantee_list
 		;
 
 RevokeStmt: REVOKE opt_revoke_grant_option privileges ON privilege_target
-			FROM grantee_list
+			FROM grantee_list opt_drop_behavior
 				{
 					GrantStmt *n = makeNode(GrantStmt);
 					n->is_grant = false;
@@ -2759,6 +2759,10 @@ RevokeStmt: REVOKE opt_revoke_grant_option privileges ON privilege_target
 					n->objtype = ($5)->objtype;
 					n->objects = ($5)->objs;
 					n->grantees = $7;
+
+					if ($8 == DROP_CASCADE)
+						elog(ERROR, "REVOKE ... CASCADE is not implemented");
+
 					$$ = (Node *)n;
 				}
 		;
-- 
GitLab