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")