You are viewing a plain text version of this content. The canonical link for it is here.
Posted to notifications@shardingsphere.apache.org by pa...@apache.org on 2022/10/24 10:29:50 UTC

[shardingsphere] branch master updated: Support heterogeneous databases for executor engine (#21715)

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

panjuan 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 20a080921f4 Support heterogeneous databases for executor engine (#21715)
20a080921f4 is described below

commit 20a080921f4adad4b0cc8cb5ddfc471abdca043f
Author: Zhengqiang Duan <du...@apache.org>
AuthorDate: Mon Oct 24 18:29:44 2022 +0800

    Support heterogeneous databases for executor engine (#21715)
    
    * Support heterogeneous databases for executor engine
    
    * format code
---
 .../driver/DriverExecutionPrepareEngine.java       | 12 +++-----
 .../prepare/driver/ExecutorStatementManager.java   |  7 +++--
 .../prepare/driver/SQLExecutionUnitBuilder.java    |  4 ++-
 .../sql/prepare/driver/jdbc/DatabaseTypeAware.java | 33 ----------------------
 .../PreparedStatementExecutionUnitBuilder.java     |  9 +++---
 .../builder/StatementExecutionUnitBuilder.java     |  9 +++---
 .../builder/PreparedQueryExecutionUnitBuilder.java |  3 +-
 .../fixture/FixtureExecutorStatementManager.java   |  6 ++--
 .../fixture/FixtureSQLExecutionUnitBuilder.java    |  3 +-
 .../statement/ShardingSpherePreparedStatement.java |  4 +--
 .../core/statement/ShardingSphereStatement.java    |  2 +-
 .../jdbc/core/statement/StatementManager.java      |  6 ++--
 .../backend/communication/ProxySQLExecutor.java    |  7 +++--
 .../communication/ReactiveProxySQLExecutor.java    |  5 ++--
 .../jdbc/JDBCDatabaseCommunicationEngine.java      |  2 +-
 .../jdbc/statement/JDBCBackendStatement.java       | 20 +++++--------
 .../communication/vertx/VertxBackendStatement.java |  6 ++--
 .../admin/DatabaseAdminQueryBackendHandler.java    |  2 +-
 .../OpenGaussSystemCatalogAdminQueryExecutor.java  |  2 +-
 .../executor/ShowShardingHintStatusExecutor.java   |  2 +-
 .../ral/queryable/ShowTableMetadataHandler.java    |  2 +-
 .../ImportDatabaseConfigurationHandler.java        |  2 +-
 .../ral/updatable/RefreshTableMetadataHandler.java |  2 +-
 .../rdl/resource/AddResourceBackendHandler.java    |  2 +-
 .../rdl/resource/AlterResourceBackendHandler.java  |  2 +-
 .../handler/distsql/rul/sql/FormatSQLHandler.java  |  2 +-
 .../distsql/rul/sql/ParseDistSQLHandler.java       |  2 +-
 .../handler/distsql/rul/sql/PreviewHandler.java    |  2 +-
 .../transaction/TransactionBackendHandler.java     | 10 +++----
 .../proxy/backend/session/ConnectionSession.java   |  6 ++--
 .../jdbc/connection/JDBCBackendConnectionTest.java |  3 +-
 ...enGaussSystemCatalogAdminQueryExecutorTest.java |  8 +++---
 .../ral/advance/ParseDistSQLHandlerTest.java       |  6 ++--
 .../resource/AddResourceBackendHandlerTest.java    |  2 +-
 .../resource/AlterResourceBackendHandlerTest.java  |  2 +-
 .../text/query/MySQLMultiStatementsHandler.java    |  3 +-
 .../query/MySQLMultiStatementsHandlerTest.java     |  3 +-
 .../bind/OpenGaussComBatchBindExecutorTest.java    |  4 ++-
 .../PostgreSQLBatchedStatementsExecutor.java       |  2 +-
 ...egatedBatchedStatementsCommandExecutorTest.java |  4 ++-
 .../PostgreSQLBatchedStatementsExecutorTest.java   |  4 ++-
 .../statement/dal/EmptyStatementTestCase.java      |  2 +-
 42 files changed, 100 insertions(+), 119 deletions(-)

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 32743e1b6d8..6536157fb5a 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
@@ -24,7 +24,6 @@ import org.apache.shardingsphere.infra.executor.sql.context.SQLUnit;
 import org.apache.shardingsphere.infra.executor.sql.execute.engine.ConnectionMode;
 import org.apache.shardingsphere.infra.executor.sql.execute.engine.driver.DriverExecutionUnit;
 import org.apache.shardingsphere.infra.executor.sql.prepare.AbstractExecutionPrepareEngine;
-import org.apache.shardingsphere.infra.executor.sql.prepare.driver.jdbc.DatabaseTypeAware;
 import org.apache.shardingsphere.infra.rule.ShardingSphereRule;
 
 import java.sql.SQLException;
@@ -54,17 +53,17 @@ public final class DriverExecutionPrepareEngine<T extends DriverExecutionUnit<?>
     @SuppressWarnings("rawtypes")
     private final SQLExecutionUnitBuilder sqlExecutionUnitBuilder;
     
-    private final DatabaseType databaseType;
+    private final Map<String, DatabaseType> databaseTypes;
     
     public DriverExecutionPrepareEngine(final String type, final int maxConnectionsSizePerQuery, final ExecutorConnectionManager<C> connectionManager,
                                         final ExecutorStatementManager<C, ?, ?> statementManager, final StorageResourceOption option, final Collection<ShardingSphereRule> rules,
-                                        final DatabaseType databaseType) {
+                                        final Map<String, DatabaseType> databaseTypes) {
         super(maxConnectionsSizePerQuery, rules);
         this.connectionManager = connectionManager;
         this.statementManager = statementManager;
         this.option = option;
         sqlExecutionUnitBuilder = getCachedSqlExecutionUnitBuilder(type);
-        this.databaseType = databaseType;
+        this.databaseTypes = databaseTypes;
     }
     
     /**
@@ -97,10 +96,7 @@ public final class DriverExecutionPrepareEngine<T extends DriverExecutionUnit<?>
     private ExecutionGroup<T> createExecutionGroup(final String dataSourceName, final List<SQLUnit> sqlUnits, final C connection, final ConnectionMode connectionMode) throws SQLException {
         List<T> result = new LinkedList<>();
         for (SQLUnit each : sqlUnits) {
-            if (statementManager instanceof DatabaseTypeAware) {
-                ((DatabaseTypeAware) statementManager).setDatabaseType(databaseType);
-            }
-            result.add((T) sqlExecutionUnitBuilder.build(new ExecutionUnit(dataSourceName, each), statementManager, connection, connectionMode, option));
+            result.add((T) sqlExecutionUnitBuilder.build(new ExecutionUnit(dataSourceName, each), statementManager, connection, connectionMode, option, databaseTypes.get(dataSourceName)));
         }
         return new ExecutionGroup<>(result);
     }
diff --git a/infra/executor/src/main/java/org/apache/shardingsphere/infra/executor/sql/prepare/driver/ExecutorStatementManager.java b/infra/executor/src/main/java/org/apache/shardingsphere/infra/executor/sql/prepare/driver/ExecutorStatementManager.java
index e3483e58541..4054a089c35 100644
--- a/infra/executor/src/main/java/org/apache/shardingsphere/infra/executor/sql/prepare/driver/ExecutorStatementManager.java
+++ b/infra/executor/src/main/java/org/apache/shardingsphere/infra/executor/sql/prepare/driver/ExecutorStatementManager.java
@@ -17,6 +17,7 @@
 
 package org.apache.shardingsphere.infra.executor.sql.prepare.driver;
 
+import org.apache.shardingsphere.infra.database.type.DatabaseType;
 import org.apache.shardingsphere.infra.executor.sql.context.ExecutionUnit;
 import org.apache.shardingsphere.infra.executor.sql.execute.engine.ConnectionMode;
 
@@ -37,10 +38,11 @@ public interface ExecutorStatementManager<C, R, O extends StorageResourceOption>
      * @param connection connection
      * @param connectionMode connection mode
      * @param option storage resource option
+     * @param databaseType database type
      * @return storage resource
      * @throws SQLException SQL exception
      */
-    R createStorageResource(C connection, ConnectionMode connectionMode, O option) throws SQLException;
+    R createStorageResource(C connection, ConnectionMode connectionMode, O option, DatabaseType databaseType) throws SQLException;
     
     /**
      * Create storage resource.
@@ -49,8 +51,9 @@ public interface ExecutorStatementManager<C, R, O extends StorageResourceOption>
      * @param connection connection
      * @param connectionMode connection mode
      * @param option storage resource option
+     * @param databaseType database type
      * @return storage resource
      * @throws SQLException SQL exception
      */
-    R createStorageResource(ExecutionUnit executionUnit, C connection, ConnectionMode connectionMode, O option) throws SQLException;
+    R createStorageResource(ExecutionUnit executionUnit, C connection, ConnectionMode connectionMode, O option, DatabaseType databaseType) throws SQLException;
 }
diff --git a/infra/executor/src/main/java/org/apache/shardingsphere/infra/executor/sql/prepare/driver/SQLExecutionUnitBuilder.java b/infra/executor/src/main/java/org/apache/shardingsphere/infra/executor/sql/prepare/driver/SQLExecutionUnitBuilder.java
index c22a4c6e038..9c383f09123 100644
--- a/infra/executor/src/main/java/org/apache/shardingsphere/infra/executor/sql/prepare/driver/SQLExecutionUnitBuilder.java
+++ b/infra/executor/src/main/java/org/apache/shardingsphere/infra/executor/sql/prepare/driver/SQLExecutionUnitBuilder.java
@@ -17,6 +17,7 @@
 
 package org.apache.shardingsphere.infra.executor.sql.prepare.driver;
 
+import org.apache.shardingsphere.infra.database.type.DatabaseType;
 import org.apache.shardingsphere.infra.executor.sql.context.ExecutionUnit;
 import org.apache.shardingsphere.infra.executor.sql.execute.engine.ConnectionMode;
 import org.apache.shardingsphere.infra.executor.sql.execute.engine.driver.DriverExecutionUnit;
@@ -44,8 +45,9 @@ public interface SQLExecutionUnitBuilder<T extends DriverExecutionUnit<?>, M ext
      * @param connection connection
      * @param connectionMode connection mode
      * @param option storage resource option
+     * @param databaseType database type
      * @return SQL execution unit
      * @throws SQLException SQL exception
      */
-    T build(ExecutionUnit executionUnit, M executorManager, C connection, ConnectionMode connectionMode, O option) throws SQLException;
+    T build(ExecutionUnit executionUnit, M executorManager, C connection, ConnectionMode connectionMode, O option, DatabaseType databaseType) throws SQLException;
 }
diff --git a/infra/executor/src/main/java/org/apache/shardingsphere/infra/executor/sql/prepare/driver/jdbc/DatabaseTypeAware.java b/infra/executor/src/main/java/org/apache/shardingsphere/infra/executor/sql/prepare/driver/jdbc/DatabaseTypeAware.java
deleted file mode 100644
index 933d39f180a..00000000000
--- a/infra/executor/src/main/java/org/apache/shardingsphere/infra/executor/sql/prepare/driver/jdbc/DatabaseTypeAware.java
+++ /dev/null
@@ -1,33 +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.executor.sql.prepare.driver.jdbc;
-
-import org.apache.shardingsphere.infra.database.type.DatabaseType;
-
-/**
- * Database type aware.
- */
-public interface DatabaseTypeAware {
-    
-    /**
-     * Set database type.
-     * 
-     * @param databaseType database type
-     */
-    void setDatabaseType(DatabaseType databaseType);
-}
diff --git a/infra/executor/src/main/java/org/apache/shardingsphere/infra/executor/sql/prepare/driver/jdbc/builder/PreparedStatementExecutionUnitBuilder.java b/infra/executor/src/main/java/org/apache/shardingsphere/infra/executor/sql/prepare/driver/jdbc/builder/PreparedStatementExecutionUnitBuilder.java
index 4a82a8e64fb..7b6a6a05d7a 100644
--- a/infra/executor/src/main/java/org/apache/shardingsphere/infra/executor/sql/prepare/driver/jdbc/builder/PreparedStatementExecutionUnitBuilder.java
+++ b/infra/executor/src/main/java/org/apache/shardingsphere/infra/executor/sql/prepare/driver/jdbc/builder/PreparedStatementExecutionUnitBuilder.java
@@ -17,6 +17,7 @@
 
 package org.apache.shardingsphere.infra.executor.sql.prepare.driver.jdbc.builder;
 
+import org.apache.shardingsphere.infra.database.type.DatabaseType;
 import org.apache.shardingsphere.infra.executor.sql.context.ExecutionUnit;
 import org.apache.shardingsphere.infra.executor.sql.execute.engine.ConnectionMode;
 import org.apache.shardingsphere.infra.executor.sql.execute.engine.driver.jdbc.JDBCExecutionUnit;
@@ -35,15 +36,15 @@ public final class PreparedStatementExecutionUnitBuilder implements JDBCExecutio
     
     @Override
     public JDBCExecutionUnit build(final ExecutionUnit executionUnit, final ExecutorJDBCStatementManager statementManager,
-                                   final Connection connection, final ConnectionMode connectionMode, final StatementOption option) throws SQLException {
+                                   final Connection connection, final ConnectionMode connectionMode, final StatementOption option, final DatabaseType databaseType) throws SQLException {
         PreparedStatement preparedStatement = createPreparedStatement(
-                executionUnit, statementManager, connection, connectionMode, option);
+                executionUnit, statementManager, connection, connectionMode, option, databaseType);
         return new JDBCExecutionUnit(executionUnit, connectionMode, preparedStatement);
     }
     
     private PreparedStatement createPreparedStatement(final ExecutionUnit executionUnit, final ExecutorJDBCStatementManager statementManager, final Connection connection,
-                                                      final ConnectionMode connectionMode, final StatementOption option) throws SQLException {
-        return (PreparedStatement) statementManager.createStorageResource(executionUnit, connection, connectionMode, option);
+                                                      final ConnectionMode connectionMode, final StatementOption option, final DatabaseType databaseType) throws SQLException {
+        return (PreparedStatement) statementManager.createStorageResource(executionUnit, connection, connectionMode, option, databaseType);
     }
     
     @Override
diff --git a/infra/executor/src/main/java/org/apache/shardingsphere/infra/executor/sql/prepare/driver/jdbc/builder/StatementExecutionUnitBuilder.java b/infra/executor/src/main/java/org/apache/shardingsphere/infra/executor/sql/prepare/driver/jdbc/builder/StatementExecutionUnitBuilder.java
index 7af040ca980..4a05e17fcd6 100644
--- a/infra/executor/src/main/java/org/apache/shardingsphere/infra/executor/sql/prepare/driver/jdbc/builder/StatementExecutionUnitBuilder.java
+++ b/infra/executor/src/main/java/org/apache/shardingsphere/infra/executor/sql/prepare/driver/jdbc/builder/StatementExecutionUnitBuilder.java
@@ -17,6 +17,7 @@
 
 package org.apache.shardingsphere.infra.executor.sql.prepare.driver.jdbc.builder;
 
+import org.apache.shardingsphere.infra.database.type.DatabaseType;
 import org.apache.shardingsphere.infra.executor.sql.context.ExecutionUnit;
 import org.apache.shardingsphere.infra.executor.sql.execute.engine.ConnectionMode;
 import org.apache.shardingsphere.infra.executor.sql.execute.engine.driver.jdbc.JDBCExecutionUnit;
@@ -35,13 +36,13 @@ public final class StatementExecutionUnitBuilder implements JDBCExecutionUnitBui
     
     @Override
     public JDBCExecutionUnit build(final ExecutionUnit executionUnit, final ExecutorJDBCStatementManager statementManager,
-                                   final Connection connection, final ConnectionMode connectionMode, final StatementOption option) throws SQLException {
-        return new JDBCExecutionUnit(executionUnit, connectionMode, createStatement(statementManager, connection, connectionMode, option));
+                                   final Connection connection, final ConnectionMode connectionMode, final StatementOption option, final DatabaseType databaseType) throws SQLException {
+        return new JDBCExecutionUnit(executionUnit, connectionMode, createStatement(statementManager, connection, connectionMode, option, databaseType));
     }
     
     private Statement createStatement(final ExecutorJDBCStatementManager statementManager, final Connection connection,
-                                      final ConnectionMode connectionMode, final StatementOption option) throws SQLException {
-        return statementManager.createStorageResource(connection, connectionMode, option);
+                                      final ConnectionMode connectionMode, final StatementOption option, final DatabaseType databaseType) throws SQLException {
+        return statementManager.createStorageResource(connection, connectionMode, option, databaseType);
     }
     
     @Override
diff --git a/infra/executor/src/main/java/org/apache/shardingsphere/infra/executor/sql/prepare/driver/vertx/builder/PreparedQueryExecutionUnitBuilder.java b/infra/executor/src/main/java/org/apache/shardingsphere/infra/executor/sql/prepare/driver/vertx/builder/PreparedQueryExecutionUnitBuilder.java
index fd8ab9a44d0..359240bd2f2 100644
--- a/infra/executor/src/main/java/org/apache/shardingsphere/infra/executor/sql/prepare/driver/vertx/builder/PreparedQueryExecutionUnitBuilder.java
+++ b/infra/executor/src/main/java/org/apache/shardingsphere/infra/executor/sql/prepare/driver/vertx/builder/PreparedQueryExecutionUnitBuilder.java
@@ -19,6 +19,7 @@ package org.apache.shardingsphere.infra.executor.sql.prepare.driver.vertx.builde
 
 import io.vertx.core.Future;
 import io.vertx.sqlclient.SqlClient;
+import org.apache.shardingsphere.infra.database.type.DatabaseType;
 import org.apache.shardingsphere.infra.executor.sql.context.ExecutionUnit;
 import org.apache.shardingsphere.infra.executor.sql.execute.engine.ConnectionMode;
 import org.apache.shardingsphere.infra.executor.sql.execute.engine.driver.vertx.VertxExecutionUnit;
@@ -32,7 +33,7 @@ public final class PreparedQueryExecutionUnitBuilder implements VertxExecutionUn
     
     @Override
     public VertxExecutionUnit build(final ExecutionUnit executionUnit, final ExecutorVertxStatementManager statementManager,
-                                    final Future<? extends SqlClient> connection, final ConnectionMode connectionMode, final VertxExecutionContext option) {
+                                    final Future<? extends SqlClient> connection, final ConnectionMode connectionMode, final VertxExecutionContext option, final DatabaseType databaseType) {
         return new VertxExecutionUnit(executionUnit, connectionMode, connection.compose(sqlClient -> Future.succeededFuture(sqlClient.preparedQuery(executionUnit.getSqlUnit().getSql()))));
     }
     
diff --git a/infra/executor/src/test/java/org/apache/shardingsphere/infra/executor/sql/prepare/driver/fixture/FixtureExecutorStatementManager.java b/infra/executor/src/test/java/org/apache/shardingsphere/infra/executor/sql/prepare/driver/fixture/FixtureExecutorStatementManager.java
index 5b084695dfe..ffe715f8807 100644
--- a/infra/executor/src/test/java/org/apache/shardingsphere/infra/executor/sql/prepare/driver/fixture/FixtureExecutorStatementManager.java
+++ b/infra/executor/src/test/java/org/apache/shardingsphere/infra/executor/sql/prepare/driver/fixture/FixtureExecutorStatementManager.java
@@ -17,6 +17,7 @@
 
 package org.apache.shardingsphere.infra.executor.sql.prepare.driver.fixture;
 
+import org.apache.shardingsphere.infra.database.type.DatabaseType;
 import org.apache.shardingsphere.infra.executor.sql.context.ExecutionUnit;
 import org.apache.shardingsphere.infra.executor.sql.execute.engine.ConnectionMode;
 import org.apache.shardingsphere.infra.executor.sql.prepare.driver.ExecutorStatementManager;
@@ -24,12 +25,13 @@ import org.apache.shardingsphere.infra.executor.sql.prepare.driver.ExecutorState
 public final class FixtureExecutorStatementManager implements ExecutorStatementManager<Object, Object, FixtureStorageResourceOption> {
     
     @Override
-    public Object createStorageResource(final Object connection, final ConnectionMode connectionMode, final FixtureStorageResourceOption option) {
+    public Object createStorageResource(final Object connection, final ConnectionMode connectionMode, final FixtureStorageResourceOption option, final DatabaseType databaseType) {
         return null;
     }
     
     @Override
-    public Object createStorageResource(final ExecutionUnit executionUnit, final Object connection, final ConnectionMode connectionMode, final FixtureStorageResourceOption option) {
+    public Object createStorageResource(final ExecutionUnit executionUnit, final Object connection, final ConnectionMode connectionMode, final FixtureStorageResourceOption option,
+                                        final DatabaseType databaseType) {
         return null;
     }
 }
diff --git a/infra/executor/src/test/java/org/apache/shardingsphere/infra/executor/sql/prepare/driver/fixture/FixtureSQLExecutionUnitBuilder.java b/infra/executor/src/test/java/org/apache/shardingsphere/infra/executor/sql/prepare/driver/fixture/FixtureSQLExecutionUnitBuilder.java
index 185197fe158..96f47d77b8f 100644
--- a/infra/executor/src/test/java/org/apache/shardingsphere/infra/executor/sql/prepare/driver/fixture/FixtureSQLExecutionUnitBuilder.java
+++ b/infra/executor/src/test/java/org/apache/shardingsphere/infra/executor/sql/prepare/driver/fixture/FixtureSQLExecutionUnitBuilder.java
@@ -17,6 +17,7 @@
 
 package org.apache.shardingsphere.infra.executor.sql.prepare.driver.fixture;
 
+import org.apache.shardingsphere.infra.database.type.DatabaseType;
 import org.apache.shardingsphere.infra.executor.sql.context.ExecutionUnit;
 import org.apache.shardingsphere.infra.executor.sql.execute.engine.ConnectionMode;
 import org.apache.shardingsphere.infra.executor.sql.prepare.driver.SQLExecutionUnitBuilder;
@@ -25,7 +26,7 @@ public final class FixtureSQLExecutionUnitBuilder implements SQLExecutionUnitBui
     
     @Override
     public FixtureDriverExecutionUnit build(final ExecutionUnit executionUnit, final FixtureExecutorStatementManager executorManager,
-                                            final Object connection, final ConnectionMode connectionMode, final FixtureStorageResourceOption option) {
+                                            final Object connection, final ConnectionMode connectionMode, final FixtureStorageResourceOption option, final DatabaseType databaseType) {
         return new FixtureDriverExecutionUnit();
     }
     
diff --git a/jdbc/core/src/main/java/org/apache/shardingsphere/driver/jdbc/core/statement/ShardingSpherePreparedStatement.java b/jdbc/core/src/main/java/org/apache/shardingsphere/driver/jdbc/core/statement/ShardingSpherePreparedStatement.java
index 5a2442c41a0..091f4e7e313 100644
--- a/jdbc/core/src/main/java/org/apache/shardingsphere/driver/jdbc/core/statement/ShardingSpherePreparedStatement.java
+++ b/jdbc/core/src/main/java/org/apache/shardingsphere/driver/jdbc/core/statement/ShardingSpherePreparedStatement.java
@@ -310,7 +310,7 @@ public final class ShardingSpherePreparedStatement extends AbstractPreparedState
         int maxConnectionsSizePerQuery = metaDataContexts.getMetaData().getProps().<Integer>getValue(ConfigurationPropertyKey.MAX_CONNECTIONS_SIZE_PER_QUERY);
         return new DriverExecutionPrepareEngine<>(JDBCDriverType.PREPARED_STATEMENT, maxConnectionsSizePerQuery, connection.getConnectionManager(), statementManager,
                 statementOption, metaDataContexts.getMetaData().getDatabase(connection.getDatabaseName()).getRuleMetaData().getRules(),
-                metaDataContexts.getMetaData().getDatabase(connection.getDatabaseName()).getResourceMetaData().getDatabaseType());
+                metaDataContexts.getMetaData().getDatabase(connection.getDatabaseName()).getResourceMetaData().getDatabaseTypes());
     }
     
     @Override
@@ -605,7 +605,7 @@ public final class ShardingSpherePreparedStatement extends AbstractPreparedState
                 .<Integer>getValue(ConfigurationPropertyKey.MAX_CONNECTIONS_SIZE_PER_QUERY), connection.getConnectionManager(), statementManager, statementOption,
                 metaDataContexts.getMetaData()
                         .getDatabase(connection.getDatabaseName()).getRuleMetaData().getRules(),
-                metaDataContexts.getMetaData().getDatabase(connection.getDatabaseName()).getResourceMetaData().getDatabaseType());
+                metaDataContexts.getMetaData().getDatabase(connection.getDatabaseName()).getResourceMetaData().getDatabaseTypes());
         List<ExecutionUnit> executionUnits = new ArrayList<>(batchPreparedStatementExecutor.getBatchExecutionUnits().size());
         for (BatchExecutionUnit each : batchPreparedStatementExecutor.getBatchExecutionUnits()) {
             ExecutionUnit executionUnit = each.getExecutionUnit();
diff --git a/jdbc/core/src/main/java/org/apache/shardingsphere/driver/jdbc/core/statement/ShardingSphereStatement.java b/jdbc/core/src/main/java/org/apache/shardingsphere/driver/jdbc/core/statement/ShardingSphereStatement.java
index dac8e4be9c9..092c0509470 100644
--- a/jdbc/core/src/main/java/org/apache/shardingsphere/driver/jdbc/core/statement/ShardingSphereStatement.java
+++ b/jdbc/core/src/main/java/org/apache/shardingsphere/driver/jdbc/core/statement/ShardingSphereStatement.java
@@ -230,7 +230,7 @@ public final class ShardingSphereStatement extends AbstractStatementAdapter {
         int maxConnectionsSizePerQuery = metaDataContexts.getMetaData().getProps().<Integer>getValue(ConfigurationPropertyKey.MAX_CONNECTIONS_SIZE_PER_QUERY);
         return new DriverExecutionPrepareEngine<>(JDBCDriverType.STATEMENT, maxConnectionsSizePerQuery, connection.getConnectionManager(), statementManager, statementOption,
                 metaDataContexts.getMetaData().getDatabase(connection.getDatabaseName()).getRuleMetaData().getRules(),
-                metaDataContexts.getMetaData().getDatabase(connection.getDatabaseName()).getResourceMetaData().getDatabaseType());
+                metaDataContexts.getMetaData().getDatabase(connection.getDatabaseName()).getResourceMetaData().getDatabaseTypes());
     }
     
     @Override
diff --git a/jdbc/core/src/main/java/org/apache/shardingsphere/driver/jdbc/core/statement/StatementManager.java b/jdbc/core/src/main/java/org/apache/shardingsphere/driver/jdbc/core/statement/StatementManager.java
index 7e531e23cb4..f76d9c8fb07 100644
--- a/jdbc/core/src/main/java/org/apache/shardingsphere/driver/jdbc/core/statement/StatementManager.java
+++ b/jdbc/core/src/main/java/org/apache/shardingsphere/driver/jdbc/core/statement/StatementManager.java
@@ -20,6 +20,7 @@ package org.apache.shardingsphere.driver.jdbc.core.statement;
 import lombok.EqualsAndHashCode;
 import lombok.RequiredArgsConstructor;
 import org.apache.shardingsphere.driver.jdbc.adapter.executor.ForceExecuteTemplate;
+import org.apache.shardingsphere.infra.database.type.DatabaseType;
 import org.apache.shardingsphere.infra.executor.sql.context.ExecutionUnit;
 import org.apache.shardingsphere.infra.executor.sql.execute.engine.ConnectionMode;
 import org.apache.shardingsphere.infra.executor.sql.prepare.driver.jdbc.ExecutorJDBCStatementManager;
@@ -42,13 +43,14 @@ public final class StatementManager implements ExecutorJDBCStatementManager, Aut
     
     @SuppressWarnings("MagicConstant")
     @Override
-    public Statement createStorageResource(final Connection connection, final ConnectionMode connectionMode, final StatementOption option) throws SQLException {
+    public Statement createStorageResource(final Connection connection, final ConnectionMode connectionMode, final StatementOption option, final DatabaseType databaseType) throws SQLException {
         return connection.createStatement(option.getResultSetType(), option.getResultSetConcurrency(), option.getResultSetHoldability());
     }
     
     @SuppressWarnings("MagicConstant")
     @Override
-    public Statement createStorageResource(final ExecutionUnit executionUnit, final Connection connection, final ConnectionMode connectionMode, final StatementOption option) throws SQLException {
+    public Statement createStorageResource(final ExecutionUnit executionUnit, final Connection connection, final ConnectionMode connectionMode, final StatementOption option,
+                                           final DatabaseType databaseType) throws SQLException {
         Statement result = cachedStatements.get(new CacheKey(executionUnit, connectionMode));
         if (null == result) {
             String sql = executionUnit.getSqlUnit().getSql();
diff --git a/proxy/backend/src/main/java/org/apache/shardingsphere/proxy/backend/communication/ProxySQLExecutor.java b/proxy/backend/src/main/java/org/apache/shardingsphere/proxy/backend/communication/ProxySQLExecutor.java
index b36179ea113..ad22f74dcba 100644
--- a/proxy/backend/src/main/java/org/apache/shardingsphere/proxy/backend/communication/ProxySQLExecutor.java
+++ b/proxy/backend/src/main/java/org/apache/shardingsphere/proxy/backend/communication/ProxySQLExecutor.java
@@ -17,6 +17,7 @@
 
 package org.apache.shardingsphere.proxy.backend.communication;
 
+import org.apache.shardingsphere.dialect.exception.transaction.TableModifyInTransactionException;
 import org.apache.shardingsphere.infra.binder.type.TableAvailable;
 import org.apache.shardingsphere.infra.config.props.ConfigurationPropertyKey;
 import org.apache.shardingsphere.infra.database.type.DatabaseType;
@@ -43,7 +44,6 @@ import org.apache.shardingsphere.proxy.backend.communication.jdbc.executor.Proxy
 import org.apache.shardingsphere.proxy.backend.communication.jdbc.statement.JDBCBackendStatement;
 import org.apache.shardingsphere.proxy.backend.context.BackendExecutorContext;
 import org.apache.shardingsphere.proxy.backend.context.ProxyContext;
-import org.apache.shardingsphere.dialect.exception.transaction.TableModifyInTransactionException;
 import org.apache.shardingsphere.proxy.backend.session.transaction.TransactionStatus;
 import org.apache.shardingsphere.sql.parser.sql.common.statement.SQLStatement;
 import org.apache.shardingsphere.sql.parser.sql.common.statement.ddl.CloseStatement;
@@ -185,8 +185,9 @@ public final class ProxySQLExecutor {
     private List<ExecuteResult> useDriverToExecute(final ExecutionContext executionContext, final Collection<ShardingSphereRule> rules,
                                                    final int maxConnectionsSizePerQuery, final boolean isReturnGeneratedKeys, final boolean isExceptionThrown) throws SQLException {
         JDBCBackendStatement statementManager = (JDBCBackendStatement) backendConnection.getConnectionSession().getStatementManager();
-        DriverExecutionPrepareEngine<JDBCExecutionUnit, Connection> prepareEngine = new DriverExecutionPrepareEngine<>(type, maxConnectionsSizePerQuery, backendConnection, statementManager,
-                new StatementOption(isReturnGeneratedKeys), rules, backendConnection.getConnectionSession().getDatabaseType());
+        DriverExecutionPrepareEngine<JDBCExecutionUnit, Connection> prepareEngine = new DriverExecutionPrepareEngine<>(
+                type, maxConnectionsSizePerQuery, backendConnection, statementManager, new StatementOption(isReturnGeneratedKeys), rules,
+                ProxyContext.getInstance().getDatabase(backendConnection.getConnectionSession().getDatabaseName()).getResourceMetaData().getDatabaseTypes());
         ExecutionGroupContext<JDBCExecutionUnit> executionGroupContext;
         try {
             executionGroupContext = prepareEngine.prepare(executionContext.getRouteContext(), executionContext.getExecutionUnits());
diff --git a/proxy/backend/src/main/java/org/apache/shardingsphere/proxy/backend/communication/ReactiveProxySQLExecutor.java b/proxy/backend/src/main/java/org/apache/shardingsphere/proxy/backend/communication/ReactiveProxySQLExecutor.java
index daf7e56d296..9d9a9f4b22f 100644
--- a/proxy/backend/src/main/java/org/apache/shardingsphere/proxy/backend/communication/ReactiveProxySQLExecutor.java
+++ b/proxy/backend/src/main/java/org/apache/shardingsphere/proxy/backend/communication/ReactiveProxySQLExecutor.java
@@ -19,6 +19,7 @@ package org.apache.shardingsphere.proxy.backend.communication;
 
 import io.vertx.core.Future;
 import io.vertx.sqlclient.SqlClient;
+import org.apache.shardingsphere.dialect.exception.transaction.TableModifyInTransactionException;
 import org.apache.shardingsphere.infra.binder.type.TableAvailable;
 import org.apache.shardingsphere.infra.config.props.ConfigurationPropertyKey;
 import org.apache.shardingsphere.infra.database.type.DatabaseType;
@@ -36,7 +37,6 @@ import org.apache.shardingsphere.proxy.backend.communication.vertx.VertxBackendS
 import org.apache.shardingsphere.proxy.backend.communication.vertx.executor.ProxyReactiveExecutor;
 import org.apache.shardingsphere.proxy.backend.context.BackendExecutorContext;
 import org.apache.shardingsphere.proxy.backend.context.ProxyContext;
-import org.apache.shardingsphere.dialect.exception.transaction.TableModifyInTransactionException;
 import org.apache.shardingsphere.proxy.backend.session.transaction.TransactionStatus;
 import org.apache.shardingsphere.sql.parser.sql.common.statement.SQLStatement;
 import org.apache.shardingsphere.sql.parser.sql.common.statement.ddl.CloseStatement;
@@ -137,7 +137,8 @@ public final class ReactiveProxySQLExecutor {
                                                            final int maxConnectionsSizePerQuery) throws SQLException {
         VertxBackendStatement statementManager = (VertxBackendStatement) backendConnection.getConnectionSession().getStatementManager();
         DriverExecutionPrepareEngine<VertxExecutionUnit, Future<? extends SqlClient>> prepareEngine = new DriverExecutionPrepareEngine<>(
-                TYPE, maxConnectionsSizePerQuery, backendConnection, statementManager, new VertxExecutionContext(), rules, backendConnection.getConnectionSession().getDatabaseType());
+                TYPE, maxConnectionsSizePerQuery, backendConnection, statementManager, new VertxExecutionContext(), rules,
+                ProxyContext.getInstance().getDatabase(backendConnection.getConnectionSession().getDatabaseName()).getResourceMetaData().getDatabaseTypes());
         ExecutionGroupContext<VertxExecutionUnit> executionGroupContext;
         try {
             executionGroupContext = prepareEngine.prepare(executionContext.getRouteContext(), executionContext.getExecutionUnits());
diff --git a/proxy/backend/src/main/java/org/apache/shardingsphere/proxy/backend/communication/jdbc/JDBCDatabaseCommunicationEngine.java b/proxy/backend/src/main/java/org/apache/shardingsphere/proxy/backend/communication/jdbc/JDBCDatabaseCommunicationEngine.java
index 42b6470bd45..9842334008b 100644
--- a/proxy/backend/src/main/java/org/apache/shardingsphere/proxy/backend/communication/jdbc/JDBCDatabaseCommunicationEngine.java
+++ b/proxy/backend/src/main/java/org/apache/shardingsphere/proxy/backend/communication/jdbc/JDBCDatabaseCommunicationEngine.java
@@ -168,7 +168,7 @@ public final class JDBCDatabaseCommunicationEngine extends DatabaseCommunication
         JDBCBackendStatement statementManager = (JDBCBackendStatement) backendConnection.getConnectionSession().getStatementManager();
         return new DriverExecutionPrepareEngine<>(getDriverType(), maxConnectionsSizePerQuery, backendConnection, statementManager,
                 new StatementOption(isReturnGeneratedKeys), metaData.getMetaData().getDatabase(backendConnection.getConnectionSession().getDatabaseName()).getRuleMetaData().getRules(),
-                backendConnection.getConnectionSession().getDatabaseType());
+                metaData.getMetaData().getDatabase(backendConnection.getConnectionSession().getDatabaseName()).getResourceMetaData().getDatabaseTypes());
     }
     
     private ResponseHeader processExecuteFederation(final ResultSet resultSet, final MetaDataContexts metaDataContexts) throws SQLException {
diff --git a/proxy/backend/src/main/java/org/apache/shardingsphere/proxy/backend/communication/jdbc/statement/JDBCBackendStatement.java b/proxy/backend/src/main/java/org/apache/shardingsphere/proxy/backend/communication/jdbc/statement/JDBCBackendStatement.java
index 82d19818a8c..be8ee0d48c7 100644
--- a/proxy/backend/src/main/java/org/apache/shardingsphere/proxy/backend/communication/jdbc/statement/JDBCBackendStatement.java
+++ b/proxy/backend/src/main/java/org/apache/shardingsphere/proxy/backend/communication/jdbc/statement/JDBCBackendStatement.java
@@ -17,13 +17,10 @@
 
 package org.apache.shardingsphere.proxy.backend.communication.jdbc.statement;
 
-import lombok.Getter;
-import lombok.Setter;
 import org.apache.shardingsphere.db.protocol.parameter.TypeUnspecifiedSQLParameter;
 import org.apache.shardingsphere.infra.database.type.DatabaseType;
 import org.apache.shardingsphere.infra.executor.sql.context.ExecutionUnit;
 import org.apache.shardingsphere.infra.executor.sql.execute.engine.ConnectionMode;
-import org.apache.shardingsphere.infra.executor.sql.prepare.driver.jdbc.DatabaseTypeAware;
 import org.apache.shardingsphere.infra.executor.sql.prepare.driver.jdbc.ExecutorJDBCStatementManager;
 import org.apache.shardingsphere.infra.executor.sql.prepare.driver.jdbc.StatementOption;
 
@@ -38,23 +35,20 @@ import java.util.Optional;
 /**
  * JDBC backend statement.
  */
-@Getter
-@Setter
-public final class JDBCBackendStatement implements ExecutorJDBCStatementManager, DatabaseTypeAware {
-    
-    private DatabaseType databaseType;
+public final class JDBCBackendStatement implements ExecutorJDBCStatementManager {
     
     @Override
-    public Statement createStorageResource(final Connection connection, final ConnectionMode connectionMode, final StatementOption option) throws SQLException {
+    public Statement createStorageResource(final Connection connection, final ConnectionMode connectionMode, final StatementOption option, final DatabaseType databaseType) throws SQLException {
         Statement result = connection.createStatement();
         if (ConnectionMode.MEMORY_STRICTLY == connectionMode) {
-            setFetchSize(result);
+            setFetchSize(result, databaseType);
         }
         return result;
     }
     
     @Override
-    public Statement createStorageResource(final ExecutionUnit executionUnit, final Connection connection, final ConnectionMode connectionMode, final StatementOption option) throws SQLException {
+    public Statement createStorageResource(final ExecutionUnit executionUnit, final Connection connection, final ConnectionMode connectionMode, final StatementOption option,
+                                           final DatabaseType databaseType) throws SQLException {
         String sql = executionUnit.getSqlUnit().getSql();
         List<Object> parameters = executionUnit.getSqlUnit().getParameters();
         PreparedStatement result = option.isReturnGeneratedKeys()
@@ -69,12 +63,12 @@ public final class JDBCBackendStatement implements ExecutorJDBCStatementManager,
             }
         }
         if (ConnectionMode.MEMORY_STRICTLY == connectionMode) {
-            setFetchSize(result);
+            setFetchSize(result, databaseType);
         }
         return result;
     }
     
-    private void setFetchSize(final Statement statement) throws SQLException {
+    private void setFetchSize(final Statement statement, final DatabaseType databaseType) throws SQLException {
         Optional<StatementMemoryStrictlyFetchSizeSetter> fetchSizeSetter = StatementMemoryStrictlyFetchSizeSetterFactory.findInstance(databaseType.getType());
         if (fetchSizeSetter.isPresent()) {
             fetchSizeSetter.get().setFetchSize(statement);
diff --git a/proxy/backend/src/main/java/org/apache/shardingsphere/proxy/backend/communication/vertx/VertxBackendStatement.java b/proxy/backend/src/main/java/org/apache/shardingsphere/proxy/backend/communication/vertx/VertxBackendStatement.java
index 61992c861d1..075df1645a7 100644
--- a/proxy/backend/src/main/java/org/apache/shardingsphere/proxy/backend/communication/vertx/VertxBackendStatement.java
+++ b/proxy/backend/src/main/java/org/apache/shardingsphere/proxy/backend/communication/vertx/VertxBackendStatement.java
@@ -22,6 +22,7 @@ import io.vertx.sqlclient.Query;
 import io.vertx.sqlclient.Row;
 import io.vertx.sqlclient.RowSet;
 import io.vertx.sqlclient.SqlClient;
+import org.apache.shardingsphere.infra.database.type.DatabaseType;
 import org.apache.shardingsphere.infra.executor.sql.context.ExecutionUnit;
 import org.apache.shardingsphere.infra.executor.sql.execute.engine.ConnectionMode;
 import org.apache.shardingsphere.infra.executor.sql.prepare.driver.vertx.ExecutorVertxStatementManager;
@@ -33,13 +34,14 @@ import org.apache.shardingsphere.infra.executor.sql.prepare.driver.vertx.VertxEx
 public final class VertxBackendStatement implements ExecutorVertxStatementManager {
     
     @Override
-    public Future<Query<RowSet<Row>>> createStorageResource(final Future<? extends SqlClient> connection, final ConnectionMode connectionMode, final VertxExecutionContext option) {
+    public Future<Query<RowSet<Row>>> createStorageResource(final Future<? extends SqlClient> connection, final ConnectionMode connectionMode, final VertxExecutionContext option,
+                                                            final DatabaseType databaseType) {
         return Future.failedFuture(new UnsupportedOperationException("Vert.x query is not like JDBC statement."));
     }
     
     @Override
     public Future<Query<RowSet<Row>>> createStorageResource(final ExecutionUnit executionUnit, final Future<? extends SqlClient> connection,
-                                                            final ConnectionMode connectionMode, final VertxExecutionContext option) {
+                                                            final ConnectionMode connectionMode, final VertxExecutionContext option, final DatabaseType databaseType) {
         return Future.failedFuture(new UnsupportedOperationException("Vert.x prepared query is not like JDBC prepared statement."));
     }
 }
diff --git a/proxy/backend/src/main/java/org/apache/shardingsphere/proxy/backend/handler/admin/DatabaseAdminQueryBackendHandler.java b/proxy/backend/src/main/java/org/apache/shardingsphere/proxy/backend/handler/admin/DatabaseAdminQueryBackendHandler.java
index 9228b95dcb6..5d2e09d9af5 100644
--- a/proxy/backend/src/main/java/org/apache/shardingsphere/proxy/backend/handler/admin/DatabaseAdminQueryBackendHandler.java
+++ b/proxy/backend/src/main/java/org/apache/shardingsphere/proxy/backend/handler/admin/DatabaseAdminQueryBackendHandler.java
@@ -62,7 +62,7 @@ public final class DatabaseAdminQueryBackendHandler implements ProxyBackendHandl
     private List<QueryHeader> createResponseHeader() throws SQLException {
         List<QueryHeader> result = new ArrayList<>(queryResultMetaData.getColumnCount());
         ShardingSphereDatabase database = null == connectionSession.getDatabaseName() ? null : ProxyContext.getInstance().getDatabase(connectionSession.getDatabaseName());
-        DatabaseType databaseType = null == database ? connectionSession.getDatabaseType() : database.getProtocolType();
+        DatabaseType databaseType = null == database ? connectionSession.getProtocolType() : database.getProtocolType();
         QueryHeaderBuilderEngine queryHeaderBuilderEngine = new QueryHeaderBuilderEngine(databaseType);
         for (int columnIndex = 1; columnIndex <= queryResultMetaData.getColumnCount(); columnIndex++) {
             result.add(queryHeaderBuilderEngine.build(queryResultMetaData, database, columnIndex));
diff --git a/proxy/backend/src/main/java/org/apache/shardingsphere/proxy/backend/handler/admin/opengauss/OpenGaussSystemCatalogAdminQueryExecutor.java b/proxy/backend/src/main/java/org/apache/shardingsphere/proxy/backend/handler/admin/opengauss/OpenGaussSystemCatalogAdminQueryExecutor.java
index 094d881ab7d..9cb6e5370cf 100644
--- a/proxy/backend/src/main/java/org/apache/shardingsphere/proxy/backend/handler/admin/opengauss/OpenGaussSystemCatalogAdminQueryExecutor.java
+++ b/proxy/backend/src/main/java/org/apache/shardingsphere/proxy/backend/handler/admin/opengauss/OpenGaussSystemCatalogAdminQueryExecutor.java
@@ -74,7 +74,7 @@ public final class OpenGaussSystemCatalogAdminQueryExecutor implements DatabaseA
             connection.setSchema(PG_CATALOG);
             try (Statement statement = connection.createStatement(); ResultSet resultSet = statement.executeQuery(sql)) {
                 queryResultMetaData = new JDBCQueryResultMetaData(resultSet.getMetaData());
-                mergedResult = new IteratorStreamMergedResult(Collections.singletonList(new JDBCMemoryQueryResult(resultSet, connectionSession.getDatabaseType())));
+                mergedResult = new IteratorStreamMergedResult(Collections.singletonList(new JDBCMemoryQueryResult(resultSet, connectionSession.getProtocolType())));
             }
         }
     }
diff --git a/proxy/backend/src/main/java/org/apache/shardingsphere/proxy/backend/handler/distsql/ral/hint/executor/ShowShardingHintStatusExecutor.java b/proxy/backend/src/main/java/org/apache/shardingsphere/proxy/backend/handler/distsql/ral/hint/executor/ShowShardingHintStatusExecutor.java
index e516891e223..93ca3fa5a0f 100644
--- a/proxy/backend/src/main/java/org/apache/shardingsphere/proxy/backend/handler/distsql/ral/hint/executor/ShowShardingHintStatusExecutor.java
+++ b/proxy/backend/src/main/java/org/apache/shardingsphere/proxy/backend/handler/distsql/ral/hint/executor/ShowShardingHintStatusExecutor.java
@@ -66,7 +66,7 @@ public final class ShowShardingHintStatusExecutor extends AbstractHintQueryExecu
         if (!database.isComplete()) {
             throw new RuleNotExistedException();
         }
-        String schemaName = DatabaseTypeEngine.getDefaultSchemaName(connectionSession.getDatabaseType(), connectionSession.getDatabaseName());
+        String schemaName = DatabaseTypeEngine.getDefaultSchemaName(connectionSession.getProtocolType(), connectionSession.getDatabaseName());
         Collection<String> tableNames = database.getSchema(schemaName).getAllTableNames();
         for (String each : tableNames) {
             if (HintManager.isDatabaseShardingOnly()) {
diff --git a/proxy/backend/src/main/java/org/apache/shardingsphere/proxy/backend/handler/distsql/ral/queryable/ShowTableMetadataHandler.java b/proxy/backend/src/main/java/org/apache/shardingsphere/proxy/backend/handler/distsql/ral/queryable/ShowTableMetadataHandler.java
index 907874896cc..530182bcd99 100644
--- a/proxy/backend/src/main/java/org/apache/shardingsphere/proxy/backend/handler/distsql/ral/queryable/ShowTableMetadataHandler.java
+++ b/proxy/backend/src/main/java/org/apache/shardingsphere/proxy/backend/handler/distsql/ral/queryable/ShowTableMetadataHandler.java
@@ -55,7 +55,7 @@ public final class ShowTableMetadataHandler extends QueryableRALBackendHandler<S
     @Override
     protected Collection<LocalDataQueryResultRow> getRows(final ContextManager contextManager) {
         String databaseName = getDatabaseName();
-        String defaultSchema = DatabaseTypeEngine.getDefaultSchemaName(getConnectionSession().getDatabaseType(), getConnectionSession().getDatabaseName());
+        String defaultSchema = DatabaseTypeEngine.getDefaultSchemaName(getConnectionSession().getProtocolType(), getConnectionSession().getDatabaseName());
         ShardingSphereSchema schema = ProxyContext.getInstance().getDatabase(databaseName).getSchema(defaultSchema);
         return schema.getAllTableNames().stream().filter(each -> getSqlStatement().getTableNames().contains(each))
                 .map(each -> buildTableRows(databaseName, schema, each)).flatMap(Collection::stream).collect(Collectors.toList());
diff --git a/proxy/backend/src/main/java/org/apache/shardingsphere/proxy/backend/handler/distsql/ral/updatable/ImportDatabaseConfigurationHandler.java b/proxy/backend/src/main/java/org/apache/shardingsphere/proxy/backend/handler/distsql/ral/updatable/ImportDatabaseConfigurationHandler.java
index 7d0010eb611..d4bc64e4b72 100644
--- a/proxy/backend/src/main/java/org/apache/shardingsphere/proxy/backend/handler/distsql/ral/updatable/ImportDatabaseConfigurationHandler.java
+++ b/proxy/backend/src/main/java/org/apache/shardingsphere/proxy/backend/handler/distsql/ral/updatable/ImportDatabaseConfigurationHandler.java
@@ -123,7 +123,7 @@ public final class ImportDatabaseConfigurationHandler extends UpdatableRALBacken
         for (Entry<String, YamlProxyDataSourceConfiguration> entry : yamlDataSourceMap.entrySet()) {
             dataSourcePropsMap.put(entry.getKey(), DataSourcePropertiesCreator.create(HikariDataSource.class.getName(), dataSourceConfigSwapper.swap(entry.getValue())));
         }
-        validator.validate(dataSourcePropsMap, getConnectionSession().getDatabaseType());
+        validator.validate(dataSourcePropsMap, getConnectionSession().getProtocolType());
         try {
             ProxyContext.getInstance().getContextManager().addResources(databaseName, dataSourcePropsMap);
         } catch (final SQLException ex) {
diff --git a/proxy/backend/src/main/java/org/apache/shardingsphere/proxy/backend/handler/distsql/ral/updatable/RefreshTableMetadataHandler.java b/proxy/backend/src/main/java/org/apache/shardingsphere/proxy/backend/handler/distsql/ral/updatable/RefreshTableMetadataHandler.java
index 94433978398..7446e426324 100644
--- a/proxy/backend/src/main/java/org/apache/shardingsphere/proxy/backend/handler/distsql/ral/updatable/RefreshTableMetadataHandler.java
+++ b/proxy/backend/src/main/java/org/apache/shardingsphere/proxy/backend/handler/distsql/ral/updatable/RefreshTableMetadataHandler.java
@@ -80,6 +80,6 @@ public final class RefreshTableMetadataHandler extends UpdatableRALBackendHandle
     private String getSchemaName(final String databaseName) {
         return getSqlStatement().getSchemaName().isPresent()
                 ? getSqlStatement().getSchemaName().get()
-                : DatabaseTypeEngine.getDefaultSchemaName(getConnectionSession().getDatabaseType(), databaseName);
+                : DatabaseTypeEngine.getDefaultSchemaName(getConnectionSession().getProtocolType(), databaseName);
     }
 }
diff --git a/proxy/backend/src/main/java/org/apache/shardingsphere/proxy/backend/handler/distsql/rdl/resource/AddResourceBackendHandler.java b/proxy/backend/src/main/java/org/apache/shardingsphere/proxy/backend/handler/distsql/rdl/resource/AddResourceBackendHandler.java
index a46e798ecaa..d8493d2f76e 100644
--- a/proxy/backend/src/main/java/org/apache/shardingsphere/proxy/backend/handler/distsql/rdl/resource/AddResourceBackendHandler.java
+++ b/proxy/backend/src/main/java/org/apache/shardingsphere/proxy/backend/handler/distsql/rdl/resource/AddResourceBackendHandler.java
@@ -53,7 +53,7 @@ public final class AddResourceBackendHandler extends DatabaseRequiredBackendHand
     
     public AddResourceBackendHandler(final RegisterStorageUnitStatement sqlStatement, final ConnectionSession connectionSession) {
         super(sqlStatement, connectionSession);
-        databaseType = connectionSession.getDatabaseType();
+        databaseType = connectionSession.getProtocolType();
         validator = new DataSourcePropertiesValidator();
     }
     
diff --git a/proxy/backend/src/main/java/org/apache/shardingsphere/proxy/backend/handler/distsql/rdl/resource/AlterResourceBackendHandler.java b/proxy/backend/src/main/java/org/apache/shardingsphere/proxy/backend/handler/distsql/rdl/resource/AlterResourceBackendHandler.java
index 6081e10bb7a..ccd0d02ff88 100644
--- a/proxy/backend/src/main/java/org/apache/shardingsphere/proxy/backend/handler/distsql/rdl/resource/AlterResourceBackendHandler.java
+++ b/proxy/backend/src/main/java/org/apache/shardingsphere/proxy/backend/handler/distsql/rdl/resource/AlterResourceBackendHandler.java
@@ -60,7 +60,7 @@ public final class AlterResourceBackendHandler extends DatabaseRequiredBackendHa
     
     public AlterResourceBackendHandler(final AlterStorageUnitStatement sqlStatement, final ConnectionSession connectionSession) {
         super(sqlStatement, connectionSession);
-        databaseType = connectionSession.getDatabaseType();
+        databaseType = connectionSession.getProtocolType();
         validator = new DataSourcePropertiesValidator();
     }
     
diff --git a/proxy/backend/src/main/java/org/apache/shardingsphere/proxy/backend/handler/distsql/rul/sql/FormatSQLHandler.java b/proxy/backend/src/main/java/org/apache/shardingsphere/proxy/backend/handler/distsql/rul/sql/FormatSQLHandler.java
index 6693430ed64..d3991e01965 100644
--- a/proxy/backend/src/main/java/org/apache/shardingsphere/proxy/backend/handler/distsql/rul/sql/FormatSQLHandler.java
+++ b/proxy/backend/src/main/java/org/apache/shardingsphere/proxy/backend/handler/distsql/rul/sql/FormatSQLHandler.java
@@ -45,7 +45,7 @@ public final class FormatSQLHandler extends SQLRULBackendHandler<FormatStatement
     @Override
     protected Collection<LocalDataQueryResultRow> getRows(final ContextManager contextManager) {
         String sql = getSqlStatement().getSql();
-        String databaseType = getConnectionSession().getDatabaseType().getType();
+        String databaseType = getConnectionSession().getProtocolType().getType();
         return Collections.singleton(new LocalDataQueryResultRow(formatSQL(sql, databaseType)));
     }
     
diff --git a/proxy/backend/src/main/java/org/apache/shardingsphere/proxy/backend/handler/distsql/rul/sql/ParseDistSQLHandler.java b/proxy/backend/src/main/java/org/apache/shardingsphere/proxy/backend/handler/distsql/rul/sql/ParseDistSQLHandler.java
index 7ba53c587c0..89ba0ee15a2 100644
--- a/proxy/backend/src/main/java/org/apache/shardingsphere/proxy/backend/handler/distsql/rul/sql/ParseDistSQLHandler.java
+++ b/proxy/backend/src/main/java/org/apache/shardingsphere/proxy/backend/handler/distsql/rul/sql/ParseDistSQLHandler.java
@@ -51,7 +51,7 @@ public final class ParseDistSQLHandler extends SQLRULBackendHandler<ParseStateme
     
     private SQLStatement parseSQL(final ContextManager contextManager) {
         SQLParserRule sqlParserRule = contextManager.getMetaDataContexts().getMetaData().getGlobalRuleMetaData().getSingleRule(SQLParserRule.class);
-        String databaseType = getConnectionSession().getDatabaseType().getType();
+        String databaseType = getConnectionSession().getProtocolType().getType();
         return sqlParserRule.getSQLParserEngine(databaseType).parse(getSqlStatement().getSql(), false);
     }
 }
diff --git a/proxy/backend/src/main/java/org/apache/shardingsphere/proxy/backend/handler/distsql/rul/sql/PreviewHandler.java b/proxy/backend/src/main/java/org/apache/shardingsphere/proxy/backend/handler/distsql/rul/sql/PreviewHandler.java
index a6a064599ef..a1a60bcc77d 100644
--- a/proxy/backend/src/main/java/org/apache/shardingsphere/proxy/backend/handler/distsql/rul/sql/PreviewHandler.java
+++ b/proxy/backend/src/main/java/org/apache/shardingsphere/proxy/backend/handler/distsql/rul/sql/PreviewHandler.java
@@ -169,7 +169,7 @@ public final class PreviewHandler extends SQLRULBackendHandler<PreviewStatement>
         return new DriverExecutionPrepareEngine<>(JDBCDriverType.STATEMENT, maxConnectionsSizePerQuery, (JDBCBackendConnection) getConnectionSession().getBackendConnection(),
                 (JDBCBackendStatement) getConnectionSession().getStatementManager(), new StatementOption(isReturnGeneratedKeys),
                 metaDataContexts.getMetaData().getDatabase(getDatabaseName()).getRuleMetaData().getRules(),
-                metaDataContexts.getMetaData().getDatabase(getDatabaseName()).getResourceMetaData().getDatabaseType());
+                metaDataContexts.getMetaData().getDatabase(getDatabaseName()).getResourceMetaData().getDatabaseTypes());
     }
     
     private String getDatabaseName() {
diff --git a/proxy/backend/src/main/java/org/apache/shardingsphere/proxy/backend/handler/transaction/TransactionBackendHandler.java b/proxy/backend/src/main/java/org/apache/shardingsphere/proxy/backend/handler/transaction/TransactionBackendHandler.java
index 3ba09e8d8be..ff4a8af6e99 100644
--- a/proxy/backend/src/main/java/org/apache/shardingsphere/proxy/backend/handler/transaction/TransactionBackendHandler.java
+++ b/proxy/backend/src/main/java/org/apache/shardingsphere/proxy/backend/handler/transaction/TransactionBackendHandler.java
@@ -83,10 +83,10 @@ public final class TransactionBackendHandler implements ProxyBackendHandler {
         switch (operationType) {
             case BEGIN:
                 if (connectionSession.getTransactionStatus().isInTransaction()) {
-                    if (connectionSession.getDatabaseType() instanceof MySQLDatabaseType) {
+                    if (connectionSession.getProtocolType() instanceof MySQLDatabaseType) {
                         return transactionManager.commit().compose(unused -> transactionManager.begin());
                     }
-                    if (connectionSession.getDatabaseType() instanceof PostgreSQLDatabaseType || connectionSession.getDatabaseType() instanceof OpenGaussDatabaseType) {
+                    if (connectionSession.getProtocolType() instanceof PostgreSQLDatabaseType || connectionSession.getProtocolType() instanceof OpenGaussDatabaseType) {
                         return Future.failedFuture(new InTransactionException());
                     }
                 }
@@ -139,9 +139,9 @@ public final class TransactionBackendHandler implements ProxyBackendHandler {
     
     private void handleBegin() throws SQLException {
         if (connectionSession.getTransactionStatus().isInTransaction()) {
-            if (connectionSession.getDatabaseType() instanceof MySQLDatabaseType) {
+            if (connectionSession.getProtocolType() instanceof MySQLDatabaseType) {
                 backendTransactionManager.commit();
-            } else if (connectionSession.getDatabaseType() instanceof PostgreSQLDatabaseType || connectionSession.getDatabaseType() instanceof OpenGaussDatabaseType) {
+            } else if (connectionSession.getProtocolType() instanceof PostgreSQLDatabaseType || connectionSession.getProtocolType() instanceof OpenGaussDatabaseType) {
                 throw new InTransactionException();
             }
         }
@@ -167,7 +167,7 @@ public final class TransactionBackendHandler implements ProxyBackendHandler {
     }
     
     private boolean isPostgreSQLOrOpenGauss() {
-        return connectionSession.getDatabaseType() instanceof PostgreSQLDatabaseType || connectionSession.getDatabaseType() instanceof OpenGaussDatabaseType;
+        return connectionSession.getProtocolType() instanceof PostgreSQLDatabaseType || connectionSession.getProtocolType() instanceof OpenGaussDatabaseType;
     }
     
     private SQLStatement getSQLStatementByCommit() {
diff --git a/proxy/backend/src/main/java/org/apache/shardingsphere/proxy/backend/session/ConnectionSession.java b/proxy/backend/src/main/java/org/apache/shardingsphere/proxy/backend/session/ConnectionSession.java
index 72b5e07ff48..62c4a724808 100644
--- a/proxy/backend/src/main/java/org/apache/shardingsphere/proxy/backend/session/ConnectionSession.java
+++ b/proxy/backend/src/main/java/org/apache/shardingsphere/proxy/backend/session/ConnectionSession.java
@@ -45,7 +45,7 @@ import org.apache.shardingsphere.transaction.core.TransactionType;
 @Setter
 public final class ConnectionSession {
     
-    private final DatabaseType databaseType;
+    private final DatabaseType protocolType;
     
     @Setter(AccessLevel.NONE)
     private volatile String databaseName;
@@ -80,8 +80,8 @@ public final class ConnectionSession {
     
     private QueryContext queryContext;
     
-    public ConnectionSession(final DatabaseType databaseType, final TransactionType initialTransactionType, final AttributeMap attributeMap) {
-        this.databaseType = databaseType;
+    public ConnectionSession(final DatabaseType protocolType, final TransactionType initialTransactionType, final AttributeMap attributeMap) {
+        this.protocolType = protocolType;
         transactionStatus = new TransactionStatus(initialTransactionType);
         this.attributeMap = attributeMap;
         backendConnection = determineBackendConnection();
diff --git a/proxy/backend/src/test/java/org/apache/shardingsphere/proxy/backend/communication/jdbc/connection/JDBCBackendConnectionTest.java b/proxy/backend/src/test/java/org/apache/shardingsphere/proxy/backend/communication/jdbc/connection/JDBCBackendConnectionTest.java
index 2c69781ccf1..4bf24ecf000 100644
--- a/proxy/backend/src/test/java/org/apache/shardingsphere/proxy/backend/communication/jdbc/connection/JDBCBackendConnectionTest.java
+++ b/proxy/backend/src/test/java/org/apache/shardingsphere/proxy/backend/communication/jdbc/connection/JDBCBackendConnectionTest.java
@@ -103,7 +103,6 @@ public final class JDBCBackendConnectionTest extends ProxyContextRestorer {
         when(connectionSession.getBackendConnection()).thenReturn(backendConnection);
         when(connectionSession.getTransactionStatus()).thenReturn(new TransactionStatus(TransactionType.LOCAL));
         JDBCBackendStatement backendStatement = new JDBCBackendStatement();
-        backendStatement.setDatabaseType(connectionSession.getDatabaseType());
         when(connectionSession.getStatementManager()).thenReturn(backendStatement);
         when(connectionSession.getRequiredSessionVariableRecorder()).thenReturn(new RequiredSessionVariableRecorder());
     }
@@ -269,7 +268,7 @@ public final class JDBCBackendConnectionTest extends ProxyContextRestorer {
         Statement statement = mock(Statement.class);
         when(connection.createStatement()).thenReturn(statement);
         JDBCBackendStatement backendStatement = (JDBCBackendStatement) connectionSession.getStatementManager();
-        assertThat(backendStatement.createStorageResource(connection, ConnectionMode.MEMORY_STRICTLY, null), is(statement));
+        assertThat(backendStatement.createStorageResource(connection, ConnectionMode.MEMORY_STRICTLY, null, connectionSession.getProtocolType()), is(statement));
         verify(connection, times(1)).createStatement();
     }
     
diff --git a/proxy/backend/src/test/java/org/apache/shardingsphere/proxy/backend/handler/admin/opengauss/OpenGaussSystemCatalogAdminQueryExecutorTest.java b/proxy/backend/src/test/java/org/apache/shardingsphere/proxy/backend/handler/admin/opengauss/OpenGaussSystemCatalogAdminQueryExecutorTest.java
index 681e76e55b9..4e419f92115 100644
--- a/proxy/backend/src/test/java/org/apache/shardingsphere/proxy/backend/handler/admin/opengauss/OpenGaussSystemCatalogAdminQueryExecutorTest.java
+++ b/proxy/backend/src/test/java/org/apache/shardingsphere/proxy/backend/handler/admin/opengauss/OpenGaussSystemCatalogAdminQueryExecutorTest.java
@@ -47,7 +47,7 @@ public final class OpenGaussSystemCatalogAdminQueryExecutorTest {
             when(ProxyContext.getInstance().getAllDatabaseNames()).thenReturn(Arrays.asList("foo", "bar", "sharding_db", "other_db"));
             OpenGaussSystemCatalogAdminQueryExecutor executor = new OpenGaussSystemCatalogAdminQueryExecutor("select datname, datcompatibility from pg_database where datname = 'sharding_db'");
             ConnectionSession connectionSession = mock(ConnectionSession.class);
-            when(connectionSession.getDatabaseType()).thenReturn(new OpenGaussDatabaseType());
+            when(connectionSession.getProtocolType()).thenReturn(new OpenGaussDatabaseType());
             executor.execute(connectionSession);
             QueryResultMetaData actualMetaData = executor.getQueryResultMetaData();
             assertThat(actualMetaData.getColumnCount(), is(2));
@@ -66,7 +66,7 @@ public final class OpenGaussSystemCatalogAdminQueryExecutorTest {
             mockedStatic.when(ProxyContext::getInstance).thenReturn(mock(ProxyContext.class, RETURNS_DEEP_STUBS));
             OpenGaussSystemCatalogAdminQueryExecutor executor = new OpenGaussSystemCatalogAdminQueryExecutor("select VERSION()");
             ConnectionSession connectionSession = mock(ConnectionSession.class);
-            when(connectionSession.getDatabaseType()).thenReturn(new OpenGaussDatabaseType());
+            when(connectionSession.getProtocolType()).thenReturn(new OpenGaussDatabaseType());
             executor.execute(connectionSession);
             QueryResultMetaData actualMetaData = executor.getQueryResultMetaData();
             assertThat(actualMetaData.getColumnCount(), is(1));
@@ -83,7 +83,7 @@ public final class OpenGaussSystemCatalogAdminQueryExecutorTest {
             mockedStatic.when(ProxyContext::getInstance).thenReturn(mock(ProxyContext.class, RETURNS_DEEP_STUBS));
             OpenGaussSystemCatalogAdminQueryExecutor executor = new OpenGaussSystemCatalogAdminQueryExecutor("select intervaltonum(gs_password_deadline())");
             ConnectionSession connectionSession = mock(ConnectionSession.class);
-            when(connectionSession.getDatabaseType()).thenReturn(new OpenGaussDatabaseType());
+            when(connectionSession.getProtocolType()).thenReturn(new OpenGaussDatabaseType());
             executor.execute(connectionSession);
             QueryResultMetaData actualMetaData = executor.getQueryResultMetaData();
             assertThat(actualMetaData.getColumnCount(), is(1));
@@ -100,7 +100,7 @@ public final class OpenGaussSystemCatalogAdminQueryExecutorTest {
             mockedStatic.when(ProxyContext::getInstance).thenReturn(mock(ProxyContext.class, RETURNS_DEEP_STUBS));
             OpenGaussSystemCatalogAdminQueryExecutor executor = new OpenGaussSystemCatalogAdminQueryExecutor("select gs_password_notifytime()");
             ConnectionSession connectionSession = mock(ConnectionSession.class);
-            when(connectionSession.getDatabaseType()).thenReturn(new OpenGaussDatabaseType());
+            when(connectionSession.getProtocolType()).thenReturn(new OpenGaussDatabaseType());
             executor.execute(connectionSession);
             QueryResultMetaData actualMetaData = executor.getQueryResultMetaData();
             assertThat(actualMetaData.getColumnCount(), is(1));
diff --git a/proxy/backend/src/test/java/org/apache/shardingsphere/proxy/backend/handler/distsql/ral/advance/ParseDistSQLHandlerTest.java b/proxy/backend/src/test/java/org/apache/shardingsphere/proxy/backend/handler/distsql/ral/advance/ParseDistSQLHandlerTest.java
index 28cf3e61478..7978c838b32 100644
--- a/proxy/backend/src/test/java/org/apache/shardingsphere/proxy/backend/handler/distsql/ral/advance/ParseDistSQLHandlerTest.java
+++ b/proxy/backend/src/test/java/org/apache/shardingsphere/proxy/backend/handler/distsql/ral/advance/ParseDistSQLHandlerTest.java
@@ -68,7 +68,7 @@ public final class ParseDistSQLHandlerTest extends ProxyContextRestorer {
     @Test
     public void assertGetRowDataForMySQL() throws SQLException {
         String sql = "select * from t_order";
-        when(connectionSession.getDatabaseType()).thenReturn(new MySQLDatabaseType());
+        when(connectionSession.getProtocolType()).thenReturn(new MySQLDatabaseType());
         ParseStatement parseStatement = new ParseStatement(sql);
         ParseDistSQLHandler parseDistSQLHandler = new ParseDistSQLHandler();
         parseDistSQLHandler.init(parseStatement, connectionSession);
@@ -82,7 +82,7 @@ public final class ParseDistSQLHandlerTest extends ProxyContextRestorer {
     @Test
     public void assertGetRowDataForPostgreSQL() throws SQLException {
         String sql = "select * from t_order";
-        when(connectionSession.getDatabaseType()).thenReturn(new PostgreSQLDatabaseType());
+        when(connectionSession.getProtocolType()).thenReturn(new PostgreSQLDatabaseType());
         ParseStatement parseStatement = new ParseStatement(sql);
         ParseDistSQLHandler parseDistSQLHandler = new ParseDistSQLHandler();
         parseDistSQLHandler.init(parseStatement, connectionSession);
@@ -96,7 +96,7 @@ public final class ParseDistSQLHandlerTest extends ProxyContextRestorer {
     @Test(expected = SQLParsingException.class)
     public void assertExecute() throws SQLException {
         String sql = "wrong sql";
-        when(connectionSession.getDatabaseType()).thenReturn(new MySQLDatabaseType());
+        when(connectionSession.getProtocolType()).thenReturn(new MySQLDatabaseType());
         ParseStatement parseStatement = new ParseStatement(sql);
         ParseDistSQLHandler parseDistSQLHandler = new ParseDistSQLHandler();
         parseDistSQLHandler.init(parseStatement, connectionSession);
diff --git a/proxy/backend/src/test/java/org/apache/shardingsphere/proxy/backend/handler/distsql/rdl/resource/AddResourceBackendHandlerTest.java b/proxy/backend/src/test/java/org/apache/shardingsphere/proxy/backend/handler/distsql/rdl/resource/AddResourceBackendHandlerTest.java
index 12f3459370f..316d0971a7b 100644
--- a/proxy/backend/src/test/java/org/apache/shardingsphere/proxy/backend/handler/distsql/rdl/resource/AddResourceBackendHandlerTest.java
+++ b/proxy/backend/src/test/java/org/apache/shardingsphere/proxy/backend/handler/distsql/rdl/resource/AddResourceBackendHandlerTest.java
@@ -79,7 +79,7 @@ public final class AddResourceBackendHandlerTest extends ProxyContextRestorer {
     public void setUp() throws Exception {
         when(metaDataContexts.getMetaData().getDatabase("test_db")).thenReturn(database);
         when(metaDataContexts.getMetaData().containsDatabase("test_db")).thenReturn(true);
-        when(connectionSession.getDatabaseType()).thenReturn(new MySQLDatabaseType());
+        when(connectionSession.getProtocolType()).thenReturn(new MySQLDatabaseType());
         addResourceBackendHandler = new AddResourceBackendHandler(registerStorageUnitStatement, connectionSession);
         Field field = addResourceBackendHandler.getClass().getDeclaredField("validator");
         field.setAccessible(true);
diff --git a/proxy/backend/src/test/java/org/apache/shardingsphere/proxy/backend/handler/distsql/rdl/resource/AlterResourceBackendHandlerTest.java b/proxy/backend/src/test/java/org/apache/shardingsphere/proxy/backend/handler/distsql/rdl/resource/AlterResourceBackendHandlerTest.java
index fb341f0402b..129004cbf62 100644
--- a/proxy/backend/src/test/java/org/apache/shardingsphere/proxy/backend/handler/distsql/rdl/resource/AlterResourceBackendHandlerTest.java
+++ b/proxy/backend/src/test/java/org/apache/shardingsphere/proxy/backend/handler/distsql/rdl/resource/AlterResourceBackendHandlerTest.java
@@ -86,7 +86,7 @@ public final class AlterResourceBackendHandlerTest extends ProxyContextRestorer
     public void setUp() throws Exception {
         when(metaDataContexts.getMetaData().getDatabase("test_db")).thenReturn(database);
         when(metaDataContexts.getMetaData().containsDatabase("test_db")).thenReturn(true);
-        when(connectionSession.getDatabaseType()).thenReturn(new MySQLDatabaseType());
+        when(connectionSession.getProtocolType()).thenReturn(new MySQLDatabaseType());
         alterResourceBackendHandler = new AlterResourceBackendHandler(alterStorageUnitStatement, connectionSession);
         Field field = alterResourceBackendHandler.getClass().getDeclaredField("validator");
         field.setAccessible(true);
diff --git a/proxy/frontend/mysql/src/main/java/org/apache/shardingsphere/proxy/frontend/mysql/command/query/text/query/MySQLMultiStatementsHandler.java b/proxy/frontend/mysql/src/main/java/org/apache/shardingsphere/proxy/frontend/mysql/command/query/text/query/MySQLMultiStatementsHandler.java
index 9cec6009e95..f2e83d9e3d6 100644
--- a/proxy/frontend/mysql/src/main/java/org/apache/shardingsphere/proxy/frontend/mysql/command/query/text/query/MySQLMultiStatementsHandler.java
+++ b/proxy/frontend/mysql/src/main/java/org/apache/shardingsphere/proxy/frontend/mysql/command/query/text/query/MySQLMultiStatementsHandler.java
@@ -139,7 +139,8 @@ public final class MySQLMultiStatementsHandler implements ProxyBackendHandler {
         Collection<ShardingSphereRule> rules = metaDataContexts.getMetaData().getDatabase(connectionSession.getDatabaseName()).getRuleMetaData().getRules();
         DriverExecutionPrepareEngine<JDBCExecutionUnit, Connection> prepareEngine = new DriverExecutionPrepareEngine<>(JDBCDriverType.STATEMENT, metaDataContexts.getMetaData().getProps()
                 .<Integer>getValue(ConfigurationPropertyKey.MAX_CONNECTIONS_SIZE_PER_QUERY), (JDBCBackendConnection) connectionSession.getBackendConnection(),
-                (JDBCBackendStatement) connectionSession.getStatementManager(), new StatementOption(false), rules, connectionSession.getDatabaseType());
+                (JDBCBackendStatement) connectionSession.getStatementManager(), new StatementOption(false), rules,
+                metaDataContexts.getMetaData().getDatabase(connectionSession.getDatabaseName()).getResourceMetaData().getDatabaseTypes());
         ExecutionGroupContext<JDBCExecutionUnit> executionGroupContext = prepareEngine.prepare(anyExecutionContext.getRouteContext(), samplingExecutionUnit());
         for (ExecutionGroup<JDBCExecutionUnit> eachGroup : executionGroupContext.getInputGroups()) {
             for (JDBCExecutionUnit each : eachGroup.getInputs()) {
diff --git a/proxy/frontend/mysql/src/test/java/org/apache/shardingsphere/proxy/frontend/mysql/command/query/text/query/MySQLMultiStatementsHandlerTest.java b/proxy/frontend/mysql/src/test/java/org/apache/shardingsphere/proxy/frontend/mysql/command/query/text/query/MySQLMultiStatementsHandlerTest.java
index f8f1734bf24..9b48442eb2f 100644
--- a/proxy/frontend/mysql/src/test/java/org/apache/shardingsphere/proxy/frontend/mysql/command/query/text/query/MySQLMultiStatementsHandlerTest.java
+++ b/proxy/frontend/mysql/src/test/java/org/apache/shardingsphere/proxy/frontend/mysql/command/query/text/query/MySQLMultiStatementsHandlerTest.java
@@ -18,6 +18,7 @@
 package org.apache.shardingsphere.proxy.frontend.mysql.command.query.text.query;
 
 import org.apache.shardingsphere.infra.config.props.ConfigurationPropertyKey;
+import org.apache.shardingsphere.infra.database.type.DatabaseType;
 import org.apache.shardingsphere.infra.database.type.dialect.MySQLDatabaseType;
 import org.apache.shardingsphere.infra.executor.sql.execute.engine.ConnectionMode;
 import org.apache.shardingsphere.infra.executor.sql.prepare.driver.jdbc.StatementOption;
@@ -82,7 +83,7 @@ public final class MySQLMultiStatementsHandlerTest {
         when(connection.getMetaData().getURL()).thenReturn("jdbc:mysql://127.0.0.1/db");
         when(backendConnection.getConnections(nullable(String.class), anyInt(), any(ConnectionMode.class))).thenReturn(Collections.singletonList(connection));
         Statement statement = mock(Statement.class);
-        when(backendStatement.createStorageResource(eq(connection), any(ConnectionMode.class), any(StatementOption.class))).thenReturn(statement);
+        when(backendStatement.createStorageResource(eq(connection), any(ConnectionMode.class), any(StatementOption.class), any(DatabaseType.class))).thenReturn(statement);
         when(statement.getConnection()).thenReturn(connection);
         when(statement.executeBatch()).thenReturn(new int[]{1, 1, 1});
         MySQLUpdateStatement expectedStatement = mock(MySQLUpdateStatement.class);
diff --git a/proxy/frontend/opengauss/src/test/java/org/apache/shardingsphere/proxy/frontend/opengauss/command/query/extended/bind/OpenGaussComBatchBindExecutorTest.java b/proxy/frontend/opengauss/src/test/java/org/apache/shardingsphere/proxy/frontend/opengauss/command/query/extended/bind/OpenGaussComBatchBindExecutorTest.java
index e953762e735..de592d21e2c 100644
--- a/proxy/frontend/opengauss/src/test/java/org/apache/shardingsphere/proxy/frontend/opengauss/command/query/extended/bind/OpenGaussComBatchBindExecutorTest.java
+++ b/proxy/frontend/opengauss/src/test/java/org/apache/shardingsphere/proxy/frontend/opengauss/command/query/extended/bind/OpenGaussComBatchBindExecutorTest.java
@@ -22,6 +22,7 @@ import org.apache.shardingsphere.db.protocol.packet.DatabasePacket;
 import org.apache.shardingsphere.db.protocol.postgresql.packet.command.query.extended.bind.PostgreSQLBindCompletePacket;
 import org.apache.shardingsphere.db.protocol.postgresql.packet.generic.PostgreSQLCommandCompletePacket;
 import org.apache.shardingsphere.infra.config.props.ConfigurationPropertyKey;
+import org.apache.shardingsphere.infra.database.type.DatabaseType;
 import org.apache.shardingsphere.infra.executor.sql.context.ExecutionUnit;
 import org.apache.shardingsphere.infra.executor.sql.execute.engine.ConnectionMode;
 import org.apache.shardingsphere.infra.executor.sql.prepare.driver.jdbc.StatementOption;
@@ -91,7 +92,8 @@ public final class OpenGaussComBatchBindExecutorTest extends ProxyContextRestore
         PreparedStatement preparedStatement = mock(PreparedStatement.class);
         when(preparedStatement.getConnection()).thenReturn(connection);
         JDBCBackendStatement backendStatement = mock(JDBCBackendStatement.class);
-        when(backendStatement.createStorageResource(any(ExecutionUnit.class), any(Connection.class), any(ConnectionMode.class), any(StatementOption.class))).thenReturn(preparedStatement);
+        when(backendStatement.createStorageResource(any(ExecutionUnit.class), any(Connection.class), any(ConnectionMode.class), any(StatementOption.class), any(DatabaseType.class)))
+                .thenReturn(preparedStatement);
         when(connectionSession.getStatementManager()).thenReturn(backendStatement);
         when(connectionSession.getBackendConnection()).thenReturn(backendConnection);
         when(connectionSession.getServerPreparedStatementRegistry()).thenReturn(new ServerPreparedStatementRegistry());
diff --git a/proxy/frontend/postgresql/src/main/java/org/apache/shardingsphere/proxy/frontend/postgresql/command/query/extended/PostgreSQLBatchedStatementsExecutor.java b/proxy/frontend/postgresql/src/main/java/org/apache/shardingsphere/proxy/frontend/postgresql/command/query/extended/PostgreSQLBatchedStatementsExecutor.java
index ddab76fda8a..1b0872c6da6 100644
--- a/proxy/frontend/postgresql/src/main/java/org/apache/shardingsphere/proxy/frontend/postgresql/command/query/extended/PostgreSQLBatchedStatementsExecutor.java
+++ b/proxy/frontend/postgresql/src/main/java/org/apache/shardingsphere/proxy/frontend/postgresql/command/query/extended/PostgreSQLBatchedStatementsExecutor.java
@@ -148,7 +148,7 @@ public final class PostgreSQLBatchedStatementsExecutor {
         DriverExecutionPrepareEngine<JDBCExecutionUnit, Connection> prepareEngine = new DriverExecutionPrepareEngine<>(JDBCDriverType.PREPARED_STATEMENT,
                 metaDataContexts.getMetaData().getProps().<Integer>getValue(ConfigurationPropertyKey.MAX_CONNECTIONS_SIZE_PER_QUERY),
                 (JDBCBackendConnection) connectionSession.getBackendConnection(), (JDBCBackendStatement) connectionSession.getStatementManager(),
-                new StatementOption(false), rules, connectionSession.getDatabaseType());
+                new StatementOption(false), rules, metaDataContexts.getMetaData().getDatabase(connectionSession.getDatabaseName()).getResourceMetaData().getDatabaseTypes());
         executionGroupContext = prepareEngine.prepare(anyExecutionContext.getRouteContext(), executionUnitParameters.keySet());
         for (ExecutionGroup<JDBCExecutionUnit> eachGroup : executionGroupContext.getInputGroups()) {
             for (JDBCExecutionUnit each : eachGroup.getInputs()) {
diff --git a/proxy/frontend/postgresql/src/test/java/org/apache/shardingsphere/proxy/frontend/postgresql/command/query/extended/PostgreSQLAggregatedBatchedStatementsCommandExecutorTest.java b/proxy/frontend/postgresql/src/test/java/org/apache/shardingsphere/proxy/frontend/postgresql/command/query/extended/PostgreSQLAggregatedBatchedStatementsCommandExecutorTest.java
index ea4bb37b9d0..74c391b90f9 100644
--- a/proxy/frontend/postgresql/src/test/java/org/apache/shardingsphere/proxy/frontend/postgresql/command/query/extended/PostgreSQLAggregatedBatchedStatementsCommandExecutorTest.java
+++ b/proxy/frontend/postgresql/src/test/java/org/apache/shardingsphere/proxy/frontend/postgresql/command/query/extended/PostgreSQLAggregatedBatchedStatementsCommandExecutorTest.java
@@ -27,6 +27,7 @@ import org.apache.shardingsphere.db.protocol.postgresql.packet.command.query.ext
 import org.apache.shardingsphere.db.protocol.postgresql.packet.command.query.extended.execute.PostgreSQLComExecutePacket;
 import org.apache.shardingsphere.db.protocol.postgresql.packet.generic.PostgreSQLCommandCompletePacket;
 import org.apache.shardingsphere.infra.config.props.ConfigurationPropertyKey;
+import org.apache.shardingsphere.infra.database.type.DatabaseType;
 import org.apache.shardingsphere.infra.executor.sql.context.ExecutionUnit;
 import org.apache.shardingsphere.infra.executor.sql.execute.engine.ConnectionMode;
 import org.apache.shardingsphere.infra.executor.sql.prepare.driver.jdbc.StatementOption;
@@ -100,7 +101,8 @@ public final class PostgreSQLAggregatedBatchedStatementsCommandExecutorTest exte
         PreparedStatement preparedStatement = mock(PreparedStatement.class);
         when(preparedStatement.getConnection()).thenReturn(connection);
         JDBCBackendStatement backendStatement = mock(JDBCBackendStatement.class);
-        when(backendStatement.createStorageResource(any(ExecutionUnit.class), any(Connection.class), any(ConnectionMode.class), any(StatementOption.class))).thenReturn(preparedStatement);
+        when(backendStatement.createStorageResource(any(ExecutionUnit.class), any(Connection.class), any(ConnectionMode.class), any(StatementOption.class), any(DatabaseType.class)))
+                .thenReturn(preparedStatement);
         when(connectionSession.getStatementManager()).thenReturn(backendStatement);
         when(connectionSession.getBackendConnection()).thenReturn(backendConnection);
         PostgreSQLAggregatedBatchedStatementsCommandExecutor batchedStatementsCommandExecutor = new PostgreSQLAggregatedBatchedStatementsCommandExecutor(connectionSession, preparePackets());
diff --git a/proxy/frontend/postgresql/src/test/java/org/apache/shardingsphere/proxy/frontend/postgresql/command/query/extended/PostgreSQLBatchedStatementsExecutorTest.java b/proxy/frontend/postgresql/src/test/java/org/apache/shardingsphere/proxy/frontend/postgresql/command/query/extended/PostgreSQLBatchedStatementsExecutorTest.java
index a5669bb6b2a..4025b555b94 100644
--- a/proxy/frontend/postgresql/src/test/java/org/apache/shardingsphere/proxy/frontend/postgresql/command/query/extended/PostgreSQLBatchedStatementsExecutorTest.java
+++ b/proxy/frontend/postgresql/src/test/java/org/apache/shardingsphere/proxy/frontend/postgresql/command/query/extended/PostgreSQLBatchedStatementsExecutorTest.java
@@ -21,6 +21,7 @@ import lombok.SneakyThrows;
 import org.apache.shardingsphere.db.protocol.postgresql.packet.command.query.extended.PostgreSQLColumnType;
 import org.apache.shardingsphere.db.protocol.postgresql.packet.command.query.extended.bind.PostgreSQLTypeUnspecifiedSQLParameter;
 import org.apache.shardingsphere.infra.config.props.ConfigurationPropertyKey;
+import org.apache.shardingsphere.infra.database.type.DatabaseType;
 import org.apache.shardingsphere.infra.executor.sql.context.ExecutionUnit;
 import org.apache.shardingsphere.infra.executor.sql.execute.engine.ConnectionMode;
 import org.apache.shardingsphere.infra.executor.sql.prepare.driver.jdbc.StatementOption;
@@ -105,7 +106,8 @@ public final class PostgreSQLBatchedStatementsExecutorTest extends ProxyContextR
         PreparedStatement preparedStatement = mock(PreparedStatement.class);
         when(preparedStatement.getConnection()).thenReturn(connection);
         when(preparedStatement.executeBatch()).thenReturn(new int[]{1, 1, 1});
-        when(backendStatement.createStorageResource(any(ExecutionUnit.class), eq(connection), any(ConnectionMode.class), any(StatementOption.class))).thenReturn(preparedStatement);
+        when(backendStatement.createStorageResource(any(ExecutionUnit.class), eq(connection), any(ConnectionMode.class), any(StatementOption.class), any(DatabaseType.class)))
+                .thenReturn(preparedStatement);
         PostgreSQLBatchedStatementsExecutor actual = new PostgreSQLBatchedStatementsExecutor(connectionSession, postgreSQLPreparedStatement, parameterSets);
         prepareExecutionUnitParameters(actual, parameterSets);
         int actualUpdated = actual.executeBatch();
diff --git a/test/parser/src/main/java/org/apache/shardingsphere/test/sql/parser/parameterized/jaxb/cases/domain/statement/dal/EmptyStatementTestCase.java b/test/parser/src/main/java/org/apache/shardingsphere/test/sql/parser/parameterized/jaxb/cases/domain/statement/dal/EmptyStatementTestCase.java
index 58b93ad95fb..93d6a1fba91 100644
--- a/test/parser/src/main/java/org/apache/shardingsphere/test/sql/parser/parameterized/jaxb/cases/domain/statement/dal/EmptyStatementTestCase.java
+++ b/test/parser/src/main/java/org/apache/shardingsphere/test/sql/parser/parameterized/jaxb/cases/domain/statement/dal/EmptyStatementTestCase.java
@@ -5,7 +5,7 @@
  * 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