You are viewing a plain text version of this content. The canonical link for it is here.
Posted to notifications@shardingsphere.apache.org by zh...@apache.org on 2020/08/13 10:18:39 UTC
[shardingsphere] branch master updated: Refactor
SQLStatementContextConverter and CreateDataSourcesStatementConvert (#6821)
This is an automated email from the ASF dual-hosted git repository.
zhyee 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 f182787 Refactor SQLStatementContextConverter and CreateDataSourcesStatementConvert (#6821)
f182787 is described below
commit f182787ce40448b900726df9041d1bfd23577d43
Author: Juan Pan(Trista) <pa...@apache.org>
AuthorDate: Thu Aug 13 18:18:25 2020 +0800
Refactor SQLStatementContextConverter and CreateDataSourcesStatementConvert (#6821)
* Refactor SQLStatementContextConverter and CreateDataSourcesStatementContextConverter
* fix test
* fix tests
---
.../shardingsphere-shadow-rewrite/pom.xml | 5 ----
...reateShardingRuleStatementContextConverter.java | 30 +++++++++++-----------
.../jdbc/execute/RDLExecuteEngineTest.java | 4 +--
...CreateDataSourcesStatementContextConverter.java | 12 ++++-----
...teDataSourcesStatementContextConverterTest.java | 24 +++++++++--------
.../context/CreateDataSourcesStatementContext.java | 30 ++++++++--------------
.../parser/sql/visitor/ShardingSphereVisitor.java | 1 +
.../statement/rdl/DataSourceConnectionSegment.java | 2 --
8 files changed, 48 insertions(+), 60 deletions(-)
diff --git a/shardingsphere-features/shardingsphere-shadow/shardingsphere-shadow-rewrite/pom.xml b/shardingsphere-features/shardingsphere-shadow/shardingsphere-shadow-rewrite/pom.xml
index d62220c..8a29715 100644
--- a/shardingsphere-features/shardingsphere-shadow/shardingsphere-shadow-rewrite/pom.xml
+++ b/shardingsphere-features/shardingsphere-shadow/shardingsphere-shadow-rewrite/pom.xml
@@ -36,11 +36,6 @@
</dependency>
<dependency>
<groupId>org.apache.shardingsphere</groupId>
- <artifactId>shardingsphere-sql-parser-binder</artifactId>
- <version>${project.version}</version>
- </dependency>
- <dependency>
- <groupId>org.apache.shardingsphere</groupId>
<artifactId>shardingsphere-infra-rewrite-engine</artifactId>
<version>${project.version}</version>
</dependency>
diff --git a/shardingsphere-features/shardingsphere-sharding/shardingsphere-sharding-common/src/main/java/org/apache/shardingsphere/sharding/convert/CreateShardingRuleStatementContextConverter.java b/shardingsphere-features/shardingsphere-sharding/shardingsphere-sharding-common/src/main/java/org/apache/shardingsphere/sharding/convert/CreateShardingRuleStatementContextConverter.java
index 61c9ceb..09cf9fe 100644
--- a/shardingsphere-features/shardingsphere-sharding/shardingsphere-sharding-common/src/main/java/org/apache/shardingsphere/sharding/convert/CreateShardingRuleStatementContextConverter.java
+++ b/shardingsphere-features/shardingsphere-sharding/shardingsphere-sharding-common/src/main/java/org/apache/shardingsphere/sharding/convert/CreateShardingRuleStatementContextConverter.java
@@ -32,33 +32,33 @@ import org.apache.shardingsphere.sharding.yaml.config.strategy.sharding.YamlStan
public final class CreateShardingRuleStatementContextConverter implements SQLStatementContextConverter<CreateShardingRuleStatementContext, YamlShardingRuleConfiguration> {
@Override
- public YamlShardingRuleConfiguration convert(final CreateShardingRuleStatementContext sqlStatement) {
+ public YamlShardingRuleConfiguration convert(final CreateShardingRuleStatementContext context) {
YamlShardingRuleConfiguration result = new YamlShardingRuleConfiguration();
- addYamlShardingSphereAlgorithmConfiguration(sqlStatement, result);
- addYamlShardingAutoTableRuleConfiguration(sqlStatement, result);
+ addYamlShardingSphereAlgorithmConfiguration(context, result);
+ addYamlShardingAutoTableRuleConfiguration(context, result);
return result;
}
- private void addYamlShardingSphereAlgorithmConfiguration(final CreateShardingRuleStatementContext sqlStatement, final YamlShardingRuleConfiguration ruleConfiguration) {
+ private void addYamlShardingSphereAlgorithmConfiguration(final CreateShardingRuleStatementContext context, final YamlShardingRuleConfiguration ruleConfiguration) {
YamlShardingSphereAlgorithmConfiguration algorithmConfiguration = new YamlShardingSphereAlgorithmConfiguration();
- algorithmConfiguration.setType(sqlStatement.getAlgorithmType());
- algorithmConfiguration.setProps(sqlStatement.getAlgorithmProperties());
- ruleConfiguration.getShardingAlgorithms().put(getAlgorithmName(sqlStatement.getLogicTable(), sqlStatement.getAlgorithmType()), algorithmConfiguration);
+ algorithmConfiguration.setType(context.getAlgorithmType());
+ algorithmConfiguration.setProps(context.getAlgorithmProperties());
+ ruleConfiguration.getShardingAlgorithms().put(getAlgorithmName(context.getLogicTable(), context.getAlgorithmType()), algorithmConfiguration);
}
- private void addYamlShardingAutoTableRuleConfiguration(final CreateShardingRuleStatementContext sqlStatement, final YamlShardingRuleConfiguration ruleConfiguration) {
+ private void addYamlShardingAutoTableRuleConfiguration(final CreateShardingRuleStatementContext context, final YamlShardingRuleConfiguration ruleConfiguration) {
YamlShardingAutoTableRuleConfiguration tableRuleConfiguration = new YamlShardingAutoTableRuleConfiguration();
- tableRuleConfiguration.setLogicTable(sqlStatement.getLogicTable());
- tableRuleConfiguration.setActualDataSources(Joiner.on(",").join(sqlStatement.getDataSources()));
- tableRuleConfiguration.setShardingStrategy(createYamlShardingStrategyConfiguration(sqlStatement));
- ruleConfiguration.getAutoTables().put(sqlStatement.getLogicTable(), tableRuleConfiguration);
+ tableRuleConfiguration.setLogicTable(context.getLogicTable());
+ tableRuleConfiguration.setActualDataSources(Joiner.on(",").join(context.getDataSources()));
+ tableRuleConfiguration.setShardingStrategy(createYamlShardingStrategyConfiguration(context));
+ ruleConfiguration.getAutoTables().put(context.getLogicTable(), tableRuleConfiguration);
}
- private YamlShardingStrategyConfiguration createYamlShardingStrategyConfiguration(final CreateShardingRuleStatementContext sqlStatement) {
+ private YamlShardingStrategyConfiguration createYamlShardingStrategyConfiguration(final CreateShardingRuleStatementContext context) {
YamlShardingStrategyConfiguration strategy = new YamlShardingStrategyConfiguration();
YamlStandardShardingStrategyConfiguration standard = new YamlStandardShardingStrategyConfiguration();
- standard.setShardingColumn(sqlStatement.getShardingColumn());
- standard.setShardingAlgorithmName(getAlgorithmName(sqlStatement.getLogicTable(), sqlStatement.getAlgorithmType()));
+ standard.setShardingColumn(context.getShardingColumn());
+ standard.setShardingAlgorithmName(getAlgorithmName(context.getLogicTable(), context.getAlgorithmType()));
strategy.setStandard(standard);
return strategy;
}
diff --git a/shardingsphere-proxy/shardingsphere-proxy-backend/src/test/java/org/apache/shardingsphere/proxy/backend/communication/jdbc/execute/RDLExecuteEngineTest.java b/shardingsphere-proxy/shardingsphere-proxy-backend/src/test/java/org/apache/shardingsphere/proxy/backend/communication/jdbc/execute/RDLExecuteEngineTest.java
index 0f3c715..36eada7 100644
--- a/shardingsphere-proxy/shardingsphere-proxy-backend/src/test/java/org/apache/shardingsphere/proxy/backend/communication/jdbc/execute/RDLExecuteEngineTest.java
+++ b/shardingsphere-proxy/shardingsphere-proxy-backend/src/test/java/org/apache/shardingsphere/proxy/backend/communication/jdbc/execute/RDLExecuteEngineTest.java
@@ -18,6 +18,7 @@
package org.apache.shardingsphere.proxy.backend.communication.jdbc.execute;
import lombok.SneakyThrows;
+import org.apache.shardingsphere.infra.database.type.dialect.MySQLDatabaseType;
import org.apache.shardingsphere.infra.executor.sql.context.ExecutionContext;
import org.apache.shardingsphere.kernel.context.SchemaContext;
import org.apache.shardingsphere.kernel.context.StandardSchemaContexts;
@@ -58,8 +59,7 @@ public final class RDLExecuteEngineTest {
}
private void createDataSourcesContext() {
- dataSourcesContext = mock(CreateDataSourcesStatementContext.class);
- when(dataSourcesContext.getUrls()).thenReturn(Collections.emptyList());
+ dataSourcesContext = new CreateDataSourcesStatementContext(new CreateDataSourcesStatement(Collections.emptyList()), new MySQLDatabaseType());
}
private void createRuleContext() {
diff --git a/shardingsphere-proxy/shardingsphere-proxy-common/src/main/java/org/apache/shardingsphere/proxy/convert/CreateDataSourcesStatementContextConverter.java b/shardingsphere-proxy/shardingsphere-proxy-common/src/main/java/org/apache/shardingsphere/proxy/convert/CreateDataSourcesStatementContextConverter.java
index db7540e..4bfd991 100644
--- a/shardingsphere-proxy/shardingsphere-proxy-common/src/main/java/org/apache/shardingsphere/proxy/convert/CreateDataSourcesStatementContextConverter.java
+++ b/shardingsphere-proxy/shardingsphere-proxy-common/src/main/java/org/apache/shardingsphere/proxy/convert/CreateDataSourcesStatementContextConverter.java
@@ -19,8 +19,8 @@ package org.apache.shardingsphere.proxy.convert;
import org.apache.shardingsphere.proxy.config.yaml.YamlDataSourceParameter;
import org.apache.shardingsphere.rdl.parser.binder.context.CreateDataSourcesStatementContext;
-import org.apache.shardingsphere.rdl.parser.binder.context.CreateDataSourcesStatementContext.DataSourceConnectionUrl;
import org.apache.shardingsphere.rdl.parser.binder.generator.SQLStatementContextConverter;
+import org.apache.shardingsphere.rdl.parser.statement.rdl.DataSourceConnectionSegment;
import java.util.LinkedHashMap;
import java.util.Map;
@@ -31,12 +31,12 @@ import java.util.Map;
public final class CreateDataSourcesStatementContextConverter implements SQLStatementContextConverter<CreateDataSourcesStatementContext, Map<String, YamlDataSourceParameter>> {
@Override
- public Map<String, YamlDataSourceParameter> convert(final CreateDataSourcesStatementContext sqlStatement) {
- Map<String, YamlDataSourceParameter> result = new LinkedHashMap<>(sqlStatement.getUrls().size(), 1);
- for (DataSourceConnectionUrl each : sqlStatement.getUrls()) {
+ public Map<String, YamlDataSourceParameter> convert(final CreateDataSourcesStatementContext context) {
+ Map<String, YamlDataSourceParameter> result = new LinkedHashMap<>(context.getSqlStatement().getConnectionInfos().size(), 1);
+ for (DataSourceConnectionSegment each : context.getSqlStatement().getConnectionInfos()) {
YamlDataSourceParameter dataSource = new YamlDataSourceParameter();
- dataSource.setUrl(each.getUrl());
- dataSource.setUsername(each.getUserName());
+ dataSource.setUrl(context.getUrl(each));
+ dataSource.setUsername(each.getUser());
dataSource.setPassword(each.getPassword());
result.put(each.getName(), dataSource);
}
diff --git a/shardingsphere-proxy/shardingsphere-proxy-common/src/test/java/org/apache/shardingsphere/proxy/convert/CreateDataSourcesStatementContextConverterTest.java b/shardingsphere-proxy/shardingsphere-proxy-common/src/test/java/org/apache/shardingsphere/proxy/convert/CreateDataSourcesStatementContextConverterTest.java
index e200958..524509e 100644
--- a/shardingsphere-proxy/shardingsphere-proxy-common/src/test/java/org/apache/shardingsphere/proxy/convert/CreateDataSourcesStatementContextConverterTest.java
+++ b/shardingsphere-proxy/shardingsphere-proxy-common/src/test/java/org/apache/shardingsphere/proxy/convert/CreateDataSourcesStatementContextConverterTest.java
@@ -17,9 +17,11 @@
package org.apache.shardingsphere.proxy.convert;
+import org.apache.shardingsphere.infra.database.type.dialect.MySQLDatabaseType;
import org.apache.shardingsphere.proxy.config.yaml.YamlDataSourceParameter;
import org.apache.shardingsphere.rdl.parser.binder.context.CreateDataSourcesStatementContext;
-import org.apache.shardingsphere.rdl.parser.binder.context.CreateDataSourcesStatementContext.DataSourceConnectionUrl;
+import org.apache.shardingsphere.rdl.parser.statement.rdl.CreateDataSourcesStatement;
+import org.apache.shardingsphere.rdl.parser.statement.rdl.DataSourceConnectionSegment;
import org.junit.Before;
import org.junit.Test;
@@ -31,8 +33,6 @@ import java.util.Map;
import static org.hamcrest.CoreMatchers.is;
import static org.junit.Assert.assertThat;
import static org.junit.Assert.assertTrue;
-import static org.mockito.Mockito.mock;
-import static org.mockito.Mockito.when;
public final class CreateDataSourcesStatementContextConverterTest {
@@ -40,16 +40,20 @@ public final class CreateDataSourcesStatementContextConverterTest {
@Before
public void setUp() {
- sqlStatement = mock(CreateDataSourcesStatementContext.class);
- when(sqlStatement.getUrls()).thenReturn(createDataSourceContexts());
+ sqlStatement = new CreateDataSourcesStatementContext(new CreateDataSourcesStatement(createDataSourceConnectionSegments()), new MySQLDatabaseType());
}
- private Collection<DataSourceConnectionUrl> createDataSourceContexts() {
- Collection<DataSourceConnectionUrl> result = new LinkedList<>();
+ private Collection<DataSourceConnectionSegment> createDataSourceConnectionSegments() {
+ Collection<DataSourceConnectionSegment> result = new LinkedList<>();
for (int i = 0; i < 2; i++) {
- DataSourceConnectionUrl context =
- new DataSourceConnectionUrl("ds" + i, "jdbc:mysql://127.0.0.1:3306/demo_ds_" + i + "?serverTimezone=UTC&useSSL=false", "root" + i, "root" + i);
- result.add(context);
+ DataSourceConnectionSegment segment = new DataSourceConnectionSegment();
+ segment.setName("ds" + i);
+ segment.setHostName("127.0.0.1");
+ segment.setPassword("3306");
+ segment.setDb("demo_ds_" + i);
+ segment.setUser("root" + i);
+ segment.setPassword("root" + i);
+ result.add(segment);
}
return result;
}
diff --git a/shardingsphere-rdl-parser/shardingsphere-rdl-parser-binder/src/main/java/org/apache/shardingsphere/rdl/parser/binder/context/CreateDataSourcesStatementContext.java b/shardingsphere-rdl-parser/shardingsphere-rdl-parser-binder/src/main/java/org/apache/shardingsphere/rdl/parser/binder/context/CreateDataSourcesStatementContext.java
index 49abdae..1081b4e 100644
--- a/shardingsphere-rdl-parser/shardingsphere-rdl-parser-binder/src/main/java/org/apache/shardingsphere/rdl/parser/binder/context/CreateDataSourcesStatementContext.java
+++ b/shardingsphere-rdl-parser/shardingsphere-rdl-parser-binder/src/main/java/org/apache/shardingsphere/rdl/parser/binder/context/CreateDataSourcesStatementContext.java
@@ -18,42 +18,32 @@
package org.apache.shardingsphere.rdl.parser.binder.context;
import lombok.Getter;
-import lombok.RequiredArgsConstructor;
import org.apache.shardingsphere.infra.database.type.DatabaseType;
import org.apache.shardingsphere.rdl.parser.binder.util.DataSourceConnectionUrlUtil;
import org.apache.shardingsphere.rdl.parser.statement.rdl.CreateDataSourcesStatement;
import org.apache.shardingsphere.rdl.parser.statement.rdl.DataSourceConnectionSegment;
import org.apache.shardingsphere.sql.parser.binder.statement.CommonSQLStatementContext;
-import java.util.Collection;
-import java.util.LinkedList;
-
/**
* Create dataSource statement context.
*/
@Getter
public final class CreateDataSourcesStatementContext extends CommonSQLStatementContext<CreateDataSourcesStatement> {
- private final Collection<DataSourceConnectionUrl> urls;
+ private final DatabaseType databaseType;
public CreateDataSourcesStatementContext(final CreateDataSourcesStatement sqlStatement, final DatabaseType databaseType) {
super(sqlStatement);
- urls = new LinkedList<>();
- for (DataSourceConnectionSegment each : sqlStatement.getConnectionInfos()) {
- urls.add(new DataSourceConnectionUrl(each.getName(), DataSourceConnectionUrlUtil.getUrl(each, databaseType), each.getUser(), each.getPassword()));
- }
+ this.databaseType = databaseType;
}
- @RequiredArgsConstructor
- @Getter
- public static final class DataSourceConnectionUrl {
-
- private final String name;
-
- private final String url;
-
- private final String userName;
-
- private final String password;
+ /**
+ * Get url.
+ *
+ * @param segment segment
+ * @return url
+ */
+ public String getUrl(final DataSourceConnectionSegment segment) {
+ return DataSourceConnectionUrlUtil.getUrl(segment, databaseType);
}
}
diff --git a/shardingsphere-rdl-parser/shardingsphere-rdl-parser-sql/src/main/java/org/apache/shardingsphere/rdl/parser/sql/visitor/ShardingSphereVisitor.java b/shardingsphere-rdl-parser/shardingsphere-rdl-parser-sql/src/main/java/org/apache/shardingsphere/rdl/parser/sql/visitor/ShardingSphereVisitor.java
index b7458a6..db3049f 100644
--- a/shardingsphere-rdl-parser/shardingsphere-rdl-parser-sql/src/main/java/org/apache/shardingsphere/rdl/parser/sql/visitor/ShardingSphereVisitor.java
+++ b/shardingsphere-rdl-parser/shardingsphere-rdl-parser-sql/src/main/java/org/apache/shardingsphere/rdl/parser/sql/visitor/ShardingSphereVisitor.java
@@ -92,6 +92,7 @@ public final class ShardingSphereVisitor extends ShardingSphereStatementBaseVisi
result.setLogicTable(ctx.tableName().getText());
result.setAlgorithmType(ctx.tableRuleDefinition().strategyType().getText());
result.setShardingColumn(ctx.tableRuleDefinition().strategyDefinition().columName().getText());
+ // TODO Future feature.
result.setDataSources(new LinkedList<>());
CollectionValue<String> props = (CollectionValue) visit(ctx.tableRuleDefinition().strategyDefinition().strategyProps());
result.setProperties(props.getValue());
diff --git a/shardingsphere-rdl-parser/shardingsphere-rdl-parser-statement/src/main/java/org/apache/shardingsphere/rdl/parser/statement/rdl/DataSourceConnectionSegment.java b/shardingsphere-rdl-parser/shardingsphere-rdl-parser-statement/src/main/java/org/apache/shardingsphere/rdl/parser/statement/rdl/DataSourceConnectionSegment.java
index 7a28077..9b92b08 100644
--- a/shardingsphere-rdl-parser/shardingsphere-rdl-parser-statement/src/main/java/org/apache/shardingsphere/rdl/parser/statement/rdl/DataSourceConnectionSegment.java
+++ b/shardingsphere-rdl-parser/shardingsphere-rdl-parser-statement/src/main/java/org/apache/shardingsphere/rdl/parser/statement/rdl/DataSourceConnectionSegment.java
@@ -18,14 +18,12 @@
package org.apache.shardingsphere.rdl.parser.statement.rdl;
import lombok.Getter;
-import lombok.RequiredArgsConstructor;
import lombok.Setter;
import org.apache.shardingsphere.sql.parser.api.ASTNode;
/**
* Data source connection segment.
*/
-@RequiredArgsConstructor
@Getter
@Setter
public final class DataSourceConnectionSegment implements ASTNode {