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());

Reply via email to