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

zhangliang 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 228ec459821 Refactor RuleDefinitionBackendHandler (#29783)
228ec459821 is described below

commit 228ec459821913a46d3b880b299faa8d60454a26
Author: Liang Zhang <[email protected]>
AuthorDate: Sat Jan 20 00:14:31 2024 +0800

    Refactor RuleDefinitionBackendHandler (#29783)
    
    * Refactor RuleDefinitionBackendHandler
    
    * Refactor RuleDefinitionBackendHandler
---
 .../rdl/rule/RuleDefinitionBackendHandler.java     | 35 ++++++++++------------
 1 file changed, 15 insertions(+), 20 deletions(-)

diff --git 
a/proxy/backend/core/src/main/java/org/apache/shardingsphere/proxy/backend/handler/distsql/rdl/rule/RuleDefinitionBackendHandler.java
 
b/proxy/backend/core/src/main/java/org/apache/shardingsphere/proxy/backend/handler/distsql/rdl/rule/RuleDefinitionBackendHandler.java
index ede6fb5732b..c70e0c5f8bd 100644
--- 
a/proxy/backend/core/src/main/java/org/apache/shardingsphere/proxy/backend/handler/distsql/rdl/rule/RuleDefinitionBackendHandler.java
+++ 
b/proxy/backend/core/src/main/java/org/apache/shardingsphere/proxy/backend/handler/distsql/rdl/rule/RuleDefinitionBackendHandler.java
@@ -59,24 +59,24 @@ public final class RuleDefinitionBackendHandler<T extends 
RuleDefinitionStatemen
     @Override
     protected ResponseHeader execute(final String databaseName, final T 
sqlStatement) {
         DatabaseRuleRDLExecutor executor = 
TypedSPILoader.getService(DatabaseRuleRDLExecutor.class, 
sqlStatement.getClass());
-        Class<? extends RuleConfiguration> ruleConfigClass = 
executor.getRuleConfigurationClass();
         ShardingSphereDatabase database = 
ProxyContext.getInstance().getDatabase(databaseName);
+        Class<? extends RuleConfiguration> ruleConfigClass = 
executor.getRuleConfigurationClass();
         RuleConfiguration currentRuleConfig = 
findCurrentRuleConfiguration(database, ruleConfigClass).orElse(null);
         executor.checkSQLStatement(database, sqlStatement, currentRuleConfig);
         if (getRefreshStatus(sqlStatement, currentRuleConfig, executor)) {
-            
ProxyContext.getInstance().getContextManager().getInstanceContext().getModeContextManager().alterRuleConfiguration(databaseName,
-                    processSQLStatement(database, sqlStatement, executor, 
currentRuleConfig));
+            
ProxyContext.getInstance().getContextManager().getInstanceContext().getModeContextManager()
+                    .alterRuleConfiguration(databaseName, 
processSQLStatement(database, sqlStatement, executor, currentRuleConfig));
         }
         return new UpdateResponseHeader(sqlStatement);
     }
     
     private Optional<RuleConfiguration> findCurrentRuleConfiguration(final 
ShardingSphereDatabase database, final Class<? extends RuleConfiguration> 
ruleConfigClass) {
-        for (RuleConfiguration each : 
database.getRuleMetaData().getConfigurations()) {
-            if (ruleConfigClass.isAssignableFrom(each.getClass())) {
-                return Optional.of(each);
-            }
-        }
-        return Optional.empty();
+        return 
database.getRuleMetaData().getConfigurations().stream().filter(each -> 
ruleConfigClass.isAssignableFrom(each.getClass())).findFirst();
+    }
+    
+    @SuppressWarnings({"unchecked", "rawtypes"})
+    private boolean getRefreshStatus(final SQLStatement sqlStatement, final 
RuleConfiguration currentRuleConfig, final DatabaseRuleRDLExecutor<?, ?> 
executor) {
+        return !(executor instanceof DatabaseRuleRDLDropExecutor) || 
((DatabaseRuleRDLDropExecutor) executor).hasAnyOneToBeDropped(sqlStatement, 
currentRuleConfig);
     }
     
     @SuppressWarnings("rawtypes")
@@ -101,15 +101,6 @@ public final class RuleDefinitionBackendHandler<T extends 
RuleDefinitionStatemen
         return result;
     }
     
-    @SuppressWarnings({"unchecked", "rawtypes"})
-    private RuleConfiguration decorateRuleConfiguration(final 
ShardingSphereDatabase database, final RuleConfiguration ruleConfig) {
-        Optional<RuleConfigurationDecorator> decorator = 
TypedSPILoader.findService(RuleConfigurationDecorator.class, 
ruleConfig.getClass());
-        return decorator.map(optional -> optional.decorate(database.getName(),
-                
database.getResourceMetaData().getStorageUnits().entrySet().stream()
-                        .collect(Collectors.toMap(Entry::getKey, entry -> 
entry.getValue().getDataSource(), (oldValue, currentValue) -> oldValue, 
LinkedHashMap::new)),
-                database.getRuleMetaData().getRules(), 
ruleConfig)).orElse(ruleConfig);
-    }
-    
     @SuppressWarnings({"rawtypes", "unchecked"})
     private RuleConfiguration processCreate(final T sqlStatement, final 
DatabaseRuleRDLCreateExecutor executor, final RuleConfiguration 
currentRuleConfig) {
         RuleConfiguration toBeCreatedRuleConfig = 
executor.buildToBeCreatedRuleConfiguration(currentRuleConfig, sqlStatement);
@@ -142,7 +133,11 @@ public final class RuleDefinitionBackendHandler<T extends 
RuleDefinitionStatemen
         }
     }
     
-    private boolean getRefreshStatus(final SQLStatement sqlStatement, final 
RuleConfiguration currentRuleConfig, final DatabaseRuleRDLExecutor<?, ?> 
executor) {
-        return !(executor instanceof DatabaseRuleRDLDropExecutor) || 
((DatabaseRuleRDLDropExecutor) executor).hasAnyOneToBeDropped(sqlStatement, 
currentRuleConfig);
+    @SuppressWarnings("unchecked")
+    private RuleConfiguration decorateRuleConfiguration(final 
ShardingSphereDatabase database, final RuleConfiguration ruleConfig) {
+        return TypedSPILoader.findService(RuleConfigurationDecorator.class, 
ruleConfig.getClass()).map(optional -> optional.decorate(database.getName(),
+                
database.getResourceMetaData().getStorageUnits().entrySet().stream()
+                        .collect(Collectors.toMap(Entry::getKey, entry -> 
entry.getValue().getDataSource(), (oldValue, currentValue) -> oldValue, 
LinkedHashMap::new)),
+                database.getRuleMetaData().getRules(), 
ruleConfig)).orElse(ruleConfig);
     }
 }

Reply via email to