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

jianglongtao 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 ad9534e6eb5 Refactor ShardingTableRuleStatementChecker (#22301)
ad9534e6eb5 is described below

commit ad9534e6eb540614a9ba720386bfdbd33c2e839a
Author: Liang Zhang <[email protected]>
AuthorDate: Mon Nov 21 01:07:14 2022 +0800

    Refactor ShardingTableRuleStatementChecker (#22301)
    
    * Refactor ShardingTableRuleStatementChecker
    
    * Refactor ShardingTableRuleStatementChecker
---
 .../handler/checker/ShardingTableRuleStatementChecker.java  |  8 ++++----
 .../AlterShardingTableReferenceRuleStatementUpdater.java    | 10 +++++++++-
 .../CreateShardingTableReferenceRuleStatementUpdater.java   | 13 ++++++++++---
 3 files changed, 23 insertions(+), 8 deletions(-)

diff --git 
a/features/sharding/distsql/handler/src/main/java/org/apache/shardingsphere/sharding/distsql/handler/checker/ShardingTableRuleStatementChecker.java
 
b/features/sharding/distsql/handler/src/main/java/org/apache/shardingsphere/sharding/distsql/handler/checker/ShardingTableRuleStatementChecker.java
index c94f953b3c9..daa402d960f 100644
--- 
a/features/sharding/distsql/handler/src/main/java/org/apache/shardingsphere/sharding/distsql/handler/checker/ShardingTableRuleStatementChecker.java
+++ 
b/features/sharding/distsql/handler/src/main/java/org/apache/shardingsphere/sharding/distsql/handler/checker/ShardingTableRuleStatementChecker.java
@@ -107,18 +107,18 @@ public final class ShardingTableRuleStatementChecker {
     }
     
     /**
-     * Check binding table configuration.
+     * Judge whether binding table groups are valid.
      *
      * @param bindingTableGroups binding table groups
      * @param currentRuleConfig current rule configuration
+     * @return binding table groups are valid or not
      */
-    public static void checkBindingTableConfiguration(final Collection<String> 
bindingTableGroups, final ShardingRuleConfiguration currentRuleConfig) {
+    public static boolean isValidBindingTableGroups(final Collection<String> 
bindingTableGroups, final ShardingRuleConfiguration currentRuleConfig) {
         ShardingRuleConfiguration toBeCheckedRuleConfig = 
createToBeCheckedShardingRuleConfiguration(currentRuleConfig);
         toBeCheckedRuleConfig.setBindingTableGroups(bindingTableGroups);
         Collection<String> dataSourceNames = 
getRequiredResource(toBeCheckedRuleConfig);
         dataSourceNames.addAll(getRequiredResource(currentRuleConfig));
-        ShardingSpherePreconditions.checkState(check(toBeCheckedRuleConfig, 
dataSourceNames),
-                () -> new InvalidRuleConfigurationException("sharding table", 
bindingTableGroups, Collections.singleton("invalid binding table 
configuration.")));
+        return check(toBeCheckedRuleConfig, dataSourceNames);
     }
     
     private static void check(final ShardingSphereDatabase database, final 
Collection<AbstractTableRuleSegment> rules, final ShardingRuleConfiguration 
currentRuleConfig, final boolean isCreated) {
diff --git 
a/features/sharding/distsql/handler/src/main/java/org/apache/shardingsphere/sharding/distsql/handler/update/AlterShardingTableReferenceRuleStatementUpdater.java
 
b/features/sharding/distsql/handler/src/main/java/org/apache/shardingsphere/sharding/distsql/handler/update/AlterShardingTableReferenceRuleStatementUpdater.java
index c491a152230..f8813e71ef6 100644
--- 
a/features/sharding/distsql/handler/src/main/java/org/apache/shardingsphere/sharding/distsql/handler/update/AlterShardingTableReferenceRuleStatementUpdater.java
+++ 
b/features/sharding/distsql/handler/src/main/java/org/apache/shardingsphere/sharding/distsql/handler/update/AlterShardingTableReferenceRuleStatementUpdater.java
@@ -19,6 +19,7 @@ package 
org.apache.shardingsphere.sharding.distsql.handler.update;
 
 import org.apache.shardingsphere.infra.config.rule.RuleConfiguration;
 import 
org.apache.shardingsphere.infra.distsql.exception.rule.DuplicateRuleException;
+import 
org.apache.shardingsphere.infra.distsql.exception.rule.InvalidRuleConfigurationException;
 import 
org.apache.shardingsphere.infra.distsql.exception.rule.MissingRequiredRuleException;
 import 
org.apache.shardingsphere.infra.distsql.exception.rule.RuleDefinitionViolationException;
 import 
org.apache.shardingsphere.infra.distsql.update.RuleDefinitionAlterUpdater;
@@ -32,6 +33,7 @@ import 
org.apache.shardingsphere.sharding.distsql.parser.segment.table.TableRefe
 import 
org.apache.shardingsphere.sharding.distsql.parser.statement.AlterShardingTableReferenceRuleStatement;
 
 import java.util.Collection;
+import java.util.Collections;
 import java.util.HashSet;
 import java.util.stream.Collectors;
 
@@ -47,7 +49,7 @@ public final class 
AlterShardingTableReferenceRuleStatementUpdater implements Ru
         checkCurrentRuleConfiguration(databaseName, currentRuleConfig);
         checkToBeAlertedBindingTables(databaseName, sqlStatement, 
currentRuleConfig);
         checkToBeAlteredDuplicateBindingTables(databaseName, sqlStatement);
-        
ShardingTableRuleStatementChecker.checkBindingTableConfiguration(((ShardingRuleConfiguration)
 buildToBeAlteredRuleConfiguration(sqlStatement)).getBindingTableGroups(), 
currentRuleConfig);
+        checkBindingTableGroups(sqlStatement, currentRuleConfig);
     }
     
     private void checkCurrentRuleConfiguration(final String databaseName, 
final ShardingRuleConfiguration currentRuleConfig) throws 
MissingRequiredRuleException {
@@ -80,6 +82,12 @@ public final class 
AlterShardingTableReferenceRuleStatementUpdater implements Ru
         return collection.stream().anyMatch(each -> 
each.equalsIgnoreCase(str));
     }
     
+    private void checkBindingTableGroups(final 
AlterShardingTableReferenceRuleStatement sqlStatement, final 
ShardingRuleConfiguration currentRuleConfig) {
+        Collection<String> bindingTableGroups = ((ShardingRuleConfiguration) 
buildToBeAlteredRuleConfiguration(sqlStatement)).getBindingTableGroups();
+        
ShardingSpherePreconditions.checkState(ShardingTableRuleStatementChecker.isValidBindingTableGroups(bindingTableGroups,
 currentRuleConfig),
+                () -> new InvalidRuleConfigurationException("sharding table", 
bindingTableGroups, Collections.singleton("invalid binding table 
configuration.")));
+    }
+    
     @Override
     public RuleConfiguration buildToBeAlteredRuleConfiguration(final 
AlterShardingTableReferenceRuleStatement sqlStatement) {
         ShardingRuleConfiguration result = new ShardingRuleConfiguration();
diff --git 
a/features/sharding/distsql/handler/src/main/java/org/apache/shardingsphere/sharding/distsql/handler/update/CreateShardingTableReferenceRuleStatementUpdater.java
 
b/features/sharding/distsql/handler/src/main/java/org/apache/shardingsphere/sharding/distsql/handler/update/CreateShardingTableReferenceRuleStatementUpdater.java
index db1dbdfe373..7f5c7cac096 100644
--- 
a/features/sharding/distsql/handler/src/main/java/org/apache/shardingsphere/sharding/distsql/handler/update/CreateShardingTableReferenceRuleStatementUpdater.java
+++ 
b/features/sharding/distsql/handler/src/main/java/org/apache/shardingsphere/sharding/distsql/handler/update/CreateShardingTableReferenceRuleStatementUpdater.java
@@ -18,6 +18,7 @@
 package org.apache.shardingsphere.sharding.distsql.handler.update;
 
 import 
org.apache.shardingsphere.infra.distsql.exception.rule.DuplicateRuleException;
+import 
org.apache.shardingsphere.infra.distsql.exception.rule.InvalidRuleConfigurationException;
 import 
org.apache.shardingsphere.infra.distsql.exception.rule.MissingRequiredRuleException;
 import 
org.apache.shardingsphere.infra.distsql.update.RuleDefinitionCreateUpdater;
 import 
org.apache.shardingsphere.infra.metadata.database.ShardingSphereDatabase;
@@ -31,6 +32,7 @@ import 
org.apache.shardingsphere.sharding.distsql.parser.statement.CreateShardin
 
 import java.util.Arrays;
 import java.util.Collection;
+import java.util.Collections;
 import java.util.HashSet;
 import java.util.stream.Collectors;
 
@@ -40,13 +42,12 @@ import java.util.stream.Collectors;
 public final class CreateShardingTableReferenceRuleStatementUpdater implements 
RuleDefinitionCreateUpdater<CreateShardingTableReferenceRuleStatement, 
ShardingRuleConfiguration> {
     
     @Override
-    public void checkSQLStatement(final ShardingSphereDatabase database,
-                                  final 
CreateShardingTableReferenceRuleStatement sqlStatement, final 
ShardingRuleConfiguration currentRuleConfig) {
+    public void checkSQLStatement(final ShardingSphereDatabase database, final 
CreateShardingTableReferenceRuleStatement sqlStatement, final 
ShardingRuleConfiguration currentRuleConfig) {
         String databaseName = database.getName();
         checkCurrentRuleConfiguration(databaseName, currentRuleConfig);
         checkToBeCreatedBindingTables(databaseName, sqlStatement, 
currentRuleConfig);
         checkToBeCreatedDuplicateBindingTables(databaseName, sqlStatement, 
currentRuleConfig);
-        
ShardingTableRuleStatementChecker.checkBindingTableConfiguration(buildToBeCreatedRuleConfiguration(sqlStatement).getBindingTableGroups(),
 currentRuleConfig);
+        checkBindingTableGroups(sqlStatement, currentRuleConfig);
     }
     
     private void checkCurrentRuleConfiguration(final String databaseName, 
final ShardingRuleConfiguration currentRuleConfig) throws 
MissingRequiredRuleException {
@@ -85,6 +86,12 @@ public final class 
CreateShardingTableReferenceRuleStatementUpdater implements R
         return currentRuleConfig.getBindingTableGroups().stream().flatMap(each 
-> 
Arrays.stream(each.split(","))).map(String::trim).collect(Collectors.toList());
     }
     
+    private void checkBindingTableGroups(final 
CreateShardingTableReferenceRuleStatement sqlStatement, final 
ShardingRuleConfiguration currentRuleConfig) {
+        Collection<String> bindingTableGroups = 
buildToBeCreatedRuleConfiguration(sqlStatement).getBindingTableGroups();
+        
ShardingSpherePreconditions.checkState(ShardingTableRuleStatementChecker.isValidBindingTableGroups(bindingTableGroups,
 currentRuleConfig),
+                () -> new InvalidRuleConfigurationException("sharding table", 
bindingTableGroups, Collections.singleton("invalid binding table 
configuration.")));
+    }
+    
     @Override
     public ShardingRuleConfiguration buildToBeCreatedRuleConfiguration(final 
CreateShardingTableReferenceRuleStatement sqlStatement) {
         ShardingRuleConfiguration result = new ShardingRuleConfiguration();

Reply via email to