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/05/12 16:05:05 UTC
[shardingsphere] branch master updated: Adjust sharding rules to make table names insensitive. (#17610)
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 5839a53f73e Adjust sharding rules to make table names insensitive. (#17610)
5839a53f73e is described below
commit 5839a53f73e677e97ef169282ea69eb162834ddb
Author: lanchengx <52...@users.noreply.github.com>
AuthorDate: Fri May 13 00:04:57 2022 +0800
Adjust sharding rules to make table names insensitive. (#17610)
* Adjust sharding rules to make table names insensitive.
* Adjust sharding rules to make table names insensitive.
---
.../checker/ShardingTableRuleStatementChecker.java | 16 ++++++++----
.../ShardingTableRuleStatementConverter.java | 6 ++---
.../AlterShardingAlgorithmStatementUpdater.java | 4 +--
...rShardingBindingTableRulesStatementUpdater.java | 13 +++++++---
.../AlterShardingKeyGeneratorStatementUpdater.java | 4 +--
.../AlterShardingTableRuleStatementUpdater.java | 4 +--
...teShardingBindingTableRuleStatementUpdater.java | 15 +++++++----
...opShardingBindingTableRuleStatementUpdater.java | 22 ++++++++++++----
...ShardingBroadcastTableRuleStatementUpdater.java | 12 ++++++---
.../DropShardingKeyGeneratorStatementUpdater.java | 9 -------
.../DropShardingTableRuleStatementUpdater.java | 13 +++++++---
...AlterShardingAlgorithmStatementUpdaterTest.java | 29 ++++++++++++++++------
...rdingBindingTableRulesStatementUpdaterTest.java | 16 ++++++++----
...erShardingKeyGeneratorStatementUpdaterTest.java | 25 ++++++++++++++-----
...AlterShardingTableRuleStatementUpdaterTest.java | 25 +++++++++++++++++++
...ardingBindingTableRuleStatementUpdaterTest.java | 16 ++++++++----
...ardingBindingTableRuleStatementUpdaterTest.java | 20 +++++++++------
...dingBroadcastTableRuleStatementUpdaterTest.java | 7 ++++++
...opShardingKeyGeneratorStatementUpdaterTest.java | 6 -----
.../DropShardingTableRuleStatementUpdaterTest.java | 10 +++++++-
.../distsql/update/RuleDefinitionDropUpdater.java | 2 +-
21 files changed, 190 insertions(+), 84 deletions(-)
diff --git a/shardingsphere-features/shardingsphere-sharding/shardingsphere-sharding-distsql/shardingsphere-sharding-distsql-handler/src/main/java/org/apache/shardingsphere/sharding/distsql/handler/checker/ShardingTableRuleStatementChecker.java b/shardingsphere-features/shardingsphere-sharding/shardingsphere-sharding-distsql/shardingsphere-sharding-distsql-handler/src/main/java/org/apache/shardingsphere/sharding/distsql/handler/checker/ShardingTableRuleStatementChecker.java
index a330bda40a4..022cf10ef7b 100644
--- a/shardingsphere-features/shardingsphere-sharding/shardingsphere-sharding-distsql/shardingsphere-sharding-distsql-handler/src/main/java/org/apache/shardingsphere/sharding/distsql/handler/checker/ShardingTableRuleStatementChecker.java
+++ b/shardingsphere-features/shardingsphere-sharding/shardingsphere-sharding-distsql/shardingsphere-sharding-distsql-handler/src/main/java/org/apache/shardingsphere/sharding/distsql/handler/checker/ShardingTableRuleStatementChecker.java
@@ -47,6 +47,7 @@ import java.util.LinkedHashSet;
import java.util.LinkedList;
import java.util.List;
import java.util.Map;
+import java.util.Map.Entry;
import java.util.Objects;
import java.util.Optional;
import java.util.Set;
@@ -134,7 +135,7 @@ public final class ShardingTableRuleStatementChecker {
private static void checkShardingTables(final String databaseName, final Collection<AbstractTableRuleSegment> rules,
final ShardingRuleConfiguration currentRuleConfig, final boolean isCreate) throws DistSQLException {
Collection<String> requiredShardingTables = rules.stream().map(AbstractTableRuleSegment::getLogicTable).collect(Collectors.toList());
- Set<String> duplicatedShardingTables = getDuplicate(requiredShardingTables);
+ Collection<String> duplicatedShardingTables = getDuplicate(requiredShardingTables);
DistSQLException.predictionThrow(duplicatedShardingTables.isEmpty(), () -> new DuplicateRuleException("sharding", databaseName, duplicatedShardingTables));
Collection<String> currentShardingTables = null == currentRuleConfig ? Collections.emptyList() : getCurrentShardingTables(currentRuleConfig);
if (isCreate) {
@@ -147,16 +148,21 @@ public final class ShardingTableRuleStatementChecker {
}
private static Set<String> getDuplicate(final Collection<String> collection) {
- return collection.stream().collect(Collectors.groupingBy(each -> each, Collectors.counting())).entrySet().stream()
- .filter(each -> each.getValue() > 1).map(Map.Entry::getKey).collect(Collectors.toSet());
+ Collection<String> duplicate = collection.stream().collect(Collectors.groupingBy(String::toLowerCase, Collectors.counting())).entrySet().stream()
+ .filter(each -> each.getValue() > 1).map(Entry::getKey).collect(Collectors.toSet());
+ return collection.stream().filter(each -> containsIgnoreCase(duplicate, each)).collect(Collectors.toSet());
}
private static Set<String> getIdentical(final Collection<String> require, final Collection<String> current) {
- return require.stream().filter(current::contains).collect(Collectors.toSet());
+ return require.stream().filter(each -> containsIgnoreCase(current, each)).collect(Collectors.toSet());
}
private static Set<String> getDifferent(final Collection<String> require, final Collection<String> current) {
- return require.stream().filter(each -> !current.contains(each)).collect(Collectors.toSet());
+ return require.stream().filter(each -> !containsIgnoreCase(current, each)).collect(Collectors.toSet());
+ }
+
+ private static boolean containsIgnoreCase(final Collection<String> collection, final String str) {
+ return collection.stream().anyMatch(each -> each.equalsIgnoreCase(str));
}
private static Collection<String> getCurrentShardingTables(final ShardingRuleConfiguration currentRuleConfig) {
diff --git a/shardingsphere-features/shardingsphere-sharding/shardingsphere-sharding-distsql/shardingsphere-sharding-distsql-handler/src/main/java/org/apache/shardingsphere/sharding/distsql/handler/converter/ShardingTableRuleStatementConverter.java b/shardingsphere-features/shardingsphere-sharding/shardingsphere-sharding-distsql/shardingsphere-sharding-distsql-handler/src/main/java/org/apache/shardingsphere/sharding/distsql/handler/converter/ShardingTableRuleStatementConverter.java
index bb43277a388..eba21a082d5 100644
--- a/shardingsphere-features/shardingsphere-sharding/shardingsphere-sharding-distsql/shardingsphere-sharding-distsql-handler/src/main/java/org/apache/shardingsphere/sharding/distsql/handler/converter/ShardingTableRuleStatementConverter.java
+++ b/shardingsphere-features/shardingsphere-sharding/shardingsphere-sharding-distsql/shardingsphere-sharding-distsql-handler/src/main/java/org/apache/shardingsphere/sharding/distsql/handler/converter/ShardingTableRuleStatementConverter.java
@@ -165,14 +165,14 @@ public final class ShardingTableRuleStatementConverter {
}
private static String getAutoTableShardingAlgorithmName(final String tableName, final String algorithmType) {
- return String.format("%s_%s", tableName, algorithmType.toLowerCase());
+ return String.format("%s_%s", tableName.toLowerCase(), algorithmType.toLowerCase());
}
private static String getTableShardingAlgorithmName(final String tableName, final ShardingStrategyLevelType strategyLevel, final String algorithmType) {
- return String.format("%s_%s_%s", tableName, strategyLevel.name().toLowerCase(), algorithmType.toLowerCase());
+ return String.format("%s_%s_%s", tableName.toLowerCase(), strategyLevel.name().toLowerCase(), algorithmType.toLowerCase());
}
private static String getKeyGeneratorName(final String tableName, final String algorithmType) {
- return String.format("%s_%s", tableName, algorithmType.toLowerCase());
+ return String.format("%s_%s", tableName.toLowerCase(), algorithmType.toLowerCase());
}
}
diff --git a/shardingsphere-features/shardingsphere-sharding/shardingsphere-sharding-distsql/shardingsphere-sharding-distsql-handler/src/main/java/org/apache/shardingsphere/sharding/distsql/handler/update/AlterShardingAlgorithmStatementUpdater.java b/shardingsphere-features/shardingsphere-sharding/shardingsphere-sharding-distsql/shardingsphere-sharding-distsql-handler/src/main/java/org/apache/shardingsphere/sharding/distsql/handler/update/AlterShardingAlgorithmStatementUpdater.java
index 2a2c395e40b..443ace20de6 100644
--- a/shardingsphere-features/shardingsphere-sharding/shardingsphere-sharding-distsql/shardingsphere-sharding-distsql-handler/src/main/java/org/apache/shardingsphere/sharding/distsql/handler/update/AlterShardingAlgorithmStatementUpdater.java
+++ b/shardingsphere-features/shardingsphere-sharding/shardingsphere-sharding-distsql/shardingsphere-sharding-distsql-handler/src/main/java/org/apache/shardingsphere/sharding/distsql/handler/update/AlterShardingAlgorithmStatementUpdater.java
@@ -77,8 +77,8 @@ public final class AlterShardingAlgorithmStatementUpdater implements RuleDefinit
}
@Override
- public void updateCurrentRuleConfiguration(final ShardingRuleConfiguration currentRuleConfig, final ShardingRuleConfiguration toBeCreatedRuleConfig) {
- currentRuleConfig.getShardingAlgorithms().putAll(toBeCreatedRuleConfig.getShardingAlgorithms());
+ public void updateCurrentRuleConfiguration(final ShardingRuleConfiguration currentRuleConfig, final ShardingRuleConfiguration toBeAlteredRuleConfig) {
+ currentRuleConfig.getShardingAlgorithms().putAll(toBeAlteredRuleConfig.getShardingAlgorithms());
}
@Override
diff --git a/shardingsphere-features/shardingsphere-sharding/shardingsphere-sharding-distsql/shardingsphere-sharding-distsql-handler/src/main/java/org/apache/shardingsphere/sharding/distsql/handler/update/AlterShardingBindingTableRulesStatementUpdater.java b/shardingsphere-features/shardingsphere-sharding/shardingsphere-sharding-distsql/shardingsphere-sharding-distsql-handler/src/main/java/org/apache/shardingsphere/sharding/distsql/handler/update/AlterShardingBindingTableRulesStatementUpd [...]
index 3bf631962e8..aef848726dd 100644
--- a/shardingsphere-features/shardingsphere-sharding/shardingsphere-sharding-distsql/shardingsphere-sharding-distsql-handler/src/main/java/org/apache/shardingsphere/sharding/distsql/handler/update/AlterShardingBindingTableRulesStatementUpdater.java
+++ b/shardingsphere-features/shardingsphere-sharding/shardingsphere-sharding-distsql/shardingsphere-sharding-distsql-handler/src/main/java/org/apache/shardingsphere/sharding/distsql/handler/update/AlterShardingBindingTableRulesStatementUpdater.java
@@ -56,7 +56,7 @@ public final class AlterShardingBindingTableRulesStatementUpdater implements Rul
private void checkToBeAlertedBindingTables(final String databaseName, final AlterShardingBindingTableRulesStatement sqlStatement,
final ShardingRuleConfiguration currentRuleConfig) throws DuplicateRuleException {
Collection<String> currentLogicTables = getCurrentLogicTables(currentRuleConfig);
- Collection<String> notExistedBindingTables = sqlStatement.getBindingTables().stream().filter(each -> !currentLogicTables.contains(each)).collect(Collectors.toSet());
+ Collection<String> notExistedBindingTables = sqlStatement.getBindingTables().stream().filter(each -> !containsIgnoreCase(currentLogicTables, each)).collect(Collectors.toSet());
if (!notExistedBindingTables.isEmpty()) {
throw new DuplicateRuleException("binding", databaseName, notExistedBindingTables);
}
@@ -71,12 +71,17 @@ public final class AlterShardingBindingTableRulesStatementUpdater implements Rul
private void checkToBeAlteredDuplicateBindingTables(final String databaseName, final AlterShardingBindingTableRulesStatement sqlStatement) throws DuplicateRuleException {
Collection<String> toBeAlteredBindingTables = new HashSet<>();
- Collection<String> duplicateBindingTables = sqlStatement.getBindingTables().stream().filter(each -> !toBeAlteredBindingTables.add(each)).collect(Collectors.toSet());
- if (!duplicateBindingTables.isEmpty()) {
- throw new DuplicateRuleException("binding", databaseName, duplicateBindingTables);
+ Collection<String> duplicateBindingTables = sqlStatement.getBindingTables().stream().filter(each -> !toBeAlteredBindingTables.add(each.toLowerCase())).collect(Collectors.toSet());
+ Collection<String> duplicateBindingTablesForDisplay = sqlStatement.getBindingTables().stream().filter(each -> containsIgnoreCase(duplicateBindingTables, each)).collect(Collectors.toSet());
+ if (!duplicateBindingTablesForDisplay.isEmpty()) {
+ throw new DuplicateRuleException("binding", databaseName, duplicateBindingTablesForDisplay);
}
}
+ private static boolean containsIgnoreCase(final Collection<String> collection, final String str) {
+ return collection.stream().anyMatch(each -> each.equalsIgnoreCase(str));
+ }
+
@Override
public RuleConfiguration buildToBeAlteredRuleConfiguration(final AlterShardingBindingTableRulesStatement sqlStatement) {
ShardingRuleConfiguration result = new ShardingRuleConfiguration();
diff --git a/shardingsphere-features/shardingsphere-sharding/shardingsphere-sharding-distsql/shardingsphere-sharding-distsql-handler/src/main/java/org/apache/shardingsphere/sharding/distsql/handler/update/AlterShardingKeyGeneratorStatementUpdater.java b/shardingsphere-features/shardingsphere-sharding/shardingsphere-sharding-distsql/shardingsphere-sharding-distsql-handler/src/main/java/org/apache/shardingsphere/sharding/distsql/handler/update/AlterShardingKeyGeneratorStatementUpdater.java
index 1d8781cc970..25559e3452a 100644
--- a/shardingsphere-features/shardingsphere-sharding/shardingsphere-sharding-distsql/shardingsphere-sharding-distsql-handler/src/main/java/org/apache/shardingsphere/sharding/distsql/handler/update/AlterShardingKeyGeneratorStatementUpdater.java
+++ b/shardingsphere-features/shardingsphere-sharding/shardingsphere-sharding-distsql/shardingsphere-sharding-distsql-handler/src/main/java/org/apache/shardingsphere/sharding/distsql/handler/update/AlterShardingKeyGeneratorStatementUpdater.java
@@ -78,8 +78,8 @@ public final class AlterShardingKeyGeneratorStatementUpdater implements RuleDefi
}
@Override
- public void updateCurrentRuleConfiguration(final ShardingRuleConfiguration currentRuleConfig, final ShardingRuleConfiguration toBeCreatedRuleConfig) {
- currentRuleConfig.getKeyGenerators().putAll(toBeCreatedRuleConfig.getShardingAlgorithms());
+ public void updateCurrentRuleConfiguration(final ShardingRuleConfiguration currentRuleConfig, final ShardingRuleConfiguration toBeAlteredRuleConfig) {
+ currentRuleConfig.getKeyGenerators().putAll(toBeAlteredRuleConfig.getShardingAlgorithms());
}
@Override
diff --git a/shardingsphere-features/shardingsphere-sharding/shardingsphere-sharding-distsql/shardingsphere-sharding-distsql-handler/src/main/java/org/apache/shardingsphere/sharding/distsql/handler/update/AlterShardingTableRuleStatementUpdater.java b/shardingsphere-features/shardingsphere-sharding/shardingsphere-sharding-distsql/shardingsphere-sharding-distsql-handler/src/main/java/org/apache/shardingsphere/sharding/distsql/handler/update/AlterShardingTableRuleStatementUpdater.java
index d131018246d..4f310314107 100644
--- a/shardingsphere-features/shardingsphere-sharding/shardingsphere-sharding-distsql/shardingsphere-sharding-distsql-handler/src/main/java/org/apache/shardingsphere/sharding/distsql/handler/update/AlterShardingTableRuleStatementUpdater.java
+++ b/shardingsphere-features/shardingsphere-sharding/shardingsphere-sharding-distsql/shardingsphere-sharding-distsql-handler/src/main/java/org/apache/shardingsphere/sharding/distsql/handler/update/AlterShardingTableRuleStatementUpdater.java
@@ -57,8 +57,8 @@ public final class AlterShardingTableRuleStatementUpdater implements RuleDefinit
private void removeRuleConfiguration(final ShardingRuleConfiguration currentRuleConfig, final ShardingRuleConfiguration toBeAlteredRuleConfig) {
Collection<String> toBeAlteredLogicTableNames = getAlteredLogicalTableNames(toBeAlteredRuleConfig);
toBeAlteredLogicTableNames.forEach(each -> {
- currentRuleConfig.getTables().removeIf(table -> table.getLogicTable().equals(each));
- currentRuleConfig.getAutoTables().removeIf(table -> table.getLogicTable().equals(each));
+ currentRuleConfig.getTables().removeIf(table -> table.getLogicTable().equalsIgnoreCase(each));
+ currentRuleConfig.getAutoTables().removeIf(table -> table.getLogicTable().equalsIgnoreCase(each));
});
}
diff --git a/shardingsphere-features/shardingsphere-sharding/shardingsphere-sharding-distsql/shardingsphere-sharding-distsql-handler/src/main/java/org/apache/shardingsphere/sharding/distsql/handler/update/CreateShardingBindingTableRuleStatementUpdater.java b/shardingsphere-features/shardingsphere-sharding/shardingsphere-sharding-distsql/shardingsphere-sharding-distsql-handler/src/main/java/org/apache/shardingsphere/sharding/distsql/handler/update/CreateShardingBindingTableRuleStatementUpd [...]
index 20416bb5fd9..d0e1194fb21 100644
--- a/shardingsphere-features/shardingsphere-sharding/shardingsphere-sharding-distsql/shardingsphere-sharding-distsql-handler/src/main/java/org/apache/shardingsphere/sharding/distsql/handler/update/CreateShardingBindingTableRuleStatementUpdater.java
+++ b/shardingsphere-features/shardingsphere-sharding/shardingsphere-sharding-distsql/shardingsphere-sharding-distsql-handler/src/main/java/org/apache/shardingsphere/sharding/distsql/handler/update/CreateShardingBindingTableRuleStatementUpdater.java
@@ -31,7 +31,6 @@ import org.apache.shardingsphere.sharding.distsql.parser.statement.CreateShardin
import java.util.Arrays;
import java.util.Collection;
import java.util.HashSet;
-import java.util.LinkedHashSet;
import java.util.stream.Collectors;
/**
@@ -57,10 +56,15 @@ public final class CreateShardingBindingTableRuleStatementUpdater implements Rul
private void checkToBeCreatedBindingTables(final String databaseName, final CreateShardingBindingTableRulesStatement sqlStatement,
final ShardingRuleConfiguration currentRuleConfig) throws DistSQLException {
Collection<String> currentLogicTables = getCurrentLogicTables(currentRuleConfig);
- Collection<String> notExistedBindingTables = sqlStatement.getBindingTables().stream().filter(each -> !currentLogicTables.contains(each)).collect(Collectors.toCollection(LinkedHashSet::new));
+ Collection<String> notExistedBindingTables = sqlStatement.getBindingTables().stream()
+ .filter(each -> !containsIgnoreCase(currentLogicTables, each)).collect(Collectors.toSet());
DistSQLException.predictionThrow(notExistedBindingTables.isEmpty(), () -> new RequiredRuleMissedException("Sharding", databaseName, notExistedBindingTables));
}
+ private static boolean containsIgnoreCase(final Collection<String> collection, final String str) {
+ return collection.stream().anyMatch(each -> each.equalsIgnoreCase(str));
+ }
+
private Collection<String> getCurrentLogicTables(final ShardingRuleConfiguration currentRuleConfig) {
Collection<String> result = new HashSet<>();
result.addAll(currentRuleConfig.getTables().stream().map(ShardingTableRuleConfiguration::getLogicTable).collect(Collectors.toSet()));
@@ -71,9 +75,10 @@ public final class CreateShardingBindingTableRuleStatementUpdater implements Rul
private void checkToBeCreatedDuplicateBindingTables(final String databaseName,
final CreateShardingBindingTableRulesStatement sqlStatement, final ShardingRuleConfiguration currentRuleConfig) throws DuplicateRuleException {
Collection<String> toBeCreatedBindingTables = new HashSet<>();
- Collection<String> duplicateBindingTables = sqlStatement.getBindingTables().stream().filter(each -> !toBeCreatedBindingTables.add(each)).collect(Collectors.toSet());
- duplicateBindingTables.addAll(getCurrentBindingTables(currentRuleConfig).stream().filter(each -> !toBeCreatedBindingTables.add(each)).collect(Collectors.toSet()));
- if (!duplicateBindingTables.isEmpty()) {
+ Collection<String> duplicateBindingTables = sqlStatement.getBindingTables().stream().filter(each -> !toBeCreatedBindingTables.add(each.toLowerCase())).collect(Collectors.toSet());
+ duplicateBindingTables.addAll(getCurrentBindingTables(currentRuleConfig).stream().filter(each -> !toBeCreatedBindingTables.add(each.toLowerCase())).collect(Collectors.toSet()));
+ Collection<String> duplicatedBindingTablesForDisplay = sqlStatement.getBindingTables().stream().filter(each -> containsIgnoreCase(duplicateBindingTables, each)).collect(Collectors.toSet());
+ if (!duplicatedBindingTablesForDisplay.isEmpty()) {
throw new DuplicateRuleException("binding", databaseName, duplicateBindingTables);
}
}
diff --git a/shardingsphere-features/shardingsphere-sharding/shardingsphere-sharding-distsql/shardingsphere-sharding-distsql-handler/src/main/java/org/apache/shardingsphere/sharding/distsql/handler/update/DropShardingBindingTableRuleStatementUpdater.java b/shardingsphere-features/shardingsphere-sharding/shardingsphere-sharding-distsql/shardingsphere-sharding-distsql-handler/src/main/java/org/apache/shardingsphere/sharding/distsql/handler/update/DropShardingBindingTableRuleStatementUpdater.java
index 025fcd5e7e5..add41079c06 100644
--- a/shardingsphere-features/shardingsphere-sharding/shardingsphere-sharding-distsql/shardingsphere-sharding-distsql-handler/src/main/java/org/apache/shardingsphere/sharding/distsql/handler/update/DropShardingBindingTableRuleStatementUpdater.java
+++ b/shardingsphere-features/shardingsphere-sharding/shardingsphere-sharding-distsql/shardingsphere-sharding-distsql-handler/src/main/java/org/apache/shardingsphere/sharding/distsql/handler/update/DropShardingBindingTableRuleStatementUpdater.java
@@ -34,7 +34,9 @@ import java.util.LinkedHashMap;
import java.util.LinkedHashSet;
import java.util.LinkedList;
import java.util.Map;
+import java.util.Map.Entry;
import java.util.Optional;
+import java.util.stream.Collectors;
/**
* Drop sharding binding table rule statement updater.
@@ -82,15 +84,20 @@ public final class DropShardingBindingTableRuleStatementUpdater implements RuleD
private boolean isToBeDroppedRuleExists(final BindingTableRuleSegment bindingRule, final Map<String, String> bindingRelationship) {
Optional<String> anyTableInToBeAlteredRule = bindingRule.getBindingTables().stream().findAny();
if (anyTableInToBeAlteredRule.isPresent()) {
- String currentBindingRule = bindingRelationship.get(anyTableInToBeAlteredRule.get());
- if (!Strings.isNullOrEmpty(currentBindingRule)) {
- Collection<String> currentBindingTables = Splitter.on(",").trimResults().splitToList(currentBindingRule);
- return bindingRule.getBindingTables().containsAll(currentBindingTables);
+ Optional<String> currentBindingRule = bindingRelationship.entrySet().stream()
+ .filter(each -> each.getKey().equalsIgnoreCase(anyTableInToBeAlteredRule.get())).map(Entry::getValue).findFirst();
+ if (currentBindingRule.isPresent() && !Strings.isNullOrEmpty(currentBindingRule.get())) {
+ Collection<String> currentBindingTables = Splitter.on(",").trimResults().splitToList(currentBindingRule.get());
+ return bindingRule.getBindingTables().stream().allMatch(each -> containsIgnoreCase(currentBindingTables, each));
}
}
return false;
}
+ private static boolean containsIgnoreCase(final Collection<String> collection, final String str) {
+ return collection.stream().anyMatch(each -> each.equalsIgnoreCase(str));
+ }
+
@Override
public boolean hasAnyOneToBeDropped(final DropShardingBindingTableRulesStatement sqlStatement, final ShardingRuleConfiguration currentRuleConfig) {
if (!isExistRuleConfig(currentRuleConfig)) {
@@ -119,12 +126,17 @@ public final class DropShardingBindingTableRuleStatementUpdater implements RuleD
public boolean updateCurrentRuleConfiguration(final DropShardingBindingTableRulesStatement sqlStatement, final ShardingRuleConfiguration currentRuleConfig) {
currentRuleConfig.getBindingTableGroups().clear();
if (!sqlStatement.getRules().isEmpty()) {
- sqlStatement.getRules().forEach(each -> each.getBindingTables().forEach(each1 -> bindingTableRules.remove(each1)));
+ getToBeRemoveShardingTable(sqlStatement).forEach(each -> bindingTableRules.remove(each));
currentRuleConfig.getBindingTableGroups().addAll(new LinkedHashSet<>(bindingTableRules.values()));
}
return false;
}
+ private Collection<String> getToBeRemoveShardingTable(final DropShardingBindingTableRulesStatement sqlStatement) {
+ Collection<String> toBeRemoveBindingTables = sqlStatement.getRules().stream().map(BindingTableRuleSegment::getBindingTables).flatMap(Collection::stream).collect(Collectors.toSet());
+ return bindingTableRules.keySet().stream().filter(each -> containsIgnoreCase(toBeRemoveBindingTables, each)).collect(Collectors.toSet());
+ }
+
@Override
public Class<ShardingRuleConfiguration> getRuleConfigurationClass() {
return ShardingRuleConfiguration.class;
diff --git a/shardingsphere-features/shardingsphere-sharding/shardingsphere-sharding-distsql/shardingsphere-sharding-distsql-handler/src/main/java/org/apache/shardingsphere/sharding/distsql/handler/update/DropShardingBroadcastTableRuleStatementUpdater.java b/shardingsphere-features/shardingsphere-sharding/shardingsphere-sharding-distsql/shardingsphere-sharding-distsql-handler/src/main/java/org/apache/shardingsphere/sharding/distsql/handler/update/DropShardingBroadcastTableRuleStatementUpd [...]
index a5508c42f61..7a28ee5de11 100644
--- a/shardingsphere-features/shardingsphere-sharding/shardingsphere-sharding-distsql/shardingsphere-sharding-distsql-handler/src/main/java/org/apache/shardingsphere/sharding/distsql/handler/update/DropShardingBroadcastTableRuleStatementUpdater.java
+++ b/shardingsphere-features/shardingsphere-sharding/shardingsphere-sharding-distsql/shardingsphere-sharding-distsql-handler/src/main/java/org/apache/shardingsphere/sharding/distsql/handler/update/DropShardingBroadcastTableRuleStatementUpdater.java
@@ -40,21 +40,25 @@ public final class DropShardingBroadcastTableRuleStatementUpdater implements Rul
return;
}
checkCurrentRuleConfiguration(databaseName, currentRuleConfig);
- checkBroadCastTableRuleExist(databaseName, sqlStatement, currentRuleConfig);
+ checkBroadcastTableRuleExist(databaseName, sqlStatement, currentRuleConfig);
}
- private void checkBroadCastTableRuleExist(final String databaseName, final DropShardingBroadcastTableRulesStatement sqlStatement,
+ private void checkBroadcastTableRuleExist(final String databaseName, final DropShardingBroadcastTableRulesStatement sqlStatement,
final ShardingRuleConfiguration currentRuleConfig) throws DistSQLException {
if (sqlStatement.isContainsExistClause()) {
return;
}
if (!sqlStatement.getRules().isEmpty()) {
Collection<String> currentRules = currentRuleConfig.getBroadcastTables();
- Collection<String> notExistRules = sqlStatement.getRules().stream().filter(each -> !currentRules.contains(each)).collect(Collectors.toList());
+ Collection<String> notExistRules = sqlStatement.getRules().stream().filter(each -> !containsIgnoreCase(currentRules, each)).collect(Collectors.toList());
DistSQLException.predictionThrow(notExistRules.isEmpty(), () -> new RequiredRuleMissedException("Broadcast", databaseName, notExistRules));
}
}
+ private static boolean containsIgnoreCase(final Collection<String> collection, final String str) {
+ return collection.stream().anyMatch(each -> each.equalsIgnoreCase(str));
+ }
+
private void checkCurrentRuleConfiguration(final String databaseName, final ShardingRuleConfiguration currentRuleConfig) throws DistSQLException {
DistSQLException.predictionThrow(null != currentRuleConfig, () -> new RequiredRuleMissedException("Broadcast", databaseName));
}
@@ -72,7 +76,7 @@ public final class DropShardingBroadcastTableRuleStatementUpdater implements Rul
if (sqlStatement.getRules().isEmpty()) {
currentRuleConfig.getBroadcastTables().clear();
} else {
- currentRuleConfig.getBroadcastTables().removeIf(sqlStatement.getRules()::contains);
+ currentRuleConfig.getBroadcastTables().removeIf(each -> containsIgnoreCase(sqlStatement.getRules(), each));
}
return false;
}
diff --git a/shardingsphere-features/shardingsphere-sharding/shardingsphere-sharding-distsql/shardingsphere-sharding-distsql-handler/src/main/java/org/apache/shardingsphere/sharding/distsql/handler/update/DropShardingKeyGeneratorStatementUpdater.java b/shardingsphere-features/shardingsphere-sharding/shardingsphere-sharding-distsql/shardingsphere-sharding-distsql-handler/src/main/java/org/apache/shardingsphere/sharding/distsql/handler/update/DropShardingKeyGeneratorStatementUpdater.java
index 9461fe42464..6883f7ce91c 100644
--- a/shardingsphere-features/shardingsphere-sharding/shardingsphere-sharding-distsql/shardingsphere-sharding-distsql-handler/src/main/java/org/apache/shardingsphere/sharding/distsql/handler/update/DropShardingKeyGeneratorStatementUpdater.java
+++ b/shardingsphere-features/shardingsphere-sharding/shardingsphere-sharding-distsql/shardingsphere-sharding-distsql-handler/src/main/java/org/apache/shardingsphere/sharding/distsql/handler/update/DropShardingKeyGeneratorStatementUpdater.java
@@ -19,7 +19,6 @@ package org.apache.shardingsphere.sharding.distsql.handler.update;
import com.google.common.base.Strings;
import org.apache.shardingsphere.infra.distsql.exception.DistSQLException;
-import org.apache.shardingsphere.infra.distsql.exception.rule.DuplicateKeyGeneratorException;
import org.apache.shardingsphere.infra.distsql.exception.rule.KeyGeneratorInUsedException;
import org.apache.shardingsphere.infra.distsql.exception.rule.RequiredKeyGeneratorMissedException;
import org.apache.shardingsphere.infra.distsql.update.RuleDefinitionDropUpdater;
@@ -31,7 +30,6 @@ import org.apache.shardingsphere.sharding.distsql.parser.statement.DropShardingK
import java.util.Collection;
import java.util.LinkedHashSet;
import java.util.LinkedList;
-import java.util.Map;
import java.util.Objects;
import java.util.stream.Collectors;
@@ -50,17 +48,10 @@ public final class DropShardingKeyGeneratorStatementUpdater implements RuleDefin
}
String databaseName = shardingSphereMetaData.getDatabaseName();
Collection<String> keyGeneratorNames = new LinkedList<>(sqlStatement.getKeyGeneratorNames());
- checkDuplicate(databaseName, keyGeneratorNames);
checkExist(databaseName, keyGeneratorNames, currentRuleConfig, sqlStatement);
checkInUsed(databaseName, keyGeneratorNames, currentRuleConfig);
}
- private void checkDuplicate(final String databaseName, final Collection<String> keyGeneratorNames) throws DistSQLException {
- Collection<String> duplicateNames = keyGeneratorNames.stream().collect(Collectors.groupingBy(each -> each, Collectors.counting())).entrySet().stream()
- .filter(each -> each.getValue() > 1).map(Map.Entry::getKey).collect(Collectors.toSet());
- DistSQLException.predictionThrow(duplicateNames.isEmpty(), () -> new DuplicateKeyGeneratorException("sharding", databaseName, duplicateNames));
- }
-
private void checkExist(final String databaseName, final Collection<String> keyGeneratorNames, final ShardingRuleConfiguration currentRuleConfig,
final DropShardingKeyGeneratorStatement sqlStatement) throws DistSQLException {
if (sqlStatement.isContainsExistClause()) {
diff --git a/shardingsphere-features/shardingsphere-sharding/shardingsphere-sharding-distsql/shardingsphere-sharding-distsql-handler/src/main/java/org/apache/shardingsphere/sharding/distsql/handler/update/DropShardingTableRuleStatementUpdater.java b/shardingsphere-features/shardingsphere-sharding/shardingsphere-sharding-distsql/shardingsphere-sharding-distsql-handler/src/main/java/org/apache/shardingsphere/sharding/distsql/handler/update/DropShardingTableRuleStatementUpdater.java
index 6bb67b938d3..074325ff4e8 100644
--- a/shardingsphere-features/shardingsphere-sharding/shardingsphere-sharding-distsql/shardingsphere-sharding-distsql-handler/src/main/java/org/apache/shardingsphere/sharding/distsql/handler/update/DropShardingTableRuleStatementUpdater.java
+++ b/shardingsphere-features/shardingsphere-sharding/shardingsphere-sharding-distsql/shardingsphere-sharding-distsql-handler/src/main/java/org/apache/shardingsphere/sharding/distsql/handler/update/DropShardingTableRuleStatementUpdater.java
@@ -69,12 +69,17 @@ public final class DropShardingTableRuleStatementUpdater implements RuleDefiniti
return;
}
Collection<String> currentShardingTableNames = getCurrentShardingTableNames(currentRuleConfig);
- Collection<String> notExistedTableNames = getToBeDroppedShardingTableNames(sqlStatement).stream().filter(each -> !currentShardingTableNames.contains(each)).collect(Collectors.toList());
+ Collection<String> notExistedTableNames =
+ getToBeDroppedShardingTableNames(sqlStatement).stream().filter(each -> !containsIgnoreCase(currentShardingTableNames, each)).collect(Collectors.toList());
if (!notExistedTableNames.isEmpty()) {
throw new RequiredRuleMissedException("sharding", databaseName, notExistedTableNames);
}
}
+ private static boolean containsIgnoreCase(final Collection<String> collection, final String str) {
+ return collection.stream().anyMatch(each -> each.equalsIgnoreCase(str));
+ }
+
private Collection<String> getCurrentShardingTableNames(final ShardingRuleConfiguration shardingRuleConfig) {
Collection<String> result = new LinkedList<>();
result.addAll(shardingRuleConfig.getTables().stream().map(ShardingTableRuleConfiguration::getLogicTable).collect(Collectors.toList()));
@@ -84,7 +89,7 @@ public final class DropShardingTableRuleStatementUpdater implements RuleDefiniti
private void checkBindingTables(final String databaseName, final DropShardingTableRuleStatement sqlStatement, final ShardingRuleConfiguration currentRuleConfig) throws RuleInUsedException {
Collection<String> bindingTables = getBindingTables(currentRuleConfig);
- Collection<String> usedTableNames = getToBeDroppedShardingTableNames(sqlStatement).stream().filter(bindingTables::contains).collect(Collectors.toList());
+ Collection<String> usedTableNames = getToBeDroppedShardingTableNames(sqlStatement).stream().filter(each -> containsIgnoreCase(bindingTables, each)).collect(Collectors.toList());
if (!usedTableNames.isEmpty()) {
throw new RuleInUsedException("Sharding", databaseName, usedTableNames);
}
@@ -134,8 +139,8 @@ public final class DropShardingTableRuleStatementUpdater implements RuleDefiniti
}
private void dropShardingTable(final ShardingRuleConfiguration currentRuleConfig, final String tableName) {
- currentRuleConfig.getTables().removeAll(currentRuleConfig.getTables().stream().filter(each -> tableName.equals(each.getLogicTable())).collect(Collectors.toList()));
- currentRuleConfig.getAutoTables().removeAll(currentRuleConfig.getAutoTables().stream().filter(each -> tableName.equals(each.getLogicTable())).collect(Collectors.toList()));
+ currentRuleConfig.getTables().removeAll(currentRuleConfig.getTables().stream().filter(each -> tableName.equalsIgnoreCase(each.getLogicTable())).collect(Collectors.toList()));
+ currentRuleConfig.getAutoTables().removeAll(currentRuleConfig.getAutoTables().stream().filter(each -> tableName.equalsIgnoreCase(each.getLogicTable())).collect(Collectors.toList()));
}
@Override
diff --git a/shardingsphere-features/shardingsphere-sharding/shardingsphere-sharding-distsql/shardingsphere-sharding-distsql-handler/src/test/java/org/apache/shardingsphere/sharding/distsql/update/AlterShardingAlgorithmStatementUpdaterTest.java b/shardingsphere-features/shardingsphere-sharding/shardingsphere-sharding-distsql/shardingsphere-sharding-distsql-handler/src/test/java/org/apache/shardingsphere/sharding/distsql/update/AlterShardingAlgorithmStatementUpdaterTest.java
index 4c770b8884b..1400f275889 100644
--- a/shardingsphere-features/shardingsphere-sharding/shardingsphere-sharding-distsql/shardingsphere-sharding-distsql-handler/src/test/java/org/apache/shardingsphere/sharding/distsql/update/AlterShardingAlgorithmStatementUpdaterTest.java
+++ b/shardingsphere-features/shardingsphere-sharding/shardingsphere-sharding-distsql/shardingsphere-sharding-distsql-handler/src/test/java/org/apache/shardingsphere/sharding/distsql/update/AlterShardingAlgorithmStatementUpdaterTest.java
@@ -37,6 +37,8 @@ import org.mockito.junit.MockitoJUnitRunner;
import java.util.Arrays;
import java.util.Properties;
+import static org.hamcrest.Matchers.is;
+import static org.junit.Assert.assertThat;
import static org.mockito.Mockito.when;
@RunWith(MockitoJUnitRunner.class)
@@ -55,31 +57,42 @@ public final class AlterShardingAlgorithmStatementUpdaterTest {
@Test(expected = DuplicateRuleException.class)
public void assertExecuteWithDuplicate() throws DistSQLException {
Properties props = new Properties();
- props.put("inputKey", "inputValue");
- ShardingAlgorithmSegment algorithmSegment = new ShardingAlgorithmSegment("inputAlgorithmName", new AlgorithmSegment("inputAlgorithmName", props));
+ props.put("input_key", "input_value");
+ ShardingAlgorithmSegment algorithmSegment = new ShardingAlgorithmSegment("input_algorithm_name", new AlgorithmSegment("input_algorithm_name", props));
updater.checkSQLStatement(shardingSphereMetaData, createSQLStatement(algorithmSegment, algorithmSegment), null);
}
@Test(expected = RequiredAlgorithmMissedException.class)
public void assertExecuteWithNotExist() throws DistSQLException {
Properties props = new Properties();
- props.put("inputKey", "inputValue");
- ShardingAlgorithmSegment algorithmSegment = new ShardingAlgorithmSegment("notExistAlgorithmName", new AlgorithmSegment("inputAlgorithmName", props));
+ props.put("input_key", "input_value");
+ ShardingAlgorithmSegment algorithmSegment = new ShardingAlgorithmSegment("not_exist_algorithm_name", new AlgorithmSegment("input_algorithm_name", props));
ShardingRuleConfiguration shardingRuleConfig = new ShardingRuleConfiguration();
- shardingRuleConfig.getShardingAlgorithms().put("existAlgorithmName", new ShardingSphereAlgorithmConfiguration("hash_mod", props));
+ shardingRuleConfig.getShardingAlgorithms().put("exist_algorithm_name", new ShardingSphereAlgorithmConfiguration("hash_mod", props));
updater.checkSQLStatement(shardingSphereMetaData, createSQLStatement(algorithmSegment), shardingRuleConfig);
}
@Test(expected = InvalidAlgorithmConfigurationException.class)
public void assertExecuteWithInvalidAlgorithm() throws DistSQLException {
Properties props = new Properties();
- props.put("inputKey", "inputValue");
- ShardingAlgorithmSegment algorithmSegment = new ShardingAlgorithmSegment("existAlgorithmName", new AlgorithmSegment("inputAlgorithmName", props));
+ props.put("input_key", "input_value");
+ ShardingAlgorithmSegment algorithmSegment = new ShardingAlgorithmSegment("exist_algorithm_name", new AlgorithmSegment("input_algorithm_name", props));
ShardingRuleConfiguration ruleConfig = new ShardingRuleConfiguration();
- ruleConfig.getShardingAlgorithms().put("existAlgorithmName", new ShardingSphereAlgorithmConfiguration("InvalidAlgorithm", props));
+ ruleConfig.getShardingAlgorithms().put("exist_algorithm_name", new ShardingSphereAlgorithmConfiguration("invalid_algorithm", props));
updater.checkSQLStatement(shardingSphereMetaData, createSQLStatement(algorithmSegment), ruleConfig);
}
+ @Test
+ public void assertUpdate() {
+ Properties props = new Properties();
+ ShardingAlgorithmSegment algorithmSegment = new ShardingAlgorithmSegment("exist_algorithm_name", new AlgorithmSegment("mod", props));
+ ShardingRuleConfiguration currentRuleConfig = new ShardingRuleConfiguration();
+ currentRuleConfig.getShardingAlgorithms().put("exist_algorithm_name", new ShardingSphereAlgorithmConfiguration("hash_mod", props));
+ ShardingRuleConfiguration toBeAlteredRuleConfiguration = updater.buildToBeAlteredRuleConfiguration(createSQLStatement(algorithmSegment));
+ updater.updateCurrentRuleConfiguration(currentRuleConfig, toBeAlteredRuleConfiguration);
+ assertThat(currentRuleConfig.getShardingAlgorithms().get("exist_algorithm_name").getType(), is("mod"));
+ }
+
private AlterShardingAlgorithmStatement createSQLStatement(final ShardingAlgorithmSegment... ruleSegments) {
return new AlterShardingAlgorithmStatement(Arrays.asList(ruleSegments));
}
diff --git a/shardingsphere-features/shardingsphere-sharding/shardingsphere-sharding-distsql/shardingsphere-sharding-distsql-handler/src/test/java/org/apache/shardingsphere/sharding/distsql/update/AlterShardingBindingTableRulesStatementUpdaterTest.java b/shardingsphere-features/shardingsphere-sharding/shardingsphere-sharding-distsql/shardingsphere-sharding-distsql-handler/src/test/java/org/apache/shardingsphere/sharding/distsql/update/AlterShardingBindingTableRulesStatementUpdaterTest.java
index 26921716a9c..6865476bff2 100644
--- a/shardingsphere-features/shardingsphere-sharding/shardingsphere-sharding-distsql/shardingsphere-sharding-distsql-handler/src/test/java/org/apache/shardingsphere/sharding/distsql/update/AlterShardingBindingTableRulesStatementUpdaterTest.java
+++ b/shardingsphere-features/shardingsphere-sharding/shardingsphere-sharding-distsql/shardingsphere-sharding-distsql-handler/src/test/java/org/apache/shardingsphere/sharding/distsql/update/AlterShardingBindingTableRulesStatementUpdaterTest.java
@@ -33,6 +33,7 @@ import org.mockito.junit.MockitoJUnitRunner;
import java.util.Arrays;
import java.util.Collections;
+import java.util.List;
@RunWith(MockitoJUnitRunner.class)
public final class AlterShardingBindingTableRulesStatementUpdaterTest {
@@ -49,15 +50,20 @@ public final class AlterShardingBindingTableRulesStatementUpdaterTest {
@Test(expected = DuplicateRuleException.class)
public void assertCheckSQLStatementWithDuplicateTables() throws RuleDefinitionViolationException {
- updater.checkSQLStatement(shardingSphereMetaData, createDuplicatedSQLStatement(), createCurrentRuleConfiguration());
+ List<BindingTableRuleSegment> segments = Arrays.asList(new BindingTableRuleSegment("t_order,t_order_item"), new BindingTableRuleSegment("t_order,t_order_item"));
+ AlterShardingBindingTableRulesStatement statement = new AlterShardingBindingTableRulesStatement(segments);
+ updater.checkSQLStatement(shardingSphereMetaData, statement, createCurrentRuleConfiguration());
}
- private AlterShardingBindingTableRulesStatement createSQLStatement() {
- return new AlterShardingBindingTableRulesStatement(Arrays.asList(new BindingTableRuleSegment("t_order,t_order_item"), new BindingTableRuleSegment("t_1,t_2")));
+ @Test(expected = DuplicateRuleException.class)
+ public void assertCheckSQLStatementWithDifferentCaseDuplicateTables() throws RuleDefinitionViolationException {
+ List<BindingTableRuleSegment> segments = Arrays.asList(new BindingTableRuleSegment("T_ORDER,T_ORDER_ITEM"), new BindingTableRuleSegment("t_order,t_order_item"));
+ AlterShardingBindingTableRulesStatement statement = new AlterShardingBindingTableRulesStatement(segments);
+ updater.checkSQLStatement(shardingSphereMetaData, statement, createCurrentRuleConfiguration());
}
- private AlterShardingBindingTableRulesStatement createDuplicatedSQLStatement() {
- return new AlterShardingBindingTableRulesStatement(Arrays.asList(new BindingTableRuleSegment("t_order,t_order_item"), new BindingTableRuleSegment("t_order,t_order_item")));
+ private AlterShardingBindingTableRulesStatement createSQLStatement() {
+ return new AlterShardingBindingTableRulesStatement(Arrays.asList(new BindingTableRuleSegment("t_order,t_order_item"), new BindingTableRuleSegment("t_1,t_2")));
}
private ShardingRuleConfiguration createCurrentRuleConfiguration() {
diff --git a/shardingsphere-features/shardingsphere-sharding/shardingsphere-sharding-distsql/shardingsphere-sharding-distsql-handler/src/test/java/org/apache/shardingsphere/sharding/distsql/update/AlterShardingKeyGeneratorStatementUpdaterTest.java b/shardingsphere-features/shardingsphere-sharding/shardingsphere-sharding-distsql/shardingsphere-sharding-distsql-handler/src/test/java/org/apache/shardingsphere/sharding/distsql/update/AlterShardingKeyGeneratorStatementUpdaterTest.java
index 3e1a22ebb3b..706275bfa02 100644
--- a/shardingsphere-features/shardingsphere-sharding/shardingsphere-sharding-distsql/shardingsphere-sharding-distsql-handler/src/test/java/org/apache/shardingsphere/sharding/distsql/update/AlterShardingKeyGeneratorStatementUpdaterTest.java
+++ b/shardingsphere-features/shardingsphere-sharding/shardingsphere-sharding-distsql/shardingsphere-sharding-distsql-handler/src/test/java/org/apache/shardingsphere/sharding/distsql/update/AlterShardingKeyGeneratorStatementUpdaterTest.java
@@ -38,6 +38,8 @@ import java.util.Arrays;
import java.util.Collections;
import java.util.Properties;
+import static org.hamcrest.Matchers.is;
+import static org.junit.Assert.assertThat;
import static org.mockito.Mockito.when;
@RunWith(MockitoJUnitRunner.class)
@@ -55,31 +57,42 @@ public final class AlterShardingKeyGeneratorStatementUpdaterTest {
@Test(expected = DuplicateRuleException.class)
public void assertExecuteWithDuplicate() throws DistSQLException {
- ShardingKeyGeneratorSegment keyGeneratorSegment = new ShardingKeyGeneratorSegment("inputAlgorithmName", new AlgorithmSegment("inputAlgorithmName", createProperties()));
+ ShardingKeyGeneratorSegment keyGeneratorSegment = new ShardingKeyGeneratorSegment("input_key_generator_name", new AlgorithmSegment("snowflake", createProperties()));
updater.checkSQLStatement(shardingSphereMetaData, new AlterShardingKeyGeneratorStatement(Arrays.asList(keyGeneratorSegment, keyGeneratorSegment)), null);
}
@Test(expected = RequiredAlgorithmMissedException.class)
public void assertExecuteWithNotExist() throws DistSQLException {
Properties props = createProperties();
- ShardingKeyGeneratorSegment keyGeneratorSegment = new ShardingKeyGeneratorSegment("notExistAlgorithmName", new AlgorithmSegment("inputAlgorithmName", props));
+ ShardingKeyGeneratorSegment keyGeneratorSegment = new ShardingKeyGeneratorSegment("not_exist_key_generator_name", new AlgorithmSegment("snowflake", props));
ShardingRuleConfiguration ruleConfig = new ShardingRuleConfiguration();
- ruleConfig.getShardingAlgorithms().put("existAlgorithmName", new ShardingSphereAlgorithmConfiguration("hash_mod", props));
+ ruleConfig.getKeyGenerators().put("exist_key_generator_name", new ShardingSphereAlgorithmConfiguration("hash_mod", props));
updater.checkSQLStatement(shardingSphereMetaData, new AlterShardingKeyGeneratorStatement(Collections.singletonList(keyGeneratorSegment)), ruleConfig);
}
@Test(expected = InvalidAlgorithmConfigurationException.class)
public void assertExecuteWithInvalidAlgorithm() throws DistSQLException {
Properties props = createProperties();
- ShardingKeyGeneratorSegment keyGeneratorSegment = new ShardingKeyGeneratorSegment("existAlgorithmName", new AlgorithmSegment("inputAlgorithmName", props));
+ ShardingKeyGeneratorSegment keyGeneratorSegment = new ShardingKeyGeneratorSegment("exist_key_generator_name", new AlgorithmSegment("snowflake", props));
ShardingRuleConfiguration ruleConfig = new ShardingRuleConfiguration();
- ruleConfig.getKeyGenerators().put("existAlgorithmName", new ShardingSphereAlgorithmConfiguration("InvalidAlgorithm", props));
+ ruleConfig.getKeyGenerators().put("exist_key_generator_name", new ShardingSphereAlgorithmConfiguration("invalid_type", props));
updater.checkSQLStatement(shardingSphereMetaData, new AlterShardingKeyGeneratorStatement(Collections.singletonList(keyGeneratorSegment)), ruleConfig);
}
+ @Test
+ public void assertUpdate() {
+ ShardingKeyGeneratorSegment keyGeneratorSegment = new ShardingKeyGeneratorSegment("exist_key_generator_name", new AlgorithmSegment("snowflake", createProperties()));
+ ShardingRuleConfiguration currentRuleConfig = new ShardingRuleConfiguration();
+ currentRuleConfig.getKeyGenerators().put("exist_key_generator_name", new ShardingSphereAlgorithmConfiguration("uuid", createProperties()));
+ AlterShardingKeyGeneratorStatement statement = new AlterShardingKeyGeneratorStatement(Collections.singletonList(keyGeneratorSegment));
+ ShardingRuleConfiguration toBeAlteredRuleConfiguration = updater.buildToBeAlteredRuleConfiguration(statement);
+ updater.updateCurrentRuleConfiguration(currentRuleConfig, toBeAlteredRuleConfiguration);
+ assertThat(currentRuleConfig.getKeyGenerators().get("exist_key_generator_name").getType(), is("uuid"));
+ }
+
private Properties createProperties() {
Properties result = new Properties();
- result.put("inputKey", "inputValue");
+ result.put("key", "value");
return result;
}
}
diff --git a/shardingsphere-features/shardingsphere-sharding/shardingsphere-sharding-distsql/shardingsphere-sharding-distsql-handler/src/test/java/org/apache/shardingsphere/sharding/distsql/update/AlterShardingTableRuleStatementUpdaterTest.java b/shardingsphere-features/shardingsphere-sharding/shardingsphere-sharding-distsql/shardingsphere-sharding-distsql-handler/src/test/java/org/apache/shardingsphere/sharding/distsql/update/AlterShardingTableRuleStatementUpdaterTest.java
index 0c6e60cccaa..af96219771c 100644
--- a/shardingsphere-features/shardingsphere-sharding/shardingsphere-sharding-distsql/shardingsphere-sharding-distsql-handler/src/test/java/org/apache/shardingsphere/sharding/distsql/update/AlterShardingTableRuleStatementUpdaterTest.java
+++ b/shardingsphere-features/shardingsphere-sharding/shardingsphere-sharding-distsql/shardingsphere-sharding-distsql-handler/src/test/java/org/apache/shardingsphere/sharding/distsql/update/AlterShardingTableRuleStatementUpdaterTest.java
@@ -101,6 +101,31 @@ public final class AlterShardingTableRuleStatementUpdaterTest {
assertThat(autoTableRule.getKeyGenerateStrategy().getKeyGeneratorName(), is("t_order_item_distsql.fixture"));
}
+ @Test
+ public void assertUpdateWithDifferentCase() throws DistSQLException {
+ AlterShardingTableRuleStatement statement = new AlterShardingTableRuleStatement(Arrays.asList(createCompleteAutoTableRule("T_ORDER_ITEM"), createCompleteTableRule("T_ORDER")));
+ updater.checkSQLStatement(shardingSphereMetaData, statement, currentRuleConfig);
+ ShardingRuleConfiguration toBeAlteredRuleConfig = updater.buildToBeAlteredRuleConfiguration(statement);
+ updater.updateCurrentRuleConfiguration(currentRuleConfig, toBeAlteredRuleConfig);
+ assertThat(currentRuleConfig.getTables().size(), is(1));
+ ShardingTableRuleConfiguration tableRule = currentRuleConfig.getTables().iterator().next();
+ assertThat(tableRule.getLogicTable(), is("T_ORDER"));
+ assertThat(tableRule.getActualDataNodes(), is("ds_${0..1}.t_order${0..1}"));
+ assertThat(tableRule.getTableShardingStrategy(), instanceOf(StandardShardingStrategyConfiguration.class));
+ assertThat(((StandardShardingStrategyConfiguration) tableRule.getTableShardingStrategy()).getShardingColumn(), is("product_id"));
+ assertThat(tableRule.getTableShardingStrategy().getShardingAlgorithmName(), is("t_order_algorithm"));
+ assertThat(tableRule.getDatabaseShardingStrategy(), instanceOf(StandardShardingStrategyConfiguration.class));
+ assertThat(tableRule.getDatabaseShardingStrategy().getShardingAlgorithmName(), is("t_order_database_inline"));
+ assertThat(currentRuleConfig.getTables().size(), is(1));
+ ShardingAutoTableRuleConfiguration autoTableRule = currentRuleConfig.getAutoTables().iterator().next();
+ assertThat(autoTableRule.getLogicTable(), is("T_ORDER_ITEM"));
+ assertThat(autoTableRule.getActualDataSources(), is("ds_0,ds_1"));
+ assertThat(autoTableRule.getShardingStrategy().getShardingAlgorithmName(), is("t_order_item_foo.distsql.fixture"));
+ assertThat(((StandardShardingStrategyConfiguration) autoTableRule.getShardingStrategy()).getShardingColumn(), is("order_id"));
+ assertThat(autoTableRule.getKeyGenerateStrategy().getColumn(), is("product_id"));
+ assertThat(autoTableRule.getKeyGenerateStrategy().getKeyGeneratorName(), is("t_order_item_distsql.fixture"));
+ }
+
@Test
public void assertUpdateTableType() throws DistSQLException {
AlterShardingTableRuleStatement statement = new AlterShardingTableRuleStatement(Arrays.asList(createCompleteAutoTableRule("t_order"), createCompleteTableRule("t_order_item")));
diff --git a/shardingsphere-features/shardingsphere-sharding/shardingsphere-sharding-distsql/shardingsphere-sharding-distsql-handler/src/test/java/org/apache/shardingsphere/sharding/distsql/update/CreateShardingBindingTableRuleStatementUpdaterTest.java b/shardingsphere-features/shardingsphere-sharding/shardingsphere-sharding-distsql/shardingsphere-sharding-distsql-handler/src/test/java/org/apache/shardingsphere/sharding/distsql/update/CreateShardingBindingTableRuleStatementUpdaterTest.java
index f1e7287d873..4e9b1a5c46d 100644
--- a/shardingsphere-features/shardingsphere-sharding/shardingsphere-sharding-distsql/shardingsphere-sharding-distsql-handler/src/test/java/org/apache/shardingsphere/sharding/distsql/update/CreateShardingBindingTableRuleStatementUpdaterTest.java
+++ b/shardingsphere-features/shardingsphere-sharding/shardingsphere-sharding-distsql/shardingsphere-sharding-distsql-handler/src/test/java/org/apache/shardingsphere/sharding/distsql/update/CreateShardingBindingTableRuleStatementUpdaterTest.java
@@ -32,6 +32,7 @@ import org.mockito.Mock;
import org.mockito.junit.MockitoJUnitRunner;
import java.util.Arrays;
+import java.util.List;
@RunWith(MockitoJUnitRunner.class)
public final class CreateShardingBindingTableRuleStatementUpdaterTest {
@@ -48,15 +49,20 @@ public final class CreateShardingBindingTableRuleStatementUpdaterTest {
@Test(expected = DuplicateRuleException.class)
public void assertCheckSQLStatementWithDuplicateTables() throws DistSQLException {
- updater.checkSQLStatement(shardingSphereMetaData, createDuplicatedSQLStatement(), getCurrentRuleConfig());
+ List<BindingTableRuleSegment> segments = Arrays.asList(new BindingTableRuleSegment("t_order,t_order_item"), new BindingTableRuleSegment("t_order,t_order_item"));
+ CreateShardingBindingTableRulesStatement statement = new CreateShardingBindingTableRulesStatement(segments);
+ updater.checkSQLStatement(shardingSphereMetaData, statement, getCurrentRuleConfig());
}
- private CreateShardingBindingTableRulesStatement createSQLStatement() {
- return new CreateShardingBindingTableRulesStatement(Arrays.asList(new BindingTableRuleSegment("t_order,t_order_item"), new BindingTableRuleSegment("t_1,t_2")));
+ @Test(expected = DuplicateRuleException.class)
+ public void assertCheckSQLStatementWithDifferentCaseDuplicateTables() throws DistSQLException {
+ List<BindingTableRuleSegment> segments = Arrays.asList(new BindingTableRuleSegment("T_ORDER,T_ORDER_ITEM"), new BindingTableRuleSegment("t_order,t_order_item"));
+ CreateShardingBindingTableRulesStatement statement = new CreateShardingBindingTableRulesStatement(segments);
+ updater.checkSQLStatement(shardingSphereMetaData, statement, getCurrentRuleConfig());
}
- private CreateShardingBindingTableRulesStatement createDuplicatedSQLStatement() {
- return new CreateShardingBindingTableRulesStatement(Arrays.asList(new BindingTableRuleSegment("t_order,t_order_item"), new BindingTableRuleSegment("t_order,t_order_item")));
+ private CreateShardingBindingTableRulesStatement createSQLStatement() {
+ return new CreateShardingBindingTableRulesStatement(Arrays.asList(new BindingTableRuleSegment("t_order,t_order_item"), new BindingTableRuleSegment("t_1,t_2")));
}
private ShardingRuleConfiguration getCurrentRuleConfig() {
diff --git a/shardingsphere-features/shardingsphere-sharding/shardingsphere-sharding-distsql/shardingsphere-sharding-distsql-handler/src/test/java/org/apache/shardingsphere/sharding/distsql/update/DropShardingBindingTableRuleStatementUpdaterTest.java b/shardingsphere-features/shardingsphere-sharding/shardingsphere-sharding-distsql/shardingsphere-sharding-distsql-handler/src/test/java/org/apache/shardingsphere/sharding/distsql/update/DropShardingBindingTableRuleStatementUpdaterTest.java
index 77ed0a6d3a1..c4dfcad1176 100644
--- a/shardingsphere-features/shardingsphere-sharding/shardingsphere-sharding-distsql/shardingsphere-sharding-distsql-handler/src/test/java/org/apache/shardingsphere/sharding/distsql/update/DropShardingBindingTableRuleStatementUpdaterTest.java
+++ b/shardingsphere-features/shardingsphere-sharding/shardingsphere-sharding-distsql/shardingsphere-sharding-distsql-handler/src/test/java/org/apache/shardingsphere/sharding/distsql/update/DropShardingBindingTableRuleStatementUpdaterTest.java
@@ -67,12 +67,6 @@ public final class DropShardingBindingTableRuleStatementUpdaterTest {
updater.checkSQLStatement(shardingSphereMetaData, createSQLStatement(true, "t_1,t_2"), shardingRuleConfig);
}
- @Test(expected = RequiredRuleMissedException.class)
- public void assertCheckSQLStatementIsNotTheSame() throws DistSQLException {
- ShardingRuleConfiguration currentRuleConfig = createCurrentRuleConfiguration();
- updater.checkSQLStatement(shardingSphereMetaData, createSQLStatement("t"), currentRuleConfig);
- }
-
@Test
public void assertDropAllCurrentRuleConfiguration() {
ShardingRuleConfiguration currentRuleConfig = createCurrentRuleConfiguration();
@@ -106,7 +100,7 @@ public final class DropShardingBindingTableRuleStatementUpdaterTest {
}
@Test
- public void assertDropWrongOrderRulesCurrentRuleConfiguration() throws DistSQLException {
+ public void assertDropRulesCurrentRuleConfigurationWithNoOrder() throws DistSQLException {
ShardingRuleConfiguration currentRuleConfig = createCurrentRuleConfiguration();
currentRuleConfig.getBindingTableGroups().add("t_1,t_2,t_3");
DropShardingBindingTableRulesStatement sqlStatement = createSQLStatement("t_3,t_2,t_1");
@@ -117,6 +111,18 @@ public final class DropShardingBindingTableRuleStatementUpdaterTest {
assertFalse(currentRuleConfig.getBindingTableGroups().contains("t_1,t_2,t_3"));
}
+ @Test
+ public void assertDropRulesCurrentRuleConfigurationWithDifferentCase() throws DistSQLException {
+ ShardingRuleConfiguration currentRuleConfig = createCurrentRuleConfiguration();
+ currentRuleConfig.getBindingTableGroups().add("t_1,t_2,t_3");
+ DropShardingBindingTableRulesStatement sqlStatement = createSQLStatement("T_3,T_2,T_1");
+ updater.checkSQLStatement(shardingSphereMetaData, sqlStatement, currentRuleConfig);
+ updater.updateCurrentRuleConfiguration(sqlStatement, currentRuleConfig);
+ assertThat(currentRuleConfig.getBindingTableGroups().size(), is(1));
+ assertTrue(currentRuleConfig.getBindingTableGroups().contains("t_order,t_order_item"));
+ assertFalse(currentRuleConfig.getBindingTableGroups().contains("t_1,t_2,t_3"));
+ }
+
private DropShardingBindingTableRulesStatement createSQLStatement(final String... group) {
Collection<BindingTableRuleSegment> segments = Arrays.stream(group).map(BindingTableRuleSegment::new).collect(Collectors.toList());
return new DropShardingBindingTableRulesStatement(segments);
diff --git a/shardingsphere-features/shardingsphere-sharding/shardingsphere-sharding-distsql/shardingsphere-sharding-distsql-handler/src/test/java/org/apache/shardingsphere/sharding/distsql/update/DropShardingBroadcastTableRuleStatementUpdaterTest.java b/shardingsphere-features/shardingsphere-sharding/shardingsphere-sharding-distsql/shardingsphere-sharding-distsql-handler/src/test/java/org/apache/shardingsphere/sharding/distsql/update/DropShardingBroadcastTableRuleStatementUpdaterTest.java
index 18f32d8f27e..22c3e201c73 100644
--- a/shardingsphere-features/shardingsphere-sharding/shardingsphere-sharding-distsql/shardingsphere-sharding-distsql-handler/src/test/java/org/apache/shardingsphere/sharding/distsql/update/DropShardingBroadcastTableRuleStatementUpdaterTest.java
+++ b/shardingsphere-features/shardingsphere-sharding/shardingsphere-sharding-distsql/shardingsphere-sharding-distsql-handler/src/test/java/org/apache/shardingsphere/sharding/distsql/update/DropShardingBroadcastTableRuleStatementUpdaterTest.java
@@ -78,6 +78,13 @@ public final class DropShardingBroadcastTableRuleStatementUpdaterTest {
assertTrue(currentRuleConfig.getBroadcastTables().isEmpty());
}
+ @Test
+ public void assertDropSpecifiedCurrentRuleConfigurationWithDifferentCase() {
+ ShardingRuleConfiguration currentRuleConfig = createCurrentRuleConfiguration();
+ updater.updateCurrentRuleConfiguration(createSQLStatement("T_ORDER"), currentRuleConfig);
+ assertTrue(currentRuleConfig.getBroadcastTables().isEmpty());
+ }
+
@Test
public void assertAllCurrentRuleConfiguration() {
ShardingRuleConfiguration currentRuleConfig = createCurrentRuleConfiguration();
diff --git a/shardingsphere-features/shardingsphere-sharding/shardingsphere-sharding-distsql/shardingsphere-sharding-distsql-handler/src/test/java/org/apache/shardingsphere/sharding/distsql/update/DropShardingKeyGeneratorStatementUpdaterTest.java b/shardingsphere-features/shardingsphere-sharding/shardingsphere-sharding-distsql/shardingsphere-sharding-distsql-handler/src/test/java/org/apache/shardingsphere/sharding/distsql/update/DropShardingKeyGeneratorStatementUpdaterTest.java
index e4ee8ae64bb..8e55825232f 100644
--- a/shardingsphere-features/shardingsphere-sharding/shardingsphere-sharding-distsql/shardingsphere-sharding-distsql-handler/src/test/java/org/apache/shardingsphere/sharding/distsql/update/DropShardingKeyGeneratorStatementUpdaterTest.java
+++ b/shardingsphere-features/shardingsphere-sharding/shardingsphere-sharding-distsql/shardingsphere-sharding-distsql-handler/src/test/java/org/apache/shardingsphere/sharding/distsql/update/DropShardingKeyGeneratorStatementUpdaterTest.java
@@ -19,7 +19,6 @@ package org.apache.shardingsphere.sharding.distsql.update;
import org.apache.shardingsphere.infra.config.algorithm.ShardingSphereAlgorithmConfiguration;
import org.apache.shardingsphere.infra.distsql.exception.DistSQLException;
-import org.apache.shardingsphere.infra.distsql.exception.rule.DuplicateKeyGeneratorException;
import org.apache.shardingsphere.infra.distsql.exception.rule.KeyGeneratorInUsedException;
import org.apache.shardingsphere.infra.distsql.exception.rule.RequiredKeyGeneratorMissedException;
import org.apache.shardingsphere.infra.metadata.ShardingSphereMetaData;
@@ -54,11 +53,6 @@ public final class DropShardingKeyGeneratorStatementUpdaterTest {
when(shardingSphereMetaData.getDatabaseName()).thenReturn("test");
}
- @Test(expected = DuplicateKeyGeneratorException.class)
- public void assertExecuteWithDuplicate() throws DistSQLException {
- updater.checkSQLStatement(shardingSphereMetaData, createSQLStatement("uuid_key_generator", "uuid_key_generator"), null);
- }
-
@Test(expected = RequiredKeyGeneratorMissedException.class)
public void assertExecuteWithNotExist() throws DistSQLException {
updater.checkSQLStatement(shardingSphereMetaData, createSQLStatement("uuid_key_generator"), new ShardingRuleConfiguration());
diff --git a/shardingsphere-features/shardingsphere-sharding/shardingsphere-sharding-distsql/shardingsphere-sharding-distsql-handler/src/test/java/org/apache/shardingsphere/sharding/distsql/update/DropShardingTableRuleStatementUpdaterTest.java b/shardingsphere-features/shardingsphere-sharding/shardingsphere-sharding-distsql/shardingsphere-sharding-distsql-handler/src/test/java/org/apache/shardingsphere/sharding/distsql/update/DropShardingTableRuleStatementUpdaterTest.java
index 14d238d3101..60334252f6b 100644
--- a/shardingsphere-features/shardingsphere-sharding/shardingsphere-sharding-distsql/shardingsphere-sharding-distsql-handler/src/test/java/org/apache/shardingsphere/sharding/distsql/update/DropShardingTableRuleStatementUpdaterTest.java
+++ b/shardingsphere-features/shardingsphere-sharding/shardingsphere-sharding-distsql/shardingsphere-sharding-distsql-handler/src/test/java/org/apache/shardingsphere/sharding/distsql/update/DropShardingTableRuleStatementUpdaterTest.java
@@ -76,13 +76,21 @@ public final class DropShardingTableRuleStatementUpdaterTest {
}
@Test
- public void assertDropRule() {
+ public void assertUpdate() {
ShardingRuleConfiguration currentRuleConfig = createCurrentRuleConfiguration();
updater.updateCurrentRuleConfiguration(createSQLStatement("t_order"), currentRuleConfig);
assertFalse(getShardingTables(currentRuleConfig).contains("t_order"));
assertTrue(getBindingTables(currentRuleConfig).contains("t_order_item"));
}
+ @Test
+ public void assertUpdateWithDifferentCase() {
+ ShardingRuleConfiguration currentRuleConfig = createCurrentRuleConfiguration();
+ updater.updateCurrentRuleConfiguration(createSQLStatement("T_ORDER"), currentRuleConfig);
+ assertFalse(getShardingTables(currentRuleConfig).contains("t_order"));
+ assertTrue(getBindingTables(currentRuleConfig).contains("t_order_item"));
+ }
+
@Test
public void assertDropRuleAndUnusedAlgorithm() {
ShardingRuleConfiguration currentRuleConfig = createCurrentRuleConfiguration();
diff --git a/shardingsphere-infra/shardingsphere-infra-common/src/main/java/org/apache/shardingsphere/infra/distsql/update/RuleDefinitionDropUpdater.java b/shardingsphere-infra/shardingsphere-infra-common/src/main/java/org/apache/shardingsphere/infra/distsql/update/RuleDefinitionDropUpdater.java
index ac2095e42a0..10692cfc8d3 100644
--- a/shardingsphere-infra/shardingsphere-infra-common/src/main/java/org/apache/shardingsphere/infra/distsql/update/RuleDefinitionDropUpdater.java
+++ b/shardingsphere-infra/shardingsphere-infra-common/src/main/java/org/apache/shardingsphere/infra/distsql/update/RuleDefinitionDropUpdater.java
@@ -69,6 +69,6 @@ public interface RuleDefinitionDropUpdater<T extends SQLStatement, R extends Rul
* @return identical data
*/
default Collection<String> getIdenticalData(Collection<String> currentRules, Collection<String> toBeDroppedRules) {
- return currentRules.stream().filter(toBeDroppedRules::contains).collect(Collectors.toSet());
+ return currentRules.stream().filter(each -> toBeDroppedRules.stream().anyMatch(each::equalsIgnoreCase)).collect(Collectors.toSet());
}
}