This is an automated email from the ASF dual-hosted git repository.
zhangliang 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 d5e792aab6a Refactor GenericSchemaBuilderMaterial (#33986)
d5e792aab6a is described below
commit d5e792aab6a345685e23a1878075bd334c595664
Author: Liang Zhang <[email protected]>
AuthorDate: Tue Dec 10 14:20:56 2024 +0800
Refactor GenericSchemaBuilderMaterial (#33986)
* Refactor GenericSchemaBuilderMaterial
* Refactor GenericSchemaBuilderMaterial
* Refactor GenericSchemaBuilderMaterial
---
.../metadata/database/ShardingSphereDatabase.java | 5 ++--
.../schema/builder/GenericSchemaBuilder.java | 8 +++---
.../builder/GenericSchemaBuilderMaterial.java | 19 ++------------
.../schema/reviser/MetaDataReviseEngine.java | 5 ++--
.../database/schema/util/SchemaMetaDataUtils.java | 27 +++++++++----------
.../database/ShardingSphereDatabaseTest.java | 4 +--
.../builder/GenericSchemaBuilderMaterialTest.java | 5 ++--
.../schema/builder/GenericSchemaBuilderTest.java | 8 ++++--
.../schema/util/SchemaMetaDataUtilsTest.java | 30 ++++++++++------------
.../metadata/factory/ExternalMetaDataFactory.java | 6 ++---
.../mode/manager/ContextManager.java | 6 ++---
.../table/AlterTableStatementSchemaRefresher.java | 4 +--
.../table/CreateTableStatementSchemaRefresher.java | 4 +--
.../table/RenameTableStatementSchemaRefresher.java | 4 +--
.../view/AlterViewStatementSchemaRefresher.java | 4 +--
.../view/CreateViewStatementSchemaRefresher.java | 4 +--
16 files changed, 61 insertions(+), 82 deletions(-)
diff --git
a/infra/common/src/main/java/org/apache/shardingsphere/infra/metadata/database/ShardingSphereDatabase.java
b/infra/common/src/main/java/org/apache/shardingsphere/infra/metadata/database/ShardingSphereDatabase.java
index 8233629431e..ba75ae4b37f 100644
---
a/infra/common/src/main/java/org/apache/shardingsphere/infra/metadata/database/ShardingSphereDatabase.java
+++
b/infra/common/src/main/java/org/apache/shardingsphere/infra/metadata/database/ShardingSphereDatabase.java
@@ -92,19 +92,18 @@ public final class ShardingSphereDatabase {
*
* @param name database name
* @param protocolType database protocol type
- * @param storageTypes storage types
* @param databaseConfig database configuration
* @param props configuration properties
* @param computeNodeInstanceContext compute node instance context
* @return created database
* @throws SQLException SQL exception
*/
- public static ShardingSphereDatabase create(final String name, final
DatabaseType protocolType, final Map<String, DatabaseType> storageTypes, final
DatabaseConfiguration databaseConfig,
+ public static ShardingSphereDatabase create(final String name, final
DatabaseType protocolType, final DatabaseConfiguration databaseConfig,
final ConfigurationProperties
props, final ComputeNodeInstanceContext computeNodeInstanceContext) throws
SQLException {
ResourceMetaData resourceMetaData = new
ResourceMetaData(databaseConfig.getDataSources(),
databaseConfig.getStorageUnits());
Collection<ShardingSphereRule> databaseRules =
DatabaseRulesBuilder.build(name, protocolType, databaseConfig,
computeNodeInstanceContext, resourceMetaData);
Map<String, ShardingSphereSchema> schemas = new
ConcurrentHashMap<>(GenericSchemaBuilder.build(new GenericSchemaBuilderMaterial(
- protocolType, storageTypes,
resourceMetaData.getDataSourceMap(), databaseRules, props, new
DatabaseTypeRegistry(protocolType).getDefaultSchemaName(name))));
+ protocolType, resourceMetaData.getStorageUnits(),
databaseRules, props, new
DatabaseTypeRegistry(protocolType).getDefaultSchemaName(name))));
SystemSchemaBuilder.build(name, protocolType,
props).forEach(schemas::putIfAbsent);
return new ShardingSphereDatabase(name, protocolType,
resourceMetaData, new RuleMetaData(databaseRules), schemas.values());
}
diff --git
a/infra/common/src/main/java/org/apache/shardingsphere/infra/metadata/database/schema/builder/GenericSchemaBuilder.java
b/infra/common/src/main/java/org/apache/shardingsphere/infra/metadata/database/schema/builder/GenericSchemaBuilder.java
index 323c34ee156..703879d0ee5 100644
---
a/infra/common/src/main/java/org/apache/shardingsphere/infra/metadata/database/schema/builder/GenericSchemaBuilder.java
+++
b/infra/common/src/main/java/org/apache/shardingsphere/infra/metadata/database/schema/builder/GenericSchemaBuilder.java
@@ -27,8 +27,8 @@ import
org.apache.shardingsphere.infra.database.core.metadata.data.model.Constra
import
org.apache.shardingsphere.infra.database.core.metadata.data.model.IndexMetaData;
import
org.apache.shardingsphere.infra.database.core.metadata.data.model.SchemaMetaData;
import
org.apache.shardingsphere.infra.database.core.metadata.data.model.TableMetaData;
-import org.apache.shardingsphere.infra.database.core.type.DatabaseType;
import org.apache.shardingsphere.infra.database.core.type.DatabaseTypeRegistry;
+import
org.apache.shardingsphere.infra.metadata.database.resource.unit.StorageUnit;
import
org.apache.shardingsphere.infra.metadata.database.schema.model.ShardingSphereColumn;
import
org.apache.shardingsphere.infra.metadata.database.schema.model.ShardingSphereConstraint;
import
org.apache.shardingsphere.infra.metadata.database.schema.model.ShardingSphereIndex;
@@ -87,7 +87,7 @@ public final class GenericSchemaBuilder {
private static Collection<String> getAllTableNames(final
Collection<ShardingSphereRule> rules) {
Collection<String> result = new HashSet<>();
for (ShardingSphereRule each : rules) {
-
each.getAttributes().findAttribute(TableMapperRuleAttribute.class).ifPresent(mapperRule
-> result.addAll(mapperRule.getLogicTableNames()));
+
each.getAttributes().findAttribute(TableMapperRuleAttribute.class).ifPresent(optional
-> result.addAll(optional.getLogicTableNames()));
}
return result;
}
@@ -100,8 +100,8 @@ public final class GenericSchemaBuilder {
private static Map<String, SchemaMetaData> translate(final Map<String,
SchemaMetaData> schemaMetaDataMap, final GenericSchemaBuilderMaterial material)
{
Collection<TableMetaData> tableMetaDataList = new LinkedList<>();
- for (DatabaseType each : material.getStorageTypes().values()) {
- String defaultSchemaName = new
DatabaseTypeRegistry(each).getDefaultSchemaName(material.getDefaultSchemaName());
+ for (StorageUnit each : material.getStorageUnits().values()) {
+ String defaultSchemaName = new
DatabaseTypeRegistry(each.getStorageType()).getDefaultSchemaName(material.getDefaultSchemaName());
tableMetaDataList.addAll(Optional.ofNullable(schemaMetaDataMap.get(defaultSchemaName)).map(SchemaMetaData::getTables).orElseGet(Collections::emptyList));
}
String frontendSchemaName = new
DatabaseTypeRegistry(material.getProtocolType()).getDefaultSchemaName(material.getDefaultSchemaName());
diff --git
a/infra/common/src/main/java/org/apache/shardingsphere/infra/metadata/database/schema/builder/GenericSchemaBuilderMaterial.java
b/infra/common/src/main/java/org/apache/shardingsphere/infra/metadata/database/schema/builder/GenericSchemaBuilderMaterial.java
index 3aeb4f5e8d1..d1a05c2124a 100644
---
a/infra/common/src/main/java/org/apache/shardingsphere/infra/metadata/database/schema/builder/GenericSchemaBuilderMaterial.java
+++
b/infra/common/src/main/java/org/apache/shardingsphere/infra/metadata/database/schema/builder/GenericSchemaBuilderMaterial.java
@@ -24,12 +24,8 @@ import
org.apache.shardingsphere.infra.database.core.type.DatabaseType;
import
org.apache.shardingsphere.infra.metadata.database.resource.unit.StorageUnit;
import org.apache.shardingsphere.infra.rule.ShardingSphereRule;
-import javax.sql.DataSource;
import java.util.Collection;
-import java.util.LinkedHashMap;
import java.util.Map;
-import java.util.Map.Entry;
-import java.util.stream.Collectors;
/**
* ShardingSphere schema builder material.
@@ -40,9 +36,7 @@ public final class GenericSchemaBuilderMaterial {
private final DatabaseType protocolType;
- private final Map<String, DatabaseType> storageTypes;
-
- private final Map<String, DataSource> dataSourceMap;
+ private final Map<String, StorageUnit> storageUnits;
private final Collection<ShardingSphereRule> rules;
@@ -50,21 +44,12 @@ public final class GenericSchemaBuilderMaterial {
private final String defaultSchemaName;
- public GenericSchemaBuilderMaterial(final DatabaseType protocolType, final
Map<String, StorageUnit> storageUnits,
- final Collection<ShardingSphereRule>
rules, final ConfigurationProperties props, final String defaultSchemaName) {
- this(protocolType, storageUnits.entrySet().stream()
- .collect(Collectors.toMap(Entry::getKey, entry ->
entry.getValue().getStorageType(), (oldValue, currentValue) -> oldValue,
LinkedHashMap::new)),
- storageUnits.entrySet().stream()
- .collect(Collectors.toMap(Entry::getKey, entry ->
entry.getValue().getDataSource(), (oldValue, currentValue) -> oldValue,
LinkedHashMap::new)),
- rules, props, defaultSchemaName);
- }
-
/**
* Judge whether same protocol and storage database types.
*
* @return is same or not
*/
public boolean isSameProtocolAndStorageTypes() {
- return storageTypes.values().stream().allMatch(protocolType::equals);
+ return
storageUnits.values().stream().map(StorageUnit::getStorageType).allMatch(protocolType::equals);
}
}
diff --git
a/infra/common/src/main/java/org/apache/shardingsphere/infra/metadata/database/schema/reviser/MetaDataReviseEngine.java
b/infra/common/src/main/java/org/apache/shardingsphere/infra/metadata/database/schema/reviser/MetaDataReviseEngine.java
index 8ed529f77b8..6ddf574a133 100644
---
a/infra/common/src/main/java/org/apache/shardingsphere/infra/metadata/database/schema/reviser/MetaDataReviseEngine.java
+++
b/infra/common/src/main/java/org/apache/shardingsphere/infra/metadata/database/schema/reviser/MetaDataReviseEngine.java
@@ -19,6 +19,7 @@ package
org.apache.shardingsphere.infra.metadata.database.schema.reviser;
import lombok.RequiredArgsConstructor;
import org.apache.shardingsphere.infra.database.core.type.DatabaseType;
+import
org.apache.shardingsphere.infra.metadata.database.resource.unit.StorageUnit;
import
org.apache.shardingsphere.infra.metadata.database.schema.builder.GenericSchemaBuilderMaterial;
import
org.apache.shardingsphere.infra.database.core.metadata.data.model.SchemaMetaData;
import
org.apache.shardingsphere.infra.metadata.database.schema.reviser.schema.SchemaMetaDataReviseEngine;
@@ -49,8 +50,8 @@ public final class MetaDataReviseEngine {
Map<String, SchemaMetaData> result = new
LinkedHashMap<>(schemaMetaDataMap.size(), 1F);
for (Entry<String, SchemaMetaData> entry :
schemaMetaDataMap.entrySet()) {
// TODO establish a corresponding relationship between tables and
data sources
- DatabaseType databaseType =
material.getStorageTypes().values().stream().findFirst().orElse(null);
- DataSource dataSource =
material.getDataSourceMap().values().stream().findFirst().orElse(null);
+ DatabaseType databaseType =
material.getStorageUnits().values().stream().map(StorageUnit::getStorageType).findFirst().orElse(null);
+ DataSource dataSource =
material.getStorageUnits().values().stream().map(StorageUnit::getDataSource).findFirst().orElse(null);
result.put(entry.getKey(), new SchemaMetaDataReviseEngine(rules,
material.getProps(), databaseType, dataSource).revise(entry.getValue()));
}
return result;
diff --git
a/infra/common/src/main/java/org/apache/shardingsphere/infra/metadata/database/schema/util/SchemaMetaDataUtils.java
b/infra/common/src/main/java/org/apache/shardingsphere/infra/metadata/database/schema/util/SchemaMetaDataUtils.java
index 63d51985a17..10571c905dd 100644
---
a/infra/common/src/main/java/org/apache/shardingsphere/infra/metadata/database/schema/util/SchemaMetaDataUtils.java
+++
b/infra/common/src/main/java/org/apache/shardingsphere/infra/metadata/database/schema/util/SchemaMetaDataUtils.java
@@ -26,6 +26,7 @@ import
org.apache.shardingsphere.infra.database.core.type.DatabaseTypeRegistry;
import org.apache.shardingsphere.infra.datanode.DataNode;
import org.apache.shardingsphere.infra.datanode.DataNodes;
import
org.apache.shardingsphere.infra.exception.core.ShardingSpherePreconditions;
+import
org.apache.shardingsphere.infra.metadata.database.resource.unit.StorageUnit;
import
org.apache.shardingsphere.infra.metadata.database.schema.builder.GenericSchemaBuilderMaterial;
import
org.apache.shardingsphere.infra.exception.kernel.metadata.datanode.UnsupportedActualDataNodeStructureException;
@@ -36,6 +37,7 @@ import java.util.LinkedList;
import java.util.Map;
import java.util.Map.Entry;
import java.util.Optional;
+import java.util.stream.Collectors;
/**
* Schema meta data utility class.
@@ -53,7 +55,7 @@ public final class SchemaMetaDataUtils {
*/
public static Collection<MetaDataLoaderMaterial>
getMetaDataLoaderMaterials(final Collection<String> tableNames, final
GenericSchemaBuilderMaterial material, final boolean checkMetaDataEnable) {
Map<String, Collection<String>> dataSourceTableGroups = new
LinkedHashMap<>();
- Collection<DatabaseType>
unsupportedThreeTierStorageStructureDatabaseTypes =
getUnsupportedThreeTierStorageStructureDatabaseTypes(material.getStorageTypes().values());
+ Collection<DatabaseType>
unsupportedThreeTierStorageStructureDatabaseTypes =
getUnsupportedThreeTierStorageStructureDatabaseTypes(material.getStorageUnits().values());
DataNodes dataNodes = new DataNodes(material.getRules());
for (String each : tableNames) {
checkDataSourceTypeIncludeInstanceAndSetDatabaseTableMap(unsupportedThreeTierStorageStructureDatabaseTypes,
dataNodes, each);
@@ -65,7 +67,7 @@ public final class SchemaMetaDataUtils {
}
Collection<MetaDataLoaderMaterial> result = new LinkedList<>();
for (Entry<String, Collection<String>> entry :
dataSourceTableGroups.entrySet()) {
- DatabaseType storageType =
material.getStorageTypes().get(entry.getKey());
+ DatabaseType storageType =
material.getStorageUnits().get(entry.getKey()).getStorageType();
String defaultSchemaName =
getDefaultSchemaNameByStorageType(storageType, material.getDefaultSchemaName());
result.add(new MetaDataLoaderMaterial(entry.getValue(),
entry.getKey(), getDataSource(material, entry.getKey()), storageType,
defaultSchemaName));
}
@@ -77,7 +79,7 @@ public final class SchemaMetaDataUtils {
}
private static DataSource getDataSource(final GenericSchemaBuilderMaterial
material, final String dataSourceName) {
- return material.getDataSourceMap().get(dataSourceName.contains(".") ?
dataSourceName.split("\\.")[0] : dataSourceName);
+ return material.getStorageUnits().get(dataSourceName.contains(".") ?
dataSourceName.split("\\.")[0] : dataSourceName).getDataSource();
}
private static void
checkDataSourceTypeIncludeInstanceAndSetDatabaseTableMap(final
Collection<DatabaseType> notSupportThreeTierStructureStorageTypes, final
DataNodes dataNodes,
@@ -93,30 +95,25 @@ public final class SchemaMetaDataUtils {
}
}
- private static Collection<DatabaseType>
getUnsupportedThreeTierStorageStructureDatabaseTypes(final
Collection<DatabaseType> storageTypes) {
- Collection<DatabaseType> result = new LinkedList<>();
- for (DatabaseType each : storageTypes) {
- if (!new
DatabaseTypeRegistry(each).getDialectDatabaseMetaData().isSupportThreeTierStorageStructure())
{
- result.add(each);
- }
- }
- return result;
+ private static Collection<DatabaseType>
getUnsupportedThreeTierStorageStructureDatabaseTypes(final
Collection<StorageUnit> storageUnits) {
+ return storageUnits.stream()
+ .map(StorageUnit::getStorageType).filter(each -> !new
DatabaseTypeRegistry(each).getDialectDatabaseMetaData().isSupportThreeTierStorageStructure()).collect(Collectors.toList());
}
private static void addOneActualTableDataNode(final
GenericSchemaBuilderMaterial material,
final Map<String,
Collection<String>> dataSourceTableGroups, final DataNodes dataNodes, final
String table) {
Optional<DataNode> dataNode =
dataNodes.getDataNodes(table).stream().filter(each ->
isSameDataSourceNameSchemaName(material, each)).findFirst();
- if (!dataNode.isPresent() &&
!material.getDataSourceMap().keySet().iterator().hasNext()) {
+ if (!dataNode.isPresent() &&
!material.getStorageUnits().keySet().iterator().hasNext()) {
return;
}
- String dataSourceName =
dataNode.map(DataNode::getDataSourceName).orElseGet(() ->
material.getDataSourceMap().keySet().iterator().next());
+ String dataSourceName =
dataNode.map(DataNode::getDataSourceName).orElseGet(() ->
material.getStorageUnits().keySet().iterator().next());
String tableName = dataNode.map(DataNode::getTableName).orElse(table);
addDataSourceTableGroups(dataSourceName, tableName,
dataSourceTableGroups);
}
private static boolean isSameDataSourceNameSchemaName(final
GenericSchemaBuilderMaterial material, final DataNode dataNode) {
String dataSourceName = dataNode.getDataSourceName().contains(".") ?
dataNode.getDataSourceName().split("\\.")[0] : dataNode.getDataSourceName();
- if (!material.getDataSourceMap().containsKey(dataSourceName)) {
+ if (!material.getStorageUnits().containsKey(dataSourceName)) {
return false;
}
return null == dataNode.getSchemaName() ||
dataNode.getSchemaName().equalsIgnoreCase(material.getDefaultSchemaName());
@@ -126,7 +123,7 @@ public final class SchemaMetaDataUtils {
final Map<String,
Collection<String>> dataSourceTableGroups, final DataNodes dataNodes, final
String table) {
Collection<DataNode> tableDataNodes = dataNodes.getDataNodes(table);
if (tableDataNodes.isEmpty()) {
-
addDataSourceTableGroups(material.getDataSourceMap().keySet().iterator().next(),
table, dataSourceTableGroups);
+
addDataSourceTableGroups(material.getStorageUnits().keySet().iterator().next(),
table, dataSourceTableGroups);
} else {
tableDataNodes.forEach(each ->
addDataSourceTableGroups(each.getDataSourceName(), each.getTableName(),
dataSourceTableGroups));
}
diff --git
a/infra/common/src/test/java/org/apache/shardingsphere/infra/metadata/database/ShardingSphereDatabaseTest.java
b/infra/common/src/test/java/org/apache/shardingsphere/infra/metadata/database/ShardingSphereDatabaseTest.java
index 73258c6c2c6..03bea574939 100644
---
a/infra/common/src/test/java/org/apache/shardingsphere/infra/metadata/database/ShardingSphereDatabaseTest.java
+++
b/infra/common/src/test/java/org/apache/shardingsphere/infra/metadata/database/ShardingSphereDatabaseTest.java
@@ -154,7 +154,7 @@ class ShardingSphereDatabaseTest {
@Test
void assertGetPostgreSQLDefaultSchema() throws SQLException {
DatabaseType databaseType =
TypedSPILoader.getService(DatabaseType.class, "PostgreSQL");
- ShardingSphereDatabase actual =
ShardingSphereDatabase.create("foo_db", databaseType,
Collections.singletonMap("", databaseType),
+ ShardingSphereDatabase actual =
ShardingSphereDatabase.create("foo_db", databaseType,
mock(DataSourceProvidedDatabaseConfiguration.class), new
ConfigurationProperties(new Properties()),
mock(ComputeNodeInstanceContext.class));
assertNotNull(actual.getSchema("public"));
}
@@ -162,7 +162,7 @@ class ShardingSphereDatabaseTest {
@Test
void assertGetMySQLDefaultSchema() throws SQLException {
DatabaseType databaseType =
TypedSPILoader.getService(DatabaseType.class, "MySQL");
- ShardingSphereDatabase actual =
ShardingSphereDatabase.create("foo_db", databaseType,
Collections.singletonMap("", databaseType),
+ ShardingSphereDatabase actual =
ShardingSphereDatabase.create("foo_db", databaseType,
mock(DataSourceProvidedDatabaseConfiguration.class), new
ConfigurationProperties(new Properties()),
mock(ComputeNodeInstanceContext.class));
assertNotNull(actual.getSchema("foo_db"));
}
diff --git
a/infra/common/src/test/java/org/apache/shardingsphere/infra/metadata/database/schema/builder/GenericSchemaBuilderMaterialTest.java
b/infra/common/src/test/java/org/apache/shardingsphere/infra/metadata/database/schema/builder/GenericSchemaBuilderMaterialTest.java
index 3b3237496fa..65546d0dffa 100644
---
a/infra/common/src/test/java/org/apache/shardingsphere/infra/metadata/database/schema/builder/GenericSchemaBuilderMaterialTest.java
+++
b/infra/common/src/test/java/org/apache/shardingsphere/infra/metadata/database/schema/builder/GenericSchemaBuilderMaterialTest.java
@@ -27,13 +27,13 @@ import java.util.Properties;
import static org.junit.jupiter.api.Assertions.assertFalse;
import static org.junit.jupiter.api.Assertions.assertTrue;
+import static org.mockito.Mockito.mock;
class GenericSchemaBuilderMaterialTest {
@Test
void assertIsSameProtocolAndStorageTypes() {
GenericSchemaBuilderMaterial material = new
GenericSchemaBuilderMaterial(TypedSPILoader.getService(DatabaseType.class,
"FIXTURE"),
- Collections.singletonMap("foo",
TypedSPILoader.getService(DatabaseType.class, "FIXTURE")),
Collections.emptyMap(), Collections.emptyList(), new
ConfigurationProperties(new Properties()), "");
assertTrue(material.isSameProtocolAndStorageTypes());
}
@@ -41,8 +41,7 @@ class GenericSchemaBuilderMaterialTest {
@Test
void assertIsDifferentProtocolAndStorageTypes() {
GenericSchemaBuilderMaterial material = new
GenericSchemaBuilderMaterial(TypedSPILoader.getService(DatabaseType.class,
"FIXTURE"),
- Collections.singletonMap("foo", null),
- Collections.emptyMap(), Collections.emptyList(), new
ConfigurationProperties(new Properties()), "");
+ Collections.singletonMap("foo", mock()),
Collections.emptyList(), new ConfigurationProperties(new Properties()), "");
assertFalse(material.isSameProtocolAndStorageTypes());
}
}
diff --git
a/infra/common/src/test/java/org/apache/shardingsphere/infra/metadata/database/schema/builder/GenericSchemaBuilderTest.java
b/infra/common/src/test/java/org/apache/shardingsphere/infra/metadata/database/schema/builder/GenericSchemaBuilderTest.java
index 7f9fc6cd54d..deb2a7fb5ba 100644
---
a/infra/common/src/test/java/org/apache/shardingsphere/infra/metadata/database/schema/builder/GenericSchemaBuilderTest.java
+++
b/infra/common/src/test/java/org/apache/shardingsphere/infra/metadata/database/schema/builder/GenericSchemaBuilderTest.java
@@ -22,6 +22,7 @@ import
org.apache.shardingsphere.infra.database.core.metadata.data.loader.MetaDa
import
org.apache.shardingsphere.infra.database.core.metadata.data.model.SchemaMetaData;
import
org.apache.shardingsphere.infra.database.core.metadata.data.model.TableMetaData;
import org.apache.shardingsphere.infra.database.core.type.DatabaseType;
+import
org.apache.shardingsphere.infra.metadata.database.resource.unit.StorageUnit;
import
org.apache.shardingsphere.infra.metadata.database.schema.model.ShardingSphereSchema;
import org.apache.shardingsphere.infra.rule.ShardingSphereRule;
import org.apache.shardingsphere.infra.rule.attribute.RuleAttributes;
@@ -64,8 +65,11 @@ class GenericSchemaBuilderTest {
DatabaseType databaseType =
TypedSPILoader.getService(DatabaseType.class, "FIXTURE");
ShardingSphereRule rule = mock(ShardingSphereRule.class);
when(rule.getAttributes()).thenReturn(new
RuleAttributes(mock(TableMapperRuleAttribute.class)));
- material = new GenericSchemaBuilderMaterial(databaseType,
Collections.singletonMap("foo_db", databaseType),
- Collections.singletonMap("foo_db", new MockedDataSource()),
Collections.singleton(rule), new ConfigurationProperties(new Properties()),
"foo_db");
+ StorageUnit storageUnit = mock(StorageUnit.class);
+ when(storageUnit.getStorageType()).thenReturn(databaseType);
+ when(storageUnit.getDataSource()).thenReturn(new MockedDataSource());
+ material = new GenericSchemaBuilderMaterial(
+ databaseType, Collections.singletonMap("foo_db", storageUnit),
Collections.singleton(rule), new ConfigurationProperties(new Properties()),
"foo_db");
}
@Test
diff --git
a/infra/common/src/test/java/org/apache/shardingsphere/infra/metadata/database/schema/util/SchemaMetaDataUtilsTest.java
b/infra/common/src/test/java/org/apache/shardingsphere/infra/metadata/database/schema/util/SchemaMetaDataUtilsTest.java
index b10d3fb333b..60877a908a5 100644
---
a/infra/common/src/test/java/org/apache/shardingsphere/infra/metadata/database/schema/util/SchemaMetaDataUtilsTest.java
+++
b/infra/common/src/test/java/org/apache/shardingsphere/infra/metadata/database/schema/util/SchemaMetaDataUtilsTest.java
@@ -21,6 +21,7 @@ import
org.apache.shardingsphere.infra.config.props.ConfigurationProperties;
import
org.apache.shardingsphere.infra.database.core.metadata.data.loader.MetaDataLoaderMaterial;
import org.apache.shardingsphere.infra.database.core.type.DatabaseType;
import org.apache.shardingsphere.infra.datanode.DataNode;
+import
org.apache.shardingsphere.infra.metadata.database.resource.unit.StorageUnit;
import
org.apache.shardingsphere.infra.metadata.database.schema.builder.GenericSchemaBuilderMaterial;
import org.apache.shardingsphere.infra.rule.ShardingSphereRule;
import org.apache.shardingsphere.infra.rule.attribute.RuleAttributes;
@@ -29,7 +30,6 @@ import
org.apache.shardingsphere.infra.spi.type.typed.TypedSPILoader;
import org.apache.shardingsphere.test.fixture.jdbc.MockedDataSource;
import org.junit.jupiter.api.Test;
-import javax.sql.DataSource;
import java.util.Arrays;
import java.util.Collection;
import java.util.Collections;
@@ -54,7 +54,7 @@ class SchemaMetaDataUtilsTest {
ShardingSphereRule rule1 = mock(ShardingSphereRule.class);
when(rule1.getAttributes()).thenReturn(new RuleAttributes());
GenericSchemaBuilderMaterial material = new
GenericSchemaBuilderMaterial(
- mock(DatabaseType.class), mockStorageTypes(),
mockDataSourceMap(), Arrays.asList(rule0, rule1),
mock(ConfigurationProperties.class), "sharding_db");
+ mock(DatabaseType.class), mockStorageUnits(),
Arrays.asList(rule0, rule1), mock(ConfigurationProperties.class),
"sharding_db");
Collection<MetaDataLoaderMaterial> actual =
SchemaMetaDataUtils.getMetaDataLoaderMaterials(Collections.singleton("t_order"),
material, true);
assertThat(actual.size(), is(2));
Iterator<MetaDataLoaderMaterial> iterator = actual.iterator();
@@ -75,7 +75,7 @@ class SchemaMetaDataUtilsTest {
ShardingSphereRule rule1 = mock(ShardingSphereRule.class);
when(rule1.getAttributes()).thenReturn(new RuleAttributes());
GenericSchemaBuilderMaterial material = new
GenericSchemaBuilderMaterial(
- mock(DatabaseType.class), mockStorageTypes(),
mockDataSourceMap(), Arrays.asList(rule0, rule1),
mock(ConfigurationProperties.class), "sharding_db");
+ mock(DatabaseType.class), mockStorageUnits(),
Arrays.asList(rule0, rule1), mock(ConfigurationProperties.class),
"sharding_db");
Collection<MetaDataLoaderMaterial> actual =
SchemaMetaDataUtils.getMetaDataLoaderMaterials(Collections.singleton("t_order"),
material, false);
assertThat(actual.size(), is(1));
Iterator<MetaDataLoaderMaterial> iterator = actual.iterator();
@@ -93,7 +93,7 @@ class SchemaMetaDataUtilsTest {
ShardingSphereRule rule1 = mock(ShardingSphereRule.class);
when(rule1.getAttributes()).thenReturn(new RuleAttributes());
GenericSchemaBuilderMaterial material = new
GenericSchemaBuilderMaterial(
- mock(DatabaseType.class), mockStorageTypes(),
mockDataSourceMap(), Arrays.asList(rule0, rule1),
mock(ConfigurationProperties.class), "public");
+ mock(DatabaseType.class), mockStorageUnits(),
Arrays.asList(rule0, rule1), mock(ConfigurationProperties.class), "public");
Collection<MetaDataLoaderMaterial> actual =
SchemaMetaDataUtils.getMetaDataLoaderMaterials(Collections.singleton("t_single"),
material, false);
assertThat(actual.size(), is(1));
Iterator<MetaDataLoaderMaterial> iterator = actual.iterator();
@@ -114,18 +114,16 @@ class SchemaMetaDataUtilsTest {
return Arrays.asList(firstDataNode, secondDataNode);
}
- private Map<String, DataSource> mockDataSourceMap() {
- Map<String, DataSource> result = new HashMap<>(2, 1F);
- result.put("ds_0", new MockedDataSource());
- result.put("ds_1", new MockedDataSource());
- return result;
- }
-
- private Map<String, DatabaseType> mockStorageTypes() {
- Map<String, DatabaseType> result = new HashMap<>(2, 1F);
- DatabaseType databaseType =
TypedSPILoader.getService(DatabaseType.class, "FIXTURE");
- result.put("ds_0", databaseType);
- result.put("ds_1", databaseType);
+ private Map<String, StorageUnit> mockStorageUnits() {
+ Map<String, StorageUnit> result = new HashMap<>(2, 1F);
+ StorageUnit storageUnit1 = mock(StorageUnit.class);
+
when(storageUnit1.getStorageType()).thenReturn(TypedSPILoader.getService(DatabaseType.class,
"FIXTURE"));
+ when(storageUnit1.getDataSource()).thenReturn(new MockedDataSource());
+ result.put("ds_0", storageUnit1);
+ StorageUnit storageUnit2 = mock(StorageUnit.class);
+
when(storageUnit2.getStorageType()).thenReturn(TypedSPILoader.getService(DatabaseType.class,
"FIXTURE"));
+ when(storageUnit2.getDataSource()).thenReturn(new MockedDataSource());
+ result.put("ds_1", storageUnit2);
return result;
}
}
diff --git
a/kernel/metadata/core/src/main/java/org/apache/shardingsphere/metadata/factory/ExternalMetaDataFactory.java
b/kernel/metadata/core/src/main/java/org/apache/shardingsphere/metadata/factory/ExternalMetaDataFactory.java
index 3746fd2d408..7b654d910aa 100644
---
a/kernel/metadata/core/src/main/java/org/apache/shardingsphere/metadata/factory/ExternalMetaDataFactory.java
+++
b/kernel/metadata/core/src/main/java/org/apache/shardingsphere/metadata/factory/ExternalMetaDataFactory.java
@@ -51,8 +51,7 @@ public final class ExternalMetaDataFactory {
*/
public static ShardingSphereDatabase create(final String databaseName,
final DatabaseConfiguration databaseConfig,
final ConfigurationProperties
props, final ComputeNodeInstanceContext computeNodeInstanceContext) throws
SQLException {
- return ShardingSphereDatabase.create(databaseName,
DatabaseTypeEngine.getProtocolType(databaseConfig, props),
- DatabaseTypeEngine.getStorageTypes(databaseConfig),
databaseConfig, props, computeNodeInstanceContext);
+ return ShardingSphereDatabase.create(databaseName,
DatabaseTypeEngine.getProtocolType(databaseConfig, props), databaseConfig,
props, computeNodeInstanceContext);
}
/**
@@ -81,8 +80,7 @@ public final class ExternalMetaDataFactory {
for (Entry<String, DatabaseConfiguration> entry :
databaseConfigMap.entrySet()) {
String databaseName = entry.getKey();
if (!entry.getValue().getStorageUnits().isEmpty() ||
!systemDatabase.getSystemSchemas().contains(databaseName)) {
- Map<String, DatabaseType> storageTypes =
DatabaseTypeEngine.getStorageTypes(entry.getValue());
- result.put(databaseName.toLowerCase(),
ShardingSphereDatabase.create(databaseName, protocolType, storageTypes,
entry.getValue(), props, computeNodeInstanceContext));
+ result.put(databaseName.toLowerCase(),
ShardingSphereDatabase.create(databaseName, protocolType, entry.getValue(),
props, computeNodeInstanceContext));
}
}
return result;
diff --git
a/mode/core/src/main/java/org/apache/shardingsphere/mode/manager/ContextManager.java
b/mode/core/src/main/java/org/apache/shardingsphere/mode/manager/ContextManager.java
index 7a60596056d..dcd0c996fe7 100644
---
a/mode/core/src/main/java/org/apache/shardingsphere/mode/manager/ContextManager.java
+++
b/mode/core/src/main/java/org/apache/shardingsphere/mode/manager/ContextManager.java
@@ -142,8 +142,7 @@ public final class ContextManager implements AutoCloseable {
private ShardingSphereSchema loadSchema(final ShardingSphereDatabase
database, final String schemaName, final String dataSourceName) throws
SQLException {
database.reloadRules();
GenericSchemaBuilderMaterial material = new
GenericSchemaBuilderMaterial(database.getProtocolType(),
- Collections.singletonMap(dataSourceName,
database.getResourceMetaData().getStorageUnits().get(dataSourceName).getStorageType()),
- Collections.singletonMap(dataSourceName,
database.getResourceMetaData().getStorageUnits().get(dataSourceName).getDataSource()),
+ Collections.singletonMap(dataSourceName,
database.getResourceMetaData().getStorageUnits().get(dataSourceName)),
database.getRuleMetaData().getRules(),
metaDataContexts.get().getMetaData().getProps(), schemaName);
ShardingSphereSchema result =
GenericSchemaBuilder.build(material).get(schemaName);
persistServiceFacade.getMetaDataPersistService().getDatabaseMetaDataFacade().getView().load(database.getName(),
schemaName).forEach(result::putView);
@@ -178,8 +177,7 @@ public final class ContextManager implements AutoCloseable {
public void reloadTable(final ShardingSphereDatabase database, final
String schemaName, final String dataSourceName, final String tableName) {
StorageUnit storageUnit =
database.getResourceMetaData().getStorageUnits().get(dataSourceName);
GenericSchemaBuilderMaterial material = new
GenericSchemaBuilderMaterial(database.getProtocolType(),
- Collections.singletonMap(dataSourceName,
storageUnit.getStorageType()), Collections.singletonMap(dataSourceName,
storageUnit.getDataSource()),
- database.getRuleMetaData().getRules(),
metaDataContexts.get().getMetaData().getProps(), schemaName);
+ Collections.singletonMap(dataSourceName, storageUnit),
database.getRuleMetaData().getRules(),
metaDataContexts.get().getMetaData().getProps(), schemaName);
try {
persistTable(database, schemaName, tableName, material);
} catch (final SQLException ex) {
diff --git
a/mode/core/src/main/java/org/apache/shardingsphere/mode/metadata/refresher/type/table/AlterTableStatementSchemaRefresher.java
b/mode/core/src/main/java/org/apache/shardingsphere/mode/metadata/refresher/type/table/AlterTableStatementSchemaRefresher.java
index e83fe46c790..299669ad48b 100644
---
a/mode/core/src/main/java/org/apache/shardingsphere/mode/metadata/refresher/type/table/AlterTableStatementSchemaRefresher.java
+++
b/mode/core/src/main/java/org/apache/shardingsphere/mode/metadata/refresher/type/table/AlterTableStatementSchemaRefresher.java
@@ -67,8 +67,8 @@ public final class AlterTableStatementSchemaRefresher
implements MetaDataRefresh
}
GenericSchemaBuilderMaterial material = new
GenericSchemaBuilderMaterial(
database.getProtocolType(),
database.getResourceMetaData().getStorageUnits(), ruleMetaData.getRules(),
props, schemaName);
- Map<String, ShardingSphereSchema> schemaMap =
GenericSchemaBuilder.build(Collections.singletonList(tableName), material);
- return Optional.ofNullable(schemaMap.get(schemaName)).map(optional ->
optional.getTable(tableName))
+ Map<String, ShardingSphereSchema> schemas =
GenericSchemaBuilder.build(Collections.singletonList(tableName), material);
+ return Optional.ofNullable(schemas.get(schemaName)).map(optional ->
optional.getTable(tableName))
.orElseGet(() -> new ShardingSphereTable(tableName,
Collections.emptyList(), Collections.emptyList(), Collections.emptyList()));
}
diff --git
a/mode/core/src/main/java/org/apache/shardingsphere/mode/metadata/refresher/type/table/CreateTableStatementSchemaRefresher.java
b/mode/core/src/main/java/org/apache/shardingsphere/mode/metadata/refresher/type/table/CreateTableStatementSchemaRefresher.java
index 57823f37c5f..d2f1201619e 100644
---
a/mode/core/src/main/java/org/apache/shardingsphere/mode/metadata/refresher/type/table/CreateTableStatementSchemaRefresher.java
+++
b/mode/core/src/main/java/org/apache/shardingsphere/mode/metadata/refresher/type/table/CreateTableStatementSchemaRefresher.java
@@ -55,8 +55,8 @@ public final class CreateTableStatementSchemaRefresher
implements MetaDataRefres
}
GenericSchemaBuilderMaterial material = new
GenericSchemaBuilderMaterial(
database.getProtocolType(),
database.getResourceMetaData().getStorageUnits(), ruleMetaData.getRules(),
props, schemaName);
- Map<String, ShardingSphereSchema> schemaMap =
GenericSchemaBuilder.build(Collections.singletonList(tableName), material);
- Optional<ShardingSphereTable> actualTableMetaData =
Optional.ofNullable(schemaMap.get(schemaName)).map(optional ->
optional.getTable(tableName));
+ Map<String, ShardingSphereSchema> schemas =
GenericSchemaBuilder.build(Collections.singletonList(tableName), material);
+ Optional<ShardingSphereTable> actualTableMetaData =
Optional.ofNullable(schemas.get(schemaName)).map(optional ->
optional.getTable(tableName));
Preconditions.checkState(actualTableMetaData.isPresent(), "Load actual
table metadata '%s' failed.", tableName);
metaDataManagerPersistService.createTable(database.getName(),
schemaName, actualTableMetaData.get(), logicDataSourceNames.isEmpty() ? null :
logicDataSourceNames.iterator().next());
if (isSingleTable &&
TableRefreshUtils.isRuleRefreshRequired(ruleMetaData, schemaName, tableName)) {
diff --git
a/mode/core/src/main/java/org/apache/shardingsphere/mode/metadata/refresher/type/table/RenameTableStatementSchemaRefresher.java
b/mode/core/src/main/java/org/apache/shardingsphere/mode/metadata/refresher/type/table/RenameTableStatementSchemaRefresher.java
index a1e133e948b..9a9edd9d996 100644
---
a/mode/core/src/main/java/org/apache/shardingsphere/mode/metadata/refresher/type/table/RenameTableStatementSchemaRefresher.java
+++
b/mode/core/src/main/java/org/apache/shardingsphere/mode/metadata/refresher/type/table/RenameTableStatementSchemaRefresher.java
@@ -65,8 +65,8 @@ public final class RenameTableStatementSchemaRefresher
implements MetaDataRefres
}
GenericSchemaBuilderMaterial material = new
GenericSchemaBuilderMaterial(
database.getProtocolType(),
database.getResourceMetaData().getStorageUnits(), ruleMetaData.getRules(),
props, schemaName);
- Map<String, ShardingSphereSchema> schemaMap =
GenericSchemaBuilder.build(Collections.singletonList(tableName), material);
- return Optional.ofNullable(schemaMap.get(schemaName)).map(optional ->
optional.getTable(tableName))
+ Map<String, ShardingSphereSchema> schemas =
GenericSchemaBuilder.build(Collections.singletonList(tableName), material);
+ return Optional.ofNullable(schemas.get(schemaName)).map(optional ->
optional.getTable(tableName))
.orElseGet(() -> new ShardingSphereTable(tableName,
Collections.emptyList(), Collections.emptyList(), Collections.emptyList()));
}
diff --git
a/mode/core/src/main/java/org/apache/shardingsphere/mode/metadata/refresher/type/view/AlterViewStatementSchemaRefresher.java
b/mode/core/src/main/java/org/apache/shardingsphere/mode/metadata/refresher/type/view/AlterViewStatementSchemaRefresher.java
index f603a19f93e..cfb2afae1b2 100644
---
a/mode/core/src/main/java/org/apache/shardingsphere/mode/metadata/refresher/type/view/AlterViewStatementSchemaRefresher.java
+++
b/mode/core/src/main/java/org/apache/shardingsphere/mode/metadata/refresher/type/view/AlterViewStatementSchemaRefresher.java
@@ -78,8 +78,8 @@ public final class AlterViewStatementSchemaRefresher
implements MetaDataRefreshe
}
GenericSchemaBuilderMaterial material = new
GenericSchemaBuilderMaterial(
database.getProtocolType(),
database.getResourceMetaData().getStorageUnits(), ruleMetaData.getRules(),
props, schemaName);
- Map<String, ShardingSphereSchema> schemaMap =
GenericSchemaBuilder.build(Collections.singletonList(viewName), material);
- Optional<ShardingSphereTable> actualViewMetaData =
Optional.ofNullable(schemaMap.get(schemaName)).map(optional ->
optional.getTable(viewName));
+ Map<String, ShardingSphereSchema> schemas =
GenericSchemaBuilder.build(Collections.singletonList(viewName), material);
+ Optional<ShardingSphereTable> actualViewMetaData =
Optional.ofNullable(schemas.get(schemaName)).map(optional ->
optional.getTable(viewName));
ShardingSphereSchema result = new ShardingSphereSchema(schemaName);
actualViewMetaData.ifPresent(result::putTable);
result.putView(new ShardingSphereView(viewName, viewDefinition));
diff --git
a/mode/core/src/main/java/org/apache/shardingsphere/mode/metadata/refresher/type/view/CreateViewStatementSchemaRefresher.java
b/mode/core/src/main/java/org/apache/shardingsphere/mode/metadata/refresher/type/view/CreateViewStatementSchemaRefresher.java
index 07fe62b6454..7a1e8992532 100644
---
a/mode/core/src/main/java/org/apache/shardingsphere/mode/metadata/refresher/type/view/CreateViewStatementSchemaRefresher.java
+++
b/mode/core/src/main/java/org/apache/shardingsphere/mode/metadata/refresher/type/view/CreateViewStatementSchemaRefresher.java
@@ -56,8 +56,8 @@ public final class CreateViewStatementSchemaRefresher
implements MetaDataRefresh
}
GenericSchemaBuilderMaterial material = new
GenericSchemaBuilderMaterial(
database.getProtocolType(),
database.getResourceMetaData().getStorageUnits(), ruleMetaData.getRules(),
props, schemaName);
- Map<String, ShardingSphereSchema> schemaMap =
GenericSchemaBuilder.build(Collections.singletonList(viewName), material);
- Optional<ShardingSphereTable> actualTableMetaData =
Optional.ofNullable(schemaMap.get(schemaName)).map(optional ->
optional.getTable(viewName));
+ Map<String, ShardingSphereSchema> schemas =
GenericSchemaBuilder.build(Collections.singletonList(viewName), material);
+ Optional<ShardingSphereTable> actualTableMetaData =
Optional.ofNullable(schemas.get(schemaName)).map(optional ->
optional.getTable(viewName));
Preconditions.checkState(actualTableMetaData.isPresent(), "Load actual
view metadata '%s' failed.", viewName);
AlterSchemaMetaDataPOJO alterSchemaMetaDataPOJO = new
AlterSchemaMetaDataPOJO(database.getName(), schemaName, logicDataSourceNames);
alterSchemaMetaDataPOJO.getAlteredTables().add(actualTableMetaData.get());