You are viewing a plain text version of this content. The canonical link for it is here.
Posted to notifications@shardingsphere.apache.org by ji...@apache.org on 2023/02/01 16:54:39 UTC

[shardingsphere] branch master updated: Refactor ShadowTableRule (#23913)

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

jianglongtao 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 8c871aae21a Refactor ShadowTableRule (#23913)
8c871aae21a is described below

commit 8c871aae21a8c41504d8a7d34e1411fadb4005b9
Author: Liang Zhang <zh...@apache.org>
AuthorDate: Thu Feb 2 00:54:33 2023 +0800

    Refactor ShadowTableRule (#23913)
---
 .../shadow/rule/ShadowTableRule.java               | 27 +++++++++-------------
 1 file changed, 11 insertions(+), 16 deletions(-)

diff --git a/features/shadow/core/src/main/java/org/apache/shardingsphere/shadow/rule/ShadowTableRule.java b/features/shadow/core/src/main/java/org/apache/shardingsphere/shadow/rule/ShadowTableRule.java
index ce59b1bfcfa..c84f78996a3 100644
--- a/features/shadow/core/src/main/java/org/apache/shardingsphere/shadow/rule/ShadowTableRule.java
+++ b/features/shadow/core/src/main/java/org/apache/shardingsphere/shadow/rule/ShadowTableRule.java
@@ -18,16 +18,14 @@
 package org.apache.shardingsphere.shadow.rule;
 
 import lombok.Getter;
-import org.apache.shardingsphere.infra.util.exception.ShardingSpherePreconditions;
 import org.apache.shardingsphere.shadow.api.shadow.ShadowOperationType;
 import org.apache.shardingsphere.shadow.api.shadow.column.ColumnShadowAlgorithm;
 import org.apache.shardingsphere.shadow.api.shadow.hint.HintShadowAlgorithm;
-import org.apache.shardingsphere.shadow.exception.metadata.InvalidShadowAlgorithmOperationException;
 import org.apache.shardingsphere.shadow.spi.ShadowAlgorithm;
 
 import java.util.Collection;
-import java.util.Collections;
 import java.util.EnumMap;
+import java.util.LinkedList;
 import java.util.Map;
 import java.util.stream.Collectors;
 
@@ -48,30 +46,27 @@ public final class ShadowTableRule {
     public ShadowTableRule(final String tableName, final Collection<String> shadowDataSources, final Collection<String> shadowAlgorithmNames, final Map<String, ShadowAlgorithm> shadowAlgorithms) {
         this.tableName = tableName;
         this.shadowDataSources = shadowDataSources;
-        this.hintShadowAlgorithmNames = initHintShadowAlgorithmNames(shadowAlgorithmNames, shadowAlgorithms);
-        this.columnShadowAlgorithmNames = initColumnShadowAlgorithmNames(shadowAlgorithmNames, shadowAlgorithms);
+        this.hintShadowAlgorithmNames = getHintShadowAlgorithmNames(shadowAlgorithmNames, shadowAlgorithms);
+        this.columnShadowAlgorithmNames = getColumnShadowAlgorithmRules(shadowAlgorithmNames, shadowAlgorithms);
     }
     
-    private Collection<String> initHintShadowAlgorithmNames(final Collection<String> shadowAlgorithmNames, final Map<String, ShadowAlgorithm> shadowAlgorithms) {
+    private Collection<String> getHintShadowAlgorithmNames(final Collection<String> shadowAlgorithmNames, final Map<String, ShadowAlgorithm> shadowAlgorithms) {
         return shadowAlgorithmNames.stream().filter(each -> shadowAlgorithms.get(each) instanceof HintShadowAlgorithm).collect(Collectors.toList());
     }
     
-    private Map<ShadowOperationType, Collection<ShadowAlgorithmNameRule>> initColumnShadowAlgorithmNames(final Collection<String> shadowAlgorithmNames,
-                                                                                                         final Map<String, ShadowAlgorithm> shadowAlgorithms) {
+    private Map<ShadowOperationType, Collection<ShadowAlgorithmNameRule>> getColumnShadowAlgorithmRules(final Collection<String> shadowAlgorithmNames,
+                                                                                                        final Map<String, ShadowAlgorithm> shadowAlgorithms) {
         Map<ShadowOperationType, Collection<ShadowAlgorithmNameRule>> result = new EnumMap<>(ShadowOperationType.class);
         for (String each : shadowAlgorithmNames) {
             ShadowAlgorithm shadowAlgorithm = shadowAlgorithms.get(each);
             if (shadowAlgorithm instanceof ColumnShadowAlgorithm) {
-                initShadowAlgorithmNames(each, (ColumnShadowAlgorithm<?>) shadowAlgorithm, result);
+                ShadowOperationType operationType = ((ColumnShadowAlgorithm<?>) shadowAlgorithm).getShadowOperationType();
+                if (!result.containsKey(operationType)) {
+                    result.put(operationType, new LinkedList<>());
+                }
+                result.get(operationType).add(new ShadowAlgorithmNameRule(((ColumnShadowAlgorithm<?>) shadowAlgorithm).getShadowColumn(), each));
             }
         }
         return result;
     }
-    
-    private void initShadowAlgorithmNames(final String name, final ColumnShadowAlgorithm<?> algorithm,
-                                          final Map<ShadowOperationType, Collection<ShadowAlgorithmNameRule>> columnShadowAlgorithmNames) {
-        ShadowOperationType operationType = algorithm.getShadowOperationType();
-        ShardingSpherePreconditions.checkState(!columnShadowAlgorithmNames.containsKey(operationType), () -> new InvalidShadowAlgorithmOperationException(operationType.name(), tableName));
-        columnShadowAlgorithmNames.put(operationType, Collections.singleton(new ShadowAlgorithmNameRule(algorithm.getShadowColumn(), name)));
-    }
 }