This is an automated email from the ASF dual-hosted git repository.
zhaojinchao 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 4d04a610da4 Minor refactor for create new ShardingRule (#29315)
4d04a610da4 is described below
commit 4d04a610da42051b8827f08fd1098af0dc7cc3d9
Author: Zhengqiang Duan <[email protected]>
AuthorDate: Thu Dec 7 18:43:28 2023 +0800
Minor refactor for create new ShardingRule (#29315)
* Minor refactor for create new ShardingRule
* fix unit test
---
.../shardingsphere/sharding/rule/ShardingRule.java | 5 +-
.../sharding/rule/builder/ShardingRuleBuilder.java | 2 +-
.../checker/ShardingRouteCacheableCheckerTest.java | 5 +-
.../dal/show/ShowCreateTableMergedResultTest.java | 4 +-
.../dal/show/ShowTableStatusMergedResultTest.java | 4 +-
.../merge/dal/show/ShowTablesMergedResultTest.java | 4 +-
.../ShardingRoutingEngineFixtureBuilder.java | 22 ++++-----
...ShardingDatabaseBroadcastRoutingEngineTest.java | 6 ++-
.../ShardingTableBroadcastRoutingEngineTest.java | 5 +-
.../unicast/ShardingUnicastRoutingEngineTest.java | 4 +-
.../sharding/rule/ShardingRuleTest.java | 57 +++++++++++-----------
.../query/ShowShardingTableNodesExecutorTest.java | 5 +-
.../ShardingSphereDatabaseMetaDataTest.java | 4 +-
.../YamlDatabaseConfigurationImportExecutor.java | 5 +-
.../ImportDatabaseConfigurationUpdaterTest.java | 3 ++
.../storage/unit/ShowStorageUnitExecutorTest.java | 4 +-
.../config_sharding_sphere_jdbc_target.yaml | 8 +--
17 files changed, 85 insertions(+), 62 deletions(-)
diff --git
a/features/sharding/core/src/main/java/org/apache/shardingsphere/sharding/rule/ShardingRule.java
b/features/sharding/core/src/main/java/org/apache/shardingsphere/sharding/rule/ShardingRule.java
index 67f2b46ac2e..c32d1ce9bea 100644
---
a/features/sharding/core/src/main/java/org/apache/shardingsphere/sharding/rule/ShardingRule.java
+++
b/features/sharding/core/src/main/java/org/apache/shardingsphere/sharding/rule/ShardingRule.java
@@ -63,6 +63,7 @@ import
org.apache.shardingsphere.sql.parser.sql.common.segment.dml.predicate.And
import
org.apache.shardingsphere.sql.parser.sql.common.segment.dml.predicate.WhereSegment;
import
org.apache.shardingsphere.sql.parser.sql.common.util.ExpressionExtractUtils;
+import javax.sql.DataSource;
import java.util.Arrays;
import java.util.Collection;
import java.util.Collections;
@@ -120,9 +121,9 @@ public final class ShardingRule implements DatabaseRule,
DataNodeContainedRule,
private final TableNamesMapper actualTableMapper;
- public ShardingRule(final ShardingRuleConfiguration ruleConfig, final
Collection<String> dataSourceNames, final InstanceContext instanceContext) {
+ public ShardingRule(final ShardingRuleConfiguration ruleConfig, final
Map<String, DataSource> dataSources, final InstanceContext instanceContext) {
configuration = ruleConfig;
- this.dataSourceNames = getDataSourceNames(ruleConfig.getTables(),
ruleConfig.getAutoTables(), dataSourceNames);
+ this.dataSourceNames = getDataSourceNames(ruleConfig.getTables(),
ruleConfig.getAutoTables(), dataSources.keySet());
ruleConfig.getShardingAlgorithms().forEach((key, value) ->
shardingAlgorithms.put(key, TypedSPILoader.getService(ShardingAlgorithm.class,
value.getType(), value.getProps())));
ruleConfig.getKeyGenerators().forEach((key, value) ->
keyGenerators.put(key, TypedSPILoader.getService(KeyGenerateAlgorithm.class,
value.getType(), value.getProps())));
ruleConfig.getAuditors().forEach((key, value) -> auditors.put(key,
TypedSPILoader.getService(ShardingAuditAlgorithm.class, value.getType(),
value.getProps())));
diff --git
a/features/sharding/core/src/main/java/org/apache/shardingsphere/sharding/rule/builder/ShardingRuleBuilder.java
b/features/sharding/core/src/main/java/org/apache/shardingsphere/sharding/rule/builder/ShardingRuleBuilder.java
index a239e23b194..d1d6efd3935 100644
---
a/features/sharding/core/src/main/java/org/apache/shardingsphere/sharding/rule/builder/ShardingRuleBuilder.java
+++
b/features/sharding/core/src/main/java/org/apache/shardingsphere/sharding/rule/builder/ShardingRuleBuilder.java
@@ -40,7 +40,7 @@ public final class ShardingRuleBuilder implements
DatabaseRuleBuilder<ShardingRu
public ShardingRule build(final ShardingRuleConfiguration config, final
String databaseName, final DatabaseType protocolType,
final Map<String, DataSource> dataSources, final
Collection<ShardingSphereRule> builtRules, final InstanceContext
instanceContext) {
ShardingSpherePreconditions.checkState(null != dataSources &&
!dataSources.isEmpty(), () -> new
MissingRequiredShardingConfigurationException("Data source", databaseName));
- return new ShardingRule(config, dataSources.keySet(), instanceContext);
+ return new ShardingRule(config, dataSources, instanceContext);
}
@Override
diff --git
a/features/sharding/core/src/test/java/org/apache/shardingsphere/sharding/cache/checker/ShardingRouteCacheableCheckerTest.java
b/features/sharding/core/src/test/java/org/apache/shardingsphere/sharding/cache/checker/ShardingRouteCacheableCheckerTest.java
index cb2c40decf9..219058244bc 100644
---
a/features/sharding/core/src/test/java/org/apache/shardingsphere/sharding/cache/checker/ShardingRouteCacheableCheckerTest.java
+++
b/features/sharding/core/src/test/java/org/apache/shardingsphere/sharding/cache/checker/ShardingRouteCacheableCheckerTest.java
@@ -17,6 +17,7 @@
package org.apache.shardingsphere.sharding.cache.checker;
+import org.apache.groovy.util.Maps;
import
org.apache.shardingsphere.infra.binder.context.statement.SQLStatementContext;
import org.apache.shardingsphere.infra.binder.engine.SQLBindEngine;
import org.apache.shardingsphere.infra.config.algorithm.AlgorithmConfiguration;
@@ -44,6 +45,7 @@ import
org.apache.shardingsphere.sharding.api.config.strategy.sharding.StandardS
import org.apache.shardingsphere.sharding.rule.ShardingRule;
import org.apache.shardingsphere.sql.parser.api.CacheOption;
import org.apache.shardingsphere.sql.parser.sql.common.statement.SQLStatement;
+import org.apache.shardingsphere.test.fixture.jdbc.MockedDataSource;
import org.apache.shardingsphere.test.util.PropertiesBuilder;
import org.apache.shardingsphere.test.util.PropertiesBuilder.Property;
import
org.apache.shardingsphere.timeservice.api.config.TimestampServiceRuleConfiguration;
@@ -102,7 +104,8 @@ class ShardingRouteCacheableCheckerTest {
nonCacheableTableSharding.setTableShardingStrategy(new
StandardShardingStrategyConfiguration("id", "inline"));
ruleConfig.getTables().add(nonCacheableTableSharding);
ruleConfig.setShardingCache(new ShardingCacheConfiguration(100, new
ShardingCacheOptionsConfiguration(true, 0, 0)));
- return new ShardingRule(ruleConfig, Arrays.asList("ds_0", "ds_1"), new
InstanceContext(mock(ComputeNodeInstance.class), props -> 0, null, null, null,
null));
+ return new ShardingRule(ruleConfig, Maps.of("ds_0", new
MockedDataSource(), "ds_1", new MockedDataSource()),
+ new InstanceContext(mock(ComputeNodeInstance.class), props ->
0, null, null, null, null));
}
private TimestampServiceRule createTimeServiceRule() {
diff --git
a/features/sharding/core/src/test/java/org/apache/shardingsphere/sharding/merge/dal/show/ShowCreateTableMergedResultTest.java
b/features/sharding/core/src/test/java/org/apache/shardingsphere/sharding/merge/dal/show/ShowCreateTableMergedResultTest.java
index 788606e5b83..99b8e772f4c 100644
---
a/features/sharding/core/src/test/java/org/apache/shardingsphere/sharding/merge/dal/show/ShowCreateTableMergedResultTest.java
+++
b/features/sharding/core/src/test/java/org/apache/shardingsphere/sharding/merge/dal/show/ShowCreateTableMergedResultTest.java
@@ -17,6 +17,7 @@
package org.apache.shardingsphere.sharding.merge.dal.show;
+import org.apache.groovy.util.Maps;
import
org.apache.shardingsphere.infra.binder.context.statement.SQLStatementContext;
import
org.apache.shardingsphere.infra.executor.sql.execute.result.query.QueryResult;
import org.apache.shardingsphere.infra.instance.InstanceContext;
@@ -26,6 +27,7 @@ import
org.apache.shardingsphere.infra.metadata.database.schema.model.ShardingSp
import org.apache.shardingsphere.sharding.api.config.ShardingRuleConfiguration;
import
org.apache.shardingsphere.sharding.api.config.rule.ShardingTableRuleConfiguration;
import org.apache.shardingsphere.sharding.rule.ShardingRule;
+import org.apache.shardingsphere.test.fixture.jdbc.MockedDataSource;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;
@@ -58,7 +60,7 @@ class ShowCreateTableMergedResultTest {
ShardingRuleConfiguration shardingRuleConfig = new
ShardingRuleConfiguration();
shardingRuleConfig.getTables().add(new
ShardingTableRuleConfiguration("t_order", "ds.t_order_${0..2}"));
shardingRuleConfig.getTables().add(new
ShardingTableRuleConfiguration("t_user", "ds.t_user_${0..2}"));
- return new ShardingRule(shardingRuleConfig,
Collections.singleton("ds"), mock(InstanceContext.class));
+ return new ShardingRule(shardingRuleConfig, Maps.of("ds", new
MockedDataSource()), mock(InstanceContext.class));
}
private ShardingSphereSchema createSchema() {
diff --git
a/features/sharding/core/src/test/java/org/apache/shardingsphere/sharding/merge/dal/show/ShowTableStatusMergedResultTest.java
b/features/sharding/core/src/test/java/org/apache/shardingsphere/sharding/merge/dal/show/ShowTableStatusMergedResultTest.java
index ab138b8f85d..a24f40cd2e4 100644
---
a/features/sharding/core/src/test/java/org/apache/shardingsphere/sharding/merge/dal/show/ShowTableStatusMergedResultTest.java
+++
b/features/sharding/core/src/test/java/org/apache/shardingsphere/sharding/merge/dal/show/ShowTableStatusMergedResultTest.java
@@ -17,6 +17,7 @@
package org.apache.shardingsphere.sharding.merge.dal.show;
+import org.apache.groovy.util.Maps;
import
org.apache.shardingsphere.infra.binder.context.statement.SQLStatementContext;
import
org.apache.shardingsphere.infra.executor.sql.execute.result.query.QueryResult;
import org.apache.shardingsphere.infra.instance.InstanceContext;
@@ -26,6 +27,7 @@ import
org.apache.shardingsphere.infra.metadata.database.schema.model.ShardingSp
import org.apache.shardingsphere.sharding.api.config.ShardingRuleConfiguration;
import
org.apache.shardingsphere.sharding.api.config.rule.ShardingTableRuleConfiguration;
import org.apache.shardingsphere.sharding.rule.ShardingRule;
+import org.apache.shardingsphere.test.fixture.jdbc.MockedDataSource;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.extension.ExtendWith;
@@ -62,7 +64,7 @@ class ShowTableStatusMergedResultTest {
private ShardingRule buildShardingRule() {
ShardingRuleConfiguration shardingRuleConfig = new
ShardingRuleConfiguration();
shardingRuleConfig.getTables().add(new
ShardingTableRuleConfiguration("table", "ds.table_${0..2}"));
- return new ShardingRule(shardingRuleConfig,
Collections.singletonList("ds"), mock(InstanceContext.class));
+ return new ShardingRule(shardingRuleConfig, Maps.of("ds", new
MockedDataSource()), mock(InstanceContext.class));
}
@Test
diff --git
a/features/sharding/core/src/test/java/org/apache/shardingsphere/sharding/merge/dal/show/ShowTablesMergedResultTest.java
b/features/sharding/core/src/test/java/org/apache/shardingsphere/sharding/merge/dal/show/ShowTablesMergedResultTest.java
index 62fb75c2c45..346b02c6ace 100644
---
a/features/sharding/core/src/test/java/org/apache/shardingsphere/sharding/merge/dal/show/ShowTablesMergedResultTest.java
+++
b/features/sharding/core/src/test/java/org/apache/shardingsphere/sharding/merge/dal/show/ShowTablesMergedResultTest.java
@@ -17,6 +17,7 @@
package org.apache.shardingsphere.sharding.merge.dal.show;
+import org.apache.groovy.util.Maps;
import
org.apache.shardingsphere.infra.binder.context.statement.SQLStatementContext;
import
org.apache.shardingsphere.infra.executor.sql.execute.result.query.QueryResult;
import org.apache.shardingsphere.infra.instance.InstanceContext;
@@ -25,6 +26,7 @@ import
org.apache.shardingsphere.infra.metadata.database.schema.model.ShardingSp
import org.apache.shardingsphere.sharding.api.config.ShardingRuleConfiguration;
import
org.apache.shardingsphere.sharding.api.config.rule.ShardingTableRuleConfiguration;
import org.apache.shardingsphere.sharding.rule.ShardingRule;
+import org.apache.shardingsphere.test.fixture.jdbc.MockedDataSource;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;
@@ -53,7 +55,7 @@ class ShowTablesMergedResultTest {
private ShardingRule createShardingRule() {
ShardingRuleConfiguration shardingRuleConfig = new
ShardingRuleConfiguration();
shardingRuleConfig.getTables().add(new
ShardingTableRuleConfiguration("table", "ds.table_${0..2}"));
- return new ShardingRule(shardingRuleConfig,
Collections.singleton("ds"), mock(InstanceContext.class));
+ return new ShardingRule(shardingRuleConfig, Maps.of("ds", new
MockedDataSource()), mock(InstanceContext.class));
}
@Test
diff --git
a/features/sharding/core/src/test/java/org/apache/shardingsphere/sharding/route/engine/fixture/ShardingRoutingEngineFixtureBuilder.java
b/features/sharding/core/src/test/java/org/apache/shardingsphere/sharding/route/engine/fixture/ShardingRoutingEngineFixtureBuilder.java
index 78baf5241e3..a9e688f7a5c 100644
---
a/features/sharding/core/src/test/java/org/apache/shardingsphere/sharding/route/engine/fixture/ShardingRoutingEngineFixtureBuilder.java
+++
b/features/sharding/core/src/test/java/org/apache/shardingsphere/sharding/route/engine/fixture/ShardingRoutingEngineFixtureBuilder.java
@@ -20,6 +20,7 @@ package
org.apache.shardingsphere.sharding.route.engine.fixture;
import lombok.AccessLevel;
import lombok.NoArgsConstructor;
import lombok.SneakyThrows;
+import org.apache.groovy.util.Maps;
import
org.apache.shardingsphere.infra.binder.context.statement.SQLStatementContext;
import org.apache.shardingsphere.infra.config.algorithm.AlgorithmConfiguration;
import org.apache.shardingsphere.infra.database.core.DefaultDatabase;
@@ -48,7 +49,6 @@ import
org.apache.shardingsphere.timeservice.core.rule.TimestampServiceRule;
import javax.sql.DataSource;
import java.sql.Connection;
import java.sql.SQLException;
-import java.util.Arrays;
import java.util.Collection;
import java.util.Collections;
import java.util.HashMap;
@@ -78,7 +78,7 @@ public final class ShardingRoutingEngineFixtureBuilder {
shardingRuleConfig.getShardingAlgorithms().put("ds_inline", new
AlgorithmConfiguration("INLINE", PropertiesBuilder.build(new
Property("algorithm-expression", "ds_${user_id % 2}"))));
shardingRuleConfig.getShardingAlgorithms().put(
"t_order_inline", new AlgorithmConfiguration("INLINE",
PropertiesBuilder.build(new Property("algorithm-expression",
"t_order_${order_id % 2}"))));
- return new ShardingRule(shardingRuleConfig, createDataSourceNames(),
mock(InstanceContext.class));
+ return new ShardingRule(shardingRuleConfig, createDataSources(),
mock(InstanceContext.class));
}
/**
@@ -92,7 +92,7 @@ public final class ShardingRoutingEngineFixtureBuilder {
shardingRuleConfig.getShardingAlgorithms().put("ds_inline", new
AlgorithmConfiguration("INLINE", PropertiesBuilder.build(new
Property("algorithm-expression", "ds_${user_id % 2}"))));
shardingRuleConfig.getShardingAlgorithms().put(
"t_order_inline", new AlgorithmConfiguration("INLINE",
PropertiesBuilder.build(new Property("algorithm-expression",
"t_order_${order_id % 3}"))));
- return new ShardingRule(shardingRuleConfig, createDataSourceNames(),
mock(InstanceContext.class));
+ return new ShardingRule(shardingRuleConfig, createDataSources(),
mock(InstanceContext.class));
}
/**
@@ -110,7 +110,7 @@ public final class ShardingRoutingEngineFixtureBuilder {
"t_order_inline", new AlgorithmConfiguration("INLINE",
PropertiesBuilder.build(new Property("algorithm-expression",
"t_order_${order_id % 2}"))));
shardingRuleConfig.getShardingAlgorithms().put(
"t_order_item_inline", new AlgorithmConfiguration("INLINE",
PropertiesBuilder.build(new Property("algorithm-expression",
"t_order_item_${order_id % 2}"))));
- return new ShardingRule(shardingRuleConfig, createDataSourceNames(),
mock(InstanceContext.class));
+ return new ShardingRule(shardingRuleConfig, createDataSources(),
mock(InstanceContext.class));
}
/**
@@ -127,7 +127,7 @@ public final class ShardingRoutingEngineFixtureBuilder {
"t_order_inline", new AlgorithmConfiguration("INLINE",
PropertiesBuilder.build(new Property("algorithm-expression",
"t_order_${order_id % 2}"))));
shardingRuleConfig.getShardingAlgorithms().put(
"t_order_item_inline", new AlgorithmConfiguration("INLINE",
PropertiesBuilder.build(new Property("algorithm-expression",
"t_order_item_${order_id % 2}"))));
- return new ShardingRule(shardingRuleConfig, createDataSourceNames(),
mock(InstanceContext.class));
+ return new ShardingRule(shardingRuleConfig, createDataSources(),
mock(InstanceContext.class));
}
/**
@@ -139,7 +139,7 @@ public final class ShardingRoutingEngineFixtureBuilder {
ShardingRuleConfiguration shardingRuleConfig = new
ShardingRuleConfiguration();
shardingRuleConfig.getTables().add(createTableRuleWithHintConfig());
shardingRuleConfig.getShardingAlgorithms().put("core_hint_fixture",
new AlgorithmConfiguration("CORE.HINT.FIXTURE", new Properties()));
- return new ShardingRule(shardingRuleConfig, createDataSourceNames(),
mock(InstanceContext.class));
+ return new ShardingRule(shardingRuleConfig, createDataSources(),
mock(InstanceContext.class));
}
/**
@@ -157,7 +157,7 @@ public final class ShardingRoutingEngineFixtureBuilder {
shardingRuleConfig.getShardingAlgorithms().put("ds_inline", new
AlgorithmConfiguration("INLINE", PropertiesBuilder.build(new
Property("algorithm-expression", "ds_${user_id % 2}"))));
shardingRuleConfig.getShardingAlgorithms().put(
"t_hint_ds_test_inline", new AlgorithmConfiguration("INLINE",
PropertiesBuilder.build(new Property("algorithm-expression",
"t_hint_ds_test_${order_id % 2}"))));
- return new ShardingRule(shardingRuleConfig, createDataSourceNames(),
mock(InstanceContext.class));
+ return new ShardingRule(shardingRuleConfig, createDataSources(),
mock(InstanceContext.class));
}
/**
@@ -180,7 +180,7 @@ public final class ShardingRoutingEngineFixtureBuilder {
"t_order_item_inline", new AlgorithmConfiguration("INLINE",
PropertiesBuilder.build(new Property("algorithm-expression",
"t_order_item_${user_id % 2}"))));
shardingRuleConfig.getShardingAlgorithms().put("t_user_inline", new
AlgorithmConfiguration("INLINE", PropertiesBuilder.build(new
Property("algorithm-expression", "t_user_${user_id % 2}"))));
shardingRuleConfig.getShardingAlgorithms().put("core_hint_fixture",
new AlgorithmConfiguration("CORE.HINT.FIXTURE", new Properties()));
- return new ShardingRule(shardingRuleConfig, Arrays.asList("ds_0",
"ds_1", "main"), mock(InstanceContext.class));
+ return new ShardingRule(shardingRuleConfig, Maps.of("ds_0", new
MockedDataSource(), "ds_1", new MockedDataSource(), "main", new
MockedDataSource()), mock(InstanceContext.class));
}
/**
@@ -200,7 +200,7 @@ public final class ShardingRoutingEngineFixtureBuilder {
new Property("datetime-interval-amount", "1"),
new Property("datetime-interval-unit", "MONTHS"));
shardingRuleConfig.getShardingAlgorithms().put("interval_test", new
AlgorithmConfiguration("INTERVAL", props));
- return new ShardingRule(shardingRuleConfig, createDataSourceNames(),
mock(InstanceContext.class));
+ return new ShardingRule(shardingRuleConfig, createDataSources(),
mock(InstanceContext.class));
}
private static ShardingTableRuleConfiguration
createInlineTableRuleConfig(final String tableName,
@@ -280,8 +280,8 @@ public final class ShardingRoutingEngineFixtureBuilder {
return new ShardingConditions(result, mock(SQLStatementContext.class),
mock(ShardingRule.class));
}
- private static Collection<String> createDataSourceNames() {
- return Arrays.asList("ds_0", "ds_1");
+ private static Map<String, DataSource> createDataSources() {
+ return Maps.of("ds_0", new MockedDataSource(), "ds_1", new
MockedDataSource());
}
/**
diff --git
a/features/sharding/core/src/test/java/org/apache/shardingsphere/sharding/route/engine/type/broadcast/ShardingDatabaseBroadcastRoutingEngineTest.java
b/features/sharding/core/src/test/java/org/apache/shardingsphere/sharding/route/engine/type/broadcast/ShardingDatabaseBroadcastRoutingEngineTest.java
index d5766b600dd..672066c4c5e 100644
---
a/features/sharding/core/src/test/java/org/apache/shardingsphere/sharding/route/engine/type/broadcast/ShardingDatabaseBroadcastRoutingEngineTest.java
+++
b/features/sharding/core/src/test/java/org/apache/shardingsphere/sharding/route/engine/type/broadcast/ShardingDatabaseBroadcastRoutingEngineTest.java
@@ -17,16 +17,17 @@
package org.apache.shardingsphere.sharding.route.engine.type.broadcast;
+import org.apache.groovy.util.Maps;
import org.apache.shardingsphere.infra.instance.InstanceContext;
import org.apache.shardingsphere.infra.route.context.RouteContext;
import org.apache.shardingsphere.infra.route.context.RouteUnit;
import org.apache.shardingsphere.sharding.api.config.ShardingRuleConfiguration;
import
org.apache.shardingsphere.sharding.api.config.rule.ShardingTableRuleConfiguration;
import org.apache.shardingsphere.sharding.rule.ShardingRule;
+import org.apache.shardingsphere.test.fixture.jdbc.MockedDataSource;
import org.junit.jupiter.api.Test;
import java.util.ArrayList;
-import java.util.Arrays;
import java.util.List;
import static org.hamcrest.CoreMatchers.is;
@@ -41,7 +42,8 @@ class ShardingDatabaseBroadcastRoutingEngineTest {
void assertRoute() {
ShardingRuleConfiguration shardingRuleConfig = new
ShardingRuleConfiguration();
shardingRuleConfig.getTables().add(new
ShardingTableRuleConfiguration("t_order", "ds_${0..1}.t_order_${0..2}"));
- RouteContext routeContext =
shardingDatabaseBroadcastRoutingEngine.route(new
ShardingRule(shardingRuleConfig, Arrays.asList("ds_0", "ds_1"),
mock(InstanceContext.class)));
+ RouteContext routeContext = shardingDatabaseBroadcastRoutingEngine
+ .route(new ShardingRule(shardingRuleConfig, Maps.of("ds_0",
new MockedDataSource(), "ds_1", new MockedDataSource()),
mock(InstanceContext.class)));
List<RouteUnit> routeUnits = new
ArrayList<>(routeContext.getRouteUnits());
assertThat(routeContext.getRouteUnits().size(), is(2));
assertThat(routeUnits.get(0).getDataSourceMapper().getActualName(),
is("ds_0"));
diff --git
a/features/sharding/core/src/test/java/org/apache/shardingsphere/sharding/route/engine/type/broadcast/ShardingTableBroadcastRoutingEngineTest.java
b/features/sharding/core/src/test/java/org/apache/shardingsphere/sharding/route/engine/type/broadcast/ShardingTableBroadcastRoutingEngineTest.java
index d5832e0c53c..48b7e4d3ced 100644
---
a/features/sharding/core/src/test/java/org/apache/shardingsphere/sharding/route/engine/type/broadcast/ShardingTableBroadcastRoutingEngineTest.java
+++
b/features/sharding/core/src/test/java/org/apache/shardingsphere/sharding/route/engine/type/broadcast/ShardingTableBroadcastRoutingEngineTest.java
@@ -17,6 +17,7 @@
package org.apache.shardingsphere.sharding.route.engine.type.broadcast;
+import org.apache.groovy.util.Maps;
import
org.apache.shardingsphere.infra.binder.context.statement.SQLStatementContext;
import
org.apache.shardingsphere.infra.binder.context.statement.ddl.DropIndexStatementContext;
import org.apache.shardingsphere.infra.binder.context.type.IndexAvailable;
@@ -35,9 +36,9 @@ import
org.apache.shardingsphere.sharding.api.config.ShardingRuleConfiguration;
import
org.apache.shardingsphere.sharding.api.config.rule.ShardingTableRuleConfiguration;
import org.apache.shardingsphere.sharding.rule.ShardingRule;
import
org.apache.shardingsphere.sql.parser.sql.common.segment.ddl.index.IndexSegment;
+import org.apache.shardingsphere.test.fixture.jdbc.MockedDataSource;
import org.junit.jupiter.api.Test;
-import java.util.Arrays;
import java.util.Collection;
import java.util.Collections;
import java.util.Iterator;
@@ -126,7 +127,7 @@ class ShardingTableBroadcastRoutingEngineTest {
private ShardingRule createShardingRule() {
ShardingRuleConfiguration ruleConfig = new ShardingRuleConfiguration();
ruleConfig.getTables().add(new
ShardingTableRuleConfiguration("t_order", "ds${0..1}.t_order_${0..1}"));
- return new ShardingRule(ruleConfig, Arrays.asList("ds_0", "ds_1"),
mock(InstanceContext.class));
+ return new ShardingRule(ruleConfig, Maps.of("ds_0", new
MockedDataSource(), "ds_1", new MockedDataSource()),
mock(InstanceContext.class));
}
private SQLStatementContext createSQLStatementContext(final
Collection<String> tableNames) {
diff --git
a/features/sharding/core/src/test/java/org/apache/shardingsphere/sharding/route/engine/type/unicast/ShardingUnicastRoutingEngineTest.java
b/features/sharding/core/src/test/java/org/apache/shardingsphere/sharding/route/engine/type/unicast/ShardingUnicastRoutingEngineTest.java
index 64f67966fa1..ee3fced1f09 100644
---
a/features/sharding/core/src/test/java/org/apache/shardingsphere/sharding/route/engine/type/unicast/ShardingUnicastRoutingEngineTest.java
+++
b/features/sharding/core/src/test/java/org/apache/shardingsphere/sharding/route/engine/type/unicast/ShardingUnicastRoutingEngineTest.java
@@ -17,6 +17,7 @@
package org.apache.shardingsphere.sharding.route.engine.type.unicast;
+import org.apache.groovy.util.Maps;
import
org.apache.shardingsphere.infra.binder.context.statement.SQLStatementContext;
import
org.apache.shardingsphere.infra.binder.context.statement.ddl.CursorStatementContext;
import
org.apache.shardingsphere.infra.binder.context.statement.dml.SelectStatementContext;
@@ -27,6 +28,7 @@ import
org.apache.shardingsphere.sharding.api.config.ShardingRuleConfiguration;
import
org.apache.shardingsphere.sharding.api.config.rule.ShardingTableRuleConfiguration;
import
org.apache.shardingsphere.sharding.exception.metadata.ShardingTableRuleNotFoundException;
import org.apache.shardingsphere.sharding.rule.ShardingRule;
+import org.apache.shardingsphere.test.fixture.jdbc.MockedDataSource;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;
@@ -47,7 +49,7 @@ class ShardingUnicastRoutingEngineTest {
void setUp() {
ShardingRuleConfiguration shardingRuleConfig = new
ShardingRuleConfiguration();
shardingRuleConfig.getTables().add(new
ShardingTableRuleConfiguration("t_order", "ds_${0..1}.t_order_${0..2}"));
- shardingRule = new ShardingRule(shardingRuleConfig,
Arrays.asList("ds_0", "ds_1", "ds_2"), mock(InstanceContext.class));
+ shardingRule = new ShardingRule(shardingRuleConfig, Maps.of("ds_0",
new MockedDataSource(), "ds_1", new MockedDataSource(), "ds_2", new
MockedDataSource()), mock(InstanceContext.class));
}
@Test
diff --git
a/features/sharding/core/src/test/java/org/apache/shardingsphere/sharding/rule/ShardingRuleTest.java
b/features/sharding/core/src/test/java/org/apache/shardingsphere/sharding/rule/ShardingRuleTest.java
index 3dbd2fea9a3..26cf8bd1f63 100644
---
a/features/sharding/core/src/test/java/org/apache/shardingsphere/sharding/rule/ShardingRuleTest.java
+++
b/features/sharding/core/src/test/java/org/apache/shardingsphere/sharding/rule/ShardingRuleTest.java
@@ -17,6 +17,7 @@
package org.apache.shardingsphere.sharding.rule;
+import org.apache.groovy.util.Maps;
import
org.apache.shardingsphere.infra.binder.context.segment.table.TablesContext;
import
org.apache.shardingsphere.infra.binder.context.statement.SQLStatementContext;
import
org.apache.shardingsphere.infra.binder.context.statement.dml.SelectStatementContext;
@@ -58,10 +59,12 @@ import
org.apache.shardingsphere.sql.parser.sql.common.segment.generic.table.Tab
import
org.apache.shardingsphere.sql.parser.sql.common.statement.dml.SelectStatement;
import
org.apache.shardingsphere.sql.parser.sql.common.value.identifier.IdentifierValue;
import
org.apache.shardingsphere.sql.parser.sql.dialect.statement.mysql.dml.MySQLSelectStatement;
+import org.apache.shardingsphere.test.fixture.jdbc.MockedDataSource;
import org.apache.shardingsphere.test.util.PropertiesBuilder;
import org.apache.shardingsphere.test.util.PropertiesBuilder.Property;
import org.junit.jupiter.api.Test;
+import javax.sql.DataSource;
import java.util.Arrays;
import java.util.Collection;
import java.util.Collections;
@@ -117,7 +120,7 @@ class ShardingRuleTest {
ShardingRuleConfiguration ruleConfig = new ShardingRuleConfiguration();
ruleConfig.setDefaultDatabaseShardingStrategy(new
StandardShardingStrategyConfiguration("order_id", "MOD"));
ruleConfig.getShardingAlgorithms().put("MOD", new
AlgorithmConfiguration("MOD", PropertiesBuilder.build(new
Property("sharding-count", "2"))));
- assertThrows(ShardingAlgorithmInitializationException.class, () -> new
ShardingRule(ruleConfig, Collections.emptyList(), mock(InstanceContext.class)));
+ assertThrows(ShardingAlgorithmInitializationException.class, () -> new
ShardingRule(ruleConfig, Collections.emptyMap(), mock(InstanceContext.class)));
}
@Test
@@ -125,7 +128,7 @@ class ShardingRuleTest {
ShardingRuleConfiguration ruleConfig = new ShardingRuleConfiguration();
ruleConfig.setDefaultTableShardingStrategy(new
StandardShardingStrategyConfiguration("order_id", "MOD"));
ruleConfig.getShardingAlgorithms().put("MOD", new
AlgorithmConfiguration("MOD", PropertiesBuilder.build(new
Property("sharding-count", "2"))));
- assertThrows(ShardingAlgorithmInitializationException.class, () -> new
ShardingRule(ruleConfig, Collections.emptyList(), mock(InstanceContext.class)));
+ assertThrows(ShardingAlgorithmInitializationException.class, () -> new
ShardingRule(ruleConfig, Collections.emptyMap(), mock(InstanceContext.class)));
}
@Test
@@ -135,7 +138,7 @@ class ShardingRuleTest {
tableRuleConfig.setDatabaseShardingStrategy(new
StandardShardingStrategyConfiguration("order_id", "MOD"));
ruleConfig.getTables().add(tableRuleConfig);
ruleConfig.getShardingAlgorithms().put("MOD", new
AlgorithmConfiguration("MOD", PropertiesBuilder.build(new
Property("sharding-count", "2"))));
- assertThrows(ShardingAlgorithmInitializationException.class, () -> new
ShardingRule(ruleConfig, Collections.emptyList(), mock(InstanceContext.class)));
+ assertThrows(ShardingAlgorithmInitializationException.class, () -> new
ShardingRule(ruleConfig, Collections.emptyMap(), mock(InstanceContext.class)));
}
@Test
@@ -145,7 +148,7 @@ class ShardingRuleTest {
tableRuleConfig.setTableShardingStrategy(new
StandardShardingStrategyConfiguration("order_id", "MOD"));
ruleConfig.getTables().add(tableRuleConfig);
ruleConfig.getShardingAlgorithms().put("MOD", new
AlgorithmConfiguration("MOD", PropertiesBuilder.build(new
Property("sharding-count", "2"))));
- assertThrows(ShardingAlgorithmInitializationException.class, () -> new
ShardingRule(ruleConfig, Collections.emptyList(), mock(InstanceContext.class)));
+ assertThrows(ShardingAlgorithmInitializationException.class, () -> new
ShardingRule(ruleConfig, Collections.emptyMap(), mock(InstanceContext.class)));
}
@Test
@@ -155,7 +158,7 @@ class ShardingRuleTest {
autoTableRuleConfig.setShardingStrategy(new
StandardShardingStrategyConfiguration("order_id", "INLINE"));
ruleConfig.getAutoTables().add(autoTableRuleConfig);
ruleConfig.getShardingAlgorithms().put("INLINE", new
AlgorithmConfiguration("INLINE", PropertiesBuilder.build(new
Property("algorithm-expression", "t_order_%{order_id % 2}"))));
- assertThrows(ShardingAlgorithmInitializationException.class, () -> new
ShardingRule(ruleConfig, Collections.emptyList(), mock(InstanceContext.class)));
+ assertThrows(ShardingAlgorithmInitializationException.class, () -> new
ShardingRule(ruleConfig, Collections.emptyMap(), mock(InstanceContext.class)));
}
@Test
@@ -261,7 +264,7 @@ class ShardingRuleTest {
shardingRuleConfig.getTables().add(createTableRuleConfigWithAllStrategies());
shardingRuleConfig.setDefaultDatabaseShardingStrategy(new
StandardShardingStrategyConfiguration("column", "CORE.STANDARD.FIXTURE"));
shardingRuleConfig.getShardingAlgorithms().put("core_standard_fixture", new
AlgorithmConfiguration("CORE.STANDARD.FIXTURE", new Properties()));
- Optional<String> actual = new ShardingRule(shardingRuleConfig,
createDataSourceNames(),
mock(InstanceContext.class)).findShardingColumn("column", "LOGIC_TABLE");
+ Optional<String> actual = new ShardingRule(shardingRuleConfig,
createDataSources(), mock(InstanceContext.class)).findShardingColumn("column",
"LOGIC_TABLE");
assertTrue(actual.isPresent());
assertThat(actual.get(), is("column"));
}
@@ -272,7 +275,7 @@ class ShardingRuleTest {
shardingRuleConfig.getTables().add(createTableRuleConfigWithAllStrategies());
shardingRuleConfig.setDefaultTableShardingStrategy(new
StandardShardingStrategyConfiguration("column", "core_standard_fixture"));
shardingRuleConfig.getShardingAlgorithms().put("core_standard_fixture", new
AlgorithmConfiguration("CORE.STANDARD.FIXTURE", new Properties()));
- Optional<String> actual = new ShardingRule(shardingRuleConfig,
createDataSourceNames(),
mock(InstanceContext.class)).findShardingColumn("column", "LOGIC_TABLE");
+ Optional<String> actual = new ShardingRule(shardingRuleConfig,
createDataSources(), mock(InstanceContext.class)).findShardingColumn("column",
"LOGIC_TABLE");
assertTrue(actual.isPresent());
assertThat(actual.get(), is("column"));
}
@@ -282,7 +285,7 @@ class ShardingRuleTest {
ShardingRuleConfiguration shardingRuleConfig = new
ShardingRuleConfiguration();
shardingRuleConfig.getTables().add(createTableRuleConfigWithAllStrategies());
shardingRuleConfig.getShardingAlgorithms().put("core_standard_fixture", new
AlgorithmConfiguration("CORE.STANDARD.FIXTURE", new Properties()));
- Optional<String> actual = new ShardingRule(shardingRuleConfig,
createDataSourceNames(),
mock(InstanceContext.class)).findShardingColumn("column", "logic_Table");
+ Optional<String> actual = new ShardingRule(shardingRuleConfig,
createDataSources(), mock(InstanceContext.class)).findShardingColumn("column",
"logic_Table");
assertTrue(actual.isPresent());
assertThat(actual.get(), is("column"));
}
@@ -292,7 +295,7 @@ class ShardingRuleTest {
ShardingRuleConfiguration shardingRuleConfig = new
ShardingRuleConfiguration();
shardingRuleConfig.getTables().add(createTableRuleConfigWithTableStrategies());
shardingRuleConfig.getShardingAlgorithms().put("core_standard_fixture", new
AlgorithmConfiguration("CORE.STANDARD.FIXTURE", new Properties()));
- Optional<String> actual = new ShardingRule(shardingRuleConfig,
createDataSourceNames(),
mock(InstanceContext.class)).findShardingColumn("column", "logic_Table");
+ Optional<String> actual = new ShardingRule(shardingRuleConfig,
createDataSources(), mock(InstanceContext.class)).findShardingColumn("column",
"logic_Table");
assertTrue(actual.isPresent());
assertThat(actual.get(), is("column"));
}
@@ -301,7 +304,7 @@ class ShardingRuleTest {
void assertIsNotShardingColumn() {
ShardingRuleConfiguration shardingRuleConfig = new
ShardingRuleConfiguration();
shardingRuleConfig.getTables().add(createTableRuleConfigWithAllStrategies());
- Optional<String> actual = new ShardingRule(shardingRuleConfig,
createDataSourceNames(),
mock(InstanceContext.class)).findShardingColumn("column", "other_Table");
+ Optional<String> actual = new ShardingRule(shardingRuleConfig,
createDataSources(), mock(InstanceContext.class)).findShardingColumn("column",
"other_Table");
assertFalse(actual.isPresent());
}
@@ -331,7 +334,7 @@ class ShardingRuleTest {
shardingRuleConfig.getTables().add(shardingTableRuleConfig);
shardingRuleConfig.getTables().add(subTableRuleConfig);
shardingRuleConfig.getBindingTableGroups().add(new
ShardingTableReferenceRuleConfiguration("foo",
shardingTableRuleConfig.getLogicTable() + "," +
subTableRuleConfig.getLogicTable()));
- assertThrows(InvalidBindingTablesException.class, () -> new
ShardingRule(shardingRuleConfig, createDataSourceNames(),
mock(InstanceContext.class)));
+ assertThrows(InvalidBindingTablesException.class, () -> new
ShardingRule(shardingRuleConfig, createDataSources(),
mock(InstanceContext.class)));
}
@Test
@@ -343,7 +346,7 @@ class ShardingRuleTest {
shardingRuleConfig.getTables().add(shardingTableRuleConfig);
shardingRuleConfig.getTables().add(subTableRuleConfig);
shardingRuleConfig.getBindingTableGroups().add(new
ShardingTableReferenceRuleConfiguration("foo",
shardingTableRuleConfig.getLogicTable() + "," +
subTableRuleConfig.getLogicTable()));
- assertThrows(InvalidBindingTablesException.class, () -> new
ShardingRule(shardingRuleConfig, createDataSourceNames(),
mock(InstanceContext.class)));
+ assertThrows(InvalidBindingTablesException.class, () -> new
ShardingRule(shardingRuleConfig, createDataSources(),
mock(InstanceContext.class)));
}
@Test
@@ -358,7 +361,7 @@ class ShardingRuleTest {
shardingRuleConfig.getShardingAlgorithms().put("shardingAlgorithmDB",
new AlgorithmConfiguration("INLINE", PropertiesBuilder.build(new
Property("algorithm-expression", "ds_%{ds_id % 2}"))));
subTableRuleConfig.setDatabaseShardingStrategy(new
StandardShardingStrategyConfiguration("ds_id", "subAlgorithmDB"));
shardingRuleConfig.getShardingAlgorithms().put("subAlgorithmDB", new
AlgorithmConfiguration("INLINE", PropertiesBuilder.build(new
Property("algorithm-expression", "ds_%{ds_id % 3}"))));
- assertThrows(InvalidBindingTablesException.class, () -> new
ShardingRule(shardingRuleConfig, createDataSourceNames(),
mock(InstanceContext.class)));
+ assertThrows(InvalidBindingTablesException.class, () -> new
ShardingRule(shardingRuleConfig, createDataSources(),
mock(InstanceContext.class)));
}
@Test
@@ -375,7 +378,7 @@ class ShardingRuleTest {
subTableRuleConfig.setTableShardingStrategy(new
StandardShardingStrategyConfiguration("table_id", "subAlgorithmTBL"));
shardingRuleConfig.getShardingAlgorithms().put(
"subAlgorithmTBL", new AlgorithmConfiguration("INLINE",
PropertiesBuilder.build(new Property("algorithm-expression", "table_%{table_id
% 3}"))));
- assertThrows(InvalidBindingTablesException.class, () -> new
ShardingRule(shardingRuleConfig, createDataSourceNames(),
mock(InstanceContext.class)));
+ assertThrows(InvalidBindingTablesException.class, () -> new
ShardingRule(shardingRuleConfig, createDataSources(),
mock(InstanceContext.class)));
}
@Test
@@ -392,7 +395,7 @@ class ShardingRuleTest {
shardingRuleConfig.setDefaultTableShardingStrategy(new
StandardShardingStrategyConfiguration("table_id", "table_inline"));
shardingRuleConfig.setDefaultShardingColumn("table_id");
shardingRuleConfig.getShardingAlgorithms().put("table_inline", new
AlgorithmConfiguration("INLINE", PropertiesBuilder.build(new
Property("algorithm-expression", "table_%{table_id % 3}"))));
- assertThrows(InvalidBindingTablesException.class, () -> new
ShardingRule(shardingRuleConfig, createDataSourceNames(),
mock(InstanceContext.class)));
+ assertThrows(InvalidBindingTablesException.class, () -> new
ShardingRule(shardingRuleConfig, createDataSources(),
mock(InstanceContext.class)));
}
@Test
@@ -453,7 +456,7 @@ class ShardingRuleTest {
autoTableRuleConfig.setShardingStrategy(new
StandardShardingStrategyConfiguration("order_id", "hash_mod"));
shardingRuleConfig.getAutoTables().add(autoTableRuleConfig);
shardingRuleConfig.getShardingAlgorithms().put("hash_mod", new
AlgorithmConfiguration("hash_mod", PropertiesBuilder.build(new
Property("sharding-count", "4"))));
- ShardingRule shardingRule = new ShardingRule(shardingRuleConfig,
createDataSourceNames(), mock(InstanceContext.class));
+ ShardingRule shardingRule = new ShardingRule(shardingRuleConfig,
createDataSources(), mock(InstanceContext.class));
assertThat(shardingRule.getDataSourceNames(), is(new
LinkedHashSet<>(Arrays.asList("ds_0", "ds_1", "resource0", "resource1"))));
}
@@ -462,7 +465,7 @@ class ShardingRuleTest {
ShardingRuleConfiguration shardingRuleConfig = new
ShardingRuleConfiguration();
ShardingTableRuleConfiguration shardingTableRuleConfig = new
ShardingTableRuleConfiguration("LOGIC_TABLE", "ds_${0..1}.table_${0..2}");
shardingRuleConfig.getTables().add(shardingTableRuleConfig);
- ShardingRule shardingRule = new ShardingRule(shardingRuleConfig,
createDataSourceNames(), mock(InstanceContext.class));
+ ShardingRule shardingRule = new ShardingRule(shardingRuleConfig,
createDataSources(), mock(InstanceContext.class));
assertThat(shardingRule.getDataSourceNames(), is(new
LinkedHashSet<>(Arrays.asList("ds_0", "ds_1"))));
}
@@ -473,15 +476,15 @@ class ShardingRuleTest {
autoTableRuleConfig.setShardingStrategy(new
StandardShardingStrategyConfiguration("order_id", "hash_mod"));
shardingRuleConfig.getAutoTables().add(autoTableRuleConfig);
shardingRuleConfig.getShardingAlgorithms().put("hash_mod", new
AlgorithmConfiguration("hash_mod", PropertiesBuilder.build(new
Property("sharding-count", "4"))));
- ShardingRule shardingRule = new ShardingRule(shardingRuleConfig,
createDataSourceNames(), mock(InstanceContext.class));
+ ShardingRule shardingRule = new ShardingRule(shardingRuleConfig,
createDataSources(), mock(InstanceContext.class));
assertThat(shardingRule.getDataSourceNames(), is(new
LinkedHashSet<>(Arrays.asList("resource0", "resource1"))));
}
@Test
void assertGetDataSourceNamesWithoutShardingTablesAndShardingAutoTables() {
ShardingRuleConfiguration shardingRuleConfig = new
ShardingRuleConfiguration();
- ShardingRule shardingRule = new ShardingRule(shardingRuleConfig,
createDataSourceNames(), mock(InstanceContext.class));
- assertThat(shardingRule.getDataSourceNames(), is(Arrays.asList("ds_0",
"ds_1", "resource0", "resource1")));
+ ShardingRule shardingRule = new ShardingRule(shardingRuleConfig,
createDataSources(), mock(InstanceContext.class));
+ assertThat(shardingRule.getDataSourceNames(), is(new
LinkedHashSet<>(Arrays.asList("ds_0", "ds_1", "resource0", "resource1"))));
}
private ShardingRule createMaximumShardingRule() {
@@ -503,14 +506,14 @@ class ShardingRuleTest {
shardingRuleConfig.getKeyGenerators().put("default", new
AlgorithmConfiguration("UUID", new Properties()));
shardingRuleConfig.getKeyGenerators().put("auto_increment", new
AlgorithmConfiguration("AUTO_INCREMENT.FIXTURE", new Properties()));
shardingRuleConfig.getAuditors().put("audit_algorithm", new
AlgorithmConfiguration("DML_SHARDING_CONDITIONS", new Properties()));
- return new ShardingRule(shardingRuleConfig, createDataSourceNames(),
mock(InstanceContext.class));
+ return new ShardingRule(shardingRuleConfig, createDataSources(),
mock(InstanceContext.class));
}
private ShardingRule createMinimumShardingRule() {
ShardingRuleConfiguration shardingRuleConfig = new
ShardingRuleConfiguration();
ShardingTableRuleConfiguration shardingTableRuleConfig =
createTableRuleConfiguration("LOGIC_TABLE", "ds_${0..1}.table_${0..2}");
shardingRuleConfig.getTables().add(shardingTableRuleConfig);
- return new ShardingRule(shardingRuleConfig, createDataSourceNames(),
mock(InstanceContext.class));
+ return new ShardingRule(shardingRuleConfig, createDataSources(),
mock(InstanceContext.class));
}
private ShardingTableRuleConfiguration createTableRuleConfiguration(final
String logicTableName, final String actualDataNodes) {
@@ -520,8 +523,8 @@ class ShardingRuleTest {
return result;
}
- private Collection<String> createDataSourceNames() {
- return Arrays.asList("ds_0", "ds_1", "resource0", "resource1");
+ private Map<String, DataSource> createDataSources() {
+ return Maps.of("ds_0", new MockedDataSource(), "ds_1", new
MockedDataSource(), "resource0", new MockedDataSource(), "resource1", new
MockedDataSource());
}
private ShardingTableRuleConfiguration
createTableRuleConfigWithAllStrategies() {
@@ -541,7 +544,7 @@ class ShardingRuleTest {
void assertFindShardingColumnForComplexShardingStrategy() {
ShardingRuleConfiguration shardingRuleConfig = new
ShardingRuleConfiguration();
shardingRuleConfig.getTables().add(createTableRuleConfigWithComplexStrategies());
- Optional<String> actual = new ShardingRule(shardingRuleConfig,
createDataSourceNames(),
mock(InstanceContext.class)).findShardingColumn("column1", "LOGIC_TABLE");
+ Optional<String> actual = new ShardingRule(shardingRuleConfig,
createDataSources(), mock(InstanceContext.class)).findShardingColumn("column1",
"LOGIC_TABLE");
assertTrue(actual.isPresent());
assertThat(actual.get(), is("COLUMN1"));
}
@@ -661,10 +664,8 @@ class ShardingRuleTest {
Collection<String> logicTableNames = new LinkedHashSet<>();
logicTableNames.add("logic_Table");
ShardingRuleConfiguration ruleConfig = new ShardingRuleConfiguration();
- Collection<String> dataSourceNames = new LinkedHashSet<>();
- dataSourceNames.add("resource0");
ruleConfig.getTables().add(new
ShardingTableRuleConfiguration("LOGIC_TABLE", "ds_${0}.table_${0..2}"));
- ShardingRule shardingRule = new ShardingRule(ruleConfig,
dataSourceNames, mock(InstanceContext.class));
+ ShardingRule shardingRule = new ShardingRule(ruleConfig,
Maps.of("resource0", new MockedDataSource()), mock(InstanceContext.class));
assertTrue(shardingRule.isAllTablesInSameDataSource(logicTableNames));
}
diff --git
a/features/sharding/distsql/handler/src/test/java/org/apache/shardingsphere/sharding/distsql/query/ShowShardingTableNodesExecutorTest.java
b/features/sharding/distsql/handler/src/test/java/org/apache/shardingsphere/sharding/distsql/query/ShowShardingTableNodesExecutorTest.java
index ffeffc4cdd0..f700957ad4e 100644
---
a/features/sharding/distsql/handler/src/test/java/org/apache/shardingsphere/sharding/distsql/query/ShowShardingTableNodesExecutorTest.java
+++
b/features/sharding/distsql/handler/src/test/java/org/apache/shardingsphere/sharding/distsql/query/ShowShardingTableNodesExecutorTest.java
@@ -18,6 +18,7 @@
package org.apache.shardingsphere.sharding.distsql.query;
import lombok.SneakyThrows;
+import org.apache.groovy.util.Maps;
import org.apache.shardingsphere.distsql.handler.query.RQLExecutor;
import org.apache.shardingsphere.infra.instance.InstanceContext;
import
org.apache.shardingsphere.infra.merge.result.impl.local.LocalDataQueryResultRow;
@@ -31,12 +32,12 @@ import
org.apache.shardingsphere.sharding.distsql.statement.ShowShardingTableNod
import
org.apache.shardingsphere.sharding.exception.metadata.ShardingRuleNotFoundException;
import org.apache.shardingsphere.sharding.rule.ShardingRule;
import
org.apache.shardingsphere.sharding.yaml.swapper.ShardingRuleConfigurationConverter;
+import org.apache.shardingsphere.test.fixture.jdbc.MockedDataSource;
import org.junit.jupiter.api.Test;
import java.io.File;
import java.io.IOException;
import java.net.URL;
-import java.util.Arrays;
import java.util.Collection;
import java.util.Collections;
import java.util.Iterator;
@@ -67,7 +68,7 @@ class ShowShardingTableNodesExecutorTest {
YamlRootConfiguration yamlRootConfig = YamlEngine.unmarshal(new
File(url.getFile()), YamlRootConfiguration.class);
ShardingRuleConfiguration shardingRuleConfig =
ShardingRuleConfigurationConverter.findAndConvertShardingRuleConfiguration(yamlRootConfig.getRules())
.orElseThrow(ShardingRuleNotFoundException::new);
- return new ShardingRule(shardingRuleConfig, Arrays.asList("ds_1",
"ds_2", "ds_3"), mock(InstanceContext.class));
+ return new ShardingRule(shardingRuleConfig, Maps.of("ds_1", new
MockedDataSource(), "ds_2", new MockedDataSource(), "ds_3", new
MockedDataSource()), mock(InstanceContext.class));
}
private void assertOrder(final ShardingSphereDatabase database) {
diff --git
a/jdbc/core/src/test/java/org/apache/shardingsphere/driver/jdbc/core/datasource/metadata/ShardingSphereDatabaseMetaDataTest.java
b/jdbc/core/src/test/java/org/apache/shardingsphere/driver/jdbc/core/datasource/metadata/ShardingSphereDatabaseMetaDataTest.java
index 037a7dfce3e..48522a9d5be 100644
---
a/jdbc/core/src/test/java/org/apache/shardingsphere/driver/jdbc/core/datasource/metadata/ShardingSphereDatabaseMetaDataTest.java
+++
b/jdbc/core/src/test/java/org/apache/shardingsphere/driver/jdbc/core/datasource/metadata/ShardingSphereDatabaseMetaDataTest.java
@@ -17,6 +17,7 @@
package org.apache.shardingsphere.driver.jdbc.core.datasource.metadata;
+import org.apache.groovy.util.Maps;
import
org.apache.shardingsphere.driver.jdbc.core.connection.ShardingSphereConnection;
import
org.apache.shardingsphere.driver.jdbc.core.resultset.DatabaseMetaDataResultSet;
import org.apache.shardingsphere.infra.database.core.DefaultDatabase;
@@ -26,6 +27,7 @@ import
org.apache.shardingsphere.mode.metadata.MetaDataContexts;
import org.apache.shardingsphere.sharding.api.config.ShardingRuleConfiguration;
import
org.apache.shardingsphere.sharding.api.config.rule.ShardingTableRuleConfiguration;
import org.apache.shardingsphere.sharding.rule.ShardingRule;
+import org.apache.shardingsphere.test.fixture.jdbc.MockedDataSource;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.extension.ExtendWith;
@@ -100,7 +102,7 @@ class ShardingSphereDatabaseMetaDataTest {
ShardingRuleConfiguration ruleConfig = new ShardingRuleConfiguration();
ShardingTableRuleConfiguration shardingTableRuleConfig = new
ShardingTableRuleConfiguration(TABLE_NAME, DATA_SOURCE_NAME + "." + TABLE_NAME);
ruleConfig.setTables(Collections.singleton(shardingTableRuleConfig));
- return new ShardingRule(ruleConfig,
Collections.singleton(DATA_SOURCE_NAME), mock(InstanceContext.class));
+ return new ShardingRule(ruleConfig, Maps.of(DATA_SOURCE_NAME, new
MockedDataSource()), mock(InstanceContext.class));
}
@Test
diff --git
a/proxy/backend/core/src/main/java/org/apache/shardingsphere/proxy/backend/util/YamlDatabaseConfigurationImportExecutor.java
b/proxy/backend/core/src/main/java/org/apache/shardingsphere/proxy/backend/util/YamlDatabaseConfigurationImportExecutor.java
index 9df70f3f0c8..f2b86364bb9 100644
---
a/proxy/backend/core/src/main/java/org/apache/shardingsphere/proxy/backend/util/YamlDatabaseConfigurationImportExecutor.java
+++
b/proxy/backend/core/src/main/java/org/apache/shardingsphere/proxy/backend/util/YamlDatabaseConfigurationImportExecutor.java
@@ -80,6 +80,7 @@ import org.apache.shardingsphere.single.rule.SingleRule;
import
org.apache.shardingsphere.single.yaml.config.pojo.YamlSingleRuleConfiguration;
import
org.apache.shardingsphere.single.yaml.config.swapper.YamlSingleRuleConfigurationSwapper;
+import javax.sql.DataSource;
import java.sql.SQLException;
import java.util.Collection;
import java.util.Collections;
@@ -252,7 +253,9 @@ public final class YamlDatabaseConfigurationImportExecutor {
InstanceContext instanceContext =
ProxyContext.getInstance().getContextManager().getInstanceContext();
shardingRuleConfigImportChecker.check(database, shardingRuleConfig);
allRuleConfigs.add(shardingRuleConfig);
- database.getRuleMetaData().getRules().add(new
ShardingRule(shardingRuleConfig,
database.getResourceMetaData().getStorageUnits().keySet(), instanceContext));
+ Map<String, DataSource> dataSources =
database.getResourceMetaData().getStorageUnits().entrySet().stream()
+ .collect(Collectors.toMap(Map.Entry::getKey, storageUnit ->
storageUnit.getValue().getDataSource(), (oldValue, currentValue) -> oldValue,
LinkedHashMap::new));
+ database.getRuleMetaData().getRules().add(new
ShardingRule(shardingRuleConfig, dataSources, instanceContext));
}
private void addReadwriteSplittingRuleConfiguration(final
ReadwriteSplittingRuleConfiguration readwriteSplittingRuleConfig,
diff --git
a/proxy/backend/core/src/test/java/org/apache/shardingsphere/proxy/backend/handler/distsql/ral/updatable/ImportDatabaseConfigurationUpdaterTest.java
b/proxy/backend/core/src/test/java/org/apache/shardingsphere/proxy/backend/handler/distsql/ral/updatable/ImportDatabaseConfigurationUpdaterTest.java
index 561df445c28..7f76358c61a 100644
---
a/proxy/backend/core/src/test/java/org/apache/shardingsphere/proxy/backend/handler/distsql/ral/updatable/ImportDatabaseConfigurationUpdaterTest.java
+++
b/proxy/backend/core/src/test/java/org/apache/shardingsphere/proxy/backend/handler/distsql/ral/updatable/ImportDatabaseConfigurationUpdaterTest.java
@@ -25,12 +25,14 @@ import
org.apache.shardingsphere.distsql.statement.ral.updatable.ImportDatabaseC
import org.apache.shardingsphere.infra.config.props.ConfigurationProperties;
import org.apache.shardingsphere.infra.config.props.ConfigurationPropertyKey;
import org.apache.shardingsphere.infra.database.core.DefaultDatabase;
+import org.apache.shardingsphere.infra.database.core.type.DatabaseType;
import
org.apache.shardingsphere.infra.exception.core.external.sql.type.generic.UnsupportedSQLOperationException;
import
org.apache.shardingsphere.infra.metadata.database.ShardingSphereDatabase;
import
org.apache.shardingsphere.infra.metadata.database.resource.ResourceMetaData;
import
org.apache.shardingsphere.infra.metadata.database.schema.model.ShardingSphereSchema;
import
org.apache.shardingsphere.infra.rule.identifier.type.DataSourceContainedRule;
import
org.apache.shardingsphere.infra.spi.exception.ServiceProviderNotFoundException;
+import org.apache.shardingsphere.infra.spi.type.typed.TypedSPILoader;
import org.apache.shardingsphere.mode.manager.ContextManager;
import org.apache.shardingsphere.proxy.backend.context.ProxyContext;
import
org.apache.shardingsphere.proxy.backend.util.YamlDatabaseConfigurationImportExecutor;
@@ -137,6 +139,7 @@ class ImportDatabaseConfigurationUpdaterTest {
ShardingSphereDatabase database = mock(ShardingSphereDatabase.class,
RETURNS_DEEP_STUBS);
ResourceMetaData resourceMetaData = mock(ResourceMetaData.class);
when(database.getResourceMetaData()).thenReturn(resourceMetaData);
+
when(database.getProtocolType()).thenReturn(TypedSPILoader.getService(DatabaseType.class,
"FIXTURE"));
ShardingSphereSchema schema = mock(ShardingSphereSchema.class);
when(database.getSchema(DefaultDatabase.LOGIC_NAME)).thenReturn(schema);
DataSourceContainedRule dataSourceContainedRule =
mock(DataSourceContainedRule.class);
diff --git
a/proxy/backend/core/src/test/java/org/apache/shardingsphere/proxy/backend/handler/distsql/rql/storage/unit/ShowStorageUnitExecutorTest.java
b/proxy/backend/core/src/test/java/org/apache/shardingsphere/proxy/backend/handler/distsql/rql/storage/unit/ShowStorageUnitExecutorTest.java
index b0dbe7c6db1..7750271aaef 100644
---
a/proxy/backend/core/src/test/java/org/apache/shardingsphere/proxy/backend/handler/distsql/rql/storage/unit/ShowStorageUnitExecutorTest.java
+++
b/proxy/backend/core/src/test/java/org/apache/shardingsphere/proxy/backend/handler/distsql/rql/storage/unit/ShowStorageUnitExecutorTest.java
@@ -19,6 +19,7 @@ package
org.apache.shardingsphere.proxy.backend.handler.distsql.rql.storage.unit
import org.apache.shardingsphere.distsql.handler.query.RQLExecutor;
import
org.apache.shardingsphere.distsql.statement.rql.show.ShowStorageUnitsStatement;
+import org.apache.shardingsphere.infra.config.algorithm.AlgorithmConfiguration;
import org.apache.shardingsphere.infra.instance.InstanceContext;
import
org.apache.shardingsphere.infra.merge.result.impl.local.LocalDataQueryResultRow;
import
org.apache.shardingsphere.infra.metadata.database.ShardingSphereDatabase;
@@ -72,7 +73,8 @@ class ShowStorageUnitExecutorTest {
ShardingTableRuleConfiguration shardingTableRuleConfig =
createTableRuleConfiguration("order", "ds_${0..1}.order_${0..1}");
shardingTableRuleConfig.setKeyGenerateStrategy(new
KeyGenerateStrategyConfiguration("id", "increment"));
shardingRuleConfig.getTables().add(shardingTableRuleConfig);
- return new ShardingRule(shardingRuleConfig, createDataSourceNames(),
mock(InstanceContext.class));
+ shardingRuleConfig.getKeyGenerators().put("increment",
mock(AlgorithmConfiguration.class));
+ return new ShardingRule(shardingRuleConfig, createDataSources(),
mock(InstanceContext.class));
}
private ShardingTableRuleConfiguration createTableRuleConfiguration(final
String logicTableName, final String actualDataNodes) {
diff --git
a/test/it/pipeline/src/test/resources/config_sharding_sphere_jdbc_target.yaml
b/test/it/pipeline/src/test/resources/config_sharding_sphere_jdbc_target.yaml
index eef745c81c8..d67dcd4f35a 100644
---
a/test/it/pipeline/src/test/resources/config_sharding_sphere_jdbc_target.yaml
+++
b/test/it/pipeline/src/test/resources/config_sharding_sphere_jdbc_target.yaml
@@ -15,6 +15,8 @@
# limitations under the License.
#
+databaseName: logic_db
+
props:
system-schema-metadata-enabled: false
@@ -39,9 +41,6 @@ rules:
autoTables:
t_order:
actualDataSources: ds_1,ds_2
- keyGenerateStrategy:
- column: order_id
- keyGeneratorName: snowflake
shardingStrategy:
standard:
shardingAlgorithmName: t_order_hash_mod
@@ -53,9 +52,6 @@ rules:
standard:
shardingColumn: order_id
shardingAlgorithmName: new_t_order_item_inline
- keyGenerateStrategy:
- column: order_id
- keyGeneratorName: snowflake
shardingAlgorithms:
database_inline: