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

panjuan 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 7a7c290e3c3 Refactor QueryableRALExecutor (#29713)
7a7c290e3c3 is described below

commit 7a7c290e3c33cd177f2a527c2fb426d9b1870533
Author: Liang Zhang <[email protected]>
AuthorDate: Sat Jan 13 21:14:35 2024 +0800

    Refactor QueryableRALExecutor (#29713)
---
 ...java => DatabaseAwareQueryableRALExecutor.java} | 17 +++------
 ... InstanceContextAwareQueryableRALExecutor.java} | 15 +++-----
 .../handler/ral/query/QueryableRALExecutor.java    |  5 +--
 .../distsql/ral/QueryableRALBackendHandler.java    | 44 +++++-----------------
 .../ExportDatabaseConfigurationExecutor.java       | 28 +++++++++-----
 .../ral/queryable/ShowComputeNodeInfoExecutor.java | 11 ++++--
 .../ral/queryable/ShowComputeNodeModeExecutor.java | 11 ++++--
 .../ral/queryable/ShowComputeNodesExecutor.java    | 11 ++++--
 .../ral/queryable/ShowDistVariableExecutor.java    | 35 ++++++++---------
 .../ral/queryable/ShowDistVariablesExecutor.java   | 20 ++++++----
 ...wStatusFromReadwriteSplittingRulesExecutor.java | 40 ++++++--------------
 .../ral/queryable/ShowTableMetaDataExecutor.java   | 17 ++++++---
 ...onnectionSessionAwareQueryableRALExecutor.java} | 17 +++------
 .../ral/QueryableRALBackendHandlerTest.java        |  7 ++--
 .../ExportDatabaseConfigurationExecutorTest.java   |  9 ++++-
 .../queryable/ShowComputeNodeInfoExecutorTest.java |  4 +-
 .../queryable/ShowComputeNodeModeExecutorTest.java |  4 +-
 .../queryable/ShowComputeNodesExecutorTest.java    |  7 +++-
 .../queryable/ShowDistVariableExecutorTest.java    | 16 +++++---
 .../queryable/ShowDistVariablesExecutorTest.java   |  6 ++-
 ...tusFromReadwriteSplittingRulesExecutorTest.java | 12 ++----
 .../queryable/ShowTableMetaDataExecutorTest.java   |  5 ++-
 22 files changed, 167 insertions(+), 174 deletions(-)

diff --git 
a/infra/distsql-handler/src/main/java/org/apache/shardingsphere/distsql/handler/ral/query/DatabaseRequiredQueryableRALExecutor.java
 
b/infra/distsql-handler/src/main/java/org/apache/shardingsphere/distsql/handler/ral/query/DatabaseAwareQueryableRALExecutor.java
similarity index 67%
rename from 
infra/distsql-handler/src/main/java/org/apache/shardingsphere/distsql/handler/ral/query/DatabaseRequiredQueryableRALExecutor.java
rename to 
infra/distsql-handler/src/main/java/org/apache/shardingsphere/distsql/handler/ral/query/DatabaseAwareQueryableRALExecutor.java
index 61ae91cdaa6..e34feca0ac6 100644
--- 
a/infra/distsql-handler/src/main/java/org/apache/shardingsphere/distsql/handler/ral/query/DatabaseRequiredQueryableRALExecutor.java
+++ 
b/infra/distsql-handler/src/main/java/org/apache/shardingsphere/distsql/handler/ral/query/DatabaseAwareQueryableRALExecutor.java
@@ -18,24 +18,19 @@
 package org.apache.shardingsphere.distsql.handler.ral.query;
 
 import org.apache.shardingsphere.distsql.statement.ral.QueryableRALStatement;
-import 
org.apache.shardingsphere.infra.merge.result.impl.local.LocalDataQueryResultRow;
 import 
org.apache.shardingsphere.infra.metadata.database.ShardingSphereDatabase;
 
-import java.util.Collection;
-
 /**
- * Database required queryable RAL executor.
+ * Database Aware queryable RAL executor.
  * 
  * @param <T> type of queryable RAL statement
  */
-public interface DatabaseRequiredQueryableRALExecutor<T extends 
QueryableRALStatement> extends QueryableRALExecutor<T> {
+public interface DatabaseAwareQueryableRALExecutor<T extends 
QueryableRALStatement> extends QueryableRALExecutor<T> {
     
     /**
-     * Get query result rows.
-     *
-     * @param database ShardingSphere database
-     * @param sqlStatement SQL statement
-     * @return query result rows
+     * Set current database.
+     * 
+     * @param currentDatabase current database
      */
-    Collection<LocalDataQueryResultRow> getRows(ShardingSphereDatabase 
database, T sqlStatement);
+    void setCurrentDatabase(ShardingSphereDatabase currentDatabase);
 }
diff --git 
a/infra/distsql-handler/src/main/java/org/apache/shardingsphere/distsql/handler/ral/query/InstanceContextRequiredQueryableRALExecutor.java
 
b/infra/distsql-handler/src/main/java/org/apache/shardingsphere/distsql/handler/ral/query/InstanceContextAwareQueryableRALExecutor.java
similarity index 66%
rename from 
infra/distsql-handler/src/main/java/org/apache/shardingsphere/distsql/handler/ral/query/InstanceContextRequiredQueryableRALExecutor.java
rename to 
infra/distsql-handler/src/main/java/org/apache/shardingsphere/distsql/handler/ral/query/InstanceContextAwareQueryableRALExecutor.java
index a2694437d74..4ff2ae46e16 100644
--- 
a/infra/distsql-handler/src/main/java/org/apache/shardingsphere/distsql/handler/ral/query/InstanceContextRequiredQueryableRALExecutor.java
+++ 
b/infra/distsql-handler/src/main/java/org/apache/shardingsphere/distsql/handler/ral/query/InstanceContextAwareQueryableRALExecutor.java
@@ -19,23 +19,18 @@ package org.apache.shardingsphere.distsql.handler.ral.query;
 
 import org.apache.shardingsphere.distsql.statement.ral.QueryableRALStatement;
 import org.apache.shardingsphere.infra.instance.InstanceContext;
-import 
org.apache.shardingsphere.infra.merge.result.impl.local.LocalDataQueryResultRow;
-
-import java.util.Collection;
 
 /**
- * Instance context required queryable RAL executor.
+ * Instance context aware queryable RAL executor.
  * 
  * @param <T> type of queryable RAL statement
  */
-public interface InstanceContextRequiredQueryableRALExecutor<T extends 
QueryableRALStatement> extends QueryableRALExecutor<T> {
+public interface InstanceContextAwareQueryableRALExecutor<T extends 
QueryableRALStatement> extends QueryableRALExecutor<T> {
     
     /**
-     * Get query result rows.
+     * Set Instance context.
      *
-     * @param instanceContext Instance context
-     * @param sqlStatement SQL statement
-     * @return query result rows
+     * @param instanceContext instance context
      */
-    Collection<LocalDataQueryResultRow> getRows(InstanceContext 
instanceContext, T sqlStatement);
+    void setInstanceContext(InstanceContext instanceContext);
 }
diff --git 
a/infra/distsql-handler/src/main/java/org/apache/shardingsphere/distsql/handler/ral/query/QueryableRALExecutor.java
 
b/infra/distsql-handler/src/main/java/org/apache/shardingsphere/distsql/handler/ral/query/QueryableRALExecutor.java
index b87454d6460..6b03d639905 100644
--- 
a/infra/distsql-handler/src/main/java/org/apache/shardingsphere/distsql/handler/ral/query/QueryableRALExecutor.java
+++ 
b/infra/distsql-handler/src/main/java/org/apache/shardingsphere/distsql/handler/ral/query/QueryableRALExecutor.java
@@ -24,7 +24,6 @@ import 
org.apache.shardingsphere.infra.spi.annotation.SingletonSPI;
 import org.apache.shardingsphere.infra.spi.type.typed.TypedSPI;
 
 import java.util.Collection;
-import java.util.Collections;
 
 /**
  * Queryable RAL executor.
@@ -48,9 +47,7 @@ public interface QueryableRALExecutor<T extends 
QueryableRALStatement> extends T
      * @param metaData ShardingSphere meta data
      * @return query result rows
      */
-    default Collection<LocalDataQueryResultRow> getRows(final T sqlStatement, 
final ShardingSphereMetaData metaData) {
-        return Collections.emptyList();
-    }
+    Collection<LocalDataQueryResultRow> getRows(T sqlStatement, 
ShardingSphereMetaData metaData);
     
     @Override
     Class<T> getType();
diff --git 
a/proxy/backend/core/src/main/java/org/apache/shardingsphere/proxy/backend/handler/distsql/ral/QueryableRALBackendHandler.java
 
b/proxy/backend/core/src/main/java/org/apache/shardingsphere/proxy/backend/handler/distsql/ral/QueryableRALBackendHandler.java
index b4dfd60d7af..0bc9c4d48fb 100644
--- 
a/proxy/backend/core/src/main/java/org/apache/shardingsphere/proxy/backend/handler/distsql/ral/QueryableRALBackendHandler.java
+++ 
b/proxy/backend/core/src/main/java/org/apache/shardingsphere/proxy/backend/handler/distsql/ral/QueryableRALBackendHandler.java
@@ -17,20 +17,16 @@
 
 package org.apache.shardingsphere.proxy.backend.handler.distsql.ral;
 
-import 
org.apache.shardingsphere.distsql.handler.ral.query.DatabaseRequiredQueryableRALExecutor;
-import 
org.apache.shardingsphere.distsql.handler.ral.query.InstanceContextRequiredQueryableRALExecutor;
+import 
org.apache.shardingsphere.distsql.handler.ral.query.DatabaseAwareQueryableRALExecutor;
+import 
org.apache.shardingsphere.distsql.handler.ral.query.InstanceContextAwareQueryableRALExecutor;
 import 
org.apache.shardingsphere.distsql.handler.ral.query.QueryableRALExecutor;
 import org.apache.shardingsphere.distsql.statement.ral.QueryableRALStatement;
-import 
org.apache.shardingsphere.infra.exception.core.ShardingSpherePreconditions;
-import 
org.apache.shardingsphere.infra.exception.dialect.exception.syntax.database.NoDatabaseSelectedException;
-import 
org.apache.shardingsphere.infra.exception.dialect.exception.syntax.database.UnknownDatabaseException;
 import org.apache.shardingsphere.infra.merge.result.MergedResult;
 import 
org.apache.shardingsphere.infra.merge.result.impl.local.LocalDataMergedResult;
 import 
org.apache.shardingsphere.infra.merge.result.impl.local.LocalDataQueryResultRow;
 import org.apache.shardingsphere.infra.spi.type.typed.TypedSPILoader;
-import org.apache.shardingsphere.mode.manager.ContextManager;
 import org.apache.shardingsphere.proxy.backend.context.ProxyContext;
-import 
org.apache.shardingsphere.proxy.backend.handler.distsql.ral.queryable.executor.ConnectionSessionRequiredQueryableRALExecutor;
+import 
org.apache.shardingsphere.proxy.backend.handler.distsql.ral.queryable.executor.ConnectionSessionAwareQueryableRALExecutor;
 import org.apache.shardingsphere.proxy.backend.response.data.QueryResponseCell;
 import org.apache.shardingsphere.proxy.backend.response.data.QueryResponseRow;
 import org.apache.shardingsphere.proxy.backend.response.header.ResponseHeader;
@@ -79,31 +75,16 @@ public final class QueryableRALBackendHandler<T extends 
QueryableRALStatement> i
     }
     
     private MergedResult getMergedResult(final QueryableRALExecutor<T> 
executor) {
-        if (executor instanceof InstanceContextRequiredQueryableRALExecutor) {
-            return 
getMergedResultByInstanceContextRequiredExecutor((InstanceContextRequiredQueryableRALExecutor<T>)
 executor);
+        if (executor instanceof InstanceContextAwareQueryableRALExecutor) {
+            ((InstanceContextAwareQueryableRALExecutor<T>) 
executor).setInstanceContext(ProxyContext.getInstance().getContextManager().getInstanceContext());
         }
-        if (executor instanceof DatabaseRequiredQueryableRALExecutor) {
-            return 
getMergedResultByDatabaseRequiredExecutor((DatabaseRequiredQueryableRALExecutor<T>)
 executor);
+        if (executor instanceof DatabaseAwareQueryableRALExecutor) {
+            ((DatabaseAwareQueryableRALExecutor<T>) 
executor).setCurrentDatabase(ProxyContext.getInstance().getDatabase(getDatabaseName(connectionSession,
 sqlStatement)));
         }
-        if (executor instanceof ConnectionSessionRequiredQueryableRALExecutor) 
{
-            return 
getMergedResultByConnectionSessionRequiredExecutor((ConnectionSessionRequiredQueryableRALExecutor<T>)
 executor);
+        if (executor instanceof ConnectionSessionAwareQueryableRALExecutor) {
+            ((ConnectionSessionAwareQueryableRALExecutor<T>) 
executor).setConnectionSession(connectionSession);
         }
-        ContextManager contextManager = 
ProxyContext.getInstance().getContextManager();
-        return createMergedResult(executor.getRows(sqlStatement, 
contextManager.getMetaDataContexts().getMetaData()));
-    }
-    
-    private MergedResult 
getMergedResultByInstanceContextRequiredExecutor(final 
InstanceContextRequiredQueryableRALExecutor<T> executor) {
-        return 
createMergedResult(executor.getRows(ProxyContext.getInstance().getContextManager().getInstanceContext(),
 sqlStatement));
-    }
-    
-    private MergedResult getMergedResultByDatabaseRequiredExecutor(final 
DatabaseRequiredQueryableRALExecutor<T> executor) {
-        String databaseName = getDatabaseName(connectionSession, sqlStatement);
-        checkDatabaseName(databaseName);
-        return 
createMergedResult(executor.getRows(ProxyContext.getInstance().getDatabase(databaseName),
 sqlStatement));
-    }
-    
-    private MergedResult 
getMergedResultByConnectionSessionRequiredExecutor(final 
ConnectionSessionRequiredQueryableRALExecutor<T> executor) {
-        return 
createMergedResult(executor.getRows(ProxyContext.getInstance().getContextManager().getMetaDataContexts().getMetaData(),
 connectionSession, sqlStatement));
+        return createMergedResult(executor.getRows(sqlStatement, 
ProxyContext.getInstance().getContextManager().getMetaDataContexts().getMetaData()));
     }
     
     private List<QueryHeader> createQueryHeader(final Collection<String> 
columnNames) {
@@ -119,11 +100,6 @@ public final class QueryableRALBackendHandler<T extends 
QueryableRALStatement> i
         return databaseSegment.isPresent() ? 
databaseSegment.get().getIdentifier().getValue() : 
connectionSession.getDatabaseName();
     }
     
-    private void checkDatabaseName(final String databaseName) {
-        ShardingSpherePreconditions.checkNotNull(databaseName, 
NoDatabaseSelectedException::new);
-        
ShardingSpherePreconditions.checkState(ProxyContext.getInstance().databaseExists(databaseName),
 () -> new UnknownDatabaseException(databaseName));
-    }
-    
     @Override
     public boolean next() throws SQLException {
         return null != mergedResult && mergedResult.next();
diff --git 
a/proxy/backend/core/src/main/java/org/apache/shardingsphere/proxy/backend/handler/distsql/ral/queryable/ExportDatabaseConfigurationExecutor.java
 
b/proxy/backend/core/src/main/java/org/apache/shardingsphere/proxy/backend/handler/distsql/ral/queryable/ExportDatabaseConfigurationExecutor.java
index d2204522eea..020bad31bf1 100644
--- 
a/proxy/backend/core/src/main/java/org/apache/shardingsphere/proxy/backend/handler/distsql/ral/queryable/ExportDatabaseConfigurationExecutor.java
+++ 
b/proxy/backend/core/src/main/java/org/apache/shardingsphere/proxy/backend/handler/distsql/ral/queryable/ExportDatabaseConfigurationExecutor.java
@@ -17,9 +17,11 @@
 
 package org.apache.shardingsphere.proxy.backend.handler.distsql.ral.queryable;
 
-import 
org.apache.shardingsphere.distsql.handler.ral.query.DatabaseRequiredQueryableRALExecutor;
+import lombok.Setter;
+import 
org.apache.shardingsphere.distsql.handler.ral.query.DatabaseAwareQueryableRALExecutor;
 import 
org.apache.shardingsphere.distsql.statement.ral.queryable.ExportDatabaseConfigurationStatement;
 import 
org.apache.shardingsphere.infra.merge.result.impl.local.LocalDataQueryResultRow;
+import org.apache.shardingsphere.infra.metadata.ShardingSphereMetaData;
 import 
org.apache.shardingsphere.infra.metadata.database.ShardingSphereDatabase;
 import org.apache.shardingsphere.proxy.backend.util.ExportUtils;
 
@@ -29,7 +31,10 @@ import java.util.Collections;
 /**
  * Export database configuration executor.
  */
-public final class ExportDatabaseConfigurationExecutor implements 
DatabaseRequiredQueryableRALExecutor<ExportDatabaseConfigurationStatement> {
+@Setter
+public final class ExportDatabaseConfigurationExecutor implements 
DatabaseAwareQueryableRALExecutor<ExportDatabaseConfigurationStatement> {
+    
+    private ShardingSphereDatabase currentDatabase;
     
     @Override
     public Collection<String> getColumnNames() {
@@ -37,14 +42,19 @@ public final class ExportDatabaseConfigurationExecutor 
implements DatabaseRequir
     }
     
     @Override
-    public Collection<LocalDataQueryResultRow> getRows(final 
ShardingSphereDatabase database, final ExportDatabaseConfigurationStatement 
sqlStatement) {
-        String exportedData = ExportUtils.generateExportDatabaseData(database);
-        if (sqlStatement.getFilePath().isPresent()) {
-            String filePath = sqlStatement.getFilePath().get();
-            ExportUtils.exportToFile(filePath, exportedData);
-            return Collections.singleton(new 
LocalDataQueryResultRow(String.format("Successfully exported to:'%s'", 
filePath)));
+    public Collection<LocalDataQueryResultRow> getRows(final 
ExportDatabaseConfigurationStatement sqlStatement, final ShardingSphereMetaData 
metaData) {
+        String exportedData = 
ExportUtils.generateExportDatabaseData(currentDatabase);
+        if (!sqlStatement.getFilePath().isPresent()) {
+            return Collections.singleton(new 
LocalDataQueryResultRow(exportedData));
         }
-        return Collections.singleton(new 
LocalDataQueryResultRow(exportedData));
+        String filePath = sqlStatement.getFilePath().get();
+        ExportUtils.exportToFile(filePath, exportedData);
+        return Collections.singleton(new 
LocalDataQueryResultRow(String.format("Successfully exported to:'%s'", 
filePath)));
+    }
+    
+    @Override
+    public void setCurrentDatabase(final ShardingSphereDatabase 
currentDatabase) {
+        this.currentDatabase = currentDatabase;
     }
     
     @Override
diff --git 
a/proxy/backend/core/src/main/java/org/apache/shardingsphere/proxy/backend/handler/distsql/ral/queryable/ShowComputeNodeInfoExecutor.java
 
b/proxy/backend/core/src/main/java/org/apache/shardingsphere/proxy/backend/handler/distsql/ral/queryable/ShowComputeNodeInfoExecutor.java
index 3b776a258e9..d6a72b0a18b 100644
--- 
a/proxy/backend/core/src/main/java/org/apache/shardingsphere/proxy/backend/handler/distsql/ral/queryable/ShowComputeNodeInfoExecutor.java
+++ 
b/proxy/backend/core/src/main/java/org/apache/shardingsphere/proxy/backend/handler/distsql/ral/queryable/ShowComputeNodeInfoExecutor.java
@@ -17,13 +17,15 @@
 
 package org.apache.shardingsphere.proxy.backend.handler.distsql.ral.queryable;
 
-import 
org.apache.shardingsphere.distsql.handler.ral.query.InstanceContextRequiredQueryableRALExecutor;
+import lombok.Setter;
+import 
org.apache.shardingsphere.distsql.handler.ral.query.InstanceContextAwareQueryableRALExecutor;
 import 
org.apache.shardingsphere.distsql.statement.ral.queryable.ShowComputeNodeInfoStatement;
 import org.apache.shardingsphere.infra.instance.ComputeNodeInstance;
 import org.apache.shardingsphere.infra.instance.InstanceContext;
 import org.apache.shardingsphere.infra.instance.metadata.InstanceMetaData;
 import 
org.apache.shardingsphere.infra.instance.metadata.proxy.ProxyInstanceMetaData;
 import 
org.apache.shardingsphere.infra.merge.result.impl.local.LocalDataQueryResultRow;
+import org.apache.shardingsphere.infra.metadata.ShardingSphereMetaData;
 
 import java.util.Arrays;
 import java.util.Collection;
@@ -32,7 +34,10 @@ import java.util.Collections;
 /**
  * Show compute node info executor.
  */
-public final class ShowComputeNodeInfoExecutor implements 
InstanceContextRequiredQueryableRALExecutor<ShowComputeNodeInfoStatement> {
+@Setter
+public final class ShowComputeNodeInfoExecutor implements 
InstanceContextAwareQueryableRALExecutor<ShowComputeNodeInfoStatement> {
+    
+    private InstanceContext instanceContext;
     
     @Override
     public Collection<String> getColumnNames() {
@@ -40,7 +45,7 @@ public final class ShowComputeNodeInfoExecutor implements 
InstanceContextRequire
     }
     
     @Override
-    public Collection<LocalDataQueryResultRow> getRows(final InstanceContext 
instanceContext, final ShowComputeNodeInfoStatement sqlStatement) {
+    public Collection<LocalDataQueryResultRow> getRows(final 
ShowComputeNodeInfoStatement sqlStatement, final ShardingSphereMetaData 
metaData) {
         ComputeNodeInstance instance = instanceContext.getInstance();
         InstanceMetaData instanceMetaData = instance.getMetaData();
         String modeType = instanceContext.getModeConfiguration().getType();
diff --git 
a/proxy/backend/core/src/main/java/org/apache/shardingsphere/proxy/backend/handler/distsql/ral/queryable/ShowComputeNodeModeExecutor.java
 
b/proxy/backend/core/src/main/java/org/apache/shardingsphere/proxy/backend/handler/distsql/ral/queryable/ShowComputeNodeModeExecutor.java
index c0a7b61322d..56aadd40d44 100644
--- 
a/proxy/backend/core/src/main/java/org/apache/shardingsphere/proxy/backend/handler/distsql/ral/queryable/ShowComputeNodeModeExecutor.java
+++ 
b/proxy/backend/core/src/main/java/org/apache/shardingsphere/proxy/backend/handler/distsql/ral/queryable/ShowComputeNodeModeExecutor.java
@@ -17,11 +17,13 @@
 
 package org.apache.shardingsphere.proxy.backend.handler.distsql.ral.queryable;
 
-import 
org.apache.shardingsphere.distsql.handler.ral.query.InstanceContextRequiredQueryableRALExecutor;
+import lombok.Setter;
+import 
org.apache.shardingsphere.distsql.handler.ral.query.InstanceContextAwareQueryableRALExecutor;
 import 
org.apache.shardingsphere.distsql.statement.ral.queryable.ShowComputeNodeModeStatement;
 import 
org.apache.shardingsphere.infra.config.mode.PersistRepositoryConfiguration;
 import org.apache.shardingsphere.infra.instance.InstanceContext;
 import 
org.apache.shardingsphere.infra.merge.result.impl.local.LocalDataQueryResultRow;
+import org.apache.shardingsphere.infra.metadata.ShardingSphereMetaData;
 import org.apache.shardingsphere.infra.util.json.JsonUtils;
 
 import java.util.Arrays;
@@ -31,7 +33,10 @@ import java.util.Collections;
 /**
  * Show compute node mode executor.
  */
-public final class ShowComputeNodeModeExecutor implements 
InstanceContextRequiredQueryableRALExecutor<ShowComputeNodeModeStatement> {
+@Setter
+public final class ShowComputeNodeModeExecutor implements 
InstanceContextAwareQueryableRALExecutor<ShowComputeNodeModeStatement> {
+    
+    private InstanceContext instanceContext;
     
     @Override
     public Collection<String> getColumnNames() {
@@ -39,7 +44,7 @@ public final class ShowComputeNodeModeExecutor implements 
InstanceContextRequire
     }
     
     @Override
-    public Collection<LocalDataQueryResultRow> getRows(final InstanceContext 
instanceContext, final ShowComputeNodeModeStatement sqlStatement) {
+    public Collection<LocalDataQueryResultRow> getRows(final 
ShowComputeNodeModeStatement sqlStatement, final ShardingSphereMetaData 
metaData) {
         PersistRepositoryConfiguration repositoryConfig = 
instanceContext.getModeConfiguration().getRepository();
         String modeType = instanceContext.getModeConfiguration().getType();
         String repositoryType = null == repositoryConfig ? "" : 
repositoryConfig.getType();
diff --git 
a/proxy/backend/core/src/main/java/org/apache/shardingsphere/proxy/backend/handler/distsql/ral/queryable/ShowComputeNodesExecutor.java
 
b/proxy/backend/core/src/main/java/org/apache/shardingsphere/proxy/backend/handler/distsql/ral/queryable/ShowComputeNodesExecutor.java
index df91d0ad528..43beb9a4ced 100644
--- 
a/proxy/backend/core/src/main/java/org/apache/shardingsphere/proxy/backend/handler/distsql/ral/queryable/ShowComputeNodesExecutor.java
+++ 
b/proxy/backend/core/src/main/java/org/apache/shardingsphere/proxy/backend/handler/distsql/ral/queryable/ShowComputeNodesExecutor.java
@@ -17,13 +17,15 @@
 
 package org.apache.shardingsphere.proxy.backend.handler.distsql.ral.queryable;
 
-import 
org.apache.shardingsphere.distsql.handler.ral.query.InstanceContextRequiredQueryableRALExecutor;
+import lombok.Setter;
+import 
org.apache.shardingsphere.distsql.handler.ral.query.InstanceContextAwareQueryableRALExecutor;
 import 
org.apache.shardingsphere.distsql.statement.ral.queryable.ShowComputeNodesStatement;
 import org.apache.shardingsphere.infra.instance.ComputeNodeInstance;
 import org.apache.shardingsphere.infra.instance.InstanceContext;
 import org.apache.shardingsphere.infra.instance.metadata.InstanceMetaData;
 import 
org.apache.shardingsphere.infra.instance.metadata.proxy.ProxyInstanceMetaData;
 import 
org.apache.shardingsphere.infra.merge.result.impl.local.LocalDataQueryResultRow;
+import org.apache.shardingsphere.infra.metadata.ShardingSphereMetaData;
 
 import java.util.Arrays;
 import java.util.Collection;
@@ -33,7 +35,10 @@ import java.util.stream.Collectors;
 /**
  * Show compute nodes executor.
  */
-public final class ShowComputeNodesExecutor implements 
InstanceContextRequiredQueryableRALExecutor<ShowComputeNodesStatement> {
+@Setter
+public final class ShowComputeNodesExecutor implements 
InstanceContextAwareQueryableRALExecutor<ShowComputeNodesStatement> {
+    
+    private InstanceContext instanceContext;
     
     @Override
     public Collection<String> getColumnNames() {
@@ -41,7 +46,7 @@ public final class ShowComputeNodesExecutor implements 
InstanceContextRequiredQu
     }
     
     @Override
-    public Collection<LocalDataQueryResultRow> getRows(final InstanceContext 
instanceContext, final ShowComputeNodesStatement sqlStatement) {
+    public Collection<LocalDataQueryResultRow> getRows(final 
ShowComputeNodesStatement sqlStatement, final ShardingSphereMetaData metaData) {
         String modeType = instanceContext.getModeConfiguration().getType();
         if ("Standalone".equals(modeType)) {
             return 
Collections.singleton(buildRow(instanceContext.getInstance(), modeType));
diff --git 
a/proxy/backend/core/src/main/java/org/apache/shardingsphere/proxy/backend/handler/distsql/ral/queryable/ShowDistVariableExecutor.java
 
b/proxy/backend/core/src/main/java/org/apache/shardingsphere/proxy/backend/handler/distsql/ral/queryable/ShowDistVariableExecutor.java
index 5489b504e22..d61b90eb6bc 100644
--- 
a/proxy/backend/core/src/main/java/org/apache/shardingsphere/proxy/backend/handler/distsql/ral/queryable/ShowDistVariableExecutor.java
+++ 
b/proxy/backend/core/src/main/java/org/apache/shardingsphere/proxy/backend/handler/distsql/ral/queryable/ShowDistVariableExecutor.java
@@ -17,9 +17,11 @@
 
 package org.apache.shardingsphere.proxy.backend.handler.distsql.ral.queryable;
 
+import lombok.Setter;
 import 
org.apache.shardingsphere.distsql.statement.ral.queryable.ShowDistVariableStatement;
 import org.apache.shardingsphere.infra.config.props.ConfigurationPropertyKey;
 import 
org.apache.shardingsphere.infra.config.props.temporary.TemporaryConfigurationPropertyKey;
+import 
org.apache.shardingsphere.infra.exception.core.ShardingSpherePreconditions;
 import 
org.apache.shardingsphere.infra.merge.result.impl.local.LocalDataQueryResultRow;
 import org.apache.shardingsphere.infra.metadata.ShardingSphereMetaData;
 import org.apache.shardingsphere.infra.spi.type.typed.TypedSPI;
@@ -28,7 +30,7 @@ import 
org.apache.shardingsphere.logging.logger.ShardingSphereLogger;
 import org.apache.shardingsphere.logging.util.LoggingUtils;
 import 
org.apache.shardingsphere.proxy.backend.exception.UnsupportedVariableException;
 import 
org.apache.shardingsphere.proxy.backend.handler.distsql.ral.common.enums.VariableEnum;
-import 
org.apache.shardingsphere.proxy.backend.handler.distsql.ral.queryable.executor.ConnectionSessionRequiredQueryableRALExecutor;
+import 
org.apache.shardingsphere.proxy.backend.handler.distsql.ral.queryable.executor.ConnectionSessionAwareQueryableRALExecutor;
 import org.apache.shardingsphere.proxy.backend.session.ConnectionSession;
 
 import java.util.Arrays;
@@ -40,7 +42,10 @@ import java.util.Properties;
 /**
  * Show dist variable executor.
  */
-public final class ShowDistVariableExecutor implements 
ConnectionSessionRequiredQueryableRALExecutor<ShowDistVariableStatement> {
+@Setter
+public final class ShowDistVariableExecutor implements 
ConnectionSessionAwareQueryableRALExecutor<ShowDistVariableStatement> {
+    
+    private ConnectionSession connectionSession;
     
     @Override
     public Collection<String> getColumnNames() {
@@ -48,17 +53,18 @@ public final class ShowDistVariableExecutor implements 
ConnectionSessionRequired
     }
     
     @Override
-    public Collection<LocalDataQueryResultRow> getRows(final 
ShardingSphereMetaData metaData, final ConnectionSession connectionSession, 
final ShowDistVariableStatement sqlStatement) {
+    public Collection<LocalDataQueryResultRow> getRows(final 
ShowDistVariableStatement sqlStatement, final ShardingSphereMetaData metaData) {
         return buildSpecifiedRow(metaData, connectionSession, 
sqlStatement.getName());
     }
     
     private Collection<LocalDataQueryResultRow> buildSpecifiedRow(final 
ShardingSphereMetaData metaData, final ConnectionSession connectionSession, 
final String variableName) {
         if (isConfigurationKey(variableName)) {
-            return Collections.singletonList(new 
LocalDataQueryResultRow(variableName.toLowerCase(), 
getConfigurationValue(metaData, variableName)));
-        } else if (isTemporaryConfigurationKey(variableName)) {
-            return Collections.singletonList(new 
LocalDataQueryResultRow(variableName.toLowerCase(), 
getTemporaryConfigurationValue(metaData, variableName)));
+            return Collections.singleton(new 
LocalDataQueryResultRow(variableName.toLowerCase(), 
getConfigurationValue(metaData, variableName)));
+        }
+        if (isTemporaryConfigurationKey(variableName)) {
+            return Collections.singleton(new 
LocalDataQueryResultRow(variableName.toLowerCase(), 
getTemporaryConfigurationValue(metaData, variableName)));
         }
-        return Collections.singletonList(new 
LocalDataQueryResultRow(variableName.toLowerCase(), 
getSpecialValue(connectionSession, variableName)));
+        return Collections.singleton(new 
LocalDataQueryResultRow(variableName.toLowerCase(), 
getSpecialValue(connectionSession, variableName)));
     }
     
     private boolean isConfigurationKey(final String variableName) {
@@ -66,10 +72,9 @@ public final class ShowDistVariableExecutor implements 
ConnectionSessionRequired
     }
     
     private String getConfigurationValue(final ShardingSphereMetaData 
metaData, final String variableName) {
-        if 
(LoggingConstants.SQL_SHOW_VARIABLE_NAME.equalsIgnoreCase(variableName) || 
LoggingConstants.SQL_SIMPLE_VARIABLE_NAME.equalsIgnoreCase(variableName)) {
-            return getLoggingPropsValue(metaData, variableName);
-        }
-        return 
getStringResult(metaData.getProps().getValue(ConfigurationPropertyKey.valueOf(variableName)));
+        return 
LoggingConstants.SQL_SHOW_VARIABLE_NAME.equalsIgnoreCase(variableName) || 
LoggingConstants.SQL_SIMPLE_VARIABLE_NAME.equalsIgnoreCase(variableName)
+                ? getLoggingPropsValue(metaData, variableName)
+                : 
getStringResult(metaData.getProps().getValue(ConfigurationPropertyKey.valueOf(variableName)));
     }
     
     private String getLoggingPropsValue(final ShardingSphereMetaData metaData, 
final String variableName) {
@@ -98,12 +103,8 @@ public final class ShowDistVariableExecutor implements 
ConnectionSessionRequired
     }
     
     private String getSpecialValue(final ConnectionSession connectionSession, 
final String variableName) {
-        VariableEnum variable = VariableEnum.getValueOf(variableName);
-        if (variable == VariableEnum.CACHED_CONNECTIONS) {
-            int connectionSize = 
connectionSession.getDatabaseConnectionManager().getConnectionSize();
-            return String.valueOf(connectionSize);
-        }
-        throw new UnsupportedVariableException(variableName);
+        ShardingSpherePreconditions.checkState(VariableEnum.CACHED_CONNECTIONS 
== VariableEnum.getValueOf(variableName), () -> new 
UnsupportedVariableException(variableName));
+        return 
String.valueOf(connectionSession.getDatabaseConnectionManager().getConnectionSize());
     }
     
     private String getStringResult(final Object value) {
diff --git 
a/proxy/backend/core/src/main/java/org/apache/shardingsphere/proxy/backend/handler/distsql/ral/queryable/ShowDistVariablesExecutor.java
 
b/proxy/backend/core/src/main/java/org/apache/shardingsphere/proxy/backend/handler/distsql/ral/queryable/ShowDistVariablesExecutor.java
index f59674b9a4d..1ea2679c1f7 100644
--- 
a/proxy/backend/core/src/main/java/org/apache/shardingsphere/proxy/backend/handler/distsql/ral/queryable/ShowDistVariablesExecutor.java
+++ 
b/proxy/backend/core/src/main/java/org/apache/shardingsphere/proxy/backend/handler/distsql/ral/queryable/ShowDistVariablesExecutor.java
@@ -17,6 +17,7 @@
 
 package org.apache.shardingsphere.proxy.backend.handler.distsql.ral.queryable;
 
+import lombok.Setter;
 import 
org.apache.shardingsphere.distsql.statement.ral.queryable.ShowDistVariablesStatement;
 import org.apache.shardingsphere.infra.config.props.ConfigurationPropertyKey;
 import 
org.apache.shardingsphere.infra.config.props.temporary.TemporaryConfigurationPropertyKey;
@@ -27,7 +28,7 @@ import 
org.apache.shardingsphere.logging.constant.LoggingConstants;
 import org.apache.shardingsphere.logging.logger.ShardingSphereLogger;
 import org.apache.shardingsphere.logging.util.LoggingUtils;
 import 
org.apache.shardingsphere.proxy.backend.handler.distsql.ral.common.enums.VariableEnum;
-import 
org.apache.shardingsphere.proxy.backend.handler.distsql.ral.queryable.executor.ConnectionSessionRequiredQueryableRALExecutor;
+import 
org.apache.shardingsphere.proxy.backend.handler.distsql.ral.queryable.executor.ConnectionSessionAwareQueryableRALExecutor;
 import org.apache.shardingsphere.proxy.backend.session.ConnectionSession;
 import org.apache.shardingsphere.sql.parser.sql.common.util.SQLUtils;
 
@@ -42,7 +43,10 @@ import java.util.stream.Collectors;
 /**
  * Show dist variables executor.
  */
-public final class ShowDistVariablesExecutor implements 
ConnectionSessionRequiredQueryableRALExecutor<ShowDistVariablesStatement> {
+@Setter
+public final class ShowDistVariablesExecutor implements 
ConnectionSessionAwareQueryableRALExecutor<ShowDistVariablesStatement> {
+    
+    private ConnectionSession connectionSession;
     
     @Override
     public Collection<String> getColumnNames() {
@@ -50,7 +54,7 @@ public final class ShowDistVariablesExecutor implements 
ConnectionSessionRequire
     }
     
     @Override
-    public Collection<LocalDataQueryResultRow> getRows(final 
ShardingSphereMetaData metaData, final ConnectionSession connectionSession, 
final ShowDistVariablesStatement sqlStatement) {
+    public Collection<LocalDataQueryResultRow> getRows(final 
ShowDistVariablesStatement sqlStatement, final ShardingSphereMetaData metaData) 
{
         Collection<LocalDataQueryResultRow> result = 
ConfigurationPropertyKey.getKeyNames().stream()
                 .filter(each -> 
!ConfigurationPropertyKey.SQL_SHOW.name().equals(each) && 
!ConfigurationPropertyKey.SQL_SIMPLE.name().equals(each))
                 .map(each -> new LocalDataQueryResultRow(each.toLowerCase(), 
getStringResult(metaData.getProps().getValue(ConfigurationPropertyKey.valueOf(each))))).collect(Collectors.toList());
@@ -73,16 +77,16 @@ public final class ShowDistVariablesExecutor implements 
ConnectionSessionRequire
         return value instanceof TypedSPI ? ((TypedSPI) 
value).getType().toString() : value.toString();
     }
     
-    private void addLoggingPropsRows(final ShardingSphereMetaData metaData, 
final Collection<LocalDataQueryResultRow> result) {
+    private void addLoggingPropsRows(final ShardingSphereMetaData metaData, 
final Collection<LocalDataQueryResultRow> rows) {
         Optional<ShardingSphereLogger> sqlLogger = 
LoggingUtils.getSQLLogger(metaData.getGlobalRuleMetaData());
         if (sqlLogger.isPresent()) {
             Properties sqlLoggerProps = sqlLogger.get().getProps();
-            result.add(new 
LocalDataQueryResultRow(LoggingConstants.SQL_SHOW_VARIABLE_NAME, 
sqlLoggerProps.getOrDefault(LoggingConstants.SQL_LOG_ENABLE, 
Boolean.FALSE).toString()));
-            result.add(new 
LocalDataQueryResultRow(LoggingConstants.SQL_SIMPLE_VARIABLE_NAME, 
sqlLoggerProps.getOrDefault(LoggingConstants.SQL_LOG_SIMPLE, 
Boolean.FALSE).toString()));
+            rows.add(new 
LocalDataQueryResultRow(LoggingConstants.SQL_SHOW_VARIABLE_NAME, 
sqlLoggerProps.getOrDefault(LoggingConstants.SQL_LOG_ENABLE, 
Boolean.FALSE).toString()));
+            rows.add(new 
LocalDataQueryResultRow(LoggingConstants.SQL_SIMPLE_VARIABLE_NAME, 
sqlLoggerProps.getOrDefault(LoggingConstants.SQL_LOG_SIMPLE, 
Boolean.FALSE).toString()));
         } else {
-            result.add(new 
LocalDataQueryResultRow(LoggingConstants.SQL_SHOW_VARIABLE_NAME,
+            rows.add(new 
LocalDataQueryResultRow(LoggingConstants.SQL_SHOW_VARIABLE_NAME,
                     
metaData.getProps().getValue(ConfigurationPropertyKey.valueOf(LoggingConstants.SQL_SHOW_VARIABLE_NAME.toUpperCase())).toString()));
-            result.add(new 
LocalDataQueryResultRow(LoggingConstants.SQL_SIMPLE_VARIABLE_NAME,
+            rows.add(new 
LocalDataQueryResultRow(LoggingConstants.SQL_SIMPLE_VARIABLE_NAME,
                     
metaData.getProps().getValue(ConfigurationPropertyKey.valueOf(LoggingConstants.SQL_SIMPLE_VARIABLE_NAME.toUpperCase())).toString()));
         }
     }
diff --git 
a/proxy/backend/core/src/main/java/org/apache/shardingsphere/proxy/backend/handler/distsql/ral/queryable/ShowStatusFromReadwriteSplittingRulesExecutor.java
 
b/proxy/backend/core/src/main/java/org/apache/shardingsphere/proxy/backend/handler/distsql/ral/queryable/ShowStatusFromReadwriteSplittingRulesExecutor.java
index 04839b27417..0f7dda1c7ca 100644
--- 
a/proxy/backend/core/src/main/java/org/apache/shardingsphere/proxy/backend/handler/distsql/ral/queryable/ShowStatusFromReadwriteSplittingRulesExecutor.java
+++ 
b/proxy/backend/core/src/main/java/org/apache/shardingsphere/proxy/backend/handler/distsql/ral/queryable/ShowStatusFromReadwriteSplittingRulesExecutor.java
@@ -18,9 +18,8 @@
 package org.apache.shardingsphere.proxy.backend.handler.distsql.ral.queryable;
 
 import com.google.common.base.Strings;
-import org.apache.shardingsphere.infra.state.datasource.DataSourceState;
-import 
org.apache.shardingsphere.infra.exception.dialect.exception.syntax.database.NoDatabaseSelectedException;
-import 
org.apache.shardingsphere.infra.exception.dialect.exception.syntax.database.UnknownDatabaseException;
+import lombok.Setter;
+import 
org.apache.shardingsphere.distsql.handler.ral.query.DatabaseAwareQueryableRALExecutor;
 import 
org.apache.shardingsphere.infra.merge.result.impl.local.LocalDataQueryResultRow;
 import org.apache.shardingsphere.infra.metadata.ShardingSphereMetaData;
 import 
org.apache.shardingsphere.infra.metadata.database.ShardingSphereDatabase;
@@ -29,14 +28,13 @@ import 
org.apache.shardingsphere.infra.rule.identifier.type.exportable.Exportabl
 import 
org.apache.shardingsphere.infra.rule.identifier.type.exportable.RuleExportEngine;
 import 
org.apache.shardingsphere.infra.rule.identifier.type.exportable.constant.ExportableConstants;
 import 
org.apache.shardingsphere.infra.rule.identifier.type.exportable.constant.ExportableItemConstants;
+import org.apache.shardingsphere.infra.state.datasource.DataSourceState;
 import org.apache.shardingsphere.metadata.persist.MetaDataBasedPersistService;
 import org.apache.shardingsphere.mode.event.storage.StorageNodeDataSource;
 import org.apache.shardingsphere.mode.event.storage.StorageNodeRole;
 import 
org.apache.shardingsphere.mode.manager.cluster.coordinator.registry.status.storage.service.StorageNodeStatusService;
 import 
org.apache.shardingsphere.mode.repository.cluster.ClusterPersistRepository;
 import org.apache.shardingsphere.proxy.backend.context.ProxyContext;
-import 
org.apache.shardingsphere.proxy.backend.handler.distsql.ral.queryable.executor.ConnectionSessionRequiredQueryableRALExecutor;
-import org.apache.shardingsphere.proxy.backend.session.ConnectionSession;
 import 
org.apache.shardingsphere.readwritesplitting.distsql.statement.ShowStatusFromReadwriteSplittingRulesStatement;
 
 import java.util.Arrays;
@@ -54,7 +52,10 @@ import java.util.stream.Collectors;
 /**
  * Show status from readwrite-splitting rules executor.
  */
-public final class ShowStatusFromReadwriteSplittingRulesExecutor implements 
ConnectionSessionRequiredQueryableRALExecutor<ShowStatusFromReadwriteSplittingRulesStatement>
 {
+@Setter
+public final class ShowStatusFromReadwriteSplittingRulesExecutor implements 
DatabaseAwareQueryableRALExecutor<ShowStatusFromReadwriteSplittingRulesStatement>
 {
+    
+    private ShardingSphereDatabase currentDatabase;
     
     @Override
     public Collection<String> getColumnNames() {
@@ -62,26 +63,13 @@ public final class 
ShowStatusFromReadwriteSplittingRulesExecutor implements Conn
     }
     
     @Override
-    public Collection<LocalDataQueryResultRow> getRows(final 
ShardingSphereMetaData metaData, final ConnectionSession connectionSession,
-                                                       final 
ShowStatusFromReadwriteSplittingRulesStatement sqlStatement) {
-        String databaseName = getDatabaseName(connectionSession, sqlStatement);
-        ShardingSphereDatabase database = metaData.getDatabase(databaseName);
-        Collection<String> allReadResources = getAllReadResources(database, 
sqlStatement.getGroupName());
-        Map<String, StorageNodeDataSource> persistentReadResources = 
getPersistentReadResources(databaseName, 
ProxyContext.getInstance().getContextManager().getMetaDataContexts().getPersistService());
+    public Collection<LocalDataQueryResultRow> getRows(final 
ShowStatusFromReadwriteSplittingRulesStatement sqlStatement, final 
ShardingSphereMetaData metaData) {
+        Collection<String> allReadResources = 
getAllReadResources(currentDatabase, sqlStatement.getGroupName());
+        Map<String, StorageNodeDataSource> persistentReadResources = 
getPersistentReadResources(
+                currentDatabase.getName(), 
ProxyContext.getInstance().getContextManager().getMetaDataContexts().getPersistService());
         return buildRows(allReadResources, persistentReadResources);
     }
     
-    private String getDatabaseName(final ConnectionSession connectionSession, 
final ShowStatusFromReadwriteSplittingRulesStatement sqlStatement) {
-        String result = sqlStatement.getDatabase().isPresent() ? 
sqlStatement.getDatabase().get().getIdentifier().getValue() : 
connectionSession.getDatabaseName();
-        if (Strings.isNullOrEmpty(result)) {
-            throw new NoDatabaseSelectedException();
-        }
-        if (!ProxyContext.getInstance().databaseExists(result)) {
-            throw new UnknownDatabaseException(result);
-        }
-        return result;
-    }
-    
     private Collection<String> getAllReadResources(final 
ShardingSphereDatabase database, final String groupName) {
         Collection<String> exportKeys = 
Arrays.asList(ExportableConstants.EXPORT_STATIC_READWRITE_SPLITTING_RULE, 
ExportableConstants.EXPORT_DYNAMIC_READWRITE_SPLITTING_RULE);
         Map<String, Object> exportMap = 
database.getRuleMetaData().findRules(ExportableRule.class).stream()
@@ -127,11 +115,7 @@ public final class 
ShowStatusFromReadwriteSplittingRulesExecutor implements Conn
     }
     
     private LocalDataQueryResultRow buildRow(final String resource, final 
StorageNodeDataSource storageNodeDataSource) {
-        if (null == storageNodeDataSource) {
-            return new LocalDataQueryResultRow(resource, 
DataSourceState.ENABLED.name());
-        }
-        String status = storageNodeDataSource.getStatus().name();
-        return new LocalDataQueryResultRow(resource, status);
+        return null == storageNodeDataSource ? new 
LocalDataQueryResultRow(resource, DataSourceState.ENABLED.name()) : new 
LocalDataQueryResultRow(resource, storageNodeDataSource.getStatus().name());
     }
     
     @Override
diff --git 
a/proxy/backend/core/src/main/java/org/apache/shardingsphere/proxy/backend/handler/distsql/ral/queryable/ShowTableMetaDataExecutor.java
 
b/proxy/backend/core/src/main/java/org/apache/shardingsphere/proxy/backend/handler/distsql/ral/queryable/ShowTableMetaDataExecutor.java
index 08c0ac5d978..cb0f5342958 100644
--- 
a/proxy/backend/core/src/main/java/org/apache/shardingsphere/proxy/backend/handler/distsql/ral/queryable/ShowTableMetaDataExecutor.java
+++ 
b/proxy/backend/core/src/main/java/org/apache/shardingsphere/proxy/backend/handler/distsql/ral/queryable/ShowTableMetaDataExecutor.java
@@ -17,10 +17,12 @@
 
 package org.apache.shardingsphere.proxy.backend.handler.distsql.ral.queryable;
 
-import 
org.apache.shardingsphere.distsql.handler.ral.query.DatabaseRequiredQueryableRALExecutor;
+import lombok.Setter;
+import 
org.apache.shardingsphere.distsql.handler.ral.query.DatabaseAwareQueryableRALExecutor;
 import 
org.apache.shardingsphere.distsql.statement.ral.queryable.ShowTableMetaDataStatement;
 import org.apache.shardingsphere.infra.database.core.type.DatabaseTypeRegistry;
 import 
org.apache.shardingsphere.infra.merge.result.impl.local.LocalDataQueryResultRow;
+import org.apache.shardingsphere.infra.metadata.ShardingSphereMetaData;
 import 
org.apache.shardingsphere.infra.metadata.database.ShardingSphereDatabase;
 import 
org.apache.shardingsphere.infra.metadata.database.schema.model.ShardingSphereColumn;
 import 
org.apache.shardingsphere.infra.metadata.database.schema.model.ShardingSphereIndex;
@@ -36,7 +38,10 @@ import java.util.stream.Collectors;
 /**
  * Show table meta data executor.
  */
-public final class ShowTableMetaDataExecutor implements 
DatabaseRequiredQueryableRALExecutor<ShowTableMetaDataStatement> {
+@Setter
+public final class ShowTableMetaDataExecutor implements 
DatabaseAwareQueryableRALExecutor<ShowTableMetaDataStatement> {
+    
+    private ShardingSphereDatabase currentDatabase;
     
     @Override
     public Collection<String> getColumnNames() {
@@ -44,11 +49,11 @@ public final class ShowTableMetaDataExecutor implements 
DatabaseRequiredQueryabl
     }
     
     @Override
-    public Collection<LocalDataQueryResultRow> getRows(final 
ShardingSphereDatabase database, final ShowTableMetaDataStatement sqlStatement) 
{
-        String defaultSchema = new 
DatabaseTypeRegistry(database.getProtocolType()).getDefaultSchemaName(database.getName());
-        ShardingSphereSchema schema = database.getSchema(defaultSchema);
+    public Collection<LocalDataQueryResultRow> getRows(final 
ShowTableMetaDataStatement sqlStatement, final ShardingSphereMetaData metaData) 
{
+        String defaultSchema = new 
DatabaseTypeRegistry(currentDatabase.getProtocolType()).getDefaultSchemaName(currentDatabase.getName());
+        ShardingSphereSchema schema = currentDatabase.getSchema(defaultSchema);
         return sqlStatement.getTableNames().stream().filter(each -> 
schema.getAllTableNames().contains(each.toLowerCase()))
-                .map(each -> buildTableRows(database.getName(), schema, 
each.toLowerCase())).flatMap(Collection::stream).collect(Collectors.toList());
+                .map(each -> buildTableRows(currentDatabase.getName(), schema, 
each.toLowerCase())).flatMap(Collection::stream).collect(Collectors.toList());
     }
     
     private Collection<LocalDataQueryResultRow> buildTableRows(final String 
databaseName, final ShardingSphereSchema schema, final String tableName) {
diff --git 
a/proxy/backend/core/src/main/java/org/apache/shardingsphere/proxy/backend/handler/distsql/ral/queryable/executor/ConnectionSessionRequiredQueryableRALExecutor.java
 
b/proxy/backend/core/src/main/java/org/apache/shardingsphere/proxy/backend/handler/distsql/ral/queryable/executor/ConnectionSessionAwareQueryableRALExecutor.java
similarity index 62%
rename from 
proxy/backend/core/src/main/java/org/apache/shardingsphere/proxy/backend/handler/distsql/ral/queryable/executor/ConnectionSessionRequiredQueryableRALExecutor.java
rename to 
proxy/backend/core/src/main/java/org/apache/shardingsphere/proxy/backend/handler/distsql/ral/queryable/executor/ConnectionSessionAwareQueryableRALExecutor.java
index 01f474e034b..157ef430061 100644
--- 
a/proxy/backend/core/src/main/java/org/apache/shardingsphere/proxy/backend/handler/distsql/ral/queryable/executor/ConnectionSessionRequiredQueryableRALExecutor.java
+++ 
b/proxy/backend/core/src/main/java/org/apache/shardingsphere/proxy/backend/handler/distsql/ral/queryable/executor/ConnectionSessionAwareQueryableRALExecutor.java
@@ -19,26 +19,19 @@ package 
org.apache.shardingsphere.proxy.backend.handler.distsql.ral.queryable.ex
 
 import 
org.apache.shardingsphere.distsql.handler.ral.query.QueryableRALExecutor;
 import org.apache.shardingsphere.distsql.statement.ral.QueryableRALStatement;
-import 
org.apache.shardingsphere.infra.merge.result.impl.local.LocalDataQueryResultRow;
-import org.apache.shardingsphere.infra.metadata.ShardingSphereMetaData;
 import org.apache.shardingsphere.proxy.backend.session.ConnectionSession;
 
-import java.util.Collection;
-
 /**
- * Connection session required queryable RAL executor.
+ * Connection session aware queryable RAL executor.
  * 
  * @param <T> type of SQL statement
  */
-public interface ConnectionSessionRequiredQueryableRALExecutor<T extends 
QueryableRALStatement> extends QueryableRALExecutor<T> {
+public interface ConnectionSessionAwareQueryableRALExecutor<T extends 
QueryableRALStatement> extends QueryableRALExecutor<T> {
     
     /**
-     * Get query result rows.
+     * Set connection session.
      *
-     * @param metaData ShardingSphere meta data
-     * @param connectionSession connectionSession connection session
-     * @param sqlStatement SQL statement
-     * @return query result rows
+     * @param connectionSession connection session
      */
-    Collection<LocalDataQueryResultRow> getRows(ShardingSphereMetaData 
metaData, ConnectionSession connectionSession, T sqlStatement);
+    void setConnectionSession(ConnectionSession connectionSession);
 }
diff --git 
a/proxy/backend/core/src/test/java/org/apache/shardingsphere/proxy/backend/handler/distsql/ral/QueryableRALBackendHandlerTest.java
 
b/proxy/backend/core/src/test/java/org/apache/shardingsphere/proxy/backend/handler/distsql/ral/QueryableRALBackendHandlerTest.java
index 33abb009677..c0c13a02737 100644
--- 
a/proxy/backend/core/src/test/java/org/apache/shardingsphere/proxy/backend/handler/distsql/ral/QueryableRALBackendHandlerTest.java
+++ 
b/proxy/backend/core/src/test/java/org/apache/shardingsphere/proxy/backend/handler/distsql/ral/QueryableRALBackendHandlerTest.java
@@ -61,9 +61,8 @@ class QueryableRALBackendHandlerTest {
     
     @Test
     void assertExecuteWithNoDatabase() {
-        ConnectionSession connectionSession = mock(ConnectionSession.class);
-        when(connectionSession.getDatabaseName()).thenReturn(null);
-        assertThrows(NoDatabaseSelectedException.class, () -> new 
QueryableRALBackendHandler<>(mock(ExportDatabaseConfigurationStatement.class), 
connectionSession).execute());
+        
when(ProxyContext.getInstance().getDatabase(null)).thenThrow(NoDatabaseSelectedException.class);
+        assertThrows(NoDatabaseSelectedException.class, () -> new 
QueryableRALBackendHandler<>(mock(ExportDatabaseConfigurationStatement.class), 
mock(ConnectionSession.class)).execute());
     }
     
     @Test
@@ -72,6 +71,7 @@ class QueryableRALBackendHandlerTest {
         MetaDataContexts metaDataContexts = new 
MetaDataContexts(mock(MetaDataPersistService.class), metaData);
         ConnectionSession connectionSession = mock(ConnectionSession.class);
         when(connectionSession.getDatabaseName()).thenReturn("unknown");
+        
when(ProxyContext.getInstance().getDatabase("unknown")).thenThrow(UnknownDatabaseException.class);
         ContextManager contextManager = new ContextManager(metaDataContexts, 
mock(InstanceContext.class));
         
when(ProxyContext.getInstance().getContextManager()).thenReturn(contextManager);
         assertThrows(UnknownDatabaseException.class, () -> new 
QueryableRALBackendHandler<>(mock(ExportDatabaseConfigurationStatement.class), 
connectionSession).execute());
@@ -88,7 +88,6 @@ class QueryableRALBackendHandlerTest {
         when(database.getName()).thenReturn("foo_db");
         
when(database.getProtocolType()).thenReturn(TypedSPILoader.getService(DatabaseType.class,
 "FIXTURE"));
         when(database.getSchema("foo_db")).thenReturn(new 
ShardingSphereSchema(createTableMap(), Collections.emptyMap()));
-        
when(ProxyContext.getInstance().databaseExists("foo_db")).thenReturn(true);
         
when(ProxyContext.getInstance().getDatabase("foo_db")).thenReturn(database);
         assertDoesNotThrow(() -> new 
QueryableRALBackendHandler<>(createSqlStatement(), 
mock(ConnectionSession.class)).execute());
     }
diff --git 
a/proxy/backend/core/src/test/java/org/apache/shardingsphere/proxy/backend/handler/distsql/ral/queryable/ExportDatabaseConfigurationExecutorTest.java
 
b/proxy/backend/core/src/test/java/org/apache/shardingsphere/proxy/backend/handler/distsql/ral/queryable/ExportDatabaseConfigurationExecutorTest.java
index 06a4d823316..a5f3fe766ec 100644
--- 
a/proxy/backend/core/src/test/java/org/apache/shardingsphere/proxy/backend/handler/distsql/ral/queryable/ExportDatabaseConfigurationExecutorTest.java
+++ 
b/proxy/backend/core/src/test/java/org/apache/shardingsphere/proxy/backend/handler/distsql/ral/queryable/ExportDatabaseConfigurationExecutorTest.java
@@ -23,6 +23,7 @@ import 
org.apache.shardingsphere.infra.config.algorithm.AlgorithmConfiguration;
 import 
org.apache.shardingsphere.infra.datasource.pool.props.creator.DataSourcePoolPropertiesCreator;
 import 
org.apache.shardingsphere.infra.datasource.pool.props.domain.DataSourcePoolProperties;
 import 
org.apache.shardingsphere.infra.merge.result.impl.local.LocalDataQueryResultRow;
+import org.apache.shardingsphere.infra.metadata.ShardingSphereMetaData;
 import 
org.apache.shardingsphere.infra.metadata.database.ShardingSphereDatabase;
 import 
org.apache.shardingsphere.infra.metadata.database.resource.unit.StorageUnit;
 import org.apache.shardingsphere.sharding.api.config.ShardingRuleConfiguration;
@@ -73,7 +74,9 @@ class ExportDatabaseConfigurationExecutorTest {
         Map<String, StorageUnit> storageUnits = createStorageUnits();
         
when(database.getResourceMetaData().getStorageUnits()).thenReturn(storageUnits);
         
when(database.getRuleMetaData().getConfigurations()).thenReturn(Collections.singleton(createShardingRuleConfiguration()));
-        Collection<LocalDataQueryResultRow> actual = new 
ExportDatabaseConfigurationExecutor().getRows(database, new 
ExportDatabaseConfigurationStatement(mock(DatabaseSegment.class), null));
+        ExportDatabaseConfigurationExecutor executor = new 
ExportDatabaseConfigurationExecutor();
+        executor.setCurrentDatabase(database);
+        Collection<LocalDataQueryResultRow> actual = executor.getRows(new 
ExportDatabaseConfigurationStatement(mock(DatabaseSegment.class), null), 
mock(ShardingSphereMetaData.class));
         assertThat(actual.size(), is(1));
         LocalDataQueryResultRow row = actual.iterator().next();
         assertThat(row.getCell(1), is(loadExpectedRow()));
@@ -97,7 +100,9 @@ class ExportDatabaseConfigurationExecutorTest {
         
when(database.getResourceMetaData().getStorageUnits()).thenReturn(Collections.emptyMap());
         
when(database.getRuleMetaData().getConfigurations()).thenReturn(Collections.emptyList());
         ExportDatabaseConfigurationStatement sqlStatement = new 
ExportDatabaseConfigurationStatement(new DatabaseSegment(0, 0, new 
IdentifierValue("empty_db")), null);
-        Collection<LocalDataQueryResultRow> actual = new 
ExportDatabaseConfigurationExecutor().getRows(database, sqlStatement);
+        ExportDatabaseConfigurationExecutor executor = new 
ExportDatabaseConfigurationExecutor();
+        executor.setCurrentDatabase(database);
+        Collection<LocalDataQueryResultRow> actual = 
executor.getRows(sqlStatement, mock(ShardingSphereMetaData.class));
         assertThat(actual.size(), is(1));
         LocalDataQueryResultRow row = actual.iterator().next();
         assertThat(row.getCell(1), is("databaseName: empty_db" + 
System.lineSeparator()));
diff --git 
a/proxy/backend/core/src/test/java/org/apache/shardingsphere/proxy/backend/handler/distsql/ral/queryable/ShowComputeNodeInfoExecutorTest.java
 
b/proxy/backend/core/src/test/java/org/apache/shardingsphere/proxy/backend/handler/distsql/ral/queryable/ShowComputeNodeInfoExecutorTest.java
index f71c96acf51..e13df361a40 100644
--- 
a/proxy/backend/core/src/test/java/org/apache/shardingsphere/proxy/backend/handler/distsql/ral/queryable/ShowComputeNodeInfoExecutorTest.java
+++ 
b/proxy/backend/core/src/test/java/org/apache/shardingsphere/proxy/backend/handler/distsql/ral/queryable/ShowComputeNodeInfoExecutorTest.java
@@ -22,6 +22,7 @@ import 
org.apache.shardingsphere.infra.config.mode.ModeConfiguration;
 import org.apache.shardingsphere.infra.instance.InstanceContext;
 import 
org.apache.shardingsphere.infra.instance.metadata.proxy.ProxyInstanceMetaData;
 import 
org.apache.shardingsphere.infra.merge.result.impl.local.LocalDataQueryResultRow;
+import org.apache.shardingsphere.infra.metadata.ShardingSphereMetaData;
 import org.apache.shardingsphere.infra.state.instance.InstanceStateContext;
 import 
org.apache.shardingsphere.mode.repository.standalone.StandalonePersistRepositoryConfiguration;
 import org.junit.jupiter.api.Test;
@@ -57,7 +58,8 @@ class ShowComputeNodeInfoExecutorTest {
     @Test
     void assertExecute() {
         ShowComputeNodeInfoExecutor executor = new 
ShowComputeNodeInfoExecutor();
-        Collection<LocalDataQueryResultRow> actual = 
executor.getRows(createInstanceContext(), 
mock(ShowComputeNodeInfoStatement.class));
+        executor.setInstanceContext(createInstanceContext());
+        Collection<LocalDataQueryResultRow> actual = 
executor.getRows(mock(ShowComputeNodeInfoStatement.class), 
mock(ShardingSphereMetaData.class));
         assertThat(actual.size(), is(1));
         LocalDataQueryResultRow row = actual.iterator().next();
         assertThat(row.getCell(1), is("foo"));
diff --git 
a/proxy/backend/core/src/test/java/org/apache/shardingsphere/proxy/backend/handler/distsql/ral/queryable/ShowComputeNodeModeExecutorTest.java
 
b/proxy/backend/core/src/test/java/org/apache/shardingsphere/proxy/backend/handler/distsql/ral/queryable/ShowComputeNodeModeExecutorTest.java
index e4a46e158ef..2449479037f 100644
--- 
a/proxy/backend/core/src/test/java/org/apache/shardingsphere/proxy/backend/handler/distsql/ral/queryable/ShowComputeNodeModeExecutorTest.java
+++ 
b/proxy/backend/core/src/test/java/org/apache/shardingsphere/proxy/backend/handler/distsql/ral/queryable/ShowComputeNodeModeExecutorTest.java
@@ -21,6 +21,7 @@ import 
org.apache.shardingsphere.distsql.statement.ral.queryable.ShowComputeNode
 import org.apache.shardingsphere.infra.config.mode.ModeConfiguration;
 import org.apache.shardingsphere.infra.instance.InstanceContext;
 import 
org.apache.shardingsphere.infra.merge.result.impl.local.LocalDataQueryResultRow;
+import org.apache.shardingsphere.infra.metadata.ShardingSphereMetaData;
 import 
org.apache.shardingsphere.mode.repository.cluster.ClusterPersistRepositoryConfiguration;
 import org.apache.shardingsphere.test.util.PropertiesBuilder;
 import org.apache.shardingsphere.test.util.PropertiesBuilder.Property;
@@ -40,7 +41,8 @@ class ShowComputeNodeModeExecutorTest {
     @Test
     void assertExecute() {
         ShowComputeNodeModeExecutor executor = new 
ShowComputeNodeModeExecutor();
-        Collection<LocalDataQueryResultRow> actual = 
executor.getRows(createInstanceContext(), new ShowComputeNodeModeStatement());
+        executor.setInstanceContext(createInstanceContext());
+        Collection<LocalDataQueryResultRow> actual = executor.getRows(new 
ShowComputeNodeModeStatement(), mock(ShardingSphereMetaData.class));
         assertThat(actual.size(), is(1));
         Iterator<LocalDataQueryResultRow> iterator = actual.iterator();
         LocalDataQueryResultRow row = iterator.next();
diff --git 
a/proxy/backend/core/src/test/java/org/apache/shardingsphere/proxy/backend/handler/distsql/ral/queryable/ShowComputeNodesExecutorTest.java
 
b/proxy/backend/core/src/test/java/org/apache/shardingsphere/proxy/backend/handler/distsql/ral/queryable/ShowComputeNodesExecutorTest.java
index 3c2f861d4b8..4fafa125951 100644
--- 
a/proxy/backend/core/src/test/java/org/apache/shardingsphere/proxy/backend/handler/distsql/ral/queryable/ShowComputeNodesExecutorTest.java
+++ 
b/proxy/backend/core/src/test/java/org/apache/shardingsphere/proxy/backend/handler/distsql/ral/queryable/ShowComputeNodesExecutorTest.java
@@ -24,6 +24,7 @@ import 
org.apache.shardingsphere.infra.instance.ComputeNodeInstance;
 import org.apache.shardingsphere.infra.instance.InstanceContext;
 import 
org.apache.shardingsphere.infra.instance.metadata.proxy.ProxyInstanceMetaData;
 import 
org.apache.shardingsphere.infra.merge.result.impl.local.LocalDataQueryResultRow;
+import org.apache.shardingsphere.infra.metadata.ShardingSphereMetaData;
 import org.apache.shardingsphere.infra.state.instance.InstanceStateContext;
 import 
org.apache.shardingsphere.mode.repository.standalone.StandalonePersistRepositoryConfiguration;
 import org.junit.jupiter.api.Test;
@@ -61,7 +62,8 @@ class ShowComputeNodesExecutorTest {
     @Test
     void assertExecuteWithStandaloneMode() {
         ShowComputeNodesExecutor executor = new ShowComputeNodesExecutor();
-        Collection<LocalDataQueryResultRow> actual = 
executor.getRows(createStandaloneInstanceContext(), 
mock(ShowComputeNodesStatement.class));
+        executor.setInstanceContext(createStandaloneInstanceContext());
+        Collection<LocalDataQueryResultRow> actual = 
executor.getRows(mock(ShowComputeNodesStatement.class), 
mock(ShardingSphereMetaData.class));
         assertThat(actual.size(), is(1));
         LocalDataQueryResultRow row = actual.iterator().next();
         assertThat(row.getCell(1), is("foo"));
@@ -78,7 +80,8 @@ class ShowComputeNodesExecutorTest {
     @Test
     void assertExecuteWithClusterMode() {
         ShowComputeNodesExecutor executor = new ShowComputeNodesExecutor();
-        Collection<LocalDataQueryResultRow> actual = 
executor.getRows(createClusterInstanceContext(), 
mock(ShowComputeNodesStatement.class));
+        executor.setInstanceContext(createClusterInstanceContext());
+        Collection<LocalDataQueryResultRow> actual = 
executor.getRows(mock(ShowComputeNodesStatement.class), 
mock(ShardingSphereMetaData.class));
         assertThat(actual.size(), is(1));
         LocalDataQueryResultRow row = actual.iterator().next();
         assertThat(row.getCell(1), is("foo"));
diff --git 
a/proxy/backend/core/src/test/java/org/apache/shardingsphere/proxy/backend/handler/distsql/ral/queryable/ShowDistVariableExecutorTest.java
 
b/proxy/backend/core/src/test/java/org/apache/shardingsphere/proxy/backend/handler/distsql/ral/queryable/ShowDistVariableExecutorTest.java
index 8461b92f864..0e07938b6a8 100644
--- 
a/proxy/backend/core/src/test/java/org/apache/shardingsphere/proxy/backend/handler/distsql/ral/queryable/ShowDistVariableExecutorTest.java
+++ 
b/proxy/backend/core/src/test/java/org/apache/shardingsphere/proxy/backend/handler/distsql/ral/queryable/ShowDistVariableExecutorTest.java
@@ -58,7 +58,8 @@ class ShowDistVariableExecutorTest {
     void assertShowCachedConnections() {
         
when(connectionSession.getDatabaseConnectionManager().getConnectionSize()).thenReturn(1);
         ShowDistVariableExecutor executor = new ShowDistVariableExecutor();
-        Collection<LocalDataQueryResultRow> actual = 
executor.getRows(metaData, connectionSession, new 
ShowDistVariableStatement("CACHED_CONNECTIONS"));
+        executor.setConnectionSession(connectionSession);
+        Collection<LocalDataQueryResultRow> actual = executor.getRows(new 
ShowDistVariableStatement("CACHED_CONNECTIONS"), metaData);
         assertThat(actual.size(), is(1));
         LocalDataQueryResultRow row = actual.iterator().next();
         assertThat(row.getCell(1), is("cached_connections"));
@@ -69,7 +70,8 @@ class ShowDistVariableExecutorTest {
     void assertShowPropsVariable() {
         when(metaData.getProps()).thenReturn(new 
ConfigurationProperties(PropertiesBuilder.build(new Property("sql-show", 
Boolean.TRUE.toString()))));
         ShowDistVariableExecutor executor = new ShowDistVariableExecutor();
-        Collection<LocalDataQueryResultRow> actual = 
executor.getRows(metaData, connectionSession, new 
ShowDistVariableStatement("SQL_SHOW"));
+        executor.setConnectionSession(connectionSession);
+        Collection<LocalDataQueryResultRow> actual = executor.getRows(new 
ShowDistVariableStatement("SQL_SHOW"), metaData);
         assertThat(actual.size(), is(1));
         LocalDataQueryResultRow row = actual.iterator().next();
         assertThat(row.getCell(1), is("sql_show"));
@@ -80,7 +82,8 @@ class ShowDistVariableExecutorTest {
     void assertShowPropsVariableForTypedSPI() {
         when(metaData.getProps()).thenReturn(new 
ConfigurationProperties(PropertiesBuilder.build(new 
Property("proxy-frontend-database-protocol-type", "MySQL"))));
         ShowDistVariableExecutor executor = new ShowDistVariableExecutor();
-        Collection<LocalDataQueryResultRow> actual = 
executor.getRows(metaData, connectionSession, new 
ShowDistVariableStatement("PROXY_FRONTEND_DATABASE_PROTOCOL_TYPE"));
+        executor.setConnectionSession(connectionSession);
+        Collection<LocalDataQueryResultRow> actual = executor.getRows(new 
ShowDistVariableStatement("PROXY_FRONTEND_DATABASE_PROTOCOL_TYPE"), metaData);
         assertThat(actual.size(), is(1));
         LocalDataQueryResultRow row = actual.iterator().next();
         assertThat(row.getCell(1), 
is("proxy_frontend_database_protocol_type"));
@@ -91,7 +94,8 @@ class ShowDistVariableExecutorTest {
     void assertShowTemporaryPropsVariable() {
         when(metaData.getTemporaryProps()).thenReturn(new 
TemporaryConfigurationProperties(PropertiesBuilder.build(new 
Property("proxy-meta-data-collector-enabled", Boolean.FALSE.toString()))));
         ShowDistVariableExecutor executor = new ShowDistVariableExecutor();
-        Collection<LocalDataQueryResultRow> actual = 
executor.getRows(metaData, connectionSession, new 
ShowDistVariableStatement("PROXY_META_DATA_COLLECTOR_ENABLED"));
+        executor.setConnectionSession(connectionSession);
+        Collection<LocalDataQueryResultRow> actual = executor.getRows(new 
ShowDistVariableStatement("PROXY_META_DATA_COLLECTOR_ENABLED"), metaData);
         assertThat(actual.size(), is(1));
         LocalDataQueryResultRow row = actual.iterator().next();
         assertThat(row.getCell(1), is("proxy_meta_data_collector_enabled"));
@@ -100,6 +104,8 @@ class ShowDistVariableExecutorTest {
     
     @Test
     void assertExecuteWithInvalidVariableName() {
-        assertThrows(UnsupportedVariableException.class, () -> new 
ShowDistVariableExecutor().getRows(metaData, connectionSession, new 
ShowDistVariableStatement("wrong_name")));
+        ShowDistVariableExecutor executor = new ShowDistVariableExecutor();
+        executor.setConnectionSession(connectionSession);
+        assertThrows(UnsupportedVariableException.class, () -> 
executor.getRows(new ShowDistVariableStatement("wrong_name"), metaData));
     }
 }
diff --git 
a/proxy/backend/core/src/test/java/org/apache/shardingsphere/proxy/backend/handler/distsql/ral/queryable/ShowDistVariablesExecutorTest.java
 
b/proxy/backend/core/src/test/java/org/apache/shardingsphere/proxy/backend/handler/distsql/ral/queryable/ShowDistVariablesExecutorTest.java
index 76e6636cb3a..c491d7a295f 100644
--- 
a/proxy/backend/core/src/test/java/org/apache/shardingsphere/proxy/backend/handler/distsql/ral/queryable/ShowDistVariablesExecutorTest.java
+++ 
b/proxy/backend/core/src/test/java/org/apache/shardingsphere/proxy/backend/handler/distsql/ral/queryable/ShowDistVariablesExecutorTest.java
@@ -61,7 +61,8 @@ class ShowDistVariablesExecutorTest {
         when(metaData.getProps()).thenReturn(new 
ConfigurationProperties(PropertiesBuilder.build(new 
Property("system-log-level", "INFO"))));
         when(metaData.getTemporaryProps()).thenReturn(new 
TemporaryConfigurationProperties(PropertiesBuilder.build(new 
Property("proxy-meta-data-collector-enabled", Boolean.FALSE.toString()))));
         ShowDistVariablesExecutor executor = new ShowDistVariablesExecutor();
-        Collection<LocalDataQueryResultRow> actual = 
executor.getRows(metaData, connectionSession, 
mock(ShowDistVariablesStatement.class));
+        executor.setConnectionSession(connectionSession);
+        Collection<LocalDataQueryResultRow> actual = 
executor.getRows(mock(ShowDistVariablesStatement.class), metaData);
         assertThat(actual.size(), is(21));
         LocalDataQueryResultRow row = actual.iterator().next();
         assertThat(row.getCell(1), is("agent_plugins_enabled"));
@@ -74,7 +75,8 @@ class ShowDistVariablesExecutorTest {
         when(metaData.getTemporaryProps()).thenReturn(new 
TemporaryConfigurationProperties(PropertiesBuilder.build(new 
Property("proxy-meta-data-collector-enabled", Boolean.FALSE.toString()))));
         when(metaData.getGlobalRuleMetaData()).thenReturn(new 
RuleMetaData(Collections.singleton(new LoggingRule(new 
DefaultLoggingRuleConfigurationBuilder().build()))));
         ShowDistVariablesExecutor executor = new ShowDistVariablesExecutor();
-        Collection<LocalDataQueryResultRow> actual = 
executor.getRows(metaData, connectionSession, new 
ShowDistVariablesStatement("sql_%"));
+        executor.setConnectionSession(connectionSession);
+        Collection<LocalDataQueryResultRow> actual = executor.getRows(new 
ShowDistVariablesStatement("sql_%"), metaData);
         assertThat(actual.size(), is(2));
         Iterator<LocalDataQueryResultRow> iterator = actual.iterator();
         assertThat(iterator.next().getCell(1), is("sql_show"));
diff --git 
a/proxy/backend/core/src/test/java/org/apache/shardingsphere/proxy/backend/handler/distsql/ral/queryable/ShowStatusFromReadwriteSplittingRulesExecutorTest.java
 
b/proxy/backend/core/src/test/java/org/apache/shardingsphere/proxy/backend/handler/distsql/ral/queryable/ShowStatusFromReadwriteSplittingRulesExecutorTest.java
index 3aa449d831a..e057930d96f 100644
--- 
a/proxy/backend/core/src/test/java/org/apache/shardingsphere/proxy/backend/handler/distsql/ral/queryable/ShowStatusFromReadwriteSplittingRulesExecutorTest.java
+++ 
b/proxy/backend/core/src/test/java/org/apache/shardingsphere/proxy/backend/handler/distsql/ral/queryable/ShowStatusFromReadwriteSplittingRulesExecutorTest.java
@@ -27,12 +27,11 @@ import 
org.apache.shardingsphere.infra.metadata.database.resource.ResourceMetaDa
 import org.apache.shardingsphere.infra.metadata.database.rule.RuleMetaData;
 import org.apache.shardingsphere.infra.rule.ShardingSphereRule;
 import org.apache.shardingsphere.infra.spi.type.typed.TypedSPILoader;
+import org.apache.shardingsphere.metadata.persist.MetaDataPersistService;
 import org.apache.shardingsphere.mode.manager.ContextManager;
 import org.apache.shardingsphere.mode.metadata.MetaDataContexts;
-import org.apache.shardingsphere.metadata.persist.MetaDataPersistService;
 import 
org.apache.shardingsphere.mode.repository.cluster.zookeeper.ZookeeperRepository;
 import org.apache.shardingsphere.proxy.backend.context.ProxyContext;
-import org.apache.shardingsphere.proxy.backend.session.ConnectionSession;
 import 
org.apache.shardingsphere.readwritesplitting.distsql.statement.ShowStatusFromReadwriteSplittingRulesStatement;
 import 
org.apache.shardingsphere.sql.parser.sql.common.segment.generic.DatabaseSegment;
 import 
org.apache.shardingsphere.sql.parser.sql.common.value.identifier.IdentifierValue;
@@ -59,8 +58,6 @@ import static org.mockito.Mockito.when;
 @StaticMockSettings(ProxyContext.class)
 class ShowStatusFromReadwriteSplittingRulesExecutorTest {
     
-    private final ConnectionSession connectionSession = 
mock(ConnectionSession.class, RETURNS_DEEP_STUBS);
-    
     @Test
     void assertGetColumns() {
         ShowStatusFromReadwriteSplittingRulesExecutor executor = new 
ShowStatusFromReadwriteSplittingRulesExecutor();
@@ -73,13 +70,12 @@ class ShowStatusFromReadwriteSplittingRulesExecutorTest {
     
     @Test
     void assertGetRowsWithEmptyResult() {
-        when(connectionSession.getDatabaseName()).thenReturn("readwrite_db");
         ShowStatusFromReadwriteSplittingRulesExecutor executor = new 
ShowStatusFromReadwriteSplittingRulesExecutor();
         ContextManager contextManager = mockContextManager();
         
when(ProxyContext.getInstance().getContextManager()).thenReturn(contextManager);
-        
when(ProxyContext.getInstance().databaseExists("readwrite_db")).thenReturn(true);
-        Collection<LocalDataQueryResultRow> actual = 
executor.getRows(mockMetaData(), connectionSession,
-                new ShowStatusFromReadwriteSplittingRulesStatement(new 
DatabaseSegment(1, 1, new IdentifierValue("readwrite_db")), null));
+        
executor.setCurrentDatabase(mockMetaData().getDatabase("readwrite_db"));
+        Collection<LocalDataQueryResultRow> actual = executor.getRows(
+                new ShowStatusFromReadwriteSplittingRulesStatement(new 
DatabaseSegment(1, 1, new IdentifierValue("readwrite_db")), null), 
mockMetaData());
         assertTrue(actual.isEmpty());
     }
     
diff --git 
a/proxy/backend/core/src/test/java/org/apache/shardingsphere/proxy/backend/handler/distsql/ral/queryable/ShowTableMetaDataExecutorTest.java
 
b/proxy/backend/core/src/test/java/org/apache/shardingsphere/proxy/backend/handler/distsql/ral/queryable/ShowTableMetaDataExecutorTest.java
index 1638f08f726..7fd05b55890 100644
--- 
a/proxy/backend/core/src/test/java/org/apache/shardingsphere/proxy/backend/handler/distsql/ral/queryable/ShowTableMetaDataExecutorTest.java
+++ 
b/proxy/backend/core/src/test/java/org/apache/shardingsphere/proxy/backend/handler/distsql/ral/queryable/ShowTableMetaDataExecutorTest.java
@@ -20,6 +20,7 @@ package 
org.apache.shardingsphere.proxy.backend.handler.distsql.ral.queryable;
 import 
org.apache.shardingsphere.distsql.statement.ral.queryable.ShowTableMetaDataStatement;
 import org.apache.shardingsphere.infra.database.core.type.DatabaseType;
 import 
org.apache.shardingsphere.infra.merge.result.impl.local.LocalDataQueryResultRow;
+import org.apache.shardingsphere.infra.metadata.ShardingSphereMetaData;
 import 
org.apache.shardingsphere.infra.metadata.database.ShardingSphereDatabase;
 import 
org.apache.shardingsphere.infra.metadata.database.schema.model.ShardingSphereColumn;
 import 
org.apache.shardingsphere.infra.metadata.database.schema.model.ShardingSphereIndex;
@@ -66,7 +67,9 @@ class ShowTableMetaDataExecutorTest {
     @Test
     void assertExecute() {
         ShardingSphereDatabase database = mockDatabase();
-        Collection<LocalDataQueryResultRow> actual = new 
ShowTableMetaDataExecutor().getRows(database, createSqlStatement());
+        ShowTableMetaDataExecutor executor = new ShowTableMetaDataExecutor();
+        executor.setCurrentDatabase(database);
+        Collection<LocalDataQueryResultRow> actual = 
executor.getRows(createSqlStatement(), mock(ShardingSphereMetaData.class));
         assertThat(actual.size(), is(2));
         Iterator<LocalDataQueryResultRow> iterator = actual.iterator();
         LocalDataQueryResultRow row = iterator.next();

Reply via email to