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 5601835  Revise #8576 (#8583)
5601835 is described below

commit 56018359e672ed3e45f07c09c41b4b1bcd6568ec
Author: Liang Zhang <[email protected]>
AuthorDate: Fri Dec 11 22:24:28 2020 +0800

    Revise #8576 (#8583)
    
    * Refactor ComplexInlineShardingAlgorithm
    
    * Refactor HintInlineShardingAlgorithm
    
    * Refactor ComplexInlineShardingAlgorithmTest
    
    * Refactor HintInlineShardingAlgorithmTest
    
    * Fix test case
---
 .../complex/ComplexInlineShardingAlgorithm.java    | 120 +++++++++------------
 .../sharding/hint/HintInlineShardingAlgorithm.java |  64 +++++------
 .../ComplexInlineShardingAlgorithmTest.java        |  24 ++---
 .../hint/HintInlineShardingAlgorithmTest.java      |  25 +++--
 4 files changed, 94 insertions(+), 139 deletions(-)

diff --git 
a/shardingsphere-features/shardingsphere-sharding/shardingsphere-sharding-common/src/main/java/org/apache/shardingsphere/sharding/algorithm/sharding/complex/ComplexInlineShardingAlgorithm.java
 
b/shardingsphere-features/shardingsphere-sharding/shardingsphere-sharding-common/src/main/java/org/apache/shardingsphere/sharding/algorithm/sharding/complex/ComplexInlineShardingAlgorithm.java
index 04b5a2a..d67915c 100644
--- 
a/shardingsphere-features/shardingsphere-sharding/shardingsphere-sharding-common/src/main/java/org/apache/shardingsphere/sharding/algorithm/sharding/complex/ComplexInlineShardingAlgorithm.java
+++ 
b/shardingsphere-features/shardingsphere-sharding/shardingsphere-sharding-common/src/main/java/org/apache/shardingsphere/sharding/algorithm/sharding/complex/ComplexInlineShardingAlgorithm.java
@@ -20,61 +20,70 @@ package 
org.apache.shardingsphere.sharding.algorithm.sharding.complex;
 import com.google.common.base.Preconditions;
 import groovy.lang.Closure;
 import groovy.util.Expando;
+import lombok.Getter;
+import lombok.Setter;
 import 
org.apache.shardingsphere.sharding.algorithm.sharding.inline.InlineExpressionParser;
 import 
org.apache.shardingsphere.sharding.api.sharding.complex.ComplexKeysShardingAlgorithm;
 import 
org.apache.shardingsphere.sharding.api.sharding.complex.ComplexKeysShardingValue;
 
-import java.util.ArrayList;
 import java.util.Collection;
 import java.util.HashMap;
+import java.util.LinkedList;
 import java.util.Map;
+import java.util.Map.Entry;
 import java.util.Properties;
 import java.util.stream.Collectors;
 
 /**
- * Complex Inline sharding algorithm.
+ * Complex inline sharding algorithm.
  */
-public class ComplexInlineShardingAlgorithm implements 
ComplexKeysShardingAlgorithm<Comparable<?>> {
-
+public final class ComplexInlineShardingAlgorithm implements 
ComplexKeysShardingAlgorithm<Comparable<?>> {
+    
     private static final String ALGORITHM_EXPRESSION_KEY = 
"algorithm-expression";
-
+    
     private static final String SHARING_COLUMNS_KEY = "sharding-columns";
-
+    
     private static final String ALLOW_RANGE_QUERY_KEY = 
"allow-range-query-with-inline-sharding";
-
+    
     private boolean allowRangeQuery;
-
+    
     private String[] shardingColumns;
-
+    
     private String algorithmExpression;
-
-    private final Properties props = new Properties();
-
+    
+    @Getter
+    @Setter
+    private Properties props = new Properties();
+    
+    @Override
+    public void init() {
+        String expression = props.getProperty(ALGORITHM_EXPRESSION_KEY);
+        Preconditions.checkNotNull(expression, "Inline sharding algorithm 
expression cannot be null.");
+        algorithmExpression = 
InlineExpressionParser.handlePlaceHolder(expression.trim());
+        initShardingColumns(props.getProperty(SHARING_COLUMNS_KEY, ""));
+        allowRangeQuery = 
Boolean.parseBoolean(props.getOrDefault(ALLOW_RANGE_QUERY_KEY, 
Boolean.FALSE.toString()).toString());
+    }
+    
+    private void initShardingColumns(final String shardingColumns) {
+        this.shardingColumns = shardingColumns.isEmpty() ? new String[0] : 
shardingColumns.split(",");
+    }
+    
     @Override
     public Collection<String> doSharding(final Collection<String> 
availableTargetNames, final ComplexKeysShardingValue<Comparable<?>> 
shardingValue) {
-
         if (!shardingValue.getColumnNameAndRangeValuesMap().isEmpty()) {
-            if (isAllowRangeQuery()) {
+            if (allowRangeQuery) {
                 return availableTargetNames;
             }
-
             throw new UnsupportedOperationException("Since the property of `" 
+ ALLOW_RANGE_QUERY_KEY + "` is false, inline sharding algorithm can not tackle 
with range query.");
         }
-
         Map<String, Collection<Comparable<?>>> columnNameAndShardingValuesMap 
= shardingValue.getColumnNameAndShardingValuesMap();
-
         if (shardingColumns.length > 0 && shardingColumns.length != 
columnNameAndShardingValuesMap.size()) {
             throw new IllegalArgumentException("complex inline need " + 
shardingColumns.length + " sharing columns, but only found " + 
columnNameAndShardingValuesMap.size());
         }
-
         Collection<Map<String, Comparable<?>>> combine = 
combine(columnNameAndShardingValuesMap);
-
-        return combine.stream()
-                .map(this::doSharding)
-                .collect(Collectors.toList());
-
+        return 
combine.stream().map(this::doSharding).collect(Collectors.toList());
     }
-
+    
     private String doSharding(final Map<String, Comparable<?>> shardingValues) 
{
         Closure<?> closure = createClosure();
         for (Map.Entry<String, Comparable<?>> entry : 
shardingValues.entrySet()) {
@@ -82,53 +91,10 @@ public class ComplexInlineShardingAlgorithm implements 
ComplexKeysShardingAlgori
         }
         return closure.call().toString();
     }
-
-    @Override
-    public void init() {
-        String expression = props.getProperty(ALGORITHM_EXPRESSION_KEY);
-        Preconditions.checkNotNull(expression, "Inline sharding algorithm 
expression cannot be null.");
-        algorithmExpression = 
InlineExpressionParser.handlePlaceHolder(expression.trim());
-        initShardingColumns(props.getProperty(SHARING_COLUMNS_KEY, ""));
-        allowRangeQuery = 
Boolean.parseBoolean(props.getOrDefault(ALLOW_RANGE_QUERY_KEY, 
Boolean.FALSE.toString()).toString());
-    }
-
-    private void initShardingColumns(final String shardingColumns) {
-        if (shardingColumns.length() == 0) {
-            this.shardingColumns = new String[0];
-            return;
-        }
-        this.shardingColumns = shardingColumns.split(",");
-    }
-
-    private boolean isAllowRangeQuery() {
-        return allowRangeQuery;
-    }
-
-    private Closure<?> createClosure() {
-        Closure<?> result = new 
InlineExpressionParser(algorithmExpression).evaluateClosure().rehydrate(new 
Expando(), null, null);
-        result.setResolveStrategy(Closure.DELEGATE_ONLY);
-        return result;
-    }
-
-    @Override
-    public String getType() {
-        return "COMPLEX_INLINE";
-    }
-
-    @Override
-    public Properties getProps() {
-        return props;
-    }
-
-    @Override
-    public void setProps(final Properties props) {
-        this.props.clear();
-        this.props.putAll(props);
-    }
-
+    
     private static <K, V> Collection<Map<K, V>> combine(final Map<K, 
Collection<V>> map) {
-        Collection<Map<K, V>> result = new ArrayList<>();
-        for (Map.Entry<K, Collection<V>> entry : map.entrySet()) {
+        Collection<Map<K, V>> result = new LinkedList<>();
+        for (Entry<K, Collection<V>> entry : map.entrySet()) {
             if (result.isEmpty()) {
                 for (V value : entry.getValue()) {
                     Map<K, V> item = new HashMap<>();
@@ -136,7 +102,7 @@ public class ComplexInlineShardingAlgorithm implements 
ComplexKeysShardingAlgori
                     result.add(item);
                 }
             } else {
-                Collection<Map<K, V>> list = new ArrayList<>();
+                Collection<Map<K, V>> list = new LinkedList<>();
                 for (Map<K, V> loop : result) {
                     for (V value : entry.getValue()) {
                         Map<K, V> item = new HashMap<>();
@@ -150,5 +116,15 @@ public class ComplexInlineShardingAlgorithm implements 
ComplexKeysShardingAlgori
         }
         return result;
     }
-
+    
+    private Closure<?> createClosure() {
+        Closure<?> result = new 
InlineExpressionParser(algorithmExpression).evaluateClosure().rehydrate(new 
Expando(), null, null);
+        result.setResolveStrategy(Closure.DELEGATE_ONLY);
+        return result;
+    }
+    
+    @Override
+    public String getType() {
+        return "COMPLEX_INLINE";
+    }
 }
diff --git 
a/shardingsphere-features/shardingsphere-sharding/shardingsphere-sharding-common/src/main/java/org/apache/shardingsphere/sharding/algorithm/sharding/hint/HintInlineShardingAlgorithm.java
 
b/shardingsphere-features/shardingsphere-sharding/shardingsphere-sharding-common/src/main/java/org/apache/shardingsphere/sharding/algorithm/sharding/hint/HintInlineShardingAlgorithm.java
index e28c81b..cf9508f 100644
--- 
a/shardingsphere-features/shardingsphere-sharding/shardingsphere-sharding-common/src/main/java/org/apache/shardingsphere/sharding/algorithm/sharding/hint/HintInlineShardingAlgorithm.java
+++ 
b/shardingsphere-features/shardingsphere-sharding/shardingsphere-sharding-common/src/main/java/org/apache/shardingsphere/sharding/algorithm/sharding/hint/HintInlineShardingAlgorithm.java
@@ -20,6 +20,8 @@ package 
org.apache.shardingsphere.sharding.algorithm.sharding.hint;
 import com.google.common.base.Preconditions;
 import groovy.lang.Closure;
 import groovy.util.Expando;
+import lombok.Getter;
+import lombok.Setter;
 import 
org.apache.shardingsphere.sharding.algorithm.sharding.inline.InlineExpressionParser;
 import 
org.apache.shardingsphere.sharding.api.sharding.hint.HintShardingAlgorithm;
 import org.apache.shardingsphere.sharding.api.sharding.hint.HintShardingValue;
@@ -29,66 +31,48 @@ import java.util.Properties;
 import java.util.stream.Collectors;
 
 /**
- * Hint Inline sharding algorithm.
+ * Hint inline sharding algorithm.
  */
-public class HintInlineShardingAlgorithm implements 
HintShardingAlgorithm<Comparable<?>> {
-
+public final class HintInlineShardingAlgorithm implements 
HintShardingAlgorithm<Comparable<?>> {
+    
     private static final String ALGORITHM_EXPRESSION_KEY = 
"algorithm-expression";
-
+    
     private static final String DEFAULT_ALGORITHM_EXPRESSION = "${value}";
-
+    
     private static final String HINT_INLINE_VALUE_PROPERTY_NAME = "value";
-
+    
     private String algorithmExpression;
-
-    private final Properties properties = new Properties();
-
+    
+    @Getter
+    @Setter
+    private Properties properties = new Properties();
+    
+    @Override
+    public void init() {
+        String expression = properties.getProperty(ALGORITHM_EXPRESSION_KEY, 
DEFAULT_ALGORITHM_EXPRESSION);
+        Preconditions.checkNotNull(expression, "Inline sharding algorithm 
expression cannot be null.");
+        algorithmExpression = 
InlineExpressionParser.handlePlaceHolder(expression.trim());
+    }
+    
     @Override
     public Collection<String> doSharding(final Collection<String> 
availableTargetNames, final HintShardingValue<Comparable<?>> shardingValue) {
-
-        if (shardingValue.getValues().isEmpty()) {
-            return availableTargetNames;
-        }
-
-        return shardingValue.getValues().stream()
-                .map(this::doSharding)
-                .collect(Collectors.toList());
-
+        return shardingValue.getValues().isEmpty() ? availableTargetNames : 
shardingValue.getValues().stream().map(this::doSharding).collect(Collectors.toList());
     }
-
+    
     private String doSharding(final Comparable<?> shardingValue) {
         Closure<?> closure = createClosure();
         closure.setProperty(HINT_INLINE_VALUE_PROPERTY_NAME, shardingValue);
         return closure.call().toString();
     }
-
-    @Override
-    public void init() {
-        String expression = properties.getProperty(ALGORITHM_EXPRESSION_KEY, 
DEFAULT_ALGORITHM_EXPRESSION);
-        Preconditions.checkNotNull(expression, "Inline sharding algorithm 
expression cannot be null.");
-        algorithmExpression = 
InlineExpressionParser.handlePlaceHolder(expression.trim());
-    }
-
+    
     private Closure<?> createClosure() {
         Closure<?> result = new 
InlineExpressionParser(algorithmExpression).evaluateClosure().rehydrate(new 
Expando(), null, null);
         result.setResolveStrategy(Closure.DELEGATE_ONLY);
         return result;
     }
-
+    
     @Override
     public String getType() {
         return "HINT_INLINE";
     }
-
-    @Override
-    public Properties getProps() {
-        return properties;
-    }
-
-    @Override
-    public void setProps(final Properties props) {
-        properties.clear();
-        properties.putAll(props);
-    }
-
 }
diff --git 
a/shardingsphere-features/shardingsphere-sharding/shardingsphere-sharding-common/src/test/java/org/apache/shardingsphere/sharding/algorithm/sharding/complex/ComplexInlineShardingAlgorithmTest.java
 
b/shardingsphere-features/shardingsphere-sharding/shardingsphere-sharding-common/src/test/java/org/apache/shardingsphere/sharding/algorithm/sharding/complex/ComplexInlineShardingAlgorithmTest.java
index bbff5f3..863aa3c 100644
--- 
a/shardingsphere-features/shardingsphere-sharding/shardingsphere-sharding-common/src/test/java/org/apache/shardingsphere/sharding/algorithm/sharding/complex/ComplexInlineShardingAlgorithmTest.java
+++ 
b/shardingsphere-features/shardingsphere-sharding/shardingsphere-sharding-common/src/test/java/org/apache/shardingsphere/sharding/algorithm/sharding/complex/ComplexInlineShardingAlgorithmTest.java
@@ -32,28 +32,25 @@ import java.util.Map;
 
 import static org.junit.Assert.assertTrue;
 
-/**
- * Complex Inline sharding algorithm test.
- */
-public class ComplexInlineShardingAlgorithmTest {
-
+public final class ComplexInlineShardingAlgorithmTest {
+    
     private ComplexInlineShardingAlgorithm complexInlineShardingAlgorithm;
-
+    
     private ComplexInlineShardingAlgorithm 
complexInlineShardingAlgorithmAllowRangeQuery;
-
+    
     @Before
-    public void setUp() throws Exception {
+    public void setUp() {
         initComplexInlineShardingAlgorithm();
         initComplexInlineShardingAlgorithmAllowRangeQuery();
     }
-
+    
     private void initComplexInlineShardingAlgorithm() {
         complexInlineShardingAlgorithm = new ComplexInlineShardingAlgorithm();
         
complexInlineShardingAlgorithm.getProps().setProperty("algorithm-expression", 
"t_order_${type % 2}_${order_id % 2}");
         
complexInlineShardingAlgorithm.getProps().setProperty("sharding-columns", 
"type,order_id");
         complexInlineShardingAlgorithm.init();
     }
-
+    
     private void initComplexInlineShardingAlgorithmAllowRangeQuery() {
         complexInlineShardingAlgorithmAllowRangeQuery = new 
ComplexInlineShardingAlgorithm();
         
complexInlineShardingAlgorithmAllowRangeQuery.getProps().setProperty("algorithm-expression",
 "t_order_${type % 2}_${order_id % 2}");
@@ -61,7 +58,7 @@ public class ComplexInlineShardingAlgorithmTest {
         
complexInlineShardingAlgorithmAllowRangeQuery.getProps().setProperty("allow-range-query-with-inline-sharding",
 "true");
         complexInlineShardingAlgorithmAllowRangeQuery.init();
     }
-
+    
     @Test
     public void assertDoSharding() {
         List<String> availableTargetNames = Lists.newArrayList("t_order_0_0", 
"t_order_0_1", "t_order_1_0", "t_order_1_1");
@@ -73,7 +70,7 @@ public class ComplexInlineShardingAlgorithmTest {
         Collection<String> actual = 
complexInlineShardingAlgorithm.doSharding(availableTargetNames, shardingValue);
         assertTrue(actual.size() == 1 && actual.contains("t_order_0_0"));
     }
-
+    
     @Test
     public void assertDoShardingWithMultiValue() {
         List<String> availableTargetNames = Lists.newArrayList("t_order_0_0", 
"t_order_0_1", "t_order_1_0", "t_order_1_1");
@@ -85,7 +82,7 @@ public class ComplexInlineShardingAlgorithmTest {
         Collection<String> actual = 
complexInlineShardingAlgorithm.doSharding(availableTargetNames, shardingValue);
         assertTrue(actual.containsAll(availableTargetNames));
     }
-
+    
     @Test
     public void assertDoShardingWithRangeValue() {
         List<String> availableTargetNames = Lists.newArrayList("t_order_0_0", 
"t_order_0_1", "t_order_1_0", "t_order_1_1");
@@ -96,5 +93,4 @@ public class ComplexInlineShardingAlgorithmTest {
         Collection<String> actual = 
complexInlineShardingAlgorithmAllowRangeQuery.doSharding(availableTargetNames, 
shardingValue);
         assertTrue(actual.containsAll(availableTargetNames));
     }
-
 }
diff --git 
a/shardingsphere-features/shardingsphere-sharding/shardingsphere-sharding-common/src/test/java/org/apache/shardingsphere/sharding/algorithm/sharding/hint/HintInlineShardingAlgorithmTest.java
 
b/shardingsphere-features/shardingsphere-sharding/shardingsphere-sharding-common/src/test/java/org/apache/shardingsphere/sharding/algorithm/sharding/hint/HintInlineShardingAlgorithmTest.java
index 341649f..a59e6a9 100644
--- 
a/shardingsphere-features/shardingsphere-sharding/shardingsphere-sharding-common/src/test/java/org/apache/shardingsphere/sharding/algorithm/sharding/hint/HintInlineShardingAlgorithmTest.java
+++ 
b/shardingsphere-features/shardingsphere-sharding/shardingsphere-sharding-common/src/test/java/org/apache/shardingsphere/sharding/algorithm/sharding/hint/HintInlineShardingAlgorithmTest.java
@@ -26,35 +26,35 @@ import java.util.Arrays;
 import java.util.Collection;
 import java.util.Collections;
 import java.util.List;
+import java.util.Properties;
 
 import static org.junit.Assert.assertTrue;
 
-/**
- * Hint Inline sharding algorithm test.
- */
 public final class HintInlineShardingAlgorithmTest {
-
+    
     private HintInlineShardingAlgorithm hintInlineShardingAlgorithm;
-
+    
     private HintInlineShardingAlgorithm hintInlineShardingAlgorithmDefault;
-
+    
     @Before
     public void setUp() {
         initHintInlineShardingAlgorithm();
         initHintInlineShardingAlgorithmDefault();
     }
-
+    
     private void initHintInlineShardingAlgorithm() {
         hintInlineShardingAlgorithm = new HintInlineShardingAlgorithm();
-        
hintInlineShardingAlgorithm.getProps().setProperty("algorithm-expression", 
"t_order_$->{value % 4}");
+        Properties props = new Properties();
+        props.setProperty("algorithm-expression", "t_order_$->{value % 4}");
+        hintInlineShardingAlgorithm.setProperties(props);
         hintInlineShardingAlgorithm.init();
     }
-
+    
     private void initHintInlineShardingAlgorithmDefault() {
         hintInlineShardingAlgorithmDefault = new HintInlineShardingAlgorithm();
         hintInlineShardingAlgorithmDefault.init();
     }
-
+    
     @Test
     public void assertDoShardingWithSingleValueOfDefault() {
         List<String> availableTargetNames = Lists.newArrayList("t_order_0", 
"t_order_1", "t_order_2", "t_order_3");
@@ -62,7 +62,7 @@ public final class HintInlineShardingAlgorithmTest {
         Collection<String> actual = 
hintInlineShardingAlgorithmDefault.doSharding(availableTargetNames, 
shardingValue);
         assertTrue(actual.contains("t_order_0"));
     }
-
+    
     @Test
     public void assertDoShardingWithSingleValue() {
         List<String> availableTargetNames = Lists.newArrayList("t_order_0", 
"t_order_1", "t_order_2", "t_order_3");
@@ -70,7 +70,7 @@ public final class HintInlineShardingAlgorithmTest {
         Collection<String> actual = 
hintInlineShardingAlgorithm.doSharding(availableTargetNames, shardingValue);
         assertTrue(actual.contains("t_order_0"));
     }
-
+    
     @Test
     public void assertDoShardingWithMultiValues() {
         List<String> availableTargetNames = Lists.newArrayList("t_order_0", 
"t_order_1", "t_order_2", "t_order_3");
@@ -78,5 +78,4 @@ public final class HintInlineShardingAlgorithmTest {
         Collection<String> actual = 
hintInlineShardingAlgorithm.doSharding(availableTargetNames, shardingValue);
         assertTrue(actual.containsAll(availableTargetNames));
     }
-
 }

Reply via email to