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() {

Reply via email to