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