This is an automated email from the ASF dual-hosted git repository.

jianglongtao 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 e56531c5a5e Fix query some system data error when there are multiple 
logical database (#34106)
e56531c5a5e is described below

commit e56531c5a5e1f1e1fae60b22f1b68e00842bdba2
Author: jiangML <[email protected]>
AuthorDate: Fri Dec 20 10:21:40 2024 +0800

    Fix query some system data error when there are multiple logical database 
(#34106)
---
 .../admin/executor/AbstractDatabaseMetaDataExecutor.java      | 11 ++++++++---
 1 file changed, 8 insertions(+), 3 deletions(-)

diff --git 
a/proxy/backend/core/src/main/java/org/apache/shardingsphere/proxy/backend/handler/admin/executor/AbstractDatabaseMetaDataExecutor.java
 
b/proxy/backend/core/src/main/java/org/apache/shardingsphere/proxy/backend/handler/admin/executor/AbstractDatabaseMetaDataExecutor.java
index dbbe100f996..95f16274eb8 100644
--- 
a/proxy/backend/core/src/main/java/org/apache/shardingsphere/proxy/backend/handler/admin/executor/AbstractDatabaseMetaDataExecutor.java
+++ 
b/proxy/backend/core/src/main/java/org/apache/shardingsphere/proxy/backend/handler/admin/executor/AbstractDatabaseMetaDataExecutor.java
@@ -29,6 +29,7 @@ import 
org.apache.shardingsphere.infra.executor.sql.execute.result.query.impl.ra
 import 
org.apache.shardingsphere.infra.executor.sql.execute.result.query.type.memory.row.MemoryQueryResultDataRow;
 import org.apache.shardingsphere.infra.merge.result.MergedResult;
 import 
org.apache.shardingsphere.infra.merge.result.impl.transparent.TransparentMergedResult;
+import 
org.apache.shardingsphere.infra.metadata.database.ShardingSphereDatabase;
 import 
org.apache.shardingsphere.infra.metadata.database.resource.ResourceMetaData;
 import 
org.apache.shardingsphere.infra.metadata.database.resource.unit.StorageUnit;
 import org.apache.shardingsphere.infra.metadata.user.Grantee;
@@ -144,9 +145,13 @@ public abstract class AbstractDatabaseMetaDataExecutor 
implements DatabaseAdminQ
         
         @Override
         protected Collection<String> getDatabaseNames(final ConnectionSession 
connectionSession) {
-            Optional<String> database = 
ProxyContext.getInstance().getAllDatabaseNames().stream().filter(each -> 
isAuthorized(each, connectionSession.getConnectionContext().getGrantee()))
-                    
.filter(AbstractDatabaseMetaDataExecutor::hasDataSource).findFirst();
-            return 
database.map(Collections::singletonList).orElse(Collections.emptyList());
+            ShardingSphereDatabase database = 
ProxyContext.getInstance().getContextManager().getMetaDataContexts().getMetaData().getDatabase(connectionSession.getCurrentDatabaseName());
+            if (null != database && isAuthorized(database.getName(), 
connectionSession.getConnectionContext().getGrantee()) && 
AbstractDatabaseMetaDataExecutor.hasDataSource(database.getName())) {
+                return Collections.singleton(database.getName());
+            }
+            Collection<String> databaseNames = 
ProxyContext.getInstance().getAllDatabaseNames().stream().filter(each -> 
isAuthorized(each, connectionSession.getConnectionContext().getGrantee()))
+                    
.filter(AbstractDatabaseMetaDataExecutor::hasDataSource).collect(Collectors.toList());
+            return databaseNames.isEmpty() ? Collections.emptyList() : 
Collections.singletonList(databaseNames.iterator().next());
         }
         
         @Override

Reply via email to