This is an automated email from the ASF dual-hosted git repository.
duanzhengqiang 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 505ef17d672 Extract duplicate executeWithImplicitCommitTransaction
methods (#31241)
505ef17d672 is described below
commit 505ef17d6720421d009ed9de9e7f2fb562ca159f
Author: ZhangCheng <[email protected]>
AuthorDate: Thu May 16 15:02:31 2024 +0800
Extract duplicate executeWithImplicitCommitTransaction methods (#31241)
---
.../jdbc/adapter/AbstractStatementAdapter.java | 20 ++++++++++
.../statement/ShardingSpherePreparedStatement.java | 43 ++--------------------
.../core/statement/ShardingSphereStatement.java | 41 ++-------------------
3 files changed, 28 insertions(+), 76 deletions(-)
diff --git
a/jdbc/src/main/java/org/apache/shardingsphere/driver/jdbc/adapter/AbstractStatementAdapter.java
b/jdbc/src/main/java/org/apache/shardingsphere/driver/jdbc/adapter/AbstractStatementAdapter.java
index 04043c29c21..0d2ed0a4a78 100644
---
a/jdbc/src/main/java/org/apache/shardingsphere/driver/jdbc/adapter/AbstractStatementAdapter.java
+++
b/jdbc/src/main/java/org/apache/shardingsphere/driver/jdbc/adapter/AbstractStatementAdapter.java
@@ -27,13 +27,16 @@ import
org.apache.shardingsphere.driver.jdbc.unsupported.AbstractUnsupportedOper
import
org.apache.shardingsphere.infra.database.core.metadata.database.DialectDatabaseMetaData;
import org.apache.shardingsphere.infra.database.core.type.DatabaseType;
import org.apache.shardingsphere.infra.database.core.type.DatabaseTypeRegistry;
+import
org.apache.shardingsphere.infra.exception.dialect.SQLExceptionTransformEngine;
import org.apache.shardingsphere.mode.metadata.MetaDataContexts;
import org.apache.shardingsphere.sql.parser.sql.common.statement.SQLStatement;
import
org.apache.shardingsphere.sql.parser.sql.common.statement.dml.DMLStatement;
import
org.apache.shardingsphere.sql.parser.sql.common.statement.dml.SelectStatement;
import org.apache.shardingsphere.transaction.api.TransactionType;
+import
org.apache.shardingsphere.transaction.implicit.ImplicitTransactionCallback;
import org.apache.shardingsphere.transaction.rule.TransactionRule;
+import java.sql.Connection;
import java.sql.SQLException;
import java.sql.SQLWarning;
import java.sql.Statement;
@@ -68,6 +71,23 @@ public abstract class AbstractStatementAdapter extends
AbstractUnsupportedOperat
return isWriteDMLStatement(sqlStatement) && multiExecutionUnits;
}
+ protected final <T> T executeWithImplicitCommitTransaction(final
ImplicitTransactionCallback<T> callback, final Connection connection, final
DatabaseType databaseType) throws SQLException {
+ T result;
+ try {
+ connection.setAutoCommit(false);
+ result = callback.execute();
+ connection.commit();
+ // CHECKSTYLE:OFF
+ } catch (final Exception ex) {
+ // CHECKSTYLE:ON
+ connection.rollback();
+ throw SQLExceptionTransformEngine.toSQLException(ex, databaseType);
+ } finally {
+ connection.setAutoCommit(true);
+ }
+ return result;
+ }
+
private boolean isWriteDMLStatement(final SQLStatement sqlStatement) {
return sqlStatement instanceof DMLStatement && !(sqlStatement
instanceof SelectStatement);
}
diff --git
a/jdbc/src/main/java/org/apache/shardingsphere/driver/jdbc/core/statement/ShardingSpherePreparedStatement.java
b/jdbc/src/main/java/org/apache/shardingsphere/driver/jdbc/core/statement/ShardingSpherePreparedStatement.java
index 9a2e1320203..8260682fa6c 100644
---
a/jdbc/src/main/java/org/apache/shardingsphere/driver/jdbc/core/statement/ShardingSpherePreparedStatement.java
+++
b/jdbc/src/main/java/org/apache/shardingsphere/driver/jdbc/core/statement/ShardingSpherePreparedStatement.java
@@ -30,8 +30,6 @@ import
org.apache.shardingsphere.driver.jdbc.core.resultset.GeneratedKeysResultS
import
org.apache.shardingsphere.driver.jdbc.core.resultset.ShardingSphereResultSet;
import
org.apache.shardingsphere.driver.jdbc.core.resultset.ShardingSphereResultSetUtils;
import
org.apache.shardingsphere.driver.jdbc.core.statement.metadata.ShardingSphereParameterMetaData;
-import
org.apache.shardingsphere.infra.exception.core.ShardingSpherePreconditions;
-import
org.apache.shardingsphere.infra.exception.kernel.syntax.EmptySQLException;
import org.apache.shardingsphere.infra.annotation.HighFrequencyInvocation;
import org.apache.shardingsphere.infra.binder.context.aware.ParameterAware;
import
org.apache.shardingsphere.infra.binder.context.segment.insert.keygen.GeneratedKeyContext;
@@ -43,7 +41,9 @@ import
org.apache.shardingsphere.infra.config.props.ConfigurationPropertyKey;
import org.apache.shardingsphere.infra.connection.kernel.KernelProcessor;
import org.apache.shardingsphere.infra.database.core.type.DatabaseType;
import org.apache.shardingsphere.infra.database.mysql.type.MySQLDatabaseType;
+import
org.apache.shardingsphere.infra.exception.core.ShardingSpherePreconditions;
import
org.apache.shardingsphere.infra.exception.dialect.SQLExceptionTransformEngine;
+import
org.apache.shardingsphere.infra.exception.kernel.syntax.EmptySQLException;
import org.apache.shardingsphere.infra.executor.audit.SQLAuditEngine;
import org.apache.shardingsphere.infra.executor.kernel.model.ExecutionGroup;
import
org.apache.shardingsphere.infra.executor.kernel.model.ExecutionGroupContext;
@@ -89,7 +89,6 @@ import
org.apache.shardingsphere.sqlfederation.executor.context.SQLFederationCon
import org.apache.shardingsphere.traffic.engine.TrafficEngine;
import
org.apache.shardingsphere.traffic.exception.EmptyTrafficExecutionUnitException;
import org.apache.shardingsphere.traffic.rule.TrafficRule;
-import
org.apache.shardingsphere.transaction.implicit.ImplicitTransactionCallback;
import org.apache.shardingsphere.transaction.util.AutoCommitUtils;
import java.sql.Connection;
@@ -452,50 +451,16 @@ public final class ShardingSpherePreparedStatement
extends AbstractPreparedState
private boolean executeWithExecutionContext(final ExecutionContext
executionContext) throws SQLException {
return isNeedImplicitCommitTransaction(connection,
executionContext.getSqlStatementContext().getSqlStatement(),
executionContext.getExecutionUnits().size() > 1)
- ? executeWithImplicitCommitTransaction(() ->
useDriverToExecute(executionContext))
+ ? executeWithImplicitCommitTransaction(() ->
useDriverToExecute(executionContext), connection,
metaDataContexts.getMetaData().getDatabase(databaseName).getProtocolType())
: useDriverToExecute(executionContext);
}
- private boolean executeWithImplicitCommitTransaction(final
ImplicitTransactionCallback<Boolean> callback) throws SQLException {
- boolean result;
- try {
- connection.setAutoCommit(false);
- result = callback.execute();
- connection.commit();
- // CHECKSTYLE:OFF
- } catch (final Exception ex) {
- // CHECKSTYLE:ON
- connection.rollback();
- throw SQLExceptionTransformEngine.toSQLException(ex,
metaDataContexts.getMetaData().getDatabase(databaseName).getProtocolType());
- } finally {
- connection.setAutoCommit(true);
- }
- return result;
- }
-
private int executeUpdateWithExecutionContext(final ExecutionContext
executionContext) throws SQLException {
return isNeedImplicitCommitTransaction(connection,
executionContext.getSqlStatementContext().getSqlStatement(),
executionContext.getExecutionUnits().size() > 1)
- ? executeUpdateWithImplicitCommitTransaction(() ->
useDriverToExecuteUpdate(executionContext))
+ ? executeWithImplicitCommitTransaction(() ->
useDriverToExecuteUpdate(executionContext), connection,
metaDataContexts.getMetaData().getDatabase(databaseName).getProtocolType())
: useDriverToExecuteUpdate(executionContext);
}
- private int executeUpdateWithImplicitCommitTransaction(final
ImplicitTransactionCallback<Integer> callback) throws SQLException {
- int result;
- try {
- connection.setAutoCommit(false);
- result = callback.execute();
- connection.commit();
- // CHECKSTYLE:OFF
- } catch (final RuntimeException ex) {
- // CHECKSTYLE:ON
- connection.rollback();
- throw SQLExceptionTransformEngine.toSQLException(ex,
metaDataContexts.getMetaData().getDatabase(databaseName).getProtocolType());
- } finally {
- connection.setAutoCommit(true);
- }
- return result;
- }
-
private boolean useDriverToExecute(final ExecutionContext
executionContext) throws SQLException {
ExecutionGroupContext<JDBCExecutionUnit> executionGroupContext =
createExecutionGroupContext(executionContext);
cacheStatements(executionGroupContext.getInputGroups());
diff --git
a/jdbc/src/main/java/org/apache/shardingsphere/driver/jdbc/core/statement/ShardingSphereStatement.java
b/jdbc/src/main/java/org/apache/shardingsphere/driver/jdbc/core/statement/ShardingSphereStatement.java
index aea3748b502..8a8717741e5 100644
---
a/jdbc/src/main/java/org/apache/shardingsphere/driver/jdbc/core/statement/ShardingSphereStatement.java
+++
b/jdbc/src/main/java/org/apache/shardingsphere/driver/jdbc/core/statement/ShardingSphereStatement.java
@@ -83,7 +83,6 @@ import org.apache.shardingsphere.traffic.engine.TrafficEngine;
import
org.apache.shardingsphere.traffic.exception.EmptyTrafficExecutionUnitException;
import org.apache.shardingsphere.traffic.executor.TrafficExecutorCallback;
import org.apache.shardingsphere.traffic.rule.TrafficRule;
-import
org.apache.shardingsphere.transaction.implicit.ImplicitTransactionCallback;
import org.apache.shardingsphere.transaction.util.AutoCommitUtils;
import java.sql.Connection;
@@ -315,7 +314,8 @@ public final class ShardingSphereStatement extends
AbstractStatementAdapter {
private int executeUpdate(final ExecuteUpdateCallback updateCallback,
final SQLStatementContext sqlStatementContext, final ExecutionContext
executionContext) throws SQLException {
return isNeedImplicitCommitTransaction(connection,
executionContext.getSqlStatementContext().getSqlStatement(),
executionContext.getExecutionUnits().size() > 1)
- ? executeUpdateWithImplicitCommitTransaction(() ->
useDriverToExecuteUpdate(updateCallback, sqlStatementContext, executionContext))
+ ? executeWithImplicitCommitTransaction(() ->
useDriverToExecuteUpdate(updateCallback, sqlStatementContext,
executionContext), connection,
+
metaDataContexts.getMetaData().getDatabase(databaseName).getProtocolType())
: useDriverToExecuteUpdate(updateCallback,
sqlStatementContext, executionContext);
}
@@ -337,23 +337,6 @@ public final class ShardingSphereStatement extends
AbstractStatementAdapter {
return executeUpdate(updateCallback,
queryContext.getSqlStatementContext(), executionContext);
}
- private int executeUpdateWithImplicitCommitTransaction(final
ImplicitTransactionCallback<Integer> callback) throws SQLException {
- int result;
- try {
- connection.setAutoCommit(false);
- result = callback.execute();
- connection.commit();
- // CHECKSTYLE:OFF
- } catch (final RuntimeException ex) {
- // CHECKSTYLE:ON
- connection.rollback();
- throw SQLExceptionTransformEngine.toSQLException(ex,
metaDataContexts.getMetaData().getDatabase(databaseName).getProtocolType());
- } finally {
- connection.setAutoCommit(true);
- }
- return result;
- }
-
private int useDriverToExecuteUpdate(final ExecuteUpdateCallback
updateCallback, final SQLStatementContext sqlStatementContext,
final ExecutionContext
executionContext) throws SQLException {
ExecutionGroupContext<JDBCExecutionUnit> executionGroupContext =
createExecutionGroupContext(executionContext);
@@ -537,27 +520,11 @@ public final class ShardingSphereStatement extends
AbstractStatementAdapter {
private boolean executeWithExecutionContext(final ExecuteCallback
executeCallback, final ExecutionContext executionContext) throws SQLException {
return isNeedImplicitCommitTransaction(connection,
executionContext.getSqlStatementContext().getSqlStatement(),
executionContext.getExecutionUnits().size() > 1)
- ? executeWithImplicitCommitTransaction(() ->
useDriverToExecute(executeCallback, executionContext))
+ ? executeWithImplicitCommitTransaction(() ->
useDriverToExecute(executeCallback, executionContext), connection,
+
metaDataContexts.getMetaData().getDatabase(databaseName).getProtocolType())
: useDriverToExecute(executeCallback, executionContext);
}
- private boolean executeWithImplicitCommitTransaction(final
ImplicitTransactionCallback<Boolean> callback) throws SQLException {
- boolean result;
- try {
- connection.setAutoCommit(false);
- result = callback.execute();
- connection.commit();
- // CHECKSTYLE:OFF
- } catch (final Exception ex) {
- // CHECKSTYLE:ON
- connection.rollback();
- throw SQLExceptionTransformEngine.toSQLException(ex,
metaDataContexts.getMetaData().getDatabase(databaseName).getProtocolType());
- } finally {
- connection.setAutoCommit(true);
- }
- return result;
- }
-
private boolean useDriverToExecute(final ExecuteCallback callback, final
ExecutionContext executionContext) throws SQLException {
ExecutionGroupContext<JDBCExecutionUnit> executionGroupContext =
createExecutionGroupContext(executionContext);
cacheStatements(executionGroupContext.getInputGroups());