You are viewing a plain text version of this content. The canonical link for it is here.
Posted to notifications@shardingsphere.apache.org by su...@apache.org on 2023/05/17 12:24:11 UTC

[shardingsphere] branch master updated: Fix sonar issues on DCLStatementVisitor (#25740)

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

sunnianjun 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 a7621d8dd3d Fix sonar issues on DCLStatementVisitor (#25740)
a7621d8dd3d is described below

commit a7621d8dd3da6eea448b1f33b78566e94c803d51
Author: Liang Zhang <zh...@apache.org>
AuthorDate: Wed May 17 20:24:03 2023 +0800

    Fix sonar issues on DCLStatementVisitor (#25740)
    
    * Fix sonar issues on SQLServerDCLStatementVisitor
    
    * Fix sonar issues on SQLServerDCLStatementVisitor
    
    * Fix sonar issues on OpenGaussDCLStatementVisitor
    
    * Fix sonar issues on OracleDCLStatementVisitor
    
    * Fix sonar issues on SQL92DCLStatementVisitor
    
    * Fix sonar issues on PostgreSQLDCLStatementVisitor
    
    * Fix sonar issues on PostgreSQLDCLStatementVisitor
---
 .../type/OpenGaussDCLStatementVisitor.java         |  21 +++--
 .../statement/type/OracleDCLStatementVisitor.java  |  20 +----
 .../type/PostgreSQLDCLStatementVisitor.java        |  25 +++---
 .../statement/type/SQL92DCLStatementVisitor.java   |  16 +---
 .../type/SQLServerDCLStatementVisitor.java         | 100 +++++----------------
 5 files changed, 51 insertions(+), 131 deletions(-)

diff --git a/parser/sql/dialect/opengauss/src/main/java/org/apache/shardingsphere/sql/parser/opengauss/visitor/statement/type/OpenGaussDCLStatementVisitor.java b/parser/sql/dialect/opengauss/src/main/java/org/apache/shardingsphere/sql/parser/opengauss/visitor/statement/type/OpenGaussDCLStatementVisitor.java
index 509d3433d84..9046267c809 100644
--- a/parser/sql/dialect/opengauss/src/main/java/org/apache/shardingsphere/sql/parser/opengauss/visitor/statement/type/OpenGaussDCLStatementVisitor.java
+++ b/parser/sql/dialect/opengauss/src/main/java/org/apache/shardingsphere/sql/parser/opengauss/visitor/statement/type/OpenGaussDCLStatementVisitor.java
@@ -41,7 +41,6 @@ import org.apache.shardingsphere.sql.parser.sql.dialect.statement.opengauss.dcl.
 import org.apache.shardingsphere.sql.parser.sql.dialect.statement.opengauss.dcl.OpenGaussRevokeStatement;
 
 import java.util.Collection;
-import java.util.Optional;
 
 /**
  * DCL statement visitor for openGauss.
@@ -51,24 +50,28 @@ public final class OpenGaussDCLStatementVisitor extends OpenGaussStatementVisito
     @Override
     public ASTNode visitGrant(final GrantContext ctx) {
         OpenGaussGrantStatement result = new OpenGaussGrantStatement();
-        Optional<Collection<SimpleTableSegment>> tableSegment = null == ctx.privilegeClause() ? Optional.empty() : getTableFromPrivilegeClause(ctx.privilegeClause());
-        tableSegment.ifPresent(optional -> result.getTables().addAll(optional));
+        if (containsTableSegment(ctx.privilegeClause())) {
+            result.getTables().addAll(getTableSegments(ctx.privilegeClause()));
+        }
         return result;
     }
     
     @Override
     public ASTNode visitRevoke(final RevokeContext ctx) {
         OpenGaussRevokeStatement result = new OpenGaussRevokeStatement();
-        Optional<Collection<SimpleTableSegment>> tableSegment = null == ctx.privilegeClause() ? Optional.empty() : getTableFromPrivilegeClause(ctx.privilegeClause());
-        tableSegment.ifPresent(optional -> result.getTables().addAll(optional));
+        if (containsTableSegment(ctx.privilegeClause())) {
+            result.getTables().addAll(getTableSegments(ctx.privilegeClause()));
+        }
         return result;
     }
     
+    private boolean containsTableSegment(final PrivilegeClauseContext ctx) {
+        return null != ctx && null != ctx.onObjectClause() && null != ctx.onObjectClause().privilegeLevel() && null != ctx.onObjectClause().privilegeLevel().tableNames();
+    }
+    
     @SuppressWarnings("unchecked")
-    private Optional<Collection<SimpleTableSegment>> getTableFromPrivilegeClause(final PrivilegeClauseContext ctx) {
-        return null == ctx.onObjectClause() || null == ctx.onObjectClause().privilegeLevel() || null == ctx.onObjectClause().privilegeLevel().tableNames()
-                ? Optional.empty()
-                : Optional.of(((CollectionValue<SimpleTableSegment>) visit(ctx.onObjectClause().privilegeLevel().tableNames())).getValue());
+    private Collection<SimpleTableSegment> getTableSegments(final PrivilegeClauseContext ctx) {
+        return ((CollectionValue<SimpleTableSegment>) visit(ctx.onObjectClause().privilegeLevel().tableNames())).getValue();
     }
     
     @Override
diff --git a/parser/sql/dialect/oracle/src/main/java/org/apache/shardingsphere/sql/parser/oracle/visitor/statement/type/OracleDCLStatementVisitor.java b/parser/sql/dialect/oracle/src/main/java/org/apache/shardingsphere/sql/parser/oracle/visitor/statement/type/OracleDCLStatementVisitor.java
index a3f16e641de..1c405d69e4f 100644
--- a/parser/sql/dialect/oracle/src/main/java/org/apache/shardingsphere/sql/parser/oracle/visitor/statement/type/OracleDCLStatementVisitor.java
+++ b/parser/sql/dialect/oracle/src/main/java/org/apache/shardingsphere/sql/parser/oracle/visitor/statement/type/OracleDCLStatementVisitor.java
@@ -26,7 +26,6 @@ import org.apache.shardingsphere.sql.parser.autogen.OracleStatementParser.Create
 import org.apache.shardingsphere.sql.parser.autogen.OracleStatementParser.DropRoleContext;
 import org.apache.shardingsphere.sql.parser.autogen.OracleStatementParser.DropUserContext;
 import org.apache.shardingsphere.sql.parser.autogen.OracleStatementParser.GrantContext;
-import org.apache.shardingsphere.sql.parser.autogen.OracleStatementParser.ObjectPrivilegeClauseContext;
 import org.apache.shardingsphere.sql.parser.autogen.OracleStatementParser.RevokeContext;
 import org.apache.shardingsphere.sql.parser.autogen.OracleStatementParser.SetRoleContext;
 import org.apache.shardingsphere.sql.parser.oracle.visitor.statement.OracleStatementVisitor;
@@ -41,9 +40,6 @@ import org.apache.shardingsphere.sql.parser.sql.dialect.statement.oracle.dcl.Ora
 import org.apache.shardingsphere.sql.parser.sql.dialect.statement.oracle.dcl.OracleRevokeStatement;
 import org.apache.shardingsphere.sql.parser.sql.dialect.statement.oracle.dcl.OracleSetRoleStatement;
 
-import java.util.Collection;
-import java.util.Collections;
-
 /**
  * DCL statement visitor for Oracle.
  */
@@ -52,10 +48,8 @@ public final class OracleDCLStatementVisitor extends OracleStatementVisitor impl
     @Override
     public ASTNode visitGrant(final GrantContext ctx) {
         OracleGrantStatement result = new OracleGrantStatement();
-        if (null != ctx.objectPrivilegeClause()) {
-            for (SimpleTableSegment each : getTableFromPrivilegeClause(ctx.objectPrivilegeClause())) {
-                result.getTables().add(each);
-            }
+        if (null != ctx.objectPrivilegeClause() && null != ctx.objectPrivilegeClause().onObjectClause().tableName()) {
+            result.getTables().add((SimpleTableSegment) visit(ctx.objectPrivilegeClause().onObjectClause().tableName()));
         }
         return result;
     }
@@ -63,18 +57,12 @@ public final class OracleDCLStatementVisitor extends OracleStatementVisitor impl
     @Override
     public ASTNode visitRevoke(final RevokeContext ctx) {
         OracleRevokeStatement result = new OracleRevokeStatement();
-        if (null != ctx.objectPrivilegeClause()) {
-            for (SimpleTableSegment each : getTableFromPrivilegeClause(ctx.objectPrivilegeClause())) {
-                result.getTables().add(each);
-            }
+        if (null != ctx.objectPrivilegeClause() && null != ctx.objectPrivilegeClause().onObjectClause().tableName()) {
+            result.getTables().add((SimpleTableSegment) visit(ctx.objectPrivilegeClause().onObjectClause().tableName()));
         }
         return result;
     }
     
-    private Collection<SimpleTableSegment> getTableFromPrivilegeClause(final ObjectPrivilegeClauseContext ctx) {
-        return null == ctx.onObjectClause().tableName() ? Collections.emptyList() : Collections.singletonList((SimpleTableSegment) visit(ctx.onObjectClause().tableName()));
-    }
-    
     @Override
     public ASTNode visitCreateUser(final CreateUserContext ctx) {
         return new OracleCreateUserStatement();
diff --git a/parser/sql/dialect/postgresql/src/main/java/org/apache/shardingsphere/sql/parser/postgresql/visitor/statement/type/PostgreSQLDCLStatementVisitor.java b/parser/sql/dialect/postgresql/src/main/java/org/apache/shardingsphere/sql/parser/postgresql/visitor/statement/type/PostgreSQLDCLStatementVisitor.java
index 176ac111a07..04a2cb12098 100644
--- a/parser/sql/dialect/postgresql/src/main/java/org/apache/shardingsphere/sql/parser/postgresql/visitor/statement/type/PostgreSQLDCLStatementVisitor.java
+++ b/parser/sql/dialect/postgresql/src/main/java/org/apache/shardingsphere/sql/parser/postgresql/visitor/statement/type/PostgreSQLDCLStatementVisitor.java
@@ -45,7 +45,6 @@ import org.apache.shardingsphere.sql.parser.sql.dialect.statement.postgresql.dcl
 import org.apache.shardingsphere.sql.parser.sql.dialect.statement.postgresql.dcl.PostgreSQLRevokeStatement;
 
 import java.util.Collection;
-import java.util.Optional;
 
 /**
  * DCL statement visitor for PostgreSQL.
@@ -55,28 +54,28 @@ public final class PostgreSQLDCLStatementVisitor extends PostgreSQLStatementVisi
     @Override
     public ASTNode visitGrant(final GrantContext ctx) {
         PostgreSQLGrantStatement result = new PostgreSQLGrantStatement();
-        Optional<Collection<SimpleTableSegment>> tableSegment = null == ctx.privilegeClause() ? Optional.empty() : getTableFromPrivilegeClause(ctx.privilegeClause());
-        tableSegment.ifPresent(optional -> result.getTables().addAll(optional));
+        if (containsTableSegment(ctx.privilegeClause())) {
+            result.getTables().addAll(getTableSegments(ctx.privilegeClause()));
+        }
         return result;
     }
     
     @Override
     public ASTNode visitRevoke(final RevokeContext ctx) {
         PostgreSQLRevokeStatement result = new PostgreSQLRevokeStatement();
-        Optional<Collection<SimpleTableSegment>> tableSegment = null == ctx.privilegeClause() ? Optional.empty() : getTableFromPrivilegeClause(ctx.privilegeClause());
-        tableSegment.ifPresent(optional -> result.getTables().addAll(optional));
+        if (containsTableSegment(ctx.privilegeClause())) {
+            result.getTables().addAll(getTableSegments(ctx.privilegeClause()));
+        }
         return result;
     }
     
+    private boolean containsTableSegment(final PrivilegeClauseContext ctx) {
+        return null != ctx && null != ctx.onObjectClause() && null != ctx.onObjectClause().privilegeLevel() && null != ctx.onObjectClause().privilegeLevel().tableNames();
+    }
+    
     @SuppressWarnings("unchecked")
-    private Optional<Collection<SimpleTableSegment>> getTableFromPrivilegeClause(final PrivilegeClauseContext ctx) {
-        if (null == ctx.onObjectClause() || null == ctx.onObjectClause().privilegeLevel()) {
-            return Optional.empty();
-        }
-        if (null == ctx.onObjectClause().privilegeLevel().tableNames()) {
-            return Optional.empty();
-        }
-        return Optional.of(((CollectionValue<SimpleTableSegment>) visit(ctx.onObjectClause().privilegeLevel().tableNames())).getValue());
+    private Collection<SimpleTableSegment> getTableSegments(final PrivilegeClauseContext ctx) {
+        return ((CollectionValue<SimpleTableSegment>) visit(ctx.onObjectClause().privilegeLevel().tableNames())).getValue();
     }
     
     @Override
diff --git a/parser/sql/dialect/sql92/src/main/java/org/apache/shardingsphere/sql/parser/sql92/visitor/statement/type/SQL92DCLStatementVisitor.java b/parser/sql/dialect/sql92/src/main/java/org/apache/shardingsphere/sql/parser/sql92/visitor/statement/type/SQL92DCLStatementVisitor.java
index 733d11e03f8..26b4250f77a 100644
--- a/parser/sql/dialect/sql92/src/main/java/org/apache/shardingsphere/sql/parser/sql92/visitor/statement/type/SQL92DCLStatementVisitor.java
+++ b/parser/sql/dialect/sql92/src/main/java/org/apache/shardingsphere/sql/parser/sql92/visitor/statement/type/SQL92DCLStatementVisitor.java
@@ -20,16 +20,12 @@ package org.apache.shardingsphere.sql.parser.sql92.visitor.statement.type;
 import org.apache.shardingsphere.sql.parser.api.ASTNode;
 import org.apache.shardingsphere.sql.parser.api.visitor.statement.type.DCLStatementVisitor;
 import org.apache.shardingsphere.sql.parser.autogen.SQL92StatementParser.GrantContext;
-import org.apache.shardingsphere.sql.parser.autogen.SQL92StatementParser.PrivilegeClauseContext;
 import org.apache.shardingsphere.sql.parser.autogen.SQL92StatementParser.RevokeContext;
 import org.apache.shardingsphere.sql.parser.sql.common.segment.generic.table.SimpleTableSegment;
 import org.apache.shardingsphere.sql.parser.sql.dialect.statement.sql92.dcl.SQL92GrantStatement;
 import org.apache.shardingsphere.sql.parser.sql.dialect.statement.sql92.dcl.SQL92RevokeStatement;
 import org.apache.shardingsphere.sql.parser.sql92.visitor.statement.SQL92StatementVisitor;
 
-import java.util.Collection;
-import java.util.Collections;
-
 /**
  * DCL statement visitor for SQL92.
  */
@@ -39,9 +35,7 @@ public final class SQL92DCLStatementVisitor extends SQL92StatementVisitor implem
     public ASTNode visitGrant(final GrantContext ctx) {
         SQL92GrantStatement result = new SQL92GrantStatement();
         if (null != ctx.privilegeClause()) {
-            for (SimpleTableSegment each : getTableFromPrivilegeClause(ctx.privilegeClause())) {
-                result.getTables().add(each);
-            }
+            result.getTables().add((SimpleTableSegment) visit(ctx.privilegeClause().onObjectClause().privilegeLevel().tableName()));
         }
         return result;
     }
@@ -50,14 +44,8 @@ public final class SQL92DCLStatementVisitor extends SQL92StatementVisitor implem
     public ASTNode visitRevoke(final RevokeContext ctx) {
         SQL92RevokeStatement result = new SQL92RevokeStatement();
         if (null != ctx.privilegeClause()) {
-            for (SimpleTableSegment each : getTableFromPrivilegeClause(ctx.privilegeClause())) {
-                result.getTables().add(each);
-            }
+            result.getTables().add((SimpleTableSegment) visit(ctx.privilegeClause().onObjectClause().privilegeLevel().tableName()));
         }
         return result;
     }
-    
-    private Collection<SimpleTableSegment> getTableFromPrivilegeClause(final PrivilegeClauseContext ctx) {
-        return Collections.singletonList((SimpleTableSegment) visit(ctx.onObjectClause().privilegeLevel().tableName()));
-    }
 }
diff --git a/parser/sql/dialect/sqlserver/src/main/java/org/apache/shardingsphere/sql/parser/sqlserver/visitor/statement/type/SQLServerDCLStatementVisitor.java b/parser/sql/dialect/sqlserver/src/main/java/org/apache/shardingsphere/sql/parser/sqlserver/visitor/statement/type/SQLServerDCLStatementVisitor.java
index 4b41bedc11b..4f8d035e94b 100644
--- a/parser/sql/dialect/sqlserver/src/main/java/org/apache/shardingsphere/sql/parser/sqlserver/visitor/statement/type/SQLServerDCLStatementVisitor.java
+++ b/parser/sql/dialect/sqlserver/src/main/java/org/apache/shardingsphere/sql/parser/sqlserver/visitor/statement/type/SQLServerDCLStatementVisitor.java
@@ -22,26 +22,23 @@ import org.apache.shardingsphere.sql.parser.api.visitor.statement.type.DCLStatem
 import org.apache.shardingsphere.sql.parser.autogen.SQLServerStatementParser.AlterLoginContext;
 import org.apache.shardingsphere.sql.parser.autogen.SQLServerStatementParser.AlterRoleContext;
 import org.apache.shardingsphere.sql.parser.autogen.SQLServerStatementParser.AlterUserContext;
+import org.apache.shardingsphere.sql.parser.autogen.SQLServerStatementParser.ClassPrivilegesContext;
 import org.apache.shardingsphere.sql.parser.autogen.SQLServerStatementParser.ColumnNamesContext;
 import org.apache.shardingsphere.sql.parser.autogen.SQLServerStatementParser.CreateLoginContext;
 import org.apache.shardingsphere.sql.parser.autogen.SQLServerStatementParser.CreateRoleContext;
 import org.apache.shardingsphere.sql.parser.autogen.SQLServerStatementParser.CreateUserContext;
 import org.apache.shardingsphere.sql.parser.autogen.SQLServerStatementParser.CreateUserLoginWindowsPrincipalClauseContext;
 import org.apache.shardingsphere.sql.parser.autogen.SQLServerStatementParser.CreateUserWindowsPrincipalClauseContext;
-import org.apache.shardingsphere.sql.parser.autogen.SQLServerStatementParser.DenyClassPrivilegesClauseContext;
-import org.apache.shardingsphere.sql.parser.autogen.SQLServerStatementParser.DenyClassTypePrivilegesClauseContext;
 import org.apache.shardingsphere.sql.parser.autogen.SQLServerStatementParser.DenyContext;
 import org.apache.shardingsphere.sql.parser.autogen.SQLServerStatementParser.DropLoginContext;
 import org.apache.shardingsphere.sql.parser.autogen.SQLServerStatementParser.DropRoleContext;
 import org.apache.shardingsphere.sql.parser.autogen.SQLServerStatementParser.DropUserContext;
-import org.apache.shardingsphere.sql.parser.autogen.SQLServerStatementParser.GrantClassPrivilegesClauseContext;
-import org.apache.shardingsphere.sql.parser.autogen.SQLServerStatementParser.GrantClassTypePrivilegesClauseContext;
 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.OnClassClauseContext;
+import org.apache.shardingsphere.sql.parser.autogen.SQLServerStatementParser.OnClassTypeClauseContext;
 import org.apache.shardingsphere.sql.parser.autogen.SQLServerStatementParser.OwnerContext;
 import org.apache.shardingsphere.sql.parser.autogen.SQLServerStatementParser.RevertContext;
-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;
@@ -71,8 +68,7 @@ import org.apache.shardingsphere.sql.parser.sql.dialect.statement.sqlserver.dcl.
 import org.apache.shardingsphere.sql.parser.sql.dialect.statement.sqlserver.dcl.SQLServerSetUserStatement;
 import org.apache.shardingsphere.sql.parser.sqlserver.visitor.statement.SQLServerStatementVisitor;
 
-import java.util.Collection;
-import java.util.LinkedList;
+import java.util.Optional;
 
 /**
  * DCL statement visitor for SQLServer.
@@ -83,9 +79,7 @@ public final class SQLServerDCLStatementVisitor extends SQLServerStatementVisito
     public ASTNode visitGrant(final GrantContext ctx) {
         SQLServerGrantStatement result = new SQLServerGrantStatement();
         if (null != ctx.grantClassPrivilegesClause()) {
-            for (SimpleTableSegment each : getTableFromGrantPrivilegeClause(ctx.grantClassPrivilegesClause())) {
-                result.getTables().add(each);
-            }
+            findTableSegment(ctx.grantClassPrivilegesClause().onClassClause(), ctx.grantClassPrivilegesClause().classPrivileges()).ifPresent(optional -> result.getTables().add(optional));
             if (null != ctx.grantClassPrivilegesClause().classPrivileges().columnNames()) {
                 for (ColumnNamesContext each : ctx.grantClassPrivilegesClause().classPrivileges().columnNames()) {
                     result.getColumns().addAll(((CollectionValue<ColumnSegment>) visit(each)).getValue());
@@ -93,28 +87,7 @@ public final class SQLServerDCLStatementVisitor extends SQLServerStatementVisito
             }
         }
         if (null != 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 LinkedList<>();
-        if (null != ctx.onClassClause()) {
-            if (null != ctx.onClassClause().classItem() && null != ctx.onClassClause().classItem().OBJECT()
-                    || null != ctx.classPrivileges().privilegeType().get(0).objectPermission() || null != ctx.classPrivileges().privilegeType().get(0).PRIVILEGES()) {
-                result.add((SimpleTableSegment) visit(ctx.onClassClause().securable()));
-            }
-        }
-        return result;
-    }
-    
-    private Collection<SimpleTableSegment> getTableFromGrantTypePrivilegeClause(final GrantClassTypePrivilegesClauseContext ctx) {
-        Collection<SimpleTableSegment> result = new LinkedList<>();
-        if (null != ctx.onClassTypeClause() && null != ctx.onClassTypeClause().classType() && null != ctx.onClassTypeClause().classType().OBJECT()) {
-            result.add((SimpleTableSegment) visit(ctx.onClassTypeClause().securable()));
+            findTableSegment(ctx.grantClassTypePrivilegesClause().onClassTypeClause()).ifPresent(optional -> result.getTables().add(optional));
         }
         return result;
     }
@@ -123,9 +96,7 @@ public final class SQLServerDCLStatementVisitor extends SQLServerStatementVisito
     public ASTNode visitRevoke(final RevokeContext ctx) {
         SQLServerRevokeStatement result = new SQLServerRevokeStatement();
         if (null != ctx.revokeClassPrivilegesClause()) {
-            for (SimpleTableSegment each : getTableFromRevokeClassPrivilegesClause(ctx.revokeClassPrivilegesClause())) {
-                result.getTables().add(each);
-            }
+            findTableSegment(ctx.revokeClassPrivilegesClause().onClassClause(), ctx.revokeClassPrivilegesClause().classPrivileges()).ifPresent(optional -> result.getTables().add(optional));
             if (null != ctx.revokeClassPrivilegesClause().classPrivileges().columnNames()) {
                 for (ColumnNamesContext each : ctx.revokeClassPrivilegesClause().classPrivileges().columnNames()) {
                     result.getColumns().addAll(((CollectionValue<ColumnSegment>) visit(each)).getValue());
@@ -133,28 +104,7 @@ public final class SQLServerDCLStatementVisitor extends SQLServerStatementVisito
             }
         }
         if (null != ctx.revokeClassTypePrivilegesClause()) {
-            for (SimpleTableSegment each : getTableFromRevokeClassTypePrivilegesClause(ctx.revokeClassTypePrivilegesClause())) {
-                result.getTables().add(each);
-            }
-        }
-        return result;
-    }
-    
-    private Collection<SimpleTableSegment> getTableFromRevokeClassPrivilegesClause(final RevokeClassPrivilegesClauseContext ctx) {
-        Collection<SimpleTableSegment> result = new LinkedList<>();
-        if (null != ctx.onClassClause()) {
-            if (null != ctx.onClassClause().classItem() && null != ctx.onClassClause().classItem().OBJECT()
-                    || null != ctx.classPrivileges().privilegeType().get(0).objectPermission() || null != ctx.classPrivileges().privilegeType().get(0).PRIVILEGES()) {
-                result.add((SimpleTableSegment) visit(ctx.onClassClause().securable()));
-            }
-        }
-        return result;
-    }
-    
-    private Collection<SimpleTableSegment> getTableFromRevokeClassTypePrivilegesClause(final RevokeClassTypePrivilegesClauseContext ctx) {
-        Collection<SimpleTableSegment> result = new LinkedList<>();
-        if (null != ctx.onClassTypeClause() && null != ctx.onClassTypeClause().classType() && null != ctx.onClassTypeClause().classType().OBJECT()) {
-            result.add((SimpleTableSegment) visit(ctx.onClassTypeClause().securable()));
+            findTableSegment(ctx.revokeClassTypePrivilegesClause().onClassTypeClause()).ifPresent(optional -> result.getTables().add(optional));
         }
         return result;
     }
@@ -219,7 +169,7 @@ public final class SQLServerDCLStatementVisitor extends SQLServerStatementVisito
     
     @Override
     public ASTNode visitCreateUserLoginWindowsPrincipalClause(final CreateUserLoginWindowsPrincipalClauseContext ctx) {
-        return null != ctx.userName() ? (UserSegment) visit(ctx.userName()) : (UserSegment) visit(ctx.windowsPrincipal(0));
+        return null == ctx.userName() ? (UserSegment) visit(ctx.windowsPrincipal(0)) : (UserSegment) visit(ctx.userName());
     }
     
     @Override
@@ -233,9 +183,7 @@ public final class SQLServerDCLStatementVisitor extends SQLServerStatementVisito
     public ASTNode visitDeny(final DenyContext ctx) {
         SQLServerDenyUserStatement result = new SQLServerDenyUserStatement();
         if (null != ctx.denyClassPrivilegesClause()) {
-            for (SimpleTableSegment each : getTableFromDenyClassPrivilegesClause(ctx.denyClassPrivilegesClause())) {
-                result.setTable(each);
-            }
+            findTableSegment(ctx.denyClassPrivilegesClause().onClassClause(), ctx.denyClassPrivilegesClause().classPrivileges()).ifPresent(result::setTable);
             if (null != ctx.denyClassPrivilegesClause().classPrivileges().columnNames()) {
                 for (ColumnNamesContext each : ctx.denyClassPrivilegesClause().classPrivileges().columnNames()) {
                     result.getColumns().addAll(((CollectionValue<ColumnSegment>) visit(each)).getValue());
@@ -243,30 +191,24 @@ public final class SQLServerDCLStatementVisitor extends SQLServerStatementVisito
             }
         }
         if (null != ctx.denyClassTypePrivilegesClause()) {
-            for (SimpleTableSegment each : getTableFromDenyClassTypePrivilegesClause(ctx.denyClassTypePrivilegesClause())) {
-                result.setTable(each);
-            }
+            findTableSegment(ctx.denyClassTypePrivilegesClause().onClassTypeClause()).ifPresent(result::setTable);
         }
         return result;
     }
     
-    private Collection<SimpleTableSegment> getTableFromDenyClassPrivilegesClause(final DenyClassPrivilegesClauseContext ctx) {
-        Collection<SimpleTableSegment> result = new LinkedList<>();
-        if (null != ctx.onClassClause()) {
-            if (null != ctx.onClassClause().classItem() && null != ctx.onClassClause().classItem().OBJECT()
-                    || null != ctx.classPrivileges().privilegeType().get(0).objectPermission() || null != ctx.classPrivileges().privilegeType().get(0).PRIVILEGES()) {
-                result.add((SimpleTableSegment) visit(ctx.onClassClause().securable()));
-            }
+    private Optional<SimpleTableSegment> findTableSegment(final OnClassClauseContext onClassClauseCtx, final ClassPrivilegesContext classPrivilegesCtx) {
+        if (null == onClassClauseCtx) {
+            return Optional.empty();
         }
-        return result;
+        if (null != onClassClauseCtx.classItem() && null != onClassClauseCtx.classItem().OBJECT()
+                || null != classPrivilegesCtx.privilegeType().get(0).objectPermission() || null != classPrivilegesCtx.privilegeType().get(0).PRIVILEGES()) {
+            return Optional.of((SimpleTableSegment) visit(onClassClauseCtx.securable()));
+        }
+        return Optional.empty();
     }
     
-    private Collection<SimpleTableSegment> getTableFromDenyClassTypePrivilegesClause(final DenyClassTypePrivilegesClauseContext ctx) {
-        Collection<SimpleTableSegment> result = new LinkedList<>();
-        if (null != ctx.onClassTypeClause() && null != ctx.onClassTypeClause().classType() && null != ctx.onClassTypeClause().classType().OBJECT()) {
-            result.add((SimpleTableSegment) visit(ctx.onClassTypeClause().securable()));
-        }
-        return result;
+    private Optional<SimpleTableSegment> findTableSegment(final OnClassTypeClauseContext ctx) {
+        return null != ctx && null != ctx.classType() && null != ctx.classType().OBJECT() ? Optional.of((SimpleTableSegment) visit(ctx.securable())) : Optional.empty();
     }
     
     @Override