This is an automated email from the ASF dual-hosted git repository.

wuweijie 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 9ee53f20d61 Merge StorageUnitMetaData and StorageUnit (#28638)
9ee53f20d61 is described below

commit 9ee53f20d6199fafdb78a65cd71d337d7ef90dee
Author: Liang Zhang <[email protected]>
AuthorDate: Thu Oct 5 05:34:17 2023 +0800

    Merge StorageUnitMetaData and StorageUnit (#28638)
---
 .../data/ShardingStatisticsTableCollector.java     |  4 +-
 .../infra/metadata/ShardingSphereMetaData.java     |  2 +-
 .../metadata/database/ShardingSphereDatabase.java  |  2 +-
 .../database/resource/ResourceMetaData.java        |  8 +--
 .../database/resource/unit/StorageUnit.java        | 69 ----------------------
 .../resource/unit/StorageUnitMetaData.java         | 36 ++++++++++-
 .../builder/GenericSchemaBuilderMaterial.java      |  4 +-
 .../ShardingSphereTableDataCollectorUtils.java     |  4 +-
 .../driver/DriverExecutionPrepareEngine.java       |  2 +-
 .../rewrite/engine/GenericSQLRewriteEngine.java    |  2 +-
 .../rewrite/engine/RouteSQLRewriteEngine.java      |  2 +-
 .../infra/rewrite/SQLRewriteEntryTest.java         |  9 +--
 .../engine/GenericSQLRewriteEngineTest.java        |  2 +-
 .../rewrite/engine/RouteSQLRewriteEngineTest.java  |  2 +-
 .../DriverDatabaseConnectionManager.java           |  4 +-
 .../core/datasource/ShardingSphereDataSource.java  |  6 +-
 .../DriverDatabaseConnectionManagerTest.java       |  2 +-
 .../connection/ShardingSphereConnectionTest.java   | 33 +++++------
 .../datasource/ShardingSphereDataSourceTest.java   |  3 +-
 .../data/pipeline/cdc/api/impl/CDCJobAPI.java      |  2 +-
 .../migration/api/impl/MigrationJobAPI.java        |  2 +-
 .../globalclock/core/rule/GlobalClockRule.java     |  3 +-
 .../query/ShowUnloadedSingleTableExecutor.java     |  2 +-
 .../update/LoadSingleTableStatementUpdater.java    |  2 +-
 .../transaction/rule/TransactionRule.java          |  4 +-
 .../mode/manager/ContextManager.java               | 11 ++--
 .../context/ConfigurationContextManager.java       |  8 +--
 .../manager/switcher/NewResourceSwitchManager.java |  6 +-
 .../manager/switcher/ResourceSwitchManager.java    |  6 +-
 .../mode/metadata/MetaDataContextsFactory.java     |  2 +-
 .../mode/metadata/NewMetaDataContextsFactory.java  |  2 +-
 .../mode/manager/ContextManagerTest.java           |  2 +-
 .../jdbc/datasource/JDBCBackendDataSource.java     |  2 +-
 .../executor/AbstractDatabaseMetaDataExecutor.java |  2 +-
 .../ral/queryable/ExportStorageNodesExecutor.java  |  2 +-
 .../rdl/rule/NewRuleDefinitionBackendHandler.java  |  2 +-
 .../rdl/rule/RuleDefinitionBackendHandler.java     |  2 +-
 .../unit/AlterStorageUnitBackendHandler.java       |  2 +-
 .../rql/storage/unit/ShowStorageUnitExecutor.java  |  6 +-
 .../proxy/backend/util/ExportUtils.java            |  2 +-
 .../YamlDatabaseConfigurationImportExecutor.java   |  4 +-
 .../jdbc/datasource/JDBCBackendDataSourceTest.java |  2 +-
 .../ExportDatabaseConfigurationExecutorTest.java   |  8 +--
 .../ral/queryable/ExportMetaDataExecutorTest.java  |  2 +-
 .../queryable/ExportStorageNodesExecutorTest.java  | 24 ++++----
 .../unit/AlterStorageUnitBackendHandlerTest.java   |  4 +-
 .../UnregisterStorageUnitBackendHandlerTest.java   |  8 +--
 .../proxy/version/ShardingSphereProxyVersion.java  |  4 +-
 .../protocol/FrontDatabaseProtocolTypeFactory.java |  2 +-
 .../query/MySQLMultiStatementsHandlerTest.java     |  2 +-
 .../bind/OpenGaussComBatchBindExecutorTest.java    |  2 +-
 ...egatedBatchedStatementsCommandExecutorTest.java |  2 +-
 .../PostgreSQLBatchedStatementsExecutorTest.java   |  2 +-
 .../PostgreSQLComDescribeExecutorTest.java         |  2 +-
 .../test/it/rewrite/engine/SQLRewriterIT.java      |  5 +-
 55 files changed, 141 insertions(+), 200 deletions(-)

diff --git 
a/features/sharding/core/src/main/java/org/apache/shardingsphere/sharding/metadata/data/ShardingStatisticsTableCollector.java
 
b/features/sharding/core/src/main/java/org/apache/shardingsphere/sharding/metadata/data/ShardingStatisticsTableCollector.java
index 88c1603cb9d..ab90ef7ef44 100644
--- 
a/features/sharding/core/src/main/java/org/apache/shardingsphere/sharding/metadata/data/ShardingStatisticsTableCollector.java
+++ 
b/features/sharding/core/src/main/java/org/apache/shardingsphere/sharding/metadata/data/ShardingStatisticsTableCollector.java
@@ -88,11 +88,11 @@ public final class ShardingStatisticsTableCollector 
implements ShardingSphereSta
     }
     
     private void addTableRowsAndDataLength(final Map<String, 
StorageUnitMetaData> metaDataMap, final DataNode dataNode, final List<Object> 
row) throws SQLException {
-        DatabaseType databaseType = 
metaDataMap.get(dataNode.getDataSourceName()).getStorageUnit().getStorageType();
+        DatabaseType databaseType = 
metaDataMap.get(dataNode.getDataSourceName()).getStorageType();
         Optional<DialectShardingStatisticsTableCollector> dialectCollector = 
DatabaseTypedSPILoader.findService(DialectShardingStatisticsTableCollector.class,
 databaseType);
         boolean isAppended = false;
         if (dialectCollector.isPresent()) {
-            try (Connection connection = 
metaDataMap.get(dataNode.getDataSourceName()).getStorageUnit().getDataSource().getConnection())
 {
+            try (Connection connection = 
metaDataMap.get(dataNode.getDataSourceName()).getDataSource().getConnection()) {
                 isAppended = dialectCollector.get().appendRow(connection, 
dataNode, row);
             }
         }
diff --git 
a/infra/common/src/main/java/org/apache/shardingsphere/infra/metadata/ShardingSphereMetaData.java
 
b/infra/common/src/main/java/org/apache/shardingsphere/infra/metadata/ShardingSphereMetaData.java
index c9d2ec6cf1d..14d73a97893 100644
--- 
a/infra/common/src/main/java/org/apache/shardingsphere/infra/metadata/ShardingSphereMetaData.java
+++ 
b/infra/common/src/main/java/org/apache/shardingsphere/infra/metadata/ShardingSphereMetaData.java
@@ -113,6 +113,6 @@ public final class ShardingSphereMetaData {
         
database.getRuleMetaData().findRules(ResourceHeldRule.class).forEach(each -> 
each.closeStaleResource(databaseName));
         
database.getRuleMetaData().findSingleRule(StaticDataSourceContainedRule.class).ifPresent(StaticDataSourceContainedRule::cleanStorageNodeDataSources);
         Optional.ofNullable(database.getResourceMetaData())
-                .ifPresent(optional -> 
optional.getStorageUnitMetaDataMap().values().forEach(each -> new 
DataSourcePoolDestroyer(each.getStorageUnit().getDataSource()).asyncDestroy()));
+                .ifPresent(optional -> 
optional.getStorageUnitMetaDataMap().values().forEach(each -> new 
DataSourcePoolDestroyer(each.getDataSource()).asyncDestroy()));
     }
 }
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 990e297efa1..e455374b4d0 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
@@ -199,7 +199,7 @@ public final class ShardingSphereDatabase {
         toBeReloadedRules.stream().findFirst().ifPresent(optional -> {
             databaseRules.removeAll(toBeReloadedRules);
             Map<String, DataSource> dataSources = 
resourceMetaData.getStorageUnitMetaDataMap().entrySet().stream()
-                    .collect(Collectors.toMap(Entry::getKey, entry -> 
entry.getValue().getStorageUnit().getDataSource(), (oldValue, currentValue) -> 
oldValue, LinkedHashMap::new));
+                    .collect(Collectors.toMap(Entry::getKey, entry -> 
entry.getValue().getDataSource(), (oldValue, currentValue) -> oldValue, 
LinkedHashMap::new));
             databaseRules.add(((MutableDataNodeRule) 
optional).reloadRule(ruleConfig, name, dataSources, databaseRules));
         });
         ruleMetaData.getRules().clear();
diff --git 
a/infra/common/src/main/java/org/apache/shardingsphere/infra/metadata/database/resource/ResourceMetaData.java
 
b/infra/common/src/main/java/org/apache/shardingsphere/infra/metadata/database/resource/ResourceMetaData.java
index 241db864c3d..4b48ac9eef8 100644
--- 
a/infra/common/src/main/java/org/apache/shardingsphere/infra/metadata/database/resource/ResourceMetaData.java
+++ 
b/infra/common/src/main/java/org/apache/shardingsphere/infra/metadata/database/resource/ResourceMetaData.java
@@ -91,8 +91,8 @@ public final class ResourceMetaData {
     }
     
     private boolean isExisted(final String dataSourceName, final 
Collection<String> existedDataSourceNames) {
-        return existedDataSourceNames.stream().anyMatch(each -> 
storageUnitMetaDataMap.get(dataSourceName).getStorageUnit().getConnectionProperties()
-                
.isInSameDatabaseInstance(storageUnitMetaDataMap.get(each).getStorageUnit().getConnectionProperties()));
+        return existedDataSourceNames.stream().anyMatch(each -> 
storageUnitMetaDataMap.get(dataSourceName).getConnectionProperties()
+                
.isInSameDatabaseInstance(storageUnitMetaDataMap.get(each).getConnectionProperties()));
     }
     
     /**
@@ -102,7 +102,7 @@ public final class ResourceMetaData {
      * @return connection properties
      */
     public ConnectionProperties getConnectionProperties(final String 
dataSourceName) {
-        return 
storageUnitMetaDataMap.get(dataSourceName).getStorageUnit().getConnectionProperties();
+        return 
storageUnitMetaDataMap.get(dataSourceName).getConnectionProperties();
     }
     
     /**
@@ -112,7 +112,7 @@ public final class ResourceMetaData {
      * @return storage type
      */
     public DatabaseType getStorageType(final String dataSourceName) {
-        return 
storageUnitMetaDataMap.get(dataSourceName).getStorageUnit().getStorageType();
+        return storageUnitMetaDataMap.get(dataSourceName).getStorageType();
     }
     
     /**
diff --git 
a/infra/common/src/main/java/org/apache/shardingsphere/infra/metadata/database/resource/unit/StorageUnit.java
 
b/infra/common/src/main/java/org/apache/shardingsphere/infra/metadata/database/resource/unit/StorageUnit.java
deleted file mode 100644
index 8bcd35b05a1..00000000000
--- 
a/infra/common/src/main/java/org/apache/shardingsphere/infra/metadata/database/resource/unit/StorageUnit.java
+++ /dev/null
@@ -1,69 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package org.apache.shardingsphere.infra.metadata.database.resource.unit;
-
-import lombok.Getter;
-import org.apache.shardingsphere.infra.database.DatabaseTypeEngine;
-import 
org.apache.shardingsphere.infra.database.core.connector.ConnectionProperties;
-import 
org.apache.shardingsphere.infra.database.core.connector.ConnectionPropertiesParser;
-import 
org.apache.shardingsphere.infra.database.core.spi.DatabaseTypedSPILoader;
-import org.apache.shardingsphere.infra.database.core.type.DatabaseType;
-import 
org.apache.shardingsphere.infra.datasource.pool.CatalogSwitchableDataSource;
-import 
org.apache.shardingsphere.infra.datasource.pool.props.domain.DataSourcePoolProperties;
-import 
org.apache.shardingsphere.infra.metadata.database.resource.node.StorageNode;
-import org.apache.shardingsphere.infra.state.datasource.DataSourceStateManager;
-
-import javax.sql.DataSource;
-import java.util.Collections;
-import java.util.Map;
-
-/**
- * Storage unit.
- */
-@Getter
-public final class StorageUnit {
-    
-    private final DataSource dataSource;
-    
-    private final DataSourcePoolProperties dataSourcePoolProperties;
-    
-    private final DatabaseType storageType;
-    
-    private final ConnectionProperties connectionProperties;
-    
-    public StorageUnit(final String databaseName, final DataSource dataSource, 
final DataSourcePoolProperties dataSourcePoolProperties, final StorageNode 
storageNode) {
-        this.dataSource = new CatalogSwitchableDataSource(dataSource, 
storageNode.getCatalog(), storageNode.getUrl());
-        this.dataSourcePoolProperties = dataSourcePoolProperties;
-        boolean isDataSourceEnabled = 
!DataSourceStateManager.getInstance().getEnabledDataSources(databaseName, 
Collections.singletonMap(storageNode.getName().getName(), 
dataSource)).isEmpty();
-        storageType = createStorageType(isDataSourceEnabled);
-        connectionProperties = createConnectionProperties(isDataSourceEnabled, 
storageNode);
-    }
-    
-    private DatabaseType createStorageType(final boolean isDataSourceEnabled) {
-        return DatabaseTypeEngine.getStorageType(isDataSourceEnabled ? 
Collections.singleton(dataSource) : Collections.emptyList());
-    }
-    
-    private ConnectionProperties createConnectionProperties(final boolean 
isDataSourceEnabled, final StorageNode storageNode) {
-        if (!isDataSourceEnabled) {
-            return null;
-        }
-        Map<String, Object> standardProps = 
dataSourcePoolProperties.getConnectionPropertySynonyms().getStandardProperties();
-        ConnectionPropertiesParser parser = 
DatabaseTypedSPILoader.getService(ConnectionPropertiesParser.class, 
storageType);
-        return parser.parse(standardProps.getOrDefault("url", "").toString(), 
standardProps.getOrDefault("username", "").toString(), 
storageNode.getCatalog());
-    }
-}
diff --git 
a/infra/common/src/main/java/org/apache/shardingsphere/infra/metadata/database/resource/unit/StorageUnitMetaData.java
 
b/infra/common/src/main/java/org/apache/shardingsphere/infra/metadata/database/resource/unit/StorageUnitMetaData.java
index 98de2b41d4c..be4f9172325 100644
--- 
a/infra/common/src/main/java/org/apache/shardingsphere/infra/metadata/database/resource/unit/StorageUnitMetaData.java
+++ 
b/infra/common/src/main/java/org/apache/shardingsphere/infra/metadata/database/resource/unit/StorageUnitMetaData.java
@@ -18,10 +18,19 @@
 package org.apache.shardingsphere.infra.metadata.database.resource.unit;
 
 import lombok.Getter;
+import org.apache.shardingsphere.infra.database.DatabaseTypeEngine;
+import 
org.apache.shardingsphere.infra.database.core.connector.ConnectionProperties;
+import 
org.apache.shardingsphere.infra.database.core.connector.ConnectionPropertiesParser;
+import 
org.apache.shardingsphere.infra.database.core.spi.DatabaseTypedSPILoader;
+import org.apache.shardingsphere.infra.database.core.type.DatabaseType;
+import 
org.apache.shardingsphere.infra.datasource.pool.CatalogSwitchableDataSource;
 import 
org.apache.shardingsphere.infra.datasource.pool.props.domain.DataSourcePoolProperties;
 import 
org.apache.shardingsphere.infra.metadata.database.resource.node.StorageNode;
+import org.apache.shardingsphere.infra.state.datasource.DataSourceStateManager;
 
 import javax.sql.DataSource;
+import java.util.Collections;
+import java.util.Map;
 
 /**
  * Storage unit meta data.
@@ -31,10 +40,33 @@ public final class StorageUnitMetaData {
     
     private final StorageNode storageNode;
     
-    private final StorageUnit storageUnit;
+    private final DataSource dataSource;
+    
+    private final DataSourcePoolProperties dataSourcePoolProperties;
+    
+    private final DatabaseType storageType;
+    
+    private final ConnectionProperties connectionProperties;
     
     public StorageUnitMetaData(final String databaseName, final StorageNode 
storageNode, final DataSourcePoolProperties dataSourcePoolProperties, final 
DataSource dataSource) {
         this.storageNode = storageNode;
-        storageUnit = new StorageUnit(databaseName, dataSource, 
dataSourcePoolProperties, storageNode);
+        this.dataSource = new CatalogSwitchableDataSource(dataSource, 
storageNode.getCatalog(), storageNode.getUrl());
+        this.dataSourcePoolProperties = dataSourcePoolProperties;
+        boolean isDataSourceEnabled = 
!DataSourceStateManager.getInstance().getEnabledDataSources(databaseName, 
Collections.singletonMap(storageNode.getName().getName(), 
dataSource)).isEmpty();
+        storageType = createStorageType(isDataSourceEnabled);
+        connectionProperties = createConnectionProperties(isDataSourceEnabled, 
storageNode);
+    }
+    
+    private DatabaseType createStorageType(final boolean isDataSourceEnabled) {
+        return DatabaseTypeEngine.getStorageType(isDataSourceEnabled ? 
Collections.singleton(dataSource) : Collections.emptyList());
+    }
+    
+    private ConnectionProperties createConnectionProperties(final boolean 
isDataSourceEnabled, final StorageNode storageNode) {
+        if (!isDataSourceEnabled) {
+            return null;
+        }
+        Map<String, Object> standardProps = 
dataSourcePoolProperties.getConnectionPropertySynonyms().getStandardProperties();
+        ConnectionPropertiesParser parser = 
DatabaseTypedSPILoader.getService(ConnectionPropertiesParser.class, 
storageType);
+        return parser.parse(standardProps.getOrDefault("url", "").toString(), 
standardProps.getOrDefault("username", "").toString(), 
storageNode.getCatalog());
     }
 }
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 7f408475e59..77311cffb96 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
@@ -53,9 +53,9 @@ public final class GenericSchemaBuilderMaterial {
     public GenericSchemaBuilderMaterial(final DatabaseType protocolType, final 
Map<String, StorageUnitMetaData> storageUnitMetaDataMap,
                                         final Collection<ShardingSphereRule> 
rules, final ConfigurationProperties props, final String defaultSchemaName) {
         this(protocolType, storageUnitMetaDataMap.entrySet().stream()
-                .collect(Collectors.toMap(Entry::getKey, entry -> 
entry.getValue().getStorageUnit().getStorageType(), (oldValue, currentValue) -> 
oldValue, LinkedHashMap::new)),
+                .collect(Collectors.toMap(Entry::getKey, entry -> 
entry.getValue().getStorageType(), (oldValue, currentValue) -> oldValue, 
LinkedHashMap::new)),
                 storageUnitMetaDataMap.entrySet().stream()
-                        .collect(Collectors.toMap(Entry::getKey, entry -> 
entry.getValue().getStorageUnit().getDataSource(), (oldValue, currentValue) -> 
oldValue, LinkedHashMap::new)),
+                        .collect(Collectors.toMap(Entry::getKey, entry -> 
entry.getValue().getDataSource(), (oldValue, currentValue) -> oldValue, 
LinkedHashMap::new)),
                 rules, props, defaultSchemaName);
     }
     
diff --git 
a/infra/common/src/main/java/org/apache/shardingsphere/infra/metadata/statistics/collector/ShardingSphereTableDataCollectorUtils.java
 
b/infra/common/src/main/java/org/apache/shardingsphere/infra/metadata/statistics/collector/ShardingSphereTableDataCollectorUtils.java
index a140ffba5f0..0ee5177d9cd 100644
--- 
a/infra/common/src/main/java/org/apache/shardingsphere/infra/metadata/statistics/collector/ShardingSphereTableDataCollectorUtils.java
+++ 
b/infra/common/src/main/java/org/apache/shardingsphere/infra/metadata/statistics/collector/ShardingSphereTableDataCollectorUtils.java
@@ -59,7 +59,7 @@ public final class ShardingSphereTableDataCollectorUtils {
         Collection<ShardingSphereRowData> result = new LinkedList<>();
         for (StorageUnitMetaData each : 
database.getResourceMetaData().getStorageUnitMetaDataMap().values()) {
             try (
-                    Connection connection = 
each.getStorageUnit().getDataSource().getConnection();
+                    Connection connection = 
each.getDataSource().getConnection();
                     Statement statement = connection.createStatement();
                     ResultSet resultSet = statement.executeQuery(sql)) {
                 result.addAll(getRows(table, selectedColumnNames, resultSet));
@@ -69,7 +69,7 @@ public final class ShardingSphereTableDataCollectorUtils {
     }
     
     private static boolean isDifferentProtocolAndStorageType(final 
ShardingSphereDatabase database) {
-        return 
!database.getResourceMetaData().getStorageUnitMetaDataMap().values().stream().allMatch(each
 -> each.getStorageUnit().getStorageType().equals(database.getProtocolType()));
+        return 
!database.getResourceMetaData().getStorageUnitMetaDataMap().values().stream().allMatch(each
 -> each.getStorageType().equals(database.getProtocolType()));
     }
     
     private static Collection<ShardingSphereRowData> getRows(final 
ShardingSphereTable table, final Collection<String> selectedColumnNames, final 
ResultSet resultSet) throws SQLException {
diff --git 
a/infra/executor/src/main/java/org/apache/shardingsphere/infra/executor/sql/prepare/driver/DriverExecutionPrepareEngine.java
 
b/infra/executor/src/main/java/org/apache/shardingsphere/infra/executor/sql/prepare/driver/DriverExecutionPrepareEngine.java
index ce4a9e3b9a0..0b86d1fc482 100644
--- 
a/infra/executor/src/main/java/org/apache/shardingsphere/infra/executor/sql/prepare/driver/DriverExecutionPrepareEngine.java
+++ 
b/infra/executor/src/main/java/org/apache/shardingsphere/infra/executor/sql/prepare/driver/DriverExecutionPrepareEngine.java
@@ -97,7 +97,7 @@ public final class DriverExecutionPrepareEngine<T extends 
DriverExecutionUnit<?>
     @SuppressWarnings("unchecked")
     private ExecutionGroup<T> createExecutionGroup(final String 
dataSourceName, final List<SQLUnit> sqlUnits, final C connection, final 
ConnectionMode connectionMode) throws SQLException {
         List<T> inputs = new LinkedList<>();
-        DatabaseType databaseType = 
storageUnitMetaDataMap.get(dataSourceName).getStorageUnit().getStorageType();
+        DatabaseType databaseType = 
storageUnitMetaDataMap.get(dataSourceName).getStorageType();
         for (SQLUnit each : sqlUnits) {
             inputs.add((T) sqlExecutionUnitBuilder.build(new 
ExecutionUnit(dataSourceName, each), statementManager, connection, 
connectionMode, option, databaseType));
         }
diff --git 
a/infra/rewrite/src/main/java/org/apache/shardingsphere/infra/rewrite/engine/GenericSQLRewriteEngine.java
 
b/infra/rewrite/src/main/java/org/apache/shardingsphere/infra/rewrite/engine/GenericSQLRewriteEngine.java
index 992552ae630..b188a8d580c 100644
--- 
a/infra/rewrite/src/main/java/org/apache/shardingsphere/infra/rewrite/engine/GenericSQLRewriteEngine.java
+++ 
b/infra/rewrite/src/main/java/org/apache/shardingsphere/infra/rewrite/engine/GenericSQLRewriteEngine.java
@@ -49,7 +49,7 @@ public final class GenericSQLRewriteEngine {
     public GenericSQLRewriteResult rewrite(final SQLRewriteContext 
sqlRewriteContext) {
         String sql = translatorRule.translate(
                 new DefaultSQLBuilder(sqlRewriteContext).toSQL(), 
sqlRewriteContext.getSqlStatementContext().getSqlStatement(), protocolType,
-                storageUnitMetaDataMap.isEmpty() ? protocolType : 
storageUnitMetaDataMap.values().iterator().next().getStorageUnit().getStorageType());
+                storageUnitMetaDataMap.isEmpty() ? protocolType : 
storageUnitMetaDataMap.values().iterator().next().getStorageType());
         return new GenericSQLRewriteResult(new SQLRewriteUnit(sql, 
sqlRewriteContext.getParameterBuilder().getParameters()));
     }
 }
diff --git 
a/infra/rewrite/src/main/java/org/apache/shardingsphere/infra/rewrite/engine/RouteSQLRewriteEngine.java
 
b/infra/rewrite/src/main/java/org/apache/shardingsphere/infra/rewrite/engine/RouteSQLRewriteEngine.java
index 7fbe66c41f6..9544aaabc8d 100644
--- 
a/infra/rewrite/src/main/java/org/apache/shardingsphere/infra/rewrite/engine/RouteSQLRewriteEngine.java
+++ 
b/infra/rewrite/src/main/java/org/apache/shardingsphere/infra/rewrite/engine/RouteSQLRewriteEngine.java
@@ -157,7 +157,7 @@ public final class RouteSQLRewriteEngine {
     private Map<RouteUnit, SQLRewriteUnit> translate(final SQLStatement 
sqlStatement, final Map<RouteUnit, SQLRewriteUnit> sqlRewriteUnits) {
         Map<RouteUnit, SQLRewriteUnit> result = new 
LinkedHashMap<>(sqlRewriteUnits.size(), 1F);
         for (Entry<RouteUnit, SQLRewriteUnit> entry : 
sqlRewriteUnits.entrySet()) {
-            DatabaseType storageType = 
storageUnitMetaDataMap.get(entry.getKey().getDataSourceMapper().getActualName()).getStorageUnit().getStorageType();
+            DatabaseType storageType = 
storageUnitMetaDataMap.get(entry.getKey().getDataSourceMapper().getActualName()).getStorageType();
             String sql = translatorRule.translate(entry.getValue().getSql(), 
sqlStatement, protocolType, storageType);
             SQLRewriteUnit sqlRewriteUnit = new SQLRewriteUnit(sql, 
entry.getValue().getParameters());
             result.put(entry.getKey(), sqlRewriteUnit);
diff --git 
a/infra/rewrite/src/test/java/org/apache/shardingsphere/infra/rewrite/SQLRewriteEntryTest.java
 
b/infra/rewrite/src/test/java/org/apache/shardingsphere/infra/rewrite/SQLRewriteEntryTest.java
index eab21840bc6..40d551d8d72 100644
--- 
a/infra/rewrite/src/test/java/org/apache/shardingsphere/infra/rewrite/SQLRewriteEntryTest.java
+++ 
b/infra/rewrite/src/test/java/org/apache/shardingsphere/infra/rewrite/SQLRewriteEntryTest.java
@@ -25,7 +25,6 @@ import org.apache.shardingsphere.infra.hint.HintValueContext;
 import 
org.apache.shardingsphere.infra.metadata.database.ShardingSphereDatabase;
 import 
org.apache.shardingsphere.infra.metadata.database.resource.ResourceMetaData;
 import 
org.apache.shardingsphere.infra.metadata.database.resource.unit.StorageUnitMetaData;
-import 
org.apache.shardingsphere.infra.metadata.database.resource.unit.StorageUnit;
 import org.apache.shardingsphere.infra.metadata.database.rule.RuleMetaData;
 import 
org.apache.shardingsphere.infra.metadata.database.schema.model.ShardingSphereSchema;
 import 
org.apache.shardingsphere.infra.rewrite.engine.result.GenericSQLRewriteResult;
@@ -84,15 +83,11 @@ class SQLRewriteEntryTest {
     }
     
     private ResourceMetaData mockResourceMetaData() {
-        StorageUnit storageUnit1 = mock(StorageUnit.class);
-        
when(storageUnit1.getStorageType()).thenReturn(TypedSPILoader.getService(DatabaseType.class,
 "H2"));
-        StorageUnit storageUnit2 = mock(StorageUnit.class);
-        
when(storageUnit2.getStorageType()).thenReturn(TypedSPILoader.getService(DatabaseType.class,
 "MySQL"));
         Map<String, StorageUnitMetaData> metaDataMap = new LinkedHashMap<>(2, 
1F);
         StorageUnitMetaData storageUnitMetaData1 = 
mock(StorageUnitMetaData.class);
-        when(storageUnitMetaData1.getStorageUnit()).thenReturn(storageUnit1);
+        
when(storageUnitMetaData1.getStorageType()).thenReturn(TypedSPILoader.getService(DatabaseType.class,
 "H2"));
         StorageUnitMetaData storageUnitMetaData2 = 
mock(StorageUnitMetaData.class);
-        when(storageUnitMetaData2.getStorageUnit()).thenReturn(storageUnit2);
+        
when(storageUnitMetaData2.getStorageType()).thenReturn(TypedSPILoader.getService(DatabaseType.class,
 "MySQL"));
         metaDataMap.put("ds_0", storageUnitMetaData1);
         metaDataMap.put("ds_1", storageUnitMetaData2);
         ResourceMetaData result = mock(ResourceMetaData.class, 
RETURNS_DEEP_STUBS);
diff --git 
a/infra/rewrite/src/test/java/org/apache/shardingsphere/infra/rewrite/engine/GenericSQLRewriteEngineTest.java
 
b/infra/rewrite/src/test/java/org/apache/shardingsphere/infra/rewrite/engine/GenericSQLRewriteEngineTest.java
index 1aab869aca0..c3061a81d2d 100644
--- 
a/infra/rewrite/src/test/java/org/apache/shardingsphere/infra/rewrite/engine/GenericSQLRewriteEngineTest.java
+++ 
b/infra/rewrite/src/test/java/org/apache/shardingsphere/infra/rewrite/engine/GenericSQLRewriteEngineTest.java
@@ -65,7 +65,7 @@ class GenericSQLRewriteEngineTest {
     
     private Map<String, StorageUnitMetaData> mockStorageUnitMetaData(final 
DatabaseType databaseType) {
         StorageUnitMetaData result = mock(StorageUnitMetaData.class, 
RETURNS_DEEP_STUBS);
-        
when(result.getStorageUnit().getStorageType()).thenReturn(databaseType);
+        when(result.getStorageType()).thenReturn(databaseType);
         return Collections.singletonMap("ds_0", result);
     }
     
diff --git 
a/infra/rewrite/src/test/java/org/apache/shardingsphere/infra/rewrite/engine/RouteSQLRewriteEngineTest.java
 
b/infra/rewrite/src/test/java/org/apache/shardingsphere/infra/rewrite/engine/RouteSQLRewriteEngineTest.java
index 765d82ac50f..0e0a01b1b25 100644
--- 
a/infra/rewrite/src/test/java/org/apache/shardingsphere/infra/rewrite/engine/RouteSQLRewriteEngineTest.java
+++ 
b/infra/rewrite/src/test/java/org/apache/shardingsphere/infra/rewrite/engine/RouteSQLRewriteEngineTest.java
@@ -178,7 +178,7 @@ class RouteSQLRewriteEngineTest {
     
     private Map<String, StorageUnitMetaData> mockStorageUnitMetaData(final 
DatabaseType databaseType) {
         StorageUnitMetaData result = mock(StorageUnitMetaData.class, 
RETURNS_DEEP_STUBS);
-        
when(result.getStorageUnit().getStorageType()).thenReturn(databaseType);
+        when(result.getStorageType()).thenReturn(databaseType);
         return Collections.singletonMap("ds_0", result);
     }
 }
diff --git 
a/jdbc/core/src/main/java/org/apache/shardingsphere/driver/jdbc/core/connection/DriverDatabaseConnectionManager.java
 
b/jdbc/core/src/main/java/org/apache/shardingsphere/driver/jdbc/core/connection/DriverDatabaseConnectionManager.java
index 3a6063b7e97..307d0e61fb6 100644
--- 
a/jdbc/core/src/main/java/org/apache/shardingsphere/driver/jdbc/core/connection/DriverDatabaseConnectionManager.java
+++ 
b/jdbc/core/src/main/java/org/apache/shardingsphere/driver/jdbc/core/connection/DriverDatabaseConnectionManager.java
@@ -90,7 +90,7 @@ public final class DriverDatabaseConnectionManager implements 
DatabaseConnection
     
     public DriverDatabaseConnectionManager(final String databaseName, final 
ContextManager contextManager) {
         for (Entry<String, StorageUnitMetaData> entry : 
contextManager.getStorageUnitMetaDataMap(databaseName).entrySet()) {
-            DataSource dataSource = 
entry.getValue().getStorageUnit().getDataSource();
+            DataSource dataSource = entry.getValue().getDataSource();
             String cacheKey = getKey(databaseName, entry.getKey());
             dataSourceMap.put(cacheKey, dataSource);
             physicalDataSourceMap.put(cacheKey, dataSource);
@@ -343,7 +343,7 @@ public final class DriverDatabaseConnectionManager 
implements DatabaseConnection
         String cacheKey = getKey(currentDatabaseName, dataSourceName);
         DataSource dataSource = databaseName.equals(currentDatabaseName)
                 ? dataSourceMap.get(cacheKey)
-                : 
contextManager.getStorageUnitMetaDataMap(currentDatabaseName).get(dataSourceName).getStorageUnit().getDataSource();
+                : 
contextManager.getStorageUnitMetaDataMap(currentDatabaseName).get(dataSourceName).getDataSource();
         Preconditions.checkNotNull(dataSource, "Missing the data source name: 
'%s'", dataSourceName);
         Collection<Connection> connections;
         synchronized (cachedConnections) {
diff --git 
a/jdbc/core/src/main/java/org/apache/shardingsphere/driver/jdbc/core/datasource/ShardingSphereDataSource.java
 
b/jdbc/core/src/main/java/org/apache/shardingsphere/driver/jdbc/core/datasource/ShardingSphereDataSource.java
index 7b3d371a4df..8306082a375 100644
--- 
a/jdbc/core/src/main/java/org/apache/shardingsphere/driver/jdbc/core/datasource/ShardingSphereDataSource.java
+++ 
b/jdbc/core/src/main/java/org/apache/shardingsphere/driver/jdbc/core/datasource/ShardingSphereDataSource.java
@@ -103,7 +103,7 @@ public final class ShardingSphereDataSource extends 
AbstractDataSourceAdapter im
     public void close() throws SQLException {
         contextManagerDestroyedCallback(databaseName);
         for (StorageUnitMetaData each : 
contextManager.getStorageUnitMetaDataMap(databaseName).values()) {
-            close(each.getStorageUnit().getDataSource());
+            close(each.getDataSource());
         }
         contextManager.close();
     }
@@ -134,13 +134,13 @@ public final class ShardingSphereDataSource extends 
AbstractDataSourceAdapter im
     @Override
     public int getLoginTimeout() throws SQLException {
         Map<String, StorageUnitMetaData> metaDataMap = 
contextManager.getStorageUnitMetaDataMap(databaseName);
-        return metaDataMap.isEmpty() ? 0 : 
metaDataMap.values().iterator().next().getStorageUnit().getDataSource().getLoginTimeout();
+        return metaDataMap.isEmpty() ? 0 : 
metaDataMap.values().iterator().next().getDataSource().getLoginTimeout();
     }
     
     @Override
     public void setLoginTimeout(final int seconds) throws SQLException {
         for (StorageUnitMetaData each : 
contextManager.getStorageUnitMetaDataMap(databaseName).values()) {
-            each.getStorageUnit().getDataSource().setLoginTimeout(seconds);
+            each.getDataSource().setLoginTimeout(seconds);
         }
     }
 }
diff --git 
a/jdbc/core/src/test/java/org/apache/shardingsphere/driver/jdbc/core/connection/DriverDatabaseConnectionManagerTest.java
 
b/jdbc/core/src/test/java/org/apache/shardingsphere/driver/jdbc/core/connection/DriverDatabaseConnectionManagerTest.java
index 9d5bdfdf798..46c500e271b 100644
--- 
a/jdbc/core/src/test/java/org/apache/shardingsphere/driver/jdbc/core/connection/DriverDatabaseConnectionManagerTest.java
+++ 
b/jdbc/core/src/test/java/org/apache/shardingsphere/driver/jdbc/core/connection/DriverDatabaseConnectionManagerTest.java
@@ -99,7 +99,7 @@ class DriverDatabaseConnectionManagerTest {
     
     private StorageUnitMetaData mockStorageUnitMetaData(final DataSource 
dataSource) {
         StorageUnitMetaData result = mock(StorageUnitMetaData.class, 
RETURNS_DEEP_STUBS);
-        when(result.getStorageUnit().getDataSource()).thenReturn(dataSource);
+        when(result.getDataSource()).thenReturn(dataSource);
         return result;
     }
     
diff --git 
a/jdbc/core/src/test/java/org/apache/shardingsphere/driver/jdbc/core/connection/ShardingSphereConnectionTest.java
 
b/jdbc/core/src/test/java/org/apache/shardingsphere/driver/jdbc/core/connection/ShardingSphereConnectionTest.java
index 11545c1ecb2..1f4a38e5206 100644
--- 
a/jdbc/core/src/test/java/org/apache/shardingsphere/driver/jdbc/core/connection/ShardingSphereConnectionTest.java
+++ 
b/jdbc/core/src/test/java/org/apache/shardingsphere/driver/jdbc/core/connection/ShardingSphereConnectionTest.java
@@ -20,11 +20,11 @@ package 
org.apache.shardingsphere.driver.jdbc.core.connection;
 import lombok.SneakyThrows;
 import org.apache.shardingsphere.infra.database.core.DefaultDatabase;
 import 
org.apache.shardingsphere.infra.executor.sql.execute.engine.ConnectionMode;
-import 
org.apache.shardingsphere.infra.metadata.database.resource.unit.StorageUnit;
 import 
org.apache.shardingsphere.infra.metadata.database.resource.unit.StorageUnitMetaData;
 import org.apache.shardingsphere.infra.metadata.database.rule.RuleMetaData;
 import org.apache.shardingsphere.infra.session.connection.ConnectionContext;
 import org.apache.shardingsphere.mode.manager.ContextManager;
+import org.apache.shardingsphere.test.fixture.jdbc.MockedDataSource;
 import org.apache.shardingsphere.traffic.rule.TrafficRule;
 import org.apache.shardingsphere.transaction.ConnectionTransaction;
 import 
org.apache.shardingsphere.transaction.ConnectionTransaction.DistributedTransactionOperationType;
@@ -34,6 +34,7 @@ import 
org.apache.shardingsphere.transaction.rule.TransactionRule;
 import org.junit.jupiter.api.Test;
 import org.mockito.internal.configuration.plugins.Plugins;
 
+import javax.sql.DataSource;
 import java.sql.CallableStatement;
 import java.sql.Connection;
 import java.sql.SQLException;
@@ -73,9 +74,7 @@ class ShardingSphereConnectionTest {
     @Test
     void assertSetAutoCommitWithLocalTransaction() throws SQLException {
         Connection physicalConnection = mock(Connection.class);
-        StorageUnit storageUnit = mock(StorageUnit.class, RETURNS_DEEP_STUBS);
-        
when(storageUnit.getDataSource().getConnection()).thenReturn(physicalConnection);
-        try (ShardingSphereConnection connection = new 
ShardingSphereConnection(DefaultDatabase.LOGIC_NAME, 
mockContextManager(storageUnit))) {
+        try (ShardingSphereConnection connection = new 
ShardingSphereConnection(DefaultDatabase.LOGIC_NAME, 
mockContextManager(physicalConnection))) {
             connection.getDatabaseConnectionManager().getConnections("ds", 0, 
1, ConnectionMode.MEMORY_STRICTLY);
             connection.setAutoCommit(true);
             assertTrue(connection.getAutoCommit());
@@ -99,9 +98,7 @@ class ShardingSphereConnectionTest {
     @Test
     void assertCommitWithLocalTransaction() throws SQLException {
         Connection physicalConnection = mock(Connection.class);
-        StorageUnit storageUnit = mock(StorageUnit.class, RETURNS_DEEP_STUBS);
-        
when(storageUnit.getDataSource().getConnection()).thenReturn(physicalConnection);
-        try (ShardingSphereConnection connection = new 
ShardingSphereConnection(DefaultDatabase.LOGIC_NAME, 
mockContextManager(storageUnit))) {
+        try (ShardingSphereConnection connection = new 
ShardingSphereConnection(DefaultDatabase.LOGIC_NAME, 
mockContextManager(physicalConnection))) {
             connection.getDatabaseConnectionManager().getConnections("ds", 0, 
1, ConnectionMode.MEMORY_STRICTLY);
             connection.setAutoCommit(false);
             assertFalse(connection.getAutoCommit());
@@ -134,9 +131,7 @@ class ShardingSphereConnectionTest {
     @Test
     void assertRollbackWithLocalTransaction() throws SQLException {
         Connection physicalConnection = mock(Connection.class);
-        StorageUnit storageUnit = mock(StorageUnit.class, RETURNS_DEEP_STUBS);
-        
when(storageUnit.getDataSource().getConnection()).thenReturn(physicalConnection);
-        try (ShardingSphereConnection connection = new 
ShardingSphereConnection(DefaultDatabase.LOGIC_NAME, 
mockContextManager(storageUnit))) {
+        try (ShardingSphereConnection connection = new 
ShardingSphereConnection(DefaultDatabase.LOGIC_NAME, 
mockContextManager(physicalConnection))) {
             connection.getDatabaseConnectionManager().getConnections("ds", 0, 
1, ConnectionMode.MEMORY_STRICTLY);
             connection.setAutoCommit(false);
             assertFalse(connection.getAutoCommit());
@@ -217,9 +212,7 @@ class ShardingSphereConnectionTest {
     @Test
     void assertCreateArrayOf() throws SQLException {
         Connection physicalConnection = mock(Connection.class);
-        StorageUnit storageUnit = mock(StorageUnit.class, RETURNS_DEEP_STUBS);
-        
when(storageUnit.getDataSource().getConnection()).thenReturn(physicalConnection);
-        try (ShardingSphereConnection connection = new 
ShardingSphereConnection(DefaultDatabase.LOGIC_NAME, 
mockContextManager(storageUnit))) {
+        try (ShardingSphereConnection connection = new 
ShardingSphereConnection(DefaultDatabase.LOGIC_NAME, 
mockContextManager(physicalConnection))) {
             connection.getDatabaseConnectionManager().getConnections("ds", 0, 
1, ConnectionMode.MEMORY_STRICTLY);
             assertNull(connection.createArrayOf("int", null));
         }
@@ -231,9 +224,7 @@ class ShardingSphereConnectionTest {
         CallableStatement expected = mock(CallableStatement.class);
         Connection physicalConnection = mock(Connection.class);
         when(physicalConnection.prepareCall("")).thenReturn(expected);
-        StorageUnit storageUnit = mock(StorageUnit.class, RETURNS_DEEP_STUBS);
-        
when(storageUnit.getDataSource().getConnection()).thenReturn(physicalConnection);
-        try (ShardingSphereConnection connection = new 
ShardingSphereConnection(DefaultDatabase.LOGIC_NAME, 
mockContextManager(storageUnit))) {
+        try (ShardingSphereConnection connection = new 
ShardingSphereConnection(DefaultDatabase.LOGIC_NAME, 
mockContextManager(physicalConnection))) {
             assertThat(connection.prepareCall(""), is(expected));
         }
     }
@@ -247,13 +238,17 @@ class ShardingSphereConnectionTest {
     }
     
     private ContextManager mockContextManager() {
-        return mockContextManager(mock(StorageUnit.class, RETURNS_DEEP_STUBS));
+        return mockContextManager(new MockedDataSource());
     }
     
-    private ContextManager mockContextManager(final StorageUnit storageUnit) {
+    private ContextManager mockContextManager(final Connection connection) {
+        return mockContextManager(new MockedDataSource(connection));
+    }
+    
+    private ContextManager mockContextManager(final DataSource dataSource) {
         ContextManager result = mock(ContextManager.class, RETURNS_DEEP_STUBS);
         StorageUnitMetaData storageUnitMetaData = 
mock(StorageUnitMetaData.class);
-        when(storageUnitMetaData.getStorageUnit()).thenReturn(storageUnit);
+        when(storageUnitMetaData.getDataSource()).thenReturn(dataSource);
         
when(result.getStorageUnitMetaDataMap(DefaultDatabase.LOGIC_NAME)).thenReturn(Collections.singletonMap("ds",
 storageUnitMetaData));
         
when(result.getMetaDataContexts().getMetaData().getGlobalRuleMetaData()).thenReturn(new
 RuleMetaData(Arrays.asList(mockTransactionRule(), mock(TrafficRule.class))));
         return result;
diff --git 
a/jdbc/core/src/test/java/org/apache/shardingsphere/driver/jdbc/core/datasource/ShardingSphereDataSourceTest.java
 
b/jdbc/core/src/test/java/org/apache/shardingsphere/driver/jdbc/core/datasource/ShardingSphereDataSourceTest.java
index b4f874b43d9..dd106df7f8a 100644
--- 
a/jdbc/core/src/test/java/org/apache/shardingsphere/driver/jdbc/core/datasource/ShardingSphereDataSourceTest.java
+++ 
b/jdbc/core/src/test/java/org/apache/shardingsphere/driver/jdbc/core/datasource/ShardingSphereDataSourceTest.java
@@ -73,8 +73,7 @@ class ShardingSphereDataSourceTest {
             
assertThat(contextManager.getClusterStateContext().getCurrentState(), 
is(ClusterState.OK));
             
assertThat(contextManager.getInstanceContext().getInstance().getState().getCurrentState(),
 is(InstanceState.OK));
             
assertThat(contextManager.getStorageUnitMetaDataMap(DefaultDatabase.LOGIC_NAME).size(),
 is(1));
-            
assertThat(contextManager.getStorageUnitMetaDataMap(DefaultDatabase.LOGIC_NAME).get("ds").getStorageUnit().getDataSource().getConnection().getMetaData().getURL(),
-                    is("jdbc:mock://127.0.0.1/foo_ds"));
+            
assertThat(contextManager.getStorageUnitMetaDataMap(DefaultDatabase.LOGIC_NAME).get("ds").getDataSource().getConnection().getMetaData().getURL(),
 is("jdbc:mock://127.0.0.1/foo_ds"));
         }
     }
     
diff --git 
a/kernel/data-pipeline/scenario/cdc/core/src/main/java/org/apache/shardingsphere/data/pipeline/cdc/api/impl/CDCJobAPI.java
 
b/kernel/data-pipeline/scenario/cdc/core/src/main/java/org/apache/shardingsphere/data/pipeline/cdc/api/impl/CDCJobAPI.java
index ea3b9407f97..48380473105 100644
--- 
a/kernel/data-pipeline/scenario/cdc/core/src/main/java/org/apache/shardingsphere/data/pipeline/cdc/api/impl/CDCJobAPI.java
+++ 
b/kernel/data-pipeline/scenario/cdc/core/src/main/java/org/apache/shardingsphere/data/pipeline/cdc/api/impl/CDCJobAPI.java
@@ -161,7 +161,7 @@ public final class CDCJobAPI extends 
AbstractInventoryIncrementalJobAPIImpl {
     private ShardingSpherePipelineDataSourceConfiguration 
getDataSourceConfiguration(final ShardingSphereDatabase database) {
         Map<String, Map<String, Object>> dataSourcePoolProps = new HashMap<>();
         for (Entry<String, StorageUnitMetaData> entry : 
database.getResourceMetaData().getStorageUnitMetaDataMap().entrySet()) {
-            dataSourcePoolProps.put(entry.getKey(), 
dataSourceConfigSwapper.swapToMap(entry.getValue().getStorageUnit().getDataSourcePoolProperties()));
+            dataSourcePoolProps.put(entry.getKey(), 
dataSourceConfigSwapper.swapToMap(entry.getValue().getDataSourcePoolProperties()));
         }
         YamlRootConfiguration targetRootConfig = new YamlRootConfiguration();
         targetRootConfig.setDatabaseName(database.getName());
diff --git 
a/kernel/data-pipeline/scenario/migration/src/main/java/org/apache/shardingsphere/data/pipeline/scenario/migration/api/impl/MigrationJobAPI.java
 
b/kernel/data-pipeline/scenario/migration/src/main/java/org/apache/shardingsphere/data/pipeline/scenario/migration/api/impl/MigrationJobAPI.java
index 2db7b0da4bf..a162586fdf1 100644
--- 
a/kernel/data-pipeline/scenario/migration/src/main/java/org/apache/shardingsphere/data/pipeline/scenario/migration/api/impl/MigrationJobAPI.java
+++ 
b/kernel/data-pipeline/scenario/migration/src/main/java/org/apache/shardingsphere/data/pipeline/scenario/migration/api/impl/MigrationJobAPI.java
@@ -192,7 +192,7 @@ public final class MigrationJobAPI extends 
AbstractInventoryIncrementalJobAPIImp
         Map<String, Map<String, Object>> targetPoolProps = new HashMap<>();
         YamlDataSourceConfigurationSwapper dataSourceConfigSwapper = new 
YamlDataSourceConfigurationSwapper();
         for (Entry<String, StorageUnitMetaData> entry : 
targetDatabase.getResourceMetaData().getStorageUnitMetaDataMap().entrySet()) {
-            targetPoolProps.put(entry.getKey(), 
dataSourceConfigSwapper.swapToMap(entry.getValue().getStorageUnit().getDataSourcePoolProperties()));
+            targetPoolProps.put(entry.getKey(), 
dataSourceConfigSwapper.swapToMap(entry.getValue().getDataSourcePoolProperties()));
         }
         YamlRootConfiguration targetRootConfig = 
buildYamlRootConfiguration(targetDatabase.getName(), targetPoolProps, 
targetDatabase.getRuleMetaData().getConfigurations());
         return new 
ShardingSpherePipelineDataSourceConfiguration(targetRootConfig);
diff --git 
a/kernel/global-clock/core/src/main/java/org/apache/shardingsphere/globalclock/core/rule/GlobalClockRule.java
 
b/kernel/global-clock/core/src/main/java/org/apache/shardingsphere/globalclock/core/rule/GlobalClockRule.java
index 89c2a614764..c328af3bb08 100644
--- 
a/kernel/global-clock/core/src/main/java/org/apache/shardingsphere/globalclock/core/rule/GlobalClockRule.java
+++ 
b/kernel/global-clock/core/src/main/java/org/apache/shardingsphere/globalclock/core/rule/GlobalClockRule.java
@@ -23,6 +23,7 @@ import 
org.apache.shardingsphere.globalclock.core.provider.GlobalClockProvider;
 import org.apache.shardingsphere.infra.database.DatabaseTypeEngine;
 import org.apache.shardingsphere.infra.database.core.type.DatabaseType;
 import 
org.apache.shardingsphere.infra.metadata.database.ShardingSphereDatabase;
+import 
org.apache.shardingsphere.infra.metadata.database.resource.unit.StorageUnitMetaData;
 import org.apache.shardingsphere.infra.rule.identifier.scope.GlobalRule;
 import org.apache.shardingsphere.infra.spi.type.typed.TypedSPILoader;
 import org.apache.shardingsphere.transaction.spi.TransactionHook;
@@ -61,7 +62,7 @@ public final class GlobalClockRule implements GlobalRule {
     
     private Optional<DatabaseType> findStorageType(final 
Collection<ShardingSphereDatabase> databases) {
         return databases.stream()
-                .flatMap(each -> 
each.getResourceMetaData().getStorageUnitMetaDataMap().values().stream()).findFirst().map(each
 -> each.getStorageUnit().getStorageType());
+                .flatMap(each -> 
each.getResourceMetaData().getStorageUnitMetaDataMap().values().stream()).findFirst().map(StorageUnitMetaData::getStorageType);
     }
     
     /**
diff --git 
a/kernel/single/distsql/handler/src/main/java/org/apache/shardingsphere/single/distsql/handler/query/ShowUnloadedSingleTableExecutor.java
 
b/kernel/single/distsql/handler/src/main/java/org/apache/shardingsphere/single/distsql/handler/query/ShowUnloadedSingleTableExecutor.java
index d627b6cfd36..490b9f067b8 100644
--- 
a/kernel/single/distsql/handler/src/main/java/org/apache/shardingsphere/single/distsql/handler/query/ShowUnloadedSingleTableExecutor.java
+++ 
b/kernel/single/distsql/handler/src/main/java/org/apache/shardingsphere/single/distsql/handler/query/ShowUnloadedSingleTableExecutor.java
@@ -65,7 +65,7 @@ public final class ShowUnloadedSingleTableExecutor implements 
RQLExecutor<ShowUn
         ResourceMetaData resourceMetaData = database.getResourceMetaData();
         Map<String, DataSource> aggregateDataSourceMap = 
SingleTableLoadUtils.getAggregatedDataSourceMap(
                 
resourceMetaData.getStorageUnitMetaDataMap().entrySet().stream()
-                        .collect(Collectors.toMap(Entry::getKey, entry -> 
entry.getValue().getStorageUnit().getDataSource(), (oldValue, currentValue) -> 
oldValue, LinkedHashMap::new)),
+                        .collect(Collectors.toMap(Entry::getKey, entry -> 
entry.getValue().getDataSource(), (oldValue, currentValue) -> oldValue, 
LinkedHashMap::new)),
                 database.getRuleMetaData().getRules());
         Collection<String> excludedTables = 
SingleTableLoadUtils.getExcludedTables(database.getRuleMetaData().getRules());
         return SingleTableDataNodeLoader.load(database.getName(), 
database.getProtocolType(), aggregateDataSourceMap, excludedTables);
diff --git 
a/kernel/single/distsql/handler/src/main/java/org/apache/shardingsphere/single/distsql/handler/update/LoadSingleTableStatementUpdater.java
 
b/kernel/single/distsql/handler/src/main/java/org/apache/shardingsphere/single/distsql/handler/update/LoadSingleTableStatementUpdater.java
index bb10a6dc0a6..4c962d3d0d6 100644
--- 
a/kernel/single/distsql/handler/src/main/java/org/apache/shardingsphere/single/distsql/handler/update/LoadSingleTableStatementUpdater.java
+++ 
b/kernel/single/distsql/handler/src/main/java/org/apache/shardingsphere/single/distsql/handler/update/LoadSingleTableStatementUpdater.java
@@ -115,7 +115,7 @@ public final class LoadSingleTableStatementUpdater 
implements RuleDefinitionCrea
         ResourceMetaData resourceMetaData = database.getResourceMetaData();
         Map<String, DataSource> aggregateDataSourceMap = 
SingleTableLoadUtils.getAggregatedDataSourceMap(
                 
resourceMetaData.getStorageUnitMetaDataMap().entrySet().stream()
-                        .collect(Collectors.toMap(Entry::getKey, entry -> 
entry.getValue().getStorageUnit().getDataSource(), (oldValue, currentValue) -> 
oldValue, LinkedHashMap::new)),
+                        .collect(Collectors.toMap(Entry::getKey, entry -> 
entry.getValue().getDataSource(), (oldValue, currentValue) -> oldValue, 
LinkedHashMap::new)),
                 database.getRuleMetaData().getRules());
         Map<String, Map<String, Collection<String>>> actualTableNodes = new 
LinkedHashMap<>();
         for (String each : requiredDataSources) {
diff --git 
a/kernel/transaction/core/src/main/java/org/apache/shardingsphere/transaction/rule/TransactionRule.java
 
b/kernel/transaction/core/src/main/java/org/apache/shardingsphere/transaction/rule/TransactionRule.java
index 1cf0c70084b..43200312e4c 100644
--- 
a/kernel/transaction/core/src/main/java/org/apache/shardingsphere/transaction/rule/TransactionRule.java
+++ 
b/kernel/transaction/core/src/main/java/org/apache/shardingsphere/transaction/rule/TransactionRule.java
@@ -71,8 +71,8 @@ public final class TransactionRule implements GlobalRule, 
ResourceHeldRule<Shard
         Map<String, DatabaseType> databaseTypes = new 
LinkedHashMap<>(databases.size(), 1F);
         for (Entry<String, ShardingSphereDatabase> entry : 
databases.entrySet()) {
             ShardingSphereDatabase database = entry.getValue();
-            
database.getResourceMetaData().getStorageUnitMetaDataMap().forEach((key, value) 
-> dataSourceMap.put(database.getName() + "." + key, 
value.getStorageUnit().getDataSource()));
-            
database.getResourceMetaData().getStorageUnitMetaDataMap().forEach((key, value) 
-> databaseTypes.put(database.getName() + "." + key, 
value.getStorageUnit().getStorageType()));
+            
database.getResourceMetaData().getStorageUnitMetaDataMap().forEach((key, value) 
-> dataSourceMap.put(database.getName() + "." + key, value.getDataSource()));
+            
database.getResourceMetaData().getStorageUnitMetaDataMap().forEach((key, value) 
-> databaseTypes.put(database.getName() + "." + key, value.getStorageType()));
         }
         if (dataSourceMap.isEmpty()) {
             return new ShardingSphereTransactionManagerEngine(defaultType);
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 f71ddef9647..19558caa653 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
@@ -28,7 +28,6 @@ import 
org.apache.shardingsphere.infra.metadata.ShardingSphereMetaData;
 import 
org.apache.shardingsphere.infra.metadata.database.ShardingSphereDatabase;
 import 
org.apache.shardingsphere.infra.metadata.database.resource.ResourceMetaData;
 import 
org.apache.shardingsphere.infra.metadata.database.resource.unit.StorageUnitMetaData;
-import 
org.apache.shardingsphere.infra.metadata.database.resource.unit.StorageUnit;
 import org.apache.shardingsphere.infra.metadata.database.rule.RuleMetaData;
 import org.apache.shardingsphere.infra.metadata.database.schema.SchemaManager;
 import 
org.apache.shardingsphere.infra.metadata.database.schema.builder.GenericSchemaBuilder;
@@ -183,8 +182,8 @@ public final class ContextManager implements AutoCloseable {
         ShardingSphereDatabase database = 
metaDataContexts.get().getMetaData().getDatabase(databaseName);
         database.reloadRules(MutableDataNodeRule.class);
         GenericSchemaBuilderMaterial material = new 
GenericSchemaBuilderMaterial(database.getProtocolType(),
-                Collections.singletonMap(dataSourceName, 
database.getResourceMetaData().getStorageUnitMetaDataMap().get(dataSourceName).getStorageUnit().getStorageType()),
-                Collections.singletonMap(dataSourceName, 
database.getResourceMetaData().getStorageUnitMetaDataMap().get(dataSourceName).getStorageUnit().getDataSource()),
+                Collections.singletonMap(dataSourceName, 
database.getResourceMetaData().getStorageUnitMetaDataMap().get(dataSourceName).getStorageType()),
+                Collections.singletonMap(dataSourceName, 
database.getResourceMetaData().getStorageUnitMetaDataMap().get(dataSourceName).getDataSource()),
                 database.getRuleMetaData().getRules(), 
metaDataContexts.get().getMetaData().getProps(), schemaName);
         ShardingSphereSchema result = 
GenericSchemaBuilder.build(material).get(schemaName);
         
result.getViews().putAll(metaDataContexts.get().getPersistService().getDatabaseMetaDataService().getViewMetaDataPersistService().load(database.getName(),
 schemaName));
@@ -219,9 +218,9 @@ public final class ContextManager implements AutoCloseable {
      */
     public void reloadTable(final String databaseName, final String 
schemaName, final String dataSourceName, final String tableName) {
         ShardingSphereDatabase database = 
metaDataContexts.get().getMetaData().getDatabase(databaseName);
-        StorageUnit storageUnit = 
database.getResourceMetaData().getStorageUnitMetaDataMap().get(dataSourceName).getStorageUnit();
-        GenericSchemaBuilderMaterial material = new 
GenericSchemaBuilderMaterial(database.getProtocolType(), 
Collections.singletonMap(dataSourceName, storageUnit.getStorageType()),
-                Collections.singletonMap(dataSourceName, 
storageUnit.getDataSource()), database.getRuleMetaData().getRules(), 
metaDataContexts.get().getMetaData().getProps(), schemaName);
+        StorageUnitMetaData storageUnitMetaData = 
database.getResourceMetaData().getStorageUnitMetaDataMap().get(dataSourceName);
+        GenericSchemaBuilderMaterial material = new 
GenericSchemaBuilderMaterial(database.getProtocolType(), 
Collections.singletonMap(dataSourceName, storageUnitMetaData.getStorageType()),
+                Collections.singletonMap(dataSourceName, 
storageUnitMetaData.getDataSource()), 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/manager/context/ConfigurationContextManager.java
 
b/mode/core/src/main/java/org/apache/shardingsphere/mode/manager/context/ConfigurationContextManager.java
index bf9b9c50d50..3e111802fe7 100644
--- 
a/mode/core/src/main/java/org/apache/shardingsphere/mode/manager/context/ConfigurationContextManager.java
+++ 
b/mode/core/src/main/java/org/apache/shardingsphere/mode/manager/context/ConfigurationContextManager.java
@@ -176,7 +176,7 @@ public final class ConfigurationContextManager {
             rules.removeIf(each -> 
each.getConfiguration().getClass().isAssignableFrom(ruleConfig.getClass()));
             rules.addAll(DatabaseRulesBuilder.build(databaseName,
                     
database.getResourceMetaData().getStorageUnitMetaDataMap().entrySet().stream()
-                            .collect(Collectors.toMap(Entry::getKey, entry -> 
entry.getValue().getStorageUnit().getDataSource(), (oldValue, currentValue) -> 
oldValue, LinkedHashMap::new)),
+                            .collect(Collectors.toMap(Entry::getKey, entry -> 
entry.getValue().getDataSource(), (oldValue, currentValue) -> oldValue, 
LinkedHashMap::new)),
                     database.getRuleMetaData().getRules(), ruleConfig, 
instanceContext));
             refreshMetadata(databaseName, database, rules);
         } catch (final SQLException ex) {
@@ -198,7 +198,7 @@ public final class ConfigurationContextManager {
             if (isNotEmptyConfig(ruleConfig)) {
                 rules.addAll(DatabaseRulesBuilder.build(databaseName,
                         
database.getResourceMetaData().getStorageUnitMetaDataMap().entrySet().stream()
-                                .collect(Collectors.toMap(Entry::getKey, entry 
-> entry.getValue().getStorageUnit().getDataSource(), (oldValue, currentValue) 
-> oldValue, LinkedHashMap::new)),
+                                .collect(Collectors.toMap(Entry::getKey, entry 
-> entry.getValue().getDataSource(), (oldValue, currentValue) -> oldValue, 
LinkedHashMap::new)),
                         database.getRuleMetaData().getRules(), ruleConfig, 
instanceContext));
             }
             refreshMetadata(databaseName, database, rules);
@@ -281,7 +281,7 @@ public final class ConfigurationContextManager {
         Map<StorageNodeName, DataSource> newStorageNodes = 
getNewStorageNodes(database.getResourceMetaData().getDataSources(), resource);
         Map<String, StorageNode> newStorageUnitNodeMap = 
getNewStorageUnitNodeMap(database.getResourceMetaData().getStorageUnitMetaDataMap(),
 resource);
         Map<String, DataSourcePoolProperties> propsMap = 
database.getResourceMetaData().getStorageUnitMetaDataMap().entrySet().stream()
-                .collect(Collectors.toMap(Entry::getKey, entry -> 
entry.getValue().getStorageUnit().getDataSourcePoolProperties(), (oldValue, 
currentValue) -> currentValue, LinkedHashMap::new));
+                .collect(Collectors.toMap(Entry::getKey, entry -> 
entry.getValue().getDataSourcePoolProperties(), (oldValue, currentValue) -> 
currentValue, LinkedHashMap::new));
         return Collections.singletonMap(database.getName().toLowerCase(), new 
ShardingSphereDatabase(database.getName(), database.getProtocolType(),
                 new ResourceMetaData(database.getName(), newStorageNodes, 
newStorageUnitNodeMap, propsMap), database.getRuleMetaData(), 
database.getSchemas()));
     }
@@ -363,7 +363,7 @@ public final class ConfigurationContextManager {
         StorageResource storageResource = 
getMergedStorageResource(resourceMetaData, switchingResource);
         Map<String, DataSourcePoolProperties> propsMap = null == 
switchingResource
                 ? 
resourceMetaData.getStorageUnitMetaDataMap().entrySet().stream()
-                        .collect(Collectors.toMap(Entry::getKey, entry -> 
entry.getValue().getStorageUnit().getDataSourcePoolProperties(), (oldValue, 
currentValue) -> oldValue, LinkedHashMap::new))
+                        .collect(Collectors.toMap(Entry::getKey, entry -> 
entry.getValue().getDataSourcePoolProperties(), (oldValue, currentValue) -> 
oldValue, LinkedHashMap::new))
                 : switchingResource.getMergedDataSourcePoolPropertiesMap();
         return new DataSourceProvidedDatabaseConfiguration(storageResource, 
toBeCreatedRuleConfigs, propsMap);
     }
diff --git 
a/mode/core/src/main/java/org/apache/shardingsphere/mode/manager/switcher/NewResourceSwitchManager.java
 
b/mode/core/src/main/java/org/apache/shardingsphere/mode/manager/switcher/NewResourceSwitchManager.java
index 27c866d8fa8..177636d843a 100644
--- 
a/mode/core/src/main/java/org/apache/shardingsphere/mode/manager/switcher/NewResourceSwitchManager.java
+++ 
b/mode/core/src/main/java/org/apache/shardingsphere/mode/manager/switcher/NewResourceSwitchManager.java
@@ -49,7 +49,7 @@ public final class NewResourceSwitchManager {
      */
     public SwitchingResource registerStorageUnit(final ResourceMetaData 
resourceMetaData, final Map<String, DataSourcePoolProperties> 
storageUnitDataSourcePoolPropsMap) {
         Map<String, DataSourcePoolProperties> mergedPropsMap = new 
LinkedHashMap<>(resourceMetaData.getStorageUnitMetaDataMap().entrySet().stream()
-                .collect(Collectors.toMap(Entry::getKey, entry -> 
entry.getValue().getStorageUnit().getDataSourcePoolProperties(), (oldValue, 
currentValue) -> oldValue, LinkedHashMap::new)));
+                .collect(Collectors.toMap(Entry::getKey, entry -> 
entry.getValue().getDataSourcePoolProperties(), (oldValue, currentValue) -> 
oldValue, LinkedHashMap::new)));
         mergedPropsMap.putAll(storageUnitDataSourcePoolPropsMap);
         Map<String, StorageNode> toBeCreatedStorageUintNodeMap = 
StorageUnitNodeMapUtils.fromDataSourcePoolProperties(storageUnitDataSourcePoolPropsMap);
         return new SwitchingResource(resourceMetaData,
@@ -78,7 +78,7 @@ public final class NewResourceSwitchManager {
      */
     public SwitchingResource alterStorageUnit(final ResourceMetaData 
resourceMetaData, final Map<String, DataSourcePoolProperties> propsMap) {
         Map<String, DataSourcePoolProperties> 
mergedDataSourcePoolPropertiesMap = new 
LinkedHashMap<>(resourceMetaData.getStorageUnitMetaDataMap().entrySet().stream()
-                .collect(Collectors.toMap(Entry::getKey, entry -> 
entry.getValue().getStorageUnit().getDataSourcePoolProperties(), (oldValue, 
currentValue) -> oldValue, LinkedHashMap::new)));
+                .collect(Collectors.toMap(Entry::getKey, entry -> 
entry.getValue().getDataSourcePoolProperties(), (oldValue, currentValue) -> 
oldValue, LinkedHashMap::new)));
         mergedDataSourcePoolPropertiesMap.putAll(propsMap);
         Map<String, StorageNode> toBeAlteredStorageUintNodeMap = 
StorageUnitNodeMapUtils.fromDataSourcePoolProperties(mergedDataSourcePoolPropertiesMap);
         return new SwitchingResource(resourceMetaData,
@@ -115,7 +115,7 @@ public final class NewResourceSwitchManager {
      */
     public SwitchingResource unregisterStorageUnit(final ResourceMetaData 
resourceMetaData, final String storageUnitName) {
         Map<String, DataSourcePoolProperties> 
mergedDataSourcePoolPropertiesMap = new 
LinkedHashMap<>(resourceMetaData.getStorageUnitMetaDataMap().entrySet().stream()
-                .collect(Collectors.toMap(Entry::getKey, entry -> 
entry.getValue().getStorageUnit().getDataSourcePoolProperties(), (oldValue, 
currentValue) -> oldValue, LinkedHashMap::new)));
+                .collect(Collectors.toMap(Entry::getKey, entry -> 
entry.getValue().getDataSourcePoolProperties(), (oldValue, currentValue) -> 
oldValue, LinkedHashMap::new)));
         mergedDataSourcePoolPropertiesMap.keySet().removeIf(each -> 
each.equals(storageUnitName));
         resourceMetaData.getStorageUnitMetaDataMap().remove(storageUnitName);
         return new SwitchingResource(resourceMetaData, new 
StorageResource(Collections.emptyMap(), Collections.emptyMap()),
diff --git 
a/mode/core/src/main/java/org/apache/shardingsphere/mode/manager/switcher/ResourceSwitchManager.java
 
b/mode/core/src/main/java/org/apache/shardingsphere/mode/manager/switcher/ResourceSwitchManager.java
index 56956920c09..69d8d9db168 100644
--- 
a/mode/core/src/main/java/org/apache/shardingsphere/mode/manager/switcher/ResourceSwitchManager.java
+++ 
b/mode/core/src/main/java/org/apache/shardingsphere/mode/manager/switcher/ResourceSwitchManager.java
@@ -50,7 +50,7 @@ public final class ResourceSwitchManager {
      */
     public SwitchingResource create(final ResourceMetaData resourceMetaData, 
final Map<String, DataSourcePoolProperties> toBeChangedPropsMap) {
         Map<String, DataSourcePoolProperties> mergedPropsMap = new 
LinkedHashMap<>(resourceMetaData.getStorageUnitMetaDataMap().entrySet().stream()
-                .collect(Collectors.toMap(Entry::getKey, entry -> 
entry.getValue().getStorageUnit().getDataSourcePoolProperties(), (oldValue, 
currentValue) -> oldValue, LinkedHashMap::new)));
+                .collect(Collectors.toMap(Entry::getKey, entry -> 
entry.getValue().getDataSourcePoolProperties(), (oldValue, currentValue) -> 
oldValue, LinkedHashMap::new)));
         mergedPropsMap.putAll(toBeChangedPropsMap);
         Map<String, StorageNode> toBeChangedStorageUnitNodeMap = 
StorageUnitNodeMapUtils.fromDataSourcePoolProperties(toBeChangedPropsMap);
         return new SwitchingResource(resourceMetaData,
@@ -67,7 +67,7 @@ public final class ResourceSwitchManager {
      */
     public SwitchingResource createByDropResource(final ResourceMetaData 
resourceMetaData, final Map<String, DataSourcePoolProperties> 
toBeDeletedPropsMap) {
         Map<String, DataSourcePoolProperties> 
mergedDataSourcePoolPropertiesMap = new 
LinkedHashMap<>(resourceMetaData.getStorageUnitMetaDataMap().entrySet().stream()
-                .collect(Collectors.toMap(Entry::getKey, entry -> 
entry.getValue().getStorageUnit().getDataSourcePoolProperties(), (oldValue, 
currentValue) -> oldValue, LinkedHashMap::new)));
+                .collect(Collectors.toMap(Entry::getKey, entry -> 
entry.getValue().getDataSourcePoolProperties(), (oldValue, currentValue) -> 
oldValue, LinkedHashMap::new)));
         
mergedDataSourcePoolPropertiesMap.keySet().removeIf(toBeDeletedPropsMap::containsKey);
         Map<String, StorageNode> toRemovedStorageUnitNodeMap = 
StorageUnitNodeMapUtils.fromDataSourcePoolProperties(toBeDeletedPropsMap);
         return new SwitchingResource(resourceMetaData, new 
StorageResource(Collections.emptyMap(), Collections.emptyMap()),
@@ -83,7 +83,7 @@ public final class ResourceSwitchManager {
      */
     public SwitchingResource createByAlterDataSourcePoolProperties(final 
ResourceMetaData resourceMetaData, final Map<String, DataSourcePoolProperties> 
toBeChangedPropsMap) {
         Map<String, DataSourcePoolProperties> 
mergedDataSourcePoolPropertiesMap = new 
LinkedHashMap<>(resourceMetaData.getStorageUnitMetaDataMap().entrySet().stream()
-                .collect(Collectors.toMap(Entry::getKey, entry -> 
entry.getValue().getStorageUnit().getDataSourcePoolProperties(), (oldValue, 
currentValue) -> oldValue, LinkedHashMap::new)));
+                .collect(Collectors.toMap(Entry::getKey, entry -> 
entry.getValue().getDataSourcePoolProperties(), (oldValue, currentValue) -> 
oldValue, LinkedHashMap::new)));
         mergedDataSourcePoolPropertiesMap.keySet().removeIf(each -> 
!toBeChangedPropsMap.containsKey(each));
         mergedDataSourcePoolPropertiesMap.putAll(toBeChangedPropsMap);
         Map<String, StorageNode> toBeChangedStorageUnitNodeMap = 
StorageUnitNodeMapUtils.fromDataSourcePoolProperties(toBeChangedPropsMap);
diff --git 
a/mode/core/src/main/java/org/apache/shardingsphere/mode/metadata/MetaDataContextsFactory.java
 
b/mode/core/src/main/java/org/apache/shardingsphere/mode/metadata/MetaDataContextsFactory.java
index 273b5f6e3df..025186c108d 100644
--- 
a/mode/core/src/main/java/org/apache/shardingsphere/mode/metadata/MetaDataContextsFactory.java
+++ 
b/mode/core/src/main/java/org/apache/shardingsphere/mode/metadata/MetaDataContextsFactory.java
@@ -148,7 +148,7 @@ public final class MetaDataContextsFactory {
             String databaseName = entry.getKey();
             
metadataContexts.getPersistService().persistConfigurations(entry.getKey(), 
entry.getValue(),
                     
metadataContexts.getMetaData().getDatabase(databaseName).getResourceMetaData().getStorageUnitMetaDataMap().entrySet().stream()
-                            .collect(Collectors.toMap(Entry::getKey, each -> 
each.getValue().getStorageUnit().getDataSource(), (oldValue, currentValue) -> 
oldValue, LinkedHashMap::new)),
+                            .collect(Collectors.toMap(Entry::getKey, each -> 
each.getValue().getDataSource(), (oldValue, currentValue) -> oldValue, 
LinkedHashMap::new)),
                     
metadataContexts.getMetaData().getDatabase(databaseName).getRuleMetaData().getRules());
         }
     }
diff --git 
a/mode/core/src/main/java/org/apache/shardingsphere/mode/metadata/NewMetaDataContextsFactory.java
 
b/mode/core/src/main/java/org/apache/shardingsphere/mode/metadata/NewMetaDataContextsFactory.java
index 62b3881cc93..373b53921bc 100644
--- 
a/mode/core/src/main/java/org/apache/shardingsphere/mode/metadata/NewMetaDataContextsFactory.java
+++ 
b/mode/core/src/main/java/org/apache/shardingsphere/mode/metadata/NewMetaDataContextsFactory.java
@@ -150,7 +150,7 @@ public final class NewMetaDataContextsFactory {
             String databaseName = entry.getKey();
             
metadataContexts.getPersistService().persistConfigurations(entry.getKey(), 
entry.getValue(),
                     
metadataContexts.getMetaData().getDatabase(databaseName).getResourceMetaData().getStorageUnitMetaDataMap().entrySet().stream()
-                            .collect(Collectors.toMap(Entry::getKey, each -> 
each.getValue().getStorageUnit().getDataSource(), (oldValue, currentValue) -> 
oldValue, LinkedHashMap::new)),
+                            .collect(Collectors.toMap(Entry::getKey, each -> 
each.getValue().getDataSource(), (oldValue, currentValue) -> oldValue, 
LinkedHashMap::new)),
                     
metadataContexts.getMetaData().getDatabase(databaseName).getRuleMetaData().getRules());
         }
     }
diff --git 
a/mode/core/src/test/java/org/apache/shardingsphere/mode/manager/ContextManagerTest.java
 
b/mode/core/src/test/java/org/apache/shardingsphere/mode/manager/ContextManagerTest.java
index bf6bcdf42c7..fb805addda9 100644
--- 
a/mode/core/src/test/java/org/apache/shardingsphere/mode/manager/ContextManagerTest.java
+++ 
b/mode/core/src/test/java/org/apache/shardingsphere/mode/manager/ContextManagerTest.java
@@ -105,7 +105,7 @@ class ContextManagerTest {
         when(result.getRuleMetaData()).thenReturn(new 
RuleMetaData(Collections.singleton(mutableDataNodeRule)));
         when(result.getSchemas()).thenReturn(new 
HashMap<>(Collections.singletonMap("foo_schema", new ShardingSphereSchema())));
         StorageUnitMetaData storageUnitMetaData = 
mock(StorageUnitMetaData.class, RETURNS_DEEP_STUBS);
-        
when(storageUnitMetaData.getStorageUnit().getStorageType()).thenReturn(TypedSPILoader.getService(DatabaseType.class,
 "FIXTURE"));
+        
when(storageUnitMetaData.getStorageType()).thenReturn(TypedSPILoader.getService(DatabaseType.class,
 "FIXTURE"));
         
when(result.getResourceMetaData().getStorageUnitMetaDataMap()).thenReturn(Collections.singletonMap("foo_ds",
 storageUnitMetaData));
         DataSourcePoolProperties dataSourcePoolProps = 
mock(DataSourcePoolProperties.class, RETURNS_DEEP_STUBS);
         
when(dataSourcePoolProps.getConnectionPropertySynonyms().getStandardProperties()).thenReturn(Collections.emptyMap());
diff --git 
a/proxy/backend/core/src/main/java/org/apache/shardingsphere/proxy/backend/connector/jdbc/datasource/JDBCBackendDataSource.java
 
b/proxy/backend/core/src/main/java/org/apache/shardingsphere/proxy/backend/connector/jdbc/datasource/JDBCBackendDataSource.java
index f546de3c60c..b7e63647894 100644
--- 
a/proxy/backend/core/src/main/java/org/apache/shardingsphere/proxy/backend/connector/jdbc/datasource/JDBCBackendDataSource.java
+++ 
b/proxy/backend/core/src/main/java/org/apache/shardingsphere/proxy/backend/connector/jdbc/datasource/JDBCBackendDataSource.java
@@ -69,7 +69,7 @@ public final class JDBCBackendDataSource implements 
BackendDataSource {
     public List<Connection> getConnections(final String databaseName, final 
String dataSourceName,
                                            final int connectionSize, final 
ConnectionMode connectionMode, final TransactionType transactionType) throws 
SQLException {
         DataSource dataSource = 
ProxyContext.getInstance().getContextManager().getMetaDataContexts().getMetaData()
-                
.getDatabase(databaseName).getResourceMetaData().getStorageUnitMetaDataMap().get(dataSourceName).getStorageUnit().getDataSource();
+                
.getDatabase(databaseName).getResourceMetaData().getStorageUnitMetaDataMap().get(dataSourceName).getDataSource();
         if (dataSourceName.contains(".")) {
             String dataSourceStr = dataSourceName.split("\\.")[0];
             if 
(GlobalDataSourceRegistry.getInstance().getCachedDataSources().containsKey(dataSourceStr))
 {
diff --git 
a/proxy/backend/core/src/main/java/org/apache/shardingsphere/proxy/backend/handler/admin/executor/AbstractDatabaseMetaDataExecutor.java
 
b/proxy/backend/core/src/main/java/org/apache/shardingsphere/proxy/backend/handler/admin/executor/AbstractDatabaseMetaDataExecutor.java
index cc349503af5..b7f2e16228b 100644
--- 
a/proxy/backend/core/src/main/java/org/apache/shardingsphere/proxy/backend/handler/admin/executor/AbstractDatabaseMetaDataExecutor.java
+++ 
b/proxy/backend/core/src/main/java/org/apache/shardingsphere/proxy/backend/handler/admin/executor/AbstractDatabaseMetaDataExecutor.java
@@ -165,7 +165,7 @@ public abstract class AbstractDatabaseMetaDataExecutor 
implements DatabaseAdminQ
                 return;
             }
             try (
-                    Connection connection = 
storageUnitMetaData.get().getStorageUnit().getDataSource().getConnection();
+                    Connection connection = 
storageUnitMetaData.get().getDataSource().getConnection();
                     PreparedStatement preparedStatement = 
connection.prepareStatement(sql)) {
                 for (int i = 0; i < parameters.size(); i++) {
                     preparedStatement.setObject(i + 1, parameters.get(i));
diff --git 
a/proxy/backend/core/src/main/java/org/apache/shardingsphere/proxy/backend/handler/distsql/ral/queryable/ExportStorageNodesExecutor.java
 
b/proxy/backend/core/src/main/java/org/apache/shardingsphere/proxy/backend/handler/distsql/ral/queryable/ExportStorageNodesExecutor.java
index f9175fb8ac0..0f9d8fc0a1c 100644
--- 
a/proxy/backend/core/src/main/java/org/apache/shardingsphere/proxy/backend/handler/distsql/ral/queryable/ExportStorageNodesExecutor.java
+++ 
b/proxy/backend/core/src/main/java/org/apache/shardingsphere/proxy/backend/handler/distsql/ral/queryable/ExportStorageNodesExecutor.java
@@ -93,7 +93,7 @@ public final class ExportStorageNodesExecutor implements 
MetaDataRequiredQueryab
             if (storageNodes.containsKey(databaseInstanceIp)) {
                 continue;
             }
-            Map<String, Object> standardProps = 
DataSourcePoolPropertiesCreator.create(entry.getValue().getStorageUnit().getDataSource()).getConnectionPropertySynonyms().getStandardProperties();
+            Map<String, Object> standardProps = 
DataSourcePoolPropertiesCreator.create(entry.getValue().getDataSource()).getConnectionPropertySynonyms().getStandardProperties();
             ExportedStorageNode exportedStorageNode = new 
ExportedStorageNode(connectionProps.getHostname(), 
String.valueOf(connectionProps.getPort()),
                     String.valueOf(standardProps.get("username")), 
String.valueOf(standardProps.get("password")), connectionProps.getCatalog());
             storageNodes.put(databaseInstanceIp, exportedStorageNode);
diff --git 
a/proxy/backend/core/src/main/java/org/apache/shardingsphere/proxy/backend/handler/distsql/rdl/rule/NewRuleDefinitionBackendHandler.java
 
b/proxy/backend/core/src/main/java/org/apache/shardingsphere/proxy/backend/handler/distsql/rdl/rule/NewRuleDefinitionBackendHandler.java
index a414e435f57..4779ff9e64e 100644
--- 
a/proxy/backend/core/src/main/java/org/apache/shardingsphere/proxy/backend/handler/distsql/rdl/rule/NewRuleDefinitionBackendHandler.java
+++ 
b/proxy/backend/core/src/main/java/org/apache/shardingsphere/proxy/backend/handler/distsql/rdl/rule/NewRuleDefinitionBackendHandler.java
@@ -134,7 +134,7 @@ public final class NewRuleDefinitionBackendHandler<T 
extends RuleDefinitionState
         Optional<RuleConfigurationDecorator> decorator = 
TypedSPILoader.findService(RuleConfigurationDecorator.class, 
ruleConfig.getClass());
         return decorator.map(optional -> optional.decorate(database.getName(),
                 
database.getResourceMetaData().getStorageUnitMetaDataMap().entrySet().stream()
-                        .collect(Collectors.toMap(Entry::getKey, entry -> 
entry.getValue().getStorageUnit().getDataSource(), (oldValue, currentValue) -> 
oldValue, LinkedHashMap::new)),
+                        .collect(Collectors.toMap(Entry::getKey, entry -> 
entry.getValue().getDataSource(), (oldValue, currentValue) -> oldValue, 
LinkedHashMap::new)),
                 database.getRuleMetaData().getRules(), 
ruleConfig)).orElse(ruleConfig);
     }
     
diff --git 
a/proxy/backend/core/src/main/java/org/apache/shardingsphere/proxy/backend/handler/distsql/rdl/rule/RuleDefinitionBackendHandler.java
 
b/proxy/backend/core/src/main/java/org/apache/shardingsphere/proxy/backend/handler/distsql/rdl/rule/RuleDefinitionBackendHandler.java
index a2f4d802bfa..01d091d647d 100644
--- 
a/proxy/backend/core/src/main/java/org/apache/shardingsphere/proxy/backend/handler/distsql/rdl/rule/RuleDefinitionBackendHandler.java
+++ 
b/proxy/backend/core/src/main/java/org/apache/shardingsphere/proxy/backend/handler/distsql/rdl/rule/RuleDefinitionBackendHandler.java
@@ -106,7 +106,7 @@ public final class RuleDefinitionBackendHandler<T extends 
RuleDefinitionStatemen
         Optional<RuleConfigurationDecorator> decorator = 
TypedSPILoader.findService(RuleConfigurationDecorator.class, 
ruleConfig.getClass());
         return decorator.map(optional -> optional.decorate(database.getName(),
                 
database.getResourceMetaData().getStorageUnitMetaDataMap().entrySet().stream()
-                        .collect(Collectors.toMap(Entry::getKey, entry -> 
entry.getValue().getStorageUnit().getDataSource(), (oldValue, currentValue) -> 
oldValue, LinkedHashMap::new)),
+                        .collect(Collectors.toMap(Entry::getKey, entry -> 
entry.getValue().getDataSource(), (oldValue, currentValue) -> oldValue, 
LinkedHashMap::new)),
                 database.getRuleMetaData().getRules(), 
ruleConfig)).orElse(ruleConfig);
     }
     
diff --git 
a/proxy/backend/core/src/main/java/org/apache/shardingsphere/proxy/backend/handler/distsql/rdl/storage/unit/AlterStorageUnitBackendHandler.java
 
b/proxy/backend/core/src/main/java/org/apache/shardingsphere/proxy/backend/handler/distsql/rdl/storage/unit/AlterStorageUnitBackendHandler.java
index 318893fb365..86074f2e642 100644
--- 
a/proxy/backend/core/src/main/java/org/apache/shardingsphere/proxy/backend/handler/distsql/rdl/storage/unit/AlterStorageUnitBackendHandler.java
+++ 
b/proxy/backend/core/src/main/java/org/apache/shardingsphere/proxy/backend/handler/distsql/rdl/storage/unit/AlterStorageUnitBackendHandler.java
@@ -109,7 +109,7 @@ public final class AlterStorageUnitBackendHandler extends 
StorageUnitDefinitionB
     private void checkDatabase(final String databaseName, final 
AlterStorageUnitStatement sqlStatement) {
         Map<String, StorageUnitMetaData> metaDataMap = 
ProxyContext.getInstance().getDatabase(databaseName).getResourceMetaData().getStorageUnitMetaDataMap();
         Collection<String> invalidStorageUnitNames = 
sqlStatement.getStorageUnits().stream().collect(Collectors.toMap(DataSourceSegment::getName,
 each -> each)).entrySet().stream()
-                .filter(each -> !isIdenticalDatabase(each.getValue(), 
metaDataMap.get(each.getKey()).getStorageUnit().getDataSource())).map(Entry::getKey).collect(Collectors.toSet());
+                .filter(each -> !isIdenticalDatabase(each.getValue(), 
metaDataMap.get(each.getKey()).getDataSource())).map(Entry::getKey).collect(Collectors.toSet());
         
ShardingSpherePreconditions.checkState(invalidStorageUnitNames.isEmpty(),
                 () -> new 
InvalidStorageUnitsException(Collections.singleton(String.format("Cannot alter 
the database of %s", invalidStorageUnitNames))));
     }
diff --git 
a/proxy/backend/core/src/main/java/org/apache/shardingsphere/proxy/backend/handler/distsql/rql/storage/unit/ShowStorageUnitExecutor.java
 
b/proxy/backend/core/src/main/java/org/apache/shardingsphere/proxy/backend/handler/distsql/rql/storage/unit/ShowStorageUnitExecutor.java
index 53409753c91..922dacb16ab 100644
--- 
a/proxy/backend/core/src/main/java/org/apache/shardingsphere/proxy/backend/handler/distsql/rql/storage/unit/ShowStorageUnitExecutor.java
+++ 
b/proxy/backend/core/src/main/java/org/apache/shardingsphere/proxy/backend/handler/distsql/rql/storage/unit/ShowStorageUnitExecutor.java
@@ -92,7 +92,7 @@ public final class ShowStorageUnitExecutor implements 
RQLExecutor<ShowStorageUni
     private Map<String, DataSourcePoolProperties> 
getDataSourcePoolPropertiesMap(final ShardingSphereDatabase database, final 
ShowStorageUnitsStatement sqlStatement) {
         Map<String, DataSourcePoolProperties> result = new 
LinkedHashMap<>(database.getResourceMetaData().getStorageUnitMetaDataMap().size(),
 1F);
         Map<String, DataSourcePoolProperties> propsMap = 
database.getResourceMetaData().getStorageUnitMetaDataMap().entrySet().stream()
-                .collect(Collectors.toMap(Entry::getKey, entry -> 
entry.getValue().getStorageUnit().getDataSourcePoolProperties(), (oldValue, 
currentValue) -> currentValue, LinkedHashMap::new));
+                .collect(Collectors.toMap(Entry::getKey, entry -> 
entry.getValue().getDataSourcePoolProperties(), (oldValue, currentValue) -> 
currentValue, LinkedHashMap::new));
         Map<String, StorageUnitMetaData> metaDataMap = 
database.getResourceMetaData().getStorageUnitMetaDataMap();
         Optional<Integer> usageCount = sqlStatement.getUsageCount();
         if (usageCount.isPresent()) {
@@ -102,13 +102,13 @@ public final class ShowStorageUnitExecutor implements 
RQLExecutor<ShowStorageUni
                 Integer currentUsageCount = 
inUsedStorageUnits.containsKey(entry.getKey()) ? 
inUsedStorageUnits.get(entry.getKey()).size() : 0;
                 if (usageCount.get().equals(currentUsageCount)) {
                     result.put(entry.getKey(), getDataSourcePoolProperties(
-                            propsMap, entry.getKey(), 
metaDataMap.get(entry.getKey()).getStorageUnit().getStorageType(), 
entry.getValue().getStorageUnit().getDataSource()));
+                            propsMap, entry.getKey(), 
metaDataMap.get(entry.getKey()).getStorageType(), 
entry.getValue().getDataSource()));
                 }
             }
         } else {
             for (Entry<String, StorageUnitMetaData> entry : 
metaDataMap.entrySet()) {
                 result.put(entry.getKey(),
-                        getDataSourcePoolProperties(propsMap, entry.getKey(), 
metaDataMap.get(entry.getKey()).getStorageUnit().getStorageType(), 
entry.getValue().getStorageUnit().getDataSource()));
+                        getDataSourcePoolProperties(propsMap, entry.getKey(), 
metaDataMap.get(entry.getKey()).getStorageType(), 
entry.getValue().getDataSource()));
             }
         }
         return result;
diff --git 
a/proxy/backend/core/src/main/java/org/apache/shardingsphere/proxy/backend/util/ExportUtils.java
 
b/proxy/backend/core/src/main/java/org/apache/shardingsphere/proxy/backend/util/ExportUtils.java
index 0cc5b0c2c55..c224c907b45 100644
--- 
a/proxy/backend/core/src/main/java/org/apache/shardingsphere/proxy/backend/util/ExportUtils.java
+++ 
b/proxy/backend/core/src/main/java/org/apache/shardingsphere/proxy/backend/util/ExportUtils.java
@@ -89,7 +89,7 @@ public final class ExportUtils {
         }
         stringBuilder.append("dataSources:").append(System.lineSeparator());
         for (Entry<String, StorageUnitMetaData> entry : 
database.getResourceMetaData().getStorageUnitMetaDataMap().entrySet()) {
-            appendDataSourceConfiguration(entry.getKey(), 
entry.getValue().getStorageUnit().getDataSourcePoolProperties(), stringBuilder);
+            appendDataSourceConfiguration(entry.getKey(), 
entry.getValue().getDataSourcePoolProperties(), stringBuilder);
         }
     }
     
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 a8040701cac..89a221da614 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
@@ -286,7 +286,7 @@ public final class YamlDatabaseConfigurationImportExecutor {
         allRuleConfigs.add(broadcastRuleConfig);
         database.getRuleMetaData().getRules().add(new 
BroadcastRule(broadcastRuleConfig, database.getName(),
                 
database.getResourceMetaData().getStorageUnitMetaDataMap().entrySet().stream()
-                        .collect(Collectors.toMap(Entry::getKey, entry -> 
entry.getValue().getStorageUnit().getDataSource(), (oldValue, currentValue) -> 
oldValue, LinkedHashMap::new))));
+                        .collect(Collectors.toMap(Entry::getKey, entry -> 
entry.getValue().getDataSource(), (oldValue, currentValue) -> oldValue, 
LinkedHashMap::new))));
     }
     
     private void addSingleRuleConfiguration(final SingleRuleConfiguration 
singleRuleConfig, final Collection<RuleConfiguration> allRuleConfigs, final 
ShardingSphereDatabase database) {
@@ -294,7 +294,7 @@ public final class YamlDatabaseConfigurationImportExecutor {
         database.getRuleMetaData().getRules().add(
                 new SingleRule(singleRuleConfig, database.getName(),
                         
database.getResourceMetaData().getStorageUnitMetaDataMap().entrySet().stream()
-                                .collect(Collectors.toMap(Entry::getKey, entry 
-> entry.getValue().getStorageUnit().getDataSource(), (oldValue, currentValue) 
-> oldValue, LinkedHashMap::new)),
+                                .collect(Collectors.toMap(Entry::getKey, entry 
-> entry.getValue().getDataSource(), (oldValue, currentValue) -> oldValue, 
LinkedHashMap::new)),
                         database.getRuleMetaData().getRules()));
     }
     
diff --git 
a/proxy/backend/core/src/test/java/org/apache/shardingsphere/proxy/backend/connector/jdbc/datasource/JDBCBackendDataSourceTest.java
 
b/proxy/backend/core/src/test/java/org/apache/shardingsphere/proxy/backend/connector/jdbc/datasource/JDBCBackendDataSourceTest.java
index 087876e3c92..1ed6d8b10a8 100644
--- 
a/proxy/backend/core/src/test/java/org/apache/shardingsphere/proxy/backend/connector/jdbc/datasource/JDBCBackendDataSourceTest.java
+++ 
b/proxy/backend/core/src/test/java/org/apache/shardingsphere/proxy/backend/connector/jdbc/datasource/JDBCBackendDataSourceTest.java
@@ -96,7 +96,7 @@ class JDBCBackendDataSourceTest {
         ShardingSphereDatabase database = mock(ShardingSphereDatabase.class, 
RETURNS_DEEP_STUBS);
         when(database.getProtocolType()).thenReturn(databaseType);
         for (Entry<String, DataSource> entry : mockDataSources(2).entrySet()) {
-            
when(database.getResourceMetaData().getStorageUnitMetaDataMap().get(entry.getKey()).getStorageUnit().getDataSource()).thenReturn(entry.getValue());
+            
when(database.getResourceMetaData().getStorageUnitMetaDataMap().get(entry.getKey()).getDataSource()).thenReturn(entry.getValue());
         }
         return Collections.singletonMap("schema", database);
     }
diff --git 
a/proxy/backend/core/src/test/java/org/apache/shardingsphere/proxy/backend/handler/distsql/ral/queryable/ExportDatabaseConfigurationExecutorTest.java
 
b/proxy/backend/core/src/test/java/org/apache/shardingsphere/proxy/backend/handler/distsql/ral/queryable/ExportDatabaseConfigurationExecutorTest.java
index 5339b4abf81..b97d160c029 100644
--- 
a/proxy/backend/core/src/test/java/org/apache/shardingsphere/proxy/backend/handler/distsql/ral/queryable/ExportDatabaseConfigurationExecutorTest.java
+++ 
b/proxy/backend/core/src/test/java/org/apache/shardingsphere/proxy/backend/handler/distsql/ral/queryable/ExportDatabaseConfigurationExecutorTest.java
@@ -20,12 +20,11 @@ package 
org.apache.shardingsphere.proxy.backend.handler.distsql.ral.queryable;
 import lombok.SneakyThrows;
 import 
org.apache.shardingsphere.distsql.parser.statement.ral.queryable.ExportDatabaseConfigurationStatement;
 import org.apache.shardingsphere.infra.config.algorithm.AlgorithmConfiguration;
-import 
org.apache.shardingsphere.infra.datasource.pool.props.domain.DataSourcePoolProperties;
 import 
org.apache.shardingsphere.infra.datasource.pool.props.creator.DataSourcePoolPropertiesCreator;
+import 
org.apache.shardingsphere.infra.datasource.pool.props.domain.DataSourcePoolProperties;
 import 
org.apache.shardingsphere.infra.merge.result.impl.local.LocalDataQueryResultRow;
 import 
org.apache.shardingsphere.infra.metadata.database.ShardingSphereDatabase;
 import 
org.apache.shardingsphere.infra.metadata.database.resource.unit.StorageUnitMetaData;
-import 
org.apache.shardingsphere.infra.metadata.database.resource.unit.StorageUnit;
 import org.apache.shardingsphere.sharding.api.config.ShardingRuleConfiguration;
 import 
org.apache.shardingsphere.sharding.api.config.rule.ShardingTableRuleConfiguration;
 import 
org.apache.shardingsphere.sharding.api.config.strategy.keygen.KeyGenerateStrategyConfiguration;
@@ -85,11 +84,8 @@ class ExportDatabaseConfigurationExecutorTest {
                 .collect(Collectors.toMap(Entry::getKey, entry -> 
DataSourcePoolPropertiesCreator.create(entry.getValue()), (oldValue, 
currentValue) -> oldValue, LinkedHashMap::new));
         Map<String, StorageUnitMetaData> result = new LinkedHashMap<>();
         for (Entry<String, DataSourcePoolProperties> entry : 
propsMap.entrySet()) {
-            StorageUnit storageUnit = mock(StorageUnit.class);
-            
when(storageUnit.getDataSourcePoolProperties()).thenReturn(entry.getValue());
             StorageUnitMetaData storageUnitMetaData = 
mock(StorageUnitMetaData.class, RETURNS_DEEP_STUBS);
-            when(storageUnitMetaData.getStorageUnit()).thenReturn(storageUnit);
-            
when(storageUnitMetaData.getStorageUnit().getDataSourcePoolProperties()).thenReturn(entry.getValue());
+            
when(storageUnitMetaData.getDataSourcePoolProperties()).thenReturn(entry.getValue());
             result.put(entry.getKey(), storageUnitMetaData);
         }
         return result;
diff --git 
a/proxy/backend/core/src/test/java/org/apache/shardingsphere/proxy/backend/handler/distsql/ral/queryable/ExportMetaDataExecutorTest.java
 
b/proxy/backend/core/src/test/java/org/apache/shardingsphere/proxy/backend/handler/distsql/ral/queryable/ExportMetaDataExecutorTest.java
index 88916373114..f3b1d8ad59c 100644
--- 
a/proxy/backend/core/src/test/java/org/apache/shardingsphere/proxy/backend/handler/distsql/ral/queryable/ExportMetaDataExecutorTest.java
+++ 
b/proxy/backend/core/src/test/java/org/apache/shardingsphere/proxy/backend/handler/distsql/ral/queryable/ExportMetaDataExecutorTest.java
@@ -153,7 +153,7 @@ class ExportMetaDataExecutorTest {
         Map<String, StorageUnitMetaData> result = new LinkedHashMap<>();
         for (Entry<String, DataSourcePoolProperties> entry : 
propsMap.entrySet()) {
             StorageUnitMetaData storageUnitMetaData = 
mock(StorageUnitMetaData.class, RETURNS_DEEP_STUBS);
-            
when(storageUnitMetaData.getStorageUnit().getDataSourcePoolProperties()).thenReturn(entry.getValue());
+            
when(storageUnitMetaData.getDataSourcePoolProperties()).thenReturn(entry.getValue());
             result.put(entry.getKey(), storageUnitMetaData);
         }
         return result;
diff --git 
a/proxy/backend/core/src/test/java/org/apache/shardingsphere/proxy/backend/handler/distsql/ral/queryable/ExportStorageNodesExecutorTest.java
 
b/proxy/backend/core/src/test/java/org/apache/shardingsphere/proxy/backend/handler/distsql/ral/queryable/ExportStorageNodesExecutorTest.java
index ecd1d2c03f4..d9eb406a534 100644
--- 
a/proxy/backend/core/src/test/java/org/apache/shardingsphere/proxy/backend/handler/distsql/ral/queryable/ExportStorageNodesExecutorTest.java
+++ 
b/proxy/backend/core/src/test/java/org/apache/shardingsphere/proxy/backend/handler/distsql/ral/queryable/ExportStorageNodesExecutorTest.java
@@ -29,7 +29,6 @@ import 
org.apache.shardingsphere.infra.merge.result.impl.local.LocalDataQueryRes
 import org.apache.shardingsphere.infra.metadata.ShardingSphereMetaData;
 import 
org.apache.shardingsphere.infra.metadata.database.ShardingSphereDatabase;
 import 
org.apache.shardingsphere.infra.metadata.database.resource.ResourceMetaData;
-import 
org.apache.shardingsphere.infra.metadata.database.resource.unit.StorageUnit;
 import 
org.apache.shardingsphere.infra.metadata.database.resource.unit.StorageUnitMetaData;
 import org.apache.shardingsphere.infra.metadata.database.rule.RuleMetaData;
 import org.apache.shardingsphere.infra.spi.type.typed.TypedSPILoader;
@@ -55,6 +54,7 @@ import org.mockito.Mock;
 import org.mockito.junit.jupiter.MockitoSettings;
 import org.mockito.quality.Strictness;
 
+import javax.sql.DataSource;
 import java.io.BufferedReader;
 import java.io.FileReader;
 import java.io.IOException;
@@ -166,26 +166,22 @@ class ExportStorageNodesExecutorTest {
     
     private Map<String, StorageUnitMetaData> createStorageUnitMetaDataMap() {
         StorageUnitMetaData storageUnitMetaData1 = 
mock(StorageUnitMetaData.class);
-        StorageUnit storageUnit1 = createStorageUnit("ds_0");
-        when(storageUnitMetaData1.getStorageUnit()).thenReturn(storageUnit1);
+        
when(storageUnitMetaData1.getDataSource()).thenReturn(createDataSource("ds_0"));
         StorageUnitMetaData storageUnitMetaData2 = 
mock(StorageUnitMetaData.class);
-        StorageUnit storageUnit2 = createStorageUnit("ds_1");
-        when(storageUnitMetaData2.getStorageUnit()).thenReturn(storageUnit2);
+        
when(storageUnitMetaData2.getDataSource()).thenReturn(createDataSource("ds_2"));
         Map<String, StorageUnitMetaData> result = new LinkedHashMap<>(2, 1F);
         result.put("ds_0", storageUnitMetaData1);
         result.put("ds_1", storageUnitMetaData2);
         return result;
     }
     
-    private StorageUnit createStorageUnit(final String name) {
-        MockedDataSource dataSource = new MockedDataSource();
-        dataSource.setUrl(String.format("jdbc:mock://127.0.0.1/%s", name));
-        dataSource.setUsername("root");
-        dataSource.setPassword("test");
-        dataSource.setMaxPoolSize(50);
-        dataSource.setMinPoolSize(1);
-        StorageUnit result = mock(StorageUnit.class);
-        when(result.getDataSource()).thenReturn(dataSource);
+    private DataSource createDataSource(final String name) {
+        MockedDataSource result = new MockedDataSource();
+        result.setUrl(String.format("jdbc:mock://127.0.0.1/%s", name));
+        result.setUsername("root");
+        result.setPassword("test");
+        result.setMaxPoolSize(50);
+        result.setMinPoolSize(1);
         return result;
     }
     
diff --git 
a/proxy/backend/core/src/test/java/org/apache/shardingsphere/proxy/backend/handler/distsql/rdl/storage/unit/AlterStorageUnitBackendHandlerTest.java
 
b/proxy/backend/core/src/test/java/org/apache/shardingsphere/proxy/backend/handler/distsql/rdl/storage/unit/AlterStorageUnitBackendHandlerTest.java
index 78171d0dcec..7098c9c63a7 100644
--- 
a/proxy/backend/core/src/test/java/org/apache/shardingsphere/proxy/backend/handler/distsql/rdl/storage/unit/AlterStorageUnitBackendHandlerTest.java
+++ 
b/proxy/backend/core/src/test/java/org/apache/shardingsphere/proxy/backend/handler/distsql/rdl/storage/unit/AlterStorageUnitBackendHandlerTest.java
@@ -81,7 +81,7 @@ class AlterStorageUnitBackendHandlerTest {
         
when(ProxyContext.getInstance().getDatabase("foo_db")).thenReturn(database);
         ResourceMetaData resourceMetaData = mock(ResourceMetaData.class, 
RETURNS_DEEP_STUBS);
         StorageUnitMetaData storageUnitMetaData = 
mock(StorageUnitMetaData.class, RETURNS_DEEP_STUBS);
-        
when(storageUnitMetaData.getStorageUnit().getDataSource()).thenReturn(mockHikariDataSource("ds_0"));
+        
when(storageUnitMetaData.getDataSource()).thenReturn(mockHikariDataSource("ds_0"));
         
when(resourceMetaData.getStorageUnitMetaDataMap()).thenReturn(Collections.singletonMap("ds_0",
 storageUnitMetaData));
         when(database.getResourceMetaData()).thenReturn(resourceMetaData);
         assertThat(handler.execute("foo_db", 
createAlterStorageUnitStatement("ds_0")), 
instanceOf(UpdateResponseHeader.class));
@@ -108,7 +108,7 @@ class AlterStorageUnitBackendHandlerTest {
         
when(ProxyContext.getInstance().getDatabase("foo_db")).thenReturn(database);
         ResourceMetaData resourceMetaData = mock(ResourceMetaData.class, 
RETURNS_DEEP_STUBS);
         StorageUnitMetaData storageUnitMetaData = 
mock(StorageUnitMetaData.class, RETURNS_DEEP_STUBS);
-        
when(storageUnitMetaData.getStorageUnit().getDataSource()).thenReturn(mockHikariDataSource("ds_1"));
+        
when(storageUnitMetaData.getDataSource()).thenReturn(mockHikariDataSource("ds_1"));
         
when(resourceMetaData.getStorageUnitMetaDataMap()).thenReturn(Collections.singletonMap("ds_0",
 storageUnitMetaData));
         when(database.getResourceMetaData()).thenReturn(resourceMetaData);
         assertThrows(InvalidStorageUnitsException.class, () -> 
handler.execute("foo_db", createAlterStorageUnitStatement("ds_0")));
diff --git 
a/proxy/backend/core/src/test/java/org/apache/shardingsphere/proxy/backend/handler/distsql/rdl/storage/unit/UnregisterStorageUnitBackendHandlerTest.java
 
b/proxy/backend/core/src/test/java/org/apache/shardingsphere/proxy/backend/handler/distsql/rdl/storage/unit/UnregisterStorageUnitBackendHandlerTest.java
index 8ba32c9e5bb..29e9759ae1a 100644
--- 
a/proxy/backend/core/src/test/java/org/apache/shardingsphere/proxy/backend/handler/distsql/rdl/storage/unit/UnregisterStorageUnitBackendHandlerTest.java
+++ 
b/proxy/backend/core/src/test/java/org/apache/shardingsphere/proxy/backend/handler/distsql/rdl/storage/unit/UnregisterStorageUnitBackendHandlerTest.java
@@ -108,7 +108,7 @@ class UnregisterStorageUnitBackendHandlerTest {
     @Test
     void assertExecute() throws SQLException {
         StorageUnitMetaData storageUnitMetaData = 
mock(StorageUnitMetaData.class, RETURNS_DEEP_STUBS);
-        
when(storageUnitMetaData.getStorageUnit().getDataSource()).thenReturn(new 
MockedDataSource());
+        when(storageUnitMetaData.getDataSource()).thenReturn(new 
MockedDataSource());
         
when(resourceMetaData.getStorageUnitMetaDataMap()).thenReturn(Collections.singletonMap("foo_ds",
 storageUnitMetaData));
         when(database.getResourceMetaData()).thenReturn(resourceMetaData);
         
when(contextManager.getMetaDataContexts().getMetaData().getDatabase("foo_db")).thenReturn(database);
@@ -128,7 +128,7 @@ class UnregisterStorageUnitBackendHandlerTest {
         when(database.getRuleMetaData()).thenReturn(new 
RuleMetaData(Collections.singleton(shadowRule)));
         
when(shadowRule.getDataSourceMapper()).thenReturn(Collections.singletonMap("", 
Collections.singleton("foo_ds")));
         StorageUnitMetaData storageUnitMetaData = 
mock(StorageUnitMetaData.class, RETURNS_DEEP_STUBS);
-        
when(storageUnitMetaData.getStorageUnit().getDataSource()).thenReturn(new 
MockedDataSource());
+        when(storageUnitMetaData.getDataSource()).thenReturn(new 
MockedDataSource());
         
when(resourceMetaData.getStorageUnitMetaDataMap()).thenReturn(Collections.singletonMap("foo_ds",
 storageUnitMetaData));
         when(database.getResourceMetaData()).thenReturn(resourceMetaData);
         
when(contextManager.getMetaDataContexts().getMetaData().getDatabase("foo_db")).thenReturn(database);
@@ -143,7 +143,7 @@ class UnregisterStorageUnitBackendHandlerTest {
         when(dataNode.getDataSourceName()).thenReturn("foo_ds");
         
when(singleRule.getAllDataNodes()).thenReturn(Collections.singletonMap("", 
Collections.singleton(dataNode)));
         StorageUnitMetaData storageUnitMetaData = 
mock(StorageUnitMetaData.class, RETURNS_DEEP_STUBS);
-        
when(storageUnitMetaData.getStorageUnit().getDataSource()).thenReturn(new 
MockedDataSource());
+        when(storageUnitMetaData.getDataSource()).thenReturn(new 
MockedDataSource());
         
when(resourceMetaData.getStorageUnitMetaDataMap()).thenReturn(Collections.singletonMap("foo_ds",
 storageUnitMetaData));
         when(database.getResourceMetaData()).thenReturn(resourceMetaData);
         
when(contextManager.getMetaDataContexts().getMetaData().getDatabase("foo_db")).thenReturn(database);
@@ -157,7 +157,7 @@ class UnregisterStorageUnitBackendHandlerTest {
         when(dataNode.getDataSourceName()).thenReturn("foo_ds");
         
when(singleRule.getAllDataNodes()).thenReturn(Collections.singletonMap("", 
Collections.singleton(dataNode)));
         StorageUnitMetaData storageUnitMetaData = 
mock(StorageUnitMetaData.class, RETURNS_DEEP_STUBS);
-        
when(storageUnitMetaData.getStorageUnit().getDataSource()).thenReturn(new 
MockedDataSource());
+        when(storageUnitMetaData.getDataSource()).thenReturn(new 
MockedDataSource());
         
when(resourceMetaData.getStorageUnitMetaDataMap()).thenReturn(Collections.singletonMap("foo_ds",
 storageUnitMetaData));
         when(database.getResourceMetaData()).thenReturn(resourceMetaData);
         
when(contextManager.getMetaDataContexts().getMetaData().getDatabase("foo_db")).thenReturn(database);
diff --git 
a/proxy/bootstrap/src/main/java/org/apache/shardingsphere/proxy/version/ShardingSphereProxyVersion.java
 
b/proxy/bootstrap/src/main/java/org/apache/shardingsphere/proxy/version/ShardingSphereProxyVersion.java
index 8a46e589bf8..5e1b27f6cf8 100644
--- 
a/proxy/bootstrap/src/main/java/org/apache/shardingsphere/proxy/version/ShardingSphereProxyVersion.java
+++ 
b/proxy/bootstrap/src/main/java/org/apache/shardingsphere/proxy/version/ShardingSphereProxyVersion.java
@@ -77,9 +77,9 @@ public final class ShardingSphereProxyVersion {
     
     private static Optional<DataSource> findDataSourceByProtocolType(final 
String databaseName, final ResourceMetaData resourceMetaData, final 
DatabaseType protocolType) {
         Optional<String> dataSourceName = 
resourceMetaData.getStorageUnitMetaDataMap().entrySet()
-                .stream().filter(entry -> 
entry.getValue().getStorageUnit().getStorageType().equals(protocolType)).map(Entry::getKey).findFirst();
+                .stream().filter(entry -> 
entry.getValue().getStorageType().equals(protocolType)).map(Entry::getKey).findFirst();
         Map<String, DataSource> dataSources = 
resourceMetaData.getStorageUnitMetaDataMap().entrySet().stream()
-                .collect(Collectors.toMap(Entry::getKey, entry -> 
entry.getValue().getStorageUnit().getDataSource(), (oldValue, currentValue) -> 
oldValue, LinkedHashMap::new));
+                .collect(Collectors.toMap(Entry::getKey, entry -> 
entry.getValue().getDataSource(), (oldValue, currentValue) -> oldValue, 
LinkedHashMap::new));
         return dataSourceName.flatMap(optional -> 
Optional.ofNullable(DataSourceStateManager.getInstance().getEnabledDataSources(databaseName,
 dataSources).get(optional)));
     }
 }
diff --git 
a/proxy/frontend/core/src/main/java/org/apache/shardingsphere/proxy/frontend/protocol/FrontDatabaseProtocolTypeFactory.java
 
b/proxy/frontend/core/src/main/java/org/apache/shardingsphere/proxy/frontend/protocol/FrontDatabaseProtocolTypeFactory.java
index 66cd6efc411..8f6f7ce4875 100644
--- 
a/proxy/frontend/core/src/main/java/org/apache/shardingsphere/proxy/frontend/protocol/FrontDatabaseProtocolTypeFactory.java
+++ 
b/proxy/frontend/core/src/main/java/org/apache/shardingsphere/proxy/frontend/protocol/FrontDatabaseProtocolTypeFactory.java
@@ -52,7 +52,7 @@ public final class FrontDatabaseProtocolTypeFactory {
         }
         Optional<ShardingSphereDatabase> database = 
metaDataContexts.getMetaData().getDatabases().values().stream().filter(ShardingSphereDatabase::containsDataSource).findFirst();
         return database.isPresent()
-                ? 
database.get().getResourceMetaData().getStorageUnitMetaDataMap().values().iterator().next().getStorageUnit().getStorageType()
+                ? 
database.get().getResourceMetaData().getStorageUnitMetaDataMap().values().iterator().next().getStorageType()
                 : TypedSPILoader.getService(DatabaseType.class, 
DEFAULT_FRONTEND_DATABASE_PROTOCOL_TYPE);
     }
     
diff --git 
a/proxy/frontend/type/mysql/src/test/java/org/apache/shardingsphere/proxy/frontend/mysql/command/query/text/query/MySQLMultiStatementsHandlerTest.java
 
b/proxy/frontend/type/mysql/src/test/java/org/apache/shardingsphere/proxy/frontend/mysql/command/query/text/query/MySQLMultiStatementsHandlerTest.java
index 9d8ec06a38c..c39fc52cc2e 100644
--- 
a/proxy/frontend/type/mysql/src/test/java/org/apache/shardingsphere/proxy/frontend/mysql/command/query/text/query/MySQLMultiStatementsHandlerTest.java
+++ 
b/proxy/frontend/type/mysql/src/test/java/org/apache/shardingsphere/proxy/frontend/mysql/command/query/text/query/MySQLMultiStatementsHandlerTest.java
@@ -106,7 +106,7 @@ class MySQLMultiStatementsHandlerTest {
         ContextManager result = mock(ContextManager.class, RETURNS_DEEP_STUBS);
         
when(result.getMetaDataContexts().getMetaData().getDatabase("foo_db").getResourceMetaData().getAllInstanceDataSourceNames()).thenReturn(Collections.singletonList("foo_ds"));
         StorageUnitMetaData storageUnitMetaData = 
mock(StorageUnitMetaData.class, RETURNS_DEEP_STUBS);
-        
when(storageUnitMetaData.getStorageUnit().getStorageType()).thenReturn(TypedSPILoader.getService(DatabaseType.class,
 "FIXTURE"));
+        
when(storageUnitMetaData.getStorageType()).thenReturn(TypedSPILoader.getService(DatabaseType.class,
 "FIXTURE"));
         
when(result.getMetaDataContexts().getMetaData().getDatabase("foo_db").getResourceMetaData().getStorageUnitMetaDataMap())
                 .thenReturn(Collections.singletonMap("foo_ds", 
storageUnitMetaData));
         
when(result.getMetaDataContexts().getMetaData().getDatabase("foo_db").getProtocolType()).thenReturn(TypedSPILoader.getService(DatabaseType.class,
 "MySQL"));
diff --git 
a/proxy/frontend/type/opengauss/src/test/java/org/apache/shardingsphere/proxy/frontend/opengauss/command/query/extended/bind/OpenGaussComBatchBindExecutorTest.java
 
b/proxy/frontend/type/opengauss/src/test/java/org/apache/shardingsphere/proxy/frontend/opengauss/command/query/extended/bind/OpenGaussComBatchBindExecutorTest.java
index 5a08f2d524d..d1f6d1bc518 100644
--- 
a/proxy/frontend/type/opengauss/src/test/java/org/apache/shardingsphere/proxy/frontend/opengauss/command/query/extended/bind/OpenGaussComBatchBindExecutorTest.java
+++ 
b/proxy/frontend/type/opengauss/src/test/java/org/apache/shardingsphere/proxy/frontend/opengauss/command/query/extended/bind/OpenGaussComBatchBindExecutorTest.java
@@ -141,7 +141,7 @@ class OpenGaussComBatchBindExecutorTest {
         ShardingSphereDatabase result = mock(ShardingSphereDatabase.class, 
RETURNS_DEEP_STUBS);
         
when(result.getResourceMetaData().getAllInstanceDataSourceNames()).thenReturn(Collections.singleton("foo_ds"));
         StorageUnitMetaData storageUnitMetaData = 
mock(StorageUnitMetaData.class, RETURNS_DEEP_STUBS);
-        
when(storageUnitMetaData.getStorageUnit().getStorageType()).thenReturn(TypedSPILoader.getService(DatabaseType.class,
 "openGauss"));
+        
when(storageUnitMetaData.getStorageType()).thenReturn(TypedSPILoader.getService(DatabaseType.class,
 "openGauss"));
         
when(result.getResourceMetaData().getStorageUnitMetaDataMap()).thenReturn(Collections.singletonMap("foo_ds",
 storageUnitMetaData));
         when(result.getRuleMetaData()).thenReturn(new 
RuleMetaData(Collections.emptyList()));
         when(result.containsSchema("public")).thenReturn(true);
diff --git 
a/proxy/frontend/type/postgresql/src/test/java/org/apache/shardingsphere/proxy/frontend/postgresql/command/query/extended/PostgreSQLAggregatedBatchedStatementsCommandExecutorTest.java
 
b/proxy/frontend/type/postgresql/src/test/java/org/apache/shardingsphere/proxy/frontend/postgresql/command/query/extended/PostgreSQLAggregatedBatchedStatementsCommandExecutorTest.java
index 56c9b39e359..cd660ca02a1 100644
--- 
a/proxy/frontend/type/postgresql/src/test/java/org/apache/shardingsphere/proxy/frontend/postgresql/command/query/extended/PostgreSQLAggregatedBatchedStatementsCommandExecutorTest.java
+++ 
b/proxy/frontend/type/postgresql/src/test/java/org/apache/shardingsphere/proxy/frontend/postgresql/command/query/extended/PostgreSQLAggregatedBatchedStatementsCommandExecutorTest.java
@@ -159,7 +159,7 @@ class 
PostgreSQLAggregatedBatchedStatementsCommandExecutorTest {
         ShardingSphereDatabase database = mock(ShardingSphereDatabase.class, 
RETURNS_DEEP_STUBS);
         
when(database.getResourceMetaData().getAllInstanceDataSourceNames()).thenReturn(Collections.singletonList("foo_ds"));
         StorageUnitMetaData storageUnitMetaData = 
mock(StorageUnitMetaData.class, RETURNS_DEEP_STUBS);
-        
when(storageUnitMetaData.getStorageUnit().getStorageType()).thenReturn(TypedSPILoader.getService(DatabaseType.class,
 "PostgreSQL"));
+        
when(storageUnitMetaData.getStorageType()).thenReturn(TypedSPILoader.getService(DatabaseType.class,
 "PostgreSQL"));
         
when(database.getResourceMetaData().getStorageUnitMetaDataMap()).thenReturn(Collections.singletonMap("foo_ds",
 storageUnitMetaData));
         when(database.getRuleMetaData()).thenReturn(new 
RuleMetaData(Collections.emptyList()));
         when(database.containsSchema("public")).thenReturn(true);
diff --git 
a/proxy/frontend/type/postgresql/src/test/java/org/apache/shardingsphere/proxy/frontend/postgresql/command/query/extended/PostgreSQLBatchedStatementsExecutorTest.java
 
b/proxy/frontend/type/postgresql/src/test/java/org/apache/shardingsphere/proxy/frontend/postgresql/command/query/extended/PostgreSQLBatchedStatementsExecutorTest.java
index f31324877e9..f5e3fd0adb9 100644
--- 
a/proxy/frontend/type/postgresql/src/test/java/org/apache/shardingsphere/proxy/frontend/postgresql/command/query/extended/PostgreSQLBatchedStatementsExecutorTest.java
+++ 
b/proxy/frontend/type/postgresql/src/test/java/org/apache/shardingsphere/proxy/frontend/postgresql/command/query/extended/PostgreSQLBatchedStatementsExecutorTest.java
@@ -134,7 +134,7 @@ class PostgreSQLBatchedStatementsExecutorTest {
         
when(result.getMetaDataContexts().getMetaData().getProps().getValue(ConfigurationPropertyKey.SQL_SHOW)).thenReturn(false);
         ShardingSphereDatabase database = mock(ShardingSphereDatabase.class, 
RETURNS_DEEP_STUBS);
         StorageUnitMetaData storageUnitMetaData = 
mock(StorageUnitMetaData.class, RETURNS_DEEP_STUBS);
-        
when(storageUnitMetaData.getStorageUnit().getStorageType()).thenReturn(TypedSPILoader.getService(DatabaseType.class,
 "PostgreSQL"));
+        
when(storageUnitMetaData.getStorageType()).thenReturn(TypedSPILoader.getService(DatabaseType.class,
 "PostgreSQL"));
         
when(database.getResourceMetaData().getStorageUnitMetaDataMap()).thenReturn(Collections.singletonMap("ds_0",
 storageUnitMetaData));
         
when(database.getResourceMetaData().getAllInstanceDataSourceNames()).thenReturn(Collections.singletonList("ds_0"));
         when(database.getRuleMetaData()).thenReturn(new 
RuleMetaData(Collections.emptyList()));
diff --git 
a/proxy/frontend/type/postgresql/src/test/java/org/apache/shardingsphere/proxy/frontend/postgresql/command/query/extended/describe/PostgreSQLComDescribeExecutorTest.java
 
b/proxy/frontend/type/postgresql/src/test/java/org/apache/shardingsphere/proxy/frontend/postgresql/command/query/extended/describe/PostgreSQLComDescribeExecutorTest.java
index 9f7a4dbaffb..5f5c5c2be0b 100644
--- 
a/proxy/frontend/type/postgresql/src/test/java/org/apache/shardingsphere/proxy/frontend/postgresql/command/query/extended/describe/PostgreSQLComDescribeExecutorTest.java
+++ 
b/proxy/frontend/type/postgresql/src/test/java/org/apache/shardingsphere/proxy/frontend/postgresql/command/query/extended/describe/PostgreSQLComDescribeExecutorTest.java
@@ -401,7 +401,7 @@ class PostgreSQLComDescribeExecutorTest {
         
when(schema.getAllColumnNames(TABLE_NAME)).thenReturn(Arrays.asList("id", "k", 
"c", "pad"));
         
when(result.getMetaDataContexts().getMetaData().getDatabase(DATABASE_NAME).getProtocolType()).thenReturn(TypedSPILoader.getService(DatabaseType.class,
 "PostgreSQL"));
         StorageUnitMetaData storageUnitMetaData = 
mock(StorageUnitMetaData.class, RETURNS_DEEP_STUBS);
-        
when(storageUnitMetaData.getStorageUnit().getStorageType()).thenReturn(TypedSPILoader.getService(DatabaseType.class,
 "PostgreSQL"));
+        
when(storageUnitMetaData.getStorageType()).thenReturn(TypedSPILoader.getService(DatabaseType.class,
 "PostgreSQL"));
         
when(result.getMetaDataContexts().getMetaData().getDatabase(DATABASE_NAME).getResourceMetaData().getStorageUnitMetaDataMap())
                 .thenReturn(Collections.singletonMap("ds_0", 
storageUnitMetaData));
         
when(result.getMetaDataContexts().getMetaData().containsDatabase(DATABASE_NAME)).thenReturn(true);
diff --git 
a/test/it/rewriter/src/test/java/org/apache/shardingsphere/test/it/rewrite/engine/SQLRewriterIT.java
 
b/test/it/rewriter/src/test/java/org/apache/shardingsphere/test/it/rewrite/engine/SQLRewriterIT.java
index d6c4193f6e0..d6ec6408ecf 100644
--- 
a/test/it/rewriter/src/test/java/org/apache/shardingsphere/test/it/rewrite/engine/SQLRewriterIT.java
+++ 
b/test/it/rewriter/src/test/java/org/apache/shardingsphere/test/it/rewrite/engine/SQLRewriterIT.java
@@ -34,7 +34,6 @@ import 
org.apache.shardingsphere.infra.metadata.ShardingSphereMetaData;
 import 
org.apache.shardingsphere.infra.metadata.database.ShardingSphereDatabase;
 import 
org.apache.shardingsphere.infra.metadata.database.resource.ResourceMetaData;
 import 
org.apache.shardingsphere.infra.metadata.database.resource.unit.StorageUnitMetaData;
-import 
org.apache.shardingsphere.infra.metadata.database.resource.unit.StorageUnit;
 import org.apache.shardingsphere.infra.metadata.database.rule.RuleMetaData;
 import 
org.apache.shardingsphere.infra.metadata.database.schema.model.ShardingSphereSchema;
 import org.apache.shardingsphere.infra.parser.sql.SQLStatementParserEngine;
@@ -174,10 +173,8 @@ public abstract class SQLRewriterIT {
     private Map<String, StorageUnitMetaData> 
createStorageUnitMetaDataMap(final DatabaseConfiguration databaseConfig, final 
DatabaseType databaseType) {
         Map<String, StorageUnitMetaData> result = new 
LinkedHashMap<>(databaseConfig.getDataSources().size(), 1F);
         for (Entry<String, DataSource> entry : 
databaseConfig.getDataSources().entrySet()) {
-            StorageUnit storageUnit = mock(StorageUnit.class);
-            when(storageUnit.getStorageType()).thenReturn(databaseType);
             StorageUnitMetaData storageUnitMetaData = 
mock(StorageUnitMetaData.class);
-            when(storageUnitMetaData.getStorageUnit()).thenReturn(storageUnit);
+            
when(storageUnitMetaData.getStorageType()).thenReturn(databaseType);
             result.put(entry.getKey(), storageUnitMetaData);
         }
         return result;

Reply via email to