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;
}
}