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 31bc3e2b63b Refactor ifNotExists of CREATE SHADOW RULE. (#23243)
31bc3e2b63b is described below

commit 31bc3e2b63b59a49efec93cb5b11a20190b8f355
Author: yx9o <[email protected]>
AuthorDate: Sun Jan 1 17:13:51 2023 +0800

    Refactor ifNotExists of CREATE SHADOW RULE. (#23243)
---
 ...eateDefaultShadowAlgorithmStatementUpdater.java | 11 +++---
 .../update/CreateShadowRuleStatementUpdater.java   | 41 ++++++++++------------
 2 files changed, 24 insertions(+), 28 deletions(-)

diff --git 
a/features/shadow/distsql/handler/src/main/java/org/apache/shardingsphere/shadow/distsql/handler/update/CreateDefaultShadowAlgorithmStatementUpdater.java
 
b/features/shadow/distsql/handler/src/main/java/org/apache/shardingsphere/shadow/distsql/handler/update/CreateDefaultShadowAlgorithmStatementUpdater.java
index e39d40f3b60..8e1f9dfa891 100644
--- 
a/features/shadow/distsql/handler/src/main/java/org/apache/shardingsphere/shadow/distsql/handler/update/CreateDefaultShadowAlgorithmStatementUpdater.java
+++ 
b/features/shadow/distsql/handler/src/main/java/org/apache/shardingsphere/shadow/distsql/handler/update/CreateDefaultShadowAlgorithmStatementUpdater.java
@@ -17,6 +17,7 @@
 
 package org.apache.shardingsphere.shadow.distsql.handler.update;
 
+import com.google.common.base.Strings;
 import 
org.apache.shardingsphere.distsql.handler.exception.algorithm.DuplicateAlgorithmException;
 import 
org.apache.shardingsphere.distsql.handler.exception.algorithm.InvalidAlgorithmConfigurationException;
 import 
org.apache.shardingsphere.distsql.handler.update.RuleDefinitionCreateUpdater;
@@ -52,7 +53,7 @@ public final class 
CreateDefaultShadowAlgorithmStatementUpdater implements RuleD
     
     @Override
     public RuleConfiguration buildToBeCreatedRuleConfiguration(final 
ShadowRuleConfiguration currentRuleConfig, final 
CreateDefaultShadowAlgorithmStatement sqlStatement) {
-        ShadowRuleConfiguration result = null;
+        ShadowRuleConfiguration result = new ShadowRuleConfiguration();
         if (getDuplicatedRuleNames(currentRuleConfig).isEmpty()) {
             result = new ShadowRuleConfiguration();
             result.setShadowAlgorithms(buildAlgorithmMap(sqlStatement));
@@ -63,8 +64,8 @@ public final class 
CreateDefaultShadowAlgorithmStatementUpdater implements RuleD
     
     @Override
     public void updateCurrentRuleConfiguration(final ShadowRuleConfiguration 
currentRuleConfig, final ShadowRuleConfiguration toBeCreatedRuleConfig) {
-        if (null != currentRuleConfig && null != toBeCreatedRuleConfig) {
-            
currentRuleConfig.getShadowAlgorithms().putAll(toBeCreatedRuleConfig.getShadowAlgorithms());
+        
currentRuleConfig.getShadowAlgorithms().putAll(toBeCreatedRuleConfig.getShadowAlgorithms());
+        if 
(!Strings.isNullOrEmpty(toBeCreatedRuleConfig.getDefaultShadowAlgorithmName())) 
{
             
currentRuleConfig.setDefaultShadowAlgorithmName(toBeCreatedRuleConfig.getDefaultShadowAlgorithmName());
         }
     }
@@ -74,7 +75,7 @@ public final class 
CreateDefaultShadowAlgorithmStatementUpdater implements RuleD
                 
sqlStatement.getShadowAlgorithmSegment().getAlgorithmSegment().getProps()));
     }
     
-    private static Collection<String> getDuplicatedRuleNames(final 
ShadowRuleConfiguration currentRuleConfig) {
+    private Collection<String> getDuplicatedRuleNames(final 
ShadowRuleConfiguration currentRuleConfig) {
         Collection<String> currentAlgorithmNames = null == currentRuleConfig ? 
Collections.emptyList() : currentRuleConfig.getShadowAlgorithms().keySet();
         return 
Stream.of("default_shadow_algorithm").filter(currentAlgorithmNames::contains).collect(Collectors.toSet());
     }
@@ -90,7 +91,7 @@ public final class 
CreateDefaultShadowAlgorithmStatementUpdater implements RuleD
                 TypedSPIRegistry.findRegisteredService(ShadowAlgorithm.class, 
shadowAlgorithmType).isPresent(), () -> new 
InvalidAlgorithmConfigurationException("shadow", shadowAlgorithmType));
     }
     
-    private static void checkAlgorithmCompleteness(final 
Collection<AlgorithmSegment> algorithmSegments) {
+    private void checkAlgorithmCompleteness(final Collection<AlgorithmSegment> 
algorithmSegments) {
         Collection<AlgorithmSegment> incompleteAlgorithms = 
algorithmSegments.stream().filter(each -> each.getName().isEmpty() || 
each.getProps().isEmpty()).collect(Collectors.toSet());
         ShardingSpherePreconditions.checkState(incompleteAlgorithms.isEmpty(), 
() -> new InvalidAlgorithmConfigurationException("shadow"));
     }
diff --git 
a/features/shadow/distsql/handler/src/main/java/org/apache/shardingsphere/shadow/distsql/handler/update/CreateShadowRuleStatementUpdater.java
 
b/features/shadow/distsql/handler/src/main/java/org/apache/shardingsphere/shadow/distsql/handler/update/CreateShadowRuleStatementUpdater.java
index 514e43b6940..84dab6f8ac4 100644
--- 
a/features/shadow/distsql/handler/src/main/java/org/apache/shardingsphere/shadow/distsql/handler/update/CreateShadowRuleStatementUpdater.java
+++ 
b/features/shadow/distsql/handler/src/main/java/org/apache/shardingsphere/shadow/distsql/handler/update/CreateShadowRuleStatementUpdater.java
@@ -34,7 +34,6 @@ import 
org.apache.shardingsphere.shadow.distsql.parser.statement.CreateShadowRul
 import org.apache.shardingsphere.shadow.spi.ShadowAlgorithm;
 
 import java.util.Collection;
-import java.util.LinkedList;
 import java.util.Map;
 import java.util.stream.Collectors;
 
@@ -43,48 +42,44 @@ import java.util.stream.Collectors;
  */
 public final class CreateShadowRuleStatementUpdater implements 
RuleDefinitionCreateUpdater<CreateShadowRuleStatement, ShadowRuleConfiguration> 
{
     
-    private Collection<String> duplicatedRuleNames = new LinkedList<>();
+    @Override
+    public void checkSQLStatement(final ShardingSphereDatabase database, final 
CreateShadowRuleStatement sqlStatement, final ShadowRuleConfiguration 
currentRuleConfig) {
+        String databaseName = database.getName();
+        checkDuplicatedRules(databaseName, sqlStatement, currentRuleConfig);
+        checkStorageUnits(database, sqlStatement.getRules());
+        checkAlgorithms(databaseName, sqlStatement.getRules());
+        checkAlgorithmType(sqlStatement.getRules());
+    }
     
     @Override
     public RuleConfiguration buildToBeCreatedRuleConfiguration(final 
ShadowRuleConfiguration currentRuleConfig, final CreateShadowRuleStatement 
sqlStatement) {
         Collection<ShadowRuleSegment> segments = sqlStatement.getRules();
-        if (!duplicatedRuleNames.isEmpty()) {
-            segments.removeIf(each -> 
duplicatedRuleNames.contains(each.getRuleName()));
+        if (sqlStatement.isIfNotExists()) {
+            Collection<String> toBeCreatedRuleNames = 
ShadowRuleStatementSupporter.getRuleNames(sqlStatement.getRules());
+            
toBeCreatedRuleNames.retainAll(ShadowRuleStatementSupporter.getRuleNames(currentRuleConfig));
+            segments.removeIf(each -> 
toBeCreatedRuleNames.contains(each.getRuleName()));
         }
         return ShadowRuleStatementConverter.convert(segments);
     }
     
     @Override
     public void updateCurrentRuleConfiguration(final ShadowRuleConfiguration 
currentRuleConfig, final ShadowRuleConfiguration toBeCreatedRuleConfig) {
-        if (null != currentRuleConfig) {
-            
currentRuleConfig.getDataSources().addAll(toBeCreatedRuleConfig.getDataSources());
-            
currentRuleConfig.getShadowAlgorithms().putAll(toBeCreatedRuleConfig.getShadowAlgorithms());
-            updateTables(currentRuleConfig.getTables(), 
toBeCreatedRuleConfig.getTables());
-        }
+        
currentRuleConfig.getDataSources().addAll(toBeCreatedRuleConfig.getDataSources());
+        
currentRuleConfig.getShadowAlgorithms().putAll(toBeCreatedRuleConfig.getShadowAlgorithms());
+        updateTables(currentRuleConfig.getTables(), 
toBeCreatedRuleConfig.getTables());
     }
     
     private void updateTables(final Map<String, ShadowTableConfiguration> 
currentTables, final Map<String, ShadowTableConfiguration> toBeCreateTables) {
         toBeCreateTables.forEach((key, value) -> currentTables.merge(key, 
value, ShadowRuleStatementSupporter::mergeConfiguration));
     }
     
-    @Override
-    public void checkSQLStatement(final ShardingSphereDatabase database, final 
CreateShadowRuleStatement sqlStatement, final ShadowRuleConfiguration 
currentRuleConfig) {
-        String databaseName = database.getName();
-        checkDuplicatedRules(databaseName, sqlStatement, currentRuleConfig);
-        checkStorageUnits(database, sqlStatement.getRules());
-        checkAlgorithms(databaseName, sqlStatement.getRules());
-        checkAlgorithmType(sqlStatement.getRules());
-    }
-    
     private void checkDuplicatedRules(final String databaseName, final 
CreateShadowRuleStatement sqlStatement, final ShadowRuleConfiguration 
currentRuleConfig) {
         Collection<String> toBeCreatedRuleNames = 
ShadowRuleStatementSupporter.getRuleNames(sqlStatement.getRules());
         ShadowRuleStatementChecker.checkDuplicated(toBeCreatedRuleNames, 
duplicated -> new DuplicateRuleException("shadow", databaseName, duplicated));
-        
toBeCreatedRuleNames.retainAll(ShadowRuleStatementSupporter.getRuleNames(currentRuleConfig));
-        if (sqlStatement.isIfNotExists()) {
-            duplicatedRuleNames = toBeCreatedRuleNames;
-            return;
+        if (!sqlStatement.isIfNotExists()) {
+            
toBeCreatedRuleNames.retainAll(ShadowRuleStatementSupporter.getRuleNames(currentRuleConfig));
+            
ShardingSpherePreconditions.checkState(toBeCreatedRuleNames.isEmpty(), () -> 
new DuplicateRuleException("shadow", databaseName, toBeCreatedRuleNames));
         }
-        ShardingSpherePreconditions.checkState(toBeCreatedRuleNames.isEmpty(), 
() -> new DuplicateRuleException("shadow", databaseName, toBeCreatedRuleNames));
     }
     
     private void checkStorageUnits(final ShardingSphereDatabase database, 
final Collection<ShadowRuleSegment> segments) {

Reply via email to