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

sunnianjun 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 40ccd5a52f7 Refactor DatabaseRuleDropExecutor (#29939)
40ccd5a52f7 is described below

commit 40ccd5a52f7e5666bbbd444d45ed55d264941596
Author: Liang Zhang <[email protected]>
AuthorDate: Wed Jan 31 23:34:51 2024 +0800

    Refactor DatabaseRuleDropExecutor (#29939)
    
    * Refactor DatabaseRuleDropExecutor
    
    * Refactor DatabaseRuleDropExecutor
    
    * Refactor DatabaseRuleDropExecutor
    
    * Refactor DatabaseRuleDropExecutor
---
 .../update/DropBroadcastTableRuleExecutor.java     |  8 +++----
 .../handler/update/DropEncryptRuleExecutor.java    | 22 +++++++++--------
 .../update/DropEncryptRuleExecutorTest.java        |  6 +++++
 .../handler/update/DropMaskRuleExecutor.java       | 20 ++++++++--------
 .../handler/update/DropMaskRuleExecutorTest.java   |  3 +++
 .../update/DropReadwriteSplittingRuleExecutor.java | 28 +++++++++++-----------
 .../DropReadwriteSplittingRuleExecutorTest.java    |  9 +++++++
 .../update/DropDefaultShadowAlgorithmExecutor.java | 12 +++++-----
 .../update/DropShadowAlgorithmExecutor.java        | 10 ++++----
 .../handler/update/DropShadowRuleExecutor.java     | 28 +++++++++++-----------
 .../DropDefaultShadowAlgorithmExecutorTest.java    |  5 +++-
 .../DropDefaultShardingStrategyExecutor.java       | 18 +++++++-------
 .../update/DropShardingAlgorithmExecutor.java      |  8 +++----
 .../update/DropShardingAuditorExecutor.java        |  8 +++----
 .../update/DropShardingKeyGeneratorExecutor.java   |  8 +++----
 .../update/DropShardingTableReferenceExecutor.java |  6 ++---
 .../update/DropShardingTableRuleExecutor.java      | 23 +++++++++---------
 .../DropShardingTableReferenceExecutorTest.java    |  4 ++--
 .../DatabaseRuleDefinitionExecuteEngine.java       |  6 ++---
 .../database/type/DropDatabaseRuleOperator.java    |  6 ++---
 .../spi/database/DatabaseRuleDropExecutor.java     |  9 +++----
 .../LegacyDatabaseRuleDefinitionExecuteEngine.java |  8 +++----
 22 files changed, 138 insertions(+), 117 deletions(-)

diff --git 
a/features/broadcast/distsql/handler/src/main/java/org/apache/shardingsphere/broadcast/distsql/handler/update/DropBroadcastTableRuleExecutor.java
 
b/features/broadcast/distsql/handler/src/main/java/org/apache/shardingsphere/broadcast/distsql/handler/update/DropBroadcastTableRuleExecutor.java
index 83e6bcef247..d6f3c0d4091 100644
--- 
a/features/broadcast/distsql/handler/src/main/java/org/apache/shardingsphere/broadcast/distsql/handler/update/DropBroadcastTableRuleExecutor.java
+++ 
b/features/broadcast/distsql/handler/src/main/java/org/apache/shardingsphere/broadcast/distsql/handler/update/DropBroadcastTableRuleExecutor.java
@@ -60,13 +60,13 @@ public final class DropBroadcastTableRuleExecutor 
implements DatabaseRuleDropExe
     }
     
     @Override
-    public boolean hasAnyOneToBeDropped(final DropBroadcastTableRuleStatement 
sqlStatement, final BroadcastRuleConfiguration currentRuleConfig) {
-        return isExistRuleConfig(currentRuleConfig) && 
!getIdenticalData(currentRuleConfig.getTables(), 
sqlStatement.getTables()).isEmpty();
+    public boolean hasAnyOneToBeDropped(final DropBroadcastTableRuleStatement 
sqlStatement) {
+        return isExistRuleConfig(rule.getConfiguration()) && 
!getIdenticalData(rule.getConfiguration().getTables(), 
sqlStatement.getTables()).isEmpty();
     }
     
     @Override
-    public BroadcastRuleConfiguration buildToBeAlteredRuleConfiguration(final 
DropBroadcastTableRuleStatement sqlStatement, final BroadcastRuleConfiguration 
currentRuleConfig) {
-        BroadcastRuleConfiguration result = new BroadcastRuleConfiguration(new 
HashSet<>(currentRuleConfig.getTables()));
+    public BroadcastRuleConfiguration buildToBeAlteredRuleConfiguration(final 
DropBroadcastTableRuleStatement sqlStatement) {
+        BroadcastRuleConfiguration result = new BroadcastRuleConfiguration(new 
HashSet<>(rule.getConfiguration().getTables()));
         result.getTables().removeIf(each -> 
containsIgnoreCase(sqlStatement.getTables(), each));
         return result;
     }
diff --git 
a/features/encrypt/distsql/handler/src/main/java/org/apache/shardingsphere/encrypt/distsql/handler/update/DropEncryptRuleExecutor.java
 
b/features/encrypt/distsql/handler/src/main/java/org/apache/shardingsphere/encrypt/distsql/handler/update/DropEncryptRuleExecutor.java
index b0aedec3419..f51f2450ebe 100644
--- 
a/features/encrypt/distsql/handler/src/main/java/org/apache/shardingsphere/encrypt/distsql/handler/update/DropEncryptRuleExecutor.java
+++ 
b/features/encrypt/distsql/handler/src/main/java/org/apache/shardingsphere/encrypt/distsql/handler/update/DropEncryptRuleExecutor.java
@@ -63,33 +63,35 @@ public final class DropEncryptRuleExecutor implements 
DatabaseRuleDropExecutor<D
     }
     
     @Override
-    public boolean hasAnyOneToBeDropped(final DropEncryptRuleStatement 
sqlStatement, final EncryptRuleConfiguration currentRuleConfig) {
-        return null != currentRuleConfig
-                && 
!getIdenticalData(currentRuleConfig.getTables().stream().map(EncryptTableRuleConfiguration::getName).collect(Collectors.toSet()),
 sqlStatement.getTables()).isEmpty();
+    public boolean hasAnyOneToBeDropped(final DropEncryptRuleStatement 
sqlStatement) {
+        return null != rule && !getIdenticalData(((EncryptRuleConfiguration) 
rule.getConfiguration())
+                
.getTables().stream().map(EncryptTableRuleConfiguration::getName).collect(Collectors.toSet()),
 sqlStatement.getTables()).isEmpty();
     }
     
     @Override
-    public EncryptRuleConfiguration buildToBeDroppedRuleConfiguration(final 
DropEncryptRuleStatement sqlStatement, final EncryptRuleConfiguration 
currentRuleConfig) {
+    public EncryptRuleConfiguration buildToBeDroppedRuleConfiguration(final 
DropEncryptRuleStatement sqlStatement) {
         Collection<EncryptTableRuleConfiguration> toBeDroppedTables = new 
LinkedList<>();
         Map<String, AlgorithmConfiguration> toBeDroppedEncryptors = new 
HashMap<>();
         for (String each : sqlStatement.getTables()) {
             toBeDroppedTables.add(new EncryptTableRuleConfiguration(each, 
Collections.emptyList()));
-            dropRule(currentRuleConfig, each);
+            dropRule(each);
         }
-        
UnusedAlgorithmFinder.findUnusedEncryptor(currentRuleConfig).forEach(each -> 
toBeDroppedEncryptors.put(each, currentRuleConfig.getEncryptors().get(each)));
+        UnusedAlgorithmFinder.findUnusedEncryptor((EncryptRuleConfiguration) 
rule.getConfiguration())
+                .forEach(each -> toBeDroppedEncryptors.put(each, 
((EncryptRuleConfiguration) 
rule.getConfiguration()).getEncryptors().get(each)));
         return new EncryptRuleConfiguration(toBeDroppedTables, 
toBeDroppedEncryptors);
     }
     
     @Override
     public boolean updateCurrentRuleConfiguration(final 
DropEncryptRuleStatement sqlStatement, final EncryptRuleConfiguration 
currentRuleConfig) {
-        sqlStatement.getTables().forEach(each -> dropRule(currentRuleConfig, 
each));
+        sqlStatement.getTables().forEach(this::dropRule);
         dropUnusedEncryptor(currentRuleConfig);
         return currentRuleConfig.isEmpty();
     }
     
-    private void dropRule(final EncryptRuleConfiguration currentRuleConfig, 
final String ruleName) {
-        Optional<EncryptTableRuleConfiguration> encryptTableRuleConfig = 
currentRuleConfig.getTables().stream().filter(each -> 
each.getName().equals(ruleName)).findAny();
-        encryptTableRuleConfig.ifPresent(optional -> 
currentRuleConfig.getTables().remove(encryptTableRuleConfig.get()));
+    private void dropRule(final String ruleName) {
+        Optional<EncryptTableRuleConfiguration> encryptTableRuleConfig = 
((EncryptRuleConfiguration) rule.getConfiguration()).getTables().stream()
+                .filter(each -> each.getName().equals(ruleName)).findAny();
+        encryptTableRuleConfig.ifPresent(optional -> 
((EncryptRuleConfiguration) 
rule.getConfiguration()).getTables().remove(encryptTableRuleConfig.get()));
     }
     
     private void dropUnusedEncryptor(final EncryptRuleConfiguration 
currentRuleConfig) {
diff --git 
a/features/encrypt/distsql/handler/src/test/java/org/apache/shardingsphere/encrypt/distsql/handler/update/DropEncryptRuleExecutorTest.java
 
b/features/encrypt/distsql/handler/src/test/java/org/apache/shardingsphere/encrypt/distsql/handler/update/DropEncryptRuleExecutorTest.java
index 26571a74d26..7f46a79b1eb 100644
--- 
a/features/encrypt/distsql/handler/src/test/java/org/apache/shardingsphere/encrypt/distsql/handler/update/DropEncryptRuleExecutorTest.java
+++ 
b/features/encrypt/distsql/handler/src/test/java/org/apache/shardingsphere/encrypt/distsql/handler/update/DropEncryptRuleExecutorTest.java
@@ -66,6 +66,9 @@ class DropEncryptRuleExecutorTest {
     @Test
     void assertUpdateCurrentRuleConfiguration() {
         EncryptRuleConfiguration ruleConfig = createCurrentRuleConfiguration();
+        EncryptRule rule = mock(EncryptRule.class);
+        when(rule.getConfiguration()).thenReturn(ruleConfig);
+        executor.setRule(rule);
         
assertTrue(executor.updateCurrentRuleConfiguration(createSQLStatement("t_encrypt"),
 ruleConfig));
         assertTrue(ruleConfig.getEncryptors().isEmpty());
     }
@@ -73,6 +76,9 @@ class DropEncryptRuleExecutorTest {
     @Test
     void assertUpdateCurrentRuleConfigurationWithInUsedEncryptor() {
         EncryptRuleConfiguration ruleConfig = 
createCurrentRuleConfigurationWithMultipleTableRules();
+        EncryptRule rule = mock(EncryptRule.class);
+        when(rule.getConfiguration()).thenReturn(ruleConfig);
+        executor.setRule(rule);
         
assertFalse(executor.updateCurrentRuleConfiguration(createSQLStatement("t_encrypt"),
 ruleConfig));
         assertThat(ruleConfig.getEncryptors().size(), is(1));
     }
diff --git 
a/features/mask/distsql/handler/src/main/java/org/apache/shardingsphere/mask/distsql/handler/update/DropMaskRuleExecutor.java
 
b/features/mask/distsql/handler/src/main/java/org/apache/shardingsphere/mask/distsql/handler/update/DropMaskRuleExecutor.java
index e08f6f3a97b..8a884c459f3 100644
--- 
a/features/mask/distsql/handler/src/main/java/org/apache/shardingsphere/mask/distsql/handler/update/DropMaskRuleExecutor.java
+++ 
b/features/mask/distsql/handler/src/main/java/org/apache/shardingsphere/mask/distsql/handler/update/DropMaskRuleExecutor.java
@@ -63,33 +63,33 @@ public final class DropMaskRuleExecutor implements 
DatabaseRuleDropExecutor<Drop
     }
     
     @Override
-    public boolean hasAnyOneToBeDropped(final DropMaskRuleStatement 
sqlStatement, final MaskRuleConfiguration currentRuleConfig) {
-        return null != currentRuleConfig
-                && 
!getIdenticalData(currentRuleConfig.getTables().stream().map(MaskTableRuleConfiguration::getName).collect(Collectors.toSet()),
 sqlStatement.getTables()).isEmpty();
+    public boolean hasAnyOneToBeDropped(final DropMaskRuleStatement 
sqlStatement) {
+        return null != rule
+                && 
!getIdenticalData(rule.getConfiguration().getTables().stream().map(MaskTableRuleConfiguration::getName).collect(Collectors.toSet()),
 sqlStatement.getTables()).isEmpty();
     }
     
     @Override
-    public MaskRuleConfiguration buildToBeDroppedRuleConfiguration(final 
DropMaskRuleStatement sqlStatement, final MaskRuleConfiguration 
currentRuleConfig) {
+    public MaskRuleConfiguration buildToBeDroppedRuleConfiguration(final 
DropMaskRuleStatement sqlStatement) {
         Collection<MaskTableRuleConfiguration> toBeDroppedTables = new 
LinkedList<>();
         Map<String, AlgorithmConfiguration> toBeDroppedAlgorithms = new 
LinkedHashMap<>();
         for (String each : sqlStatement.getTables()) {
             toBeDroppedTables.add(new MaskTableRuleConfiguration(each, 
Collections.emptyList()));
-            dropRule(currentRuleConfig, each);
+            dropRule(each);
         }
-        findUnusedAlgorithms(currentRuleConfig).forEach(each -> 
toBeDroppedAlgorithms.put(each, 
currentRuleConfig.getMaskAlgorithms().get(each)));
+        findUnusedAlgorithms(rule.getConfiguration()).forEach(each -> 
toBeDroppedAlgorithms.put(each, 
rule.getConfiguration().getMaskAlgorithms().get(each)));
         return new MaskRuleConfiguration(toBeDroppedTables, 
toBeDroppedAlgorithms);
     }
     
     @Override
     public boolean updateCurrentRuleConfiguration(final DropMaskRuleStatement 
sqlStatement, final MaskRuleConfiguration currentRuleConfig) {
-        sqlStatement.getTables().forEach(each -> dropRule(currentRuleConfig, 
each));
+        sqlStatement.getTables().forEach(this::dropRule);
         dropUnusedAlgorithm(currentRuleConfig);
         return currentRuleConfig.isEmpty();
     }
     
-    private void dropRule(final MaskRuleConfiguration currentRuleConfig, final 
String ruleName) {
-        Optional<MaskTableRuleConfiguration> maskTableRuleConfig = 
currentRuleConfig.getTables().stream().filter(each -> 
each.getName().equals(ruleName)).findAny();
-        maskTableRuleConfig.ifPresent(optional -> 
currentRuleConfig.getTables().remove(maskTableRuleConfig.get()));
+    private void dropRule(final String ruleName) {
+        Optional<MaskTableRuleConfiguration> maskTableRuleConfig = 
rule.getConfiguration().getTables().stream().filter(each -> 
each.getName().equals(ruleName)).findAny();
+        maskTableRuleConfig.ifPresent(optional -> 
rule.getConfiguration().getTables().remove(maskTableRuleConfig.get()));
     }
     
     private void dropUnusedAlgorithm(final MaskRuleConfiguration 
currentRuleConfig) {
diff --git 
a/features/mask/distsql/handler/src/test/java/org/apache/shardingsphere/mask/distsql/handler/update/DropMaskRuleExecutorTest.java
 
b/features/mask/distsql/handler/src/test/java/org/apache/shardingsphere/mask/distsql/handler/update/DropMaskRuleExecutorTest.java
index a81a40a74d1..93080888b74 100644
--- 
a/features/mask/distsql/handler/src/test/java/org/apache/shardingsphere/mask/distsql/handler/update/DropMaskRuleExecutorTest.java
+++ 
b/features/mask/distsql/handler/src/test/java/org/apache/shardingsphere/mask/distsql/handler/update/DropMaskRuleExecutorTest.java
@@ -60,6 +60,9 @@ class DropMaskRuleExecutorTest {
     @Test
     void assertUpdateCurrentRuleConfiguration() {
         MaskRuleConfiguration ruleConfig = createCurrentRuleConfiguration();
+        MaskRule rule = mock(MaskRule.class);
+        when(rule.getConfiguration()).thenReturn(ruleConfig);
+        executor.setRule(rule);
         
assertTrue(executor.updateCurrentRuleConfiguration(createSQLStatement(false, 
"t_mask"), ruleConfig));
         assertTrue(ruleConfig.getMaskAlgorithms().isEmpty());
         assertTrue(ruleConfig.getTables().isEmpty());
diff --git 
a/features/readwrite-splitting/distsql/handler/src/main/java/org/apache/shardingsphere/readwritesplitting/distsql/handler/update/DropReadwriteSplittingRuleExecutor.java
 
b/features/readwrite-splitting/distsql/handler/src/main/java/org/apache/shardingsphere/readwritesplitting/distsql/handler/update/DropReadwriteSplittingRuleExecutor.java
index 4087c2a6416..0bd8e1e2bff 100644
--- 
a/features/readwrite-splitting/distsql/handler/src/main/java/org/apache/shardingsphere/readwritesplitting/distsql/handler/update/DropReadwriteSplittingRuleExecutor.java
+++ 
b/features/readwrite-splitting/distsql/handler/src/main/java/org/apache/shardingsphere/readwritesplitting/distsql/handler/update/DropReadwriteSplittingRuleExecutor.java
@@ -96,44 +96,44 @@ public final class DropReadwriteSplittingRuleExecutor 
implements DatabaseRuleDro
     }
     
     @Override
-    public ReadwriteSplittingRuleConfiguration 
buildToBeDroppedRuleConfiguration(final DropReadwriteSplittingRuleStatement 
sqlStatement, final ReadwriteSplittingRuleConfiguration currentRuleConfig) {
+    public ReadwriteSplittingRuleConfiguration 
buildToBeDroppedRuleConfiguration(final DropReadwriteSplittingRuleStatement 
sqlStatement) {
         Collection<ReadwriteSplittingDataSourceRuleConfiguration> 
toBeDroppedDataSources = new LinkedList<>();
         Map<String, AlgorithmConfiguration> toBeDroppedLoadBalancers = new 
HashMap<>();
         for (String each : sqlStatement.getNames()) {
             toBeDroppedDataSources.add(new 
ReadwriteSplittingDataSourceRuleConfiguration(each, null, null, null));
-            dropRule(currentRuleConfig, each);
+            dropRule(each);
         }
-        findUnusedLoadBalancers(currentRuleConfig).forEach(each -> 
toBeDroppedLoadBalancers.put(each, 
currentRuleConfig.getLoadBalancers().get(each)));
+        findUnusedLoadBalancers().forEach(each -> 
toBeDroppedLoadBalancers.put(each, 
rule.getConfiguration().getLoadBalancers().get(each)));
         return new ReadwriteSplittingRuleConfiguration(toBeDroppedDataSources, 
toBeDroppedLoadBalancers);
     }
     
     @Override
     public boolean updateCurrentRuleConfiguration(final 
DropReadwriteSplittingRuleStatement sqlStatement, final 
ReadwriteSplittingRuleConfiguration currentRuleConfig) {
         for (String each : sqlStatement.getNames()) {
-            dropRule(currentRuleConfig, each);
+            dropRule(each);
         }
         dropUnusedLoadBalancer(currentRuleConfig);
         return currentRuleConfig.isEmpty();
     }
     
-    private void dropRule(final ReadwriteSplittingRuleConfiguration 
currentRuleConfig, final String ruleName) {
-        Optional<ReadwriteSplittingDataSourceRuleConfiguration> 
dataSourceRuleConfig = currentRuleConfig.getDataSources().stream().filter(each 
-> ruleName.equals(each.getName())).findAny();
-        dataSourceRuleConfig.ifPresent(optional -> 
currentRuleConfig.getDataSources().remove(optional));
+    private void dropRule(final String ruleName) {
+        Optional<ReadwriteSplittingDataSourceRuleConfiguration> 
dataSourceRuleConfig = 
rule.getConfiguration().getDataSources().stream().filter(each -> 
ruleName.equals(each.getName())).findAny();
+        dataSourceRuleConfig.ifPresent(optional -> 
rule.getConfiguration().getDataSources().remove(optional));
     }
     
     private void dropUnusedLoadBalancer(final 
ReadwriteSplittingRuleConfiguration currentRuleConfig) {
-        findUnusedLoadBalancers(currentRuleConfig).forEach(each -> 
currentRuleConfig.getLoadBalancers().remove(each));
+        findUnusedLoadBalancers().forEach(each -> 
currentRuleConfig.getLoadBalancers().remove(each));
     }
     
-    private Collection<String> findUnusedLoadBalancers(final 
ReadwriteSplittingRuleConfiguration currentRuleConfig) {
-        Collection<String> inUsedAlgorithms = 
currentRuleConfig.getDataSources().stream().map(ReadwriteSplittingDataSourceRuleConfiguration::getLoadBalancerName).collect(Collectors.toSet());
-        return 
currentRuleConfig.getLoadBalancers().keySet().stream().filter(each -> 
!inUsedAlgorithms.contains(each)).collect(Collectors.toSet());
+    private Collection<String> findUnusedLoadBalancers() {
+        Collection<String> inUsedAlgorithms = 
rule.getConfiguration().getDataSources().stream().map(ReadwriteSplittingDataSourceRuleConfiguration::getLoadBalancerName).collect(Collectors.toSet());
+        return 
rule.getConfiguration().getLoadBalancers().keySet().stream().filter(each -> 
!inUsedAlgorithms.contains(each)).collect(Collectors.toSet());
     }
     
     @Override
-    public boolean hasAnyOneToBeDropped(final 
DropReadwriteSplittingRuleStatement sqlStatement, final 
ReadwriteSplittingRuleConfiguration currentRuleConfig) {
-        return null != currentRuleConfig && 
!getIdenticalData(currentRuleConfig.getDataSources().stream()
-                
.map(ReadwriteSplittingDataSourceRuleConfiguration::getName).collect(Collectors.toSet()),
 sqlStatement.getNames()).isEmpty();
+    public boolean hasAnyOneToBeDropped(final 
DropReadwriteSplittingRuleStatement sqlStatement) {
+        return null != rule && !getIdenticalData(
+                
rule.getConfiguration().getDataSources().stream().map(ReadwriteSplittingDataSourceRuleConfiguration::getName).collect(Collectors.toSet()),
 sqlStatement.getNames()).isEmpty();
     }
     
     @Override
diff --git 
a/features/readwrite-splitting/distsql/handler/src/test/java/org/apache/shardingsphere/readwritesplitting/distsql/handler/update/DropReadwriteSplittingRuleExecutorTest.java
 
b/features/readwrite-splitting/distsql/handler/src/test/java/org/apache/shardingsphere/readwritesplitting/distsql/handler/update/DropReadwriteSplittingRuleExecutorTest.java
index 7d432a8a900..76c4b4a279a 100644
--- 
a/features/readwrite-splitting/distsql/handler/src/test/java/org/apache/shardingsphere/readwritesplitting/distsql/handler/update/DropReadwriteSplittingRuleExecutorTest.java
+++ 
b/features/readwrite-splitting/distsql/handler/src/test/java/org/apache/shardingsphere/readwritesplitting/distsql/handler/update/DropReadwriteSplittingRuleExecutorTest.java
@@ -95,6 +95,9 @@ class DropReadwriteSplittingRuleExecutorTest {
     @Test
     void assertUpdateCurrentRuleConfiguration() {
         ReadwriteSplittingRuleConfiguration ruleConfig = 
createCurrentRuleConfiguration();
+        ReadwriteSplittingRule rule = mock(ReadwriteSplittingRule.class);
+        when(rule.getConfiguration()).thenReturn(ruleConfig);
+        executor.setRule(rule);
         
assertTrue(executor.updateCurrentRuleConfiguration(createSQLStatement(), 
ruleConfig));
         assertThat(ruleConfig.getLoadBalancers().size(), is(0));
     }
@@ -102,6 +105,9 @@ class DropReadwriteSplittingRuleExecutorTest {
     @Test
     void assertUpdateCurrentRuleConfigurationWithInUsedLoadBalancer() {
         ReadwriteSplittingRuleConfiguration ruleConfig = 
createMultipleCurrentRuleConfigurations();
+        ReadwriteSplittingRule rule = mock(ReadwriteSplittingRule.class);
+        when(rule.getConfiguration()).thenReturn(ruleConfig);
+        executor.setRule(rule);
         
assertFalse(executor.updateCurrentRuleConfiguration(createSQLStatement(), 
ruleConfig));
         assertThat(ruleConfig.getLoadBalancers().size(), is(1));
     }
@@ -109,6 +115,9 @@ class DropReadwriteSplittingRuleExecutorTest {
     @Test
     void assertUpdateCurrentRuleConfigurationWithoutLoadBalancerName() {
         ReadwriteSplittingRuleConfiguration ruleConfig = 
createCurrentRuleConfigurationWithoutLoadBalancerName();
+        ReadwriteSplittingRule rule = mock(ReadwriteSplittingRule.class);
+        when(rule.getConfiguration()).thenReturn(ruleConfig);
+        executor.setRule(rule);
         
assertTrue(executor.updateCurrentRuleConfiguration(createSQLStatement(), 
ruleConfig));
         assertThat(ruleConfig.getLoadBalancers().size(), is(0));
     }
diff --git 
a/features/shadow/distsql/handler/src/main/java/org/apache/shardingsphere/shadow/distsql/handler/update/DropDefaultShadowAlgorithmExecutor.java
 
b/features/shadow/distsql/handler/src/main/java/org/apache/shardingsphere/shadow/distsql/handler/update/DropDefaultShadowAlgorithmExecutor.java
index 67c2c5eafcc..f992330fb99 100644
--- 
a/features/shadow/distsql/handler/src/main/java/org/apache/shardingsphere/shadow/distsql/handler/update/DropDefaultShadowAlgorithmExecutor.java
+++ 
b/features/shadow/distsql/handler/src/main/java/org/apache/shardingsphere/shadow/distsql/handler/update/DropDefaultShadowAlgorithmExecutor.java
@@ -53,16 +53,16 @@ public final class DropDefaultShadowAlgorithmExecutor 
implements DatabaseRuleDro
     }
     
     @Override
-    public boolean hasAnyOneToBeDropped(final 
DropDefaultShadowAlgorithmStatement sqlStatement, final ShadowRuleConfiguration 
currentRuleConfig) {
-        return null != currentRuleConfig && null != 
currentRuleConfig.getDefaultShadowAlgorithmName();
+    public boolean hasAnyOneToBeDropped(final 
DropDefaultShadowAlgorithmStatement sqlStatement) {
+        return null != rule && null != 
rule.getConfiguration().getDefaultShadowAlgorithmName();
     }
     
     @Override
-    public ShadowRuleConfiguration buildToBeDroppedRuleConfiguration(final 
DropDefaultShadowAlgorithmStatement sqlStatement, final ShadowRuleConfiguration 
currentRuleConfig) {
+    public ShadowRuleConfiguration buildToBeDroppedRuleConfiguration(final 
DropDefaultShadowAlgorithmStatement sqlStatement) {
         ShadowRuleConfiguration result = new ShadowRuleConfiguration();
-        
result.setShadowAlgorithms(Collections.singletonMap(currentRuleConfig.getDefaultShadowAlgorithmName(),
-                
currentRuleConfig.getShadowAlgorithms().get(currentRuleConfig.getDefaultShadowAlgorithmName())));
-        
result.setDefaultShadowAlgorithmName(currentRuleConfig.getDefaultShadowAlgorithmName());
+        
result.setShadowAlgorithms(Collections.singletonMap(rule.getConfiguration().getDefaultShadowAlgorithmName(),
+                
rule.getConfiguration().getShadowAlgorithms().get(rule.getConfiguration().getDefaultShadowAlgorithmName())));
+        
result.setDefaultShadowAlgorithmName(rule.getConfiguration().getDefaultShadowAlgorithmName());
         return result;
     }
     
diff --git 
a/features/shadow/distsql/handler/src/main/java/org/apache/shardingsphere/shadow/distsql/handler/update/DropShadowAlgorithmExecutor.java
 
b/features/shadow/distsql/handler/src/main/java/org/apache/shardingsphere/shadow/distsql/handler/update/DropShadowAlgorithmExecutor.java
index a018326ad3c..00a2f623cbe 100644
--- 
a/features/shadow/distsql/handler/src/main/java/org/apache/shardingsphere/shadow/distsql/handler/update/DropShadowAlgorithmExecutor.java
+++ 
b/features/shadow/distsql/handler/src/main/java/org/apache/shardingsphere/shadow/distsql/handler/update/DropShadowAlgorithmExecutor.java
@@ -80,16 +80,16 @@ public final class DropShadowAlgorithmExecutor implements 
DatabaseRuleDropExecut
     }
     
     @Override
-    public boolean hasAnyOneToBeDropped(final DropShadowAlgorithmStatement 
sqlStatement, final ShadowRuleConfiguration currentRuleConfig) {
-        return null != currentRuleConfig
-                && 
!getIdenticalData(ShadowRuleStatementSupporter.getAlgorithmNames(currentRuleConfig),
 sqlStatement.getNames()).isEmpty();
+    public boolean hasAnyOneToBeDropped(final DropShadowAlgorithmStatement 
sqlStatement) {
+        return null != rule
+                && 
!getIdenticalData(ShadowRuleStatementSupporter.getAlgorithmNames(rule.getConfiguration()),
 sqlStatement.getNames()).isEmpty();
     }
     
     @Override
-    public ShadowRuleConfiguration buildToBeDroppedRuleConfiguration(final 
DropShadowAlgorithmStatement sqlStatement, final ShadowRuleConfiguration 
currentRuleConfig) {
+    public ShadowRuleConfiguration buildToBeDroppedRuleConfiguration(final 
DropShadowAlgorithmStatement sqlStatement) {
         ShadowRuleConfiguration result = new ShadowRuleConfiguration();
         for (String each : sqlStatement.getNames()) {
-            result.getShadowAlgorithms().put(each, 
currentRuleConfig.getShadowAlgorithms().get(each));
+            result.getShadowAlgorithms().put(each, 
rule.getConfiguration().getShadowAlgorithms().get(each));
         }
         return result;
     }
diff --git 
a/features/shadow/distsql/handler/src/main/java/org/apache/shardingsphere/shadow/distsql/handler/update/DropShadowRuleExecutor.java
 
b/features/shadow/distsql/handler/src/main/java/org/apache/shardingsphere/shadow/distsql/handler/update/DropShadowRuleExecutor.java
index 3384b6d0f99..db390211f53 100644
--- 
a/features/shadow/distsql/handler/src/main/java/org/apache/shardingsphere/shadow/distsql/handler/update/DropShadowRuleExecutor.java
+++ 
b/features/shadow/distsql/handler/src/main/java/org/apache/shardingsphere/shadow/distsql/handler/update/DropShadowRuleExecutor.java
@@ -66,33 +66,33 @@ public final class DropShadowRuleExecutor implements 
DatabaseRuleDropExecutor<Dr
     }
     
     @Override
-    public boolean hasAnyOneToBeDropped(final DropShadowRuleStatement 
sqlStatement, final ShadowRuleConfiguration currentRuleConfig) {
-        return isExistRuleConfig(currentRuleConfig) && 
!getIdenticalData(sqlStatement.getNames(), getDataSourceNames()).isEmpty();
+    public boolean hasAnyOneToBeDropped(final DropShadowRuleStatement 
sqlStatement) {
+        return isExistRuleConfig(rule.getConfiguration()) && 
!getIdenticalData(sqlStatement.getNames(), getDataSourceNames()).isEmpty();
     }
     
     @Override
-    public ShadowRuleConfiguration buildToBeDroppedRuleConfiguration(final 
DropShadowRuleStatement sqlStatement, final ShadowRuleConfiguration 
currentRuleConfig) {
+    public ShadowRuleConfiguration buildToBeDroppedRuleConfiguration(final 
DropShadowRuleStatement sqlStatement) {
         ShadowRuleConfiguration result = new ShadowRuleConfiguration();
         for (String each : sqlStatement.getNames()) {
             result.getDataSources().add(new 
ShadowDataSourceConfiguration(each, null, null));
-            dropRule(currentRuleConfig, each);
+            dropRule(each);
         }
-        currentRuleConfig.getTables().forEach((key, value) -> 
value.getDataSourceNames().removeIf(sqlStatement.getNames()::contains));
-        for (Entry<String, ShadowTableConfiguration> each : 
currentRuleConfig.getTables().entrySet()) {
+        rule.getConfiguration().getTables().forEach((key, value) -> 
value.getDataSourceNames().removeIf(sqlStatement.getNames()::contains));
+        for (Entry<String, ShadowTableConfiguration> each : 
rule.getConfiguration().getTables().entrySet()) {
             if (each.getValue().getDataSourceNames().isEmpty()) {
                 result.getTables().put(each.getKey(), each.getValue());
             }
         }
-        currentRuleConfig.getTables().entrySet().removeIf(each -> 
each.getValue().getDataSourceNames().isEmpty());
-        
UnusedAlgorithmFinder.findUnusedShadowAlgorithm(currentRuleConfig).forEach(each 
-> result.getShadowAlgorithms().put(each, 
currentRuleConfig.getShadowAlgorithms().get(each)));
+        rule.getConfiguration().getTables().entrySet().removeIf(each -> 
each.getValue().getDataSourceNames().isEmpty());
+        
UnusedAlgorithmFinder.findUnusedShadowAlgorithm(rule.getConfiguration()).forEach(each
 -> result.getShadowAlgorithms().put(each, 
rule.getConfiguration().getShadowAlgorithms().get(each)));
         return result;
     }
     
     @Override
-    public ShadowRuleConfiguration buildToBeAlteredRuleConfiguration(final 
DropShadowRuleStatement sqlStatement, final ShadowRuleConfiguration 
currentRuleConfig) {
+    public ShadowRuleConfiguration buildToBeAlteredRuleConfiguration(final 
DropShadowRuleStatement sqlStatement) {
         Map<String, ShadowTableConfiguration> tables = new LinkedHashMap<>();
         Collection<String> toBeDroppedDataSourceNames = 
sqlStatement.getNames();
-        for (Entry<String, ShadowTableConfiguration> each : 
currentRuleConfig.getTables().entrySet()) {
+        for (Entry<String, ShadowTableConfiguration> each : 
rule.getConfiguration().getTables().entrySet()) {
             if 
(!toBeDroppedDataSourceNames.containsAll(each.getValue().getDataSourceNames())) 
{
                 List<String> currentDataSources = new 
LinkedList<>(each.getValue().getDataSourceNames());
                 currentDataSources.removeAll(toBeDroppedDataSourceNames);
@@ -107,7 +107,7 @@ public final class DropShadowRuleExecutor implements 
DatabaseRuleDropExecutor<Dr
     @Override
     public boolean updateCurrentRuleConfiguration(final 
DropShadowRuleStatement sqlStatement, final ShadowRuleConfiguration 
currentRuleConfig) {
         for (String each : sqlStatement.getNames()) {
-            dropRule(currentRuleConfig, each);
+            dropRule(each);
         }
         currentRuleConfig.getTables().forEach((key, value) -> 
value.getDataSourceNames().removeIf(sqlStatement.getNames()::contains));
         currentRuleConfig.getTables().entrySet().removeIf(entry -> 
entry.getValue().getDataSourceNames().isEmpty());
@@ -115,9 +115,9 @@ public final class DropShadowRuleExecutor implements 
DatabaseRuleDropExecutor<Dr
         return currentRuleConfig.isEmpty();
     }
     
-    private void dropRule(final ShadowRuleConfiguration currentRuleConfig, 
final String ruleName) {
-        Optional<ShadowDataSourceConfiguration> dataSourceRuleConfig = 
currentRuleConfig.getDataSources().stream().filter(each -> 
ruleName.equals(each.getName())).findAny();
-        dataSourceRuleConfig.ifPresent(optional -> 
currentRuleConfig.getDataSources().remove(optional));
+    private void dropRule(final String ruleName) {
+        Optional<ShadowDataSourceConfiguration> dataSourceRuleConfig = 
rule.getConfiguration().getDataSources().stream().filter(each -> 
ruleName.equals(each.getName())).findAny();
+        dataSourceRuleConfig.ifPresent(optional -> 
rule.getConfiguration().getDataSources().remove(optional));
     }
     
     private void dropUnusedAlgorithm(final ShadowRuleConfiguration 
currentRuleConfig) {
diff --git 
a/features/shadow/distsql/handler/src/test/java/org/apache/shardingsphere/shadow/distsql/update/DropDefaultShadowAlgorithmExecutorTest.java
 
b/features/shadow/distsql/handler/src/test/java/org/apache/shardingsphere/shadow/distsql/update/DropDefaultShadowAlgorithmExecutorTest.java
index 873080cced6..ae6fb62f081 100644
--- 
a/features/shadow/distsql/handler/src/test/java/org/apache/shardingsphere/shadow/distsql/update/DropDefaultShadowAlgorithmExecutorTest.java
+++ 
b/features/shadow/distsql/handler/src/test/java/org/apache/shardingsphere/shadow/distsql/update/DropDefaultShadowAlgorithmExecutorTest.java
@@ -68,9 +68,12 @@ class DropDefaultShadowAlgorithmExecutorTest {
         ShadowRuleConfiguration ruleConfig = new ShadowRuleConfiguration();
         ruleConfig.setDefaultShadowAlgorithmName("default");
         
ruleConfig.getShadowAlgorithms().put(ruleConfig.getDefaultShadowAlgorithmName(),
 mock(AlgorithmConfiguration.class));
+        ShadowRule rule = mock(ShadowRule.class);
+        when(rule.getConfiguration()).thenReturn(ruleConfig);
+        executor.setRule(rule);
         executor.checkBeforeUpdate(new 
DropDefaultShadowAlgorithmStatement(true));
         DropDefaultShadowAlgorithmStatement sqlStatement = new 
DropDefaultShadowAlgorithmStatement(false);
-        assertTrue(executor.hasAnyOneToBeDropped(sqlStatement, ruleConfig));
+        assertTrue(executor.hasAnyOneToBeDropped(sqlStatement));
         executor.updateCurrentRuleConfiguration(sqlStatement, ruleConfig);
         assertNull(ruleConfig.getDefaultShadowAlgorithmName());
         assertTrue(ruleConfig.getShadowAlgorithms().isEmpty());
diff --git 
a/features/sharding/distsql/handler/src/main/java/org/apache/shardingsphere/sharding/distsql/handler/update/DropDefaultShardingStrategyExecutor.java
 
b/features/sharding/distsql/handler/src/main/java/org/apache/shardingsphere/sharding/distsql/handler/update/DropDefaultShardingStrategyExecutor.java
index 57f4dfa2fa9..bfca5df509f 100644
--- 
a/features/sharding/distsql/handler/src/main/java/org/apache/shardingsphere/sharding/distsql/handler/update/DropDefaultShardingStrategyExecutor.java
+++ 
b/features/sharding/distsql/handler/src/main/java/org/apache/shardingsphere/sharding/distsql/handler/update/DropDefaultShardingStrategyExecutor.java
@@ -63,24 +63,24 @@ public final class DropDefaultShardingStrategyExecutor 
implements DatabaseRuleDr
     }
     
     @Override
-    public boolean hasAnyOneToBeDropped(final 
DropDefaultShardingStrategyStatement sqlStatement, final 
ShardingRuleConfiguration currentRuleConfig) {
+    public boolean hasAnyOneToBeDropped(final 
DropDefaultShardingStrategyStatement sqlStatement) {
         if 
(sqlStatement.getDefaultType().equalsIgnoreCase(ShardingStrategyLevelType.TABLE.name()))
 {
-            return null != currentRuleConfig && null != 
currentRuleConfig.getDefaultTableShardingStrategy();
+            return null != rule && null != 
rule.getConfiguration().getDefaultTableShardingStrategy();
         }
-        return null != currentRuleConfig && null != 
currentRuleConfig.getDefaultDatabaseShardingStrategy();
+        return null != rule && null != 
rule.getConfiguration().getDefaultDatabaseShardingStrategy();
     }
     
     @Override
-    public ShardingRuleConfiguration buildToBeDroppedRuleConfiguration(final 
DropDefaultShardingStrategyStatement sqlStatement, final 
ShardingRuleConfiguration currentRuleConfig) {
+    public ShardingRuleConfiguration buildToBeDroppedRuleConfiguration(final 
DropDefaultShardingStrategyStatement sqlStatement) {
         ShardingRuleConfiguration result = new ShardingRuleConfiguration();
         if 
(sqlStatement.getDefaultType().equalsIgnoreCase(ShardingStrategyLevelType.TABLE.name()))
 {
-            
result.setDefaultTableShardingStrategy(currentRuleConfig.getDefaultTableShardingStrategy());
-            currentRuleConfig.setDefaultTableShardingStrategy(null);
+            
result.setDefaultTableShardingStrategy(rule.getConfiguration().getDefaultTableShardingStrategy());
+            rule.getConfiguration().setDefaultTableShardingStrategy(null);
         } else {
-            
result.setDefaultDatabaseShardingStrategy(currentRuleConfig.getDefaultDatabaseShardingStrategy());
-            currentRuleConfig.setDefaultDatabaseShardingStrategy(null);
+            
result.setDefaultDatabaseShardingStrategy(rule.getConfiguration().getDefaultDatabaseShardingStrategy());
+            rule.getConfiguration().setDefaultDatabaseShardingStrategy(null);
         }
-        
UnusedAlgorithmFinder.findUnusedShardingAlgorithm(currentRuleConfig).forEach(each
 -> result.getShardingAlgorithms().put(each, 
currentRuleConfig.getShardingAlgorithms().get(each)));
+        
UnusedAlgorithmFinder.findUnusedShardingAlgorithm(rule.getConfiguration()).forEach(each
 -> result.getShardingAlgorithms().put(each, 
rule.getConfiguration().getShardingAlgorithms().get(each)));
         return result;
     }
     
diff --git 
a/features/sharding/distsql/handler/src/main/java/org/apache/shardingsphere/sharding/distsql/handler/update/DropShardingAlgorithmExecutor.java
 
b/features/sharding/distsql/handler/src/main/java/org/apache/shardingsphere/sharding/distsql/handler/update/DropShardingAlgorithmExecutor.java
index 1fbca2f9236..5eb547c63ed 100644
--- 
a/features/sharding/distsql/handler/src/main/java/org/apache/shardingsphere/sharding/distsql/handler/update/DropShardingAlgorithmExecutor.java
+++ 
b/features/sharding/distsql/handler/src/main/java/org/apache/shardingsphere/sharding/distsql/handler/update/DropShardingAlgorithmExecutor.java
@@ -93,10 +93,10 @@ public final class DropShardingAlgorithmExecutor implements 
DatabaseRuleDropExec
     }
     
     @Override
-    public ShardingRuleConfiguration buildToBeDroppedRuleConfiguration(final 
DropShardingAlgorithmStatement sqlStatement, final ShardingRuleConfiguration 
currentRuleConfig) {
+    public ShardingRuleConfiguration buildToBeDroppedRuleConfiguration(final 
DropShardingAlgorithmStatement sqlStatement) {
         ShardingRuleConfiguration result = new ShardingRuleConfiguration();
         for (String each : sqlStatement.getNames()) {
-            result.getShardingAlgorithms().put(each, 
currentRuleConfig.getShardingAlgorithms().get(each));
+            result.getShardingAlgorithms().put(each, 
rule.getConfiguration().getShardingAlgorithms().get(each));
         }
         return result;
     }
@@ -110,8 +110,8 @@ public final class DropShardingAlgorithmExecutor implements 
DatabaseRuleDropExec
     }
     
     @Override
-    public boolean hasAnyOneToBeDropped(final DropShardingAlgorithmStatement 
sqlStatement, final ShardingRuleConfiguration currentRuleConfig) {
-        return null != currentRuleConfig && 
!getIdenticalData(getCurrentShardingAlgorithms(), 
sqlStatement.getNames()).isEmpty();
+    public boolean hasAnyOneToBeDropped(final DropShardingAlgorithmStatement 
sqlStatement) {
+        return null != rule && 
!getIdenticalData(getCurrentShardingAlgorithms(), 
sqlStatement.getNames()).isEmpty();
     }
     
     private void dropShardingAlgorithm(final String algorithmName) {
diff --git 
a/features/sharding/distsql/handler/src/main/java/org/apache/shardingsphere/sharding/distsql/handler/update/DropShardingAuditorExecutor.java
 
b/features/sharding/distsql/handler/src/main/java/org/apache/shardingsphere/sharding/distsql/handler/update/DropShardingAuditorExecutor.java
index 6b0a337fee4..6a8148021a0 100644
--- 
a/features/sharding/distsql/handler/src/main/java/org/apache/shardingsphere/sharding/distsql/handler/update/DropShardingAuditorExecutor.java
+++ 
b/features/sharding/distsql/handler/src/main/java/org/apache/shardingsphere/sharding/distsql/handler/update/DropShardingAuditorExecutor.java
@@ -75,10 +75,10 @@ public final class DropShardingAuditorExecutor implements 
DatabaseRuleDropExecut
     }
     
     @Override
-    public ShardingRuleConfiguration buildToBeDroppedRuleConfiguration(final 
DropShardingAuditorStatement sqlStatement, final ShardingRuleConfiguration 
currentRuleConfig) {
+    public ShardingRuleConfiguration buildToBeDroppedRuleConfiguration(final 
DropShardingAuditorStatement sqlStatement) {
         ShardingRuleConfiguration result = new ShardingRuleConfiguration();
         for (String each : sqlStatement.getNames()) {
-            result.getAuditors().put(each, 
currentRuleConfig.getAuditors().get(each));
+            result.getAuditors().put(each, 
rule.getConfiguration().getAuditors().get(each));
         }
         return result;
     }
@@ -90,8 +90,8 @@ public final class DropShardingAuditorExecutor implements 
DatabaseRuleDropExecut
     }
     
     @Override
-    public boolean hasAnyOneToBeDropped(final DropShardingAuditorStatement 
sqlStatement, final ShardingRuleConfiguration currentRuleConfig) {
-        return null != currentRuleConfig && 
!getIdenticalData(currentRuleConfig.getAuditors().keySet(), 
sqlStatement.getNames()).isEmpty();
+    public boolean hasAnyOneToBeDropped(final DropShardingAuditorStatement 
sqlStatement) {
+        return null != rule && 
!getIdenticalData(rule.getConfiguration().getAuditors().keySet(), 
sqlStatement.getNames()).isEmpty();
     }
     
     @Override
diff --git 
a/features/sharding/distsql/handler/src/main/java/org/apache/shardingsphere/sharding/distsql/handler/update/DropShardingKeyGeneratorExecutor.java
 
b/features/sharding/distsql/handler/src/main/java/org/apache/shardingsphere/sharding/distsql/handler/update/DropShardingKeyGeneratorExecutor.java
index eefc6e7b1be..466309d4f1e 100644
--- 
a/features/sharding/distsql/handler/src/main/java/org/apache/shardingsphere/sharding/distsql/handler/update/DropShardingKeyGeneratorExecutor.java
+++ 
b/features/sharding/distsql/handler/src/main/java/org/apache/shardingsphere/sharding/distsql/handler/update/DropShardingKeyGeneratorExecutor.java
@@ -76,10 +76,10 @@ public final class DropShardingKeyGeneratorExecutor 
implements DatabaseRuleDropE
     }
     
     @Override
-    public ShardingRuleConfiguration buildToBeDroppedRuleConfiguration(final 
DropShardingKeyGeneratorStatement sqlStatement, final ShardingRuleConfiguration 
currentRuleConfig) {
+    public ShardingRuleConfiguration buildToBeDroppedRuleConfiguration(final 
DropShardingKeyGeneratorStatement sqlStatement) {
         ShardingRuleConfiguration result = new ShardingRuleConfiguration();
         for (String each : sqlStatement.getNames()) {
-            result.getKeyGenerators().put(each, 
currentRuleConfig.getKeyGenerators().get(each));
+            result.getKeyGenerators().put(each, 
rule.getConfiguration().getKeyGenerators().get(each));
         }
         return result;
     }
@@ -91,8 +91,8 @@ public final class DropShardingKeyGeneratorExecutor 
implements DatabaseRuleDropE
     }
     
     @Override
-    public boolean hasAnyOneToBeDropped(final 
DropShardingKeyGeneratorStatement sqlStatement, final ShardingRuleConfiguration 
currentRuleConfig) {
-        return null != currentRuleConfig && 
!getIdenticalData(currentRuleConfig.getKeyGenerators().keySet(), 
sqlStatement.getNames()).isEmpty();
+    public boolean hasAnyOneToBeDropped(final 
DropShardingKeyGeneratorStatement sqlStatement) {
+        return null != rule && 
!getIdenticalData(rule.getConfiguration().getKeyGenerators().keySet(), 
sqlStatement.getNames()).isEmpty();
     }
     
     @Override
diff --git 
a/features/sharding/distsql/handler/src/main/java/org/apache/shardingsphere/sharding/distsql/handler/update/DropShardingTableReferenceExecutor.java
 
b/features/sharding/distsql/handler/src/main/java/org/apache/shardingsphere/sharding/distsql/handler/update/DropShardingTableReferenceExecutor.java
index 6bcf79ad861..6468e705691 100644
--- 
a/features/sharding/distsql/handler/src/main/java/org/apache/shardingsphere/sharding/distsql/handler/update/DropShardingTableReferenceExecutor.java
+++ 
b/features/sharding/distsql/handler/src/main/java/org/apache/shardingsphere/sharding/distsql/handler/update/DropShardingTableReferenceExecutor.java
@@ -69,7 +69,7 @@ public final class DropShardingTableReferenceExecutor 
implements DatabaseRuleDro
     }
     
     @Override
-    public ShardingRuleConfiguration buildToBeDroppedRuleConfiguration(final 
DropShardingTableReferenceRuleStatement sqlStatement, final 
ShardingRuleConfiguration currentRuleConfig) {
+    public ShardingRuleConfiguration buildToBeDroppedRuleConfiguration(final 
DropShardingTableReferenceRuleStatement sqlStatement) {
         ShardingRuleConfiguration result = new ShardingRuleConfiguration();
         for (String each : sqlStatement.getNames()) {
             result.getBindingTableGroups().add(new 
ShardingTableReferenceRuleConfiguration(each, ""));
@@ -84,8 +84,8 @@ public final class DropShardingTableReferenceExecutor 
implements DatabaseRuleDro
     }
     
     @Override
-    public boolean hasAnyOneToBeDropped(final 
DropShardingTableReferenceRuleStatement sqlStatement, final 
ShardingRuleConfiguration currentRuleConfig) {
-        return isExistRuleConfig(currentRuleConfig) && 
!getIdenticalData(getCurrentShardingTableReferenceRuleNames(), 
sqlStatement.getNames()).isEmpty();
+    public boolean hasAnyOneToBeDropped(final 
DropShardingTableReferenceRuleStatement sqlStatement) {
+        return isExistRuleConfig(rule.getConfiguration()) && 
!getIdenticalData(getCurrentShardingTableReferenceRuleNames(), 
sqlStatement.getNames()).isEmpty();
     }
     
     @Override
diff --git 
a/features/sharding/distsql/handler/src/main/java/org/apache/shardingsphere/sharding/distsql/handler/update/DropShardingTableRuleExecutor.java
 
b/features/sharding/distsql/handler/src/main/java/org/apache/shardingsphere/sharding/distsql/handler/update/DropShardingTableRuleExecutor.java
index c864438ced9..1fa4915cfc7 100644
--- 
a/features/sharding/distsql/handler/src/main/java/org/apache/shardingsphere/sharding/distsql/handler/update/DropShardingTableRuleExecutor.java
+++ 
b/features/sharding/distsql/handler/src/main/java/org/apache/shardingsphere/sharding/distsql/handler/update/DropShardingTableRuleExecutor.java
@@ -92,28 +92,29 @@ public final class DropShardingTableRuleExecutor implements 
DatabaseRuleDropExec
     }
     
     @Override
-    public boolean hasAnyOneToBeDropped(final DropShardingTableRuleStatement 
sqlStatement, final ShardingRuleConfiguration currentRuleConfig) {
-        if (null == currentRuleConfig) {
+    public boolean hasAnyOneToBeDropped(final DropShardingTableRuleStatement 
sqlStatement) {
+        if (null == rule) {
             return false;
         }
         Collection<String> currentTableNames = new LinkedList<>();
-        
currentTableNames.addAll(currentRuleConfig.getTables().stream().map(ShardingTableRuleConfiguration::getLogicTable).collect(Collectors.toSet()));
-        
currentTableNames.addAll(currentRuleConfig.getAutoTables().stream().map(ShardingAutoTableRuleConfiguration::getLogicTable).collect(Collectors.toSet()));
+        
currentTableNames.addAll(rule.getConfiguration().getTables().stream().map(ShardingTableRuleConfiguration::getLogicTable).collect(Collectors.toSet()));
+        
currentTableNames.addAll(rule.getConfiguration().getAutoTables().stream().map(ShardingAutoTableRuleConfiguration::getLogicTable).collect(Collectors.toSet()));
         return !getIdenticalData(currentTableNames, 
sqlStatement.getTableNames().stream().map(each -> 
each.getIdentifier().getValue()).collect(Collectors.toSet())).isEmpty();
     }
     
     @Override
-    public ShardingRuleConfiguration buildToBeDroppedRuleConfiguration(final 
DropShardingTableRuleStatement sqlStatement, final ShardingRuleConfiguration 
currentRuleConfig) {
+    public ShardingRuleConfiguration buildToBeDroppedRuleConfiguration(final 
DropShardingTableRuleStatement sqlStatement) {
         ShardingRuleConfiguration result = new ShardingRuleConfiguration();
         Collection<String> toBeDroppedShardingTableNames = 
getToBeDroppedShardingTableNames(sqlStatement);
         for (String each : toBeDroppedShardingTableNames) {
-            
result.getTables().addAll(currentRuleConfig.getTables().stream().filter(table 
-> each.equalsIgnoreCase(table.getLogicTable())).collect(Collectors.toList()));
-            
result.getAutoTables().addAll(currentRuleConfig.getAutoTables().stream().filter(table
 -> each.equalsIgnoreCase(table.getLogicTable())).collect(Collectors.toList()));
-            dropShardingTable(currentRuleConfig, each);
+            
result.getTables().addAll(rule.getConfiguration().getTables().stream().filter(table
 -> each.equalsIgnoreCase(table.getLogicTable())).collect(Collectors.toList()));
+            
result.getAutoTables().addAll(rule.getConfiguration().getAutoTables().stream().filter(table
 -> each.equalsIgnoreCase(table.getLogicTable())).collect(Collectors.toList()));
+            dropShardingTable(rule.getConfiguration(), each);
         }
-        
UnusedAlgorithmFinder.findUnusedShardingAlgorithm(currentRuleConfig).forEach(each
 -> result.getShardingAlgorithms().put(each, 
currentRuleConfig.getShardingAlgorithms().get(each)));
-        
UnusedAlgorithmFinder.findUnusedKeyGenerator(currentRuleConfig).forEach(each -> 
result.getKeyGenerators().put(each, 
currentRuleConfig.getKeyGenerators().get(each)));
-        
UnusedAlgorithmFinder.findUnusedAuditor(currentRuleConfig).forEach(each -> 
result.getAuditors().put(each, currentRuleConfig.getAuditors().get(each)));
+        UnusedAlgorithmFinder.findUnusedShardingAlgorithm(
+                rule.getConfiguration()).forEach(each -> 
result.getShardingAlgorithms().put(each, 
rule.getConfiguration().getShardingAlgorithms().get(each)));
+        
UnusedAlgorithmFinder.findUnusedKeyGenerator(rule.getConfiguration()).forEach(each
 -> result.getKeyGenerators().put(each, 
rule.getConfiguration().getKeyGenerators().get(each)));
+        
UnusedAlgorithmFinder.findUnusedAuditor(rule.getConfiguration()).forEach(each 
-> result.getAuditors().put(each, 
rule.getConfiguration().getAuditors().get(each)));
         return result;
     }
     
diff --git 
a/features/sharding/distsql/handler/src/test/java/org/apache/shardingsphere/sharding/distsql/update/DropShardingTableReferenceExecutorTest.java
 
b/features/sharding/distsql/handler/src/test/java/org/apache/shardingsphere/sharding/distsql/update/DropShardingTableReferenceExecutorTest.java
index 88ff376b611..9cbd5a74346 100644
--- 
a/features/sharding/distsql/handler/src/test/java/org/apache/shardingsphere/sharding/distsql/update/DropShardingTableReferenceExecutorTest.java
+++ 
b/features/sharding/distsql/handler/src/test/java/org/apache/shardingsphere/sharding/distsql/update/DropShardingTableReferenceExecutorTest.java
@@ -77,7 +77,7 @@ class DropShardingTableReferenceExecutorTest {
         ShardingRule rule = mock(ShardingRule.class);
         when(rule.getConfiguration()).thenReturn(currentRuleConfig);
         executor.setRule(rule);
-        assertTrue(executor.hasAnyOneToBeDropped(sqlStatement, 
currentRuleConfig));
+        assertTrue(executor.hasAnyOneToBeDropped(sqlStatement));
     }
     
     private ShardingRuleConfiguration createCurrentRuleConfiguration() {
@@ -95,7 +95,7 @@ class DropShardingTableReferenceExecutorTest {
         ShardingRule rule = mock(ShardingRule.class);
         when(rule.getConfiguration()).thenReturn(currentRuleConfig);
         executor.setRule(rule);
-        assertFalse(executor.hasAnyOneToBeDropped(sqlStatement, 
currentRuleConfig));
+        assertFalse(executor.hasAnyOneToBeDropped(sqlStatement));
     }
     
     @Test
diff --git 
a/infra/distsql-handler/src/main/java/org/apache/shardingsphere/distsql/handler/type/rdl/rule/engine/database/DatabaseRuleDefinitionExecuteEngine.java
 
b/infra/distsql-handler/src/main/java/org/apache/shardingsphere/distsql/handler/type/rdl/rule/engine/database/DatabaseRuleDefinitionExecuteEngine.java
index 8577da3e065..55cdec10a9f 100644
--- 
a/infra/distsql-handler/src/main/java/org/apache/shardingsphere/distsql/handler/type/rdl/rule/engine/database/DatabaseRuleDefinitionExecuteEngine.java
+++ 
b/infra/distsql-handler/src/main/java/org/apache/shardingsphere/distsql/handler/type/rdl/rule/engine/database/DatabaseRuleDefinitionExecuteEngine.java
@@ -57,7 +57,7 @@ public final class DatabaseRuleDefinitionExecuteEngine {
         executor.setRule(rule.orElse(null));
         checkBeforeUpdate(rule.orElse(null));
         RuleConfiguration currentRuleConfig = 
rule.map(ShardingSphereRule::getConfiguration).orElse(null);
-        if (getRefreshStatus(currentRuleConfig)) {
+        if (getRefreshStatus()) {
             
contextManager.getMetaDataContexts().getPersistService().getMetaDataVersionPersistService()
                     
.switchActiveVersion(DatabaseRuleOperatorFactory.newInstance(contextManager, 
executor).operate(sqlStatement, database, currentRuleConfig));
         }
@@ -77,7 +77,7 @@ public final class DatabaseRuleDefinitionExecuteEngine {
     }
     
     @SuppressWarnings({"rawtypes", "unchecked"})
-    private boolean getRefreshStatus(final RuleConfiguration 
currentRuleConfig) {
-        return !(executor instanceof DatabaseRuleDropExecutor) || 
((DatabaseRuleDropExecutor) executor).hasAnyOneToBeDropped(sqlStatement, 
currentRuleConfig);
+    private boolean getRefreshStatus() {
+        return !(executor instanceof DatabaseRuleDropExecutor) || 
((DatabaseRuleDropExecutor) executor).hasAnyOneToBeDropped(sqlStatement);
     }
 }
diff --git 
a/infra/distsql-handler/src/main/java/org/apache/shardingsphere/distsql/handler/type/rdl/rule/engine/database/type/DropDatabaseRuleOperator.java
 
b/infra/distsql-handler/src/main/java/org/apache/shardingsphere/distsql/handler/type/rdl/rule/engine/database/type/DropDatabaseRuleOperator.java
index b773b23c0f4..c46229005b0 100644
--- 
a/infra/distsql-handler/src/main/java/org/apache/shardingsphere/distsql/handler/type/rdl/rule/engine/database/type/DropDatabaseRuleOperator.java
+++ 
b/infra/distsql-handler/src/main/java/org/apache/shardingsphere/distsql/handler/type/rdl/rule/engine/database/type/DropDatabaseRuleOperator.java
@@ -48,18 +48,18 @@ public final class DropDatabaseRuleOperator implements 
DatabaseRuleOperator {
     @Override
     @SuppressWarnings("unchecked")
     public Collection<MetaDataVersion> operate(final RuleDefinitionStatement 
sqlStatement, final ShardingSphereDatabase database, final RuleConfiguration 
currentRuleConfig) {
-        if (!executor.hasAnyOneToBeDropped(sqlStatement, currentRuleConfig)) {
+        if (!executor.hasAnyOneToBeDropped(sqlStatement)) {
             return Collections.emptyList();
         }
         ModeContextManager modeContextManager = 
contextManager.getInstanceContext().getModeContextManager();
-        RuleConfiguration toBeDroppedRuleConfig = 
executor.buildToBeDroppedRuleConfiguration(sqlStatement, currentRuleConfig);
+        RuleConfiguration toBeDroppedRuleConfig = 
executor.buildToBeDroppedRuleConfiguration(sqlStatement);
         if (sqlStatement instanceof 
StaticDataSourceContainedRuleAwareStatement) {
             
database.getRuleMetaData().findSingleRule(StaticDataSourceContainedRule.class)
                     .ifPresent(optional -> 
((StaticDataSourceContainedRuleAwareStatement) 
sqlStatement).getNames().forEach(optional::cleanStorageNodeDataSource));
             // TODO refactor to new metadata refresh way
         }
         modeContextManager.removeRuleConfigurationItem(database.getName(), 
toBeDroppedRuleConfig);
-        RuleConfiguration toBeAlteredRuleConfig = 
executor.buildToBeAlteredRuleConfiguration(sqlStatement, currentRuleConfig);
+        RuleConfiguration toBeAlteredRuleConfig = 
executor.buildToBeAlteredRuleConfiguration(sqlStatement);
         if (null != toBeAlteredRuleConfig && ((DatabaseRuleConfiguration) 
toBeAlteredRuleConfig).isEmpty()) {
             new 
NewYamlRuleConfigurationSwapperEngine().swapToYamlRuleConfigurations(Collections.singleton(currentRuleConfig)).values().stream().findFirst()
                     .ifPresent(optional -> 
modeContextManager.removeRuleConfiguration(database.getName(), 
optional.getRuleTagName().toLowerCase()));
diff --git 
a/infra/distsql-handler/src/main/java/org/apache/shardingsphere/distsql/handler/type/rdl/rule/spi/database/DatabaseRuleDropExecutor.java
 
b/infra/distsql-handler/src/main/java/org/apache/shardingsphere/distsql/handler/type/rdl/rule/spi/database/DatabaseRuleDropExecutor.java
index 7d9e577d2b9..0115adb7a98 100644
--- 
a/infra/distsql-handler/src/main/java/org/apache/shardingsphere/distsql/handler/type/rdl/rule/spi/database/DatabaseRuleDropExecutor.java
+++ 
b/infra/distsql-handler/src/main/java/org/apache/shardingsphere/distsql/handler/type/rdl/rule/spi/database/DatabaseRuleDropExecutor.java
@@ -39,10 +39,9 @@ public interface DatabaseRuleDropExecutor<T extends 
SQLStatement, R extends Shar
      * Build to be dropped rule configuration.
      *
      * @param sqlStatement SQL statement
-     * @param currentRuleConfig current rule configuration to be updated
      * @return to be dropped rule configuration
      */
-    default C buildToBeDroppedRuleConfiguration(final T sqlStatement, final C 
currentRuleConfig) {
+    default C buildToBeDroppedRuleConfiguration(final T sqlStatement) {
         return null;
     }
     
@@ -50,10 +49,9 @@ public interface DatabaseRuleDropExecutor<T extends 
SQLStatement, R extends Shar
      * Build to be altered rule configuration.
      *
      * @param sqlStatement SQL statement
-     * @param currentRuleConfig current rule configuration to be updated
      * @return to be altered rule configuration
      */
-    default C buildToBeAlteredRuleConfiguration(final T sqlStatement, final C 
currentRuleConfig) {
+    default C buildToBeAlteredRuleConfiguration(final T sqlStatement) {
         return null;
     }
     
@@ -81,10 +79,9 @@ public interface DatabaseRuleDropExecutor<T extends 
SQLStatement, R extends Shar
      * Whether there is dropped data.
      * 
      * @param sqlStatement SQL statement
-     * @param currentRuleConfig current rule configuration
      * @return dropped data exists or does not exist
      */
-    default boolean hasAnyOneToBeDropped(final T sqlStatement, final C 
currentRuleConfig) {
+    default boolean hasAnyOneToBeDropped(final T sqlStatement) {
         return true;
     }
     
diff --git 
a/proxy/backend/core/src/main/java/org/apache/shardingsphere/proxy/backend/handler/distsql/legacy/LegacyDatabaseRuleDefinitionExecuteEngine.java
 
b/proxy/backend/core/src/main/java/org/apache/shardingsphere/proxy/backend/handler/distsql/legacy/LegacyDatabaseRuleDefinitionExecuteEngine.java
index 19771930efb..10877490bbe 100644
--- 
a/proxy/backend/core/src/main/java/org/apache/shardingsphere/proxy/backend/handler/distsql/legacy/LegacyDatabaseRuleDefinitionExecuteEngine.java
+++ 
b/proxy/backend/core/src/main/java/org/apache/shardingsphere/proxy/backend/handler/distsql/legacy/LegacyDatabaseRuleDefinitionExecuteEngine.java
@@ -69,7 +69,7 @@ public final class LegacyDatabaseRuleDefinitionExecuteEngine {
         executor.setRule(rule.orElse(null));
         checkBeforeUpdate(rule.orElse(null));
         RuleConfiguration currentRuleConfig = 
rule.map(ShardingSphereRule::getConfiguration).orElse(null);
-        if (getRefreshStatus(sqlStatement, currentRuleConfig, executor)) {
+        if (getRefreshStatus(sqlStatement, executor)) {
             
contextManager.getInstanceContext().getModeContextManager().alterRuleConfiguration(database.getName(),
 processSQLStatement(database, sqlStatement, executor, currentRuleConfig));
         }
     }
@@ -88,8 +88,8 @@ public final class LegacyDatabaseRuleDefinitionExecuteEngine {
     }
     
     @SuppressWarnings({"unchecked", "rawtypes"})
-    private boolean getRefreshStatus(final SQLStatement sqlStatement, final 
RuleConfiguration currentRuleConfig, final DatabaseRuleDefinitionExecutor<?, ?> 
executor) {
-        return !(executor instanceof DatabaseRuleDropExecutor) || 
((DatabaseRuleDropExecutor) executor).hasAnyOneToBeDropped(sqlStatement, 
currentRuleConfig);
+    private boolean getRefreshStatus(final SQLStatement sqlStatement, final 
DatabaseRuleDefinitionExecutor<?, ?> executor) {
+        return !(executor instanceof DatabaseRuleDropExecutor) || 
((DatabaseRuleDropExecutor) executor).hasAnyOneToBeDropped(sqlStatement);
     }
     
     @SuppressWarnings("rawtypes")
@@ -134,7 +134,7 @@ public final class 
LegacyDatabaseRuleDefinitionExecuteEngine {
     @SuppressWarnings({"rawtypes", "unchecked"})
     private void processDrop(final ShardingSphereDatabase database, final 
Collection<RuleConfiguration> configs, final RuleDefinitionStatement 
sqlStatement,
                              final DatabaseRuleDropExecutor executor, final 
RuleConfiguration currentRuleConfig) {
-        if (!executor.hasAnyOneToBeDropped(sqlStatement, currentRuleConfig)) {
+        if (!executor.hasAnyOneToBeDropped(sqlStatement)) {
             return;
         }
         if (executor.updateCurrentRuleConfiguration(sqlStatement, 
currentRuleConfig)) {

Reply via email to