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 e187b570db7 Refactor AutoCommitUtils (#36785)
e187b570db7 is described below

commit e187b570db7667b505ad423f96cb5c5d7d62a1ba
Author: Liang Zhang <[email protected]>
AuthorDate: Sun Oct 5 10:51:24 2025 +0800

    Refactor AutoCommitUtils (#36785)
    
    * Refactor AutoCommitUtils
    
    * Refactor AutoCommitUtils
    
    * Refactor AutoCommitUtils
---
 .../jdbc/adapter/AbstractStatementAdapter.java     |  2 +-
 .../transaction/util/AutoCommitUtils.java          | 15 ++++++-----
 .../transaction/util/AutoCommitUtilsTest.java      | 31 +++++++++++++---------
 .../handler/ProxyBackendHandlerFactory.java        |  2 +-
 4 files changed, 29 insertions(+), 21 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 3a3d408f7bc..a36b5b673c5 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
@@ -57,7 +57,7 @@ public abstract class AbstractStatementAdapter extends 
WrapperAdapter implements
     private boolean closed;
     
     protected final void handleAutoCommitBeforeExecution(final SQLStatement 
sqlStatement, final ShardingSphereConnection connection) throws SQLException {
-        if (AutoCommitUtils.needOpenTransaction(sqlStatement)) {
+        if (AutoCommitUtils.isNeedStartTransaction(sqlStatement)) {
             connection.beginTransactionIfNeededWhenAutoCommitFalse();
         }
     }
diff --git 
a/kernel/transaction/core/src/main/java/org/apache/shardingsphere/transaction/util/AutoCommitUtils.java
 
b/kernel/transaction/core/src/main/java/org/apache/shardingsphere/transaction/util/AutoCommitUtils.java
index 746f7a7d9de..b4cc4c865c7 100644
--- 
a/kernel/transaction/core/src/main/java/org/apache/shardingsphere/transaction/util/AutoCommitUtils.java
+++ 
b/kernel/transaction/core/src/main/java/org/apache/shardingsphere/transaction/util/AutoCommitUtils.java
@@ -33,13 +33,14 @@ public final class AutoCommitUtils {
     /**
      * Judge whether to start a new transaction.
      *
-     * @param sqlStatement sqlStatement.
-     * @return need to open a new transaction.
+     * @param sqlStatement SQL statement
+     * @return need to start or not
      */
-    public static boolean needOpenTransaction(final SQLStatement sqlStatement) 
{
-        if (sqlStatement instanceof SelectStatement && !((SelectStatement) 
sqlStatement).getFrom().isPresent()) {
-            return false;
-        }
-        return sqlStatement instanceof DDLStatement || sqlStatement instanceof 
DMLStatement;
+    public static boolean isNeedStartTransaction(final SQLStatement 
sqlStatement) {
+        return sqlStatement instanceof DDLStatement || sqlStatement instanceof 
DMLStatement && !isSelectWithoutFrom(sqlStatement);
+    }
+    
+    private static boolean isSelectWithoutFrom(final SQLStatement 
sqlStatement) {
+        return sqlStatement instanceof SelectStatement && !((SelectStatement) 
sqlStatement).getFrom().isPresent();
     }
 }
diff --git 
a/kernel/transaction/core/src/test/java/org/apache/shardingsphere/transaction/util/AutoCommitUtilsTest.java
 
b/kernel/transaction/core/src/test/java/org/apache/shardingsphere/transaction/util/AutoCommitUtilsTest.java
index 73da8f22aef..4b5a4c65907 100644
--- 
a/kernel/transaction/core/src/test/java/org/apache/shardingsphere/transaction/util/AutoCommitUtilsTest.java
+++ 
b/kernel/transaction/core/src/test/java/org/apache/shardingsphere/transaction/util/AutoCommitUtilsTest.java
@@ -18,9 +18,9 @@
 package org.apache.shardingsphere.transaction.util;
 
 import org.apache.shardingsphere.database.connector.core.type.DatabaseType;
-import 
org.apache.shardingsphere.distsql.statement.type.rdl.resource.unit.type.RegisterStorageUnitStatement;
 import org.apache.shardingsphere.infra.spi.type.typed.TypedSPILoader;
 import 
org.apache.shardingsphere.sql.parser.statement.core.segment.generic.table.SimpleTableSegment;
+import 
org.apache.shardingsphere.sql.parser.statement.core.statement.type.dal.EmptyStatement;
 import 
org.apache.shardingsphere.sql.parser.statement.core.statement.type.ddl.table.CreateTableStatement;
 import 
org.apache.shardingsphere.sql.parser.statement.core.statement.type.dml.InsertStatement;
 import 
org.apache.shardingsphere.sql.parser.statement.core.statement.type.dml.SelectStatement;
@@ -35,23 +35,30 @@ class AutoCommitUtilsTest {
     private final DatabaseType databaseType = 
TypedSPILoader.getService(DatabaseType.class, "FIXTURE");
     
     @Test
-    void assertNeedOpenTransactionForSelectStatement() {
+    void assertIsNeedStartTransactionWithDDL() {
+        assertTrue(AutoCommitUtils.isNeedStartTransaction(new 
CreateTableStatement(databaseType)));
+    }
+    
+    @Test
+    void assertIsNeedStartTransactionWithDML() {
+        assertTrue(AutoCommitUtils.isNeedStartTransaction(new 
InsertStatement(databaseType)));
+    }
+    
+    @Test
+    void assertIsNeedStartTransactionWithSelectWithoutFromClause() {
         SelectStatement selectStatement = new SelectStatement(databaseType);
-        assertFalse(AutoCommitUtils.needOpenTransaction(selectStatement));
-        selectStatement.setFrom(mock(SimpleTableSegment.class));
-        assertTrue(AutoCommitUtils.needOpenTransaction(selectStatement));
+        assertFalse(AutoCommitUtils.isNeedStartTransaction(selectStatement));
     }
     
     @Test
-    void assertNeedOpenTransactionForDDLOrDMLStatement() {
-        CreateTableStatement sqlStatement = new 
CreateTableStatement(databaseType);
-        sqlStatement.setIfNotExists(true);
-        assertTrue(AutoCommitUtils.needOpenTransaction(sqlStatement));
-        assertTrue(AutoCommitUtils.needOpenTransaction(new 
InsertStatement(databaseType)));
+    void assertIsNeedStartTransactionWithSelectWithFromClause() {
+        SelectStatement selectStatement = new SelectStatement(databaseType);
+        selectStatement.setFrom(mock(SimpleTableSegment.class));
+        assertTrue(AutoCommitUtils.isNeedStartTransaction(selectStatement));
     }
     
     @Test
-    void assertNeedOpenTransactionForOtherStatement() {
-        
assertFalse(AutoCommitUtils.needOpenTransaction(mock(RegisterStorageUnitStatement.class)));
+    void assertIsNotNeedStartTransaction() {
+        assertFalse(AutoCommitUtils.isNeedStartTransaction(new 
EmptyStatement(databaseType)));
     }
 }
diff --git 
a/proxy/backend/core/src/main/java/org/apache/shardingsphere/proxy/backend/handler/ProxyBackendHandlerFactory.java
 
b/proxy/backend/core/src/main/java/org/apache/shardingsphere/proxy/backend/handler/ProxyBackendHandlerFactory.java
index ab172cf52d2..b3e5bdf3b45 100644
--- 
a/proxy/backend/core/src/main/java/org/apache/shardingsphere/proxy/backend/handler/ProxyBackendHandlerFactory.java
+++ 
b/proxy/backend/core/src/main/java/org/apache/shardingsphere/proxy/backend/handler/ProxyBackendHandlerFactory.java
@@ -192,7 +192,7 @@ public final class ProxyBackendHandlerFactory {
     }
     
     private static void handleAutoCommit(final SQLStatement sqlStatement, 
final ConnectionSession connectionSession) {
-        if (AutoCommitUtils.needOpenTransaction(sqlStatement)) {
+        if (AutoCommitUtils.isNeedStartTransaction(sqlStatement)) {
             
connectionSession.getDatabaseConnectionManager().handleAutoCommit();
         }
     }

Reply via email to