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 854b96b4291 Refactor DatabaseProxyConnectorFactory (#36806)
854b96b4291 is described below
commit 854b96b42914b88ce8246844ba15710040097b95
Author: Liang Zhang <[email protected]>
AuthorDate: Tue Oct 7 14:29:28 2025 +0800
Refactor DatabaseProxyConnectorFactory (#36806)
---
.../backend/connector/DatabaseProxyConnectorFactory.java | 13 +------------
.../handler/data/DatabaseProxyBackendHandlerFactory.java | 2 +-
.../data/impl/UnicastDatabaseProxyBackendHandler.java | 4 +---
.../tcl/local/LocalTCLProxyBackendHandlerFactory.java | 2 +-
.../handler/tcl/xa/XATCLProxyBackendHandlerFactory.java | 2 +-
.../connector/DatabaseProxyConnectorFactoryTest.java | 4 ++--
.../impl/UnicastDatabaseProxyBackendHandlerTest.java | 16 ++--------------
.../handler/tcl/TCLProxyBackendHandlerFactoryTest.java | 4 +---
.../admin/executor/MySQLSetVariableAdminExecutor.java | 2 +-
.../admin/executor/UnicastResourceShowExecutor.java | 4 +---
.../text/fieldlist/MySQLComFieldListPacketExecutor.java | 2 +-
11 files changed, 13 insertions(+), 42 deletions(-)
diff --git
a/proxy/backend/core/src/main/java/org/apache/shardingsphere/proxy/backend/connector/DatabaseProxyConnectorFactory.java
b/proxy/backend/core/src/main/java/org/apache/shardingsphere/proxy/backend/connector/DatabaseProxyConnectorFactory.java
index 8fa3a0b7a97..1764021cfc3 100644
---
a/proxy/backend/core/src/main/java/org/apache/shardingsphere/proxy/backend/connector/DatabaseProxyConnectorFactory.java
+++
b/proxy/backend/core/src/main/java/org/apache/shardingsphere/proxy/backend/connector/DatabaseProxyConnectorFactory.java
@@ -28,17 +28,6 @@ import
org.apache.shardingsphere.infra.session.query.QueryContext;
@NoArgsConstructor(access = AccessLevel.PRIVATE)
public final class DatabaseProxyConnectorFactory {
- private static final DatabaseProxyConnectorFactory INSTANCE = new
DatabaseProxyConnectorFactory();
-
- /**
- * Get backend handler factory instance.
- *
- * @return backend handler factory
- */
- public static DatabaseProxyConnectorFactory getInstance() {
- return INSTANCE;
- }
-
/**
* Create new instance of {@link DatabaseProxyConnector}.
*
@@ -47,7 +36,7 @@ public final class DatabaseProxyConnectorFactory {
* @param preferPreparedStatement use prepared statement as possible
* @return created instance
*/
- public DatabaseProxyConnector newInstance(final QueryContext queryContext,
final ProxyDatabaseConnectionManager databaseConnectionManager, final boolean
preferPreparedStatement) {
+ public static DatabaseProxyConnector newInstance(final QueryContext
queryContext, final ProxyDatabaseConnectionManager databaseConnectionManager,
final boolean preferPreparedStatement) {
String driverType = preferPreparedStatement ||
!queryContext.getParameters().isEmpty() ? JDBCDriverType.PREPARED_STATEMENT :
JDBCDriverType.STATEMENT;
DatabaseProxyConnector result = new
StandardDatabaseProxyConnector(driverType, queryContext,
databaseConnectionManager);
databaseConnectionManager.add(result);
diff --git
a/proxy/backend/core/src/main/java/org/apache/shardingsphere/proxy/backend/handler/data/DatabaseProxyBackendHandlerFactory.java
b/proxy/backend/core/src/main/java/org/apache/shardingsphere/proxy/backend/handler/data/DatabaseProxyBackendHandlerFactory.java
index b8c497e39f5..7e792e88862 100644
---
a/proxy/backend/core/src/main/java/org/apache/shardingsphere/proxy/backend/handler/data/DatabaseProxyBackendHandlerFactory.java
+++
b/proxy/backend/core/src/main/java/org/apache/shardingsphere/proxy/backend/handler/data/DatabaseProxyBackendHandlerFactory.java
@@ -53,7 +53,7 @@ public final class DatabaseProxyBackendHandlerFactory {
if (sqlStatement instanceof DoStatement ||
isNotDatabaseSelectRequiredDALStatement(sqlStatement) ||
isNotContainFromSelectStatement(sqlStatement)) {
return new UnicastDatabaseProxyBackendHandler(queryContext,
connectionSession);
}
- return
DatabaseProxyConnectorFactory.getInstance().newInstance(queryContext,
connectionSession.getDatabaseConnectionManager(), preferPreparedStatement);
+ return DatabaseProxyConnectorFactory.newInstance(queryContext,
connectionSession.getDatabaseConnectionManager(), preferPreparedStatement);
}
private static boolean isNotDatabaseSelectRequiredDALStatement(final
SQLStatement sqlStatement) {
diff --git
a/proxy/backend/core/src/main/java/org/apache/shardingsphere/proxy/backend/handler/data/impl/UnicastDatabaseProxyBackendHandler.java
b/proxy/backend/core/src/main/java/org/apache/shardingsphere/proxy/backend/handler/data/impl/UnicastDatabaseProxyBackendHandler.java
index 0e3bc57a9d7..b05a2e92e04 100644
---
a/proxy/backend/core/src/main/java/org/apache/shardingsphere/proxy/backend/handler/data/impl/UnicastDatabaseProxyBackendHandler.java
+++
b/proxy/backend/core/src/main/java/org/apache/shardingsphere/proxy/backend/handler/data/impl/UnicastDatabaseProxyBackendHandler.java
@@ -43,8 +43,6 @@ import java.util.stream.Stream;
@RequiredArgsConstructor
public final class UnicastDatabaseProxyBackendHandler implements
DatabaseProxyBackendHandler {
- private final DatabaseProxyConnectorFactory databaseProxyConnectorFactory
= DatabaseProxyConnectorFactory.getInstance();
-
private final QueryContext queryContext;
private final ConnectionSession connectionSession;
@@ -59,7 +57,7 @@ public final class UnicastDatabaseProxyBackendHandler
implements DatabaseProxyBa
() -> new EmptyStorageUnitException(unicastDatabaseName));
try {
connectionSession.setCurrentDatabaseName(unicastDatabaseName);
- databaseProxyConnector =
databaseProxyConnectorFactory.newInstance(queryContext,
connectionSession.getDatabaseConnectionManager(), false);
+ databaseProxyConnector =
DatabaseProxyConnectorFactory.newInstance(queryContext,
connectionSession.getDatabaseConnectionManager(), false);
return databaseProxyConnector.execute();
} finally {
connectionSession.setCurrentDatabaseName(originalDatabaseName);
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 f1edf2db8a6..e1b72f3903d 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
@@ -79,6 +79,6 @@ public final class LocalTCLProxyBackendHandlerFactory {
if (sqlStatement instanceof SetTransactionStatement &&
!((SetTransactionStatement)
sqlStatement).isDesiredScope(OperationScope.GLOBAL)) {
return new
SetTransactionProxyBackendHandler((SetTransactionStatement) sqlStatement,
connectionSession);
}
- return
DatabaseProxyConnectorFactory.getInstance().newInstance(queryContext,
connectionSession.getDatabaseConnectionManager(), false);
+ return DatabaseProxyConnectorFactory.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 8b13b4f7353..e82ff84469d 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
@@ -50,7 +50,7 @@ public final class XATCLProxyBackendHandlerFactory {
*/
public static ProxyBackendHandler newInstance(final QueryContext
queryContext, final ConnectionSession connectionSession) {
XAStatement sqlStatement = (XAStatement)
queryContext.getSqlStatementContext().getSqlStatement();
- DatabaseProxyConnector databaseProxyConnector =
DatabaseProxyConnectorFactory.getInstance().newInstance(queryContext,
connectionSession.getDatabaseConnectionManager(), false);
+ DatabaseProxyConnector databaseProxyConnector =
DatabaseProxyConnectorFactory.newInstance(queryContext,
connectionSession.getDatabaseConnectionManager(), false);
if (sqlStatement instanceof XARecoveryStatement) {
return new XARecoveryProxyBackendHandler(databaseProxyConnector);
}
diff --git
a/proxy/backend/core/src/test/java/org/apache/shardingsphere/proxy/backend/connector/DatabaseProxyConnectorFactoryTest.java
b/proxy/backend/core/src/test/java/org/apache/shardingsphere/proxy/backend/connector/DatabaseProxyConnectorFactoryTest.java
index 3035ae0b4f0..9b0cc91992f 100644
---
a/proxy/backend/core/src/test/java/org/apache/shardingsphere/proxy/backend/connector/DatabaseProxyConnectorFactoryTest.java
+++
b/proxy/backend/core/src/test/java/org/apache/shardingsphere/proxy/backend/connector/DatabaseProxyConnectorFactoryTest.java
@@ -68,7 +68,7 @@ class DatabaseProxyConnectorFactoryTest {
QueryContext queryContext = new QueryContext(sqlStatementContext,
"schemaName", Collections.emptyList(), new HintValueContext(),
mockConnectionContext(), metaData);
ContextManager contextManager = mockContextManager(database);
when(ProxyContext.getInstance().getContextManager()).thenReturn(contextManager);
- DatabaseProxyConnector engine =
DatabaseProxyConnectorFactory.getInstance().newInstance(queryContext,
databaseConnectionManager, false);
+ DatabaseProxyConnector engine =
DatabaseProxyConnectorFactory.newInstance(queryContext,
databaseConnectionManager, false);
assertThat(engine, isA(DatabaseProxyConnector.class));
}
@@ -91,7 +91,7 @@ class DatabaseProxyConnectorFactoryTest {
when(metaData.getDatabase("foo_db")).thenReturn(database);
ContextManager contextManager = mockContextManager(database);
when(ProxyContext.getInstance().getContextManager()).thenReturn(contextManager);
- assertThat(DatabaseProxyConnectorFactory.getInstance().newInstance(
+ assertThat(DatabaseProxyConnectorFactory.newInstance(
new QueryContext(sqlStatementContext, "schemaName",
Collections.emptyList(), new HintValueContext(), mockConnectionContext(),
metaData), databaseConnectionManager, false),
isA(DatabaseProxyConnector.class));
}
diff --git
a/proxy/backend/core/src/test/java/org/apache/shardingsphere/proxy/backend/handler/data/impl/UnicastDatabaseProxyBackendHandlerTest.java
b/proxy/backend/core/src/test/java/org/apache/shardingsphere/proxy/backend/handler/data/impl/UnicastDatabaseProxyBackendHandlerTest.java
index d5efef590bc..da0d8420b7b 100644
---
a/proxy/backend/core/src/test/java/org/apache/shardingsphere/proxy/backend/handler/data/impl/UnicastDatabaseProxyBackendHandlerTest.java
+++
b/proxy/backend/core/src/test/java/org/apache/shardingsphere/proxy/backend/handler/data/impl/UnicastDatabaseProxyBackendHandlerTest.java
@@ -17,7 +17,6 @@
package org.apache.shardingsphere.proxy.backend.handler.data.impl;
-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.hint.HintValueContext;
@@ -35,7 +34,6 @@ import
org.apache.shardingsphere.proxy.backend.connector.DatabaseProxyConnector;
import
org.apache.shardingsphere.proxy.backend.connector.DatabaseProxyConnectorFactory;
import
org.apache.shardingsphere.proxy.backend.connector.ProxyDatabaseConnectionManager;
import org.apache.shardingsphere.proxy.backend.context.ProxyContext;
-import
org.apache.shardingsphere.proxy.backend.handler.data.DatabaseProxyBackendHandler;
import org.apache.shardingsphere.proxy.backend.response.header.ResponseHeader;
import
org.apache.shardingsphere.proxy.backend.response.header.update.UpdateResponseHeader;
import org.apache.shardingsphere.proxy.backend.session.ConnectionSession;
@@ -46,7 +44,6 @@ import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.extension.ExtendWith;
import org.mockito.Answers;
import org.mockito.Mock;
-import org.mockito.internal.configuration.plugins.Plugins;
import java.sql.SQLException;
import java.util.Collection;
@@ -65,7 +62,7 @@ import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.when;
@ExtendWith(AutoMockExtension.class)
-@StaticMockSettings(ProxyContext.class)
+@StaticMockSettings({ProxyContext.class, DatabaseProxyConnectorFactory.class})
class UnicastDatabaseProxyBackendHandlerTest {
private static final String EXECUTE_SQL = "SELECT 1 FROM user WHERE id =
1";
@@ -79,9 +76,6 @@ class UnicastDatabaseProxyBackendHandlerTest {
@Mock(answer = Answers.RETURNS_DEEP_STUBS)
private ConnectionSession connectionSession;
- @Mock
- private DatabaseProxyConnectorFactory databaseProxyConnectorFactory;
-
@Mock
private DatabaseProxyConnector databaseProxyConnector;
@@ -93,7 +87,6 @@ class UnicastDatabaseProxyBackendHandlerTest {
when(sqlStatementContext.getTablesContext().getDatabaseNames()).thenReturn(Collections.emptyList());
unicastDatabaseProxyBackendHandler = new
UnicastDatabaseProxyBackendHandler(
new QueryContext(sqlStatementContext, EXECUTE_SQL,
Collections.emptyList(), new HintValueContext(), mockConnectionContext(),
mock()), connectionSession);
- setProxyBackendHandlerFactory(unicastDatabaseProxyBackendHandler);
}
private ConnectionContext mockConnectionContext() {
@@ -104,12 +97,7 @@ class UnicastDatabaseProxyBackendHandlerTest {
private void mockDatabaseProxyConnector(final ResponseHeader
responseHeader) throws SQLException {
when(databaseProxyConnector.execute()).thenReturn(responseHeader);
-
when(databaseProxyConnectorFactory.newInstance(any(QueryContext.class),
any(ProxyDatabaseConnectionManager.class),
eq(false))).thenReturn(databaseProxyConnector);
- }
-
- @SneakyThrows(ReflectiveOperationException.class)
- private void setProxyBackendHandlerFactory(final
DatabaseProxyBackendHandler databaseProxyBackendHandler) {
-
Plugins.getMemberAccessor().set(databaseProxyBackendHandler.getClass().getDeclaredField("databaseProxyConnectorFactory"),
databaseProxyBackendHandler, databaseProxyConnectorFactory);
+
when(DatabaseProxyConnectorFactory.newInstance(any(QueryContext.class),
any(ProxyDatabaseConnectionManager.class),
eq(false))).thenReturn(databaseProxyConnector);
}
@Test
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 7f48f22c459..2578ec6dab3 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
@@ -113,9 +113,7 @@ class TCLProxyBackendHandlerFactoryTest {
SQLStatementContext sqlStatementContext =
mock(SQLStatementContext.class, RETURNS_DEEP_STUBS);
when(sqlStatementContext.getTablesContext().getDatabaseNames()).thenReturn(Collections.emptyList());
when(sqlStatementContext.getSqlStatement()).thenReturn(mock(TCLStatement.class));
- DatabaseProxyConnectorFactory mockFactory =
mock(DatabaseProxyConnectorFactory.class);
-
when(DatabaseProxyConnectorFactory.getInstance()).thenReturn(mockFactory);
- when(mockFactory.newInstance(any(QueryContext.class),
nullable(ProxyDatabaseConnectionManager.class),
anyBoolean())).thenReturn(mock(DatabaseProxyConnector.class));
+
when(DatabaseProxyConnectorFactory.newInstance(any(QueryContext.class),
nullable(ProxyDatabaseConnectionManager.class),
anyBoolean())).thenReturn(mock(DatabaseProxyConnector.class));
ShardingSphereMetaData metaData = mock(ShardingSphereMetaData.class);
when(ProxyContext.getInstance().getContextManager().getMetaDataContexts().getMetaData()).thenReturn(metaData);
QueryContext queryContext = mock(QueryContext.class);
diff --git
a/proxy/backend/dialect/mysql/src/main/java/org/apache/shardingsphere/proxy/backend/mysql/handler/admin/executor/MySQLSetVariableAdminExecutor.java
b/proxy/backend/dialect/mysql/src/main/java/org/apache/shardingsphere/proxy/backend/mysql/handler/admin/executor/MySQLSetVariableAdminExecutor.java
index 3c558582849..8639e6aa029 100644
---
a/proxy/backend/dialect/mysql/src/main/java/org/apache/shardingsphere/proxy/backend/mysql/handler/admin/executor/MySQLSetVariableAdminExecutor.java
+++
b/proxy/backend/dialect/mysql/src/main/java/org/apache/shardingsphere/proxy/backend/mysql/handler/admin/executor/MySQLSetVariableAdminExecutor.java
@@ -93,7 +93,7 @@ public final class MySQLSetVariableAdminExecutor implements
DatabaseAdminExecuto
SQLStatement sqlStatement =
sqlParserRule.getSQLParserEngine(databaseType).parse(sql, false);
SQLStatementContext sqlStatementContext = new
SQLBindEngine(ProxyContext.getInstance().getContextManager().getMetaDataContexts().getMetaData(),
connectionSession.getCurrentDatabaseName(), new
HintValueContext()).bind(sqlStatement);
- DatabaseProxyBackendHandler databaseProxyBackendHandler =
DatabaseProxyConnectorFactory.getInstance().newInstance(
+ DatabaseProxyBackendHandler databaseProxyBackendHandler =
DatabaseProxyConnectorFactory.newInstance(
new QueryContext(sqlStatementContext, sql,
Collections.emptyList(), new HintValueContext(),
connectionSession.getConnectionContext(), metaDataContexts.getMetaData()),
connectionSession.getDatabaseConnectionManager(), false);
try {
diff --git
a/proxy/backend/dialect/mysql/src/main/java/org/apache/shardingsphere/proxy/backend/mysql/handler/admin/executor/UnicastResourceShowExecutor.java
b/proxy/backend/dialect/mysql/src/main/java/org/apache/shardingsphere/proxy/backend/mysql/handler/admin/executor/UnicastResourceShowExecutor.java
index 0c39366ad82..ba3fe45dc76 100644
---
a/proxy/backend/dialect/mysql/src/main/java/org/apache/shardingsphere/proxy/backend/mysql/handler/admin/executor/UnicastResourceShowExecutor.java
+++
b/proxy/backend/dialect/mysql/src/main/java/org/apache/shardingsphere/proxy/backend/mysql/handler/admin/executor/UnicastResourceShowExecutor.java
@@ -61,8 +61,6 @@ import java.util.stream.Collectors;
@RequiredArgsConstructor
public final class UnicastResourceShowExecutor implements
DatabaseAdminQueryExecutor {
- private final DatabaseProxyConnectorFactory databaseProxyConnectorFactory
= DatabaseProxyConnectorFactory.getInstance();
-
private final SelectStatement sqlStatement;
private final String sql;
@@ -84,7 +82,7 @@ public final class UnicastResourceShowExecutor implements
DatabaseAdminQueryExec
connectionSession.setCurrentDatabaseName(databaseName);
ShardingSphereMetaData metaData =
ProxyContext.getInstance().getContextManager().getMetaDataContexts().getMetaData();
SQLStatementContext sqlStatementContext = new
SQLBindEngine(metaData, connectionSession.getCurrentDatabaseName(),
hintValueContext).bind(sqlStatement);
- databaseProxyConnector =
databaseProxyConnectorFactory.newInstance(new QueryContext(
+ databaseProxyConnector =
DatabaseProxyConnectorFactory.newInstance(new QueryContext(
sqlStatementContext, sql, Collections.emptyList(),
hintValueContext, connectionSession.getConnectionContext(), metaData),
connectionSession.getDatabaseConnectionManager(), false);
responseHeader = databaseProxyConnector.execute();
mergedResult = new TransparentMergedResult(createQueryResult());
diff --git
a/proxy/frontend/dialect/mysql/src/main/java/org/apache/shardingsphere/proxy/frontend/mysql/command/query/text/fieldlist/MySQLComFieldListPacketExecutor.java
b/proxy/frontend/dialect/mysql/src/main/java/org/apache/shardingsphere/proxy/frontend/mysql/command/query/text/fieldlist/MySQLComFieldListPacketExecutor.java
index 67b09e8ae82..a5181b39f80 100644
---
a/proxy/frontend/dialect/mysql/src/main/java/org/apache/shardingsphere/proxy/frontend/mysql/command/query/text/fieldlist/MySQLComFieldListPacketExecutor.java
+++
b/proxy/frontend/dialect/mysql/src/main/java/org/apache/shardingsphere/proxy/frontend/mysql/command/query/text/fieldlist/MySQLComFieldListPacketExecutor.java
@@ -74,7 +74,7 @@ public final class MySQLComFieldListPacketExecutor implements
CommandExecutor {
SQLStatementContext sqlStatementContext = new
SQLBindEngine(metaDataContexts.getMetaData(), currentDatabaseName,
hintValueContext).bind(sqlStatement);
ProxyDatabaseConnectionManager databaseConnectionManager =
connectionSession.getDatabaseConnectionManager();
QueryContext queryContext = new QueryContext(sqlStatementContext, sql,
Collections.emptyList(), hintValueContext,
connectionSession.getConnectionContext(), metaDataContexts.getMetaData());
- databaseProxyConnector =
DatabaseProxyConnectorFactory.getInstance().newInstance(queryContext,
databaseConnectionManager, false);
+ databaseProxyConnector =
DatabaseProxyConnectorFactory.newInstance(queryContext,
databaseConnectionManager, false);
databaseProxyConnector.execute();
return createColumnDefinition41Packets(currentDatabaseName);
}