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 dcb4cdf789b Add DatabaseRuleDefinitionExecutorFactory (#36127)
dcb4cdf789b is described below
commit dcb4cdf789b2eb94b386ddf6abce597f840d3a3e
Author: Liang Zhang <[email protected]>
AuthorDate: Thu Jul 31 11:36:04 2025 +0800
Add DatabaseRuleDefinitionExecutorFactory (#36127)
* Add DatabaseRuleDefinitionExecutorFactory
* Add DatabaseRuleDefinitionExecutorFactory
* Add DatabaseRuleDefinitionExecutorFactory
---
.../engine/update/DistSQLUpdateExecuteEngine.java | 3 +-
.../DatabaseRuleDefinitionExecuteEngine.java | 6 +--
.../DatabaseRuleDefinitionExecutorFactory.java | 55 ++++++++++++++++++++++
3 files changed, 59 insertions(+), 5 deletions(-)
diff --git
a/infra/distsql-handler/src/main/java/org/apache/shardingsphere/distsql/handler/engine/update/DistSQLUpdateExecuteEngine.java
b/infra/distsql-handler/src/main/java/org/apache/shardingsphere/distsql/handler/engine/update/DistSQLUpdateExecuteEngine.java
index c4755e126fd..e1020b77a88 100644
---
a/infra/distsql-handler/src/main/java/org/apache/shardingsphere/distsql/handler/engine/update/DistSQLUpdateExecuteEngine.java
+++
b/infra/distsql-handler/src/main/java/org/apache/shardingsphere/distsql/handler/engine/update/DistSQLUpdateExecuteEngine.java
@@ -21,6 +21,7 @@ import
org.apache.shardingsphere.distsql.handler.aware.DistSQLExecutorAwareSette
import
org.apache.shardingsphere.distsql.handler.engine.update.rdl.rule.engine.database.DatabaseRuleDefinitionExecuteEngine;
import
org.apache.shardingsphere.distsql.handler.engine.update.rdl.rule.engine.global.GlobalRuleDefinitionExecuteEngine;
import
org.apache.shardingsphere.distsql.handler.engine.update.rdl.rule.spi.database.DatabaseRuleDefinitionExecutor;
+import
org.apache.shardingsphere.distsql.handler.engine.update.rdl.rule.spi.database.DatabaseRuleDefinitionExecutorFactory;
import
org.apache.shardingsphere.distsql.handler.engine.update.rdl.rule.spi.global.GlobalRuleDefinitionExecutor;
import
org.apache.shardingsphere.distsql.handler.required.DistSQLExecutorRequiredChecker;
import org.apache.shardingsphere.distsql.handler.util.DatabaseNameUtils;
@@ -67,7 +68,7 @@ public final class DistSQLUpdateExecuteEngine {
@SuppressWarnings("rawtypes")
private void executeRuleDefinitionUpdate() throws SQLException {
- Optional<DatabaseRuleDefinitionExecutor> databaseExecutor =
TypedSPILoader.findService(DatabaseRuleDefinitionExecutor.class,
sqlStatement.getClass());
+ Optional<DatabaseRuleDefinitionExecutor> databaseExecutor =
DatabaseRuleDefinitionExecutorFactory.findInstance(sqlStatement,
contextManager.getDatabase(databaseName));
if (databaseExecutor.isPresent()) {
new
DatabaseRuleDefinitionExecuteEngine((DatabaseRuleDefinitionStatement)
sqlStatement, contextManager, databaseName,
databaseExecutor.get()).executeUpdate();
} else {
diff --git
a/infra/distsql-handler/src/main/java/org/apache/shardingsphere/distsql/handler/engine/update/rdl/rule/engine/database/DatabaseRuleDefinitionExecuteEngine.java
b/infra/distsql-handler/src/main/java/org/apache/shardingsphere/distsql/handler/engine/update/rdl/rule/engine/database/DatabaseRuleDefinitionExecuteEngine.java
index bee0d128b2e..91dc8da00a4 100644
---
a/infra/distsql-handler/src/main/java/org/apache/shardingsphere/distsql/handler/engine/update/rdl/rule/engine/database/DatabaseRuleDefinitionExecuteEngine.java
+++
b/infra/distsql-handler/src/main/java/org/apache/shardingsphere/distsql/handler/engine/update/rdl/rule/engine/database/DatabaseRuleDefinitionExecuteEngine.java
@@ -50,12 +50,10 @@ public final class DatabaseRuleDefinitionExecuteEngine {
*/
@SuppressWarnings("unchecked")
public void executeUpdate() throws SQLException {
- executor.setDatabase(contextManager.getDatabase(databaseName));
- Optional<ShardingSphereRule> rule =
contextManager.getDatabase(databaseName).getRuleMetaData().findSingleRule(executor.getRuleClass());
- executor.setRule(rule.orElse(null));
checkBeforeUpdate();
- RuleConfiguration currentRuleConfig =
rule.map(ShardingSphereRule::getConfiguration).orElse(null);
+ Optional<ShardingSphereRule> rule =
contextManager.getDatabase(databaseName).getRuleMetaData().findSingleRule(executor.getRuleClass());
if (getRefreshStatus(rule.isPresent())) {
+ RuleConfiguration currentRuleConfig =
rule.map(ShardingSphereRule::getConfiguration).orElse(null);
DatabaseRuleOperatorFactory.newInstance(contextManager,
executor).operate(sqlStatement, contextManager.getDatabase(databaseName),
currentRuleConfig);
}
}
diff --git
a/infra/distsql-handler/src/main/java/org/apache/shardingsphere/distsql/handler/engine/update/rdl/rule/spi/database/DatabaseRuleDefinitionExecutorFactory.java
b/infra/distsql-handler/src/main/java/org/apache/shardingsphere/distsql/handler/engine/update/rdl/rule/spi/database/DatabaseRuleDefinitionExecutorFactory.java
new file mode 100644
index 00000000000..ec6b8abc1a2
--- /dev/null
+++
b/infra/distsql-handler/src/main/java/org/apache/shardingsphere/distsql/handler/engine/update/rdl/rule/spi/database/DatabaseRuleDefinitionExecutorFactory.java
@@ -0,0 +1,55 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package
org.apache.shardingsphere.distsql.handler.engine.update.rdl.rule.spi.database;
+
+import lombok.AccessLevel;
+import lombok.NoArgsConstructor;
+import org.apache.shardingsphere.distsql.statement.DistSQLStatement;
+import
org.apache.shardingsphere.infra.metadata.database.ShardingSphereDatabase;
+import org.apache.shardingsphere.infra.rule.ShardingSphereRule;
+import org.apache.shardingsphere.infra.spi.type.typed.TypedSPILoader;
+
+import java.util.Optional;
+
+/**
+ * Database rule definition executor factory.
+ */
+@NoArgsConstructor(access = AccessLevel.PRIVATE)
+public final class DatabaseRuleDefinitionExecutorFactory {
+
+ /**
+ * Find instance.
+ *
+ * @param sqlStatement SQL statement
+ * @param database database
+ * @return found instance
+ */
+ @SuppressWarnings("rawtypes")
+ public static Optional<DatabaseRuleDefinitionExecutor> findInstance(final
DistSQLStatement sqlStatement, final ShardingSphereDatabase database) {
+ Optional<DatabaseRuleDefinitionExecutor> result =
TypedSPILoader.findService(DatabaseRuleDefinitionExecutor.class,
sqlStatement.getClass());
+ result.ifPresent(optional -> setAttributes(database, optional));
+ return result;
+ }
+
+ @SuppressWarnings({"unchecked", "rawtypes"})
+ private static void setAttributes(final ShardingSphereDatabase database,
final DatabaseRuleDefinitionExecutor executor) {
+ executor.setDatabase(database);
+ Optional<ShardingSphereRule> rule =
database.getRuleMetaData().findSingleRule(executor.getRuleClass());
+ executor.setRule(rule.orElse(null));
+ }
+}