未验证 提交 a11651a5 编写于 作者: L Liang Zhang 提交者: GitHub

Remove SQLStatementContextConverter (#8000)

* Remove SQLStatementContextConverter

* Static XXXStatementContextConverter
上级 24d01786
......@@ -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<CreateShardingRuleStatementContext, YamlShardingRuleConfiguration> {
@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<String> propertyValues) {
private static Properties getAlgorithmProperties(final String type, final Collection<String> propertyValues) {
Collection<String> 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<String> findAlgorithmPropertyKeys(final String algorithmType) {
private static Collection<String> 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);
}
}
......@@ -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"));
}
}
/*
* 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 <I> type of SQL statement context
* @param <O> type of output object
*/
public interface SQLStatementContextConverter<I extends SQLStatementContext<?>, O> {
/**
* Convert SQL statement to desired object.
*
* @param sqlStatementContext SQL statement context
* @return output object
*/
O convert(I sqlStatementContext);
}
......@@ -97,7 +97,7 @@ public final class RDLBackendHandler implements TextProtocolBackendHandler {
}
private BackendResponse execute(final CreateDataSourcesStatementContext context) {
Map<String, YamlDataSourceParameter> parameters = new CreateDataSourcesStatementContextConverter().convert(context);
Map<String, YamlDataSourceParameter> parameters = CreateDataSourcesStatementContextConverter.convert(context);
Map<String, DataSourceConfiguration> 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<RuleConfiguration> rules = new YamlRuleConfigurationSwapperEngine().swapToRuleConfigurations(Collections.singleton(configs));
YamlShardingRuleConfiguration config = CreateShardingRuleStatementContextConverter.convert(context);
Collection<RuleConfiguration> 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();
......
......@@ -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<CreateDataSourcesStatementContext, Map<String, YamlDataSourceParameter>> {
@NoArgsConstructor(access = AccessLevel.PRIVATE)
public final class CreateDataSourcesStatementContextConverter {
@Override
public Map<String, YamlDataSourceParameter> 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<String, YamlDataSourceParameter> convert(final CreateDataSourcesStatementContext sqlStatementContext) {
Map<String, YamlDataSourceParameter> 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());
}
}
......@@ -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<DataSourceConnectionSegment> 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<String, YamlDataSourceParameter> result = new CreateDataSourcesStatementContextConverter().convert(sqlStatement);
public void assertConvert() {
Map<String, YamlDataSourceParameter> 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"));
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册