This is an automated email from the ASF dual-hosted git repository.

duanzhengqiang pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/shardingsphere.git


The following commit(s) were added to refs/heads/master by this push:
     new 79b0d73  Add SQLServer Revoke statement (#16032)
79b0d73 is described below

commit 79b0d731c4c9ad2bd3b39c8c598e4d65312859b2
Author: Thanoshan MV <[email protected]>
AuthorDate: Mon Mar 14 16:59:27 2022 +0530

    Add SQLServer Revoke statement (#16032)
    
    * Add SQLServer Revoke statement
    
    * Change List to Collection in SQLServerRevoke statement
---
 .../main/antlr4/imports/sqlserver/DCLStatement.g4  | 10 ++++-
 .../impl/SQLServerDCLStatementSQLVisitor.java      | 45 ++++++++++++++++++----
 .../sqlserver/dcl/SQLServerRevokeStatement.java    |  8 ++++
 .../statement/dcl/impl/RevokeStatementAssert.java  |  4 ++
 .../SQLServerRevokeStatementAssert.java}           | 28 ++++++++------
 .../statement/dcl/RevokeStatementTestCase.java     |  4 ++
 .../src/main/resources/case/dcl/revoke.xml         | 42 ++++++++++++++++++++
 .../resources/sql/supported/dcl/revoke-user.xml    | 25 +++++++++++-
 8 files changed, 145 insertions(+), 21 deletions(-)

diff --git 
a/shardingsphere-sql-parser/shardingsphere-sql-parser-dialect/shardingsphere-sql-parser-sqlserver/src/main/antlr4/imports/sqlserver/DCLStatement.g4
 
b/shardingsphere-sql-parser/shardingsphere-sql-parser-dialect/shardingsphere-sql-parser-sqlserver/src/main/antlr4/imports/sqlserver/DCLStatement.g4
index 2ebb27a52f..36dcccb 100644
--- 
a/shardingsphere-sql-parser/shardingsphere-sql-parser-dialect/shardingsphere-sql-parser-sqlserver/src/main/antlr4/imports/sqlserver/DCLStatement.g4
+++ 
b/shardingsphere-sql-parser/shardingsphere-sql-parser-dialect/shardingsphere-sql-parser-sqlserver/src/main/antlr4/imports/sqlserver/DCLStatement.g4
@@ -56,7 +56,15 @@ principal
     ;
 
 revoke
-    : REVOKE (optionForClause? classPrivilegesClause | 
classTypePrivilegesClause | roleClause)
+    : REVOKE (optionForClause? revokeClassPrivilegesClause | 
revokeClassTypePrivilegesClause)
+    ;
+
+revokeClassPrivilegesClause
+    : grantClassPrivileges (ON grantOnClassClause)? (TO | FROM) principal 
(COMMA_ principal)* (CASCADE)? (AS principal)?
+    ;
+
+revokeClassTypePrivilegesClause
+    : grantClassTypePrivileges (ON grantOnClassTypeClause)? (TO | FROM) 
principal (COMMA_ principal)* (CASCADE)?
     ;
 
 deny
diff --git 
a/shardingsphere-sql-parser/shardingsphere-sql-parser-dialect/shardingsphere-sql-parser-sqlserver/src/main/java/org/apache/shardingsphere/sql/parser/sqlserver/visitor/statement/impl/SQLServerDCLStatementSQLVisitor.java
 
b/shardingsphere-sql-parser/shardingsphere-sql-parser-dialect/shardingsphere-sql-parser-sqlserver/src/main/java/org/apache/shardingsphere/sql/parser/sqlserver/visitor/statement/impl/SQLServerDCLStatementSQLVisitor.java
index 7b5eb1f..1630842 100644
--- 
a/shardingsphere-sql-parser/shardingsphere-sql-parser-dialect/shardingsphere-sql-parser-sqlserver/src/main/java/org/apache/shardingsphere/sql/parser/sqlserver/visitor/statement/impl/SQLServerDCLStatementSQLVisitor.java
+++ 
b/shardingsphere-sql-parser/shardingsphere-sql-parser-dialect/shardingsphere-sql-parser-sqlserver/src/main/java/org/apache/shardingsphere/sql/parser/sqlserver/visitor/statement/impl/SQLServerDCLStatementSQLVisitor.java
@@ -41,6 +41,8 @@ import 
org.apache.shardingsphere.sql.parser.autogen.SQLServerStatementParser.Gra
 import 
org.apache.shardingsphere.sql.parser.autogen.SQLServerStatementParser.GrantContext;
 import 
org.apache.shardingsphere.sql.parser.autogen.SQLServerStatementParser.IgnoredNameIdentifierContext;
 import 
org.apache.shardingsphere.sql.parser.autogen.SQLServerStatementParser.OwnerContext;
+import 
org.apache.shardingsphere.sql.parser.autogen.SQLServerStatementParser.RevokeClassPrivilegesClauseContext;
+import 
org.apache.shardingsphere.sql.parser.autogen.SQLServerStatementParser.RevokeClassTypePrivilegesClauseContext;
 import 
org.apache.shardingsphere.sql.parser.autogen.SQLServerStatementParser.RevokeContext;
 import 
org.apache.shardingsphere.sql.parser.autogen.SQLServerStatementParser.SecurableContext;
 import 
org.apache.shardingsphere.sql.parser.autogen.SQLServerStatementParser.SetUserContext;
@@ -96,30 +98,59 @@ public final class SQLServerDCLStatementSQLVisitor extends 
SQLServerStatementSQL
             }
         }
         if (null != ctx.grantClassTypePrivilegesClause()) {
-            for (SimpleTableSegment each : 
getTableFromGrantPrivilegeClause(ctx.grantClassTypePrivilegesClause())) {
+            for (SimpleTableSegment each : 
getTableFromGrantTypePrivilegeClause(ctx.grantClassTypePrivilegesClause())) {
                 result.getTables().add(each);
             }
         }
         return result;
     }
     
+    private Collection<SimpleTableSegment> 
getTableFromGrantPrivilegeClause(final GrantClassPrivilegesClauseContext ctx) {
+        Collection<SimpleTableSegment> result = new ArrayList<>();
+        if (null != ctx.grantOnClassClause()) {
+            if (null != ctx.grantOnClassClause().classItem() && null != 
ctx.grantOnClassClause().classItem().OBJECT()) {
+                result = Collections.singletonList((SimpleTableSegment) 
visit(ctx.grantOnClassClause().securable()));
+            }
+            if (null != 
ctx.grantClassPrivileges().privilegeType().get(0).objectPermission()) {
+                result = Collections.singletonList((SimpleTableSegment) 
visit(ctx.grantOnClassClause().securable()));
+            }
+            if (null != 
ctx.grantClassPrivileges().privilegeType().get(0).PRIVILEGES()) {
+                result = Collections.singletonList((SimpleTableSegment) 
visit(ctx.grantOnClassClause().securable()));
+            }
+        }
+        return result;
+    }
+    
+    private Collection<SimpleTableSegment> 
getTableFromGrantTypePrivilegeClause(final 
GrantClassTypePrivilegesClauseContext ctx) {
+        Collection<SimpleTableSegment> result = new ArrayList<>();
+        if (null != ctx.grantOnClassTypeClause() && null != 
ctx.grantOnClassTypeClause().grantClassType() && null != 
ctx.grantOnClassTypeClause().grantClassType().OBJECT()) {
+            result = Collections.singletonList((SimpleTableSegment) 
visit(ctx.grantOnClassTypeClause().securable()));
+        }
+        return result;
+    }
+    
     @Override
     public ASTNode visitRevoke(final RevokeContext ctx) {
         SQLServerRevokeStatement result = new SQLServerRevokeStatement();
-        if (null != ctx.classPrivilegesClause()) {
-            for (SimpleTableSegment each : 
getTableFromPrivilegeClause(ctx.classPrivilegesClause())) {
+        if (null != ctx.revokeClassPrivilegesClause()) {
+            for (SimpleTableSegment each : 
getTableFromRevokeClassPrivilegesClause(ctx.revokeClassPrivilegesClause())) {
                 result.getTables().add(each);
             }
+            if (null != 
ctx.revokeClassPrivilegesClause().grantClassPrivileges().columnNames()) {
+                for (ColumnNamesContext each : 
ctx.revokeClassPrivilegesClause().grantClassPrivileges().columnNames()) {
+                    
result.getColumns().addAll(((CollectionValue<ColumnSegment>) 
visit(each)).getValue());
+                }
+            }
         }
-        if (null != ctx.classTypePrivilegesClause()) {
-            for (SimpleTableSegment each : 
getTableFromPrivilegeClause(ctx.classTypePrivilegesClause())) {
+        if (null != ctx.revokeClassTypePrivilegesClause()) {
+            for (SimpleTableSegment each : 
getTableFromRevokeClassTypePrivilegesClause(ctx.revokeClassTypePrivilegesClause()))
 {
                 result.getTables().add(each);
             }
         }
         return result;
     }
     
-    private Collection<SimpleTableSegment> 
getTableFromGrantPrivilegeClause(final GrantClassPrivilegesClauseContext ctx) {
+    private Collection<SimpleTableSegment> 
getTableFromRevokeClassPrivilegesClause(final 
RevokeClassPrivilegesClauseContext ctx) {
         Collection<SimpleTableSegment> result = new ArrayList<>();
         if (null != ctx.grantOnClassClause()) {
             if (null != ctx.grantOnClassClause().classItem() && null != 
ctx.grantOnClassClause().classItem().OBJECT()) {
@@ -135,7 +166,7 @@ public final class SQLServerDCLStatementSQLVisitor extends 
SQLServerStatementSQL
         return result;
     }
     
-    private Collection<SimpleTableSegment> 
getTableFromGrantPrivilegeClause(final GrantClassTypePrivilegesClauseContext 
ctx) {
+    private Collection<SimpleTableSegment> 
getTableFromRevokeClassTypePrivilegesClause(final 
RevokeClassTypePrivilegesClauseContext ctx) {
         Collection<SimpleTableSegment> result = new ArrayList<>();
         if (null != ctx.grantOnClassTypeClause() && null != 
ctx.grantOnClassTypeClause().grantClassType() && null != 
ctx.grantOnClassTypeClause().grantClassType().OBJECT()) {
             result = Collections.singletonList((SimpleTableSegment) 
visit(ctx.grantOnClassTypeClause().securable()));
diff --git 
a/shardingsphere-sql-parser/shardingsphere-sql-parser-statement/src/main/java/org/apache/shardingsphere/sql/parser/sql/dialect/statement/sqlserver/dcl/SQLServerRevokeStatement.java
 
b/shardingsphere-sql-parser/shardingsphere-sql-parser-statement/src/main/java/org/apache/shardingsphere/sql/parser/sql/dialect/statement/sqlserver/dcl/SQLServerRevokeStatement.java
index d1804b1..7c7d326 100644
--- 
a/shardingsphere-sql-parser/shardingsphere-sql-parser-statement/src/main/java/org/apache/shardingsphere/sql/parser/sql/dialect/statement/sqlserver/dcl/SQLServerRevokeStatement.java
+++ 
b/shardingsphere-sql-parser/shardingsphere-sql-parser-statement/src/main/java/org/apache/shardingsphere/sql/parser/sql/dialect/statement/sqlserver/dcl/SQLServerRevokeStatement.java
@@ -17,13 +17,21 @@
 
 package 
org.apache.shardingsphere.sql.parser.sql.dialect.statement.sqlserver.dcl;
 
+import lombok.Getter;
 import lombok.ToString;
+import 
org.apache.shardingsphere.sql.parser.sql.common.segment.dml.column.ColumnSegment;
 import 
org.apache.shardingsphere.sql.parser.sql.common.statement.dcl.RevokeStatement;
 import 
org.apache.shardingsphere.sql.parser.sql.dialect.statement.sqlserver.SQLServerStatement;
 
+import java.util.Collection;
+import java.util.LinkedList;
+
 /**
  * SQLServer revoke statement.
  */
 @ToString
+@Getter
 public final class SQLServerRevokeStatement extends RevokeStatement implements 
SQLServerStatement {
+    
+    private final Collection<ColumnSegment> columns = new LinkedList<>();
 }
diff --git 
a/shardingsphere-test/shardingsphere-parser-test/src/main/java/org/apache/shardingsphere/test/sql/parser/parameterized/asserts/statement/dcl/impl/RevokeStatementAssert.java
 
b/shardingsphere-test/shardingsphere-parser-test/src/main/java/org/apache/shardingsphere/test/sql/parser/parameterized/asserts/statement/dcl/impl/RevokeStatementAssert.java
index 20bba52..17052ac 100644
--- 
a/shardingsphere-test/shardingsphere-parser-test/src/main/java/org/apache/shardingsphere/test/sql/parser/parameterized/asserts/statement/dcl/impl/RevokeStatementAssert.java
+++ 
b/shardingsphere-test/shardingsphere-parser-test/src/main/java/org/apache/shardingsphere/test/sql/parser/parameterized/asserts/statement/dcl/impl/RevokeStatementAssert.java
@@ -21,8 +21,10 @@ import lombok.AccessLevel;
 import lombok.NoArgsConstructor;
 import 
org.apache.shardingsphere.sql.parser.sql.common.statement.dcl.RevokeStatement;
 import 
org.apache.shardingsphere.sql.parser.sql.dialect.statement.mysql.dcl.MySQLRevokeStatement;
+import 
org.apache.shardingsphere.sql.parser.sql.dialect.statement.sqlserver.dcl.SQLServerRevokeStatement;
 import 
org.apache.shardingsphere.test.sql.parser.parameterized.asserts.SQLCaseAssertContext;
 import 
org.apache.shardingsphere.test.sql.parser.parameterized.asserts.statement.dcl.impl.mysql.MySQLRevokeStatementAssert;
+import 
org.apache.shardingsphere.test.sql.parser.parameterized.asserts.statement.dcl.impl.sqlserver.SQLServerRevokeStatementAssert;
 import 
org.apache.shardingsphere.test.sql.parser.parameterized.jaxb.cases.domain.statement.dcl.RevokeStatementTestCase;
 
 /**
@@ -41,6 +43,8 @@ public final class RevokeStatementAssert {
     public static void assertIs(final SQLCaseAssertContext assertContext, 
final RevokeStatement actual, final RevokeStatementTestCase expected) {
         if (actual instanceof MySQLRevokeStatement) {
             MySQLRevokeStatementAssert.assertIs(assertContext, 
(MySQLRevokeStatement) actual, expected);
+        } else if (actual instanceof SQLServerRevokeStatement) {
+            SQLServerRevokeStatementAssert.assertIs(assertContext, 
(SQLServerRevokeStatement) actual, expected);
         }
     }
 }
diff --git 
a/shardingsphere-test/shardingsphere-parser-test/src/main/java/org/apache/shardingsphere/test/sql/parser/parameterized/asserts/statement/dcl/impl/RevokeStatementAssert.java
 
b/shardingsphere-test/shardingsphere-parser-test/src/main/java/org/apache/shardingsphere/test/sql/parser/parameterized/asserts/statement/dcl/impl/sqlserver/SQLServerRevokeStatementAssert.java
similarity index 64%
copy from 
shardingsphere-test/shardingsphere-parser-test/src/main/java/org/apache/shardingsphere/test/sql/parser/parameterized/asserts/statement/dcl/impl/RevokeStatementAssert.java
copy to 
shardingsphere-test/shardingsphere-parser-test/src/main/java/org/apache/shardingsphere/test/sql/parser/parameterized/asserts/statement/dcl/impl/sqlserver/SQLServerRevokeStatementAssert.java
index 20bba52..956a47f 100644
--- 
a/shardingsphere-test/shardingsphere-parser-test/src/main/java/org/apache/shardingsphere/test/sql/parser/parameterized/asserts/statement/dcl/impl/RevokeStatementAssert.java
+++ 
b/shardingsphere-test/shardingsphere-parser-test/src/main/java/org/apache/shardingsphere/test/sql/parser/parameterized/asserts/statement/dcl/impl/sqlserver/SQLServerRevokeStatementAssert.java
@@ -15,32 +15,36 @@
  * limitations under the License.
  */
 
-package 
org.apache.shardingsphere.test.sql.parser.parameterized.asserts.statement.dcl.impl;
+package 
org.apache.shardingsphere.test.sql.parser.parameterized.asserts.statement.dcl.impl.sqlserver;
 
 import lombok.AccessLevel;
 import lombok.NoArgsConstructor;
-import 
org.apache.shardingsphere.sql.parser.sql.common.statement.dcl.RevokeStatement;
-import 
org.apache.shardingsphere.sql.parser.sql.dialect.statement.mysql.dcl.MySQLRevokeStatement;
+import 
org.apache.shardingsphere.sql.parser.sql.dialect.statement.sqlserver.dcl.SQLServerRevokeStatement;
 import 
org.apache.shardingsphere.test.sql.parser.parameterized.asserts.SQLCaseAssertContext;
-import 
org.apache.shardingsphere.test.sql.parser.parameterized.asserts.statement.dcl.impl.mysql.MySQLRevokeStatementAssert;
+import 
org.apache.shardingsphere.test.sql.parser.parameterized.asserts.segment.column.ColumnAssert;
+import 
org.apache.shardingsphere.test.sql.parser.parameterized.asserts.segment.table.TableAssert;
 import 
org.apache.shardingsphere.test.sql.parser.parameterized.jaxb.cases.domain.statement.dcl.RevokeStatementTestCase;
 
+
 /**
- * Revoke statement assert.
+ * SQLServer Revoke statement assert.
  */
 @NoArgsConstructor(access = AccessLevel.PRIVATE)
-public final class RevokeStatementAssert {
+public final class SQLServerRevokeStatementAssert {
     
     /**
-     * Assert revoke statement is correct with expected parser result.
-     * 
+     * Assert SQLServer Revoke statement is correct with expected parser 
result.
+     *
      * @param assertContext assert context
-     * @param actual actual revoke statement
+     * @param actual actual SQLServer revoke statement
      * @param expected expected revoke statement test case
      */
-    public static void assertIs(final SQLCaseAssertContext assertContext, 
final RevokeStatement actual, final RevokeStatementTestCase expected) {
-        if (actual instanceof MySQLRevokeStatement) {
-            MySQLRevokeStatementAssert.assertIs(assertContext, 
(MySQLRevokeStatement) actual, expected);
+    public static void assertIs(final SQLCaseAssertContext assertContext, 
final SQLServerRevokeStatement actual, final RevokeStatementTestCase expected) {
+        if (0 != expected.getTables().size()) {
+            TableAssert.assertIs(assertContext, actual.getTables(), 
expected.getTables());
+        }
+        if (0 != expected.getColumns().size()) {
+            ColumnAssert.assertIs(assertContext, actual.getColumns(), 
expected.getColumns());
         }
     }
 }
diff --git 
a/shardingsphere-test/shardingsphere-parser-test/src/main/java/org/apache/shardingsphere/test/sql/parser/parameterized/jaxb/cases/domain/statement/dcl/RevokeStatementTestCase.java
 
b/shardingsphere-test/shardingsphere-parser-test/src/main/java/org/apache/shardingsphere/test/sql/parser/parameterized/jaxb/cases/domain/statement/dcl/RevokeStatementTestCase.java
index 89a1f21..8acfeed 100644
--- 
a/shardingsphere-test/shardingsphere-parser-test/src/main/java/org/apache/shardingsphere/test/sql/parser/parameterized/jaxb/cases/domain/statement/dcl/RevokeStatementTestCase.java
+++ 
b/shardingsphere-test/shardingsphere-parser-test/src/main/java/org/apache/shardingsphere/test/sql/parser/parameterized/jaxb/cases/domain/statement/dcl/RevokeStatementTestCase.java
@@ -18,6 +18,7 @@
 package 
org.apache.shardingsphere.test.sql.parser.parameterized.jaxb.cases.domain.statement.dcl;
 
 import lombok.Getter;
+import 
org.apache.shardingsphere.test.sql.parser.parameterized.jaxb.cases.domain.segment.impl.column.ExpectedColumn;
 import 
org.apache.shardingsphere.test.sql.parser.parameterized.jaxb.cases.domain.segment.impl.table.ExpectedSimpleTable;
 import 
org.apache.shardingsphere.test.sql.parser.parameterized.jaxb.cases.domain.statement.SQLParserTestCase;
 
@@ -33,4 +34,7 @@ public final class RevokeStatementTestCase extends 
SQLParserTestCase {
     
     @XmlElement(name = "table")
     private final List<ExpectedSimpleTable> tables = new LinkedList<>();
+    
+    @XmlElement(name = "column")
+    private final List<ExpectedColumn> columns = new LinkedList<>();
 }
diff --git 
a/shardingsphere-test/shardingsphere-parser-test/src/main/resources/case/dcl/revoke.xml
 
b/shardingsphere-test/shardingsphere-parser-test/src/main/resources/case/dcl/revoke.xml
index 5ac1956a..cfa8343 100644
--- 
a/shardingsphere-test/shardingsphere-parser-test/src/main/resources/case/dcl/revoke.xml
+++ 
b/shardingsphere-test/shardingsphere-parser-test/src/main/resources/case/dcl/revoke.xml
@@ -173,6 +173,7 @@
     
     <revoke sql-case-id="revoke_select_to_users">
         <table name="t_order" start-index="28" stop-index="34" />
+        <column name="order_id" start-index="15" stop-index="22" />
     </revoke>
     
     <revoke sql-case-id="revoke_crud_on_table">
@@ -186,4 +187,45 @@
     <revoke sql-case-id="revoke_select_on_table_for_sqlserver">
         <table name="t_order" start-index="17" stop-index="23" />
     </revoke>
+
+    <revoke 
sql-case-id="revoke_view_definition_on_availability_group_to_login" />
+    <revoke sql-case-id="revoke_take_ownership_on_availability_group_to_user" 
/>
+    <revoke sql-case-id="revoke_grant_option_on_availability_group_to_user" />
+    <revoke sql-case-id="revoke_create_certificate_from_user" />
+    <revoke sql-case-id="revoke_references_from_role" />
+    <revoke sql-case-id="revoke_view_definition_from_user" />
+    <revoke sql-case-id="revoke_control_on_user" />
+    <revoke sql-case-id="revoke_view_definition_on_role_from_user" />
+    <revoke sql-case-id="revoke_impersonate_on_user" />
+    <revoke sql-case-id="revoke_view_definition_on_endpoint_from_login" />
+    <revoke sql-case-id="revoke_take_ownership_on_endpoint_from_user" />
+
+    <revoke sql-case-id="revoke_select_on_object_from_user">
+        <table name="t_order" start-index="25" stop-index="35" >
+            <owner name="db1" start-index="25" stop-index="27" />
+        </table>
+    </revoke>
+
+    <revoke sql-case-id="revoke_execute_on_object_from_role">
+        <table name="t_order" start-index="26" stop-index="36" >
+            <owner name="db1" start-index="26" stop-index="28" />
+        </table>
+    </revoke>
+
+    <revoke sql-case-id="revoke_references_on_object_from_user">
+        <table name="t_order" start-index="40" stop-index="50" >
+            <owner name="db1" start-index="40" stop-index="42" />
+        </table>
+        <column name="order_id" start-index="19" stop-index="26" />
+    </revoke>
+
+    <revoke sql-case-id="revoke_view_server_state_from_login" />
+    <revoke sql-case-id="revoke_grant_option_for_connect_sql_from_login" />
+    <revoke sql-case-id="revoke_impersonate_on_login_from_windows_user" />
+    <revoke sql-case-id="revoke_view_definition_on_login" />
+    <revoke sql-case-id="revoke_view_definition_on_server_role" />
+    <revoke sql-case-id="revoke_alter_on_symmetric_key_to_user" />
+    <revoke sql-case-id="revoke_execute_on_system_object" />
+    <revoke sql-case-id="revoke_view_definition_on_type" />
+    <revoke sql-case-id="revoke_execute_on_xml_schema_collection" />
 </sql-parser-test-cases>
diff --git 
a/shardingsphere-test/shardingsphere-parser-test/src/main/resources/sql/supported/dcl/revoke-user.xml
 
b/shardingsphere-test/shardingsphere-parser-test/src/main/resources/sql/supported/dcl/revoke-user.xml
index bd4d2fe..8ccf8f4 100644
--- 
a/shardingsphere-test/shardingsphere-parser-test/src/main/resources/sql/supported/dcl/revoke-user.xml
+++ 
b/shardingsphere-test/shardingsphere-parser-test/src/main/resources/sql/supported/dcl/revoke-user.xml
@@ -18,7 +18,7 @@
 
 <sql-cases>
     <sql-case id="revoke_user_without_hostname" value="REVOKE SELECT, UPDATE 
on t_order from user_dev" db-types="Oracle,PostgreSQL,openGauss,SQLServer" />
-    <sql-case id="revoke_role" value="REVOKE role_dev from user_dev" 
db-types="Oracle,PostgreSQL,openGauss,SQLServer" />
+    <sql-case id="revoke_role" value="REVOKE role_dev from user_dev" 
db-types="Oracle,PostgreSQL,openGauss" />
     <sql-case id="revoke_user_from" value="REVOKE ADVISOR, ALTER DATABASE from 
user_dev" db-types="Oracle" />
     <sql-case id="revoke_user_with_hostname_on_db" value="REVOKE select, 
insert ON * FROM 'user_dev'@'localhost'" db-types="MySQL" />
     <sql-case id="revoke_user_with_hostname_on_table" value="REVOKE select, 
insert ON t_order FROM 'user_dev'@'localhost'" db-types="MySQL" />
@@ -102,4 +102,27 @@
     <sql-case id="revoke_crud_on_table" value="REVOKE INSERT, SELECT, UPDATE, 
DELETE ON t_order FROM user1" db-types="SQLServer" />
     <sql-case id="revoke_select_on_table_for_postgresql" value="REVOKE SELECT 
ON TABLE t_order FROM role1" db-types="PostgreSQL,openGauss" />
     <sql-case id="revoke_select_on_table_for_sqlserver" value="REVOKE SELECT 
ON t_order FROM user1" db-types="SQLServer" />
+    <sql-case id="revoke_view_definition_on_availability_group_to_login" 
value="REVOKE VIEW DEFINITION ON AVAILABILITY GROUP::group1 TO login1" 
db-types="SQLServer" />
+    <sql-case id="revoke_take_ownership_on_availability_group_to_user" 
value="REVOKE TAKE OWNERSHIP ON AVAILABILITY GROUP::group1 TO user1 CASCADE" 
db-types="SQLServer" />
+    <sql-case id="revoke_grant_option_on_availability_group_to_user" 
value="REVOKE GRANT OPTION FOR CONTROL ON AVAILABILITY GROUP::group1 TO user1 
CASCADE" db-types="SQLServer" />
+    <sql-case id="revoke_create_certificate_from_user" value="REVOKE CREATE 
CERTIFICATE FROM user1" db-types="SQLServer" />
+    <sql-case id="revoke_references_from_role" value="REVOKE REFERENCES FROM 
role1" db-types="SQLServer" />
+    <sql-case id="revoke_view_definition_from_user" value="REVOKE VIEW 
DEFINITION FROM user1 CASCADE" db-types="SQLServer" />
+    <sql-case id="revoke_control_on_user" value="REVOKE CONTROL ON USER::user1 
FROM user2" db-types="SQLServer" />
+    <sql-case id="revoke_view_definition_on_role_from_user" value="REVOKE VIEW 
DEFINITION ON ROLE::role1 FROM user1 CASCADE" db-types="SQLServer" />
+    <sql-case id="revoke_impersonate_on_user" value="REVOKE IMPERSONATE ON 
USER::user1 FROM role1" db-types="SQLServer" />
+    <sql-case id="revoke_view_definition_on_endpoint_from_login" value="REVOKE 
VIEW DEFINITION ON ENDPOINT::endpoint1 FROM login1" db-types="SQLServer" />
+    <sql-case id="revoke_take_ownership_on_endpoint_from_user" value="REVOKE 
TAKE OWNERSHIP ON ENDPOINT::endpoint1 FROM user1 CASCADE" db-types="SQLServer" 
/>
+    <sql-case id="revoke_select_on_object_from_user" value="REVOKE SELECT ON 
OBJECT::db1.t_order FROM user1" db-types="SQLServer" />
+    <sql-case id="revoke_execute_on_object_from_role" value="REVOKE EXECUTE ON 
OBJECT::db1.t_order FROM role1" db-types="SQLServer" />
+    <sql-case id="revoke_references_on_object_from_user" value="REVOKE 
REFERENCES (order_id) ON OBJECT::db1.t_order FROM user1 CASCADE" 
db-types="SQLServer" />
+    <sql-case id="revoke_view_server_state_from_login" value="REVOKE VIEW 
SERVER STATE FROM login1" db-types="SQLServer" />
+    <sql-case id="revoke_grant_option_for_connect_sql_from_login" 
value="REVOKE GRANT OPTION FOR CONNECT SQL FROM login1" db-types="SQLServer" />
+    <sql-case id="revoke_impersonate_on_login_from_windows_user" value="REVOKE 
IMPERSONATE ON LOGIN::login1 FROM [windows\user]" db-types="SQLServer" />
+    <sql-case id="revoke_view_definition_on_login" value="REVOKE VIEW 
DEFINITION ON LOGIN::login1 FROM login2 CASCADE" db-types="SQLServer" />
+    <sql-case id="revoke_view_definition_on_server_role" value="REVOKE VIEW 
DEFINITION ON SERVER ROLE::role1 TO role2" db-types="SQLServer" />
+    <sql-case id="revoke_alter_on_symmetric_key_to_user" value="REVOKE ALTER 
ON SYMMETRIC KEY::key1 TO user1 CASCADE" db-types="SQLServer" />
+    <sql-case id="revoke_execute_on_system_object" value="REVOKE EXECUTE ON 
sys.sp_addlinkedserver FROM public" db-types="SQLServer" />
+    <sql-case id="revoke_view_definition_on_type" value="REVOKE VIEW 
DEFINITION ON TYPE::schema1.type1 FROM user1 CASCADE" db-types="SQLServer" />
+    <sql-case id="revoke_execute_on_xml_schema_collection" value="REVOKE 
EXECUTE ON XML SCHEMA COLLECTION::schema1.xmlschemacollection1 FROM user1" 
db-types="SQLServer" />
 </sql-cases>

Reply via email to