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());


Reply via email to