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 f201da057a0 Refactor DatabaseOperateProxyBackendHandlerFactory (#36836)
f201da057a0 is described below
commit f201da057a0c1ea8d2ce6fe53749c1433d9ad993
Author: Liang Zhang <[email protected]>
AuthorDate: Fri Oct 10 13:25:08 2025 +0800
Refactor DatabaseOperateProxyBackendHandlerFactory (#36836)
---
.../backend/handler/ProxyBackendHandlerFactory.java | 6 +++---
.../DatabaseOperateProxyBackendHandlerFactory.java | 16 +++++++---------
.../database/type/CreateDatabaseProxyBackendHandler.java | 11 ++++-------
.../database/type/DropDatabaseProxyBackendHandler.java | 9 ++++-----
.../DatabaseOperateProxyBackendHandlerFactoryTest.java | 13 +++++++------
.../type/CreateDatabaseProxyBackendHandlerTest.java | 10 +++++++---
.../type/DropDatabaseProxyBackendHandlerTest.java | 6 +++++-
7 files changed, 37 insertions(+), 34 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 07233815e32..1236c5f017e 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
@@ -136,7 +136,7 @@ public final class ProxyBackendHandlerFactory {
if (databaseAdminHandler.isPresent()) {
return databaseAdminHandler.get();
}
- Optional<ProxyBackendHandler> databaseOperateHandler =
findDatabaseOperateProxyBackendHandler(sqlStatement, queryContext,
connectionSession);
+ Optional<ProxyBackendHandler> databaseOperateHandler =
findDatabaseOperateProxyBackendHandler(sqlStatement, connectionSession);
if (databaseOperateHandler.isPresent()) {
return databaseOperateHandler.get();
}
@@ -192,9 +192,9 @@ public final class ProxyBackendHandlerFactory {
}
}
- private static Optional<ProxyBackendHandler>
findDatabaseOperateProxyBackendHandler(final SQLStatement sqlStatement, final
QueryContext queryContext, final ConnectionSession connectionSession) {
+ private static Optional<ProxyBackendHandler>
findDatabaseOperateProxyBackendHandler(final SQLStatement sqlStatement, final
ConnectionSession connectionSession) {
return sqlStatement instanceof CreateDatabaseStatement || sqlStatement
instanceof DropDatabaseStatement
- ?
Optional.of(DatabaseOperateProxyBackendHandlerFactory.newInstance(sqlStatement,
queryContext.getMetaData(), connectionSession))
+ ?
Optional.of(DatabaseOperateProxyBackendHandlerFactory.newInstance(sqlStatement,
connectionSession))
: Optional.empty();
}
diff --git
a/proxy/backend/core/src/main/java/org/apache/shardingsphere/proxy/backend/handler/database/DatabaseOperateProxyBackendHandlerFactory.java
b/proxy/backend/core/src/main/java/org/apache/shardingsphere/proxy/backend/handler/database/DatabaseOperateProxyBackendHandlerFactory.java
index 09ce0b564c5..0d6161ac5b1 100644
---
a/proxy/backend/core/src/main/java/org/apache/shardingsphere/proxy/backend/handler/database/DatabaseOperateProxyBackendHandlerFactory.java
+++
b/proxy/backend/core/src/main/java/org/apache/shardingsphere/proxy/backend/handler/database/DatabaseOperateProxyBackendHandlerFactory.java
@@ -20,8 +20,7 @@ package
org.apache.shardingsphere.proxy.backend.handler.database;
import lombok.AccessLevel;
import lombok.NoArgsConstructor;
import
org.apache.shardingsphere.infra.exception.generic.UnsupportedSQLOperationException;
-import org.apache.shardingsphere.infra.metadata.ShardingSphereMetaData;
-import
org.apache.shardingsphere.mode.persist.service.MetaDataManagerPersistService;
+import org.apache.shardingsphere.mode.manager.ContextManager;
import org.apache.shardingsphere.proxy.backend.context.ProxyContext;
import org.apache.shardingsphere.proxy.backend.handler.ProxyBackendHandler;
import
org.apache.shardingsphere.proxy.backend.handler.database.type.CreateDatabaseProxyBackendHandler;
@@ -41,21 +40,20 @@ public final class
DatabaseOperateProxyBackendHandlerFactory {
* Create new instance of database operate backend handler.
*
* @param sqlStatement SQL statement
- * @param metaData meta data
* @param connectionSession connection session
* @return created instance
*/
- public static ProxyBackendHandler newInstance(final SQLStatement
sqlStatement, final ShardingSphereMetaData metaData, final ConnectionSession
connectionSession) {
- return createProxyBackendHandler(sqlStatement, metaData,
connectionSession);
+ public static ProxyBackendHandler newInstance(final SQLStatement
sqlStatement, final ConnectionSession connectionSession) {
+ return createProxyBackendHandler(sqlStatement, connectionSession);
}
- private static ProxyBackendHandler createProxyBackendHandler(final
SQLStatement sqlStatement, final ShardingSphereMetaData metaData, final
ConnectionSession connectionSession) {
- MetaDataManagerPersistService metaDataManagerPersistService =
ProxyContext.getInstance().getContextManager().getPersistServiceFacade().getModeFacade().getMetaDataManagerService();
+ private static ProxyBackendHandler createProxyBackendHandler(final
SQLStatement sqlStatement, final ConnectionSession connectionSession) {
+ ContextManager contextManager =
ProxyContext.getInstance().getContextManager();
if (sqlStatement instanceof CreateDatabaseStatement) {
- return new
CreateDatabaseProxyBackendHandler((CreateDatabaseStatement) sqlStatement,
metaData, metaDataManagerPersistService);
+ return new
CreateDatabaseProxyBackendHandler((CreateDatabaseStatement) sqlStatement,
contextManager);
}
if (sqlStatement instanceof DropDatabaseStatement) {
- return new DropDatabaseProxyBackendHandler((DropDatabaseStatement)
sqlStatement, metaData, metaDataManagerPersistService, connectionSession);
+ return new DropDatabaseProxyBackendHandler((DropDatabaseStatement)
sqlStatement, contextManager, connectionSession);
}
throw new
UnsupportedSQLOperationException(sqlStatement.getClass().getName());
}
diff --git
a/proxy/backend/core/src/main/java/org/apache/shardingsphere/proxy/backend/handler/database/type/CreateDatabaseProxyBackendHandler.java
b/proxy/backend/core/src/main/java/org/apache/shardingsphere/proxy/backend/handler/database/type/CreateDatabaseProxyBackendHandler.java
index b8238b26d63..c5e44ca82a6 100644
---
a/proxy/backend/core/src/main/java/org/apache/shardingsphere/proxy/backend/handler/database/type/CreateDatabaseProxyBackendHandler.java
+++
b/proxy/backend/core/src/main/java/org/apache/shardingsphere/proxy/backend/handler/database/type/CreateDatabaseProxyBackendHandler.java
@@ -20,8 +20,7 @@ package
org.apache.shardingsphere.proxy.backend.handler.database.type;
import lombok.RequiredArgsConstructor;
import
org.apache.shardingsphere.database.exception.core.exception.syntax.database.DatabaseCreateExistsException;
import org.apache.shardingsphere.infra.exception.ShardingSpherePreconditions;
-import org.apache.shardingsphere.infra.metadata.ShardingSphereMetaData;
-import
org.apache.shardingsphere.mode.persist.service.MetaDataManagerPersistService;
+import org.apache.shardingsphere.mode.manager.ContextManager;
import org.apache.shardingsphere.proxy.backend.handler.ProxyBackendHandler;
import org.apache.shardingsphere.proxy.backend.response.header.ResponseHeader;
import
org.apache.shardingsphere.proxy.backend.response.header.update.UpdateResponseHeader;
@@ -37,15 +36,13 @@ public final class CreateDatabaseProxyBackendHandler
implements ProxyBackendHand
private final CreateDatabaseStatement sqlStatement;
- private final ShardingSphereMetaData metaData;
-
- private final MetaDataManagerPersistService metaDataManagerPersistService;
+ private final ContextManager contextManager;
@Override
public ResponseHeader execute() throws SQLException {
- ShardingSpherePreconditions.checkState(sqlStatement.isIfNotExists() ||
!metaData.containsDatabase(sqlStatement.getDatabaseName()),
+ ShardingSpherePreconditions.checkState(sqlStatement.isIfNotExists() ||
!contextManager.getMetaDataContexts().getMetaData().containsDatabase(sqlStatement.getDatabaseName()),
() -> new
DatabaseCreateExistsException(sqlStatement.getDatabaseName()));
-
metaDataManagerPersistService.createDatabase(sqlStatement.getDatabaseName());
+
contextManager.getPersistServiceFacade().getModeFacade().getMetaDataManagerService().createDatabase(sqlStatement.getDatabaseName());
return new UpdateResponseHeader(sqlStatement);
}
}
diff --git
a/proxy/backend/core/src/main/java/org/apache/shardingsphere/proxy/backend/handler/database/type/DropDatabaseProxyBackendHandler.java
b/proxy/backend/core/src/main/java/org/apache/shardingsphere/proxy/backend/handler/database/type/DropDatabaseProxyBackendHandler.java
index f8e22583f32..42624707a73 100644
---
a/proxy/backend/core/src/main/java/org/apache/shardingsphere/proxy/backend/handler/database/type/DropDatabaseProxyBackendHandler.java
+++
b/proxy/backend/core/src/main/java/org/apache/shardingsphere/proxy/backend/handler/database/type/DropDatabaseProxyBackendHandler.java
@@ -29,7 +29,7 @@ import
org.apache.shardingsphere.infra.exception.ShardingSpherePreconditions;
import org.apache.shardingsphere.infra.metadata.ShardingSphereMetaData;
import
org.apache.shardingsphere.infra.metadata.database.ShardingSphereDatabase;
import org.apache.shardingsphere.infra.metadata.user.Grantee;
-import
org.apache.shardingsphere.mode.persist.service.MetaDataManagerPersistService;
+import org.apache.shardingsphere.mode.manager.ContextManager;
import org.apache.shardingsphere.proxy.backend.handler.ProxyBackendHandler;
import org.apache.shardingsphere.proxy.backend.response.header.ResponseHeader;
import
org.apache.shardingsphere.proxy.backend.response.header.update.UpdateResponseHeader;
@@ -46,14 +46,13 @@ public final class DropDatabaseProxyBackendHandler
implements ProxyBackendHandle
private final DropDatabaseStatement sqlStatement;
- private final ShardingSphereMetaData metaData;
-
- private final MetaDataManagerPersistService metaDataManagerPersistService;
+ private final ContextManager contextManager;
private final ConnectionSession connectionSession;
@Override
public ResponseHeader execute() throws SQLException {
+ ShardingSphereMetaData metaData =
contextManager.getMetaDataContexts().getMetaData();
check(sqlStatement, metaData,
connectionSession.getConnectionContext().getGrantee());
if (isDropCurrentDatabase(sqlStatement.getDatabaseName())) {
checkSupportedDropCurrentDatabase(connectionSession);
@@ -61,7 +60,7 @@ public final class DropDatabaseProxyBackendHandler implements
ProxyBackendHandle
}
if (metaData.containsDatabase(sqlStatement.getDatabaseName())) {
ShardingSphereDatabase database =
metaData.getDatabase(sqlStatement.getDatabaseName());
- metaDataManagerPersistService.dropDatabase(database);
+
contextManager.getPersistServiceFacade().getModeFacade().getMetaDataManagerService().dropDatabase(database);
}
return new UpdateResponseHeader(sqlStatement);
}
diff --git
a/proxy/backend/core/src/test/java/org/apache/shardingsphere/proxy/backend/handler/database/DatabaseOperateProxyBackendHandlerFactoryTest.java
b/proxy/backend/core/src/test/java/org/apache/shardingsphere/proxy/backend/handler/database/DatabaseOperateProxyBackendHandlerFactoryTest.java
index 2bcb081d75f..28bba8131e7 100644
---
a/proxy/backend/core/src/test/java/org/apache/shardingsphere/proxy/backend/handler/database/DatabaseOperateProxyBackendHandlerFactoryTest.java
+++
b/proxy/backend/core/src/test/java/org/apache/shardingsphere/proxy/backend/handler/database/DatabaseOperateProxyBackendHandlerFactoryTest.java
@@ -72,13 +72,14 @@ class DatabaseOperateProxyBackendHandlerFactoryTest {
void setUp() {
when(connectionSession.getConnectionContext().getGrantee()).thenReturn(null);
when(ProxyContext.getInstance().databaseExists("foo_db")).thenReturn(true);
+
when(ProxyContext.getInstance().getContextManager().getMetaDataContexts().getMetaData()).thenReturn(metaData);
}
@Test
void assertExecuteCreateDatabaseContext() throws SQLException {
CreateDatabaseStatement sqlStatement =
mock(CreateDatabaseStatement.class);
when(sqlStatement.getDatabaseName()).thenReturn("new_db");
- ResponseHeader response =
DatabaseOperateProxyBackendHandlerFactory.newInstance(sqlStatement, metaData,
connectionSession).execute();
+ ResponseHeader response =
DatabaseOperateProxyBackendHandlerFactory.newInstance(sqlStatement,
connectionSession).execute();
assertThat(response, isA(UpdateResponseHeader.class));
}
@@ -86,7 +87,7 @@ class DatabaseOperateProxyBackendHandlerFactoryTest {
void assertExecuteDropDatabaseContext() throws SQLException {
DropDatabaseStatement sqlStatement = mock(DropDatabaseStatement.class);
when(sqlStatement.getDatabaseName()).thenReturn("foo_db");
- ResponseHeader response =
DatabaseOperateProxyBackendHandlerFactory.newInstance(sqlStatement, metaData,
connectionSession).execute();
+ ResponseHeader response =
DatabaseOperateProxyBackendHandlerFactory.newInstance(sqlStatement,
connectionSession).execute();
assertThat(response, isA(UpdateResponseHeader.class));
}
@@ -95,7 +96,7 @@ class DatabaseOperateProxyBackendHandlerFactoryTest {
CreateDatabaseStatement sqlStatement =
mock(CreateDatabaseStatement.class);
when(sqlStatement.getDatabaseName()).thenReturn("foo_db");
try {
-
DatabaseOperateProxyBackendHandlerFactory.newInstance(sqlStatement, metaData,
connectionSession);
+
DatabaseOperateProxyBackendHandlerFactory.newInstance(sqlStatement,
connectionSession);
} catch (final DatabaseCreateExistsException ex) {
assertNull(ex.getMessage());
}
@@ -110,16 +111,16 @@ class DatabaseOperateProxyBackendHandlerFactoryTest {
@Test
void
assertDatabaseOperateProxyBackendHandlerFactoryReturnCreateDatabaseProxyBackendHandler()
{
-
assertThat(DatabaseOperateProxyBackendHandlerFactory.newInstance(mock(CreateDatabaseStatement.class),
metaData, mock(ConnectionSession.class)),
isA(CreateDatabaseProxyBackendHandler.class));
+
assertThat(DatabaseOperateProxyBackendHandlerFactory.newInstance(mock(CreateDatabaseStatement.class),
mock(ConnectionSession.class)), isA(CreateDatabaseProxyBackendHandler.class));
}
@Test
void
assertDatabaseOperateProxyBackendHandlerFactoryReturnDropDatabaseProxyBackendHandler()
{
-
assertThat(DatabaseOperateProxyBackendHandlerFactory.newInstance(mock(DropDatabaseStatement.class),
metaData, mock(ConnectionSession.class)),
isA(DropDatabaseProxyBackendHandler.class));
+
assertThat(DatabaseOperateProxyBackendHandlerFactory.newInstance(mock(DropDatabaseStatement.class),
mock(ConnectionSession.class)), isA(DropDatabaseProxyBackendHandler.class));
}
@Test
void
assertDatabaseOperateProxyBackendHandlerFactoryThrowUnsupportedOperationException()
{
- assertThrows(UnsupportedSQLOperationException.class, () ->
DatabaseOperateProxyBackendHandlerFactory.newInstance(mock(AlterDatabaseStatement.class),
metaData, mock(ConnectionSession.class)));
+ assertThrows(UnsupportedSQLOperationException.class, () ->
DatabaseOperateProxyBackendHandlerFactory.newInstance(mock(AlterDatabaseStatement.class),
mock(ConnectionSession.class)));
}
}
diff --git
a/proxy/backend/core/src/test/java/org/apache/shardingsphere/proxy/backend/handler/database/type/CreateDatabaseProxyBackendHandlerTest.java
b/proxy/backend/core/src/test/java/org/apache/shardingsphere/proxy/backend/handler/database/type/CreateDatabaseProxyBackendHandlerTest.java
index b4c5509abcd..450c3b8be92 100644
---
a/proxy/backend/core/src/test/java/org/apache/shardingsphere/proxy/backend/handler/database/type/CreateDatabaseProxyBackendHandlerTest.java
+++
b/proxy/backend/core/src/test/java/org/apache/shardingsphere/proxy/backend/handler/database/type/CreateDatabaseProxyBackendHandlerTest.java
@@ -19,6 +19,7 @@ package
org.apache.shardingsphere.proxy.backend.handler.database.type;
import
org.apache.shardingsphere.database.exception.core.exception.syntax.database.DatabaseCreateExistsException;
import org.apache.shardingsphere.infra.metadata.ShardingSphereMetaData;
+import org.apache.shardingsphere.mode.manager.ContextManager;
import
org.apache.shardingsphere.proxy.backend.response.header.update.UpdateResponseHeader;
import
org.apache.shardingsphere.sql.parser.statement.core.statement.type.ddl.database.CreateDatabaseStatement;
import org.junit.jupiter.api.Test;
@@ -31,6 +32,7 @@ import java.sql.SQLException;
import static org.hamcrest.MatcherAssert.assertThat;
import static org.hamcrest.Matchers.isA;
import static org.junit.jupiter.api.Assertions.assertThrows;
+import static org.mockito.Mockito.RETURNS_DEEP_STUBS;
import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.when;
@@ -43,7 +45,7 @@ class CreateDatabaseProxyBackendHandlerTest {
@Test
void assertExecuteCreateNewDatabase() throws SQLException {
when(statement.getDatabaseName()).thenReturn("bar_db");
- assertThat(new CreateDatabaseProxyBackendHandler(statement, mock(),
mock()).execute(), isA(UpdateResponseHeader.class));
+ assertThat(new CreateDatabaseProxyBackendHandler(statement,
mock(ContextManager.class, RETURNS_DEEP_STUBS)).execute(),
isA(UpdateResponseHeader.class));
}
@Test
@@ -51,13 +53,15 @@ class CreateDatabaseProxyBackendHandlerTest {
when(statement.getDatabaseName()).thenReturn("foo_db");
ShardingSphereMetaData metaData = mock(ShardingSphereMetaData.class);
when(metaData.containsDatabase("foo_db")).thenReturn(true);
- assertThrows(DatabaseCreateExistsException.class, () -> new
CreateDatabaseProxyBackendHandler(statement, metaData, mock()).execute());
+ ContextManager contextManager = mock(ContextManager.class,
RETURNS_DEEP_STUBS);
+
when(contextManager.getMetaDataContexts().getMetaData()).thenReturn(metaData);
+ assertThrows(DatabaseCreateExistsException.class, () -> new
CreateDatabaseProxyBackendHandler(statement, contextManager).execute());
}
@Test
void assertExecuteCreateExistDatabaseWithIfNotExists() throws SQLException
{
when(statement.getDatabaseName()).thenReturn("foo_db");
when(statement.isIfNotExists()).thenReturn(true);
- assertThat(new CreateDatabaseProxyBackendHandler(statement, mock(),
mock()).execute(), isA(UpdateResponseHeader.class));
+ assertThat(new CreateDatabaseProxyBackendHandler(statement,
mock(ContextManager.class, RETURNS_DEEP_STUBS)).execute(),
isA(UpdateResponseHeader.class));
}
}
diff --git
a/proxy/backend/core/src/test/java/org/apache/shardingsphere/proxy/backend/handler/database/type/DropDatabaseProxyBackendHandlerTest.java
b/proxy/backend/core/src/test/java/org/apache/shardingsphere/proxy/backend/handler/database/type/DropDatabaseProxyBackendHandlerTest.java
index 096f093644d..a48cc0f3ad7 100644
---
a/proxy/backend/core/src/test/java/org/apache/shardingsphere/proxy/backend/handler/database/type/DropDatabaseProxyBackendHandlerTest.java
+++
b/proxy/backend/core/src/test/java/org/apache/shardingsphere/proxy/backend/handler/database/type/DropDatabaseProxyBackendHandlerTest.java
@@ -24,6 +24,7 @@ import
org.apache.shardingsphere.infra.metadata.ShardingSphereMetaData;
import
org.apache.shardingsphere.infra.metadata.database.ShardingSphereDatabase;
import org.apache.shardingsphere.infra.metadata.database.rule.RuleMetaData;
import org.apache.shardingsphere.infra.spi.type.typed.TypedSPILoader;
+import org.apache.shardingsphere.mode.manager.ContextManager;
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;
@@ -66,7 +67,10 @@ class DropDatabaseProxyBackendHandlerTest {
@BeforeEach
void setUp() {
when(connectionSession.getConnectionContext().getGrantee()).thenReturn(null);
- handler = new DropDatabaseProxyBackendHandler(sqlStatement,
mockMetaData(), mock(), connectionSession);
+ ContextManager contextManager = mock(ContextManager.class,
RETURNS_DEEP_STUBS);
+ ShardingSphereMetaData metaData = mockMetaData();
+
when(contextManager.getMetaDataContexts().getMetaData()).thenReturn(metaData);
+ handler = new DropDatabaseProxyBackendHandler(sqlStatement,
contextManager, connectionSession);
}
private ShardingSphereMetaData mockMetaData() {