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

menghaoran 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 37a9f0871ca Refactor alter and drop rule operator (#36138)
37a9f0871ca is described below

commit 37a9f0871cab3e6e2e52f067ded168fa717c34df
Author: Haoran Meng <menghaora...@gmail.com>
AuthorDate: Thu Jul 31 22:36:26 2025 +0800

    Refactor alter and drop rule operator (#36138)
---
 .../engine/database/type/AlterDatabaseRuleOperator.java     |  7 ++++++-
 .../rule/engine/database/type/DropDatabaseRuleOperator.java | 13 +++++++------
 .../SetDefaultSingleTableStorageUnitExecutorTest.java       |  1 -
 3 files changed, 13 insertions(+), 8 deletions(-)

diff --git 
a/infra/distsql-handler/src/main/java/org/apache/shardingsphere/distsql/handler/engine/update/rdl/rule/engine/database/type/AlterDatabaseRuleOperator.java
 
b/infra/distsql-handler/src/main/java/org/apache/shardingsphere/distsql/handler/engine/update/rdl/rule/engine/database/type/AlterDatabaseRuleOperator.java
index ece62e1a8a5..282b6ae26e3 100644
--- 
a/infra/distsql-handler/src/main/java/org/apache/shardingsphere/distsql/handler/engine/update/rdl/rule/engine/database/type/AlterDatabaseRuleOperator.java
+++ 
b/infra/distsql-handler/src/main/java/org/apache/shardingsphere/distsql/handler/engine/update/rdl/rule/engine/database/type/AlterDatabaseRuleOperator.java
@@ -22,7 +22,9 @@ import 
org.apache.shardingsphere.distsql.handler.engine.update.rdl.rule.engine.d
 import 
org.apache.shardingsphere.distsql.handler.engine.update.rdl.rule.spi.database.type.DatabaseRuleAlterExecutor;
 import 
org.apache.shardingsphere.distsql.statement.type.rdl.rule.database.DatabaseRuleDefinitionStatement;
 import org.apache.shardingsphere.infra.config.rule.RuleConfiguration;
+import 
org.apache.shardingsphere.infra.config.rule.checker.DatabaseRuleConfigurationEmptyChecker;
 import 
org.apache.shardingsphere.infra.config.rule.decorator.RuleConfigurationDecorator;
+import 
org.apache.shardingsphere.infra.config.rule.scope.DatabaseRuleConfiguration;
 import 
org.apache.shardingsphere.infra.metadata.database.ShardingSphereDatabase;
 import org.apache.shardingsphere.infra.spi.type.typed.TypedSPILoader;
 import org.apache.shardingsphere.mode.manager.ContextManager;
@@ -50,7 +52,10 @@ public final class AlterDatabaseRuleOperator implements 
DatabaseRuleOperator {
         MetaDataManagerPersistService metaDataManagerPersistService = 
contextManager.getPersistServiceFacade().getModeFacade().getMetaDataManagerService();
         metaDataManagerPersistService.alterRuleConfiguration(database, 
decorateRuleConfiguration(database, toBeAlteredRuleConfig));
         RuleConfiguration toBeDroppedRuleConfig = 
executor.buildToBeDroppedRuleConfiguration(toBeAlteredRuleConfig);
-        metaDataManagerPersistService.removeRuleConfigurationItem(database, 
toBeDroppedRuleConfig);
+        if (toBeDroppedRuleConfig != null
+                && 
!TypedSPILoader.getService(DatabaseRuleConfigurationEmptyChecker.class, 
toBeAlteredRuleConfig.getClass()).isEmpty((DatabaseRuleConfiguration) 
toBeDroppedRuleConfig)) {
+            
metaDataManagerPersistService.removeRuleConfigurationItem(database, 
toBeDroppedRuleConfig);
+        }
     }
     
     @SuppressWarnings("unchecked")
diff --git 
a/infra/distsql-handler/src/main/java/org/apache/shardingsphere/distsql/handler/engine/update/rdl/rule/engine/database/type/DropDatabaseRuleOperator.java
 
b/infra/distsql-handler/src/main/java/org/apache/shardingsphere/distsql/handler/engine/update/rdl/rule/engine/database/type/DropDatabaseRuleOperator.java
index 3b95b97af36..8fa3acf3fd0 100644
--- 
a/infra/distsql-handler/src/main/java/org/apache/shardingsphere/distsql/handler/engine/update/rdl/rule/engine/database/type/DropDatabaseRuleOperator.java
+++ 
b/infra/distsql-handler/src/main/java/org/apache/shardingsphere/distsql/handler/engine/update/rdl/rule/engine/database/type/DropDatabaseRuleOperator.java
@@ -63,12 +63,13 @@ public final class DropDatabaseRuleOperator implements 
DatabaseRuleOperator {
         RuleConfiguration toBeDroppedRuleItemConfig = 
executor.buildToBeDroppedRuleConfiguration(sqlStatement);
         metaDataManagerPersistService.removeRuleConfigurationItem(database, 
toBeDroppedRuleItemConfig);
         RuleConfiguration toBeAlteredRuleConfig = 
executor.buildToBeAlteredRuleConfiguration(sqlStatement);
-        if (null != toBeAlteredRuleConfig
-                && 
TypedSPILoader.getService(DatabaseRuleConfigurationEmptyChecker.class, 
toBeAlteredRuleConfig.getClass()).isEmpty((DatabaseRuleConfiguration) 
toBeAlteredRuleConfig)) {
-            YamlRuleConfiguration yamlRuleConfig = new 
YamlRuleConfigurationSwapperEngine().swapToYamlRuleConfiguration(currentRuleConfig);
-            metaDataManagerPersistService.removeRuleConfiguration(database, 
currentRuleConfig, 
Objects.requireNonNull(yamlRuleConfig.getClass().getAnnotation(RuleNodeTupleEntity.class)).value());
-        } else {
-            metaDataManagerPersistService.alterRuleConfiguration(database, 
toBeAlteredRuleConfig);
+        if (null != toBeAlteredRuleConfig) {
+            if 
(TypedSPILoader.getService(DatabaseRuleConfigurationEmptyChecker.class, 
toBeAlteredRuleConfig.getClass()).isEmpty((DatabaseRuleConfiguration) 
toBeAlteredRuleConfig)) {
+                YamlRuleConfiguration yamlRuleConfig = new 
YamlRuleConfigurationSwapperEngine().swapToYamlRuleConfiguration(currentRuleConfig);
+                
metaDataManagerPersistService.removeRuleConfiguration(database, 
currentRuleConfig, 
Objects.requireNonNull(yamlRuleConfig.getClass().getAnnotation(RuleNodeTupleEntity.class)).value());
+            } else {
+                metaDataManagerPersistService.alterRuleConfiguration(database, 
toBeAlteredRuleConfig);
+            }
         }
     }
 }
diff --git 
a/kernel/single/distsql/handler/src/test/java/org/apache/shardingsphere/single/distsql/handler/update/SetDefaultSingleTableStorageUnitExecutorTest.java
 
b/kernel/single/distsql/handler/src/test/java/org/apache/shardingsphere/single/distsql/handler/update/SetDefaultSingleTableStorageUnitExecutorTest.java
index 6cbf7820bc6..3bddcf8af94 100644
--- 
a/kernel/single/distsql/handler/src/test/java/org/apache/shardingsphere/single/distsql/handler/update/SetDefaultSingleTableStorageUnitExecutorTest.java
+++ 
b/kernel/single/distsql/handler/src/test/java/org/apache/shardingsphere/single/distsql/handler/update/SetDefaultSingleTableStorageUnitExecutorTest.java
@@ -80,7 +80,6 @@ class SetDefaultSingleTableStorageUnitExecutorTest {
         ContextManager contextManager = mockContextManager(database, rule);
         new DistSQLUpdateExecuteEngine(new 
SetDefaultSingleTableStorageUnitStatement("bar_ds"), "foo_db", 
contextManager).executeUpdate();
         MetaDataManagerPersistService metaDataManagerPersistService = 
contextManager.getPersistServiceFacade().getModeFacade().getMetaDataManagerService();
-        
verify(metaDataManagerPersistService).removeRuleConfigurationItem(database, 
null);
         verify(metaDataManagerPersistService).alterRuleConfiguration(any(), 
ArgumentMatchers.<SingleRuleConfiguration>argThat(x -> 
x.getDefaultDataSource().equals(Optional.of("bar_ds"))));
     }
     

Reply via email to