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