This is an automated email from the ASF dual-hosted git repository.

yx9o 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 5b4182fe31a Refactor TCLProxyBackendHandlerFactory (#36798)
5b4182fe31a is described below

commit 5b4182fe31a8116df45ac69aa86509a9056d3a18
Author: Liang Zhang <[email protected]>
AuthorDate: Mon Oct 6 12:32:16 2025 +0800

    Refactor TCLProxyBackendHandlerFactory (#36798)
---
 .../handler/ProxyBackendHandlerFactory.java        |  6 +++---
 .../handler/tcl/TCLProxyBackendHandlerFactory.java | 13 ++++++------
 .../local/LocalTCLProxyBackendHandlerFactory.java  | 14 +++----------
 .../tcl/xa/XATCLProxyBackendHandlerFactory.java    | 14 +++----------
 .../tcl/TCLProxyBackendHandlerFactoryTest.java     | 24 ++++++++--------------
 5 files changed, 24 insertions(+), 47 deletions(-)

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 1fa2d09afd1..0f8632a6dfe 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
@@ -127,12 +127,12 @@ public final class ProxyBackendHandlerFactory {
             checkSupportedDistSQLStatementInTransaction(sqlStatement, 
connectionSession);
             return DistSQLBackendHandlerFactory.newInstance((DistSQLStatement) 
sqlStatement, connectionSession);
         }
-        String sql = queryContext.getSql();
         handleAutoCommit(sqlStatement, connectionSession);
         if (sqlStatement instanceof TCLStatement) {
-            return 
TCLProxyBackendHandlerFactory.newInstance(sqlStatementContext, sql, 
connectionSession);
+            return TCLProxyBackendHandlerFactory.newInstance(queryContext, 
connectionSession);
         }
-        Optional<ProxyBackendHandler> databaseAdminHandler = 
DatabaseAdminBackendHandlerFactory.newInstance(databaseType, 
sqlStatementContext, connectionSession, sql, queryContext.getParameters());
+        Optional<ProxyBackendHandler> databaseAdminHandler = 
DatabaseAdminBackendHandlerFactory.newInstance(
+                databaseType, sqlStatementContext, connectionSession, 
queryContext.getSql(), queryContext.getParameters());
         if (databaseAdminHandler.isPresent()) {
             return databaseAdminHandler.get();
         }
diff --git 
a/proxy/backend/core/src/main/java/org/apache/shardingsphere/proxy/backend/handler/tcl/TCLProxyBackendHandlerFactory.java
 
b/proxy/backend/core/src/main/java/org/apache/shardingsphere/proxy/backend/handler/tcl/TCLProxyBackendHandlerFactory.java
index 2ee7f2cc383..c9cee9d7fa5 100644
--- 
a/proxy/backend/core/src/main/java/org/apache/shardingsphere/proxy/backend/handler/tcl/TCLProxyBackendHandlerFactory.java
+++ 
b/proxy/backend/core/src/main/java/org/apache/shardingsphere/proxy/backend/handler/tcl/TCLProxyBackendHandlerFactory.java
@@ -19,7 +19,7 @@ package org.apache.shardingsphere.proxy.backend.handler.tcl;
 
 import lombok.AccessLevel;
 import lombok.NoArgsConstructor;
-import 
org.apache.shardingsphere.infra.binder.context.statement.SQLStatementContext;
+import org.apache.shardingsphere.infra.session.query.QueryContext;
 import org.apache.shardingsphere.proxy.backend.handler.ProxyBackendHandler;
 import 
org.apache.shardingsphere.proxy.backend.handler.tcl.local.LocalTCLProxyBackendHandlerFactory;
 import 
org.apache.shardingsphere.proxy.backend.handler.tcl.xa.XATCLProxyBackendHandlerFactory;
@@ -35,14 +35,13 @@ public final class TCLProxyBackendHandlerFactory {
     /**
      * New instance of TCL proxy backend handler.
      *
-     * @param sqlStatementContext SQL statement context
-     * @param sql SQL
+     * @param queryContext query context
      * @param connectionSession connection session
      * @return created instance
      */
-    public static ProxyBackendHandler newInstance(final SQLStatementContext 
sqlStatementContext, final String sql, final ConnectionSession 
connectionSession) {
-        return sqlStatementContext.getSqlStatement() instanceof XAStatement
-                ? 
XATCLProxyBackendHandlerFactory.newInstance(sqlStatementContext, sql, 
connectionSession)
-                : 
LocalTCLProxyBackendHandlerFactory.newInstance(sqlStatementContext, sql, 
connectionSession);
+    public static ProxyBackendHandler newInstance(final QueryContext 
queryContext, final ConnectionSession connectionSession) {
+        return queryContext.getSqlStatementContext().getSqlStatement() 
instanceof XAStatement
+                ? XATCLProxyBackendHandlerFactory.newInstance(queryContext, 
connectionSession)
+                : LocalTCLProxyBackendHandlerFactory.newInstance(queryContext, 
connectionSession);
     }
 }
diff --git 
a/proxy/backend/core/src/main/java/org/apache/shardingsphere/proxy/backend/handler/tcl/local/LocalTCLProxyBackendHandlerFactory.java
 
b/proxy/backend/core/src/main/java/org/apache/shardingsphere/proxy/backend/handler/tcl/local/LocalTCLProxyBackendHandlerFactory.java
index 217f5c0c989..035e9fcb455 100644
--- 
a/proxy/backend/core/src/main/java/org/apache/shardingsphere/proxy/backend/handler/tcl/local/LocalTCLProxyBackendHandlerFactory.java
+++ 
b/proxy/backend/core/src/main/java/org/apache/shardingsphere/proxy/backend/handler/tcl/local/LocalTCLProxyBackendHandlerFactory.java
@@ -19,11 +19,8 @@ package 
org.apache.shardingsphere.proxy.backend.handler.tcl.local;
 
 import lombok.AccessLevel;
 import lombok.NoArgsConstructor;
-import 
org.apache.shardingsphere.infra.binder.context.statement.SQLStatementContext;
-import org.apache.shardingsphere.infra.hint.HintValueContext;
 import org.apache.shardingsphere.infra.session.query.QueryContext;
 import 
org.apache.shardingsphere.proxy.backend.connector.DatabaseConnectorFactory;
-import org.apache.shardingsphere.proxy.backend.context.ProxyContext;
 import org.apache.shardingsphere.proxy.backend.handler.ProxyBackendHandler;
 import 
org.apache.shardingsphere.proxy.backend.handler.tcl.local.type.BeginTransactionProxyBackendHandler;
 import 
org.apache.shardingsphere.proxy.backend.handler.tcl.local.type.CommitProxyBackendHandler;
@@ -44,8 +41,6 @@ import 
org.apache.shardingsphere.sql.parser.statement.core.statement.type.tcl.Se
 import 
org.apache.shardingsphere.sql.parser.statement.core.statement.type.tcl.SetTransactionStatement;
 import 
org.apache.shardingsphere.sql.parser.statement.core.statement.type.tcl.TCLStatement;
 
-import java.util.Collections;
-
 /**
  * Local TCL proxy backend handler factory.
  */
@@ -55,13 +50,12 @@ public final class LocalTCLProxyBackendHandlerFactory {
     /**
      * New instance of local TCL proxy backend handler.
      *
-     * @param sqlStatementContext SQL statement context
-     * @param sql SQL
+     * @param queryContext query context
      * @param connectionSession connection session
      * @return created instance
      */
-    public static ProxyBackendHandler newInstance(final SQLStatementContext 
sqlStatementContext, final String sql, final ConnectionSession 
connectionSession) {
-        TCLStatement sqlStatement = (TCLStatement) 
sqlStatementContext.getSqlStatement();
+    public static ProxyBackendHandler newInstance(final QueryContext 
queryContext, final ConnectionSession connectionSession) {
+        TCLStatement sqlStatement = (TCLStatement) 
queryContext.getSqlStatementContext().getSqlStatement();
         if (sqlStatement instanceof BeginTransactionStatement) {
             return new BeginTransactionProxyBackendHandler(sqlStatement, 
connectionSession);
         }
@@ -85,8 +79,6 @@ public final class LocalTCLProxyBackendHandlerFactory {
         if (sqlStatement instanceof SetTransactionStatement && 
!((SetTransactionStatement) 
sqlStatement).isDesiredScope(OperationScope.GLOBAL)) {
             return new 
SetTransactionProxyBackendHandler((SetTransactionStatement) sqlStatement, 
connectionSession);
         }
-        QueryContext queryContext = new QueryContext(sqlStatementContext, sql,
-                Collections.emptyList(), new HintValueContext(), 
connectionSession.getConnectionContext(), 
ProxyContext.getInstance().getContextManager().getMetaDataContexts().getMetaData());
         return 
DatabaseConnectorFactory.getInstance().newInstance(queryContext, 
connectionSession.getDatabaseConnectionManager(), false);
     }
 }
diff --git 
a/proxy/backend/core/src/main/java/org/apache/shardingsphere/proxy/backend/handler/tcl/xa/XATCLProxyBackendHandlerFactory.java
 
b/proxy/backend/core/src/main/java/org/apache/shardingsphere/proxy/backend/handler/tcl/xa/XATCLProxyBackendHandlerFactory.java
index 69d2be8bad4..9d856b0a1bd 100644
--- 
a/proxy/backend/core/src/main/java/org/apache/shardingsphere/proxy/backend/handler/tcl/xa/XATCLProxyBackendHandlerFactory.java
+++ 
b/proxy/backend/core/src/main/java/org/apache/shardingsphere/proxy/backend/handler/tcl/xa/XATCLProxyBackendHandlerFactory.java
@@ -19,12 +19,9 @@ package 
org.apache.shardingsphere.proxy.backend.handler.tcl.xa;
 
 import lombok.AccessLevel;
 import lombok.NoArgsConstructor;
-import 
org.apache.shardingsphere.infra.binder.context.statement.SQLStatementContext;
-import org.apache.shardingsphere.infra.hint.HintValueContext;
 import org.apache.shardingsphere.infra.session.query.QueryContext;
 import org.apache.shardingsphere.proxy.backend.connector.DatabaseConnector;
 import 
org.apache.shardingsphere.proxy.backend.connector.DatabaseConnectorFactory;
-import org.apache.shardingsphere.proxy.backend.context.ProxyContext;
 import org.apache.shardingsphere.proxy.backend.handler.ProxyBackendHandler;
 import 
org.apache.shardingsphere.proxy.backend.handler.tcl.xa.type.XABeginProxyBackendHandler;
 import 
org.apache.shardingsphere.proxy.backend.handler.tcl.xa.type.XACommitProxyBackendHandler;
@@ -38,8 +35,6 @@ import 
org.apache.shardingsphere.sql.parser.statement.core.statement.type.tcl.xa
 import 
org.apache.shardingsphere.sql.parser.statement.core.statement.type.tcl.xa.XARollbackStatement;
 import 
org.apache.shardingsphere.sql.parser.statement.core.statement.type.tcl.xa.XAStatement;
 
-import java.util.Collections;
-
 /**
  * XA TCL proxy backend handler factory.
  */
@@ -49,15 +44,12 @@ public final class XATCLProxyBackendHandlerFactory {
     /**
      * New instance of XA TCL proxy backend handler.
      *
-     * @param sqlStatementContext SQL statement context
-     * @param sql SQL
      * @param connectionSession connection session
+     * @param queryContext query context
      * @return created instance
      */
-    public static ProxyBackendHandler newInstance(final SQLStatementContext 
sqlStatementContext, final String sql, final ConnectionSession 
connectionSession) {
-        XAStatement sqlStatement = (XAStatement) 
sqlStatementContext.getSqlStatement();
-        QueryContext queryContext = new QueryContext(sqlStatementContext, sql,
-                Collections.emptyList(), new HintValueContext(), 
connectionSession.getConnectionContext(), 
ProxyContext.getInstance().getContextManager().getMetaDataContexts().getMetaData());
+    public static ProxyBackendHandler newInstance(final QueryContext 
queryContext, final ConnectionSession connectionSession) {
+        XAStatement sqlStatement = (XAStatement) 
queryContext.getSqlStatementContext().getSqlStatement();
         DatabaseConnector databaseConnector = 
DatabaseConnectorFactory.getInstance().newInstance(queryContext, 
connectionSession.getDatabaseConnectionManager(), false);
         if (sqlStatement instanceof XARecoveryStatement) {
             return new XARecoveryProxyBackendHandler(databaseConnector);
diff --git 
a/proxy/backend/core/src/test/java/org/apache/shardingsphere/proxy/backend/handler/tcl/TCLProxyBackendHandlerFactoryTest.java
 
b/proxy/backend/core/src/test/java/org/apache/shardingsphere/proxy/backend/handler/tcl/TCLProxyBackendHandlerFactoryTest.java
index 83f754aecce..d5a48e72337 100644
--- 
a/proxy/backend/core/src/test/java/org/apache/shardingsphere/proxy/backend/handler/tcl/TCLProxyBackendHandlerFactoryTest.java
+++ 
b/proxy/backend/core/src/test/java/org/apache/shardingsphere/proxy/backend/handler/tcl/TCLProxyBackendHandlerFactoryTest.java
@@ -20,10 +20,8 @@ package org.apache.shardingsphere.proxy.backend.handler.tcl;
 import lombok.SneakyThrows;
 import org.apache.shardingsphere.database.connector.core.type.DatabaseType;
 import 
org.apache.shardingsphere.infra.binder.context.statement.SQLStatementContext;
-import 
org.apache.shardingsphere.infra.binder.context.statement.type.CommonSQLStatementContext;
 import org.apache.shardingsphere.infra.metadata.ShardingSphereMetaData;
 import org.apache.shardingsphere.infra.metadata.database.rule.RuleMetaData;
-import org.apache.shardingsphere.infra.session.connection.ConnectionContext;
 import 
org.apache.shardingsphere.infra.session.connection.transaction.TransactionConnectionContext;
 import org.apache.shardingsphere.infra.session.query.QueryContext;
 import org.apache.shardingsphere.infra.spi.type.typed.TypedSPILoader;
@@ -50,7 +48,6 @@ import org.mockito.Answers;
 import org.mockito.internal.configuration.plugins.Plugins;
 
 import java.util.Collections;
-import java.util.Optional;
 
 import static org.hamcrest.CoreMatchers.is;
 import static org.hamcrest.MatcherAssert.assertThat;
@@ -78,7 +75,9 @@ class TCLProxyBackendHandlerFactoryTest {
         
when(databaseConnectionManager.getConnectionSession().getConnectionContext().getTransactionContext()).thenReturn(new
 TransactionConnectionContext());
         ContextManager contextManager = mockContextManager();
         
when(ProxyContext.getInstance().getContextManager()).thenReturn(contextManager);
-        ProxyBackendHandler proxyBackendHandler = 
TCLProxyBackendHandlerFactory.newInstance(new CommonSQLStatementContext(new 
CommitStatement(databaseType)), null, connectionSession);
+        QueryContext queryContext = mock(QueryContext.class, 
RETURNS_DEEP_STUBS);
+        
when(queryContext.getSqlStatementContext().getSqlStatement()).thenReturn(new 
CommitStatement(databaseType));
+        ProxyBackendHandler proxyBackendHandler = 
TCLProxyBackendHandlerFactory.newInstance(queryContext, connectionSession);
         assertThat(proxyBackendHandler, isA(CommitProxyBackendHandler.class));
         CommitProxyBackendHandler backendHandler = (CommitProxyBackendHandler) 
proxyBackendHandler;
         assertFieldOfInstance(getTransactionManager(backendHandler), 
"connection", is(databaseConnectionManager));
@@ -95,7 +94,9 @@ class TCLProxyBackendHandlerFactoryTest {
         
when(connectionSession.getDatabaseConnectionManager().getConnectionSession().getConnectionContext().getTransactionContext()).thenReturn(new
 TransactionConnectionContext());
         ContextManager contextManager = mockContextManager();
         
when(ProxyContext.getInstance().getContextManager()).thenReturn(contextManager);
-        ProxyBackendHandler proxyBackendHandler = 
TCLProxyBackendHandlerFactory.newInstance(new CommonSQLStatementContext(new 
RollbackStatement(databaseType)), null, connectionSession);
+        QueryContext queryContext = mock(QueryContext.class, 
RETURNS_DEEP_STUBS);
+        
when(queryContext.getSqlStatementContext().getSqlStatement()).thenReturn(new 
RollbackStatement(databaseType));
+        ProxyBackendHandler proxyBackendHandler = 
TCLProxyBackendHandlerFactory.newInstance(queryContext, connectionSession);
         assertThat(proxyBackendHandler, 
isA(RollbackProxyBackendHandler.class));
         RollbackProxyBackendHandler backendHandler = 
(RollbackProxyBackendHandler) proxyBackendHandler;
         assertFieldOfInstance(getTransactionManager(backendHandler), 
"connection", is(databaseConnectionManager));
@@ -117,16 +118,9 @@ class TCLProxyBackendHandlerFactoryTest {
         when(mockFactory.newInstance(any(QueryContext.class), 
nullable(ProxyDatabaseConnectionManager.class), 
anyBoolean())).thenReturn(mock(DatabaseConnector.class));
         ShardingSphereMetaData metaData = mock(ShardingSphereMetaData.class);
         
when(ProxyContext.getInstance().getContextManager().getMetaDataContexts().getMetaData()).thenReturn(metaData);
-        ConnectionSession connectionSession = mock(ConnectionSession.class);
-        ConnectionContext connectionContext = mockConnectionContext();
-        
when(connectionSession.getConnectionContext()).thenReturn(connectionContext);
-        
assertThat(TCLProxyBackendHandlerFactory.newInstance(sqlStatementContext, null, 
connectionSession), isA(DatabaseConnector.class));
-    }
-    
-    private ConnectionContext mockConnectionContext() {
-        ConnectionContext result = mock(ConnectionContext.class);
-        
when(result.getCurrentDatabaseName()).thenReturn(Optional.of("foo_db"));
-        return result;
+        QueryContext queryContext = mock(QueryContext.class);
+        
when(queryContext.getSqlStatementContext()).thenReturn(sqlStatementContext);
+        assertThat(TCLProxyBackendHandlerFactory.newInstance(queryContext, 
mock(ConnectionSession.class)), isA(DatabaseConnector.class));
     }
     
     @SuppressWarnings("unchecked")

Reply via email to