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

linghengqian 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 87e63ab8279 Refactor DistSQLExecutorAwareSetter and DistSQLExecutor 
(#30303)
87e63ab8279 is described below

commit 87e63ab82796a463d06d4b9fe43631d1128d370d
Author: Raigor <[email protected]>
AuthorDate: Mon Feb 26 23:56:31 2024 +0800

    Refactor DistSQLExecutorAwareSetter and DistSQLExecutor (#30303)
---
 .../handler/query/ShowBroadcastTableRuleExecutorTest.java        | 7 +++++--
 .../distsql/handler/query/ShowEncryptRuleExecutorTest.java       | 7 +++++--
 .../mask/distsql/handler/query/ShowMaskRuleExecutorTest.java     | 7 +++++--
 .../handler/query/ShowReadwriteSplittingRuleExecutorTest.java    | 7 +++++--
 .../distsql/query/ShowDefaultShadowAlgorithmExecutorTest.java    | 7 +++++--
 .../shadow/distsql/query/ShowShadowAlgorithmsExecutorTest.java   | 7 +++++--
 .../shadow/distsql/query/ShowShadowRuleExecutorTest.java         | 7 +++++--
 .../shadow/distsql/query/ShowShadowTableRulesExecutorTest.java   | 7 +++++--
 .../distsql/query/ShowDefaultShardingStrategyExecutorTest.java   | 7 +++++--
 .../distsql/query/ShowShardingAlgorithmExecutorTest.java         | 7 +++++--
 .../sharding/distsql/query/ShowShardingAuditorsExecutorTest.java | 7 +++++--
 .../distsql/query/ShowShardingKeyGeneratorExecutorTest.java      | 7 +++++--
 .../distsql/query/ShowShardingTableNodesExecutorTest.java        | 7 +++++--
 .../query/ShowShardingTableReferenceRuleExecutorTest.java        | 7 +++++--
 .../distsql/query/ShowShardingTableRuleExecutorTest.java         | 7 +++++--
 .../query/ShowShardingTableRulesUsedAlgorithmExecutorTest.java   | 7 +++++--
 .../query/ShowShardingTableRulesUsedAuditorExecutorTest.java     | 7 +++++--
 .../ShowShardingTableRulesUsedKeyGeneratorExecutorTest.java      | 7 +++++--
 .../distsql/query/ShowUnusedShardingAlgorithmsExecutorTest.java  | 7 +++++--
 .../distsql/query/ShowUnusedShardingAuditorsExecutorTest.java    | 7 +++++--
 .../query/ShowUnusedShardingKeyGeneratorExecutorTest.java        | 7 +++++--
 .../distsql/handler/aware/DistSQLExecutorAwareSetter.java        | 9 ++++++++-
 .../distsql/handler/engine/query/DistSQLQueryExecuteEngine.java  | 2 +-
 .../handler/engine/update/DistSQLUpdateExecuteEngine.java        | 2 +-
 .../query/ShowDefaultSingleTableStorageUnitExecutorTest.java     | 7 +++++--
 .../distsql/handler/query/ShowSingleTableExecutorTest.java       | 7 +++++--
 26 files changed, 125 insertions(+), 49 deletions(-)

diff --git 
a/features/broadcast/distsql/handler/src/test/java/org/apache/shardingsphere/broadcast/distsql/handler/query/ShowBroadcastTableRuleExecutorTest.java
 
b/features/broadcast/distsql/handler/src/test/java/org/apache/shardingsphere/broadcast/distsql/handler/query/ShowBroadcastTableRuleExecutorTest.java
index 9405fc633c6..b09c3f0237c 100644
--- 
a/features/broadcast/distsql/handler/src/test/java/org/apache/shardingsphere/broadcast/distsql/handler/query/ShowBroadcastTableRuleExecutorTest.java
+++ 
b/features/broadcast/distsql/handler/src/test/java/org/apache/shardingsphere/broadcast/distsql/handler/query/ShowBroadcastTableRuleExecutorTest.java
@@ -23,6 +23,7 @@ import org.apache.shardingsphere.broadcast.rule.BroadcastRule;
 import 
org.apache.shardingsphere.distsql.handler.engine.DistSQLConnectionContext;
 import 
org.apache.shardingsphere.distsql.handler.engine.query.DistSQLQueryExecuteEngine;
 import 
org.apache.shardingsphere.infra.merge.result.impl.local.LocalDataQueryResultRow;
+import 
org.apache.shardingsphere.infra.metadata.database.ShardingSphereDatabase;
 import org.apache.shardingsphere.mode.manager.ContextManager;
 import org.junit.jupiter.api.BeforeEach;
 import org.junit.jupiter.api.Test;
@@ -45,13 +46,15 @@ class ShowBroadcastTableRuleExecutorTest {
     
     @BeforeEach
     void setUp() {
-        engine = new 
DistSQLQueryExecuteEngine(mock(ShowBroadcastTableRulesStatement.class), null, 
mockContextManager(), mock(DistSQLConnectionContext.class));
+        engine = new 
DistSQLQueryExecuteEngine(mock(ShowBroadcastTableRulesStatement.class), 
"foo_db", mockContextManager(), mock(DistSQLConnectionContext.class));
     }
     
     private ContextManager mockContextManager() {
         ContextManager result = mock(ContextManager.class, RETURNS_DEEP_STUBS);
+        ShardingSphereDatabase database = mock(ShardingSphereDatabase.class, 
RETURNS_DEEP_STUBS);
+        when(result.getDatabase("foo_db")).thenReturn(database);
         BroadcastRule rule = mockBroadcastRule();
-        
when(result.getMetaDataContexts().getMetaData().getGlobalRuleMetaData().findSingleRule(BroadcastRule.class)).thenReturn(Optional.of(rule));
+        
when(database.getRuleMetaData().findSingleRule(BroadcastRule.class)).thenReturn(Optional.of(rule));
         return result;
     }
     
diff --git 
a/features/encrypt/distsql/handler/src/test/java/org/apache/shardingsphere/encrypt/distsql/handler/query/ShowEncryptRuleExecutorTest.java
 
b/features/encrypt/distsql/handler/src/test/java/org/apache/shardingsphere/encrypt/distsql/handler/query/ShowEncryptRuleExecutorTest.java
index 3127d62cd54..f7dd35a6791 100644
--- 
a/features/encrypt/distsql/handler/src/test/java/org/apache/shardingsphere/encrypt/distsql/handler/query/ShowEncryptRuleExecutorTest.java
+++ 
b/features/encrypt/distsql/handler/src/test/java/org/apache/shardingsphere/encrypt/distsql/handler/query/ShowEncryptRuleExecutorTest.java
@@ -27,6 +27,7 @@ import 
org.apache.shardingsphere.encrypt.distsql.statement.ShowEncryptRulesState
 import org.apache.shardingsphere.encrypt.rule.EncryptRule;
 import 
org.apache.shardingsphere.infra.algorithm.core.config.AlgorithmConfiguration;
 import 
org.apache.shardingsphere.infra.merge.result.impl.local.LocalDataQueryResultRow;
+import 
org.apache.shardingsphere.infra.metadata.database.ShardingSphereDatabase;
 import org.apache.shardingsphere.mode.manager.ContextManager;
 import org.junit.jupiter.api.BeforeEach;
 import org.junit.jupiter.api.Test;
@@ -50,14 +51,16 @@ class ShowEncryptRuleExecutorTest {
     
     @BeforeEach
     void setUp() {
-        engine = new 
DistSQLQueryExecuteEngine(mock(ShowEncryptRulesStatement.class), null, 
mockContextManager(), mock(DistSQLConnectionContext.class));
+        engine = new 
DistSQLQueryExecuteEngine(mock(ShowEncryptRulesStatement.class), "foo_db", 
mockContextManager(), mock(DistSQLConnectionContext.class));
     }
     
     private ContextManager mockContextManager() {
         ContextManager result = mock(ContextManager.class, RETURNS_DEEP_STUBS);
+        ShardingSphereDatabase database = mock(ShardingSphereDatabase.class, 
RETURNS_DEEP_STUBS);
+        when(result.getDatabase("foo_db")).thenReturn(database);
         EncryptRule rule = mock(EncryptRule.class);
         when(rule.getConfiguration()).thenReturn(getRuleConfiguration());
-        
when(result.getMetaDataContexts().getMetaData().getGlobalRuleMetaData().findSingleRule(EncryptRule.class)).thenReturn(Optional.of(rule));
+        
when(database.getRuleMetaData().findSingleRule(EncryptRule.class)).thenReturn(Optional.of(rule));
         return result;
     }
     
diff --git 
a/features/mask/distsql/handler/src/test/java/org/apache/shardingsphere/mask/distsql/handler/query/ShowMaskRuleExecutorTest.java
 
b/features/mask/distsql/handler/src/test/java/org/apache/shardingsphere/mask/distsql/handler/query/ShowMaskRuleExecutorTest.java
index b1e043fdfc1..ec75d846a92 100644
--- 
a/features/mask/distsql/handler/src/test/java/org/apache/shardingsphere/mask/distsql/handler/query/ShowMaskRuleExecutorTest.java
+++ 
b/features/mask/distsql/handler/src/test/java/org/apache/shardingsphere/mask/distsql/handler/query/ShowMaskRuleExecutorTest.java
@@ -21,6 +21,7 @@ import 
org.apache.shardingsphere.distsql.handler.engine.DistSQLConnectionContext
 import 
org.apache.shardingsphere.distsql.handler.engine.query.DistSQLQueryExecuteEngine;
 import 
org.apache.shardingsphere.infra.algorithm.core.config.AlgorithmConfiguration;
 import 
org.apache.shardingsphere.infra.merge.result.impl.local.LocalDataQueryResultRow;
+import 
org.apache.shardingsphere.infra.metadata.database.ShardingSphereDatabase;
 import org.apache.shardingsphere.mask.api.config.MaskRuleConfiguration;
 import 
org.apache.shardingsphere.mask.api.config.rule.MaskColumnRuleConfiguration;
 import 
org.apache.shardingsphere.mask.api.config.rule.MaskTableRuleConfiguration;
@@ -49,14 +50,16 @@ class ShowMaskRuleExecutorTest {
     
     @BeforeEach
     void setUp() {
-        engine = new 
DistSQLQueryExecuteEngine(mock(ShowMaskRulesStatement.class), null, 
mockContextManager(), mock(DistSQLConnectionContext.class));
+        engine = new 
DistSQLQueryExecuteEngine(mock(ShowMaskRulesStatement.class), "foo_db", 
mockContextManager(), mock(DistSQLConnectionContext.class));
     }
     
     private ContextManager mockContextManager() {
         ContextManager result = mock(ContextManager.class, RETURNS_DEEP_STUBS);
+        ShardingSphereDatabase database = mock(ShardingSphereDatabase.class, 
RETURNS_DEEP_STUBS);
+        when(result.getDatabase("foo_db")).thenReturn(database);
         MaskRule rule = mock(MaskRule.class);
         when(rule.getConfiguration()).thenReturn(getRuleConfiguration());
-        
when(result.getMetaDataContexts().getMetaData().getGlobalRuleMetaData().findSingleRule(MaskRule.class)).thenReturn(Optional.of(rule));
+        
when(database.getRuleMetaData().findSingleRule(MaskRule.class)).thenReturn(Optional.of(rule));
         return result;
     }
     
diff --git 
a/features/readwrite-splitting/distsql/handler/src/test/java/org/apache/shardingsphere/readwritesplitting/distsql/handler/query/ShowReadwriteSplittingRuleExecutorTest.java
 
b/features/readwrite-splitting/distsql/handler/src/test/java/org/apache/shardingsphere/readwritesplitting/distsql/handler/query/ShowReadwriteSplittingRuleExecutorTest.java
index c00fc9401ca..371e4df280e 100644
--- 
a/features/readwrite-splitting/distsql/handler/src/test/java/org/apache/shardingsphere/readwritesplitting/distsql/handler/query/ShowReadwriteSplittingRuleExecutorTest.java
+++ 
b/features/readwrite-splitting/distsql/handler/src/test/java/org/apache/shardingsphere/readwritesplitting/distsql/handler/query/ShowReadwriteSplittingRuleExecutorTest.java
@@ -21,6 +21,7 @@ import 
org.apache.shardingsphere.distsql.handler.engine.DistSQLConnectionContext
 import 
org.apache.shardingsphere.distsql.handler.engine.query.DistSQLQueryExecuteEngine;
 import 
org.apache.shardingsphere.infra.algorithm.core.config.AlgorithmConfiguration;
 import 
org.apache.shardingsphere.infra.merge.result.impl.local.LocalDataQueryResultRow;
+import 
org.apache.shardingsphere.infra.metadata.database.ShardingSphereDatabase;
 import 
org.apache.shardingsphere.infra.rule.identifier.type.exportable.constant.ExportableConstants;
 import org.apache.shardingsphere.mode.manager.ContextManager;
 import 
org.apache.shardingsphere.readwritesplitting.api.ReadwriteSplittingRuleConfiguration;
@@ -51,15 +52,17 @@ class ShowReadwriteSplittingRuleExecutorTest {
     private DistSQLQueryExecuteEngine engine;
     
     private DistSQLQueryExecuteEngine setUp(final 
ShowReadwriteSplittingRulesStatement statement, final 
ReadwriteSplittingRuleConfiguration configuration) {
-        return new DistSQLQueryExecuteEngine(statement, null, 
mockContextManager(configuration), mock(DistSQLConnectionContext.class));
+        return new DistSQLQueryExecuteEngine(statement, "foo_db", 
mockContextManager(configuration), mock(DistSQLConnectionContext.class));
     }
     
     private ContextManager mockContextManager(final 
ReadwriteSplittingRuleConfiguration configuration) {
         ContextManager result = mock(ContextManager.class, RETURNS_DEEP_STUBS);
+        ShardingSphereDatabase database = mock(ShardingSphereDatabase.class, 
RETURNS_DEEP_STUBS);
+        when(result.getDatabase("foo_db")).thenReturn(database);
         ReadwriteSplittingRule rule = mock(ReadwriteSplittingRule.class);
         when(rule.getConfiguration()).thenReturn(configuration);
         when(rule.getExportData()).thenReturn(createExportedData());
-        
when(result.getMetaDataContexts().getMetaData().getGlobalRuleMetaData().findSingleRule(ReadwriteSplittingRule.class)).thenReturn(Optional.of(rule));
+        
when(database.getRuleMetaData().findSingleRule(ReadwriteSplittingRule.class)).thenReturn(Optional.of(rule));
         return result;
     }
     
diff --git 
a/features/shadow/distsql/handler/src/test/java/org/apache/shardingsphere/shadow/distsql/query/ShowDefaultShadowAlgorithmExecutorTest.java
 
b/features/shadow/distsql/handler/src/test/java/org/apache/shardingsphere/shadow/distsql/query/ShowDefaultShadowAlgorithmExecutorTest.java
index ddb0cc1c539..94054d3a9f4 100644
--- 
a/features/shadow/distsql/handler/src/test/java/org/apache/shardingsphere/shadow/distsql/query/ShowDefaultShadowAlgorithmExecutorTest.java
+++ 
b/features/shadow/distsql/handler/src/test/java/org/apache/shardingsphere/shadow/distsql/query/ShowDefaultShadowAlgorithmExecutorTest.java
@@ -21,6 +21,7 @@ import 
org.apache.shardingsphere.distsql.handler.engine.DistSQLConnectionContext
 import 
org.apache.shardingsphere.distsql.handler.engine.query.DistSQLQueryExecuteEngine;
 import 
org.apache.shardingsphere.infra.algorithm.core.config.AlgorithmConfiguration;
 import 
org.apache.shardingsphere.infra.merge.result.impl.local.LocalDataQueryResultRow;
+import 
org.apache.shardingsphere.infra.metadata.database.ShardingSphereDatabase;
 import org.apache.shardingsphere.mode.manager.ContextManager;
 import org.apache.shardingsphere.shadow.api.config.ShadowRuleConfiguration;
 import 
org.apache.shardingsphere.shadow.api.config.table.ShadowTableConfiguration;
@@ -49,14 +50,16 @@ class ShowDefaultShadowAlgorithmExecutorTest {
     
     @BeforeEach
     void setUp() {
-        engine = new 
DistSQLQueryExecuteEngine(mock(ShowDefaultShadowAlgorithmStatement.class), 
null, mockContextManager(), mock(DistSQLConnectionContext.class));
+        engine = new 
DistSQLQueryExecuteEngine(mock(ShowDefaultShadowAlgorithmStatement.class), 
"foo_db", mockContextManager(), mock(DistSQLConnectionContext.class));
     }
     
     private ContextManager mockContextManager() {
         ContextManager result = mock(ContextManager.class, RETURNS_DEEP_STUBS);
+        ShardingSphereDatabase database = mock(ShardingSphereDatabase.class, 
RETURNS_DEEP_STUBS);
+        when(result.getDatabase("foo_db")).thenReturn(database);
         ShadowRule rule = mock(ShadowRule.class);
         when(rule.getConfiguration()).thenReturn(createRuleConfiguration());
-        
when(result.getMetaDataContexts().getMetaData().getGlobalRuleMetaData().findSingleRule(ShadowRule.class)).thenReturn(Optional.of(rule));
+        
when(database.getRuleMetaData().findSingleRule(ShadowRule.class)).thenReturn(Optional.of(rule));
         return result;
     }
     
diff --git 
a/features/shadow/distsql/handler/src/test/java/org/apache/shardingsphere/shadow/distsql/query/ShowShadowAlgorithmsExecutorTest.java
 
b/features/shadow/distsql/handler/src/test/java/org/apache/shardingsphere/shadow/distsql/query/ShowShadowAlgorithmsExecutorTest.java
index 2c67c5c64b4..75e78be563f 100644
--- 
a/features/shadow/distsql/handler/src/test/java/org/apache/shardingsphere/shadow/distsql/query/ShowShadowAlgorithmsExecutorTest.java
+++ 
b/features/shadow/distsql/handler/src/test/java/org/apache/shardingsphere/shadow/distsql/query/ShowShadowAlgorithmsExecutorTest.java
@@ -21,6 +21,7 @@ import 
org.apache.shardingsphere.distsql.handler.engine.DistSQLConnectionContext
 import 
org.apache.shardingsphere.distsql.handler.engine.query.DistSQLQueryExecuteEngine;
 import 
org.apache.shardingsphere.infra.algorithm.core.config.AlgorithmConfiguration;
 import 
org.apache.shardingsphere.infra.merge.result.impl.local.LocalDataQueryResultRow;
+import 
org.apache.shardingsphere.infra.metadata.database.ShardingSphereDatabase;
 import org.apache.shardingsphere.mode.manager.ContextManager;
 import org.apache.shardingsphere.shadow.api.config.ShadowRuleConfiguration;
 import 
org.apache.shardingsphere.shadow.api.config.table.ShadowTableConfiguration;
@@ -49,14 +50,16 @@ class ShowShadowAlgorithmsExecutorTest {
     
     @BeforeEach
     void setUp() {
-        engine = new 
DistSQLQueryExecuteEngine(mock(ShowShadowAlgorithmsStatement.class), null, 
mockContextManager(), mock(DistSQLConnectionContext.class));
+        engine = new 
DistSQLQueryExecuteEngine(mock(ShowShadowAlgorithmsStatement.class), "foo_db", 
mockContextManager(), mock(DistSQLConnectionContext.class));
     }
     
     private ContextManager mockContextManager() {
         ContextManager result = mock(ContextManager.class, RETURNS_DEEP_STUBS);
+        ShardingSphereDatabase database = mock(ShardingSphereDatabase.class, 
RETURNS_DEEP_STUBS);
+        when(result.getDatabase("foo_db")).thenReturn(database);
         ShadowRule rule = mock(ShadowRule.class);
         when(rule.getConfiguration()).thenReturn(createRuleConfiguration());
-        
when(result.getMetaDataContexts().getMetaData().getGlobalRuleMetaData().findSingleRule(ShadowRule.class)).thenReturn(Optional.of(rule));
+        
when(database.getRuleMetaData().findSingleRule(ShadowRule.class)).thenReturn(Optional.of(rule));
         return result;
     }
     
diff --git 
a/features/shadow/distsql/handler/src/test/java/org/apache/shardingsphere/shadow/distsql/query/ShowShadowRuleExecutorTest.java
 
b/features/shadow/distsql/handler/src/test/java/org/apache/shardingsphere/shadow/distsql/query/ShowShadowRuleExecutorTest.java
index ba49f454389..5940f058e21 100644
--- 
a/features/shadow/distsql/handler/src/test/java/org/apache/shardingsphere/shadow/distsql/query/ShowShadowRuleExecutorTest.java
+++ 
b/features/shadow/distsql/handler/src/test/java/org/apache/shardingsphere/shadow/distsql/query/ShowShadowRuleExecutorTest.java
@@ -21,6 +21,7 @@ import 
org.apache.shardingsphere.distsql.handler.engine.DistSQLConnectionContext
 import 
org.apache.shardingsphere.distsql.handler.engine.query.DistSQLQueryExecuteEngine;
 import 
org.apache.shardingsphere.infra.algorithm.core.config.AlgorithmConfiguration;
 import 
org.apache.shardingsphere.infra.merge.result.impl.local.LocalDataQueryResultRow;
+import 
org.apache.shardingsphere.infra.metadata.database.ShardingSphereDatabase;
 import org.apache.shardingsphere.mode.manager.ContextManager;
 import org.apache.shardingsphere.shadow.api.config.ShadowRuleConfiguration;
 import 
org.apache.shardingsphere.shadow.api.config.datasource.ShadowDataSourceConfiguration;
@@ -49,14 +50,16 @@ class ShowShadowRuleExecutorTest {
     
     @BeforeEach
     void setUp() {
-        engine = new 
DistSQLQueryExecuteEngine(mock(ShowShadowRulesStatement.class), null, 
mockContextManager(), mock(DistSQLConnectionContext.class));
+        engine = new 
DistSQLQueryExecuteEngine(mock(ShowShadowRulesStatement.class), "foo_db", 
mockContextManager(), mock(DistSQLConnectionContext.class));
     }
     
     private ContextManager mockContextManager() {
         ContextManager result = mock(ContextManager.class, RETURNS_DEEP_STUBS);
+        ShardingSphereDatabase database = mock(ShardingSphereDatabase.class, 
RETURNS_DEEP_STUBS);
+        when(result.getDatabase("foo_db")).thenReturn(database);
         ShadowRule rule = mock(ShadowRule.class);
         when(rule.getConfiguration()).thenReturn(createRuleConfiguration());
-        
when(result.getMetaDataContexts().getMetaData().getGlobalRuleMetaData().findSingleRule(ShadowRule.class)).thenReturn(Optional.of(rule));
+        
when(database.getRuleMetaData().findSingleRule(ShadowRule.class)).thenReturn(Optional.of(rule));
         return result;
     }
     
diff --git 
a/features/shadow/distsql/handler/src/test/java/org/apache/shardingsphere/shadow/distsql/query/ShowShadowTableRulesExecutorTest.java
 
b/features/shadow/distsql/handler/src/test/java/org/apache/shardingsphere/shadow/distsql/query/ShowShadowTableRulesExecutorTest.java
index 81a2b87fec9..4f37ac6ec4b 100644
--- 
a/features/shadow/distsql/handler/src/test/java/org/apache/shardingsphere/shadow/distsql/query/ShowShadowTableRulesExecutorTest.java
+++ 
b/features/shadow/distsql/handler/src/test/java/org/apache/shardingsphere/shadow/distsql/query/ShowShadowTableRulesExecutorTest.java
@@ -21,6 +21,7 @@ import 
org.apache.shardingsphere.distsql.handler.engine.DistSQLConnectionContext
 import 
org.apache.shardingsphere.distsql.handler.engine.query.DistSQLQueryExecuteEngine;
 import 
org.apache.shardingsphere.infra.algorithm.core.config.AlgorithmConfiguration;
 import 
org.apache.shardingsphere.infra.merge.result.impl.local.LocalDataQueryResultRow;
+import 
org.apache.shardingsphere.infra.metadata.database.ShardingSphereDatabase;
 import org.apache.shardingsphere.mode.manager.ContextManager;
 import org.apache.shardingsphere.shadow.api.config.ShadowRuleConfiguration;
 import 
org.apache.shardingsphere.shadow.api.config.table.ShadowTableConfiguration;
@@ -50,14 +51,16 @@ class ShowShadowTableRulesExecutorTest {
     
     @BeforeEach
     void setUp() {
-        engine = new 
DistSQLQueryExecuteEngine(mock(ShowShadowTableRulesStatement.class), null, 
mockContextManager(), mock(DistSQLConnectionContext.class));
+        engine = new 
DistSQLQueryExecuteEngine(mock(ShowShadowTableRulesStatement.class), "foo_db", 
mockContextManager(), mock(DistSQLConnectionContext.class));
     }
     
     private ContextManager mockContextManager() {
         ContextManager result = mock(ContextManager.class, RETURNS_DEEP_STUBS);
+        ShardingSphereDatabase database = mock(ShardingSphereDatabase.class, 
RETURNS_DEEP_STUBS);
+        when(result.getDatabase("foo_db")).thenReturn(database);
         ShadowRule rule = mock(ShadowRule.class);
         when(rule.getConfiguration()).thenReturn(createRuleConfiguration());
-        
when(result.getMetaDataContexts().getMetaData().getGlobalRuleMetaData().findSingleRule(ShadowRule.class)).thenReturn(Optional.of(rule));
+        
when(database.getRuleMetaData().findSingleRule(ShadowRule.class)).thenReturn(Optional.of(rule));
         return result;
     }
     
diff --git 
a/features/sharding/distsql/handler/src/test/java/org/apache/shardingsphere/sharding/distsql/query/ShowDefaultShardingStrategyExecutorTest.java
 
b/features/sharding/distsql/handler/src/test/java/org/apache/shardingsphere/sharding/distsql/query/ShowDefaultShardingStrategyExecutorTest.java
index b6d584a308a..5dd7ccfb2b1 100644
--- 
a/features/sharding/distsql/handler/src/test/java/org/apache/shardingsphere/sharding/distsql/query/ShowDefaultShardingStrategyExecutorTest.java
+++ 
b/features/sharding/distsql/handler/src/test/java/org/apache/shardingsphere/sharding/distsql/query/ShowDefaultShardingStrategyExecutorTest.java
@@ -21,6 +21,7 @@ import 
org.apache.shardingsphere.distsql.handler.engine.DistSQLConnectionContext
 import 
org.apache.shardingsphere.distsql.handler.engine.query.DistSQLQueryExecuteEngine;
 import 
org.apache.shardingsphere.infra.algorithm.core.config.AlgorithmConfiguration;
 import 
org.apache.shardingsphere.infra.merge.result.impl.local.LocalDataQueryResultRow;
+import 
org.apache.shardingsphere.infra.metadata.database.ShardingSphereDatabase;
 import org.apache.shardingsphere.mode.manager.ContextManager;
 import org.apache.shardingsphere.sharding.api.config.ShardingRuleConfiguration;
 import 
org.apache.shardingsphere.sharding.api.config.strategy.sharding.ComplexShardingStrategyConfiguration;
@@ -49,14 +50,16 @@ class ShowDefaultShardingStrategyExecutorTest {
     private DistSQLQueryExecuteEngine engine;
     
     DistSQLQueryExecuteEngine setUp(final ShardingRuleConfiguration 
configuration) {
-        return new 
DistSQLQueryExecuteEngine(mock(ShowDefaultShardingStrategyStatement.class), 
null, mockContextManager(configuration), mock(DistSQLConnectionContext.class));
+        return new 
DistSQLQueryExecuteEngine(mock(ShowDefaultShardingStrategyStatement.class), 
"foo_db", mockContextManager(configuration), 
mock(DistSQLConnectionContext.class));
     }
     
     private ContextManager mockContextManager(final ShardingRuleConfiguration 
configuration) {
         ContextManager result = mock(ContextManager.class, RETURNS_DEEP_STUBS);
+        ShardingSphereDatabase database = mock(ShardingSphereDatabase.class, 
RETURNS_DEEP_STUBS);
+        when(result.getDatabase("foo_db")).thenReturn(database);
         ShardingRule rule = mock(ShardingRule.class);
         when(rule.getConfiguration()).thenReturn(configuration);
-        
when(result.getMetaDataContexts().getMetaData().getGlobalRuleMetaData().findSingleRule(ShardingRule.class)).thenReturn(Optional.of(rule));
+        
when(database.getRuleMetaData().findSingleRule(ShardingRule.class)).thenReturn(Optional.of(rule));
         return result;
     }
     
diff --git 
a/features/sharding/distsql/handler/src/test/java/org/apache/shardingsphere/sharding/distsql/query/ShowShardingAlgorithmExecutorTest.java
 
b/features/sharding/distsql/handler/src/test/java/org/apache/shardingsphere/sharding/distsql/query/ShowShardingAlgorithmExecutorTest.java
index 24d5ca7316e..41d6c18d989 100644
--- 
a/features/sharding/distsql/handler/src/test/java/org/apache/shardingsphere/sharding/distsql/query/ShowShardingAlgorithmExecutorTest.java
+++ 
b/features/sharding/distsql/handler/src/test/java/org/apache/shardingsphere/sharding/distsql/query/ShowShardingAlgorithmExecutorTest.java
@@ -21,6 +21,7 @@ import 
org.apache.shardingsphere.distsql.handler.engine.DistSQLConnectionContext
 import 
org.apache.shardingsphere.distsql.handler.engine.query.DistSQLQueryExecuteEngine;
 import 
org.apache.shardingsphere.infra.algorithm.core.config.AlgorithmConfiguration;
 import 
org.apache.shardingsphere.infra.merge.result.impl.local.LocalDataQueryResultRow;
+import 
org.apache.shardingsphere.infra.metadata.database.ShardingSphereDatabase;
 import org.apache.shardingsphere.mode.manager.ContextManager;
 import org.apache.shardingsphere.sharding.api.config.ShardingRuleConfiguration;
 import 
org.apache.shardingsphere.sharding.distsql.statement.ShowShardingAlgorithmsStatement;
@@ -47,14 +48,16 @@ class ShowShardingAlgorithmExecutorTest {
     
     @BeforeEach
     void setUp() {
-        engine = new 
DistSQLQueryExecuteEngine(mock(ShowShardingAlgorithmsStatement.class), null, 
mockContextManager(), mock(DistSQLConnectionContext.class));
+        engine = new 
DistSQLQueryExecuteEngine(mock(ShowShardingAlgorithmsStatement.class), 
"foo_db", mockContextManager(), mock(DistSQLConnectionContext.class));
     }
     
     private ContextManager mockContextManager() {
         ContextManager result = mock(ContextManager.class, RETURNS_DEEP_STUBS);
+        ShardingSphereDatabase database = mock(ShardingSphereDatabase.class, 
RETURNS_DEEP_STUBS);
+        when(result.getDatabase("foo_db")).thenReturn(database);
         ShardingRule rule = mock(ShardingRule.class);
         when(rule.getConfiguration()).thenReturn(createRuleConfiguration());
-        
when(result.getMetaDataContexts().getMetaData().getGlobalRuleMetaData().findSingleRule(ShardingRule.class)).thenReturn(Optional.of(rule));
+        
when(database.getRuleMetaData().findSingleRule(ShardingRule.class)).thenReturn(Optional.of(rule));
         return result;
     }
     
diff --git 
a/features/sharding/distsql/handler/src/test/java/org/apache/shardingsphere/sharding/distsql/query/ShowShardingAuditorsExecutorTest.java
 
b/features/sharding/distsql/handler/src/test/java/org/apache/shardingsphere/sharding/distsql/query/ShowShardingAuditorsExecutorTest.java
index 6c2251055e7..75dbfd99af6 100644
--- 
a/features/sharding/distsql/handler/src/test/java/org/apache/shardingsphere/sharding/distsql/query/ShowShardingAuditorsExecutorTest.java
+++ 
b/features/sharding/distsql/handler/src/test/java/org/apache/shardingsphere/sharding/distsql/query/ShowShardingAuditorsExecutorTest.java
@@ -21,6 +21,7 @@ import 
org.apache.shardingsphere.distsql.handler.engine.DistSQLConnectionContext
 import 
org.apache.shardingsphere.distsql.handler.engine.query.DistSQLQueryExecuteEngine;
 import 
org.apache.shardingsphere.infra.algorithm.core.config.AlgorithmConfiguration;
 import 
org.apache.shardingsphere.infra.merge.result.impl.local.LocalDataQueryResultRow;
+import 
org.apache.shardingsphere.infra.metadata.database.ShardingSphereDatabase;
 import org.apache.shardingsphere.mode.manager.ContextManager;
 import org.apache.shardingsphere.sharding.api.config.ShardingRuleConfiguration;
 import 
org.apache.shardingsphere.sharding.distsql.statement.ShowShardingAuditorsStatement;
@@ -47,14 +48,16 @@ class ShowShardingAuditorsExecutorTest {
     
     @BeforeEach
     void setUp() {
-        engine = new 
DistSQLQueryExecuteEngine(mock(ShowShardingAuditorsStatement.class), null, 
mockContextManager(), mock(DistSQLConnectionContext.class));
+        engine = new 
DistSQLQueryExecuteEngine(mock(ShowShardingAuditorsStatement.class), "foo_db", 
mockContextManager(), mock(DistSQLConnectionContext.class));
     }
     
     private ContextManager mockContextManager() {
         ContextManager result = mock(ContextManager.class, RETURNS_DEEP_STUBS);
+        ShardingSphereDatabase database = mock(ShardingSphereDatabase.class, 
RETURNS_DEEP_STUBS);
+        when(result.getDatabase("foo_db")).thenReturn(database);
         ShardingRule rule = mock(ShardingRule.class);
         when(rule.getConfiguration()).thenReturn(createRuleConfiguration());
-        
when(result.getMetaDataContexts().getMetaData().getGlobalRuleMetaData().findSingleRule(ShardingRule.class)).thenReturn(Optional.of(rule));
+        
when(database.getRuleMetaData().findSingleRule(ShardingRule.class)).thenReturn(Optional.of(rule));
         return result;
     }
     
diff --git 
a/features/sharding/distsql/handler/src/test/java/org/apache/shardingsphere/sharding/distsql/query/ShowShardingKeyGeneratorExecutorTest.java
 
b/features/sharding/distsql/handler/src/test/java/org/apache/shardingsphere/sharding/distsql/query/ShowShardingKeyGeneratorExecutorTest.java
index 0f6539e0f98..1884f794ce0 100644
--- 
a/features/sharding/distsql/handler/src/test/java/org/apache/shardingsphere/sharding/distsql/query/ShowShardingKeyGeneratorExecutorTest.java
+++ 
b/features/sharding/distsql/handler/src/test/java/org/apache/shardingsphere/sharding/distsql/query/ShowShardingKeyGeneratorExecutorTest.java
@@ -21,6 +21,7 @@ import 
org.apache.shardingsphere.distsql.handler.engine.DistSQLConnectionContext
 import 
org.apache.shardingsphere.distsql.handler.engine.query.DistSQLQueryExecuteEngine;
 import 
org.apache.shardingsphere.infra.algorithm.core.config.AlgorithmConfiguration;
 import 
org.apache.shardingsphere.infra.merge.result.impl.local.LocalDataQueryResultRow;
+import 
org.apache.shardingsphere.infra.metadata.database.ShardingSphereDatabase;
 import org.apache.shardingsphere.mode.manager.ContextManager;
 import org.apache.shardingsphere.sharding.api.config.ShardingRuleConfiguration;
 import 
org.apache.shardingsphere.sharding.distsql.statement.ShowShardingKeyGeneratorsStatement;
@@ -47,14 +48,16 @@ class ShowShardingKeyGeneratorExecutorTest {
     
     @BeforeEach
     void setUp() {
-        engine = new 
DistSQLQueryExecuteEngine(mock(ShowShardingKeyGeneratorsStatement.class), null, 
mockContextManager(), mock(DistSQLConnectionContext.class));
+        engine = new 
DistSQLQueryExecuteEngine(mock(ShowShardingKeyGeneratorsStatement.class), 
"foo_db", mockContextManager(), mock(DistSQLConnectionContext.class));
     }
     
     private ContextManager mockContextManager() {
         ContextManager result = mock(ContextManager.class, RETURNS_DEEP_STUBS);
+        ShardingSphereDatabase database = mock(ShardingSphereDatabase.class, 
RETURNS_DEEP_STUBS);
+        when(result.getDatabase("foo_db")).thenReturn(database);
         ShardingRule rule = mock(ShardingRule.class);
         when(rule.getConfiguration()).thenReturn(createRuleConfiguration());
-        
when(result.getMetaDataContexts().getMetaData().getGlobalRuleMetaData().findSingleRule(ShardingRule.class)).thenReturn(Optional.of(rule));
+        
when(database.getRuleMetaData().findSingleRule(ShardingRule.class)).thenReturn(Optional.of(rule));
         return result;
     }
     
diff --git 
a/features/sharding/distsql/handler/src/test/java/org/apache/shardingsphere/sharding/distsql/query/ShowShardingTableNodesExecutorTest.java
 
b/features/sharding/distsql/handler/src/test/java/org/apache/shardingsphere/sharding/distsql/query/ShowShardingTableNodesExecutorTest.java
index 45c5bc9c2c7..25bbd5b7658 100644
--- 
a/features/sharding/distsql/handler/src/test/java/org/apache/shardingsphere/sharding/distsql/query/ShowShardingTableNodesExecutorTest.java
+++ 
b/features/sharding/distsql/handler/src/test/java/org/apache/shardingsphere/sharding/distsql/query/ShowShardingTableNodesExecutorTest.java
@@ -23,6 +23,7 @@ import 
org.apache.shardingsphere.distsql.handler.engine.DistSQLConnectionContext
 import 
org.apache.shardingsphere.distsql.handler.engine.query.DistSQLQueryExecuteEngine;
 import org.apache.shardingsphere.infra.instance.InstanceContext;
 import 
org.apache.shardingsphere.infra.merge.result.impl.local.LocalDataQueryResultRow;
+import 
org.apache.shardingsphere.infra.metadata.database.ShardingSphereDatabase;
 import org.apache.shardingsphere.infra.util.yaml.YamlEngine;
 import org.apache.shardingsphere.infra.yaml.config.pojo.YamlRootConfiguration;
 import org.apache.shardingsphere.mode.manager.ContextManager;
@@ -54,12 +55,14 @@ class ShowShardingTableNodesExecutorTest {
     private DistSQLQueryExecuteEngine engine;
     
     DistSQLQueryExecuteEngine setUp(final ShardingRule rule, final 
ShowShardingTableNodesStatement statement) {
-        return new DistSQLQueryExecuteEngine(statement, null, 
mockContextManager(rule), mock(DistSQLConnectionContext.class));
+        return new DistSQLQueryExecuteEngine(statement, "foo_db", 
mockContextManager(rule), mock(DistSQLConnectionContext.class));
     }
     
     private ContextManager mockContextManager(final ShardingRule rule) {
         ContextManager result = mock(ContextManager.class, RETURNS_DEEP_STUBS);
-        
when(result.getMetaDataContexts().getMetaData().getGlobalRuleMetaData().findSingleRule(ShardingRule.class)).thenReturn(Optional.of(rule));
+        ShardingSphereDatabase database = mock(ShardingSphereDatabase.class, 
RETURNS_DEEP_STUBS);
+        when(result.getDatabase("foo_db")).thenReturn(database);
+        
when(database.getRuleMetaData().findSingleRule(ShardingRule.class)).thenReturn(Optional.of(rule));
         return result;
     }
     
diff --git 
a/features/sharding/distsql/handler/src/test/java/org/apache/shardingsphere/sharding/distsql/query/ShowShardingTableReferenceRuleExecutorTest.java
 
b/features/sharding/distsql/handler/src/test/java/org/apache/shardingsphere/sharding/distsql/query/ShowShardingTableReferenceRuleExecutorTest.java
index ef75db33e1c..17649d88933 100644
--- 
a/features/sharding/distsql/handler/src/test/java/org/apache/shardingsphere/sharding/distsql/query/ShowShardingTableReferenceRuleExecutorTest.java
+++ 
b/features/sharding/distsql/handler/src/test/java/org/apache/shardingsphere/sharding/distsql/query/ShowShardingTableReferenceRuleExecutorTest.java
@@ -20,6 +20,7 @@ package org.apache.shardingsphere.sharding.distsql.query;
 import 
org.apache.shardingsphere.distsql.handler.engine.DistSQLConnectionContext;
 import 
org.apache.shardingsphere.distsql.handler.engine.query.DistSQLQueryExecuteEngine;
 import 
org.apache.shardingsphere.infra.merge.result.impl.local.LocalDataQueryResultRow;
+import 
org.apache.shardingsphere.infra.metadata.database.ShardingSphereDatabase;
 import org.apache.shardingsphere.mode.manager.ContextManager;
 import org.apache.shardingsphere.sharding.api.config.ShardingRuleConfiguration;
 import 
org.apache.shardingsphere.sharding.api.config.rule.ShardingTableReferenceRuleConfiguration;
@@ -44,14 +45,16 @@ class ShowShardingTableReferenceRuleExecutorTest {
     private DistSQLQueryExecuteEngine engine;
     
     DistSQLQueryExecuteEngine setUp(final 
ShowShardingTableReferenceRulesStatement statement) {
-        return new DistSQLQueryExecuteEngine(statement, null, 
mockContextManager(), mock(DistSQLConnectionContext.class));
+        return new DistSQLQueryExecuteEngine(statement, "foo_db", 
mockContextManager(), mock(DistSQLConnectionContext.class));
     }
     
     private ContextManager mockContextManager() {
         ContextManager result = mock(ContextManager.class, RETURNS_DEEP_STUBS);
+        ShardingSphereDatabase database = mock(ShardingSphereDatabase.class, 
RETURNS_DEEP_STUBS);
+        when(result.getDatabase("foo_db")).thenReturn(database);
         ShardingRule rule = mock(ShardingRule.class);
         when(rule.getConfiguration()).thenReturn(createRuleConfiguration());
-        
when(result.getMetaDataContexts().getMetaData().getGlobalRuleMetaData().findSingleRule(ShardingRule.class)).thenReturn(Optional.of(rule));
+        
when(database.getRuleMetaData().findSingleRule(ShardingRule.class)).thenReturn(Optional.of(rule));
         return result;
     }
     
diff --git 
a/features/sharding/distsql/handler/src/test/java/org/apache/shardingsphere/sharding/distsql/query/ShowShardingTableRuleExecutorTest.java
 
b/features/sharding/distsql/handler/src/test/java/org/apache/shardingsphere/sharding/distsql/query/ShowShardingTableRuleExecutorTest.java
index 22c6efd7573..a1955f5f178 100644
--- 
a/features/sharding/distsql/handler/src/test/java/org/apache/shardingsphere/sharding/distsql/query/ShowShardingTableRuleExecutorTest.java
+++ 
b/features/sharding/distsql/handler/src/test/java/org/apache/shardingsphere/sharding/distsql/query/ShowShardingTableRuleExecutorTest.java
@@ -21,6 +21,7 @@ import 
org.apache.shardingsphere.infra.algorithm.core.config.AlgorithmConfigurat
 import 
org.apache.shardingsphere.distsql.handler.engine.DistSQLConnectionContext;
 import 
org.apache.shardingsphere.distsql.handler.engine.query.DistSQLQueryExecuteEngine;
 import 
org.apache.shardingsphere.infra.merge.result.impl.local.LocalDataQueryResultRow;
+import 
org.apache.shardingsphere.infra.metadata.database.ShardingSphereDatabase;
 import org.apache.shardingsphere.mode.manager.ContextManager;
 import org.apache.shardingsphere.sharding.api.config.ShardingRuleConfiguration;
 import 
org.apache.shardingsphere.sharding.api.config.rule.ShardingTableRuleConfiguration;
@@ -54,14 +55,16 @@ class ShowShardingTableRuleExecutorTest {
     
     @BeforeEach
     void setUp() {
-        engine = new 
DistSQLQueryExecuteEngine(mock(ShowShardingTableRulesStatement.class), null, 
mockContextManager(), mock(DistSQLConnectionContext.class));
+        engine = new 
DistSQLQueryExecuteEngine(mock(ShowShardingTableRulesStatement.class), 
"foo_db", mockContextManager(), mock(DistSQLConnectionContext.class));
     }
     
     private ContextManager mockContextManager() {
         ContextManager result = mock(ContextManager.class, RETURNS_DEEP_STUBS);
+        ShardingSphereDatabase database = mock(ShardingSphereDatabase.class, 
RETURNS_DEEP_STUBS);
+        when(result.getDatabase("foo_db")).thenReturn(database);
         ShardingRule rule = mock(ShardingRule.class);
         when(rule.getConfiguration()).thenReturn(createRuleConfiguration());
-        
when(result.getMetaDataContexts().getMetaData().getGlobalRuleMetaData().findSingleRule(ShardingRule.class)).thenReturn(Optional.of(rule));
+        
when(database.getRuleMetaData().findSingleRule(ShardingRule.class)).thenReturn(Optional.of(rule));
         return result;
     }
     
diff --git 
a/features/sharding/distsql/handler/src/test/java/org/apache/shardingsphere/sharding/distsql/query/ShowShardingTableRulesUsedAlgorithmExecutorTest.java
 
b/features/sharding/distsql/handler/src/test/java/org/apache/shardingsphere/sharding/distsql/query/ShowShardingTableRulesUsedAlgorithmExecutorTest.java
index 5526d0c5556..794ca11006d 100644
--- 
a/features/sharding/distsql/handler/src/test/java/org/apache/shardingsphere/sharding/distsql/query/ShowShardingTableRulesUsedAlgorithmExecutorTest.java
+++ 
b/features/sharding/distsql/handler/src/test/java/org/apache/shardingsphere/sharding/distsql/query/ShowShardingTableRulesUsedAlgorithmExecutorTest.java
@@ -21,6 +21,7 @@ import 
org.apache.shardingsphere.distsql.handler.engine.DistSQLConnectionContext
 import 
org.apache.shardingsphere.distsql.handler.engine.query.DistSQLQueryExecuteEngine;
 import 
org.apache.shardingsphere.infra.algorithm.core.config.AlgorithmConfiguration;
 import 
org.apache.shardingsphere.infra.merge.result.impl.local.LocalDataQueryResultRow;
+import 
org.apache.shardingsphere.infra.metadata.database.ShardingSphereDatabase;
 import org.apache.shardingsphere.mode.manager.ContextManager;
 import org.apache.shardingsphere.sharding.api.config.ShardingRuleConfiguration;
 import 
org.apache.shardingsphere.sharding.api.config.rule.ShardingAutoTableRuleConfiguration;
@@ -52,14 +53,16 @@ class ShowShardingTableRulesUsedAlgorithmExecutorTest {
     
     DistSQLQueryExecuteEngine setUp(final 
ShowShardingTableRulesUsedAlgorithmStatement statement, final String 
algorithmName) {
         
when(statement.getShardingAlgorithmName()).thenReturn(Optional.of(algorithmName));
-        return new DistSQLQueryExecuteEngine(statement, null, 
mockContextManager(), mock(DistSQLConnectionContext.class));
+        return new DistSQLQueryExecuteEngine(statement, "foo_db", 
mockContextManager(), mock(DistSQLConnectionContext.class));
     }
     
     private ContextManager mockContextManager() {
         ContextManager result = mock(ContextManager.class, RETURNS_DEEP_STUBS);
+        ShardingSphereDatabase database = mock(ShardingSphereDatabase.class, 
RETURNS_DEEP_STUBS);
+        when(result.getDatabase("foo_db")).thenReturn(database);
         ShardingRule rule = mock(ShardingRule.class);
         when(rule.getConfiguration()).thenReturn(createRuleConfiguration());
-        
when(result.getMetaDataContexts().getMetaData().getGlobalRuleMetaData().findSingleRule(ShardingRule.class)).thenReturn(Optional.of(rule));
+        
when(database.getRuleMetaData().findSingleRule(ShardingRule.class)).thenReturn(Optional.of(rule));
         return result;
     }
     
diff --git 
a/features/sharding/distsql/handler/src/test/java/org/apache/shardingsphere/sharding/distsql/query/ShowShardingTableRulesUsedAuditorExecutorTest.java
 
b/features/sharding/distsql/handler/src/test/java/org/apache/shardingsphere/sharding/distsql/query/ShowShardingTableRulesUsedAuditorExecutorTest.java
index 0fbcda5fac7..0160077f9ba 100644
--- 
a/features/sharding/distsql/handler/src/test/java/org/apache/shardingsphere/sharding/distsql/query/ShowShardingTableRulesUsedAuditorExecutorTest.java
+++ 
b/features/sharding/distsql/handler/src/test/java/org/apache/shardingsphere/sharding/distsql/query/ShowShardingTableRulesUsedAuditorExecutorTest.java
@@ -21,6 +21,7 @@ import 
org.apache.shardingsphere.distsql.handler.engine.DistSQLConnectionContext
 import 
org.apache.shardingsphere.distsql.handler.engine.query.DistSQLQueryExecuteEngine;
 import 
org.apache.shardingsphere.infra.algorithm.core.config.AlgorithmConfiguration;
 import 
org.apache.shardingsphere.infra.merge.result.impl.local.LocalDataQueryResultRow;
+import 
org.apache.shardingsphere.infra.metadata.database.ShardingSphereDatabase;
 import org.apache.shardingsphere.mode.manager.ContextManager;
 import org.apache.shardingsphere.sharding.api.config.ShardingRuleConfiguration;
 import 
org.apache.shardingsphere.sharding.api.config.rule.ShardingAutoTableRuleConfiguration;
@@ -53,14 +54,16 @@ class ShowShardingTableRulesUsedAuditorExecutorTest {
     
     DistSQLQueryExecuteEngine setUp(final 
ShowShardingTableRulesUsedAuditorStatement statement, final String auditorName) 
{
         when(statement.getAuditorName()).thenReturn(Optional.of(auditorName));
-        return new DistSQLQueryExecuteEngine(statement, null, 
mockContextManager(), mock(DistSQLConnectionContext.class));
+        return new DistSQLQueryExecuteEngine(statement, "foo_db", 
mockContextManager(), mock(DistSQLConnectionContext.class));
     }
     
     private ContextManager mockContextManager() {
         ContextManager result = mock(ContextManager.class, RETURNS_DEEP_STUBS);
+        ShardingSphereDatabase database = mock(ShardingSphereDatabase.class, 
RETURNS_DEEP_STUBS);
+        when(result.getDatabase("foo_db")).thenReturn(database);
         ShardingRule rule = mock(ShardingRule.class);
         when(rule.getConfiguration()).thenReturn(createRuleConfiguration());
-        
when(result.getMetaDataContexts().getMetaData().getGlobalRuleMetaData().findSingleRule(ShardingRule.class)).thenReturn(Optional.of(rule));
+        
when(database.getRuleMetaData().findSingleRule(ShardingRule.class)).thenReturn(Optional.of(rule));
         return result;
     }
     
diff --git 
a/features/sharding/distsql/handler/src/test/java/org/apache/shardingsphere/sharding/distsql/query/ShowShardingTableRulesUsedKeyGeneratorExecutorTest.java
 
b/features/sharding/distsql/handler/src/test/java/org/apache/shardingsphere/sharding/distsql/query/ShowShardingTableRulesUsedKeyGeneratorExecutorTest.java
index 047b1791d91..8c493a9e962 100644
--- 
a/features/sharding/distsql/handler/src/test/java/org/apache/shardingsphere/sharding/distsql/query/ShowShardingTableRulesUsedKeyGeneratorExecutorTest.java
+++ 
b/features/sharding/distsql/handler/src/test/java/org/apache/shardingsphere/sharding/distsql/query/ShowShardingTableRulesUsedKeyGeneratorExecutorTest.java
@@ -21,6 +21,7 @@ import 
org.apache.shardingsphere.distsql.handler.engine.DistSQLConnectionContext
 import 
org.apache.shardingsphere.distsql.handler.engine.query.DistSQLQueryExecuteEngine;
 import 
org.apache.shardingsphere.infra.algorithm.core.config.AlgorithmConfiguration;
 import 
org.apache.shardingsphere.infra.merge.result.impl.local.LocalDataQueryResultRow;
+import 
org.apache.shardingsphere.infra.metadata.database.ShardingSphereDatabase;
 import org.apache.shardingsphere.mode.manager.ContextManager;
 import org.apache.shardingsphere.sharding.api.config.ShardingRuleConfiguration;
 import 
org.apache.shardingsphere.sharding.api.config.rule.ShardingAutoTableRuleConfiguration;
@@ -52,14 +53,16 @@ class ShowShardingTableRulesUsedKeyGeneratorExecutorTest {
     
     DistSQLQueryExecuteEngine setUp(final 
ShowShardingTableRulesUsedKeyGeneratorStatement statement, final String 
keyGeneratorName) {
         
when(statement.getKeyGeneratorName()).thenReturn(Optional.of(keyGeneratorName));
-        return new DistSQLQueryExecuteEngine(statement, null, 
mockContextManager(), mock(DistSQLConnectionContext.class));
+        return new DistSQLQueryExecuteEngine(statement, "foo_db", 
mockContextManager(), mock(DistSQLConnectionContext.class));
     }
     
     private ContextManager mockContextManager() {
         ContextManager result = mock(ContextManager.class, RETURNS_DEEP_STUBS);
+        ShardingSphereDatabase database = mock(ShardingSphereDatabase.class, 
RETURNS_DEEP_STUBS);
+        when(result.getDatabase("foo_db")).thenReturn(database);
         ShardingRule rule = mock(ShardingRule.class);
         when(rule.getConfiguration()).thenReturn(createRuleConfiguration());
-        
when(result.getMetaDataContexts().getMetaData().getGlobalRuleMetaData().findSingleRule(ShardingRule.class)).thenReturn(Optional.of(rule));
+        
when(database.getRuleMetaData().findSingleRule(ShardingRule.class)).thenReturn(Optional.of(rule));
         return result;
     }
     
diff --git 
a/features/sharding/distsql/handler/src/test/java/org/apache/shardingsphere/sharding/distsql/query/ShowUnusedShardingAlgorithmsExecutorTest.java
 
b/features/sharding/distsql/handler/src/test/java/org/apache/shardingsphere/sharding/distsql/query/ShowUnusedShardingAlgorithmsExecutorTest.java
index ddf0c557482..a96e93512c4 100644
--- 
a/features/sharding/distsql/handler/src/test/java/org/apache/shardingsphere/sharding/distsql/query/ShowUnusedShardingAlgorithmsExecutorTest.java
+++ 
b/features/sharding/distsql/handler/src/test/java/org/apache/shardingsphere/sharding/distsql/query/ShowUnusedShardingAlgorithmsExecutorTest.java
@@ -21,6 +21,7 @@ import 
org.apache.shardingsphere.distsql.handler.engine.DistSQLConnectionContext
 import 
org.apache.shardingsphere.distsql.handler.engine.query.DistSQLQueryExecuteEngine;
 import 
org.apache.shardingsphere.infra.algorithm.core.config.AlgorithmConfiguration;
 import 
org.apache.shardingsphere.infra.merge.result.impl.local.LocalDataQueryResultRow;
+import 
org.apache.shardingsphere.infra.metadata.database.ShardingSphereDatabase;
 import org.apache.shardingsphere.mode.manager.ContextManager;
 import org.apache.shardingsphere.sharding.api.config.ShardingRuleConfiguration;
 import 
org.apache.shardingsphere.sharding.api.config.rule.ShardingAutoTableRuleConfiguration;
@@ -49,14 +50,16 @@ class ShowUnusedShardingAlgorithmsExecutorTest {
     
     @BeforeEach
     void setUp() {
-        engine = new 
DistSQLQueryExecuteEngine(mock(ShowUnusedShardingAlgorithmsStatement.class), 
null, mockContextManager(), mock(DistSQLConnectionContext.class));
+        engine = new 
DistSQLQueryExecuteEngine(mock(ShowUnusedShardingAlgorithmsStatement.class), 
"foo_db", mockContextManager(), mock(DistSQLConnectionContext.class));
     }
     
     private ContextManager mockContextManager() {
         ContextManager result = mock(ContextManager.class, RETURNS_DEEP_STUBS);
+        ShardingSphereDatabase database = mock(ShardingSphereDatabase.class, 
RETURNS_DEEP_STUBS);
+        when(result.getDatabase("foo_db")).thenReturn(database);
         ShardingRule rule = mock(ShardingRule.class);
         when(rule.getConfiguration()).thenReturn(createRuleConfiguration());
-        
when(result.getMetaDataContexts().getMetaData().getGlobalRuleMetaData().findSingleRule(ShardingRule.class)).thenReturn(Optional.of(rule));
+        
when(database.getRuleMetaData().findSingleRule(ShardingRule.class)).thenReturn(Optional.of(rule));
         return result;
     }
     
diff --git 
a/features/sharding/distsql/handler/src/test/java/org/apache/shardingsphere/sharding/distsql/query/ShowUnusedShardingAuditorsExecutorTest.java
 
b/features/sharding/distsql/handler/src/test/java/org/apache/shardingsphere/sharding/distsql/query/ShowUnusedShardingAuditorsExecutorTest.java
index f3b7069757c..11869b9c3f0 100644
--- 
a/features/sharding/distsql/handler/src/test/java/org/apache/shardingsphere/sharding/distsql/query/ShowUnusedShardingAuditorsExecutorTest.java
+++ 
b/features/sharding/distsql/handler/src/test/java/org/apache/shardingsphere/sharding/distsql/query/ShowUnusedShardingAuditorsExecutorTest.java
@@ -21,6 +21,7 @@ import 
org.apache.shardingsphere.distsql.handler.engine.DistSQLConnectionContext
 import 
org.apache.shardingsphere.distsql.handler.engine.query.DistSQLQueryExecuteEngine;
 import 
org.apache.shardingsphere.infra.algorithm.core.config.AlgorithmConfiguration;
 import 
org.apache.shardingsphere.infra.merge.result.impl.local.LocalDataQueryResultRow;
+import 
org.apache.shardingsphere.infra.metadata.database.ShardingSphereDatabase;
 import org.apache.shardingsphere.mode.manager.ContextManager;
 import org.apache.shardingsphere.sharding.api.config.ShardingRuleConfiguration;
 import 
org.apache.shardingsphere.sharding.api.config.rule.ShardingAutoTableRuleConfiguration;
@@ -51,14 +52,16 @@ class ShowUnusedShardingAuditorsExecutorTest {
     
     @BeforeEach
     void setUp() {
-        engine = new 
DistSQLQueryExecuteEngine(mock(ShowUnusedShardingAuditorsStatement.class), 
null, mockContextManager(), mock(DistSQLConnectionContext.class));
+        engine = new 
DistSQLQueryExecuteEngine(mock(ShowUnusedShardingAuditorsStatement.class), 
"foo_db", mockContextManager(), mock(DistSQLConnectionContext.class));
     }
     
     private ContextManager mockContextManager() {
         ContextManager result = mock(ContextManager.class, RETURNS_DEEP_STUBS);
+        ShardingSphereDatabase database = mock(ShardingSphereDatabase.class, 
RETURNS_DEEP_STUBS);
+        when(result.getDatabase("foo_db")).thenReturn(database);
         ShardingRule rule = mock(ShardingRule.class);
         when(rule.getConfiguration()).thenReturn(createRuleConfiguration());
-        
when(result.getMetaDataContexts().getMetaData().getGlobalRuleMetaData().findSingleRule(ShardingRule.class)).thenReturn(Optional.of(rule));
+        
when(database.getRuleMetaData().findSingleRule(ShardingRule.class)).thenReturn(Optional.of(rule));
         return result;
     }
     
diff --git 
a/features/sharding/distsql/handler/src/test/java/org/apache/shardingsphere/sharding/distsql/query/ShowUnusedShardingKeyGeneratorExecutorTest.java
 
b/features/sharding/distsql/handler/src/test/java/org/apache/shardingsphere/sharding/distsql/query/ShowUnusedShardingKeyGeneratorExecutorTest.java
index 35ead71c686..60e9673f7be 100644
--- 
a/features/sharding/distsql/handler/src/test/java/org/apache/shardingsphere/sharding/distsql/query/ShowUnusedShardingKeyGeneratorExecutorTest.java
+++ 
b/features/sharding/distsql/handler/src/test/java/org/apache/shardingsphere/sharding/distsql/query/ShowUnusedShardingKeyGeneratorExecutorTest.java
@@ -21,6 +21,7 @@ import 
org.apache.shardingsphere.distsql.handler.engine.DistSQLConnectionContext
 import 
org.apache.shardingsphere.distsql.handler.engine.query.DistSQLQueryExecuteEngine;
 import 
org.apache.shardingsphere.infra.algorithm.core.config.AlgorithmConfiguration;
 import 
org.apache.shardingsphere.infra.merge.result.impl.local.LocalDataQueryResultRow;
+import 
org.apache.shardingsphere.infra.metadata.database.ShardingSphereDatabase;
 import org.apache.shardingsphere.mode.manager.ContextManager;
 import org.apache.shardingsphere.sharding.api.config.ShardingRuleConfiguration;
 import 
org.apache.shardingsphere.sharding.api.config.rule.ShardingAutoTableRuleConfiguration;
@@ -48,14 +49,16 @@ class ShowUnusedShardingKeyGeneratorExecutorTest {
     
     @BeforeEach
     void setUp() {
-        engine = new 
DistSQLQueryExecuteEngine(mock(ShowUnusedShardingKeyGeneratorsStatement.class), 
null, mockContextManager(), mock(DistSQLConnectionContext.class));
+        engine = new 
DistSQLQueryExecuteEngine(mock(ShowUnusedShardingKeyGeneratorsStatement.class), 
"foo_db", mockContextManager(), mock(DistSQLConnectionContext.class));
     }
     
     private ContextManager mockContextManager() {
         ContextManager result = mock(ContextManager.class, RETURNS_DEEP_STUBS);
+        ShardingSphereDatabase database = mock(ShardingSphereDatabase.class, 
RETURNS_DEEP_STUBS);
+        when(result.getDatabase("foo_db")).thenReturn(database);
         ShardingRule rule = mock(ShardingRule.class);
         when(rule.getConfiguration()).thenReturn(createRuleConfiguration());
-        
when(result.getMetaDataContexts().getMetaData().getGlobalRuleMetaData().findSingleRule(ShardingRule.class)).thenReturn(Optional.of(rule));
+        
when(database.getRuleMetaData().findSingleRule(ShardingRule.class)).thenReturn(Optional.of(rule));
         return result;
     }
     
diff --git 
a/infra/distsql-handler/src/main/java/org/apache/shardingsphere/distsql/handler/aware/DistSQLExecutorAwareSetter.java
 
b/infra/distsql-handler/src/main/java/org/apache/shardingsphere/distsql/handler/aware/DistSQLExecutorAwareSetter.java
index 9700a6c547a..ff2b818c04d 100644
--- 
a/infra/distsql-handler/src/main/java/org/apache/shardingsphere/distsql/handler/aware/DistSQLExecutorAwareSetter.java
+++ 
b/infra/distsql-handler/src/main/java/org/apache/shardingsphere/distsql/handler/aware/DistSQLExecutorAwareSetter.java
@@ -19,6 +19,9 @@ package org.apache.shardingsphere.distsql.handler.aware;
 
 import lombok.RequiredArgsConstructor;
 import 
org.apache.shardingsphere.distsql.handler.engine.DistSQLConnectionContext;
+import 
org.apache.shardingsphere.distsql.handler.engine.update.rdl.rule.spi.global.GlobalRuleDefinitionExecutor;
+import org.apache.shardingsphere.distsql.statement.DistSQLStatement;
+import 
org.apache.shardingsphere.distsql.statement.rql.rule.global.ShowGlobalRulesStatement;
 import 
org.apache.shardingsphere.infra.exception.core.ShardingSpherePreconditions;
 import 
org.apache.shardingsphere.infra.exception.core.external.sql.type.generic.UnsupportedSQLOperationException;
 import 
org.apache.shardingsphere.infra.exception.dialect.exception.syntax.database.NoDatabaseSelectedException;
@@ -42,14 +45,18 @@ public final class DistSQLExecutorAwareSetter {
      * @param contextManager context manager
      * @param database database
      * @param connectionContext connection context
+     * @param sqlStatement DistSQL statement
      */
     @SuppressWarnings("rawtypes")
-    public void set(final ContextManager contextManager, final 
ShardingSphereDatabase database, final DistSQLConnectionContext 
connectionContext) {
+    public void set(final ContextManager contextManager, final 
ShardingSphereDatabase database, final DistSQLConnectionContext 
connectionContext, final DistSQLStatement sqlStatement) {
         if (executor instanceof DistSQLExecutorDatabaseAware) {
             ShardingSpherePreconditions.checkNotNull(database, 
NoDatabaseSelectedException::new);
             ((DistSQLExecutorDatabaseAware) executor).setDatabase(database);
         }
         if (executor instanceof DistSQLExecutorRuleAware) {
+            if (!(sqlStatement instanceof ShowGlobalRulesStatement) && 
!(executor instanceof GlobalRuleDefinitionExecutor)) {
+                ShardingSpherePreconditions.checkNotNull(database, 
NoDatabaseSelectedException::new);
+            }
             setRule((DistSQLExecutorRuleAware) executor, contextManager, 
database);
         }
         if (executor instanceof DistSQLExecutorConnectionContextAware) {
diff --git 
a/infra/distsql-handler/src/main/java/org/apache/shardingsphere/distsql/handler/engine/query/DistSQLQueryExecuteEngine.java
 
b/infra/distsql-handler/src/main/java/org/apache/shardingsphere/distsql/handler/engine/query/DistSQLQueryExecuteEngine.java
index 0c7e923b710..495760a728b 100644
--- 
a/infra/distsql-handler/src/main/java/org/apache/shardingsphere/distsql/handler/engine/query/DistSQLQueryExecuteEngine.java
+++ 
b/infra/distsql-handler/src/main/java/org/apache/shardingsphere/distsql/handler/engine/query/DistSQLQueryExecuteEngine.java
@@ -67,7 +67,7 @@ public final class DistSQLQueryExecuteEngine {
     public void executeQuery() throws SQLException {
         DistSQLQueryExecutor<DistSQLStatement> executor = 
TypedSPILoader.getService(DistSQLQueryExecutor.class, sqlStatement.getClass());
         try {
-            new DistSQLExecutorAwareSetter(executor).set(contextManager, null 
== databaseName ? null : contextManager.getDatabase(databaseName), 
distsqlConnectionContext);
+            new DistSQLExecutorAwareSetter(executor).set(contextManager, null 
== databaseName ? null : contextManager.getDatabase(databaseName), 
distsqlConnectionContext, sqlStatement);
         } catch (final UnsupportedSQLOperationException ignored) {
             columnNames = executor.getColumnNames(sqlStatement);
             rows = Collections.emptyList();
diff --git 
a/infra/distsql-handler/src/main/java/org/apache/shardingsphere/distsql/handler/engine/update/DistSQLUpdateExecuteEngine.java
 
b/infra/distsql-handler/src/main/java/org/apache/shardingsphere/distsql/handler/engine/update/DistSQLUpdateExecuteEngine.java
index 5979665546f..496d8ac0737 100644
--- 
a/infra/distsql-handler/src/main/java/org/apache/shardingsphere/distsql/handler/engine/update/DistSQLUpdateExecuteEngine.java
+++ 
b/infra/distsql-handler/src/main/java/org/apache/shardingsphere/distsql/handler/engine/update/DistSQLUpdateExecuteEngine.java
@@ -107,7 +107,7 @@ public final class DistSQLUpdateExecuteEngine {
     private void executeNormalUpdate() throws SQLException {
         DistSQLUpdateExecutor executor = 
TypedSPILoader.getService(DistSQLUpdateExecutor.class, sqlStatement.getClass());
         ShardingSphereDatabase database = null == databaseName ? null : 
contextManager.getDatabase(databaseName);
-        new DistSQLExecutorAwareSetter(executor).set(contextManager, database, 
null);
+        new DistSQLExecutorAwareSetter(executor).set(contextManager, database, 
null, sqlStatement);
         new DistSQLExecutorRequiredChecker(executor).check(sqlStatement, 
contextManager, database);
         executor.executeUpdate(sqlStatement, contextManager);
     }
diff --git 
a/kernel/single/distsql/handler/src/test/java/org/apache/shardingsphere/single/distsql/handler/query/ShowDefaultSingleTableStorageUnitExecutorTest.java
 
b/kernel/single/distsql/handler/src/test/java/org/apache/shardingsphere/single/distsql/handler/query/ShowDefaultSingleTableStorageUnitExecutorTest.java
index 2b0f21e32fc..0f41401fd78 100644
--- 
a/kernel/single/distsql/handler/src/test/java/org/apache/shardingsphere/single/distsql/handler/query/ShowDefaultSingleTableStorageUnitExecutorTest.java
+++ 
b/kernel/single/distsql/handler/src/test/java/org/apache/shardingsphere/single/distsql/handler/query/ShowDefaultSingleTableStorageUnitExecutorTest.java
@@ -20,6 +20,7 @@ package 
org.apache.shardingsphere.single.distsql.handler.query;
 import 
org.apache.shardingsphere.distsql.handler.engine.DistSQLConnectionContext;
 import 
org.apache.shardingsphere.distsql.handler.engine.query.DistSQLQueryExecuteEngine;
 import 
org.apache.shardingsphere.infra.merge.result.impl.local.LocalDataQueryResultRow;
+import 
org.apache.shardingsphere.infra.metadata.database.ShardingSphereDatabase;
 import org.apache.shardingsphere.mode.manager.ContextManager;
 import org.apache.shardingsphere.single.api.config.SingleRuleConfiguration;
 import 
org.apache.shardingsphere.single.distsql.statement.rql.ShowDefaultSingleTableStorageUnitStatement;
@@ -45,14 +46,16 @@ class ShowDefaultSingleTableStorageUnitExecutorTest {
     
     @BeforeEach
     void setUp() {
-        engine = new 
DistSQLQueryExecuteEngine(mock(ShowDefaultSingleTableStorageUnitStatement.class),
 null, mockContextManager(), mock(DistSQLConnectionContext.class));
+        engine = new 
DistSQLQueryExecuteEngine(mock(ShowDefaultSingleTableStorageUnitStatement.class),
 "foo_db", mockContextManager(), mock(DistSQLConnectionContext.class));
     }
     
     private ContextManager mockContextManager() {
         ContextManager result = mock(ContextManager.class, RETURNS_DEEP_STUBS);
+        ShardingSphereDatabase database = mock(ShardingSphereDatabase.class, 
RETURNS_DEEP_STUBS);
+        when(result.getDatabase("foo_db")).thenReturn(database);
         SingleRule rule = mock(SingleRule.class);
         when(rule.getConfiguration()).thenReturn(new 
SingleRuleConfiguration(Collections.emptyList(), "foo_ds"));
-        
when(result.getMetaDataContexts().getMetaData().getGlobalRuleMetaData().findSingleRule(SingleRule.class)).thenReturn(Optional.of(rule));
+        
when(database.getRuleMetaData().findSingleRule(SingleRule.class)).thenReturn(Optional.of(rule));
         return result;
     }
     
diff --git 
a/kernel/single/distsql/handler/src/test/java/org/apache/shardingsphere/single/distsql/handler/query/ShowSingleTableExecutorTest.java
 
b/kernel/single/distsql/handler/src/test/java/org/apache/shardingsphere/single/distsql/handler/query/ShowSingleTableExecutorTest.java
index adcb7e0411e..fba8523ee86 100644
--- 
a/kernel/single/distsql/handler/src/test/java/org/apache/shardingsphere/single/distsql/handler/query/ShowSingleTableExecutorTest.java
+++ 
b/kernel/single/distsql/handler/src/test/java/org/apache/shardingsphere/single/distsql/handler/query/ShowSingleTableExecutorTest.java
@@ -21,6 +21,7 @@ import 
org.apache.shardingsphere.distsql.handler.engine.DistSQLConnectionContext
 import 
org.apache.shardingsphere.distsql.handler.engine.query.DistSQLQueryExecuteEngine;
 import org.apache.shardingsphere.infra.datanode.DataNode;
 import 
org.apache.shardingsphere.infra.merge.result.impl.local.LocalDataQueryResultRow;
+import 
org.apache.shardingsphere.infra.metadata.database.ShardingSphereDatabase;
 import org.apache.shardingsphere.mode.manager.ContextManager;
 import 
org.apache.shardingsphere.single.distsql.statement.rql.ShowSingleTableStatement;
 import org.apache.shardingsphere.single.rule.SingleRule;
@@ -45,13 +46,15 @@ class ShowSingleTableExecutorTest {
     private DistSQLQueryExecuteEngine engine;
     
     DistSQLQueryExecuteEngine setUp(final ShowSingleTableStatement statement) {
-        return new DistSQLQueryExecuteEngine(statement, null, 
mockContextManager(), mock(DistSQLConnectionContext.class));
+        return new DistSQLQueryExecuteEngine(statement, "foo_db", 
mockContextManager(), mock(DistSQLConnectionContext.class));
     }
     
     private ContextManager mockContextManager() {
         ContextManager result = mock(ContextManager.class, RETURNS_DEEP_STUBS);
+        ShardingSphereDatabase database = mock(ShardingSphereDatabase.class, 
RETURNS_DEEP_STUBS);
+        when(result.getDatabase("foo_db")).thenReturn(database);
         SingleRule rule = mockSingleRule();
-        
when(result.getMetaDataContexts().getMetaData().getGlobalRuleMetaData().findSingleRule(SingleRule.class)).thenReturn(Optional.of(rule));
+        
when(database.getRuleMetaData().findSingleRule(SingleRule.class)).thenReturn(Optional.of(rule));
         return result;
     }
     

Reply via email to