From a11651a5f17d244a238d3a4914594fdcf841f318 Mon Sep 17 00:00:00 2001 From: Liang Zhang Date: Sat, 31 Oct 2020 23:49:18 +0800 Subject: [PATCH] Remove SQLStatementContextConverter (#8000) * Remove SQLStatementContextConverter * Static XXXStatementContextConverter --- ...ShardingRuleStatementContextConverter.java | 27 +++++++++----- ...dingRuleStatementContextConverterTest.java | 18 ++++----- .../SQLStatementContextConverter.java | 37 ------------------- .../backend/text/admin/RDLBackendHandler.java | 6 +-- ...eDataSourcesStatementContextConverter.java | 17 ++++++--- ...aSourcesStatementContextConverterTest.java | 18 ++++----- 6 files changed, 50 insertions(+), 73 deletions(-) delete mode 100644 shardingsphere-infra/shardingsphere-infra-binder/src/main/java/org/apache/shardingsphere/infra/binder/converter/SQLStatementContextConverter.java diff --git a/shardingsphere-features/shardingsphere-sharding/shardingsphere-sharding-common/src/main/java/org/apache/shardingsphere/sharding/converter/CreateShardingRuleStatementContextConverter.java b/shardingsphere-features/shardingsphere-sharding/shardingsphere-sharding-common/src/main/java/org/apache/shardingsphere/sharding/converter/CreateShardingRuleStatementContextConverter.java index 9fe6cbcc34..a5aa9d84e5 100644 --- a/shardingsphere-features/shardingsphere-sharding/shardingsphere-sharding-common/src/main/java/org/apache/shardingsphere/sharding/converter/CreateShardingRuleStatementContextConverter.java +++ b/shardingsphere-features/shardingsphere-sharding/shardingsphere-sharding-common/src/main/java/org/apache/shardingsphere/sharding/converter/CreateShardingRuleStatementContextConverter.java @@ -19,8 +19,9 @@ package org.apache.shardingsphere.sharding.converter; import com.google.common.base.Joiner; import com.google.common.base.Preconditions; +import lombok.AccessLevel; +import lombok.NoArgsConstructor; import org.apache.shardingsphere.distsql.parser.segment.rdl.TableRuleSegment; -import org.apache.shardingsphere.infra.binder.converter.SQLStatementContextConverter; import org.apache.shardingsphere.infra.binder.statement.rdl.CreateShardingRuleStatementContext; import org.apache.shardingsphere.infra.config.algorithm.ShardingSphereAlgorithmPropertiesAware; import org.apache.shardingsphere.infra.spi.ShardingSphereServiceLoader; @@ -40,10 +41,16 @@ import java.util.Properties; /** * Create sharding rule statement context converter. */ -public final class CreateShardingRuleStatementContextConverter implements SQLStatementContextConverter { +@NoArgsConstructor(access = AccessLevel.PRIVATE) +public final class CreateShardingRuleStatementContextConverter { - @Override - public YamlShardingRuleConfiguration convert(final CreateShardingRuleStatementContext sqlStatementContext) { + /** + * Convert create sharding rule statement context to YAML sharding rule configuration. + * + * @param sqlStatementContext create sharding rule statement context + * @return YAML sharding rule configuration + */ + public static YamlShardingRuleConfiguration convert(final CreateShardingRuleStatementContext sqlStatementContext) { YamlShardingRuleConfiguration result = new YamlShardingRuleConfiguration(); for (TableRuleSegment each : sqlStatementContext.getSqlStatement().getTables()) { result.getShardingAlgorithms().put(getAlgorithmName(each.getLogicTable(), each.getAlgorithmType()), @@ -53,14 +60,14 @@ public final class CreateShardingRuleStatementContextConverter implements SQLSta return result; } - private YamlShardingSphereAlgorithmConfiguration createAlgorithmConfiguration(final TableRuleSegment segment, final Properties properties) { + private static YamlShardingSphereAlgorithmConfiguration createAlgorithmConfiguration(final TableRuleSegment segment, final Properties properties) { YamlShardingSphereAlgorithmConfiguration result = new YamlShardingSphereAlgorithmConfiguration(); result.setType(segment.getAlgorithmType()); result.setProps(properties); return result; } - private Properties getAlgorithmProperties(final String type, final Collection propertyValues) { + private static Properties getAlgorithmProperties(final String type, final Collection propertyValues) { Collection propertyKeys = findAlgorithmPropertyKeys(type); Preconditions.checkArgument(propertyKeys.size() == propertyValues.size(), "%s needs %d properties, but %s properties are given.", type, propertyKeys.size(), propertyValues.size()); Properties result = new Properties(); @@ -72,13 +79,13 @@ public final class CreateShardingRuleStatementContextConverter implements SQLSta return result; } - private Collection findAlgorithmPropertyKeys(final String algorithmType) { + private static Collection findAlgorithmPropertyKeys(final String algorithmType) { return ShardingSphereServiceLoader.newServiceInstances(ShardingAlgorithm.class).stream() .filter(each -> each instanceof ShardingAutoTableAlgorithm && each.getType().equals(algorithmType)).findFirst() .map(each -> ((ShardingSphereAlgorithmPropertiesAware) each).getAllPropertyKeys()).orElse(Collections.emptyList()); } - private YamlShardingAutoTableRuleConfiguration createAutoTableRuleConfiguration(final TableRuleSegment segment) { + private static YamlShardingAutoTableRuleConfiguration createAutoTableRuleConfiguration(final TableRuleSegment segment) { YamlShardingAutoTableRuleConfiguration result = new YamlShardingAutoTableRuleConfiguration(); result.setLogicTable(segment.getLogicTable()); result.setActualDataSources(Joiner.on(",").join(segment.getDataSources())); @@ -86,7 +93,7 @@ public final class CreateShardingRuleStatementContextConverter implements SQLSta return result; } - private YamlShardingStrategyConfiguration createStrategyConfiguration(final TableRuleSegment segment) { + private static YamlShardingStrategyConfiguration createStrategyConfiguration(final TableRuleSegment segment) { YamlShardingStrategyConfiguration result = new YamlShardingStrategyConfiguration(); YamlStandardShardingStrategyConfiguration standard = new YamlStandardShardingStrategyConfiguration(); standard.setShardingColumn(segment.getShardingColumn()); @@ -95,7 +102,7 @@ public final class CreateShardingRuleStatementContextConverter implements SQLSta return result; } - private String getAlgorithmName(final String tableName, final String algorithmType) { + private static String getAlgorithmName(final String tableName, final String algorithmType) { return String.format("%s_%s", tableName, algorithmType); } } diff --git a/shardingsphere-features/shardingsphere-sharding/shardingsphere-sharding-common/src/test/java/org/apache/shardingsphere/sharding/converter/CreateShardingRuleStatementContextConverterTest.java b/shardingsphere-features/shardingsphere-sharding/shardingsphere-sharding-common/src/test/java/org/apache/shardingsphere/sharding/converter/CreateShardingRuleStatementContextConverterTest.java index 6833b6013c..4002163d18 100644 --- a/shardingsphere-features/shardingsphere-sharding/shardingsphere-sharding-common/src/test/java/org/apache/shardingsphere/sharding/converter/CreateShardingRuleStatementContextConverterTest.java +++ b/shardingsphere-features/shardingsphere-sharding/shardingsphere-sharding-common/src/test/java/org/apache/shardingsphere/sharding/converter/CreateShardingRuleStatementContextConverterTest.java @@ -52,14 +52,14 @@ public final class CreateShardingRuleStatementContextConverterTest { } @Test - public void generate() { - YamlShardingRuleConfiguration rule = new CreateShardingRuleStatementContextConverter().convert(context); - assertTrue(rule.getTables().isEmpty()); - assertThat(rule.getAutoTables().size(), is(1)); - assertThat(rule.getAutoTables().get(segment.getLogicTable()).getActualDataSources(), is("ds0,ds1")); - assertThat(rule.getAutoTables().get(segment.getLogicTable()).getShardingStrategy().getStandard().getShardingColumn(), is("order_id")); - assertThat(rule.getAutoTables().get(segment.getLogicTable()).getShardingStrategy().getStandard().getShardingAlgorithmName(), is("t_order_MOD")); - assertTrue(rule.getShardingAlgorithms().containsKey("t_order_MOD")); - assertThat(rule.getShardingAlgorithms().get("t_order_MOD").getType(), is("MOD")); + public void assertConvert() { + YamlShardingRuleConfiguration config = CreateShardingRuleStatementContextConverter.convert(context); + assertTrue(config.getTables().isEmpty()); + assertThat(config.getAutoTables().size(), is(1)); + assertThat(config.getAutoTables().get(segment.getLogicTable()).getActualDataSources(), is("ds0,ds1")); + assertThat(config.getAutoTables().get(segment.getLogicTable()).getShardingStrategy().getStandard().getShardingColumn(), is("order_id")); + assertThat(config.getAutoTables().get(segment.getLogicTable()).getShardingStrategy().getStandard().getShardingAlgorithmName(), is("t_order_MOD")); + assertTrue(config.getShardingAlgorithms().containsKey("t_order_MOD")); + assertThat(config.getShardingAlgorithms().get("t_order_MOD").getType(), is("MOD")); } } diff --git a/shardingsphere-infra/shardingsphere-infra-binder/src/main/java/org/apache/shardingsphere/infra/binder/converter/SQLStatementContextConverter.java b/shardingsphere-infra/shardingsphere-infra-binder/src/main/java/org/apache/shardingsphere/infra/binder/converter/SQLStatementContextConverter.java deleted file mode 100644 index 6d6cf60428..0000000000 --- a/shardingsphere-infra/shardingsphere-infra-binder/src/main/java/org/apache/shardingsphere/infra/binder/converter/SQLStatementContextConverter.java +++ /dev/null @@ -1,37 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one or more - * contributor license agreements. See the NOTICE file distributed with - * this work for additional information regarding copyright ownership. - * The ASF licenses this file to You under the Apache License, Version 2.0 - * (the "License"); you may not use this file except in compliance with - * the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package org.apache.shardingsphere.infra.binder.converter; - -import org.apache.shardingsphere.infra.binder.statement.SQLStatementContext; - -/** - * SQL statement context converter. - * - * @param type of SQL statement context - * @param type of output object - */ -public interface SQLStatementContextConverter, O> { - - /** - * Convert SQL statement to desired object. - * - * @param sqlStatementContext SQL statement context - * @return output object - */ - O convert(I sqlStatementContext); -} diff --git a/shardingsphere-proxy/shardingsphere-proxy-backend/src/main/java/org/apache/shardingsphere/proxy/backend/text/admin/RDLBackendHandler.java b/shardingsphere-proxy/shardingsphere-proxy-backend/src/main/java/org/apache/shardingsphere/proxy/backend/text/admin/RDLBackendHandler.java index f23bb75d6e..2aa8ec79eb 100644 --- a/shardingsphere-proxy/shardingsphere-proxy-backend/src/main/java/org/apache/shardingsphere/proxy/backend/text/admin/RDLBackendHandler.java +++ b/shardingsphere-proxy/shardingsphere-proxy-backend/src/main/java/org/apache/shardingsphere/proxy/backend/text/admin/RDLBackendHandler.java @@ -97,7 +97,7 @@ public final class RDLBackendHandler implements TextProtocolBackendHandler { } private BackendResponse execute(final CreateDataSourcesStatementContext context) { - Map parameters = new CreateDataSourcesStatementContextConverter().convert(context); + Map parameters = CreateDataSourcesStatementContextConverter.convert(context); Map dataSources = DataSourceParameterConverter.getDataSourceConfigurationMap( DataSourceParameterConverter.getDataSourceParameterMapFromYamlConfiguration(parameters)); // TODO Need to get the executed feedback from registry center for returning. @@ -108,8 +108,8 @@ public final class RDLBackendHandler implements TextProtocolBackendHandler { } private BackendResponse execute(final CreateShardingRuleStatementContext context) { - YamlShardingRuleConfiguration configs = new CreateShardingRuleStatementContextConverter().convert(context); - Collection rules = new YamlRuleConfigurationSwapperEngine().swapToRuleConfigurations(Collections.singleton(configs)); + YamlShardingRuleConfiguration config = CreateShardingRuleStatementContextConverter.convert(context); + Collection rules = new YamlRuleConfigurationSwapperEngine().swapToRuleConfigurations(Collections.singleton(config)); // TODO Need to get the executed feedback from registry center for returning. GovernanceEventBus.getInstance().post(new RulePersistEvent(backendConnection.getSchemaName(), rules)); UpdateResponse result = new UpdateResponse(); diff --git a/shardingsphere-proxy/shardingsphere-proxy-common/src/main/java/org/apache/shardingsphere/proxy/converter/CreateDataSourcesStatementContextConverter.java b/shardingsphere-proxy/shardingsphere-proxy-common/src/main/java/org/apache/shardingsphere/proxy/converter/CreateDataSourcesStatementContextConverter.java index 19b0ee9fc2..3f4c0c13ae 100644 --- a/shardingsphere-proxy/shardingsphere-proxy-common/src/main/java/org/apache/shardingsphere/proxy/converter/CreateDataSourcesStatementContextConverter.java +++ b/shardingsphere-proxy/shardingsphere-proxy-common/src/main/java/org/apache/shardingsphere/proxy/converter/CreateDataSourcesStatementContextConverter.java @@ -17,8 +17,9 @@ package org.apache.shardingsphere.proxy.converter; +import lombok.AccessLevel; +import lombok.NoArgsConstructor; import org.apache.shardingsphere.distsql.parser.segment.rdl.DataSourceConnectionSegment; -import org.apache.shardingsphere.infra.binder.converter.SQLStatementContextConverter; import org.apache.shardingsphere.infra.binder.statement.rdl.CreateDataSourcesStatementContext; import org.apache.shardingsphere.infra.config.datasource.DataSourceParameter; import org.apache.shardingsphere.infra.database.type.DatabaseType; @@ -30,10 +31,16 @@ import java.util.Map; /** * Create data source statement context converter. */ -public final class CreateDataSourcesStatementContextConverter implements SQLStatementContextConverter> { +@NoArgsConstructor(access = AccessLevel.PRIVATE) +public final class CreateDataSourcesStatementContextConverter { - @Override - public Map convert(final CreateDataSourcesStatementContext sqlStatementContext) { + /** + * Convert create data source statement context to YAML data source parameter map. + * + * @param sqlStatementContext create data source statement context + * @return YAML data source parameter map + */ + public static Map convert(final CreateDataSourcesStatementContext sqlStatementContext) { Map result = new LinkedHashMap<>(sqlStatementContext.getSqlStatement().getConnectionInfos().size(), 1); for (DataSourceConnectionSegment each : sqlStatementContext.getSqlStatement().getConnectionInfos()) { DataSourceParameter parameter = new DataSourceParameter(); @@ -51,7 +58,7 @@ public final class CreateDataSourcesStatementContextConverter implements SQLStat return result; } - private String getURL(final DatabaseType databaseType, final DataSourceConnectionSegment connectionSegment) { + private static String getURL(final DatabaseType databaseType, final DataSourceConnectionSegment connectionSegment) { return String.format("%s//%s:%s/%s", databaseType.getJdbcUrlPrefixes().iterator().next(), connectionSegment.getHostName(), connectionSegment.getPort(), connectionSegment.getDb()); } } diff --git a/shardingsphere-proxy/shardingsphere-proxy-common/src/test/java/org/apache/shardingsphere/proxy/converter/CreateDataSourcesStatementContextConverterTest.java b/shardingsphere-proxy/shardingsphere-proxy-common/src/test/java/org/apache/shardingsphere/proxy/converter/CreateDataSourcesStatementContextConverterTest.java index 458540a28b..3dcf6f2d12 100644 --- a/shardingsphere-proxy/shardingsphere-proxy-common/src/test/java/org/apache/shardingsphere/proxy/converter/CreateDataSourcesStatementContextConverterTest.java +++ b/shardingsphere-proxy/shardingsphere-proxy-common/src/test/java/org/apache/shardingsphere/proxy/converter/CreateDataSourcesStatementContextConverterTest.java @@ -17,11 +17,11 @@ package org.apache.shardingsphere.proxy.converter; +import org.apache.shardingsphere.distsql.parser.segment.rdl.DataSourceConnectionSegment; +import org.apache.shardingsphere.distsql.parser.statement.rdl.CreateDataSourcesStatement; +import org.apache.shardingsphere.infra.binder.statement.rdl.CreateDataSourcesStatementContext; import org.apache.shardingsphere.infra.database.type.dialect.MySQLDatabaseType; import org.apache.shardingsphere.proxy.config.yaml.YamlDataSourceParameter; -import org.apache.shardingsphere.infra.binder.statement.rdl.CreateDataSourcesStatementContext; -import org.apache.shardingsphere.distsql.parser.statement.rdl.CreateDataSourcesStatement; -import org.apache.shardingsphere.distsql.parser.segment.rdl.DataSourceConnectionSegment; import org.junit.Before; import org.junit.Test; @@ -47,20 +47,20 @@ public final class CreateDataSourcesStatementContextConverterTest { Collection result = new LinkedList<>(); for (int i = 0; i < 2; i++) { DataSourceConnectionSegment segment = new DataSourceConnectionSegment(); - segment.setName("ds" + i); + segment.setName(String.format("ds%s", i)); segment.setHostName("127.0.0.1"); segment.setPassword("3306"); - segment.setDb("demo_ds_" + i); - segment.setUser("root" + i); - segment.setPassword("root" + i); + segment.setDb(String.format("demo_ds_%s", i)); + segment.setUser(String.format("root%s", i)); + segment.setPassword(String.format("root%s", i)); result.add(segment); } return result; } @Test - public void assertGenerate() { - Map result = new CreateDataSourcesStatementContextConverter().convert(sqlStatement); + public void assertConvert() { + Map result = CreateDataSourcesStatementContextConverter.convert(sqlStatement); assertThat(result.size(), is(2)); assertTrue(result.keySet().containsAll(Arrays.asList("ds0", "ds1"))); assertThat(result.values().iterator().next().getUsername(), is("root0")); -- GitLab