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

zhangliang pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/shardingsphere.git


The following commit(s) were added to refs/heads/master by this push:
     new 3043ec0425c Fix error from database is not thrown as expected (#19525)
3043ec0425c is described below

commit 3043ec0425c1a8be75edf4fadef59f4f9e789a1b
Author: 吴伟杰 <[email protected]>
AuthorDate: Tue Jul 26 09:26:19 2022 +0800

    Fix error from database is not thrown as expected (#19525)
    
    * Fix error from database is not thrown as expected
    
    * Complete JDBCExecutorCallbackTest
    
    * Format code JDBCExecutorCallbackTest
---
 .../engine/driver/jdbc/JDBCExecutorCallback.java   | 17 +++++----
 .../engine/jdbc/JDBCExecutorCallbackTest.java      | 42 ++++++++++++++++++++--
 .../jdbc/JDBCDatabaseCommunicationEngine.java      |  6 ++--
 .../jdbc/executor/ProxyJDBCExecutor.java           | 11 ++++--
 .../callback/ProxyJDBCExecutorCallback.java        |  5 +--
 .../callback/ProxyJDBCExecutorCallbackFactory.java |  7 ++--
 .../ProxyPreparedStatementExecutorCallback.java    |  7 ++--
 .../impl/ProxyStatementExecutorCallback.java       |  7 ++--
 .../text/query/MySQLMultiStatementsHandler.java    |  3 +-
 .../PostgreSQLBatchedStatementsExecutor.java       | 11 +++---
 10 files changed, 87 insertions(+), 29 deletions(-)

diff --git 
a/shardingsphere-infra/shardingsphere-infra-executor/src/main/java/org/apache/shardingsphere/infra/executor/sql/execute/engine/driver/jdbc/JDBCExecutorCallback.java
 
b/shardingsphere-infra/shardingsphere-infra-executor/src/main/java/org/apache/shardingsphere/infra/executor/sql/execute/engine/driver/jdbc/JDBCExecutorCallback.java
index c2e9e651863..e14ac6b658a 100644
--- 
a/shardingsphere-infra/shardingsphere-infra-executor/src/main/java/org/apache/shardingsphere/infra/executor/sql/execute/engine/driver/jdbc/JDBCExecutorCallback.java
+++ 
b/shardingsphere-infra/shardingsphere-infra-executor/src/main/java/org/apache/shardingsphere/infra/executor/sql/execute/engine/driver/jdbc/JDBCExecutorCallback.java
@@ -52,6 +52,8 @@ public abstract class JDBCExecutorCallback<T> implements 
ExecutorCallback<JDBCEx
     
     private static final Map<String, DataSourceMetaData> 
CACHED_DATASOURCE_METADATA = new ConcurrentHashMap<>();
     
+    private final DatabaseType protocolType;
+    
     @Getter
     private final DatabaseType databaseType;
     
@@ -61,6 +63,10 @@ public abstract class JDBCExecutorCallback<T> implements 
ExecutorCallback<JDBCEx
     
     private final EventBusContext eventBusContext;
     
+    public JDBCExecutorCallback(final DatabaseType databaseType, final 
SQLStatement sqlStatement, final boolean isExceptionThrown, final 
EventBusContext eventBusContext) {
+        this(databaseType, databaseType, sqlStatement, isExceptionThrown, 
eventBusContext);
+    }
+    
     @Override
     public final Collection<T> execute(final Collection<JDBCExecutionUnit> 
executionUnits, final boolean isTrunkThread, final Map<String, Object> dataMap) 
throws SQLException {
         // TODO It is better to judge whether need sane result before execute, 
can avoid exception thrown
@@ -91,12 +97,11 @@ public abstract class JDBCExecutorCallback<T> implements 
ExecutorCallback<JDBCEx
             finishReport(dataMap, jdbcExecutionUnit);
             return result;
         } catch (final SQLException ex) {
-            if (!isTrunkThread) {
-                return null;
-            }
-            Optional<T> saneResult = getSaneResult(sqlStatement, ex);
-            if (saneResult.isPresent()) {
-                return saneResult.get();
+            if (!databaseType.equals(protocolType)) {
+                Optional<T> saneResult = getSaneResult(sqlStatement, ex);
+                if (saneResult.isPresent()) {
+                    return isTrunkThread ? saneResult.get() : null;
+                }
             }
             sqlExecutionHook.finishFailure(ex);
             SQLExecutorExceptionHandler.handleException(ex);
diff --git 
a/shardingsphere-infra/shardingsphere-infra-executor/src/test/java/org/apache/shardingsphere/infra/executor/sql/execute/engine/jdbc/JDBCExecutorCallbackTest.java
 
b/shardingsphere-infra/shardingsphere-infra-executor/src/test/java/org/apache/shardingsphere/infra/executor/sql/execute/engine/jdbc/JDBCExecutorCallbackTest.java
index e8360a551cb..118578456fc 100644
--- 
a/shardingsphere-infra/shardingsphere-infra-executor/src/test/java/org/apache/shardingsphere/infra/executor/sql/execute/engine/jdbc/JDBCExecutorCallbackTest.java
+++ 
b/shardingsphere-infra/shardingsphere-infra-executor/src/test/java/org/apache/shardingsphere/infra/executor/sql/execute/engine/jdbc/JDBCExecutorCallbackTest.java
@@ -23,6 +23,7 @@ import 
org.apache.shardingsphere.infra.eventbus.EventBusContext;
 import org.apache.shardingsphere.infra.executor.sql.context.ExecutionUnit;
 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.SQLExecutorExceptionHandler;
 import 
org.apache.shardingsphere.infra.executor.sql.execute.engine.driver.jdbc.JDBCExecutionUnit;
 import 
org.apache.shardingsphere.infra.executor.sql.execute.engine.driver.jdbc.JDBCExecutorCallback;
 import org.apache.shardingsphere.sql.parser.sql.common.statement.SQLStatement;
@@ -46,7 +47,6 @@ import java.util.Optional;
 
 import static org.hamcrest.CoreMatchers.is;
 import static org.junit.Assert.assertThat;
-import static org.junit.Assert.assertTrue;
 import static org.mockito.Mockito.mock;
 import static org.mockito.Mockito.when;
 
@@ -71,6 +71,7 @@ public final class JDBCExecutorCallbackTest {
         
when(databaseMetaData.getURL()).thenReturn("jdbc:mysql://localhost:3306/test");
         units = Collections.singletonList(
                 new JDBCExecutionUnit(new ExecutionUnit("ds", new 
SQLUnit("SELECT now()", Collections.emptyList())), 
ConnectionMode.CONNECTION_STRICTLY, preparedStatement));
+        SQLExecutorExceptionHandler.setExceptionThrown(true);
     }
     
     @SuppressWarnings("unchecked")
@@ -92,10 +93,47 @@ public final class JDBCExecutorCallbackTest {
         Field field = 
JDBCExecutorCallback.class.getDeclaredField("CACHED_DATASOURCE_METADATA");
         field.setAccessible(true);
         Map<String, DataSourceMetaData> cachedDataSourceMetaData = 
(Map<String, DataSourceMetaData>) field.get(jdbcExecutorCallback);
-        assertTrue(cachedDataSourceMetaData.isEmpty());
         jdbcExecutorCallback.execute(units, true, Collections.emptyMap());
         assertThat(cachedDataSourceMetaData.size(), is(1));
         jdbcExecutorCallback.execute(units, true, Collections.emptyMap());
         assertThat(cachedDataSourceMetaData.size(), is(1));
     }
+    
+    @Test
+    public void assertExecuteFailedAndProtocolTypeDifferentWithDatabaseType() 
throws SQLException {
+        Object saneResult = new Object();
+        JDBCExecutorCallback<Object> callback = new 
JDBCExecutorCallback<Object>(DatabaseTypeFactory.getInstance("MySQL"), 
DatabaseTypeFactory.getInstance("PostgreSQL"),
+                mock(SelectStatement.class), true, new EventBusContext()) {
+            
+            @Override
+            protected Object executeSQL(final String sql, final Statement 
statement, final ConnectionMode connectionMode) throws SQLException {
+                throw new SQLException();
+            }
+            
+            @Override
+            protected Optional<Object> getSaneResult(final SQLStatement 
sqlStatement, final SQLException ex) {
+                return Optional.of(saneResult);
+            }
+        };
+        assertThat(callback.execute(units, true, Collections.emptyMap()), 
is(Collections.singletonList(saneResult)));
+        assertThat(callback.execute(units, false, Collections.emptyMap()), 
is(Collections.emptyList()));
+    }
+    
+    @Test(expected = SQLException.class)
+    public void 
assertExecuteSQLExceptionOccurredAndProtocolTypeSameAsDatabaseType() throws 
SQLException {
+        JDBCExecutorCallback<Object> callback = new 
JDBCExecutorCallback<Object>(DatabaseTypeFactory.getInstance("MySQL"), 
DatabaseTypeFactory.getInstance("PostgreSQL"),
+                mock(SelectStatement.class), true, new EventBusContext()) {
+            
+            @Override
+            protected Object executeSQL(final String sql, final Statement 
statement, final ConnectionMode connectionMode) throws SQLException {
+                throw new SQLException();
+            }
+            
+            @Override
+            protected Optional<Object> getSaneResult(final SQLStatement 
sqlStatement, final SQLException ex) {
+                return Optional.empty();
+            }
+        };
+        callback.execute(units, true, Collections.emptyMap());
+    }
 }
diff --git 
a/shardingsphere-proxy/shardingsphere-proxy-backend/src/main/java/org/apache/shardingsphere/proxy/backend/communication/jdbc/JDBCDatabaseCommunicationEngine.java
 
b/shardingsphere-proxy/shardingsphere-proxy-backend/src/main/java/org/apache/shardingsphere/proxy/backend/communication/jdbc/JDBCDatabaseCommunicationEngine.java
index 5f0aaf59bad..8ef03a65a9f 100644
--- 
a/shardingsphere-proxy/shardingsphere-proxy-backend/src/main/java/org/apache/shardingsphere/proxy/backend/communication/jdbc/JDBCDatabaseCommunicationEngine.java
+++ 
b/shardingsphere-proxy/shardingsphere-proxy-backend/src/main/java/org/apache/shardingsphere/proxy/backend/communication/jdbc/JDBCDatabaseCommunicationEngine.java
@@ -146,8 +146,10 @@ public final class JDBCDatabaseCommunicationEngine extends 
DatabaseCommunication
     
     private ResultSet doExecuteFederation(final LogicSQL logicSQL, final 
MetaDataContexts metaDataContexts) throws SQLException {
         boolean isReturnGeneratedKeys = 
logicSQL.getSqlStatementContext().getSqlStatement() instanceof 
MySQLInsertStatement;
-        DatabaseType databaseType = 
metaDataContexts.getMetaData().getDatabase(backendConnection.getConnectionSession().getDatabaseName()).getResource().getDatabaseType();
-        ProxyJDBCExecutorCallback callback = 
ProxyJDBCExecutorCallbackFactory.newInstance(getDriverType(), databaseType,
+        ShardingSphereDatabase database = 
metaDataContexts.getMetaData().getDatabase(backendConnection.getConnectionSession().getDatabaseName());
+        DatabaseType protocolType = database.getProtocolType();
+        DatabaseType databaseType = database.getResource().getDatabaseType();
+        ProxyJDBCExecutorCallback callback = 
ProxyJDBCExecutorCallbackFactory.newInstance(getDriverType(), protocolType, 
databaseType,
                 logicSQL.getSqlStatementContext().getSqlStatement(), this, 
isReturnGeneratedKeys, SQLExecutorExceptionHandler.isExceptionThrown(), true);
         backendConnection.setFederationExecutor(federationExecutor);
         DriverExecutionPrepareEngine<JDBCExecutionUnit, Connection> 
prepareEngine = createDriverExecutionPrepareEngine(isReturnGeneratedKeys, 
metaDataContexts);
diff --git 
a/shardingsphere-proxy/shardingsphere-proxy-backend/src/main/java/org/apache/shardingsphere/proxy/backend/communication/jdbc/executor/ProxyJDBCExecutor.java
 
b/shardingsphere-proxy/shardingsphere-proxy-backend/src/main/java/org/apache/shardingsphere/proxy/backend/communication/jdbc/executor/ProxyJDBCExecutor.java
index 5a208decf4e..42b74afd7aa 100644
--- 
a/shardingsphere-proxy/shardingsphere-proxy-backend/src/main/java/org/apache/shardingsphere/proxy/backend/communication/jdbc/executor/ProxyJDBCExecutor.java
+++ 
b/shardingsphere-proxy/shardingsphere-proxy-backend/src/main/java/org/apache/shardingsphere/proxy/backend/communication/jdbc/executor/ProxyJDBCExecutor.java
@@ -27,6 +27,7 @@ import 
org.apache.shardingsphere.infra.executor.sql.execute.engine.driver.jdbc.J
 import 
org.apache.shardingsphere.infra.executor.sql.execute.engine.driver.jdbc.JDBCExecutor;
 import 
org.apache.shardingsphere.infra.executor.sql.execute.result.ExecuteResult;
 import 
org.apache.shardingsphere.infra.executor.sql.process.ExecuteProcessEngine;
+import 
org.apache.shardingsphere.infra.metadata.database.ShardingSphereDatabase;
 import org.apache.shardingsphere.mode.metadata.MetaDataContexts;
 import 
org.apache.shardingsphere.proxy.backend.communication.jdbc.JDBCDatabaseCommunicationEngine;
 import 
org.apache.shardingsphere.proxy.backend.communication.jdbc.executor.callback.ProxyJDBCExecutorCallbackFactory;
@@ -65,12 +66,16 @@ public final class ProxyJDBCExecutor {
         try {
             MetaDataContexts metaDataContexts = 
ProxyContext.getInstance().getContextManager().getMetaDataContexts();
             EventBusContext eventBusContext = 
ProxyContext.getInstance().getContextManager().getInstanceContext().getEventBusContext();
-            DatabaseType databaseType = 
metaDataContexts.getMetaData().getDatabase(connectionSession.getDatabaseName()).getResource().getDatabaseType();
+            ShardingSphereDatabase database = 
metaDataContexts.getMetaData().getDatabase(connectionSession.getDatabaseName());
+            DatabaseType protocolType = database.getProtocolType();
+            DatabaseType databaseType = 
database.getResource().getDatabaseType();
             ExecuteProcessEngine.initialize(logicSQL, executionGroupContext, 
metaDataContexts.getMetaData().getProps(), eventBusContext);
             SQLStatementContext<?> context = logicSQL.getSqlStatementContext();
             List<ExecuteResult> result = 
jdbcExecutor.execute(executionGroupContext,
-                    ProxyJDBCExecutorCallbackFactory.newInstance(type, 
databaseType, context.getSqlStatement(), databaseCommunicationEngine, 
isReturnGeneratedKeys, isExceptionThrown, true),
-                    ProxyJDBCExecutorCallbackFactory.newInstance(type, 
databaseType, context.getSqlStatement(), databaseCommunicationEngine, 
isReturnGeneratedKeys, isExceptionThrown, false));
+                    ProxyJDBCExecutorCallbackFactory.newInstance(type, 
protocolType, databaseType, context.getSqlStatement(), 
databaseCommunicationEngine, isReturnGeneratedKeys, isExceptionThrown,
+                            true),
+                    ProxyJDBCExecutorCallbackFactory.newInstance(type, 
protocolType, databaseType, context.getSqlStatement(), 
databaseCommunicationEngine, isReturnGeneratedKeys, isExceptionThrown,
+                            false));
             
ExecuteProcessEngine.finish(executionGroupContext.getExecutionID(), 
eventBusContext);
             return result;
         } finally {
diff --git 
a/shardingsphere-proxy/shardingsphere-proxy-backend/src/main/java/org/apache/shardingsphere/proxy/backend/communication/jdbc/executor/callback/ProxyJDBCExecutorCallback.java
 
b/shardingsphere-proxy/shardingsphere-proxy-backend/src/main/java/org/apache/shardingsphere/proxy/backend/communication/jdbc/executor/callback/ProxyJDBCExecutorCallback.java
index 5a3d17b5566..e1692825862 100644
--- 
a/shardingsphere-proxy/shardingsphere-proxy-backend/src/main/java/org/apache/shardingsphere/proxy/backend/communication/jdbc/executor/callback/ProxyJDBCExecutorCallback.java
+++ 
b/shardingsphere-proxy/shardingsphere-proxy-backend/src/main/java/org/apache/shardingsphere/proxy/backend/communication/jdbc/executor/callback/ProxyJDBCExecutorCallback.java
@@ -51,9 +51,10 @@ public abstract class ProxyJDBCExecutorCallback extends 
JDBCExecutorCallback<Exe
     
     private boolean hasMetaData;
     
-    public ProxyJDBCExecutorCallback(final DatabaseType databaseType, final 
SQLStatement sqlStatement, final JDBCDatabaseCommunicationEngine 
databaseCommunicationEngine,
+    public ProxyJDBCExecutorCallback(final DatabaseType protocolType, final 
DatabaseType databaseType, final SQLStatement sqlStatement,
+                                     final JDBCDatabaseCommunicationEngine 
databaseCommunicationEngine,
                                      final boolean isReturnGeneratedKeys, 
final boolean isExceptionThrown, final boolean fetchMetaData) {
-        super(databaseType, sqlStatement, isExceptionThrown, 
ProxyContext.getInstance().getContextManager().getInstanceContext().getEventBusContext());
+        super(protocolType, databaseType, sqlStatement, isExceptionThrown, 
ProxyContext.getInstance().getContextManager().getInstanceContext().getEventBusContext());
         this.databaseCommunicationEngine = databaseCommunicationEngine;
         this.isReturnGeneratedKeys = isReturnGeneratedKeys;
         this.fetchMetaData = fetchMetaData;
diff --git 
a/shardingsphere-proxy/shardingsphere-proxy-backend/src/main/java/org/apache/shardingsphere/proxy/backend/communication/jdbc/executor/callback/ProxyJDBCExecutorCallbackFactory.java
 
b/shardingsphere-proxy/shardingsphere-proxy-backend/src/main/java/org/apache/shardingsphere/proxy/backend/communication/jdbc/executor/callback/ProxyJDBCExecutorCallbackFactory.java
index 58236c0b699..bc60a2cee88 100644
--- 
a/shardingsphere-proxy/shardingsphere-proxy-backend/src/main/java/org/apache/shardingsphere/proxy/backend/communication/jdbc/executor/callback/ProxyJDBCExecutorCallbackFactory.java
+++ 
b/shardingsphere-proxy/shardingsphere-proxy-backend/src/main/java/org/apache/shardingsphere/proxy/backend/communication/jdbc/executor/callback/ProxyJDBCExecutorCallbackFactory.java
@@ -36,6 +36,7 @@ public final class ProxyJDBCExecutorCallbackFactory {
      * Create new instance of Proxy JDBC executor callback.
      *
      * @param type driver type
+     * @param protocolType protocol type
      * @param databaseType database type
      * @param sqlStatement SQL statement
      * @param databaseCommunicationEngine database communication engine
@@ -44,14 +45,14 @@ public final class ProxyJDBCExecutorCallbackFactory {
      * @param isFetchMetaData is fetch meta data or not
      * @return created instance
      */
-    public static ProxyJDBCExecutorCallback newInstance(final String type, 
final DatabaseType databaseType, final SQLStatement sqlStatement,
+    public static ProxyJDBCExecutorCallback newInstance(final String type, 
final DatabaseType protocolType, final DatabaseType databaseType, final 
SQLStatement sqlStatement,
                                                         final 
JDBCDatabaseCommunicationEngine databaseCommunicationEngine, final boolean 
isReturnGeneratedKeys, final boolean isExceptionThrown,
                                                         final boolean 
isFetchMetaData) {
         if (JDBCDriverType.STATEMENT.equals(type)) {
-            return new ProxyStatementExecutorCallback(databaseType, 
sqlStatement, databaseCommunicationEngine, isReturnGeneratedKeys, 
isExceptionThrown, isFetchMetaData);
+            return new ProxyStatementExecutorCallback(protocolType, 
databaseType, sqlStatement, databaseCommunicationEngine, isReturnGeneratedKeys, 
isExceptionThrown, isFetchMetaData);
         }
         if (JDBCDriverType.PREPARED_STATEMENT.equals(type)) {
-            return new ProxyPreparedStatementExecutorCallback(databaseType, 
sqlStatement, databaseCommunicationEngine, isReturnGeneratedKeys, 
isExceptionThrown, isFetchMetaData);
+            return new ProxyPreparedStatementExecutorCallback(protocolType, 
databaseType, sqlStatement, databaseCommunicationEngine, isReturnGeneratedKeys, 
isExceptionThrown, isFetchMetaData);
         }
         throw new UnsupportedOperationException(String.format("Unsupported 
driver type: `%s`", type));
     }
diff --git 
a/shardingsphere-proxy/shardingsphere-proxy-backend/src/main/java/org/apache/shardingsphere/proxy/backend/communication/jdbc/executor/callback/impl/ProxyPreparedStatementExecutorCallback.java
 
b/shardingsphere-proxy/shardingsphere-proxy-backend/src/main/java/org/apache/shardingsphere/proxy/backend/communication/jdbc/executor/callback/impl/ProxyPreparedStatementExecutorCallback.java
index 71b447aa743..9867aca81c4 100644
--- 
a/shardingsphere-proxy/shardingsphere-proxy-backend/src/main/java/org/apache/shardingsphere/proxy/backend/communication/jdbc/executor/callback/impl/ProxyPreparedStatementExecutorCallback.java
+++ 
b/shardingsphere-proxy/shardingsphere-proxy-backend/src/main/java/org/apache/shardingsphere/proxy/backend/communication/jdbc/executor/callback/impl/ProxyPreparedStatementExecutorCallback.java
@@ -31,9 +31,10 @@ import java.sql.Statement;
  */
 public final class ProxyPreparedStatementExecutorCallback extends 
ProxyJDBCExecutorCallback {
     
-    public ProxyPreparedStatementExecutorCallback(final DatabaseType 
databaseType, final SQLStatement sqlStatement, final 
JDBCDatabaseCommunicationEngine databaseCommunicationEngine,
-                                                  final boolean 
isReturnGeneratedKeys, final boolean isExceptionThrown, final boolean 
fetchMetaData) {
-        super(databaseType, sqlStatement, databaseCommunicationEngine, 
isReturnGeneratedKeys, isExceptionThrown, fetchMetaData);
+    public ProxyPreparedStatementExecutorCallback(final DatabaseType 
protocolType, final DatabaseType databaseType, final SQLStatement sqlStatement,
+                                                  final 
JDBCDatabaseCommunicationEngine databaseCommunicationEngine, final boolean 
isReturnGeneratedKeys,
+                                                  final boolean 
isExceptionThrown, final boolean fetchMetaData) {
+        super(protocolType, databaseType, sqlStatement, 
databaseCommunicationEngine, isReturnGeneratedKeys, isExceptionThrown, 
fetchMetaData);
     }
     
     @Override
diff --git 
a/shardingsphere-proxy/shardingsphere-proxy-backend/src/main/java/org/apache/shardingsphere/proxy/backend/communication/jdbc/executor/callback/impl/ProxyStatementExecutorCallback.java
 
b/shardingsphere-proxy/shardingsphere-proxy-backend/src/main/java/org/apache/shardingsphere/proxy/backend/communication/jdbc/executor/callback/impl/ProxyStatementExecutorCallback.java
index 026c8a0c8b0..dac1fd231ae 100644
--- 
a/shardingsphere-proxy/shardingsphere-proxy-backend/src/main/java/org/apache/shardingsphere/proxy/backend/communication/jdbc/executor/callback/impl/ProxyStatementExecutorCallback.java
+++ 
b/shardingsphere-proxy/shardingsphere-proxy-backend/src/main/java/org/apache/shardingsphere/proxy/backend/communication/jdbc/executor/callback/impl/ProxyStatementExecutorCallback.java
@@ -30,9 +30,10 @@ import java.sql.Statement;
  */
 public final class ProxyStatementExecutorCallback extends 
ProxyJDBCExecutorCallback {
     
-    public ProxyStatementExecutorCallback(final DatabaseType databaseType, 
final SQLStatement sqlStatement, final JDBCDatabaseCommunicationEngine 
databaseCommunicationEngine,
-                                          final boolean isReturnGeneratedKeys, 
final boolean isExceptionThrown, final boolean fetchMetaData) {
-        super(databaseType, sqlStatement, databaseCommunicationEngine, 
isReturnGeneratedKeys, isExceptionThrown, fetchMetaData);
+    public ProxyStatementExecutorCallback(final DatabaseType protocolType, 
final DatabaseType databaseType, final SQLStatement sqlStatement,
+                                          final 
JDBCDatabaseCommunicationEngine databaseCommunicationEngine, final boolean 
isReturnGeneratedKeys,
+                                          final boolean isExceptionThrown, 
final boolean fetchMetaData) {
+        super(protocolType, databaseType, sqlStatement, 
databaseCommunicationEngine, isReturnGeneratedKeys, isExceptionThrown, 
fetchMetaData);
     }
     
     @Override
diff --git 
a/shardingsphere-proxy/shardingsphere-proxy-frontend/shardingsphere-proxy-frontend-mysql/src/main/java/org/apache/shardingsphere/proxy/frontend/mysql/command/query/text/query/MySQLMultiStatementsHandler.java
 
b/shardingsphere-proxy/shardingsphere-proxy-frontend/shardingsphere-proxy-frontend-mysql/src/main/java/org/apache/shardingsphere/proxy/frontend/mysql/command/query/text/query/MySQLMultiStatementsHandler.java
index cb6184edd1b..58b78f3fa3f 100644
--- 
a/shardingsphere-proxy/shardingsphere-proxy-frontend/shardingsphere-proxy-frontend-mysql/src/main/java/org/apache/shardingsphere/proxy/frontend/mysql/command/query/text/query/MySQLMultiStatementsHandler.java
+++ 
b/shardingsphere-proxy/shardingsphere-proxy-frontend/shardingsphere-proxy-frontend-mysql/src/main/java/org/apache/shardingsphere/proxy/frontend/mysql/command/query/text/query/MySQLMultiStatementsHandler.java
@@ -24,6 +24,7 @@ import 
org.apache.shardingsphere.infra.config.props.ConfigurationPropertyKey;
 import org.apache.shardingsphere.infra.context.kernel.KernelProcessor;
 import org.apache.shardingsphere.infra.database.type.DatabaseType;
 import org.apache.shardingsphere.infra.database.type.DatabaseTypeEngine;
+import org.apache.shardingsphere.infra.database.type.DatabaseTypeFactory;
 import org.apache.shardingsphere.infra.executor.check.SQLCheckEngine;
 import org.apache.shardingsphere.infra.executor.kernel.model.ExecutionGroup;
 import 
org.apache.shardingsphere.infra.executor.kernel.model.ExecutionGroupContext;
@@ -181,7 +182,7 @@ public final class MySQLMultiStatementsHandler implements 
TextProtocolBackendHan
     private static class BatchedJDBCExecutorCallback extends 
JDBCExecutorCallback<int[]> {
         
         BatchedJDBCExecutorCallback(final DatabaseType databaseType, final 
SQLStatement sqlStatement, final boolean isExceptionThrown) {
-            super(databaseType, sqlStatement, isExceptionThrown, 
ProxyContext.getInstance().getContextManager().getInstanceContext().getEventBusContext());
+            super(DatabaseTypeFactory.getInstance("MySQL"), databaseType, 
sqlStatement, isExceptionThrown, 
ProxyContext.getInstance().getContextManager().getInstanceContext().getEventBusContext());
         }
         
         @Override
diff --git 
a/shardingsphere-proxy/shardingsphere-proxy-frontend/shardingsphere-proxy-frontend-postgresql/src/main/java/org/apache/shardingsphere/proxy/frontend/postgresql/command/query/extended/PostgreSQLBatchedStatementsExecutor.java
 
b/shardingsphere-proxy/shardingsphere-proxy-frontend/shardingsphere-proxy-frontend-postgresql/src/main/java/org/apache/shardingsphere/proxy/frontend/postgresql/command/query/extended/PostgreSQLBatchedStatementsExecutor.java
index a36699a95d0..e6822b5866f 100644
--- 
a/shardingsphere-proxy/shardingsphere-proxy-frontend/shardingsphere-proxy-frontend-postgresql/src/main/java/org/apache/shardingsphere/proxy/frontend/postgresql/command/query/extended/PostgreSQLBatchedStatementsExecutor.java
+++ 
b/shardingsphere-proxy/shardingsphere-proxy-frontend/shardingsphere-proxy-frontend-postgresql/src/main/java/org/apache/shardingsphere/proxy/frontend/postgresql/command/query/extended/PostgreSQLBatchedStatementsExecutor.java
@@ -38,6 +38,7 @@ import 
org.apache.shardingsphere.infra.executor.sql.execute.engine.driver.jdbc.J
 import 
org.apache.shardingsphere.infra.executor.sql.prepare.driver.DriverExecutionPrepareEngine;
 import 
org.apache.shardingsphere.infra.executor.sql.prepare.driver.jdbc.JDBCDriverType;
 import 
org.apache.shardingsphere.infra.executor.sql.prepare.driver.jdbc.StatementOption;
+import 
org.apache.shardingsphere.infra.metadata.database.ShardingSphereDatabase;
 import org.apache.shardingsphere.infra.rule.ShardingSphereRule;
 import org.apache.shardingsphere.mode.metadata.MetaDataContexts;
 import 
org.apache.shardingsphere.proxy.backend.communication.jdbc.connection.JDBCBackendConnection;
@@ -173,8 +174,10 @@ public final class PostgreSQLBatchedStatementsExecutor {
     
     private int executeBatchedPreparedStatements() throws SQLException {
         boolean isExceptionThrown = 
SQLExecutorExceptionHandler.isExceptionThrown();
-        DatabaseType databaseType = 
metaDataContexts.getMetaData().getDatabase(connectionSession.getDatabaseName()).getResource().getDatabaseType();
-        JDBCExecutorCallback<int[]> callback = new 
BatchedStatementsJDBCExecutorCallback(databaseType, 
preparedStatement.getSqlStatement(), isExceptionThrown);
+        ShardingSphereDatabase database = 
metaDataContexts.getMetaData().getDatabase(connectionSession.getDatabaseName());
+        DatabaseType databaseType = database.getResource().getDatabaseType();
+        DatabaseType protocolType = database.getProtocolType();
+        JDBCExecutorCallback<int[]> callback = new 
BatchedStatementsJDBCExecutorCallback(protocolType, databaseType, 
preparedStatement.getSqlStatement(), isExceptionThrown);
         List<int[]> executeResults = 
jdbcExecutor.execute(executionGroupContext, callback);
         int result = 0;
         for (int[] eachResult : executeResults) {
@@ -187,8 +190,8 @@ public final class PostgreSQLBatchedStatementsExecutor {
     
     private static class BatchedStatementsJDBCExecutorCallback extends 
JDBCExecutorCallback<int[]> {
         
-        BatchedStatementsJDBCExecutorCallback(final DatabaseType databaseType, 
final SQLStatement sqlStatement, final boolean isExceptionThrown) {
-            super(databaseType, sqlStatement, isExceptionThrown, 
ProxyContext.getInstance().getContextManager().getInstanceContext().getEventBusContext());
+        BatchedStatementsJDBCExecutorCallback(final DatabaseType protocolType, 
final DatabaseType databaseType, final SQLStatement sqlStatement, final boolean 
isExceptionThrown) {
+            super(protocolType, databaseType, sqlStatement, isExceptionThrown, 
ProxyContext.getInstance().getContextManager().getInstanceContext().getEventBusContext());
         }
         
         @Override

Reply via email to