You are viewing a plain text version of this content. The canonical link for it is here.
Posted to notifications@shardingsphere.apache.org by ji...@apache.org on 2022/11/20 17:07:21 UTC
[shardingsphere] branch master updated: Refactor ShardingTableRuleStatementChecker (#22301)
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 <zh...@apache.org>
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();