You are viewing a plain text version of this content. The canonical link for it is here.
Posted to notifications@shardingsphere.apache.org by du...@apache.org on 2021/06/28 11:02:00 UTC
[shardingsphere] branch master updated: Add
RDLCreateUpdater.buildToBeCreatedRuleConfiguration() (#11044)
This is an automated email from the ASF dual-hosted git repository.
duanzhengqiang 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 568d774 Add RDLCreateUpdater.buildToBeCreatedRuleConfiguration() (#11044)
568d774 is described below
commit 568d774c08acf42332d72532d93b05b390ea621d
Author: Liang Zhang <te...@163.com>
AuthorDate: Mon Jun 28 19:01:29 2021 +0800
Add RDLCreateUpdater.buildToBeCreatedRuleConfiguration() (#11044)
* Add RDLCreateUpdater.buildToBeCreatedRuleConfiguration()
* Fix test case
---
.../infra/distsql/update/RDLCreateUpdater.java | 13 +++++++++++--
.../text/distsql/rdl/impl/RDLBackendHandler.java | 5 +++--
...CreateDatabaseDiscoveryRuleStatementUpdater.java | 18 +++++++++++-------
.../updater/CreateEncryptRuleStatementUpdater.java | 17 +++++++++++------
...reateReadwriteSplittingRuleStatementUpdater.java | 18 +++++++++++-------
...ateShardingBindingTableRuleStatementUpdater.java | 10 +++++++---
...eShardingBroadcastTableRuleStatementUpdater.java | 21 ++++++++++++---------
.../CreateShardingTableRuleStatementUpdater.java | 10 +++++++---
8 files changed, 73 insertions(+), 39 deletions(-)
diff --git a/shardingsphere-infra/shardingsphere-infra-common/src/main/java/org/apache/shardingsphere/infra/distsql/update/RDLCreateUpdater.java b/shardingsphere-infra/shardingsphere-infra-common/src/main/java/org/apache/shardingsphere/infra/distsql/update/RDLCreateUpdater.java
index 0790463..272cfc2 100644
--- a/shardingsphere-infra/shardingsphere-infra-common/src/main/java/org/apache/shardingsphere/infra/distsql/update/RDLCreateUpdater.java
+++ b/shardingsphere-infra/shardingsphere-infra-common/src/main/java/org/apache/shardingsphere/infra/distsql/update/RDLCreateUpdater.java
@@ -29,12 +29,21 @@ import org.apache.shardingsphere.sql.parser.sql.common.statement.SQLStatement;
public interface RDLCreateUpdater<T extends SQLStatement, R extends RuleConfiguration> extends RDLUpdater<T, R> {
/**
+ * Build to be created rule configuration.
+ *
+ * @param schemaName schema name
+ * @param sqlStatement SQL statement
+ * @return built to be created rule configuration
+ */
+ RuleConfiguration buildToBeCreatedRuleConfiguration(String schemaName, T sqlStatement);
+
+ /**
* Update current rule configuration.
*
* @param schemaName schema name
* @param sqlStatement SQL statement
* @param currentRuleConfig current rule configuration to be updated
- * @return to be created rule configuration
+ * @param toBeCreatedRuleConfig to be created rule configuration
*/
- RuleConfiguration updateCurrentRuleConfiguration(String schemaName, T sqlStatement, R currentRuleConfig);
+ void updateCurrentRuleConfiguration(String schemaName, T sqlStatement, R currentRuleConfig, R toBeCreatedRuleConfig);
}
diff --git a/shardingsphere-proxy/shardingsphere-proxy-backend/src/main/java/org/apache/shardingsphere/proxy/backend/text/distsql/rdl/impl/RDLBackendHandler.java b/shardingsphere-proxy/shardingsphere-proxy-backend/src/main/java/org/apache/shardingsphere/proxy/backend/text/distsql/rdl/impl/RDLBackendHandler.java
index f20a227..1208a71 100644
--- a/shardingsphere-proxy/shardingsphere-proxy-backend/src/main/java/org/apache/shardingsphere/proxy/backend/text/distsql/rdl/impl/RDLBackendHandler.java
+++ b/shardingsphere-proxy/shardingsphere-proxy-backend/src/main/java/org/apache/shardingsphere/proxy/backend/text/distsql/rdl/impl/RDLBackendHandler.java
@@ -61,8 +61,9 @@ public abstract class RDLBackendHandler<T extends SQLStatement, R extends Schema
RDLUpdater rdlUpdater = TypedSPIRegistry.getRegisteredService(RDLUpdater.class, sqlStatement.getClass().getCanonicalName(), new Properties());
rdlUpdater.checkSQLStatement(schemaName, sqlStatement, currentRuleConfig, ProxyContext.getInstance().getMetaData(schemaName).getResource());
if (rdlUpdater instanceof RDLCreateUpdater) {
- RuleConfiguration toBeCreatedRuleConfig = ((RDLCreateUpdater) rdlUpdater).updateCurrentRuleConfiguration(schemaName, sqlStatement, currentRuleConfig);
- if (null == currentRuleConfig) {
+ RuleConfiguration toBeCreatedRuleConfig = ((RDLCreateUpdater) rdlUpdater).buildToBeCreatedRuleConfiguration(schemaName, sqlStatement);
+ ((RDLCreateUpdater) rdlUpdater).updateCurrentRuleConfiguration(schemaName, sqlStatement, currentRuleConfig, toBeCreatedRuleConfig);
+ if (null == currentRuleConfig && null != toBeCreatedRuleConfig) {
ProxyContext.getInstance().getMetaData(schemaName).getRuleMetaData().getConfigurations().add(toBeCreatedRuleConfig);
}
} else if (rdlUpdater instanceof RDLAlterUpdater) {
diff --git a/shardingsphere-proxy/shardingsphere-proxy-backend/src/main/java/org/apache/shardingsphere/proxy/backend/text/distsql/rdl/impl/updater/CreateDatabaseDiscoveryRuleStatementUpdater.java b/shardingsphere-proxy/shardingsphere-proxy-backend/src/main/java/org/apache/shardingsphere/proxy/backend/text/distsql/rdl/impl/updater/CreateDatabaseDiscoveryRuleStatementUpdater.java
index f7a06f3..7636c21 100644
--- a/shardingsphere-proxy/shardingsphere-proxy-backend/src/main/java/org/apache/shardingsphere/proxy/backend/text/distsql/rdl/impl/updater/CreateDatabaseDiscoveryRuleStatementUpdater.java
+++ b/shardingsphere-proxy/shardingsphere-proxy-backend/src/main/java/org/apache/shardingsphere/proxy/backend/text/distsql/rdl/impl/updater/CreateDatabaseDiscoveryRuleStatementUpdater.java
@@ -97,17 +97,21 @@ public final class CreateDatabaseDiscoveryRuleStatementUpdater implements RDLCre
}
@Override
- public DatabaseDiscoveryRuleConfiguration updateCurrentRuleConfiguration(final String schemaName,
- final CreateDatabaseDiscoveryRuleStatement sqlStatement, final DatabaseDiscoveryRuleConfiguration currentRuleConfig) {
- Optional<DatabaseDiscoveryRuleConfiguration> toBeCreatedRuleConfig = new YamlRuleConfigurationSwapperEngine()
+ public DatabaseDiscoveryRuleConfiguration buildToBeCreatedRuleConfiguration(final String schemaName, final CreateDatabaseDiscoveryRuleStatement sqlStatement) {
+ Optional<DatabaseDiscoveryRuleConfiguration> result = new YamlRuleConfigurationSwapperEngine()
.swapToRuleConfigurations(Collections.singleton(DatabaseDiscoveryRuleStatementConverter.convert(sqlStatement.getRules())))
.stream().filter(each -> each instanceof DatabaseDiscoveryRuleConfiguration).findAny().map(each -> (DatabaseDiscoveryRuleConfiguration) each);
- Preconditions.checkState(toBeCreatedRuleConfig.isPresent());
+ Preconditions.checkState(result.isPresent());
+ return result.get();
+ }
+
+ @Override
+ public void updateCurrentRuleConfiguration(final String schemaName, final CreateDatabaseDiscoveryRuleStatement sqlStatement,
+ final DatabaseDiscoveryRuleConfiguration currentRuleConfig, final DatabaseDiscoveryRuleConfiguration toBeCreatedRuleConfig) {
if (null != currentRuleConfig) {
- currentRuleConfig.getDataSources().addAll(toBeCreatedRuleConfig.get().getDataSources());
- currentRuleConfig.getDiscoveryTypes().putAll(toBeCreatedRuleConfig.get().getDiscoveryTypes());
+ currentRuleConfig.getDataSources().addAll(toBeCreatedRuleConfig.getDataSources());
+ currentRuleConfig.getDiscoveryTypes().putAll(toBeCreatedRuleConfig.getDiscoveryTypes());
}
- return toBeCreatedRuleConfig.get();
}
@Override
diff --git a/shardingsphere-proxy/shardingsphere-proxy-backend/src/main/java/org/apache/shardingsphere/proxy/backend/text/distsql/rdl/impl/updater/CreateEncryptRuleStatementUpdater.java b/shardingsphere-proxy/shardingsphere-proxy-backend/src/main/java/org/apache/shardingsphere/proxy/backend/text/distsql/rdl/impl/updater/CreateEncryptRuleStatementUpdater.java
index 01439c9..9e4a5d5 100644
--- a/shardingsphere-proxy/shardingsphere-proxy-backend/src/main/java/org/apache/shardingsphere/proxy/backend/text/distsql/rdl/impl/updater/CreateEncryptRuleStatementUpdater.java
+++ b/shardingsphere-proxy/shardingsphere-proxy-backend/src/main/java/org/apache/shardingsphere/proxy/backend/text/distsql/rdl/impl/updater/CreateEncryptRuleStatementUpdater.java
@@ -77,16 +77,21 @@ public final class CreateEncryptRuleStatementUpdater implements RDLCreateUpdater
}
@Override
- public EncryptRuleConfiguration updateCurrentRuleConfiguration(final String schemaName, final CreateEncryptRuleStatement sqlStatement, final EncryptRuleConfiguration currentRuleConfig) {
- Optional<EncryptRuleConfiguration> toBeCreatedRuleConfig = new YamlRuleConfigurationSwapperEngine()
+ public EncryptRuleConfiguration buildToBeCreatedRuleConfiguration(final String schemaName, final CreateEncryptRuleStatement sqlStatement) {
+ Optional<EncryptRuleConfiguration> result = new YamlRuleConfigurationSwapperEngine()
.swapToRuleConfigurations(Collections.singleton(EncryptRuleStatementConverter.convert(sqlStatement.getRules())))
.stream().filter(each -> each instanceof EncryptRuleConfiguration).findAny().map(each -> (EncryptRuleConfiguration) each);
- Preconditions.checkState(toBeCreatedRuleConfig.isPresent());
+ Preconditions.checkState(result.isPresent());
+ return result.get();
+ }
+
+ @Override
+ public void updateCurrentRuleConfiguration(final String schemaName, final CreateEncryptRuleStatement sqlStatement,
+ final EncryptRuleConfiguration currentRuleConfig, final EncryptRuleConfiguration toBeCreatedRuleConfig) {
if (null != currentRuleConfig) {
- currentRuleConfig.getTables().addAll(toBeCreatedRuleConfig.get().getTables());
- currentRuleConfig.getEncryptors().putAll(toBeCreatedRuleConfig.get().getEncryptors());
+ currentRuleConfig.getTables().addAll(toBeCreatedRuleConfig.getTables());
+ currentRuleConfig.getEncryptors().putAll(toBeCreatedRuleConfig.getEncryptors());
}
- return toBeCreatedRuleConfig.get();
}
@Override
diff --git a/shardingsphere-proxy/shardingsphere-proxy-backend/src/main/java/org/apache/shardingsphere/proxy/backend/text/distsql/rdl/impl/updater/CreateReadwriteSplittingRuleStatementUpdater.java b/shardingsphere-proxy/shardingsphere-proxy-backend/src/main/java/org/apache/shardingsphere/proxy/backend/text/distsql/rdl/impl/updater/CreateReadwriteSplittingRuleStatementUpdater.java
index c8bbe2a..bc058ab 100644
--- a/shardingsphere-proxy/shardingsphere-proxy-backend/src/main/java/org/apache/shardingsphere/proxy/backend/text/distsql/rdl/impl/updater/CreateReadwriteSplittingRuleStatementUpdater.java
+++ b/shardingsphere-proxy/shardingsphere-proxy-backend/src/main/java/org/apache/shardingsphere/proxy/backend/text/distsql/rdl/impl/updater/CreateReadwriteSplittingRuleStatementUpdater.java
@@ -94,17 +94,21 @@ public final class CreateReadwriteSplittingRuleStatementUpdater implements RDLCr
}
@Override
- public ReadwriteSplittingRuleConfiguration updateCurrentRuleConfiguration(final String schemaName,
- final CreateReadwriteSplittingRuleStatement sqlStatement, final ReadwriteSplittingRuleConfiguration currentRuleConfig) {
- Optional<ReadwriteSplittingRuleConfiguration> toBeCreatedRuleConfig = new YamlRuleConfigurationSwapperEngine()
+ public ReadwriteSplittingRuleConfiguration buildToBeCreatedRuleConfiguration(final String schemaName, final CreateReadwriteSplittingRuleStatement sqlStatement) {
+ Optional<ReadwriteSplittingRuleConfiguration> result = new YamlRuleConfigurationSwapperEngine()
.swapToRuleConfigurations(Collections.singleton(ReadwriteSplittingRuleStatementConverter.convert(sqlStatement)))
.stream().filter(each -> each instanceof ReadwriteSplittingRuleConfiguration).findAny().map(each -> (ReadwriteSplittingRuleConfiguration) each);
- Preconditions.checkState(toBeCreatedRuleConfig.isPresent());
+ Preconditions.checkState(result.isPresent());
+ return result.get();
+ }
+
+ @Override
+ public void updateCurrentRuleConfiguration(final String schemaName, final CreateReadwriteSplittingRuleStatement sqlStatement,
+ final ReadwriteSplittingRuleConfiguration currentRuleConfig, final ReadwriteSplittingRuleConfiguration toBeCreatedRuleConfig) {
if (null != currentRuleConfig) {
- currentRuleConfig.getDataSources().addAll(toBeCreatedRuleConfig.get().getDataSources());
- currentRuleConfig.getLoadBalancers().putAll(toBeCreatedRuleConfig.get().getLoadBalancers());
+ currentRuleConfig.getDataSources().addAll(toBeCreatedRuleConfig.getDataSources());
+ currentRuleConfig.getLoadBalancers().putAll(toBeCreatedRuleConfig.getLoadBalancers());
}
- return toBeCreatedRuleConfig.get();
}
@Override
diff --git a/shardingsphere-proxy/shardingsphere-proxy-backend/src/main/java/org/apache/shardingsphere/proxy/backend/text/distsql/rdl/impl/updater/CreateShardingBindingTableRuleStatementUpdater.java b/shardingsphere-proxy/shardingsphere-proxy-backend/src/main/java/org/apache/shardingsphere/proxy/backend/text/distsql/rdl/impl/updater/CreateShardingBindingTableRuleStatementUpdater.java
index 72ed4e0..79bc59d 100644
--- a/shardingsphere-proxy/shardingsphere-proxy-backend/src/main/java/org/apache/shardingsphere/proxy/backend/text/distsql/rdl/impl/updater/CreateShardingBindingTableRuleStatementUpdater.java
+++ b/shardingsphere-proxy/shardingsphere-proxy-backend/src/main/java/org/apache/shardingsphere/proxy/backend/text/distsql/rdl/impl/updater/CreateShardingBindingTableRuleStatementUpdater.java
@@ -86,13 +86,17 @@ public final class CreateShardingBindingTableRuleStatementUpdater implements RDL
}
@Override
- public ShardingRuleConfiguration updateCurrentRuleConfiguration(final String schemaName,
- final CreateShardingBindingTableRulesStatement sqlStatement, final ShardingRuleConfiguration currentRuleConfig) {
- currentRuleConfig.getBindingTableGroups().addAll(ShardingRuleStatementConverter.convert(sqlStatement).getBindingTables());
+ public ShardingRuleConfiguration buildToBeCreatedRuleConfiguration(final String schemaName, final CreateShardingBindingTableRulesStatement sqlStatement) {
return null;
}
@Override
+ public void updateCurrentRuleConfiguration(final String schemaName, final CreateShardingBindingTableRulesStatement sqlStatement,
+ final ShardingRuleConfiguration currentRuleConfig, final ShardingRuleConfiguration toBeCreatedRuleConfig) {
+ currentRuleConfig.getBindingTableGroups().addAll(ShardingRuleStatementConverter.convert(sqlStatement).getBindingTables());
+ }
+
+ @Override
public String getType() {
return CreateShardingBindingTableRulesStatement.class.getCanonicalName();
}
diff --git a/shardingsphere-proxy/shardingsphere-proxy-backend/src/main/java/org/apache/shardingsphere/proxy/backend/text/distsql/rdl/impl/updater/CreateShardingBroadcastTableRuleStatementUpdater.java b/shardingsphere-proxy/shardingsphere-proxy-backend/src/main/java/org/apache/shardingsphere/proxy/backend/text/distsql/rdl/impl/updater/CreateShardingBroadcastTableRuleStatementUpdater.java
index c84bd12..5252dde 100644
--- a/shardingsphere-proxy/shardingsphere-proxy-backend/src/main/java/org/apache/shardingsphere/proxy/backend/text/distsql/rdl/impl/updater/CreateShardingBroadcastTableRuleStatementUpdater.java
+++ b/shardingsphere-proxy/shardingsphere-proxy-backend/src/main/java/org/apache/shardingsphere/proxy/backend/text/distsql/rdl/impl/updater/CreateShardingBroadcastTableRuleStatementUpdater.java
@@ -34,18 +34,21 @@ public final class CreateShardingBroadcastTableRuleStatementUpdater implements R
}
@Override
- public ShardingRuleConfiguration updateCurrentRuleConfiguration(final String schemaName,
- final CreateShardingBroadcastTableRulesStatement sqlStatement, final ShardingRuleConfiguration currentRuleConfig) {
+ public ShardingRuleConfiguration buildToBeCreatedRuleConfiguration(final String schemaName, final CreateShardingBroadcastTableRulesStatement sqlStatement) {
+ return new ShardingRuleConfiguration();
+ }
+
+ @Override
+ public void updateCurrentRuleConfiguration(final String schemaName, final CreateShardingBroadcastTableRulesStatement sqlStatement,
+ final ShardingRuleConfiguration currentRuleConfig, final ShardingRuleConfiguration toBeCreatedRuleConfig) {
if (null == currentRuleConfig) {
- ShardingRuleConfiguration toBeCreatedRuleConfig = new ShardingRuleConfiguration();
toBeCreatedRuleConfig.setBroadcastTables(sqlStatement.getTables());
- return toBeCreatedRuleConfig;
- }
- if (!currentRuleConfig.getBroadcastTables().isEmpty()) {
- throw new ShardingBroadcastTableRuleExistedException(schemaName);
+ } else {
+ if (!currentRuleConfig.getBroadcastTables().isEmpty()) {
+ throw new ShardingBroadcastTableRuleExistedException(schemaName);
+ }
+ currentRuleConfig.getBroadcastTables().addAll(sqlStatement.getTables());
}
- currentRuleConfig.getBroadcastTables().addAll(sqlStatement.getTables());
- return null;
}
@Override
diff --git a/shardingsphere-proxy/shardingsphere-proxy-backend/src/main/java/org/apache/shardingsphere/proxy/backend/text/distsql/rdl/impl/updater/CreateShardingTableRuleStatementUpdater.java b/shardingsphere-proxy/shardingsphere-proxy-backend/src/main/java/org/apache/shardingsphere/proxy/backend/text/distsql/rdl/impl/updater/CreateShardingTableRuleStatementUpdater.java
index 22bb0fb..37dda0b 100644
--- a/shardingsphere-proxy/shardingsphere-proxy-backend/src/main/java/org/apache/shardingsphere/proxy/backend/text/distsql/rdl/impl/updater/CreateShardingTableRuleStatementUpdater.java
+++ b/shardingsphere-proxy/shardingsphere-proxy-backend/src/main/java/org/apache/shardingsphere/proxy/backend/text/distsql/rdl/impl/updater/CreateShardingTableRuleStatementUpdater.java
@@ -128,15 +128,19 @@ public final class CreateShardingTableRuleStatementUpdater implements RDLCreateU
}
@Override
- public ShardingRuleConfiguration updateCurrentRuleConfiguration(final String schemaName, final CreateShardingTableRuleStatement sqlStatement, final ShardingRuleConfiguration currentRuleConfig) {
- ShardingRuleConfiguration toBeCreatedRuleConfig = (ShardingRuleConfiguration) new YamlRuleConfigurationSwapperEngine()
+ public ShardingRuleConfiguration buildToBeCreatedRuleConfiguration(final String schemaName, final CreateShardingTableRuleStatement sqlStatement) {
+ return (ShardingRuleConfiguration) new YamlRuleConfigurationSwapperEngine()
.swapToRuleConfigurations(Collections.singleton(ShardingRuleStatementConverter.convert(sqlStatement))).iterator().next();
+ }
+
+ @Override
+ public void updateCurrentRuleConfiguration(final String schemaName, final CreateShardingTableRuleStatement sqlStatement,
+ final ShardingRuleConfiguration currentRuleConfig, final ShardingRuleConfiguration toBeCreatedRuleConfig) {
if (null != currentRuleConfig) {
currentRuleConfig.getAutoTables().addAll(toBeCreatedRuleConfig.getAutoTables());
currentRuleConfig.getShardingAlgorithms().putAll(toBeCreatedRuleConfig.getShardingAlgorithms());
currentRuleConfig.getKeyGenerators().putAll(toBeCreatedRuleConfig.getKeyGenerators());
}
- return toBeCreatedRuleConfig;
}
@Override