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

panjuan 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 5fae196979f Fix sonar issue of AbstractShadowDMLStatementRouteEngine 
(#25896)
5fae196979f is described below

commit 5fae196979f2078971483233a9d734f9ad405bc0
Author: Liang Zhang <[email protected]>
AuthorDate: Thu May 25 22:13:34 2023 +0800

    Fix sonar issue of AbstractShadowDMLStatementRouteEngine (#25896)
---
 .../shadow/route/engine/ShadowRouteEngine.java     |  10 +-
 .../dml/AbstractShadowDMLStatementRouteEngine.java | 124 ++++++++-------------
 .../impl/ShadowNonDMLStatementRoutingEngine.java   |  25 ++---
 .../mysql/command/MySQLCommandExecutorFactory.java |   1 +
 4 files changed, 64 insertions(+), 96 deletions(-)

diff --git 
a/features/shadow/core/src/main/java/org/apache/shardingsphere/shadow/route/engine/ShadowRouteEngine.java
 
b/features/shadow/core/src/main/java/org/apache/shardingsphere/shadow/route/engine/ShadowRouteEngine.java
index ca196d0714f..6e32191d80e 100644
--- 
a/features/shadow/core/src/main/java/org/apache/shardingsphere/shadow/route/engine/ShadowRouteEngine.java
+++ 
b/features/shadow/core/src/main/java/org/apache/shardingsphere/shadow/route/engine/ShadowRouteEngine.java
@@ -36,24 +36,24 @@ public interface ShadowRouteEngine {
      * Route.
      *
      * @param routeContext route context
-     * @param shadowRule shadow rule
+     * @param rule shadow rule
      */
-    void route(RouteContext routeContext, ShadowRule shadowRule);
+    void route(RouteContext routeContext, ShadowRule rule);
     
     /**
      * Decorate route context.
      *
      * @param routeContext route context to be decorated
-     * @param shadowRule shadow rule
+     * @param rule shadow rule
      * @param shadowDataSourceMappings shadow data source mappings
      */
-    default void decorateRouteContext(final RouteContext routeContext, final 
ShadowRule shadowRule, final Map<String, String> shadowDataSourceMappings) {
+    default void decorateRouteContext(final RouteContext routeContext, final 
ShadowRule rule, final Map<String, String> shadowDataSourceMappings) {
         Collection<RouteUnit> toBeRemovedRouteUnit = new LinkedList<>();
         Collection<RouteUnit> toBeAddedRouteUnit = new LinkedList<>();
         for (RouteUnit each : routeContext.getRouteUnits()) {
             String logicName = each.getDataSourceMapper().getLogicName();
             String actualName = each.getDataSourceMapper().getActualName();
-            Optional<String> sourceDataSourceName = 
shadowRule.getSourceDataSourceName(actualName);
+            Optional<String> sourceDataSourceName = 
rule.getSourceDataSourceName(actualName);
             if (sourceDataSourceName.isPresent()) {
                 String shadowDataSourceName = 
shadowDataSourceMappings.get(sourceDataSourceName.get());
                 toBeRemovedRouteUnit.add(each);
diff --git 
a/features/shadow/core/src/main/java/org/apache/shardingsphere/shadow/route/engine/dml/AbstractShadowDMLStatementRouteEngine.java
 
b/features/shadow/core/src/main/java/org/apache/shardingsphere/shadow/route/engine/dml/AbstractShadowDMLStatementRouteEngine.java
index 319e0dabfc6..1ff61eb2616 100644
--- 
a/features/shadow/core/src/main/java/org/apache/shardingsphere/shadow/route/engine/dml/AbstractShadowDMLStatementRouteEngine.java
+++ 
b/features/shadow/core/src/main/java/org/apache/shardingsphere/shadow/route/engine/dml/AbstractShadowDMLStatementRouteEngine.java
@@ -35,7 +35,6 @@ import java.util.Collection;
 import java.util.Collections;
 import java.util.Iterator;
 import java.util.LinkedHashMap;
-import java.util.LinkedHashSet;
 import java.util.Map;
 import java.util.Optional;
 
@@ -48,96 +47,90 @@ public abstract class AbstractShadowDMLStatementRouteEngine 
implements ShadowRou
     private final Map<String, String> tableAliasNameMappings = new 
LinkedHashMap<>();
     
     @Override
-    public void route(final RouteContext routeContext, final ShadowRule 
shadowRule) {
-        decorateRouteContext(routeContext, shadowRule, 
findShadowDataSourceMappings(shadowRule));
+    public final void route(final RouteContext routeContext, final ShadowRule 
rule) {
+        
tableAliasNameMappings.putAll(getTableAliasNameMappings(getAllTables()));
+        decorateRouteContext(routeContext, rule, 
findShadowDataSourceMappings(rule));
     }
     
-    private Map<String, String> findShadowDataSourceMappings(final ShadowRule 
shadowRule) {
-        Collection<String> relatedShadowTables = 
getRelatedShadowTables(getAllTables(), shadowRule);
-        if (relatedShadowTables.isEmpty() && 
isMatchDefaultShadowAlgorithm(shadowRule)) {
-            return shadowRule.getAllShadowDataSourceMappings();
-        }
-        ShadowOperationType shadowOperationType = getShadowOperationType();
-        Map<String, String> result = findBySQLComments(relatedShadowTables, 
shadowRule, shadowOperationType);
-        if (!result.isEmpty()) {
-            return result;
+    private Map<String, String> getTableAliasNameMappings(final 
Collection<SimpleTableSegment> tableSegments) {
+        Map<String, String> result = new LinkedHashMap<>();
+        for (SimpleTableSegment each : tableSegments) {
+            String tableName = each.getTableName().getIdentifier().getValue();
+            String alias = each.getAlias().isPresent() ? each.getAlias().get() 
: tableName;
+            result.put(alias, tableName);
         }
-        return findByShadowColumn(relatedShadowTables, shadowRule, 
shadowOperationType);
+        return result;
     }
     
-    private Collection<String> getRelatedShadowTables(final 
Collection<SimpleTableSegment> simpleTableSegments, final ShadowRule 
shadowRule) {
-        Collection<String> tableNames = new LinkedHashSet<>();
-        for (SimpleTableSegment each : simpleTableSegments) {
-            String tableName = each.getTableName().getIdentifier().getValue();
-            String alias = each.getAlias().isPresent() ? each.getAlias().get() 
: tableName;
-            tableNames.add(tableName);
-            tableAliasNameMappings.put(alias, tableName);
+    private Map<String, String> findShadowDataSourceMappings(final ShadowRule 
rule) {
+        Collection<String> relatedShadowTables = 
rule.getRelatedShadowTables(tableAliasNameMappings.values());
+        if (relatedShadowTables.isEmpty() && isMatchDefaultAlgorithm(rule)) {
+            return rule.getAllShadowDataSourceMappings();
         }
-        return shadowRule.getRelatedShadowTables(tableNames);
+        ShadowOperationType shadowOperationType = getShadowOperationType();
+        Map<String, String> result = findBySQLComments(rule, 
relatedShadowTables, shadowOperationType);
+        return result.isEmpty() ? findByShadowColumn(rule, 
relatedShadowTables, shadowOperationType) : result;
     }
     
     @SuppressWarnings("unchecked")
-    private boolean isMatchDefaultShadowAlgorithm(final ShadowRule shadowRule) 
{
+    private boolean isMatchDefaultAlgorithm(final ShadowRule rule) {
         Optional<Collection<String>> sqlComments = parseSQLComments();
         if (!sqlComments.isPresent()) {
             return false;
         }
-        Optional<ShadowAlgorithm> defaultShadowAlgorithm = 
shadowRule.getDefaultShadowAlgorithm();
-        if (defaultShadowAlgorithm.isPresent()) {
-            ShadowAlgorithm shadowAlgorithm = defaultShadowAlgorithm.get();
-            if (shadowAlgorithm instanceof HintShadowAlgorithm<?>) {
-                ShadowDetermineCondition shadowDetermineCondition = new 
ShadowDetermineCondition("", ShadowOperationType.HINT_MATCH);
-                return 
HintShadowAlgorithmDeterminer.isShadow((HintShadowAlgorithm<Comparable<?>>) 
shadowAlgorithm, shadowDetermineCondition.initSQLComments(sqlComments.get()), 
shadowRule);
-            }
+        Optional<ShadowAlgorithm> defaultAlgorithm = 
rule.getDefaultShadowAlgorithm();
+        if (defaultAlgorithm.isPresent() && defaultAlgorithm.get() instanceof 
HintShadowAlgorithm<?>) {
+            ShadowDetermineCondition determineCondition = new 
ShadowDetermineCondition("", ShadowOperationType.HINT_MATCH);
+            return 
HintShadowAlgorithmDeterminer.isShadow((HintShadowAlgorithm<Comparable<?>>) 
defaultAlgorithm.get(), determineCondition.initSQLComments(sqlComments.get()), 
rule);
         }
         return false;
     }
     
-    private Map<String, String> findBySQLComments(final Collection<String> 
relatedShadowTables, final ShadowRule shadowRule, final ShadowOperationType 
shadowOperationType) {
+    private Map<String, String> findBySQLComments(final ShadowRule rule, final 
Collection<String> relatedShadowTables, final ShadowOperationType 
shadowOperationType) {
         Map<String, String> result = new LinkedHashMap<>();
         for (String each : relatedShadowTables) {
-            if (isContainsShadowInSQLComments(each, shadowRule, new 
ShadowDetermineCondition(each, shadowOperationType))) {
-                
result.putAll(shadowRule.getRelatedShadowDataSourceMappings(each));
+            if (isContainsShadowInSQLComments(rule, each, new 
ShadowDetermineCondition(each, shadowOperationType))) {
+                result.putAll(rule.getRelatedShadowDataSourceMappings(each));
                 return result;
             }
         }
         return result;
     }
     
-    private boolean isContainsShadowInSQLComments(final String tableName, 
final ShadowRule shadowRule, final ShadowDetermineCondition shadowCondition) {
-        return parseSQLComments().filter(each -> 
isMatchAnyHintShadowAlgorithms(shadowRule.getRelatedHintShadowAlgorithms(tableName),
 shadowCondition.initSQLComments(each), shadowRule)).isPresent();
+    private boolean isContainsShadowInSQLComments(final ShadowRule rule, final 
String tableName, final ShadowDetermineCondition shadowCondition) {
+        return parseSQLComments().filter(each -> 
isMatchAnyHintShadowAlgorithms(rule, tableName, 
shadowCondition.initSQLComments(each))).isPresent();
     }
     
-    private boolean isMatchAnyHintShadowAlgorithms(final 
Collection<HintShadowAlgorithm<Comparable<?>>> shadowAlgorithms, final 
ShadowDetermineCondition shadowCondition, final ShadowRule shadowRule) {
-        for (HintShadowAlgorithm<Comparable<?>> each : shadowAlgorithms) {
-            if (HintShadowAlgorithmDeterminer.isShadow(each, shadowCondition, 
shadowRule)) {
+    private boolean isMatchAnyHintShadowAlgorithms(final ShadowRule rule, 
final String tableName, final ShadowDetermineCondition shadowCondition) {
+        for (HintShadowAlgorithm<Comparable<?>> each : 
rule.getRelatedHintShadowAlgorithms(tableName)) {
+            if (HintShadowAlgorithmDeterminer.isShadow(each, shadowCondition, 
rule)) {
                 return true;
             }
         }
         return false;
     }
     
-    private Map<String, String> findByShadowColumn(final Collection<String> 
relatedShadowTables, final ShadowRule shadowRule, final ShadowOperationType 
shadowOperationType) {
+    private Map<String, String> findByShadowColumn(final ShadowRule rule, 
final Collection<String> relatedShadowTables, final ShadowOperationType 
shadowOperationType) {
         for (String each : relatedShadowTables) {
-            Collection<String> relatedShadowColumnNames = 
shadowRule.getRelatedShadowColumnNames(shadowOperationType, each);
-            if (!relatedShadowColumnNames.isEmpty() && 
isMatchAnyColumnShadowAlgorithms(each, relatedShadowColumnNames, shadowRule, 
shadowOperationType)) {
-                return shadowRule.getRelatedShadowDataSourceMappings(each);
+            Collection<String> relatedShadowColumnNames = 
rule.getRelatedShadowColumnNames(shadowOperationType, each);
+            if (!relatedShadowColumnNames.isEmpty() && 
isMatchAnyColumnShadowAlgorithms(rule, each, relatedShadowColumnNames, 
shadowOperationType)) {
+                return rule.getRelatedShadowDataSourceMappings(each);
             }
         }
         return Collections.emptyMap();
     }
     
-    private boolean isMatchAnyColumnShadowAlgorithms(final String shadowTable, 
final Collection<String> shadowColumnNames, final ShadowRule shadowRule, final 
ShadowOperationType shadowOperation) {
+    private boolean isMatchAnyColumnShadowAlgorithms(final ShadowRule rule, 
final String shadowTable, final Collection<String> shadowColumnNames, final 
ShadowOperationType shadowOperation) {
         for (String each : shadowColumnNames) {
-            if (isMatchAnyColumnShadowAlgorithms(shadowTable, each, 
shadowOperation, shadowRule)) {
+            if (isMatchAnyColumnShadowAlgorithms(rule, shadowTable, each, 
shadowOperation)) {
                 return true;
             }
         }
         return false;
     }
     
-    private boolean isMatchAnyColumnShadowAlgorithms(final String shadowTable, 
final String shadowColumn, final ShadowOperationType shadowOperationType, final 
ShadowRule shadowRule) {
-        Collection<ColumnShadowAlgorithm<Comparable<?>>> 
columnShadowAlgorithms = 
shadowRule.getRelatedColumnShadowAlgorithms(shadowOperationType, shadowTable, 
shadowColumn);
+    private boolean isMatchAnyColumnShadowAlgorithms(final ShadowRule rule, 
final String shadowTable, final String shadowColumn, final ShadowOperationType 
shadowOperationType) {
+        Collection<ColumnShadowAlgorithm<Comparable<?>>> 
columnShadowAlgorithms = 
rule.getRelatedColumnShadowAlgorithms(shadowOperationType, shadowTable, 
shadowColumn);
         if (columnShadowAlgorithms.isEmpty()) {
             return false;
         }
@@ -145,53 +138,28 @@ public abstract class 
AbstractShadowDMLStatementRouteEngine implements ShadowRou
         ShadowDetermineCondition shadowDetermineCondition;
         while (iterator.hasNext()) {
             Optional<ShadowColumnCondition> next = iterator.next();
-            if (next.isPresent()) {
-                for (ColumnShadowAlgorithm<Comparable<?>> each : 
columnShadowAlgorithms) {
-                    shadowDetermineCondition = new 
ShadowDetermineCondition(shadowTable, shadowOperationType);
-                    if (ColumnShadowAlgorithmDeterminer.isShadow(each, 
shadowDetermineCondition.initShadowColumnCondition(next.get()))) {
-                        return true;
-                    }
+            if (!next.isPresent()) {
+                continue;
+            }
+            for (ColumnShadowAlgorithm<Comparable<?>> each : 
columnShadowAlgorithms) {
+                shadowDetermineCondition = new 
ShadowDetermineCondition(shadowTable, shadowOperationType);
+                if (ColumnShadowAlgorithmDeterminer.isShadow(each, 
shadowDetermineCondition.initShadowColumnCondition(next.get()))) {
+                    return true;
                 }
             }
         }
         return false;
     }
     
-    /**
-     * Get all tables.
-     *
-     * @return all tables
-     */
     protected abstract Collection<SimpleTableSegment> getAllTables();
     
-    /**
-     * get shadow operation type.
-     *
-     * @return shadow operation type
-     */
     protected abstract ShadowOperationType getShadowOperationType();
     
-    /**
-     * Parse SQL Comments.
-     *
-     * @return SQL comments
-     */
     protected abstract Optional<Collection<String>> parseSQLComments();
     
-    /**
-     * Get shadow column condition iterator.
-     *
-     * @param shadowColumn shadow column
-     * @return shadow column condition iterator
-     */
     protected abstract Iterator<Optional<ShadowColumnCondition>> 
getShadowColumnConditionIterator(String shadowColumn);
     
-    /**
-     * Get single table tame.
-     *
-     * @return table tame
-     */
-    protected String getSingleTableName() {
+    protected final String getSingleTableName() {
         return tableAliasNameMappings.entrySet().iterator().next().getValue();
     }
 }
diff --git 
a/features/shadow/core/src/main/java/org/apache/shardingsphere/shadow/route/engine/impl/ShadowNonDMLStatementRoutingEngine.java
 
b/features/shadow/core/src/main/java/org/apache/shardingsphere/shadow/route/engine/impl/ShadowNonDMLStatementRoutingEngine.java
index ae709c0d8c0..fde2d2a75ef 100644
--- 
a/features/shadow/core/src/main/java/org/apache/shardingsphere/shadow/route/engine/impl/ShadowNonDMLStatementRoutingEngine.java
+++ 
b/features/shadow/core/src/main/java/org/apache/shardingsphere/shadow/route/engine/impl/ShadowNonDMLStatementRoutingEngine.java
@@ -30,7 +30,7 @@ import 
org.apache.shardingsphere.sql.parser.sql.common.segment.generic.CommentSe
 import 
org.apache.shardingsphere.sql.parser.sql.common.statement.AbstractSQLStatement;
 
 import java.util.Collection;
-import java.util.LinkedHashMap;
+import java.util.Collections;
 import java.util.Map;
 import java.util.Optional;
 import java.util.stream.Collectors;
@@ -44,19 +44,19 @@ public final class ShadowNonDMLStatementRoutingEngine 
implements ShadowRouteEngi
     private final SQLStatementContext sqlStatementContext;
     
     @Override
-    public void route(final RouteContext routeContext, final ShadowRule 
shadowRule) {
-        decorateRouteContext(routeContext, shadowRule, 
findShadowDataSourceMappings(shadowRule));
+    public void route(final RouteContext routeContext, final ShadowRule rule) {
+        decorateRouteContext(routeContext, rule, 
findShadowDataSourceMappings(rule));
     }
     
-    private Map<String, String> findShadowDataSourceMappings(final ShadowRule 
shadowRule) {
+    private Map<String, String> findShadowDataSourceMappings(final ShadowRule 
rule) {
         Optional<Collection<String>> sqlComments = parseSQLComments();
         if (!sqlComments.isPresent()) {
-            return new LinkedHashMap<>();
+            return Collections.emptyMap();
         }
-        if (isMatchAnyNoteShadowAlgorithms(shadowRule, 
createShadowDetermineCondition(sqlComments.get()))) {
-            return shadowRule.getAllShadowDataSourceMappings();
+        if (isMatchAnyNoteShadowAlgorithms(rule, 
createShadowDetermineCondition(sqlComments.get()))) {
+            return rule.getAllShadowDataSourceMappings();
         }
-        return new LinkedHashMap<>();
+        return Collections.emptyMap();
     }
     
     private Optional<Collection<String>> parseSQLComments() {
@@ -65,13 +65,12 @@ public final class ShadowNonDMLStatementRoutingEngine 
implements ShadowRouteEngi
     }
     
     private ShadowDetermineCondition createShadowDetermineCondition(final 
Collection<String> sqlComments) {
-        ShadowDetermineCondition result = new ShadowDetermineCondition("", 
ShadowOperationType.HINT_MATCH);
-        return result.initSQLComments(sqlComments);
+        return new ShadowDetermineCondition("", 
ShadowOperationType.HINT_MATCH).initSQLComments(sqlComments);
     }
     
-    private boolean isMatchAnyNoteShadowAlgorithms(final ShadowRule 
shadowRule, final ShadowDetermineCondition shadowCondition) {
-        for (HintShadowAlgorithm<Comparable<?>> each : 
shadowRule.getAllHintShadowAlgorithms()) {
-            if (HintShadowAlgorithmDeterminer.isShadow(each, shadowCondition, 
shadowRule)) {
+    private boolean isMatchAnyNoteShadowAlgorithms(final ShadowRule rule, 
final ShadowDetermineCondition shadowCondition) {
+        for (HintShadowAlgorithm<Comparable<?>> each : 
rule.getAllHintShadowAlgorithms()) {
+            if (HintShadowAlgorithmDeterminer.isShadow(each, shadowCondition, 
rule)) {
                 return true;
             }
         }
diff --git 
a/proxy/frontend/type/mysql/src/main/java/org/apache/shardingsphere/proxy/frontend/mysql/command/MySQLCommandExecutorFactory.java
 
b/proxy/frontend/type/mysql/src/main/java/org/apache/shardingsphere/proxy/frontend/mysql/command/MySQLCommandExecutorFactory.java
index 8aa30b161bf..2b59731220e 100644
--- 
a/proxy/frontend/type/mysql/src/main/java/org/apache/shardingsphere/proxy/frontend/mysql/command/MySQLCommandExecutorFactory.java
+++ 
b/proxy/frontend/type/mysql/src/main/java/org/apache/shardingsphere/proxy/frontend/mysql/command/MySQLCommandExecutorFactory.java
@@ -66,6 +66,7 @@ public final class MySQLCommandExecutorFactory {
      * @return created instance
      * @throws SQLException SQL exception
      */
+    @SuppressWarnings("DataFlowIssue")
     public static CommandExecutor newInstance(final MySQLCommandPacketType 
commandPacketType, final CommandPacket commandPacket, final ConnectionSession 
connectionSession) throws SQLException {
         if (commandPacket instanceof SQLAwarePacket) {
             log.debug("Execute packet type: {}, sql: {}", commandPacketType, 
((SQLAwarePacket) commandPacket).getSQL());

Reply via email to