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 8c871aae21a Refactor ShadowTableRule (#23913)
8c871aae21a is described below
commit 8c871aae21a8c41504d8a7d34e1411fadb4005b9
Author: Liang Zhang <[email protected]>
AuthorDate: Thu Feb 2 00:54:33 2023 +0800
Refactor ShadowTableRule (#23913)
---
.../shadow/rule/ShadowTableRule.java | 27 +++++++++-------------
1 file changed, 11 insertions(+), 16 deletions(-)
diff --git
a/features/shadow/core/src/main/java/org/apache/shardingsphere/shadow/rule/ShadowTableRule.java
b/features/shadow/core/src/main/java/org/apache/shardingsphere/shadow/rule/ShadowTableRule.java
index ce59b1bfcfa..c84f78996a3 100644
---
a/features/shadow/core/src/main/java/org/apache/shardingsphere/shadow/rule/ShadowTableRule.java
+++
b/features/shadow/core/src/main/java/org/apache/shardingsphere/shadow/rule/ShadowTableRule.java
@@ -18,16 +18,14 @@
package org.apache.shardingsphere.shadow.rule;
import lombok.Getter;
-import
org.apache.shardingsphere.infra.util.exception.ShardingSpherePreconditions;
import org.apache.shardingsphere.shadow.api.shadow.ShadowOperationType;
import
org.apache.shardingsphere.shadow.api.shadow.column.ColumnShadowAlgorithm;
import org.apache.shardingsphere.shadow.api.shadow.hint.HintShadowAlgorithm;
-import
org.apache.shardingsphere.shadow.exception.metadata.InvalidShadowAlgorithmOperationException;
import org.apache.shardingsphere.shadow.spi.ShadowAlgorithm;
import java.util.Collection;
-import java.util.Collections;
import java.util.EnumMap;
+import java.util.LinkedList;
import java.util.Map;
import java.util.stream.Collectors;
@@ -48,30 +46,27 @@ public final class ShadowTableRule {
public ShadowTableRule(final String tableName, final Collection<String>
shadowDataSources, final Collection<String> shadowAlgorithmNames, final
Map<String, ShadowAlgorithm> shadowAlgorithms) {
this.tableName = tableName;
this.shadowDataSources = shadowDataSources;
- this.hintShadowAlgorithmNames =
initHintShadowAlgorithmNames(shadowAlgorithmNames, shadowAlgorithms);
- this.columnShadowAlgorithmNames =
initColumnShadowAlgorithmNames(shadowAlgorithmNames, shadowAlgorithms);
+ this.hintShadowAlgorithmNames =
getHintShadowAlgorithmNames(shadowAlgorithmNames, shadowAlgorithms);
+ this.columnShadowAlgorithmNames =
getColumnShadowAlgorithmRules(shadowAlgorithmNames, shadowAlgorithms);
}
- private Collection<String> initHintShadowAlgorithmNames(final
Collection<String> shadowAlgorithmNames, final Map<String, ShadowAlgorithm>
shadowAlgorithms) {
+ private Collection<String> getHintShadowAlgorithmNames(final
Collection<String> shadowAlgorithmNames, final Map<String, ShadowAlgorithm>
shadowAlgorithms) {
return shadowAlgorithmNames.stream().filter(each ->
shadowAlgorithms.get(each) instanceof
HintShadowAlgorithm).collect(Collectors.toList());
}
- private Map<ShadowOperationType, Collection<ShadowAlgorithmNameRule>>
initColumnShadowAlgorithmNames(final Collection<String> shadowAlgorithmNames,
-
final Map<String, ShadowAlgorithm> shadowAlgorithms) {
+ private Map<ShadowOperationType, Collection<ShadowAlgorithmNameRule>>
getColumnShadowAlgorithmRules(final Collection<String> shadowAlgorithmNames,
+
final Map<String, ShadowAlgorithm> shadowAlgorithms) {
Map<ShadowOperationType, Collection<ShadowAlgorithmNameRule>> result =
new EnumMap<>(ShadowOperationType.class);
for (String each : shadowAlgorithmNames) {
ShadowAlgorithm shadowAlgorithm = shadowAlgorithms.get(each);
if (shadowAlgorithm instanceof ColumnShadowAlgorithm) {
- initShadowAlgorithmNames(each, (ColumnShadowAlgorithm<?>)
shadowAlgorithm, result);
+ ShadowOperationType operationType =
((ColumnShadowAlgorithm<?>) shadowAlgorithm).getShadowOperationType();
+ if (!result.containsKey(operationType)) {
+ result.put(operationType, new LinkedList<>());
+ }
+ result.get(operationType).add(new
ShadowAlgorithmNameRule(((ColumnShadowAlgorithm<?>)
shadowAlgorithm).getShadowColumn(), each));
}
}
return result;
}
-
- private void initShadowAlgorithmNames(final String name, final
ColumnShadowAlgorithm<?> algorithm,
- final Map<ShadowOperationType,
Collection<ShadowAlgorithmNameRule>> columnShadowAlgorithmNames) {
- ShadowOperationType operationType = algorithm.getShadowOperationType();
-
ShardingSpherePreconditions.checkState(!columnShadowAlgorithmNames.containsKey(operationType),
() -> new InvalidShadowAlgorithmOperationException(operationType.name(),
tableName));
- columnShadowAlgorithmNames.put(operationType,
Collections.singleton(new ShadowAlgorithmNameRule(algorithm.getShadowColumn(),
name)));
- }
}