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();