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 e5ad8ea84f9 Refactor ifNotExists of CREATE BROADCAST TABLE RULE.
(#23513)
e5ad8ea84f9 is described below
commit e5ad8ea84f959cd6f936b8278f7656fdf55dff1d
Author: yx9o <[email protected]>
AuthorDate: Thu Jan 12 01:30:39 2023 +0800
Refactor ifNotExists of CREATE BROADCAST TABLE RULE. (#23513)
---
.../CreateBroadcastTableRuleStatementUpdater.java | 49 ++++++++++------------
...eateBroadcastTableRuleStatementUpdaterTest.java | 3 +-
2 files changed, 24 insertions(+), 28 deletions(-)
diff --git
a/features/sharding/distsql/handler/src/main/java/org/apache/shardingsphere/sharding/distsql/handler/update/CreateBroadcastTableRuleStatementUpdater.java
b/features/sharding/distsql/handler/src/main/java/org/apache/shardingsphere/sharding/distsql/handler/update/CreateBroadcastTableRuleStatementUpdater.java
index c0ae5512b83..3d145a5e8b9 100644
---
a/features/sharding/distsql/handler/src/main/java/org/apache/shardingsphere/sharding/distsql/handler/update/CreateBroadcastTableRuleStatementUpdater.java
+++
b/features/sharding/distsql/handler/src/main/java/org/apache/shardingsphere/sharding/distsql/handler/update/CreateBroadcastTableRuleStatementUpdater.java
@@ -18,8 +18,6 @@
package org.apache.shardingsphere.sharding.distsql.handler.update;
import
org.apache.shardingsphere.distsql.handler.exception.rule.DuplicateRuleException;
-import
org.apache.shardingsphere.distsql.handler.exception.rule.RuleDefinitionViolationException;
-import
org.apache.shardingsphere.distsql.handler.exception.rule.RuleInUsedException;
import
org.apache.shardingsphere.distsql.handler.update.RuleDefinitionCreateUpdater;
import
org.apache.shardingsphere.infra.metadata.database.ShardingSphereDatabase;
import
org.apache.shardingsphere.infra.util.exception.ShardingSpherePreconditions;
@@ -27,52 +25,51 @@ import
org.apache.shardingsphere.sharding.api.config.ShardingRuleConfiguration;
import
org.apache.shardingsphere.sharding.distsql.parser.statement.CreateBroadcastTableRuleStatement;
import java.util.Collection;
-import java.util.LinkedList;
+import java.util.LinkedHashSet;
/**
* Create broadcast table rule statement updater.
*/
public final class CreateBroadcastTableRuleStatementUpdater implements
RuleDefinitionCreateUpdater<CreateBroadcastTableRuleStatement,
ShardingRuleConfiguration> {
- private boolean ifNotExists;
-
@Override
- public void checkSQLStatement(final ShardingSphereDatabase database, final
CreateBroadcastTableRuleStatement sqlStatement,
- final ShardingRuleConfiguration
currentRuleConfig) throws RuleDefinitionViolationException {
- ifNotExists = sqlStatement.isIfNotExists();
- if (!ifNotExists) {
+ public void checkSQLStatement(final ShardingSphereDatabase database, final
CreateBroadcastTableRuleStatement sqlStatement, final ShardingRuleConfiguration
currentRuleConfig) {
+ if (!sqlStatement.isIfNotExists()) {
checkDuplicate(sqlStatement, currentRuleConfig);
}
}
- private void checkDuplicate(final CreateBroadcastTableRuleStatement
sqlStatement, final ShardingRuleConfiguration currentRuleConfig) throws
RuleInUsedException {
- if (null == currentRuleConfig ||
currentRuleConfig.getBroadcastTables().isEmpty()) {
- return;
- }
- Collection<String> duplicateBroadcastTables = new
LinkedList<>(currentRuleConfig.getBroadcastTables());
- duplicateBroadcastTables.retainAll(sqlStatement.getTables());
-
ShardingSpherePreconditions.checkState(duplicateBroadcastTables.isEmpty(), ()
-> new DuplicateRuleException("Broadcast", sqlStatement.getTables()));
- }
-
@Override
public ShardingRuleConfiguration buildToBeCreatedRuleConfiguration(final
ShardingRuleConfiguration currentRuleConfig, final
CreateBroadcastTableRuleStatement sqlStatement) {
ShardingRuleConfiguration result = new ShardingRuleConfiguration();
- result.setBroadcastTables(sqlStatement.getTables());
+ Collection<String> tables = sqlStatement.getTables();
+ if (sqlStatement.isIfNotExists()) {
+ Collection<String> duplicatedRuleNames =
getDuplicatedRuleNames(sqlStatement, currentRuleConfig);
+ tables.removeIf(each -> duplicatedRuleNames.contains(each));
+ }
+ result.setBroadcastTables(tables);
return result;
}
@Override
public void updateCurrentRuleConfiguration(final ShardingRuleConfiguration
currentRuleConfig, final ShardingRuleConfiguration toBeCreatedRuleConfig) {
- if (ifNotExists) {
- Collection<String> currentBroadCastTables =
currentRuleConfig.getBroadcastTables();
-
toBeCreatedRuleConfig.getBroadcastTables().removeIf(currentBroadCastTables::contains);
- }
- if (toBeCreatedRuleConfig.getBroadcastTables().isEmpty()) {
- return;
- }
currentRuleConfig.getBroadcastTables().addAll(toBeCreatedRuleConfig.getBroadcastTables());
}
+ private Collection<String> getDuplicatedRuleNames(final
CreateBroadcastTableRuleStatement sqlStatement, final ShardingRuleConfiguration
currentRuleConfig) {
+ Collection<String> result = new LinkedHashSet<>();
+ if (null != currentRuleConfig &&
!currentRuleConfig.getBroadcastTables().isEmpty()) {
+ result.addAll(currentRuleConfig.getBroadcastTables());
+ }
+ result.retainAll(sqlStatement.getTables());
+ return result;
+ }
+
+ private void checkDuplicate(final CreateBroadcastTableRuleStatement
sqlStatement, final ShardingRuleConfiguration currentRuleConfig) {
+ Collection<String> duplicatedRuleNames =
getDuplicatedRuleNames(sqlStatement, currentRuleConfig);
+ ShardingSpherePreconditions.checkState(duplicatedRuleNames.isEmpty(),
() -> new DuplicateRuleException("Broadcast", sqlStatement.getTables()));
+ }
+
@Override
public Class<ShardingRuleConfiguration> getRuleConfigurationClass() {
return ShardingRuleConfiguration.class;
diff --git
a/features/sharding/distsql/handler/src/test/java/org/apache/shardingsphere/sharding/distsql/update/CreateBroadcastTableRuleStatementUpdaterTest.java
b/features/sharding/distsql/handler/src/test/java/org/apache/shardingsphere/sharding/distsql/update/CreateBroadcastTableRuleStatementUpdaterTest.java
index b6a58064e34..acb2898aca6 100644
---
a/features/sharding/distsql/handler/src/test/java/org/apache/shardingsphere/sharding/distsql/update/CreateBroadcastTableRuleStatementUpdaterTest.java
+++
b/features/sharding/distsql/handler/src/test/java/org/apache/shardingsphere/sharding/distsql/update/CreateBroadcastTableRuleStatementUpdaterTest.java
@@ -98,8 +98,7 @@ public final class
CreateBroadcastTableRuleStatementUpdaterTest {
private ShardingRuleConfiguration createCurrentRuleConfiguration() {
ShardingRuleConfiguration result = new ShardingRuleConfiguration();
- result.getBroadcastTables().add("t_order");
- result.getBroadcastTables().add("t_address");
+ result.getBroadcastTables().addAll(Arrays.asList("t_order",
"t_address"));
return result;
}
}