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

chengzhang 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 2f543dae84a Refactor CreateDatabaseRuleRDLExecuteEngine (#29824)
2f543dae84a is described below

commit 2f543dae84a4d481a96b6aa4d81a3197497c73ca
Author: Liang Zhang <[email protected]>
AuthorDate: Wed Jan 24 11:56:28 2024 +0800

    Refactor CreateDatabaseRuleRDLExecuteEngine (#29824)
---
 .../type/CreateDatabaseRuleRDLExecuteEngine.java      | 19 ++++++++++++-------
 1 file changed, 12 insertions(+), 7 deletions(-)

diff --git 
a/proxy/backend/core/src/main/java/org/apache/shardingsphere/proxy/backend/handler/distsql/rdl/rule/database/execute/type/CreateDatabaseRuleRDLExecuteEngine.java
 
b/proxy/backend/core/src/main/java/org/apache/shardingsphere/proxy/backend/handler/distsql/rdl/rule/database/execute/type/CreateDatabaseRuleRDLExecuteEngine.java
index 96ed8a60c78..1660d3b4e10 100644
--- 
a/proxy/backend/core/src/main/java/org/apache/shardingsphere/proxy/backend/handler/distsql/rdl/rule/database/execute/type/CreateDatabaseRuleRDLExecuteEngine.java
+++ 
b/proxy/backend/core/src/main/java/org/apache/shardingsphere/proxy/backend/handler/distsql/rdl/rule/database/execute/type/CreateDatabaseRuleRDLExecuteEngine.java
@@ -28,6 +28,8 @@ import 
org.apache.shardingsphere.infra.metadata.version.MetaDataVersion;
 import org.apache.shardingsphere.infra.spi.type.typed.TypedSPILoader;
 import org.apache.shardingsphere.proxy.backend.context.ProxyContext;
 import 
org.apache.shardingsphere.proxy.backend.handler.distsql.rdl.rule.database.execute.DatabaseRuleRDLExecuteEngine;
+import 
org.apache.shardingsphere.single.distsql.statement.rdl.LoadSingleTableStatement;
+import 
org.apache.shardingsphere.single.distsql.statement.rdl.SetDefaultSingleTableStorageUnitStatement;
 
 import java.util.Collection;
 import java.util.LinkedHashMap;
@@ -49,17 +51,20 @@ public final class CreateDatabaseRuleRDLExecuteEngine 
implements DatabaseRuleRDL
         RuleConfiguration toBeCreatedRuleConfig = 
executor.buildToBeCreatedRuleConfiguration(currentRuleConfig, sqlStatement);
         ModeContextManager modeContextManager = 
ProxyContext.getInstance().getContextManager().getInstanceContext().getModeContextManager();
         if (null == currentRuleConfig) {
-            return 
modeContextManager.alterRuleConfiguration(database.getName(), 
decorateRuleConfiguration(database, toBeCreatedRuleConfig));
+            return 
modeContextManager.alterRuleConfiguration(database.getName(), 
decorateRuleConfiguration(sqlStatement, database, toBeCreatedRuleConfig));
         }
         executor.updateCurrentRuleConfiguration(currentRuleConfig, 
toBeCreatedRuleConfig);
-        return modeContextManager.alterRuleConfiguration(database.getName(), 
decorateRuleConfiguration(database, currentRuleConfig));
+        return modeContextManager.alterRuleConfiguration(database.getName(), 
decorateRuleConfiguration(sqlStatement, database, 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);
+    private RuleConfiguration decorateRuleConfiguration(final 
RuleDefinitionStatement sqlStatement, final ShardingSphereDatabase database, 
final RuleConfiguration ruleConfig) {
+        if (sqlStatement instanceof LoadSingleTableStatement || sqlStatement 
instanceof SetDefaultSingleTableStorageUnitStatement) {
+            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);
+        }
+        return ruleConfig;
     }
 }

Reply via email to