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 c675cb3d54e Refactor ComplexInlineShardingAlgorithm (#25924)
c675cb3d54e is described below

commit c675cb3d54e089a813f3ab65d3d0bccb1ca0c16d
Author: Liang Zhang <[email protected]>
AuthorDate: Mon May 29 12:29:12 2023 +0800

    Refactor ComplexInlineShardingAlgorithm (#25924)
---
 .../inline/ComplexInlineShardingAlgorithm.java     | 43 ++++++++++++----------
 .../exception/data/NullShardingValueException.java |  2 +-
 .../inline/ComplexInlineShardingAlgorithmTest.java |  8 ++--
 3 files changed, 29 insertions(+), 24 deletions(-)

diff --git 
a/features/sharding/core/src/main/java/org/apache/shardingsphere/sharding/algorithm/sharding/inline/ComplexInlineShardingAlgorithm.java
 
b/features/sharding/core/src/main/java/org/apache/shardingsphere/sharding/algorithm/sharding/inline/ComplexInlineShardingAlgorithm.java
index 3158b8d2567..3b1f2c5ca9e 100644
--- 
a/features/sharding/core/src/main/java/org/apache/shardingsphere/sharding/algorithm/sharding/inline/ComplexInlineShardingAlgorithm.java
+++ 
b/features/sharding/core/src/main/java/org/apache/shardingsphere/sharding/algorithm/sharding/inline/ComplexInlineShardingAlgorithm.java
@@ -19,9 +19,9 @@ package 
org.apache.shardingsphere.sharding.algorithm.sharding.inline;
 
 import groovy.lang.Closure;
 import groovy.util.Expando;
+import org.apache.shardingsphere.infra.expr.core.InlineExpressionParserFactory;
 import 
org.apache.shardingsphere.infra.util.exception.ShardingSpherePreconditions;
 import 
org.apache.shardingsphere.infra.util.exception.external.sql.type.generic.UnsupportedSQLOperationException;
-import org.apache.shardingsphere.infra.expr.core.InlineExpressionParserFactory;
 import 
org.apache.shardingsphere.sharding.api.sharding.complex.ComplexKeysShardingAlgorithm;
 import 
org.apache.shardingsphere.sharding.api.sharding.complex.ComplexKeysShardingValue;
 import 
org.apache.shardingsphere.sharding.exception.algorithm.sharding.MismatchedComplexInlineShardingAlgorithmColumnAndValueSizeException;
@@ -87,38 +87,43 @@ public final class ComplexInlineShardingAlgorithm 
implements ComplexKeysSharding
         Map<String, Collection<Comparable<?>>> columnNameAndShardingValuesMap 
= shardingValue.getColumnNameAndShardingValuesMap();
         ShardingSpherePreconditions.checkState(shardingColumns.isEmpty() || 
shardingColumns.size() == columnNameAndShardingValuesMap.size(),
                 () -> new 
MismatchedComplexInlineShardingAlgorithmColumnAndValueSizeException(shardingColumns.size(),
 columnNameAndShardingValuesMap.size()));
-        return 
combine(columnNameAndShardingValuesMap).stream().map(this::doSharding).collect(Collectors.toList());
+        return 
flatten(columnNameAndShardingValuesMap).stream().map(this::doSharding).collect(Collectors.toList());
     }
     
-    private String doSharding(final Map<String, Comparable<?>> shardingValues) 
{
+    private String doSharding(final Map<String, Comparable<?>> 
columnNameAndShardingValueMap) {
         Closure<?> closure = createClosure();
-        for (Entry<String, Comparable<?>> entry : shardingValues.entrySet()) {
+        for (Entry<String, Comparable<?>> entry : 
columnNameAndShardingValueMap.entrySet()) {
             ShardingSpherePreconditions.checkNotNull(entry.getValue(), 
NullShardingValueException::new);
             closure.setProperty(entry.getKey(), entry.getValue());
         }
         return closure.call().toString();
     }
     
-    private <K, V> Collection<Map<K, V>> combine(final Map<K, Collection<V>> 
columnNameAndShardingValuesMap) {
-        Collection<Map<K, V>> result = new LinkedList<>();
-        for (Entry<K, Collection<V>> entry : 
columnNameAndShardingValuesMap.entrySet()) {
+    private Collection<Map<String, Comparable<?>>> flatten(final Map<String, 
Collection<Comparable<?>>> columnNameAndShardingValuesMap) {
+        Collection<Map<String, Comparable<?>>> result = new LinkedList<>();
+        for (Entry<String, Collection<Comparable<?>>> entry : 
columnNameAndShardingValuesMap.entrySet()) {
             if (result.isEmpty()) {
-                for (V value : entry.getValue()) {
-                    Map<K, V> item = new HashMap<>();
+                for (Comparable<?> value : entry.getValue()) {
+                    Map<String, Comparable<?>> item = new HashMap<>();
                     item.put(entry.getKey(), value);
                     result.add(item);
                 }
             } else {
-                Collection<Map<K, V>> list = new LinkedList<>();
-                for (Map<K, V> loop : result) {
-                    for (V value : entry.getValue()) {
-                        Map<K, V> item = new HashMap<>();
-                        item.put(entry.getKey(), value);
-                        item.putAll(loop);
-                        list.add(item);
-                    }
-                }
-                result = list;
+                result = flatten(result, entry.getKey(), entry.getValue());
+            }
+        }
+        return result;
+    }
+    
+    private Collection<Map<String, Comparable<?>>> flatten(final 
Collection<Map<String, Comparable<?>>> columnNameAndShardingValueMaps,
+                                                           final String 
columnName, final Collection<Comparable<?>> shardingValues) {
+        Collection<Map<String, Comparable<?>>> result = new LinkedList<>();
+        for (Map<String, Comparable<?>> each : columnNameAndShardingValueMaps) 
{
+            for (Comparable<?> value : shardingValues) {
+                Map<String, Comparable<?>> item = new HashMap<>();
+                item.put(columnName, value);
+                item.putAll(each);
+                result.add(item);
             }
         }
         return result;
diff --git 
a/features/sharding/core/src/main/java/org/apache/shardingsphere/sharding/exception/data/NullShardingValueException.java
 
b/features/sharding/core/src/main/java/org/apache/shardingsphere/sharding/exception/data/NullShardingValueException.java
index cdc83c2cfed..1b89c907e26 100644
--- 
a/features/sharding/core/src/main/java/org/apache/shardingsphere/sharding/exception/data/NullShardingValueException.java
+++ 
b/features/sharding/core/src/main/java/org/apache/shardingsphere/sharding/exception/data/NullShardingValueException.java
@@ -28,6 +28,6 @@ public final class NullShardingValueException extends 
ShardingSQLException {
     private static final long serialVersionUID = -6223086772479822057L;
     
     public NullShardingValueException() {
-        super(XOpenSQLState.CHECK_OPTION_VIOLATION, 20, "Sharding value can't 
be null in sql statement.");
+        super(XOpenSQLState.CHECK_OPTION_VIOLATION, 20, "Sharding value can't 
be null in SQL statement.");
     }
 }
diff --git 
a/features/sharding/core/src/test/java/org/apache/shardingsphere/sharding/algorithm/sharding/inline/ComplexInlineShardingAlgorithmTest.java
 
b/features/sharding/core/src/test/java/org/apache/shardingsphere/sharding/algorithm/sharding/inline/ComplexInlineShardingAlgorithmTest.java
index 33da9f628e5..508a37c5ee0 100644
--- 
a/features/sharding/core/src/test/java/org/apache/shardingsphere/sharding/algorithm/sharding/inline/ComplexInlineShardingAlgorithmTest.java
+++ 
b/features/sharding/core/src/test/java/org/apache/shardingsphere/sharding/algorithm/sharding/inline/ComplexInlineShardingAlgorithmTest.java
@@ -56,10 +56,10 @@ class ComplexInlineShardingAlgorithmTest {
     }
     
     private ComplexKeysShardingValue<Comparable<?>> 
createComplexKeysShardingValue(final List<Comparable<?>> values) {
-        Map<String, Collection<Comparable<?>>> sharingValues = new 
HashMap<>(2, 1F);
-        sharingValues.put("type", values);
-        sharingValues.put("order_id", values);
-        return new ComplexKeysShardingValue<>("t_order", sharingValues, 
Collections.emptyMap());
+        Map<String, Collection<Comparable<?>>> columnNameAndShardingValuesMap 
= new HashMap<>(2, 1F);
+        columnNameAndShardingValuesMap.put("type", values);
+        columnNameAndShardingValuesMap.put("order_id", values);
+        return new ComplexKeysShardingValue<>("t_order", 
columnNameAndShardingValuesMap, Collections.emptyMap());
     }
     
     @Test

Reply via email to