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 20d18bc8526 Decouple DropDatabaseProxyBackendHandler and ProxyContext 
(#36817)
20d18bc8526 is described below

commit 20d18bc8526c33467d479a3bef602dcbcc0622e8
Author: Liang Zhang <[email protected]>
AuthorDate: Wed Oct 8 17:14:26 2025 +0800

    Decouple DropDatabaseProxyBackendHandler and ProxyContext (#36817)
---
 .../type/DropDatabaseProxyBackendHandler.java      |  4 +--
 ...abaseOperateProxyBackendHandlerFactoryTest.java | 33 +---------------------
 .../type/DropDatabaseProxyBackendHandlerTest.java  | 23 +++++++--------
 3 files changed, 13 insertions(+), 47 deletions(-)

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 5fd05e09751..526b116936d 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
@@ -55,7 +55,7 @@ public final class DropDatabaseProxyBackendHandler implements 
ProxyBackendHandle
             connectionSession.setCurrentDatabaseName(null);
         }
         if 
(ProxyContext.getInstance().databaseExists(sqlStatement.getDatabaseName())) {
-            ShardingSphereDatabase database = 
ProxyContext.getInstance().getContextManager().getMetaDataContexts().getMetaData().getDatabase(sqlStatement.getDatabaseName());
+            ShardingSphereDatabase database = 
connectionSession.getQueryContext().getMetaData().getDatabase(sqlStatement.getDatabaseName());
             
ProxyContext.getInstance().getContextManager().getPersistServiceFacade().getModeFacade().getMetaDataManagerService().dropDatabase(database);
         }
         return new UpdateResponseHeader(sqlStatement);
@@ -63,7 +63,7 @@ public final class DropDatabaseProxyBackendHandler implements 
ProxyBackendHandle
     
     private void check(final DropDatabaseStatement sqlStatement, final Grantee 
grantee) {
         String databaseName = sqlStatement.getDatabaseName().toLowerCase();
-        AuthorityRule authorityRule = 
ProxyContext.getInstance().getContextManager().getMetaDataContexts().getMetaData().getGlobalRuleMetaData().getSingleRule(AuthorityRule.class);
+        AuthorityRule authorityRule = 
connectionSession.getQueryContext().getMetaData().getGlobalRuleMetaData().getSingleRule(AuthorityRule.class);
         AuthorityChecker authorityChecker = new 
AuthorityChecker(authorityRule, grantee);
         
ShardingSpherePreconditions.checkState(authorityChecker.isAuthorized(databaseName),
 () -> new UnknownDatabaseException(databaseName));
         ShardingSpherePreconditions.checkState(sqlStatement.isIfExists() || 
ProxyContext.getInstance().databaseExists(databaseName), () -> new 
DatabaseDropNotExistsException(databaseName));
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 9480a0a2476..e0b20b28bbd 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
@@ -25,11 +25,7 @@ import 
org.apache.shardingsphere.infra.metadata.ShardingSphereMetaData;
 import 
org.apache.shardingsphere.infra.metadata.database.ShardingSphereDatabase;
 import 
org.apache.shardingsphere.infra.metadata.database.resource.ResourceMetaData;
 import org.apache.shardingsphere.infra.metadata.database.rule.RuleMetaData;
-import 
org.apache.shardingsphere.infra.metadata.statistics.ShardingSphereStatistics;
-import 
org.apache.shardingsphere.infra.metadata.statistics.builder.ShardingSphereStatisticsFactory;
 import org.apache.shardingsphere.infra.spi.type.typed.TypedSPILoader;
-import org.apache.shardingsphere.mode.manager.ContextManager;
-import org.apache.shardingsphere.mode.metadata.MetaDataContexts;
 import org.apache.shardingsphere.proxy.backend.context.ProxyContext;
 import 
org.apache.shardingsphere.proxy.backend.handler.database.type.CreateDatabaseProxyBackendHandler;
 import 
org.apache.shardingsphere.proxy.backend.handler.database.type.DropDatabaseProxyBackendHandler;
@@ -41,7 +37,6 @@ import 
org.apache.shardingsphere.sql.parser.statement.core.statement.type.ddl.da
 import 
org.apache.shardingsphere.sql.parser.statement.core.statement.type.ddl.database.DropDatabaseStatement;
 import org.apache.shardingsphere.test.infra.framework.mock.AutoMockExtension;
 import org.apache.shardingsphere.test.infra.framework.mock.StaticMockSettings;
-import org.junit.jupiter.api.AfterEach;
 import org.junit.jupiter.api.BeforeEach;
 import org.junit.jupiter.api.Test;
 import org.junit.jupiter.api.extension.ExtendWith;
@@ -58,7 +53,6 @@ import static org.hamcrest.MatcherAssert.assertThat;
 import static org.hamcrest.Matchers.isA;
 import static org.junit.jupiter.api.Assertions.assertNull;
 import static org.junit.jupiter.api.Assertions.assertThrows;
-import static org.mockito.ArgumentMatchers.any;
 import static org.mockito.Mockito.RETURNS_DEEP_STUBS;
 import static org.mockito.Mockito.mock;
 import static org.mockito.Mockito.when;
@@ -68,9 +62,6 @@ import static org.mockito.Mockito.when;
 @MockitoSettings(strictness = Strictness.LENIENT)
 class DatabaseOperateProxyBackendHandlerFactoryTest {
     
-    @Mock(answer = Answers.RETURNS_DEEP_STUBS)
-    private ContextManager contextManager;
-    
     @Mock(answer = Answers.RETURNS_DEEP_STUBS)
     private ConnectionSession connectionSession;
     
@@ -79,22 +70,14 @@ class DatabaseOperateProxyBackendHandlerFactoryTest {
         
when(connectionSession.getConnectionContext().getGrantee()).thenReturn(null);
         ShardingSphereMetaData metaData = new ShardingSphereMetaData(
                 Collections.singleton(mockDatabase()), 
mock(ResourceMetaData.class), mock(RuleMetaData.class), new 
ConfigurationProperties(new Properties()));
-        MetaDataContexts metaDataContexts = new MetaDataContexts(metaData, 
ShardingSphereStatisticsFactory.create(metaData, new 
ShardingSphereStatistics()));
-        
when(contextManager.getMetaDataContexts()).thenReturn(metaDataContexts);
-        
when(ProxyContext.getInstance().getContextManager()).thenReturn(contextManager);
+        
when(connectionSession.getQueryContext().getMetaData()).thenReturn(metaData);
         
when(ProxyContext.getInstance().databaseExists("foo_db")).thenReturn(true);
     }
     
-    @AfterEach
-    void tearDown() {
-        setGovernanceMetaDataContexts(false);
-    }
-    
     @Test
     void assertExecuteCreateDatabaseContext() throws SQLException {
         CreateDatabaseStatement sqlStatement = 
mock(CreateDatabaseStatement.class);
         when(sqlStatement.getDatabaseName()).thenReturn("new_db");
-        setGovernanceMetaDataContexts(true);
         ResponseHeader response = 
DatabaseOperateProxyBackendHandlerFactory.newInstance(sqlStatement, 
connectionSession).execute();
         assertThat(response, isA(UpdateResponseHeader.class));
     }
@@ -103,7 +86,6 @@ class DatabaseOperateProxyBackendHandlerFactoryTest {
     void assertExecuteDropDatabaseContext() throws SQLException {
         DropDatabaseStatement sqlStatement = mock(DropDatabaseStatement.class);
         when(sqlStatement.getDatabaseName()).thenReturn("foo_db");
-        setGovernanceMetaDataContexts(true);
         ResponseHeader response = 
DatabaseOperateProxyBackendHandlerFactory.newInstance(sqlStatement, 
connectionSession).execute();
         assertThat(response, isA(UpdateResponseHeader.class));
     }
@@ -112,7 +94,6 @@ class DatabaseOperateProxyBackendHandlerFactoryTest {
     void assertExecuteCreateDatabaseContextWithException() {
         CreateDatabaseStatement sqlStatement = 
mock(CreateDatabaseStatement.class);
         when(sqlStatement.getDatabaseName()).thenReturn("foo_db");
-        setGovernanceMetaDataContexts(true);
         try {
             
DatabaseOperateProxyBackendHandlerFactory.newInstance(sqlStatement, 
connectionSession);
         } catch (final DatabaseCreateExistsException ex) {
@@ -127,18 +108,6 @@ class DatabaseOperateProxyBackendHandlerFactoryTest {
         return result;
     }
     
-    private void setGovernanceMetaDataContexts(final boolean isGovernance) {
-        ShardingSphereMetaData metaData = new ShardingSphereMetaData();
-        MetaDataContexts metaDataContexts = isGovernance ? 
mockMetaDataContexts() : new MetaDataContexts(metaData, new 
ShardingSphereStatistics());
-        
when(contextManager.getMetaDataContexts()).thenReturn(metaDataContexts);
-    }
-    
-    private MetaDataContexts mockMetaDataContexts() {
-        MetaDataContexts result = 
ProxyContext.getInstance().getContextManager().getMetaDataContexts();
-        
when(result.getMetaData().getDatabase("foo_db").getResourceMetaData().getNotExistedDataSources(any())).thenReturn(Collections.emptyList());
-        return result;
-    }
-    
     @Test
     void 
assertDatabaseOperateProxyBackendHandlerFactoryReturnCreateDatabaseProxyBackendHandler()
 {
         
assertThat(DatabaseOperateProxyBackendHandlerFactory.newInstance(mock(CreateDatabaseStatement.class),
 mock(ConnectionSession.class)), isA(CreateDatabaseProxyBackendHandler.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 287ebd27873..507726f961c 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
@@ -20,11 +20,10 @@ package 
org.apache.shardingsphere.proxy.backend.handler.database.type;
 import org.apache.shardingsphere.authority.rule.AuthorityRule;
 import org.apache.shardingsphere.database.connector.core.type.DatabaseType;
 import 
org.apache.shardingsphere.database.exception.core.exception.syntax.database.DatabaseDropNotExistsException;
+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.mode.metadata.MetaDataContexts;
 import org.apache.shardingsphere.proxy.backend.context.ProxyContext;
 import org.apache.shardingsphere.proxy.backend.response.header.ResponseHeader;
 import 
org.apache.shardingsphere.proxy.backend.response.header.update.UpdateResponseHeader;
@@ -69,27 +68,25 @@ class DropDatabaseProxyBackendHandlerTest {
     
     @BeforeEach
     void setUp() {
-        ContextManager contextManager = mockContextManager();
-        
when(ProxyContext.getInstance().getContextManager()).thenReturn(contextManager);
         
when(ProxyContext.getInstance().databaseExists("foo_db")).thenReturn(true);
         
when(ProxyContext.getInstance().databaseExists("bar_db")).thenReturn(true);
         
when(connectionSession.getConnectionContext().getGrantee()).thenReturn(null);
+        ShardingSphereMetaData metaData = mockMetaData();
+        
when(connectionSession.getQueryContext().getMetaData()).thenReturn(metaData);
         handler = new DropDatabaseProxyBackendHandler(sqlStatement, 
connectionSession);
     }
     
-    private ContextManager mockContextManager() {
+    private ShardingSphereMetaData mockMetaData() {
         ShardingSphereDatabase database1 = mock(ShardingSphereDatabase.class, 
RETURNS_DEEP_STUBS);
         when(database1.getName()).thenReturn("foo_db");
         ShardingSphereDatabase database2 = mock(ShardingSphereDatabase.class, 
RETURNS_DEEP_STUBS);
         when(database2.getName()).thenReturn("bar_db");
-        MetaDataContexts metaDataContexts = mock(MetaDataContexts.class, 
RETURNS_DEEP_STUBS);
-        
when(metaDataContexts.getMetaData().getAllDatabases()).thenReturn(Arrays.asList(database1,
 database2));
-        
when(metaDataContexts.getMetaData().getDatabase("foo_db")).thenReturn(database1);
-        
when(metaDataContexts.getMetaData().getDatabase("bar_db")).thenReturn(database2);
-        
when(metaDataContexts.getMetaData().getDatabase("test_not_exist_db")).thenReturn(mock(ShardingSphereDatabase.class,
 RETURNS_DEEP_STUBS));
-        
when(metaDataContexts.getMetaData().getGlobalRuleMetaData()).thenReturn(new 
RuleMetaData(Collections.singleton(mock(AuthorityRule.class))));
-        ContextManager result = mock(ContextManager.class, RETURNS_DEEP_STUBS);
-        when(result.getMetaDataContexts()).thenReturn(metaDataContexts);
+        ShardingSphereMetaData result = mock(ShardingSphereMetaData.class, 
RETURNS_DEEP_STUBS);
+        when(result.getAllDatabases()).thenReturn(Arrays.asList(database1, 
database2));
+        when(result.getDatabase("foo_db")).thenReturn(database1);
+        when(result.getDatabase("bar_db")).thenReturn(database2);
+        
when(result.getDatabase("test_not_exist_db")).thenReturn(mock(ShardingSphereDatabase.class,
 RETURNS_DEEP_STUBS));
+        when(result.getGlobalRuleMetaData()).thenReturn(new 
RuleMetaData(Collections.singleton(mock(AuthorityRule.class))));
         return result;
     }
     

Reply via email to