This is an automated email from the ASF dual-hosted git repository.
panjuan 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 b352e2a1e6c Refactor ShardingTableRuleStatementChecker (#22297)
b352e2a1e6c is described below
commit b352e2a1e6c0c63bbbdd014fbd9714a0f34cd068
Author: Liang Zhang <[email protected]>
AuthorDate: Sun Nov 20 21:44:34 2022 +0800
Refactor ShardingTableRuleStatementChecker (#22297)
---
.../checker/ShardingTableRuleStatementChecker.java | 36 ++++++++--------------
.../parser/segment/AutoTableRuleSegment.java | 9 +++---
.../distsql/parser/segment/TableRuleSegment.java | 3 +-
3 files changed, 18 insertions(+), 30 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 fb38b0ed693..b55b0fd0e6f 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
@@ -91,8 +91,7 @@ public final class ShardingTableRuleStatementChecker {
* @param rules rules
* @param currentRuleConfig current rule configuration
*/
- public static void checkCreation(final ShardingSphereDatabase database,
- final
Collection<AbstractTableRuleSegment> rules, final ShardingRuleConfiguration
currentRuleConfig) {
+ public static void checkCreation(final ShardingSphereDatabase database,
final Collection<AbstractTableRuleSegment> rules, final
ShardingRuleConfiguration currentRuleConfig) {
check(database, rules, currentRuleConfig, true);
}
@@ -119,20 +118,19 @@ public final class ShardingTableRuleStatementChecker {
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")));
+ () -> new InvalidRuleConfigurationException("sharding table",
bindingTableGroups, Collections.singleton("invalid binding table
configuration.")));
}
- private static void check(final ShardingSphereDatabase database,
- final Collection<AbstractTableRuleSegment>
rules, final ShardingRuleConfiguration currentRuleConfig, final boolean
isCreate) {
+ private static void check(final ShardingSphereDatabase database, final
Collection<AbstractTableRuleSegment> rules, final ShardingRuleConfiguration
currentRuleConfig, final boolean isCreated) {
String databaseName = database.getName();
- checkTables(databaseName, rules, currentRuleConfig, isCreate);
+ checkTables(databaseName, rules, currentRuleConfig, isCreated);
checkResources(databaseName, rules, database);
checkKeyGenerators(rules, currentRuleConfig);
checkAuditors(rules, currentRuleConfig);
Map<String, List<AbstractTableRuleSegment>> groupedTableRule =
groupingByClassType(rules);
checkAutoTableRule(groupedTableRule.getOrDefault(AutoTableRuleSegment.class.getSimpleName(),
Collections.emptyList()));
checkTableRule(databaseName,
groupedTableRule.getOrDefault(TableRuleSegment.class.getSimpleName(),
Collections.emptyList()));
- if (!isCreate) {
+ if (!isCreated) {
checkBindingTableRules(rules, currentRuleConfig);
}
}
@@ -195,18 +193,12 @@ public final class ShardingTableRuleStatementChecker {
}
Collection<String> result = new LinkedHashSet<>();
tableRuleConfigs.forEach(each ->
result.addAll(getDataSourceNames(each)));
- autoTableRuleConfigs.forEach(each ->
result.addAll(getDataSourceNames(each)));
+ autoTableRuleConfigs.forEach(each -> result.addAll(new
InlineExpressionParser(each.getActualDataSources()).splitAndEvaluate()));
return result;
}
- private static Collection<String> getDataSourceNames(final
ShardingAutoTableRuleConfiguration shardingAutoTableRuleConfig) {
- Collection<String> actualDataSources = new
InlineExpressionParser(shardingAutoTableRuleConfig.getActualDataSources()).splitAndEvaluate();
- return new HashSet<>(actualDataSources);
- }
-
private static Collection<String> getDataSourceNames(final
ShardingTableRuleConfiguration shardingTableRuleConfig) {
- Collection<String> actualDataNodes = new
InlineExpressionParser(shardingTableRuleConfig.getActualDataNodes()).splitAndEvaluate();
- return actualDataNodes.stream().map(each -> new
DataNode(each).getDataSourceName()).collect(Collectors.toList());
+ return new
InlineExpressionParser(shardingTableRuleConfig.getActualDataNodes()).splitAndEvaluate().stream().map(each
-> new DataNode(each).getDataSourceName()).collect(Collectors.toList());
}
private static boolean isValidDataNode(final String dataNodeStr) {
@@ -265,18 +257,17 @@ public final class ShardingTableRuleStatementChecker {
}
private static void checkAuditors(final
Collection<AbstractTableRuleSegment> rules, final ShardingRuleConfiguration
currentRuleConfig) {
- Set<String> notExistAuditors = new LinkedHashSet<>();
- Set<String> requiredAuditors = new LinkedHashSet<>();
Collection<AuditStrategySegment> auditStrategySegments =
rules.stream().map(AbstractTableRuleSegment::getAuditStrategySegment).filter(Objects::nonNull).collect(Collectors.toList());
Collection<String> auditorNames = new LinkedList<>();
for (AuditStrategySegment each : auditStrategySegments) {
auditorNames.addAll(each.getAuditorNames());
}
- auditorNames.stream().filter(each -> null == currentRuleConfig ||
!currentRuleConfig.getAuditors().containsKey(each)).collect(Collectors.toList()).forEach(notExistAuditors::add);
+ Collection<String> notExistAuditors =
auditorNames.stream().filter(each -> null == currentRuleConfig ||
!currentRuleConfig.getAuditors().containsKey(each)).collect(Collectors.toSet());
ShardingSpherePreconditions.checkState(notExistAuditors.isEmpty(), ()
-> new MissingRequiredAlgorithmException("auditor", notExistAuditors));
+ Set<String> requiredAuditors = new LinkedHashSet<>();
for (AuditStrategySegment each : auditStrategySegments) {
-
requiredAuditors.addAll(each.getShardingAuditorSegments().stream().map(ShardingAuditorSegment::getAlgorithmSegment).collect(Collectors.toList())
-
.stream().map(AlgorithmSegment::getName).collect(Collectors.toList()));
+ requiredAuditors.addAll(each.getShardingAuditorSegments().stream()
+
.map(ShardingAuditorSegment::getAlgorithmSegment).collect(Collectors.toList()).stream().map(AlgorithmSegment::getName).collect(Collectors.toList()));
}
Collection<String> invalidAuditors =
requiredAuditors.stream().distinct().filter(each ->
!ShardingAuditAlgorithmFactory.contains(each)).collect(Collectors.toList());
ShardingSpherePreconditions.checkState(invalidAuditors.isEmpty(), ()
-> new InvalidAlgorithmConfigurationException("auditor", invalidAuditors));
@@ -291,8 +282,7 @@ public final class ShardingTableRuleStatementChecker {
}
private static void checkAutoTableShardingAlgorithms(final
Collection<AutoTableRuleSegment> rules) {
- Collection<AutoTableRuleSegment> incompleteShardingRules =
rules.stream().filter(each ->
!each.isCompleteShardingAlgorithm()).collect(Collectors.toList());
-
ShardingSpherePreconditions.checkState(incompleteShardingRules.isEmpty(), () ->
new InvalidAlgorithmConfigurationException("sharding"));
+
ShardingSpherePreconditions.checkState(rules.stream().allMatch(AutoTableRuleSegment::isShardingAlgorithmCompleted),
() -> new InvalidAlgorithmConfigurationException("sharding"));
Collection<String> invalidShardingAlgorithms = rules.stream().map(each
-> each.getShardingAlgorithmSegment().getName()).distinct()
.filter(each ->
!ShardingAlgorithmFactory.contains(each)).collect(Collectors.toList());
ShardingSpherePreconditions.checkState(invalidShardingAlgorithms.isEmpty(), ()
-> new InvalidAlgorithmConfigurationException("sharding",
invalidShardingAlgorithms));
@@ -352,7 +342,7 @@ public final class ShardingTableRuleStatementChecker {
Collection<String> dataSourceNames =
getRequiredResource(toBeCheckedRuleConfig);
dataSourceNames.addAll(getRequiredResource(toBeAlteredRuleConfig));
ShardingSpherePreconditions.checkState(check(toBeCheckedRuleConfig,
dataSourceNames),
- () -> new InvalidRuleConfigurationException("sharding table",
toBeAlteredLogicTableNames, Collections.singleton("invalid binding table
configuration")));
+ () -> new InvalidRuleConfigurationException("sharding table",
toBeAlteredLogicTableNames, Collections.singleton("invalid binding table
configuration.")));
}
private static ShardingRuleConfiguration
createToBeCheckedShardingRuleConfiguration(final ShardingRuleConfiguration
currentRuleConfig) {
diff --git
a/features/sharding/distsql/statement/src/main/java/org/apache/shardingsphere/sharding/distsql/parser/segment/AutoTableRuleSegment.java
b/features/sharding/distsql/statement/src/main/java/org/apache/shardingsphere/sharding/distsql/parser/segment/AutoTableRuleSegment.java
index 88228ee2c6e..b46fa1c91c1 100644
---
a/features/sharding/distsql/statement/src/main/java/org/apache/shardingsphere/sharding/distsql/parser/segment/AutoTableRuleSegment.java
+++
b/features/sharding/distsql/statement/src/main/java/org/apache/shardingsphere/sharding/distsql/parser/segment/AutoTableRuleSegment.java
@@ -27,12 +27,11 @@ import java.util.Collection;
* Auto table rule segment.
*/
@Getter
+@Setter
public final class AutoTableRuleSegment extends AbstractTableRuleSegment {
- @Setter
private String shardingColumn;
- @Setter
private AlgorithmSegment shardingAlgorithmSegment;
public AutoTableRuleSegment(final String logicTable, final
Collection<String> dataSources) {
@@ -48,11 +47,11 @@ public final class AutoTableRuleSegment extends
AbstractTableRuleSegment {
}
/**
- * Determine whether there is a complete sharding algorithm.
+ * Determine whether sharding algorithm completed.
*
- * @return has datasource or not
+ * @return completed sharding algorithm or not
*/
- public boolean isCompleteShardingAlgorithm() {
+ public boolean isShardingAlgorithmCompleted() {
return null != shardingColumn && null != shardingAlgorithmSegment;
}
}
diff --git
a/features/sharding/distsql/statement/src/main/java/org/apache/shardingsphere/sharding/distsql/parser/segment/TableRuleSegment.java
b/features/sharding/distsql/statement/src/main/java/org/apache/shardingsphere/sharding/distsql/parser/segment/TableRuleSegment.java
index 877fa621ce5..6f22a3897e0 100644
---
a/features/sharding/distsql/statement/src/main/java/org/apache/shardingsphere/sharding/distsql/parser/segment/TableRuleSegment.java
+++
b/features/sharding/distsql/statement/src/main/java/org/apache/shardingsphere/sharding/distsql/parser/segment/TableRuleSegment.java
@@ -26,12 +26,11 @@ import java.util.Collection;
* Table rule segment.
*/
@Getter
+@Setter
public final class TableRuleSegment extends AbstractTableRuleSegment {
- @Setter
private ShardingStrategySegment tableStrategySegment;
- @Setter
private ShardingStrategySegment databaseStrategySegment;
public TableRuleSegment(final String logicTable, final Collection<String>
dataSourcesNote) {