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 7f8e798296b Refactor LegacyDatabaseRuleDefinitionExecuteEngine (#29910)
7f8e798296b is described below

commit 7f8e798296b24a9736e62f5fb8a0f8fce6a52147
Author: Liang Zhang <[email protected]>
AuthorDate: Tue Jan 30 08:09:23 2024 +0800

    Refactor LegacyDatabaseRuleDefinitionExecuteEngine (#29910)
    
    * Simplify assertion of ClasspathWithEnvironmentURLProviderTest
    
    * Refactor LegacyDatabaseRuleDefinitionExecuteEngine
    
    * Refactor DatabaseRuleDefinitionExecuteEngine
    
    * Refactor GlobalRuleDefinitionExecutor
---
 .../ReadwriteSplittingRuleStatementChecker.java       | 10 ----------
 .../database/DatabaseRuleDefinitionExecuteEngine.java |  8 ++++----
 .../global/GlobalRuleDefinitionExecuteEngine.java     |  2 +-
 .../LegacyGlobalRuleDefinitionExecuteEngine.java      |  2 +-
 .../rule/spi/global/GlobalRuleDefinitionExecutor.java |  6 +++---
 .../ClasspathWithEnvironmentURLProviderTest.java      |  1 -
 .../handler/update/AlterGlobalClockRuleExecutor.java  |  2 +-
 .../update/AlterGlobalClockRuleExecutorTest.java      |  2 +-
 .../update/AlterSQLFederationRuleExecutor.java        |  2 +-
 .../update/AlterSQLFederationRuleExecutorTest.java    |  2 +-
 .../handler/update/AlterSQLParserRuleExecutor.java    |  2 +-
 .../update/AlterSQLParserRuleExecutorTest.java        |  2 +-
 .../update/AlterSQLTranslatorRuleExecutor.java        |  2 +-
 .../update/AlterSQLTranslatorRuleExecutorTest.java    |  2 +-
 .../handler/update/AlterTrafficRuleExecutor.java      |  2 +-
 .../handler/update/AlterTrafficRuleExecutorTest.java  |  4 ++--
 .../handler/update/AlterTransactionRuleExecutor.java  |  2 +-
 .../update/AlterTransactionRuleExecutorTest.java      |  4 ++--
 .../LegacyDatabaseRuleDefinitionExecuteEngine.java    | 19 ++++++++++++++++++-
 19 files changed, 41 insertions(+), 35 deletions(-)

diff --git 
a/features/readwrite-splitting/distsql/handler/src/main/java/org/apache/shardingsphere/readwritesplitting/distsql/handler/checker/ReadwriteSplittingRuleStatementChecker.java
 
b/features/readwrite-splitting/distsql/handler/src/main/java/org/apache/shardingsphere/readwritesplitting/distsql/handler/checker/ReadwriteSplittingRuleStatementChecker.java
index 34ab5b3db7a..83d82367a2b 100644
--- 
a/features/readwrite-splitting/distsql/handler/src/main/java/org/apache/shardingsphere/readwritesplitting/distsql/handler/checker/ReadwriteSplittingRuleStatementChecker.java
+++ 
b/features/readwrite-splitting/distsql/handler/src/main/java/org/apache/shardingsphere/readwritesplitting/distsql/handler/checker/ReadwriteSplittingRuleStatementChecker.java
@@ -86,16 +86,6 @@ public final class ReadwriteSplittingRuleStatementChecker {
         checkLoadBalancers(segments);
     }
     
-    /**
-     * Check current rule configuration exist.
-     *
-     * @param database database
-     * @param currentRuleConfig current rule config
-     */
-    public static void checkRuleConfigurationExist(final 
ShardingSphereDatabase database, final ReadwriteSplittingRuleConfiguration 
currentRuleConfig) {
-        ShardingSpherePreconditions.checkNotNull(currentRuleConfig, () -> new 
MissingRequiredRuleException("Readwrite-splitting", database.getName()));
-    }
-    
     private static void checkRuleNamesExist(final 
Collection<ReadwriteSplittingRuleSegment> segments, final 
ReadwriteSplittingRuleConfiguration currentRuleConfig, final String 
databaseName) {
         Collection<String> requiredRuleNames = 
segments.stream().map(ReadwriteSplittingRuleSegment::getName).collect(Collectors.toList());
         Collection<String> currentRuleNames = 
currentRuleConfig.getDataSources().stream().map(ReadwriteSplittingDataSourceRuleConfiguration::getName).collect(Collectors.toList());
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 3508cf048d8..137f8defbad 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
@@ -61,6 +61,10 @@ public final class DatabaseRuleDefinitionExecuteEngine {
         }
     }
     
+    private Optional<RuleConfiguration> findCurrentRuleConfiguration(final 
ShardingSphereDatabase database, final Class<? extends RuleConfiguration> 
ruleConfigClass) {
+        return 
database.getRuleMetaData().getConfigurations().stream().filter(each -> 
ruleConfigClass.isAssignableFrom(each.getClass())).findFirst();
+    }
+    
     @SuppressWarnings("unchecked")
     private void checkBeforeUpdate(final RuleConfiguration currentRuleConfig) {
         
Optional.ofNullable(executor.getClass().getAnnotation(DistSQLExecutorCurrentRuleRequired.class)).ifPresent(optional
 -> checkCurrentRule(currentRuleConfig, optional));
@@ -74,10 +78,6 @@ public final class DatabaseRuleDefinitionExecuteEngine {
         ShardingSpherePreconditions.checkNotNull(currentRuleConfig, () -> new 
MissingRequiredRuleException(currentRuleRequired.value(), database.getName()));
     }
     
-    private Optional<RuleConfiguration> findCurrentRuleConfiguration(final 
ShardingSphereDatabase database, final Class<? extends RuleConfiguration> 
ruleConfigClass) {
-        return 
database.getRuleMetaData().getConfigurations().stream().filter(each -> 
ruleConfigClass.isAssignableFrom(each.getClass())).findFirst();
-    }
-    
     @SuppressWarnings({"rawtypes", "unchecked"})
     private boolean getRefreshStatus(final RuleConfiguration 
currentRuleConfig) {
         return !(executor instanceof DatabaseRuleDropExecutor) || 
((DatabaseRuleDropExecutor) executor).hasAnyOneToBeDropped(sqlStatement, 
currentRuleConfig);
diff --git 
a/infra/distsql-handler/src/main/java/org/apache/shardingsphere/distsql/handler/type/rdl/rule/engine/global/GlobalRuleDefinitionExecuteEngine.java
 
b/infra/distsql-handler/src/main/java/org/apache/shardingsphere/distsql/handler/type/rdl/rule/engine/global/GlobalRuleDefinitionExecuteEngine.java
index a81ab4b5726..5378332343a 100644
--- 
a/infra/distsql-handler/src/main/java/org/apache/shardingsphere/distsql/handler/type/rdl/rule/engine/global/GlobalRuleDefinitionExecuteEngine.java
+++ 
b/infra/distsql-handler/src/main/java/org/apache/shardingsphere/distsql/handler/type/rdl/rule/engine/global/GlobalRuleDefinitionExecuteEngine.java
@@ -52,7 +52,7 @@ public final class GlobalRuleDefinitionExecuteEngine {
     
     @SuppressWarnings("unchecked")
     private RuleConfiguration processUpdate(final RuleDefinitionStatement 
sqlStatement, final RuleConfiguration currentRuleConfig) {
-        RuleConfiguration result = 
executor.buildAlteredRuleConfiguration(sqlStatement);
+        RuleConfiguration result = 
executor.buildToBeAlteredRuleConfiguration(sqlStatement);
         Collection<RuleConfiguration> ruleConfigs = 
contextManager.getMetaDataContexts().getMetaData().getGlobalRuleMetaData().getConfigurations();
         ruleConfigs.remove(currentRuleConfig);
         ruleConfigs.add(result);
diff --git 
a/infra/distsql-handler/src/main/java/org/apache/shardingsphere/distsql/handler/type/rdl/rule/engine/legacy/LegacyGlobalRuleDefinitionExecuteEngine.java
 
b/infra/distsql-handler/src/main/java/org/apache/shardingsphere/distsql/handler/type/rdl/rule/engine/legacy/LegacyGlobalRuleDefinitionExecuteEngine.java
index fcfac8c3e2b..a33b530d5a4 100644
--- 
a/infra/distsql-handler/src/main/java/org/apache/shardingsphere/distsql/handler/type/rdl/rule/engine/legacy/LegacyGlobalRuleDefinitionExecuteEngine.java
+++ 
b/infra/distsql-handler/src/main/java/org/apache/shardingsphere/distsql/handler/type/rdl/rule/engine/legacy/LegacyGlobalRuleDefinitionExecuteEngine.java
@@ -57,7 +57,7 @@ public final class LegacyGlobalRuleDefinitionExecuteEngine {
         Collection<RuleConfiguration> ruleConfigs = 
contextManager.getMetaDataContexts().getMetaData().getGlobalRuleMetaData().getConfigurations();
         Collection<RuleConfiguration> result = new LinkedList<>(ruleConfigs);
         result.remove(currentRuleConfig);
-        result.add(executor.buildAlteredRuleConfiguration(sqlStatement));
+        result.add(executor.buildToBeAlteredRuleConfiguration(sqlStatement));
         return result;
     }
 }
diff --git 
a/infra/distsql-handler/src/main/java/org/apache/shardingsphere/distsql/handler/type/rdl/rule/spi/global/GlobalRuleDefinitionExecutor.java
 
b/infra/distsql-handler/src/main/java/org/apache/shardingsphere/distsql/handler/type/rdl/rule/spi/global/GlobalRuleDefinitionExecutor.java
index a46b348c652..c1e1965da93 100644
--- 
a/infra/distsql-handler/src/main/java/org/apache/shardingsphere/distsql/handler/type/rdl/rule/spi/global/GlobalRuleDefinitionExecutor.java
+++ 
b/infra/distsql-handler/src/main/java/org/apache/shardingsphere/distsql/handler/type/rdl/rule/spi/global/GlobalRuleDefinitionExecutor.java
@@ -42,12 +42,12 @@ public interface GlobalRuleDefinitionExecutor<T extends 
RuleDefinitionStatement,
     }
     
     /**
-     * Build altered rule configuration.
+     * Build to be altered rule configuration.
      *
      * @param sqlStatement SQL statement
-     * @return built altered rule configuration
+     * @return built to be altered rule configuration
      */
-    RuleConfiguration buildAlteredRuleConfiguration(T sqlStatement);
+    RuleConfiguration buildToBeAlteredRuleConfiguration(T sqlStatement);
     
     @Override
     Class<T> getType();
diff --git 
a/jdbc/core/src/test/java/org/apache/shardingsphere/driver/jdbc/core/driver/spi/classpath/ClasspathWithEnvironmentURLProviderTest.java
 
b/jdbc/core/src/test/java/org/apache/shardingsphere/driver/jdbc/core/driver/spi/classpath/ClasspathWithEnvironmentURLProviderTest.java
index 09fe9e14e2e..ead7526a2b4 100644
--- 
a/jdbc/core/src/test/java/org/apache/shardingsphere/driver/jdbc/core/driver/spi/classpath/ClasspathWithEnvironmentURLProviderTest.java
+++ 
b/jdbc/core/src/test/java/org/apache/shardingsphere/driver/jdbc/core/driver/spi/classpath/ClasspathWithEnvironmentURLProviderTest.java
@@ -35,7 +35,6 @@ public class ClasspathWithEnvironmentURLProviderTest {
         when(spy.getEnvironmentVariables("FIXTURE_USERNAME")).thenReturn("sa");
         byte[] actual = 
spy.getContent("jdbc:shardingsphere:classpath-environment:config/driver/foo-driver-environment-variables-fixture.yaml",
 urlPrefix);
         byte[] actualOrigin = 
ShardingSphereURLManager.getContent("jdbc:shardingsphere:classpath:config/driver/foo-driver-fixture.yaml",
 urlPrefix);
-        assertThat(actual.length, is(999));
         assertThat(actual, is(actualOrigin));
     }
 }
diff --git 
a/kernel/global-clock/distsql/handler/src/main/java/org/apache/shardingsphere/globalclock/distsql/handler/update/AlterGlobalClockRuleExecutor.java
 
b/kernel/global-clock/distsql/handler/src/main/java/org/apache/shardingsphere/globalclock/distsql/handler/update/AlterGlobalClockRuleExecutor.java
index b4b8dd2c02e..4e6ad9b87d4 100644
--- 
a/kernel/global-clock/distsql/handler/src/main/java/org/apache/shardingsphere/globalclock/distsql/handler/update/AlterGlobalClockRuleExecutor.java
+++ 
b/kernel/global-clock/distsql/handler/src/main/java/org/apache/shardingsphere/globalclock/distsql/handler/update/AlterGlobalClockRuleExecutor.java
@@ -28,7 +28,7 @@ import 
org.apache.shardingsphere.globalclock.distsql.statement.updatable.AlterGl
 public final class AlterGlobalClockRuleExecutor implements 
GlobalRuleDefinitionExecutor<AlterGlobalClockRuleStatement, GlobalClockRule> {
     
     @Override
-    public GlobalClockRuleConfiguration buildAlteredRuleConfiguration(final 
AlterGlobalClockRuleStatement sqlStatement) {
+    public GlobalClockRuleConfiguration 
buildToBeAlteredRuleConfiguration(final AlterGlobalClockRuleStatement 
sqlStatement) {
         return new GlobalClockRuleConfiguration(sqlStatement.getType(), 
sqlStatement.getProvider(), sqlStatement.isEnabled(), sqlStatement.getProps());
     }
     
diff --git 
a/kernel/global-clock/distsql/handler/src/test/java/org/apache/shardingsphere/globalclock/distsql/handler/update/AlterGlobalClockRuleExecutorTest.java
 
b/kernel/global-clock/distsql/handler/src/test/java/org/apache/shardingsphere/globalclock/distsql/handler/update/AlterGlobalClockRuleExecutorTest.java
index 2ab25967791..be0c0c2a524 100644
--- 
a/kernel/global-clock/distsql/handler/src/test/java/org/apache/shardingsphere/globalclock/distsql/handler/update/AlterGlobalClockRuleExecutorTest.java
+++ 
b/kernel/global-clock/distsql/handler/src/test/java/org/apache/shardingsphere/globalclock/distsql/handler/update/AlterGlobalClockRuleExecutorTest.java
@@ -40,7 +40,7 @@ class AlterGlobalClockRuleExecutorTest {
         GlobalClockRule rule = mock(GlobalClockRule.class);
         
when(rule.getConfiguration()).thenReturn(getSQLParserRuleConfiguration());
         executor.setRule(rule);
-        GlobalClockRuleConfiguration actual = 
executor.buildAlteredRuleConfiguration(sqlStatement);
+        GlobalClockRuleConfiguration actual = 
executor.buildToBeAlteredRuleConfiguration(sqlStatement);
         assertThat(actual.getType(), is("TSO"));
         assertThat(actual.getProvider(), is("redis"));
         assertTrue(actual.isEnabled());
diff --git 
a/kernel/sql-federation/distsql/handler/src/main/java/org/apache/shardingsphere/sqlfederation/distsql/handler/update/AlterSQLFederationRuleExecutor.java
 
b/kernel/sql-federation/distsql/handler/src/main/java/org/apache/shardingsphere/sqlfederation/distsql/handler/update/AlterSQLFederationRuleExecutor.java
index 6192bbeeefb..9697bc005e8 100644
--- 
a/kernel/sql-federation/distsql/handler/src/main/java/org/apache/shardingsphere/sqlfederation/distsql/handler/update/AlterSQLFederationRuleExecutor.java
+++ 
b/kernel/sql-federation/distsql/handler/src/main/java/org/apache/shardingsphere/sqlfederation/distsql/handler/update/AlterSQLFederationRuleExecutor.java
@@ -34,7 +34,7 @@ public final class AlterSQLFederationRuleExecutor implements 
GlobalRuleDefinitio
     private SQLFederationRule rule;
     
     @Override
-    public SQLFederationRuleConfiguration buildAlteredRuleConfiguration(final 
AlterSQLFederationRuleStatement sqlStatement) {
+    public SQLFederationRuleConfiguration 
buildToBeAlteredRuleConfiguration(final AlterSQLFederationRuleStatement 
sqlStatement) {
         boolean sqlFederationEnabled = null == 
sqlStatement.getSqlFederationEnabled() ? 
rule.getConfiguration().isSqlFederationEnabled() : 
sqlStatement.getSqlFederationEnabled();
         boolean allQueryUseSQLFederation = null == 
sqlStatement.getAllQueryUseSQLFederation() ? 
rule.getConfiguration().isAllQueryUseSQLFederation() : 
sqlStatement.getAllQueryUseSQLFederation();
         CacheOption executionPlanCache = null == 
sqlStatement.getExecutionPlanCache()
diff --git 
a/kernel/sql-federation/distsql/handler/src/test/java/org/apache/shardingsphere/sqlfederation/distsql/handler/update/AlterSQLFederationRuleExecutorTest.java
 
b/kernel/sql-federation/distsql/handler/src/test/java/org/apache/shardingsphere/sqlfederation/distsql/handler/update/AlterSQLFederationRuleExecutorTest.java
index 40debe564df..7f355866727 100644
--- 
a/kernel/sql-federation/distsql/handler/src/test/java/org/apache/shardingsphere/sqlfederation/distsql/handler/update/AlterSQLFederationRuleExecutorTest.java
+++ 
b/kernel/sql-federation/distsql/handler/src/test/java/org/apache/shardingsphere/sqlfederation/distsql/handler/update/AlterSQLFederationRuleExecutorTest.java
@@ -39,7 +39,7 @@ class AlterSQLFederationRuleExecutorTest {
         SQLFederationRule rule = mock(SQLFederationRule.class);
         
when(rule.getConfiguration()).thenReturn(getSQLFederationRuleConfiguration());
         executor.setRule(rule);
-        SQLFederationRuleConfiguration actual = 
executor.buildAlteredRuleConfiguration(sqlStatement);
+        SQLFederationRuleConfiguration actual = 
executor.buildToBeAlteredRuleConfiguration(sqlStatement);
         assertTrue(actual.isSqlFederationEnabled());
         assertTrue(actual.isAllQueryUseSQLFederation());
         assertThat(actual.getExecutionPlanCache().getInitialCapacity(), 
is(64));
diff --git 
a/kernel/sql-parser/distsql/handler/src/main/java/org/apache/shardingsphere/parser/distsql/handler/update/AlterSQLParserRuleExecutor.java
 
b/kernel/sql-parser/distsql/handler/src/main/java/org/apache/shardingsphere/parser/distsql/handler/update/AlterSQLParserRuleExecutor.java
index 0336afac0bd..a84aadfc3af 100644
--- 
a/kernel/sql-parser/distsql/handler/src/main/java/org/apache/shardingsphere/parser/distsql/handler/update/AlterSQLParserRuleExecutor.java
+++ 
b/kernel/sql-parser/distsql/handler/src/main/java/org/apache/shardingsphere/parser/distsql/handler/update/AlterSQLParserRuleExecutor.java
@@ -34,7 +34,7 @@ public final class AlterSQLParserRuleExecutor implements 
GlobalRuleDefinitionExe
     private SQLParserRule rule;
     
     @Override
-    public SQLParserRuleConfiguration buildAlteredRuleConfiguration(final 
AlterSQLParserRuleStatement sqlStatement) {
+    public SQLParserRuleConfiguration buildToBeAlteredRuleConfiguration(final 
AlterSQLParserRuleStatement sqlStatement) {
         CacheOption parseTreeCache = null == sqlStatement.getParseTreeCache()
                 ? rule.getConfiguration().getParseTreeCache()
                 : 
createCacheOption(rule.getConfiguration().getParseTreeCache(), 
sqlStatement.getParseTreeCache());
diff --git 
a/kernel/sql-parser/distsql/handler/src/test/java/org/apache/shardingsphere/parser/distsql/handler/update/AlterSQLParserRuleExecutorTest.java
 
b/kernel/sql-parser/distsql/handler/src/test/java/org/apache/shardingsphere/parser/distsql/handler/update/AlterSQLParserRuleExecutorTest.java
index b4b2ea50849..0e0ac8abcdd 100644
--- 
a/kernel/sql-parser/distsql/handler/src/test/java/org/apache/shardingsphere/parser/distsql/handler/update/AlterSQLParserRuleExecutorTest.java
+++ 
b/kernel/sql-parser/distsql/handler/src/test/java/org/apache/shardingsphere/parser/distsql/handler/update/AlterSQLParserRuleExecutorTest.java
@@ -38,7 +38,7 @@ class AlterSQLParserRuleExecutorTest {
         SQLParserRule rule = mock(SQLParserRule.class);
         
when(rule.getConfiguration()).thenReturn(getSQLParserRuleConfiguration());
         executor.setRule(rule);
-        SQLParserRuleConfiguration actual = 
executor.buildAlteredRuleConfiguration(sqlStatement);
+        SQLParserRuleConfiguration actual = 
executor.buildToBeAlteredRuleConfiguration(sqlStatement);
         assertThat(actual.getSqlStatementCache().getInitialCapacity(), 
is(1000));
         assertThat(actual.getSqlStatementCache().getMaximumSize(), is(1000L));
         assertThat(actual.getParseTreeCache().getInitialCapacity(), is(64));
diff --git 
a/kernel/sql-translator/distsql/handler/src/main/java/org/apache/shardingsphere/sqltranslator/distsql/handler/update/AlterSQLTranslatorRuleExecutor.java
 
b/kernel/sql-translator/distsql/handler/src/main/java/org/apache/shardingsphere/sqltranslator/distsql/handler/update/AlterSQLTranslatorRuleExecutor.java
index 987c0cd1a13..e335f50a006 100644
--- 
a/kernel/sql-translator/distsql/handler/src/main/java/org/apache/shardingsphere/sqltranslator/distsql/handler/update/AlterSQLTranslatorRuleExecutor.java
+++ 
b/kernel/sql-translator/distsql/handler/src/main/java/org/apache/shardingsphere/sqltranslator/distsql/handler/update/AlterSQLTranslatorRuleExecutor.java
@@ -39,7 +39,7 @@ public final class AlterSQLTranslatorRuleExecutor implements 
GlobalRuleDefinitio
     }
     
     @Override
-    public SQLTranslatorRuleConfiguration buildAlteredRuleConfiguration(final 
AlterSQLTranslatorRuleStatement sqlStatement) {
+    public SQLTranslatorRuleConfiguration 
buildToBeAlteredRuleConfiguration(final AlterSQLTranslatorRuleStatement 
sqlStatement) {
         boolean useOriginalSQLWhenTranslatingFailed = null == 
sqlStatement.getUseOriginalSQLWhenTranslatingFailed()
                 ? 
rule.getConfiguration().isUseOriginalSQLWhenTranslatingFailed()
                 : sqlStatement.getUseOriginalSQLWhenTranslatingFailed();
diff --git 
a/kernel/sql-translator/distsql/handler/src/test/java/org/apache/shardingsphere/sqltranslator/distsql/handler/update/AlterSQLTranslatorRuleExecutorTest.java
 
b/kernel/sql-translator/distsql/handler/src/test/java/org/apache/shardingsphere/sqltranslator/distsql/handler/update/AlterSQLTranslatorRuleExecutorTest.java
index 5b31b9857ba..48e84dcd90b 100644
--- 
a/kernel/sql-translator/distsql/handler/src/test/java/org/apache/shardingsphere/sqltranslator/distsql/handler/update/AlterSQLTranslatorRuleExecutorTest.java
+++ 
b/kernel/sql-translator/distsql/handler/src/test/java/org/apache/shardingsphere/sqltranslator/distsql/handler/update/AlterSQLTranslatorRuleExecutorTest.java
@@ -43,7 +43,7 @@ class AlterSQLTranslatorRuleExecutorTest {
         SQLTranslatorRule rule = mock(SQLTranslatorRule.class);
         
when(rule.getConfiguration()).thenReturn(createSQLTranslatorRuleConfiguration());
         executor.setRule(rule);
-        SQLTranslatorRuleConfiguration actual = 
executor.buildAlteredRuleConfiguration(
+        SQLTranslatorRuleConfiguration actual = 
executor.buildToBeAlteredRuleConfiguration(
                 new AlterSQLTranslatorRuleStatement(new 
AlgorithmSegment("JOOQ", PropertiesBuilder.build(new Property("foo", "bar"))), 
null));
         assertThat(actual.getType(), is("JOOQ"));
         assertFalse(actual.getProps().isEmpty());
diff --git 
a/kernel/traffic/distsql/handler/src/main/java/org/apache/shardingsphere/traffic/distsql/handler/update/AlterTrafficRuleExecutor.java
 
b/kernel/traffic/distsql/handler/src/main/java/org/apache/shardingsphere/traffic/distsql/handler/update/AlterTrafficRuleExecutor.java
index f69ea6df1ab..22d16cc4dee 100644
--- 
a/kernel/traffic/distsql/handler/src/main/java/org/apache/shardingsphere/traffic/distsql/handler/update/AlterTrafficRuleExecutor.java
+++ 
b/kernel/traffic/distsql/handler/src/main/java/org/apache/shardingsphere/traffic/distsql/handler/update/AlterTrafficRuleExecutor.java
@@ -72,7 +72,7 @@ public final class AlterTrafficRuleExecutor implements 
GlobalRuleDefinitionExecu
     }
     
     @Override
-    public TrafficRuleConfiguration buildAlteredRuleConfiguration(final 
AlterTrafficRuleStatement sqlStatement) {
+    public TrafficRuleConfiguration buildToBeAlteredRuleConfiguration(final 
AlterTrafficRuleStatement sqlStatement) {
         TrafficRuleConfiguration result = new TrafficRuleConfiguration();
         TrafficRuleConfiguration configFromSQLStatement = 
TrafficRuleConverter.convert(sqlStatement.getSegments());
         
result.getTrafficStrategies().addAll(createToBeAlteredStrategyConfigurations(configFromSQLStatement));
diff --git 
a/kernel/traffic/distsql/handler/src/test/java/org/apache/shardingsphere/traffic/distsql/handler/update/AlterTrafficRuleExecutorTest.java
 
b/kernel/traffic/distsql/handler/src/test/java/org/apache/shardingsphere/traffic/distsql/handler/update/AlterTrafficRuleExecutorTest.java
index 9cfb681890b..4ccd27c60b9 100644
--- 
a/kernel/traffic/distsql/handler/src/test/java/org/apache/shardingsphere/traffic/distsql/handler/update/AlterTrafficRuleExecutorTest.java
+++ 
b/kernel/traffic/distsql/handler/src/test/java/org/apache/shardingsphere/traffic/distsql/handler/update/AlterTrafficRuleExecutorTest.java
@@ -73,7 +73,7 @@ class AlterTrafficRuleExecutorTest {
         TrafficRule rule = mock(TrafficRule.class);
         
when(rule.getConfiguration()).thenReturn(createTrafficRuleConfiguration());
         executor.setRule(rule);
-        TrafficRuleConfiguration actual = 
executor.buildAlteredRuleConfiguration(new 
AlterTrafficRuleStatement(Collections.singleton(trafficRuleSegment)));
+        TrafficRuleConfiguration actual = 
executor.buildToBeAlteredRuleConfiguration(new 
AlterTrafficRuleStatement(Collections.singleton(trafficRuleSegment)));
         assertThat(actual.getTrafficStrategies().size(), is(2));
         assertThat(actual.getTrafficAlgorithms().size(), is(2));
         assertThat(actual.getLoadBalancers().size(), is(1));
@@ -90,7 +90,7 @@ class AlterTrafficRuleExecutorTest {
         
when(rule.getConfiguration()).thenReturn(createTrafficRuleConfiguration());
         executor.setRule(rule);
         TrafficRuleConfiguration actual =
-                executor.buildAlteredRuleConfiguration(new 
AlterTrafficRuleStatement(Arrays.asList(trafficRuleSegment1, 
trafficRuleSegment2)));
+                executor.buildToBeAlteredRuleConfiguration(new 
AlterTrafficRuleStatement(Arrays.asList(trafficRuleSegment1, 
trafficRuleSegment2)));
         assertThat(actual.getTrafficStrategies().size(), is(2));
         assertThat(actual.getTrafficAlgorithms().size(), is(2));
         assertThat(actual.getLoadBalancers().size(), is(2));
diff --git 
a/kernel/transaction/distsql/handler/src/main/java/org/apache/shardingsphere/transaction/distsql/handler/update/AlterTransactionRuleExecutor.java
 
b/kernel/transaction/distsql/handler/src/main/java/org/apache/shardingsphere/transaction/distsql/handler/update/AlterTransactionRuleExecutor.java
index a8dd4530adf..cc37b6678f9 100644
--- 
a/kernel/transaction/distsql/handler/src/main/java/org/apache/shardingsphere/transaction/distsql/handler/update/AlterTransactionRuleExecutor.java
+++ 
b/kernel/transaction/distsql/handler/src/main/java/org/apache/shardingsphere/transaction/distsql/handler/update/AlterTransactionRuleExecutor.java
@@ -70,7 +70,7 @@ public final class AlterTransactionRuleExecutor implements 
GlobalRuleDefinitionE
     }
     
     @Override
-    public TransactionRuleConfiguration buildAlteredRuleConfiguration(final 
AlterTransactionRuleStatement sqlStatement) {
+    public TransactionRuleConfiguration 
buildToBeAlteredRuleConfiguration(final AlterTransactionRuleStatement 
sqlStatement) {
         return new TransactionRuleConfiguration(sqlStatement.getDefaultType(), 
sqlStatement.getProvider().getProviderType(), 
sqlStatement.getProvider().getProps());
     }
     
diff --git 
a/kernel/transaction/distsql/handler/src/test/java/org/apache/shardingsphere/transaction/distsql/handler/update/AlterTransactionRuleExecutorTest.java
 
b/kernel/transaction/distsql/handler/src/test/java/org/apache/shardingsphere/transaction/distsql/handler/update/AlterTransactionRuleExecutorTest.java
index d3e5b92179e..7bfe2ab646b 100644
--- 
a/kernel/transaction/distsql/handler/src/test/java/org/apache/shardingsphere/transaction/distsql/handler/update/AlterTransactionRuleExecutorTest.java
+++ 
b/kernel/transaction/distsql/handler/src/test/java/org/apache/shardingsphere/transaction/distsql/handler/update/AlterTransactionRuleExecutorTest.java
@@ -54,7 +54,7 @@ class AlterTransactionRuleExecutorTest {
                 "XA", new TransactionProviderSegment("Atomikos", 
PropertiesBuilder.build(new Property("host", "127.0.0.1"), new 
Property("databaseName", "jbossts"))));
         TransactionRule rule = mock(TransactionRule.class);
         executor.setRule(rule);
-        TransactionRuleConfiguration actual = 
executor.buildAlteredRuleConfiguration(sqlStatement);
+        TransactionRuleConfiguration actual = 
executor.buildToBeAlteredRuleConfiguration(sqlStatement);
         assertThat(actual.getDefaultType(), is("XA"));
         assertThat(actual.getProviderType(), is("Atomikos"));
         assertFalse(actual.getProps().isEmpty());
@@ -68,7 +68,7 @@ class AlterTransactionRuleExecutorTest {
         AlterTransactionRuleExecutor executor = new 
AlterTransactionRuleExecutor();
         TransactionRule rule = mock(TransactionRule.class);
         executor.setRule(rule);
-        TransactionRuleConfiguration actual = 
executor.buildAlteredRuleConfiguration(new 
AlterTransactionRuleStatement("LOCAL", new TransactionProviderSegment("", new 
Properties())));
+        TransactionRuleConfiguration actual = 
executor.buildToBeAlteredRuleConfiguration(new 
AlterTransactionRuleStatement("LOCAL", new TransactionProviderSegment("", new 
Properties())));
         assertThat(actual.getDefaultType(), is("LOCAL"));
         assertThat(actual.getProviderType(), is(""));
     }
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 27bc35cf7e1..6f8d692e43b 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
@@ -18,13 +18,17 @@
 package org.apache.shardingsphere.proxy.backend.handler.distsql.legacy;
 
 import lombok.RequiredArgsConstructor;
+import 
org.apache.shardingsphere.distsql.handler.exception.rule.MissingRequiredRuleException;
+import 
org.apache.shardingsphere.distsql.handler.required.DistSQLExecutorCurrentRuleRequired;
 import 
org.apache.shardingsphere.distsql.handler.type.rdl.rule.spi.database.DatabaseRuleAlterExecutor;
 import 
org.apache.shardingsphere.distsql.handler.type.rdl.rule.spi.database.DatabaseRuleCreateExecutor;
 import 
org.apache.shardingsphere.distsql.handler.type.rdl.rule.spi.database.DatabaseRuleDefinitionExecutor;
 import 
org.apache.shardingsphere.distsql.handler.type.rdl.rule.spi.database.DatabaseRuleDropExecutor;
 import 
org.apache.shardingsphere.distsql.statement.rdl.rule.RuleDefinitionStatement;
+import 
org.apache.shardingsphere.distsql.statement.rdl.rule.type.DropRuleStatement;
 import org.apache.shardingsphere.infra.config.rule.RuleConfiguration;
 import 
org.apache.shardingsphere.infra.config.rule.decorator.RuleConfigurationDecorator;
+import 
org.apache.shardingsphere.infra.exception.core.ShardingSpherePreconditions;
 import 
org.apache.shardingsphere.infra.exception.core.external.sql.type.generic.UnsupportedSQLOperationException;
 import 
org.apache.shardingsphere.infra.metadata.database.ShardingSphereDatabase;
 import org.apache.shardingsphere.infra.spi.type.typed.TypedSPILoader;
@@ -62,7 +66,7 @@ public final class LegacyDatabaseRuleDefinitionExecuteEngine {
         Class<? extends RuleConfiguration> ruleConfigClass = 
executor.getRuleConfigurationClass();
         RuleConfiguration currentRuleConfig = 
findCurrentRuleConfiguration(database, ruleConfigClass).orElse(null);
         executor.setDatabase(database);
-        executor.checkBeforeUpdate(sqlStatement, currentRuleConfig);
+        checkBeforeUpdate(currentRuleConfig);
         if (getRefreshStatus(sqlStatement, currentRuleConfig, executor)) {
             contextManager.getInstanceContext().getModeContextManager()
                     .alterRuleConfiguration(database.getName(), 
processSQLStatement(database, sqlStatement, executor, currentRuleConfig));
@@ -73,6 +77,19 @@ public final class LegacyDatabaseRuleDefinitionExecuteEngine 
{
         return 
database.getRuleMetaData().getConfigurations().stream().filter(each -> 
ruleConfigClass.isAssignableFrom(each.getClass())).findFirst();
     }
     
+    @SuppressWarnings("unchecked")
+    private void checkBeforeUpdate(final RuleConfiguration currentRuleConfig) {
+        
Optional.ofNullable(executor.getClass().getAnnotation(DistSQLExecutorCurrentRuleRequired.class)).ifPresent(optional
 -> checkCurrentRule(currentRuleConfig, optional));
+        executor.checkBeforeUpdate(sqlStatement, currentRuleConfig);
+    }
+    
+    private void checkCurrentRule(final RuleConfiguration currentRuleConfig, 
final DistSQLExecutorCurrentRuleRequired currentRuleRequired) {
+        if (sqlStatement instanceof DropRuleStatement && ((DropRuleStatement) 
sqlStatement).isIfExists()) {
+            return;
+        }
+        ShardingSpherePreconditions.checkNotNull(currentRuleConfig, () -> new 
MissingRequiredRuleException(currentRuleRequired.value(), database.getName()));
+    }
+    
     @SuppressWarnings({"unchecked", "rawtypes"})
     private boolean getRefreshStatus(final SQLStatement sqlStatement, final 
RuleConfiguration currentRuleConfig, final DatabaseRuleDefinitionExecutor<?, ?> 
executor) {
         return !(executor instanceof DatabaseRuleDropExecutor) || 
((DatabaseRuleDropExecutor) executor).hasAnyOneToBeDropped(sqlStatement, 
currentRuleConfig);

Reply via email to