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

menghaoran 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 732dab6  Refactor InsertClauseShardingConditionEngine (#7693)
732dab6 is described below

commit 732dab61bba3d3b186123b2c75a480a1cc41f0f4
Author: Liang Zhang <[email protected]>
AuthorDate: Sun Oct 4 00:09:02 2020 +0800

    Refactor InsertClauseShardingConditionEngine (#7693)
---
 .../impl/InsertClauseShardingConditionEngine.java  | 39 ++++++++++++++--------
 1 file changed, 25 insertions(+), 14 deletions(-)

diff --git 
a/shardingsphere-features/shardingsphere-sharding/shardingsphere-sharding-route/src/main/java/org/apache/shardingsphere/sharding/route/engine/condition/engine/impl/InsertClauseShardingConditionEngine.java
 
b/shardingsphere-features/shardingsphere-sharding/shardingsphere-sharding-route/src/main/java/org/apache/shardingsphere/sharding/route/engine/condition/engine/impl/InsertClauseShardingConditionEngine.java
index 8cc6bb1..9e44990 100644
--- 
a/shardingsphere-features/shardingsphere-sharding/shardingsphere-sharding-route/src/main/java/org/apache/shardingsphere/sharding/route/engine/condition/engine/impl/InsertClauseShardingConditionEngine.java
+++ 
b/shardingsphere-features/shardingsphere-sharding/shardingsphere-sharding-route/src/main/java/org/apache/shardingsphere/sharding/route/engine/condition/engine/impl/InsertClauseShardingConditionEngine.java
@@ -57,24 +57,19 @@ public final class InsertClauseShardingConditionEngine 
implements ShardingCondit
     
     @Override
     public List<ShardingCondition> createShardingConditions(final 
InsertStatementContext sqlStatementContext, final List<Object> parameters) {
+        List<ShardingCondition> result = null == 
sqlStatementContext.getInsertSelectContext()
+                ? 
createShardingConditionsWithInsertValues(sqlStatementContext, parameters) : 
createShardingConditionsWithInsertSelect(sqlStatementContext, parameters);
+        appendGeneratedKeyConditions(sqlStatementContext, result);
+        return result;
+    }
+    
+    private List<ShardingCondition> 
createShardingConditionsWithInsertValues(final InsertStatementContext 
sqlStatementContext, final List<Object> parameters) {
         List<ShardingCondition> result = new LinkedList<>();
         String tableName = 
sqlStatementContext.getSqlStatement().getTable().getTableName().getIdentifier().getValue();
         Collection<String> columnNames = getColumnNames(sqlStatementContext);
         for (InsertValueContext each : 
sqlStatementContext.getInsertValueContexts()) {
             result.add(createShardingCondition(tableName, 
columnNames.iterator(), each, parameters));
         }
-        if (null != sqlStatementContext.getInsertSelectContext()) {
-            SelectStatementContext selectStatementContext = 
sqlStatementContext.getInsertSelectContext().getSelectStatementContext();
-            List<ShardingCondition> shardingConditions = new 
WhereClauseShardingConditionEngine(shardingRule, 
schemaMetaData).createShardingConditions(selectStatementContext, parameters);
-            result.addAll(shardingConditions);
-        }
-        Optional<GeneratedKeyContext> generatedKey = 
sqlStatementContext.getGeneratedKeyContext();
-        if (generatedKey.isPresent() && generatedKey.get().isGenerated()) {
-            
generatedKey.get().getGeneratedValues().addAll(getGeneratedKeys(tableName, 
sqlStatementContext.getValueListCount()));
-            if 
(shardingRule.isShardingColumn(generatedKey.get().getColumnName(), tableName)) {
-                appendGeneratedKeyCondition(generatedKey.get(), tableName, 
result);
-            }
-        }
         return result;
     }
     
@@ -117,8 +112,24 @@ public final class InsertClauseShardingConditionEngine 
implements ShardingCondit
         return (Comparable) result;
     }
     
-    private Collection<Comparable<?>> getGeneratedKeys(final String tableName, 
final int valueListCount) {
-        return IntStream.range(0, valueListCount).mapToObj(i -> 
shardingRule.generateKey(tableName)).collect(Collectors.toCollection(LinkedList::new));
+    private List<ShardingCondition> 
createShardingConditionsWithInsertSelect(final InsertStatementContext 
sqlStatementContext, final List<Object> parameters) {
+        SelectStatementContext selectStatementContext = 
sqlStatementContext.getInsertSelectContext().getSelectStatementContext();
+        return new LinkedList<>(new 
WhereClauseShardingConditionEngine(shardingRule, 
schemaMetaData).createShardingConditions(selectStatementContext, parameters));
+    }
+    
+    private void appendGeneratedKeyConditions(final InsertStatementContext 
sqlStatementContext, final List<ShardingCondition> shardingConditions) {
+        Optional<GeneratedKeyContext> generatedKey = 
sqlStatementContext.getGeneratedKeyContext();
+        String tableName = 
sqlStatementContext.getSqlStatement().getTable().getTableName().getIdentifier().getValue();
+        if (generatedKey.isPresent() && generatedKey.get().isGenerated()) {
+            
generatedKey.get().getGeneratedValues().addAll(generateKeys(tableName, 
sqlStatementContext.getValueListCount()));
+            if 
(shardingRule.isShardingColumn(generatedKey.get().getColumnName(), tableName)) {
+                appendGeneratedKeyCondition(generatedKey.get(), tableName, 
shardingConditions);
+            }
+        }
+    }
+    
+    private Collection<Comparable<?>> generateKeys(final String tableName, 
final int valueListCount) {
+        return IntStream.range(0, valueListCount).mapToObj(i -> 
shardingRule.generateKey(tableName)).collect(Collectors.toList());
     }
     
     private void appendGeneratedKeyCondition(final GeneratedKeyContext 
generatedKey, final String tableName, final List<ShardingCondition> 
shardingConditions) {

Reply via email to