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

zhangyonglun 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 8fe8182  Add ShardingSphereRuleMetaData (#8054)
8fe8182 is described below

commit 8fe8182627e16ed381175cb2fd2f514ceefdd414
Author: Liang Zhang <[email protected]>
AuthorDate: Fri Nov 6 18:32:42 2020 +0800

    Add ShardingSphereRuleMetaData (#8054)
    
    * Add ShardingSphereRuleMetaData
    
    * Fix test cases
---
 .../EncryptSQLRewriterParameterizedTest.java       |  3 ++-
 .../ha/route/engine/HASQLRouterTest.java           | 29 +++++++++++-----------
 .../route/engine/ReplicaQuerySQLRouterTest.java    | 29 +++++++++++-----------
 .../shadow/route/engine/ShadowSQLRouterTest.java   | 28 +++++++++++----------
 .../MixSQLRewriterParameterizedTest.java           |  3 ++-
 .../ShardingSQLRewriterParameterizedTest.java      |  3 ++-
 .../engine/type/standard/AbstractSQLRouteTest.java |  5 ++--
 .../context/schema/GovernanceSchemaContexts.java   |  8 +++---
 .../schema/GovernanceSchemaContextsTest.java       |  5 ++--
 .../infra/metadata/ShardingSphereMetaData.java     | 13 +++-------
 .../ShardingSphereRuleMetaData.java}               | 23 +++--------------
 .../infra/metadata/ShardingSphereMetaDataTest.java | 12 +++++----
 .../infra/context/kernel/KernelProcessor.java      |  2 +-
 .../context/schema/SchemaContextsBuilder.java      |  4 ++-
 .../context/schema/SchemaContextsBuilderTest.java  |  4 +--
 .../sql/context/ExecutionContextBuilderTest.java   | 20 +++++++++------
 .../infra/route/engine/SQLRouteEngineTest.java     | 17 +++++++------
 .../driver/executor/AbstractStatementExecutor.java |  2 +-
 .../driver/executor/PreparedStatementExecutor.java |  2 +-
 .../driver/executor/StatementExecutor.java         |  2 +-
 .../batch/BatchPreparedStatementExecutor.java      |  2 +-
 .../jdbc/adapter/AbstractResultSetAdapter.java     |  2 +-
 .../metadata/ShardingSphereDatabaseMetaData.java   |  2 +-
 .../statement/ShardingSpherePreparedStatement.java | 10 ++++----
 .../core/statement/ShardingSphereStatement.java    |  8 +++---
 .../driver/executor/AbstractBaseExecutorTest.java  |  2 +-
 .../ShardingSphereDatabaseMetaDataTest.java        |  4 +--
 .../GovernanceShardingSphereDataSource.java        |  2 +-
 .../GovernanceShardingSphereDataSourceTest.java    |  4 +--
 .../spring/boot/SpringBootStarterTest.java         |  2 +-
 .../shardingsphere/spring/SpringNamespaceTest.java |  2 +-
 .../type/GovernanceSpringBootEncryptTest.java      |  2 +-
 .../GovernanceSpringBootRegistryEncryptTest.java   |  2 +-
 .../GovernanceSpringBootRegistryShardingTest.java  |  8 +++---
 .../type/GovernanceSpringBootReplicaQueryTest.java |  2 +-
 .../type/GovernanceSpringBootShardingTest.java     |  8 +++---
 .../governance/GovernanceEncryptNamespaceTest.java |  2 +-
 .../GovernanceReplicaQueryNamespaceTest.java       |  2 +-
 .../GovernanceShardingNamespaceTest.java           |  4 +--
 ...overnanceShardingReplicaQueryNamespaceTest.java |  2 +-
 .../jdbc/JDBCDatabaseCommunicationEngine.java      |  7 +++---
 .../execute/engine/jdbc/JDBCExecuteEngine.java     |  4 +--
 .../backend/response/query/QueryHeaderBuilder.java |  3 ++-
 .../DatabaseCommunicationEngineFactoryTest.java    |  2 +-
 .../response/query/QueryHeaderBuilderTest.java     |  2 +-
 .../ShardingCTLExplainBackendHandlerTest.java      |  5 ++--
 46 files changed, 154 insertions(+), 155 deletions(-)

diff --git 
a/shardingsphere-features/shardingsphere-encrypt/shardingsphere-encrypt-rewrite/src/test/java/org/apache/shardingsphere/encrypt/rewrite/parameterized/EncryptSQLRewriterParameterizedTest.java
 
b/shardingsphere-features/shardingsphere-encrypt/shardingsphere-encrypt-rewrite/src/test/java/org/apache/shardingsphere/encrypt/rewrite/parameterized/EncryptSQLRewriterParameterizedTest.java
index d87b848..f99f398 100644
--- 
a/shardingsphere-features/shardingsphere-encrypt/shardingsphere-encrypt-rewrite/src/test/java/org/apache/shardingsphere/encrypt/rewrite/parameterized/EncryptSQLRewriterParameterizedTest.java
+++ 
b/shardingsphere-features/shardingsphere-encrypt/shardingsphere-encrypt-rewrite/src/test/java/org/apache/shardingsphere/encrypt/rewrite/parameterized/EncryptSQLRewriterParameterizedTest.java
@@ -24,6 +24,7 @@ import 
org.apache.shardingsphere.infra.binder.statement.SQLStatementContext;
 import 
org.apache.shardingsphere.infra.config.properties.ConfigurationProperties;
 import org.apache.shardingsphere.infra.metadata.ShardingSphereMetaData;
 import 
org.apache.shardingsphere.infra.metadata.resource.ShardingSphereResource;
+import 
org.apache.shardingsphere.infra.metadata.rule.ShardingSphereRuleMetaData;
 import org.apache.shardingsphere.infra.parser.sql.SQLStatementParserEngine;
 import org.apache.shardingsphere.infra.rewrite.SQLRewriteEntry;
 import 
org.apache.shardingsphere.infra.rewrite.engine.result.GenericSQLRewriteResult;
@@ -79,7 +80,7 @@ public final class EncryptSQLRewriterParameterizedTest 
extends AbstractSQLRewrit
         SQLStatementContext<?> sqlStatementContext = 
SQLStatementContextFactory.newInstance(schema.getSchemaMetaData(), 
                 getTestParameters().getInputParameters(), 
sqlStatementParserEngine.parse(getTestParameters().getInputSQL(), false));
         LogicSQL logicSQL = new LogicSQL(sqlStatementContext, 
getTestParameters().getInputSQL(), getTestParameters().getInputParameters());
-        ShardingSphereMetaData metaData = new 
ShardingSphereMetaData("sharding_db", Collections.emptyList(), rules, 
mock(ShardingSphereResource.class), schema);
+        ShardingSphereMetaData metaData = new 
ShardingSphereMetaData("sharding_db", mock(ShardingSphereResource.class), new 
ShardingSphereRuleMetaData(Collections.emptyList(), rules), schema);
         RouteContext routeContext = new SQLRouteEngine(rules, 
props).route(logicSQL, metaData);
         SQLRewriteResult sqlRewriteResult = new SQLRewriteEntry(
                 schema.getSchemaMetaData(), props, 
rules).rewrite(getTestParameters().getInputSQL(), 
getTestParameters().getInputParameters(), sqlStatementContext, routeContext);
diff --git 
a/shardingsphere-features/shardingsphere-ha/shardingsphere-ha-route/src/test/java/org/apache/shardingsphere/ha/route/engine/HASQLRouterTest.java
 
b/shardingsphere-features/shardingsphere-ha/shardingsphere-ha-route/src/test/java/org/apache/shardingsphere/ha/route/engine/HASQLRouterTest.java
index 207e9e7..6e1c773 100644
--- 
a/shardingsphere-features/shardingsphere-ha/shardingsphere-ha-route/src/test/java/org/apache/shardingsphere/ha/route/engine/HASQLRouterTest.java
+++ 
b/shardingsphere-features/shardingsphere-ha/shardingsphere-ha-route/src/test/java/org/apache/shardingsphere/ha/route/engine/HASQLRouterTest.java
@@ -20,6 +20,7 @@ package org.apache.shardingsphere.ha.route.engine;
 import 
org.apache.shardingsphere.infra.config.properties.ConfigurationProperties;
 import org.apache.shardingsphere.infra.metadata.ShardingSphereMetaData;
 import 
org.apache.shardingsphere.infra.metadata.resource.ShardingSphereResource;
+import 
org.apache.shardingsphere.infra.metadata.rule.ShardingSphereRuleMetaData;
 import org.apache.shardingsphere.infra.route.SQLRouter;
 import org.apache.shardingsphere.infra.route.context.RouteContext;
 import org.apache.shardingsphere.infra.route.context.RouteMapper;
@@ -92,8 +93,8 @@ public final class HASQLRouterTest {
     @Test
     public void assertCreateRouteContextToPrimaryWithoutRouteUnits() {
         LogicSQL logicSQL = new LogicSQL(mock(SQLStatementContext.class), "", 
Collections.emptyList());
-        ShardingSphereMetaData metaData = new 
ShardingSphereMetaData("logic_schema", Collections.emptyList(), 
Collections.singleton(rule),
-                mock(ShardingSphereResource.class, RETURNS_DEEP_STUBS), 
mock(ShardingSphereSchema.class));
+        ShardingSphereMetaData metaData = new 
ShardingSphereMetaData("logic_schema",
+                mock(ShardingSphereResource.class, RETURNS_DEEP_STUBS), new 
ShardingSphereRuleMetaData(Collections.emptyList(), 
Collections.singleton(rule)), mock(ShardingSphereSchema.class));
         RouteContext actual = sqlRouter.createRouteContext(logicSQL, metaData, 
rule, new ConfigurationProperties(new Properties()));
         Iterator<String> routedDataSourceNames = 
actual.getActualDataSourceNames().iterator();
         assertThat(routedDataSourceNames.next(), is(PRIMARY_DATASOURCE));
@@ -103,8 +104,8 @@ public final class HASQLRouterTest {
     public void assertDecorateRouteContextToPrimaryDataSource() {
         RouteContext actual = mockRouteContext();
         LogicSQL logicSQL = new LogicSQL(mock(SQLStatementContext.class), "", 
Collections.emptyList());
-        ShardingSphereMetaData metaData = new 
ShardingSphereMetaData("logic_schema", Collections.emptyList(), 
Collections.singleton(rule),
-                mock(ShardingSphereResource.class, RETURNS_DEEP_STUBS), 
mock(ShardingSphereSchema.class));
+        ShardingSphereMetaData metaData = new 
ShardingSphereMetaData("logic_schema",
+                mock(ShardingSphereResource.class, RETURNS_DEEP_STUBS), new 
ShardingSphereRuleMetaData(Collections.emptyList(), 
Collections.singleton(rule)), mock(ShardingSphereSchema.class));
         sqlRouter.decorateRouteContext(actual, logicSQL, metaData, rule, new 
ConfigurationProperties(new Properties()));
         Iterator<String> routedDataSourceNames = 
actual.getActualDataSourceNames().iterator();
         assertThat(routedDataSourceNames.next(), is(NONE_HA_DATASOURCE_NAME));
@@ -117,8 +118,8 @@ public final class HASQLRouterTest {
         
when(sqlStatementContext.getSqlStatement()).thenReturn(selectStatement);
         when(selectStatement.getLock()).thenReturn(Optional.empty());
         LogicSQL logicSQL = new LogicSQL(sqlStatementContext, "", 
Collections.emptyList());
-        ShardingSphereMetaData metaData = new 
ShardingSphereMetaData("logic_schema", Collections.emptyList(), 
Collections.singleton(rule),
-                mock(ShardingSphereResource.class, RETURNS_DEEP_STUBS), 
mock(ShardingSphereSchema.class));
+        ShardingSphereMetaData metaData = new 
ShardingSphereMetaData("logic_schema",
+                mock(ShardingSphereResource.class, RETURNS_DEEP_STUBS), new 
ShardingSphereRuleMetaData(Collections.emptyList(), 
Collections.singleton(rule)), mock(ShardingSphereSchema.class));
         RouteContext actual = sqlRouter.createRouteContext(logicSQL, metaData, 
rule, new ConfigurationProperties(new Properties()));
         Iterator<String> routedDataSourceNames = 
actual.getActualDataSourceNames().iterator();
         assertThat(routedDataSourceNames.next(), is(REPLICA_DATASOURCE));
@@ -131,8 +132,8 @@ public final class HASQLRouterTest {
         
when(sqlStatementContext.getSqlStatement()).thenReturn(selectStatement);
         when(selectStatement.getLock()).thenReturn(Optional.empty());
         LogicSQL logicSQL = new LogicSQL(sqlStatementContext, "", 
Collections.emptyList());
-        ShardingSphereMetaData metaData = new 
ShardingSphereMetaData("logic_schema", Collections.emptyList(), 
Collections.singleton(rule),
-                mock(ShardingSphereResource.class, RETURNS_DEEP_STUBS), 
mock(ShardingSphereSchema.class));
+        ShardingSphereMetaData metaData = new 
ShardingSphereMetaData("logic_schema",
+                mock(ShardingSphereResource.class, RETURNS_DEEP_STUBS), new 
ShardingSphereRuleMetaData(Collections.emptyList(), 
Collections.singleton(rule)), mock(ShardingSphereSchema.class));
         sqlRouter.decorateRouteContext(actual, logicSQL, metaData, rule, new 
ConfigurationProperties(new Properties()));
         Iterator<String> routedDataSourceNames = 
actual.getActualDataSourceNames().iterator();
         assertThat(routedDataSourceNames.next(), is(NONE_HA_DATASOURCE_NAME));
@@ -145,8 +146,8 @@ public final class HASQLRouterTest {
         
when(sqlStatementContext.getSqlStatement()).thenReturn(selectStatement);
         
when(selectStatement.getLock()).thenReturn(Optional.of(mock(LockSegment.class)));
         LogicSQL logicSQL = new LogicSQL(sqlStatementContext, "", 
Collections.emptyList());
-        ShardingSphereMetaData metaData = new 
ShardingSphereMetaData("logic_schema", Collections.emptyList(), 
Collections.singleton(rule),
-                mock(ShardingSphereResource.class, RETURNS_DEEP_STUBS), 
mock(ShardingSphereSchema.class));
+        ShardingSphereMetaData metaData = new 
ShardingSphereMetaData("logic_schema",
+                mock(ShardingSphereResource.class, RETURNS_DEEP_STUBS), new 
ShardingSphereRuleMetaData(Collections.emptyList(), 
Collections.singleton(rule)), mock(ShardingSphereSchema.class));
         RouteContext actual = sqlRouter.createRouteContext(logicSQL, metaData, 
rule, new ConfigurationProperties(new Properties()));
         Iterator<String> routedDataSourceNames = 
actual.getActualDataSourceNames().iterator();
         assertThat(routedDataSourceNames.next(), is(PRIMARY_DATASOURCE));
@@ -159,8 +160,8 @@ public final class HASQLRouterTest {
         
when(sqlStatementContext.getSqlStatement()).thenReturn(selectStatement);
         
when(selectStatement.getLock()).thenReturn(Optional.of(mock(LockSegment.class)));
         LogicSQL logicSQL = new LogicSQL(sqlStatementContext, "", 
Collections.emptyList());
-        ShardingSphereMetaData metaData = new 
ShardingSphereMetaData("logic_schema", Collections.emptyList(), 
Collections.singleton(rule),
-                mock(ShardingSphereResource.class, RETURNS_DEEP_STUBS), 
mock(ShardingSphereSchema.class));
+        ShardingSphereMetaData metaData = new 
ShardingSphereMetaData("logic_schema",
+                mock(ShardingSphereResource.class, RETURNS_DEEP_STUBS), new 
ShardingSphereRuleMetaData(Collections.emptyList(), 
Collections.singleton(rule)), mock(ShardingSphereSchema.class));
         sqlRouter.decorateRouteContext(actual, logicSQL, metaData, rule, new 
ConfigurationProperties(new Properties()));
         Iterator<String> routedDataSourceNames = 
actual.getActualDataSourceNames().iterator();
         assertThat(routedDataSourceNames.next(), is(NONE_HA_DATASOURCE_NAME));
@@ -171,8 +172,8 @@ public final class HASQLRouterTest {
     public void assertCreateRouteContextToPrimaryDataSource() {
         
when(sqlStatementContext.getSqlStatement()).thenReturn(mock(InsertStatement.class));
         LogicSQL logicSQL = new LogicSQL(sqlStatementContext, "", 
Collections.emptyList());
-        ShardingSphereMetaData metaData = new 
ShardingSphereMetaData("logic_schema", Collections.emptyList(), 
Collections.singleton(rule),
-                mock(ShardingSphereResource.class, RETURNS_DEEP_STUBS), 
mock(ShardingSphereSchema.class));
+        ShardingSphereMetaData metaData = new 
ShardingSphereMetaData("logic_schema",
+                mock(ShardingSphereResource.class, RETURNS_DEEP_STUBS), new 
ShardingSphereRuleMetaData(Collections.emptyList(), 
Collections.singleton(rule)), mock(ShardingSphereSchema.class));
         RouteContext actual = sqlRouter.createRouteContext(logicSQL, metaData, 
rule, new ConfigurationProperties(new Properties()));
         Iterator<String> routedDataSourceNames = 
actual.getActualDataSourceNames().iterator();
         assertThat(routedDataSourceNames.next(), is(PRIMARY_DATASOURCE));
diff --git 
a/shardingsphere-features/shardingsphere-replica-query/shardingsphere-replica-query-route/src/test/java/org/apache/shardingsphere/replicaquery/route/engine/ReplicaQuerySQLRouterTest.java
 
b/shardingsphere-features/shardingsphere-replica-query/shardingsphere-replica-query-route/src/test/java/org/apache/shardingsphere/replicaquery/route/engine/ReplicaQuerySQLRouterTest.java
index 307cd7c..95864f1 100644
--- 
a/shardingsphere-features/shardingsphere-replica-query/shardingsphere-replica-query-route/src/test/java/org/apache/shardingsphere/replicaquery/route/engine/ReplicaQuerySQLRouterTest.java
+++ 
b/shardingsphere-features/shardingsphere-replica-query/shardingsphere-replica-query-route/src/test/java/org/apache/shardingsphere/replicaquery/route/engine/ReplicaQuerySQLRouterTest.java
@@ -22,6 +22,7 @@ import 
org.apache.shardingsphere.infra.binder.statement.SQLStatementContext;
 import 
org.apache.shardingsphere.infra.config.properties.ConfigurationProperties;
 import org.apache.shardingsphere.infra.metadata.ShardingSphereMetaData;
 import 
org.apache.shardingsphere.infra.metadata.resource.ShardingSphereResource;
+import 
org.apache.shardingsphere.infra.metadata.rule.ShardingSphereRuleMetaData;
 import org.apache.shardingsphere.infra.route.SQLRouter;
 import org.apache.shardingsphere.infra.route.context.RouteContext;
 import org.apache.shardingsphere.infra.route.context.RouteMapper;
@@ -92,8 +93,8 @@ public final class ReplicaQuerySQLRouterTest {
     @Test
     public void assertCreateRouteContextToPrimaryWithoutRouteUnits() {
         LogicSQL logicSQL = new LogicSQL(mock(SQLStatementContext.class), "", 
Collections.emptyList());
-        ShardingSphereMetaData metaData = new ShardingSphereMetaData(
-                "logic_schema", Collections.emptyList(), 
Collections.singleton(rule), mock(ShardingSphereResource.class, 
RETURNS_DEEP_STUBS), mock(ShardingSphereSchema.class));
+        ShardingSphereRuleMetaData ruleMetaData = new 
ShardingSphereRuleMetaData(Collections.emptyList(), 
Collections.singleton(rule));
+        ShardingSphereMetaData metaData = new 
ShardingSphereMetaData("logic_schema", mock(ShardingSphereResource.class, 
RETURNS_DEEP_STUBS), ruleMetaData, mock(ShardingSphereSchema.class));
         RouteContext actual = sqlRouter.createRouteContext(logicSQL, metaData, 
rule, new ConfigurationProperties(new Properties()));
         Iterator<String> routedDataSourceNames = 
actual.getActualDataSourceNames().iterator();
         assertThat(routedDataSourceNames.next(), is(PRIMARY_DATASOURCE));
@@ -103,8 +104,8 @@ public final class ReplicaQuerySQLRouterTest {
     public void assertDecorateRouteContextToPrimaryDataSource() {
         RouteContext actual = mockRouteContext();
         LogicSQL logicSQL = new LogicSQL(mock(SQLStatementContext.class), "", 
Collections.emptyList());
-        ShardingSphereMetaData metaData = new ShardingSphereMetaData(
-                "logic_schema", Collections.emptyList(), 
Collections.singleton(rule), mock(ShardingSphereResource.class, 
RETURNS_DEEP_STUBS), mock(ShardingSphereSchema.class));
+        ShardingSphereRuleMetaData ruleMetaData = new 
ShardingSphereRuleMetaData(Collections.emptyList(), 
Collections.singleton(rule));
+        ShardingSphereMetaData metaData = new 
ShardingSphereMetaData("logic_schema", mock(ShardingSphereResource.class, 
RETURNS_DEEP_STUBS), ruleMetaData, mock(ShardingSphereSchema.class));
         sqlRouter.decorateRouteContext(actual, logicSQL, metaData, rule, new 
ConfigurationProperties(new Properties()));
         Iterator<String> routedDataSourceNames = 
actual.getActualDataSourceNames().iterator();
         assertThat(routedDataSourceNames.next(), 
is(NONE_REPLICA_QUERY_DATASOURCE_NAME));
@@ -117,8 +118,8 @@ public final class ReplicaQuerySQLRouterTest {
         
when(sqlStatementContext.getSqlStatement()).thenReturn(selectStatement);
         when(selectStatement.getLock()).thenReturn(Optional.empty());
         LogicSQL logicSQL = new LogicSQL(sqlStatementContext, "", 
Collections.emptyList());
-        ShardingSphereMetaData metaData = new ShardingSphereMetaData(
-                "logic_schema", Collections.emptyList(), 
Collections.singleton(rule), mock(ShardingSphereResource.class, 
RETURNS_DEEP_STUBS), mock(ShardingSphereSchema.class));
+        ShardingSphereRuleMetaData ruleMetaData = new 
ShardingSphereRuleMetaData(Collections.emptyList(), 
Collections.singleton(rule));
+        ShardingSphereMetaData metaData = new 
ShardingSphereMetaData("logic_schema", mock(ShardingSphereResource.class, 
RETURNS_DEEP_STUBS), ruleMetaData, mock(ShardingSphereSchema.class));
         RouteContext actual = sqlRouter.createRouteContext(logicSQL, metaData, 
rule, new ConfigurationProperties(new Properties()));
         Iterator<String> routedDataSourceNames = 
actual.getActualDataSourceNames().iterator();
         assertThat(routedDataSourceNames.next(), is(REPLICA_DATASOURCE));
@@ -131,8 +132,8 @@ public final class ReplicaQuerySQLRouterTest {
         
when(sqlStatementContext.getSqlStatement()).thenReturn(selectStatement);
         when(selectStatement.getLock()).thenReturn(Optional.empty());
         LogicSQL logicSQL = new LogicSQL(sqlStatementContext, "", 
Collections.emptyList());
-        ShardingSphereMetaData metaData = new ShardingSphereMetaData(
-                "logic_schema", Collections.emptyList(), 
Collections.singleton(rule), mock(ShardingSphereResource.class, 
RETURNS_DEEP_STUBS), mock(ShardingSphereSchema.class));
+        ShardingSphereRuleMetaData ruleMetaData = new 
ShardingSphereRuleMetaData(Collections.emptyList(), 
Collections.singleton(rule));
+        ShardingSphereMetaData metaData = new 
ShardingSphereMetaData("logic_schema", mock(ShardingSphereResource.class, 
RETURNS_DEEP_STUBS), ruleMetaData, mock(ShardingSphereSchema.class));
         sqlRouter.decorateRouteContext(actual, logicSQL, metaData, rule, new 
ConfigurationProperties(new Properties()));
         Iterator<String> routedDataSourceNames = 
actual.getActualDataSourceNames().iterator();
         assertThat(routedDataSourceNames.next(), 
is(NONE_REPLICA_QUERY_DATASOURCE_NAME));
@@ -145,8 +146,8 @@ public final class ReplicaQuerySQLRouterTest {
         
when(sqlStatementContext.getSqlStatement()).thenReturn(selectStatement);
         
when(selectStatement.getLock()).thenReturn(Optional.of(mock(LockSegment.class)));
         LogicSQL logicSQL = new LogicSQL(sqlStatementContext, "", 
Collections.emptyList());
-        ShardingSphereMetaData metaData = new ShardingSphereMetaData(
-                "logic_schema", Collections.emptyList(), 
Collections.singleton(rule), mock(ShardingSphereResource.class, 
RETURNS_DEEP_STUBS), mock(ShardingSphereSchema.class));
+        ShardingSphereRuleMetaData ruleMetaData = new 
ShardingSphereRuleMetaData(Collections.emptyList(), 
Collections.singleton(rule));
+        ShardingSphereMetaData metaData = new 
ShardingSphereMetaData("logic_schema", mock(ShardingSphereResource.class, 
RETURNS_DEEP_STUBS), ruleMetaData, mock(ShardingSphereSchema.class));
         RouteContext actual = sqlRouter.createRouteContext(logicSQL, metaData, 
rule, new ConfigurationProperties(new Properties()));
         Iterator<String> routedDataSourceNames = 
actual.getActualDataSourceNames().iterator();
         assertThat(routedDataSourceNames.next(), is(PRIMARY_DATASOURCE));
@@ -159,8 +160,8 @@ public final class ReplicaQuerySQLRouterTest {
         
when(sqlStatementContext.getSqlStatement()).thenReturn(selectStatement);
         
when(selectStatement.getLock()).thenReturn(Optional.of(mock(LockSegment.class)));
         LogicSQL logicSQL = new LogicSQL(sqlStatementContext, "", 
Collections.emptyList());
-        ShardingSphereMetaData metaData = new ShardingSphereMetaData(
-                "logic_schema", Collections.emptyList(), 
Collections.singleton(rule), mock(ShardingSphereResource.class, 
RETURNS_DEEP_STUBS), mock(ShardingSphereSchema.class));
+        ShardingSphereRuleMetaData ruleMetaData = new 
ShardingSphereRuleMetaData(Collections.emptyList(), 
Collections.singleton(rule));
+        ShardingSphereMetaData metaData = new 
ShardingSphereMetaData("logic_schema", mock(ShardingSphereResource.class, 
RETURNS_DEEP_STUBS), ruleMetaData, mock(ShardingSphereSchema.class));
         sqlRouter.decorateRouteContext(actual, logicSQL, metaData, rule, new 
ConfigurationProperties(new Properties()));
         Iterator<String> routedDataSourceNames = 
actual.getActualDataSourceNames().iterator();
         assertThat(routedDataSourceNames.next(), 
is(NONE_REPLICA_QUERY_DATASOURCE_NAME));
@@ -171,8 +172,8 @@ public final class ReplicaQuerySQLRouterTest {
     public void assertCreateRouteContextToPrimaryDataSource() {
         
when(sqlStatementContext.getSqlStatement()).thenReturn(mock(InsertStatement.class));
         LogicSQL logicSQL = new LogicSQL(sqlStatementContext, "", 
Collections.emptyList());
-        ShardingSphereMetaData metaData = new ShardingSphereMetaData(
-                "logic_schema", Collections.emptyList(), 
Collections.singleton(rule), mock(ShardingSphereResource.class, 
RETURNS_DEEP_STUBS), mock(ShardingSphereSchema.class));
+        ShardingSphereRuleMetaData ruleMetaData = new 
ShardingSphereRuleMetaData(Collections.emptyList(), 
Collections.singleton(rule));
+        ShardingSphereMetaData metaData = new 
ShardingSphereMetaData("logic_schema", mock(ShardingSphereResource.class, 
RETURNS_DEEP_STUBS), ruleMetaData, mock(ShardingSphereSchema.class));
         RouteContext actual = sqlRouter.createRouteContext(logicSQL, metaData, 
rule, new ConfigurationProperties(new Properties()));
         Iterator<String> routedDataSourceNames = 
actual.getActualDataSourceNames().iterator();
         assertThat(routedDataSourceNames.next(), is(PRIMARY_DATASOURCE));
diff --git 
a/shardingsphere-features/shardingsphere-shadow/shardingsphere-shadow-route/src/test/java/org/apache/shardingsphere/shadow/route/engine/ShadowSQLRouterTest.java
 
b/shardingsphere-features/shardingsphere-shadow/shardingsphere-shadow-route/src/test/java/org/apache/shardingsphere/shadow/route/engine/ShadowSQLRouterTest.java
index 06cd628..a36b1f5 100644
--- 
a/shardingsphere-features/shardingsphere-shadow/shardingsphere-shadow-route/src/test/java/org/apache/shardingsphere/shadow/route/engine/ShadowSQLRouterTest.java
+++ 
b/shardingsphere-features/shardingsphere-shadow/shardingsphere-shadow-route/src/test/java/org/apache/shardingsphere/shadow/route/engine/ShadowSQLRouterTest.java
@@ -24,6 +24,7 @@ import 
org.apache.shardingsphere.infra.binder.statement.dml.InsertStatementConte
 import 
org.apache.shardingsphere.infra.config.properties.ConfigurationProperties;
 import org.apache.shardingsphere.infra.metadata.ShardingSphereMetaData;
 import 
org.apache.shardingsphere.infra.metadata.resource.ShardingSphereResource;
+import 
org.apache.shardingsphere.infra.metadata.rule.ShardingSphereRuleMetaData;
 import org.apache.shardingsphere.infra.route.SQLRouter;
 import org.apache.shardingsphere.infra.route.context.RouteContext;
 import org.apache.shardingsphere.infra.route.context.RouteMapper;
@@ -79,8 +80,8 @@ public final class ShadowSQLRouterTest {
     @Test
     public void assertCreateRouteContextToShadowDataSource() {
         LogicSQL logicSQL = new LogicSQL(mockSQLStatementContextForShadow(), 
"", Collections.emptyList());
-        ShardingSphereMetaData metaData = new ShardingSphereMetaData(
-                "logic_schema", Collections.emptyList(), 
Collections.singleton(rule), mock(ShardingSphereResource.class, 
RETURNS_DEEP_STUBS), mock(ShardingSphereSchema.class));
+        ShardingSphereRuleMetaData ruleMetaData = new 
ShardingSphereRuleMetaData(Collections.emptyList(), 
Collections.singleton(rule));
+        ShardingSphereMetaData metaData = new 
ShardingSphereMetaData("logic_schema", mock(ShardingSphereResource.class, 
RETURNS_DEEP_STUBS), ruleMetaData, mock(ShardingSphereSchema.class));
         RouteContext actual = sqlRouter.createRouteContext(logicSQL, metaData, 
rule, new ConfigurationProperties(new Properties()));
         Iterator<String> routedDataSourceNames = 
actual.getActualDataSourceNames().iterator();
         assertThat(routedDataSourceNames.next(), is(SHADOW_DATASOURCE));
@@ -89,8 +90,8 @@ public final class ShadowSQLRouterTest {
     @Test
     public void assertCreateRouteContextToActualDataSource() {
         LogicSQL logicSQL = new LogicSQL(mockSQLStatementContext(), "", 
Collections.emptyList());
-        ShardingSphereMetaData metaData = new ShardingSphereMetaData(
-                "logic_schema", Collections.emptyList(), 
Collections.singleton(rule), mock(ShardingSphereResource.class, 
RETURNS_DEEP_STUBS), mock(ShardingSphereSchema.class));
+        ShardingSphereRuleMetaData ruleMetaData = new 
ShardingSphereRuleMetaData(Collections.emptyList(), 
Collections.singleton(rule));
+        ShardingSphereMetaData metaData = new 
ShardingSphereMetaData("logic_schema", mock(ShardingSphereResource.class, 
RETURNS_DEEP_STUBS), ruleMetaData, mock(ShardingSphereSchema.class));
         RouteContext actual = sqlRouter.createRouteContext(logicSQL, metaData, 
rule, new ConfigurationProperties(new Properties()));
         Iterator<String> routedDataSourceNames = 
actual.getActualDataSourceNames().iterator();
         assertThat(routedDataSourceNames.next(), is(ACTUAL_DATASOURCE));
@@ -99,8 +100,8 @@ public final class ShadowSQLRouterTest {
     @Test
     public void assertCreateRouteContextForNonDMLStatement() {
         LogicSQL logicSQL = new LogicSQL(mockNonDMLSQLStatementContext(), "", 
Collections.emptyList());
-        ShardingSphereMetaData metaData = new ShardingSphereMetaData(
-                "logic_schema", Collections.emptyList(), 
Collections.singleton(rule), mock(ShardingSphereResource.class, 
RETURNS_DEEP_STUBS), mock(ShardingSphereSchema.class));
+        ShardingSphereRuleMetaData ruleMetaData = new 
ShardingSphereRuleMetaData(Collections.emptyList(), 
Collections.singleton(rule));
+        ShardingSphereMetaData metaData = new 
ShardingSphereMetaData("logic_schema", mock(ShardingSphereResource.class, 
RETURNS_DEEP_STUBS), ruleMetaData, mock(ShardingSphereSchema.class));
         RouteContext actual = sqlRouter.createRouteContext(logicSQL, metaData, 
rule, new ConfigurationProperties(new Properties()));
         assertThat(actual.getRouteUnits().size(), is(2));
         
assertTrue(actual.getActualDataSourceNames().contains(SHADOW_DATASOURCE));
@@ -112,8 +113,9 @@ public final class ShadowSQLRouterTest {
         RouteContext actual = new RouteContext();
         actual.getRouteUnits().add(mockRouteUnit());
         LogicSQL logicSQL = new LogicSQL(mockSQLStatementContextForShadow(), 
"", Collections.emptyList());
+        ShardingSphereRuleMetaData ruleMetaData = new 
ShardingSphereRuleMetaData(Collections.emptyList(), 
Collections.singleton(rule));
         ShardingSphereMetaData metaData = new ShardingSphereMetaData(
-                "logic_schema", Collections.emptyList(), 
Collections.singleton(rule), mock(ShardingSphereResource.class, 
RETURNS_DEEP_STUBS), mock(ShardingSphereSchema.class));
+                "logic_schema", mock(ShardingSphereResource.class, 
RETURNS_DEEP_STUBS), ruleMetaData, mock(ShardingSphereSchema.class));
         sqlRouter.decorateRouteContext(actual, logicSQL, metaData, rule, new 
ConfigurationProperties(new Properties()));
         assertThat(actual.getRouteUnits().size(), is(1));
         
assertTrue(actual.getActualDataSourceNames().contains(SHADOW_DATASOURCE));
@@ -124,8 +126,8 @@ public final class ShadowSQLRouterTest {
         RouteContext actual = new RouteContext();
         actual.getRouteUnits().add(mockRouteUnit());
         LogicSQL logicSQL = new LogicSQL(mockSQLStatementContext(), "", 
Collections.emptyList());
-        ShardingSphereMetaData metaData = new ShardingSphereMetaData(
-                "logic_schema", Collections.emptyList(), 
Collections.singleton(rule), mock(ShardingSphereResource.class, 
RETURNS_DEEP_STUBS), mock(ShardingSphereSchema.class));
+        ShardingSphereRuleMetaData ruleMetaData = new 
ShardingSphereRuleMetaData(Collections.emptyList(), 
Collections.singleton(rule));
+        ShardingSphereMetaData metaData = new 
ShardingSphereMetaData("logic_schema", mock(ShardingSphereResource.class, 
RETURNS_DEEP_STUBS), ruleMetaData, mock(ShardingSphereSchema.class));
         sqlRouter.decorateRouteContext(actual, logicSQL, metaData, rule, new 
ConfigurationProperties(new Properties()));
         Iterator<String> routedDataSourceNames = 
actual.getActualDataSourceNames().iterator();
         assertThat(routedDataSourceNames.next(), is(ACTUAL_DATASOURCE));
@@ -136,8 +138,8 @@ public final class ShadowSQLRouterTest {
         RouteContext actual = new RouteContext();
         actual.getRouteUnits().add(mockRouteUnit());
         LogicSQL logicSQL = new LogicSQL(mockNonDMLSQLStatementContext(), "", 
Collections.emptyList());
-        ShardingSphereMetaData metaData = new ShardingSphereMetaData(
-                "logic_schema", Collections.emptyList(), 
Collections.singleton(rule), mock(ShardingSphereResource.class, 
RETURNS_DEEP_STUBS), mock(ShardingSphereSchema.class));
+        ShardingSphereRuleMetaData ruleMetaData = new 
ShardingSphereRuleMetaData(Collections.emptyList(), 
Collections.singleton(rule));
+        ShardingSphereMetaData metaData = new 
ShardingSphereMetaData("logic_schema", mock(ShardingSphereResource.class, 
RETURNS_DEEP_STUBS), ruleMetaData, mock(ShardingSphereSchema.class));
         sqlRouter.decorateRouteContext(actual, logicSQL, metaData, rule, new 
ConfigurationProperties(new Properties()));
         assertThat(actual.getRouteUnits().size(), is(2));
         
assertTrue(actual.getActualDataSourceNames().contains(SHADOW_DATASOURCE));
@@ -149,8 +151,8 @@ public final class ShadowSQLRouterTest {
         RouteContext actual = new RouteContext();
         actual.getRouteUnits().add(mockRouteUnit());
         LogicSQL logicSQL = new LogicSQL(mockSQLStatementContextForShadow(), 
"", Collections.emptyList());
-        ShardingSphereMetaData metaData = new ShardingSphereMetaData(
-                "logic_schema", Collections.emptyList(), 
Collections.singleton(rule), mock(ShardingSphereResource.class, 
RETURNS_DEEP_STUBS), mock(ShardingSphereSchema.class));
+        ShardingSphereRuleMetaData ruleMetaData = new 
ShardingSphereRuleMetaData(Collections.emptyList(), 
Collections.singleton(rule));
+        ShardingSphereMetaData metaData = new 
ShardingSphereMetaData("logic_schema", mock(ShardingSphereResource.class, 
RETURNS_DEEP_STUBS), ruleMetaData, mock(ShardingSphereSchema.class));
         sqlRouter.decorateRouteContext(actual, logicSQL, metaData, rule, new 
ConfigurationProperties(new Properties()));
         assertThat(actual.getRouteUnits().size(), is(1));
         
assertTrue(actual.getActualDataSourceNames().contains(SHADOW_DATASOURCE));
diff --git 
a/shardingsphere-features/shardingsphere-sharding/shardingsphere-sharding-rewrite/src/test/java/org/apache/shardingsphere/sharding/rewrite/parameterized/MixSQLRewriterParameterizedTest.java
 
b/shardingsphere-features/shardingsphere-sharding/shardingsphere-sharding-rewrite/src/test/java/org/apache/shardingsphere/sharding/rewrite/parameterized/MixSQLRewriterParameterizedTest.java
index aebe0e0..911179e 100644
--- 
a/shardingsphere-features/shardingsphere-sharding/shardingsphere-sharding-rewrite/src/test/java/org/apache/shardingsphere/sharding/rewrite/parameterized/MixSQLRewriterParameterizedTest.java
+++ 
b/shardingsphere-features/shardingsphere-sharding/shardingsphere-sharding-rewrite/src/test/java/org/apache/shardingsphere/sharding/rewrite/parameterized/MixSQLRewriterParameterizedTest.java
@@ -24,6 +24,7 @@ import 
org.apache.shardingsphere.infra.binder.statement.SQLStatementContext;
 import 
org.apache.shardingsphere.infra.config.properties.ConfigurationProperties;
 import org.apache.shardingsphere.infra.metadata.ShardingSphereMetaData;
 import 
org.apache.shardingsphere.infra.metadata.resource.ShardingSphereResource;
+import 
org.apache.shardingsphere.infra.metadata.rule.ShardingSphereRuleMetaData;
 import org.apache.shardingsphere.infra.parser.sql.SQLStatementParserEngine;
 import org.apache.shardingsphere.infra.rewrite.SQLRewriteEntry;
 import 
org.apache.shardingsphere.infra.rewrite.engine.result.GenericSQLRewriteResult;
@@ -86,7 +87,7 @@ public final class MixSQLRewriterParameterizedTest extends 
AbstractSQLRewriterPa
         SQLStatementContext<?> sqlStatementContext = 
SQLStatementContextFactory.newInstance(schema.getSchemaMetaData(),
                 getTestParameters().getInputParameters(), 
sqlStatementParserEngine.parse(getTestParameters().getInputSQL(), false));
         LogicSQL logicSQL = new LogicSQL(sqlStatementContext, 
getTestParameters().getInputSQL(), getTestParameters().getInputParameters());
-        ShardingSphereMetaData metaData = new 
ShardingSphereMetaData("sharding_db", Collections.emptyList(), rules, 
mock(ShardingSphereResource.class), schema);
+        ShardingSphereMetaData metaData = new 
ShardingSphereMetaData("sharding_db", mock(ShardingSphereResource.class), new 
ShardingSphereRuleMetaData(Collections.emptyList(), rules), schema);
         RouteContext routeContext = new SQLRouteEngine(rules, 
props).route(logicSQL, metaData);
         SQLRewriteResult sqlRewriteResult = new SQLRewriteEntry(
                 schema.getSchemaMetaData(), props, 
rules).rewrite(getTestParameters().getInputSQL(), 
getTestParameters().getInputParameters(), sqlStatementContext, routeContext);
diff --git 
a/shardingsphere-features/shardingsphere-sharding/shardingsphere-sharding-rewrite/src/test/java/org/apache/shardingsphere/sharding/rewrite/parameterized/ShardingSQLRewriterParameterizedTest.java
 
b/shardingsphere-features/shardingsphere-sharding/shardingsphere-sharding-rewrite/src/test/java/org/apache/shardingsphere/sharding/rewrite/parameterized/ShardingSQLRewriterParameterizedTest.java
index 94d7eb6..d67dd1e 100644
--- 
a/shardingsphere-features/shardingsphere-sharding/shardingsphere-sharding-rewrite/src/test/java/org/apache/shardingsphere/sharding/rewrite/parameterized/ShardingSQLRewriterParameterizedTest.java
+++ 
b/shardingsphere-features/shardingsphere-sharding/shardingsphere-sharding-rewrite/src/test/java/org/apache/shardingsphere/sharding/rewrite/parameterized/ShardingSQLRewriterParameterizedTest.java
@@ -24,6 +24,7 @@ import 
org.apache.shardingsphere.infra.binder.statement.SQLStatementContext;
 import 
org.apache.shardingsphere.infra.config.properties.ConfigurationProperties;
 import org.apache.shardingsphere.infra.metadata.ShardingSphereMetaData;
 import 
org.apache.shardingsphere.infra.metadata.resource.ShardingSphereResource;
+import 
org.apache.shardingsphere.infra.metadata.rule.ShardingSphereRuleMetaData;
 import org.apache.shardingsphere.infra.parser.sql.SQLStatementParserEngine;
 import org.apache.shardingsphere.infra.rewrite.SQLRewriteEntry;
 import 
org.apache.shardingsphere.infra.rewrite.engine.result.GenericSQLRewriteResult;
@@ -86,7 +87,7 @@ public final class ShardingSQLRewriterParameterizedTest 
extends AbstractSQLRewri
         SQLStatementContext<?> sqlStatementContext = 
SQLStatementContextFactory.newInstance(schema.getSchemaMetaData(), 
                 getTestParameters().getInputParameters(), 
sqlStatementParserEngine.parse(getTestParameters().getInputSQL(), false));
         LogicSQL logicSQL = new LogicSQL(sqlStatementContext, 
getTestParameters().getInputSQL(), getTestParameters().getInputParameters());
-        ShardingSphereMetaData metaData = new 
ShardingSphereMetaData("sharding_db", Collections.emptyList(), rules, 
mock(ShardingSphereResource.class), schema);
+        ShardingSphereMetaData metaData = new 
ShardingSphereMetaData("sharding_db", mock(ShardingSphereResource.class), new 
ShardingSphereRuleMetaData(Collections.emptyList(), rules), schema);
         RouteContext routeContext = new SQLRouteEngine(rules, 
props).route(logicSQL, metaData);
         SQLRewriteResult sqlRewriteResult = new 
SQLRewriteEntry(schema.getSchemaMetaData(),
                 props, rules).rewrite(getTestParameters().getInputSQL(), 
getTestParameters().getInputParameters(), sqlStatementContext, routeContext);
diff --git 
a/shardingsphere-features/shardingsphere-sharding/shardingsphere-sharding-route/src/test/java/org/apache/shardingsphere/sharding/route/engine/type/standard/AbstractSQLRouteTest.java
 
b/shardingsphere-features/shardingsphere-sharding/shardingsphere-sharding-route/src/test/java/org/apache/shardingsphere/sharding/route/engine/type/standard/AbstractSQLRouteTest.java
index 1d0d762..4ee7e5c 100644
--- 
a/shardingsphere-features/shardingsphere-sharding/shardingsphere-sharding-route/src/test/java/org/apache/shardingsphere/sharding/route/engine/type/standard/AbstractSQLRouteTest.java
+++ 
b/shardingsphere-features/shardingsphere-sharding/shardingsphere-sharding-route/src/test/java/org/apache/shardingsphere/sharding/route/engine/type/standard/AbstractSQLRouteTest.java
@@ -23,6 +23,7 @@ import 
org.apache.shardingsphere.infra.binder.statement.SQLStatementContext;
 import 
org.apache.shardingsphere.infra.config.properties.ConfigurationProperties;
 import org.apache.shardingsphere.infra.metadata.ShardingSphereMetaData;
 import 
org.apache.shardingsphere.infra.metadata.resource.ShardingSphereResource;
+import 
org.apache.shardingsphere.infra.metadata.rule.ShardingSphereRuleMetaData;
 import org.apache.shardingsphere.infra.parser.sql.SQLStatementParserEngine;
 import org.apache.shardingsphere.infra.route.context.RouteContext;
 import org.apache.shardingsphere.infra.route.engine.SQLRouteEngine;
@@ -58,8 +59,8 @@ public abstract class AbstractSQLRouteTest extends 
AbstractRoutingEngineTest {
         SQLStatementParserEngine sqlStatementParserEngine = new 
SQLStatementParserEngine("MySQL");
         SQLStatementContext<?> sqlStatementContext = 
SQLStatementContextFactory.newInstance(schema.getSchemaMetaData(), parameters, 
sqlStatementParserEngine.parse(sql, false));
         LogicSQL logicSQL = new LogicSQL(sqlStatementContext, sql, parameters);
-        ShardingSphereMetaData metaData = new ShardingSphereMetaData(
-                "sharding_db", Collections.emptyList(), 
Collections.singleton(shardingRule), mock(ShardingSphereResource.class, 
RETURNS_DEEP_STUBS), schema);
+        ShardingSphereRuleMetaData ruleMetaData = new 
ShardingSphereRuleMetaData(Collections.emptyList(), 
Collections.singleton(shardingRule));
+        ShardingSphereMetaData metaData = new 
ShardingSphereMetaData("sharding_db", mock(ShardingSphereResource.class, 
RETURNS_DEEP_STUBS), ruleMetaData, schema);
         RouteContext result = new 
SQLRouteEngine(Collections.singletonList(shardingRule), props).route(logicSQL, 
metaData);
         assertThat(result.getRouteUnits().size(), is(1));
         return result;
diff --git 
a/shardingsphere-governance/shardingsphere-governance-core/shardingsphere-governance-core-context/src/main/java/org/apache/shardingsphere/governance/context/schema/GovernanceSchemaContexts.java
 
b/shardingsphere-governance/shardingsphere-governance-core/shardingsphere-governance-core-context/src/main/java/org/apache/shardingsphere/governance/context/schema/GovernanceSchemaContexts.java
index 02087c0..3391fad 100644
--- 
a/shardingsphere-governance/shardingsphere-governance-core/shardingsphere-governance-core-context/src/main/java/org/apache/shardingsphere/governance/context/schema/GovernanceSchemaContexts.java
+++ 
b/shardingsphere-governance/shardingsphere-governance-core/shardingsphere-governance-core-context/src/main/java/org/apache/shardingsphere/governance/context/schema/GovernanceSchemaContexts.java
@@ -82,7 +82,7 @@ public final class GovernanceSchemaContexts implements 
SchemaContexts {
     
     private void disableDataSources() {
         schemaContexts.getMetaDataMap().forEach((key, value)
-            -> value.getRules().stream().filter(each -> each instanceof 
StatusContainedRule).forEach(each -> disableDataSources(key, 
(StatusContainedRule) each)));
+            -> value.getRuleMetaData().getRules().stream().filter(each -> each 
instanceof StatusContainedRule).forEach(each -> disableDataSources(key, 
(StatusContainedRule) each)));
     }
     
     private void disableDataSources(final String schemaName, final 
StatusContainedRule rule) {
@@ -261,7 +261,7 @@ public final class GovernanceSchemaContexts implements 
SchemaContexts {
     @Subscribe
     public synchronized void renew(final DisabledStateChangedEvent event) {
         GovernanceSchema governanceSchema = event.getGovernanceSchema();
-        Collection<ShardingSphereRule> rules = 
schemaContexts.getMetaDataMap().get(governanceSchema.getSchemaName()).getRules();
+        Collection<ShardingSphereRule> rules = 
schemaContexts.getMetaDataMap().get(governanceSchema.getSchemaName()).getRuleMetaData().getRules();
         for (ShardingSphereRule each : rules) {
             if (each instanceof StatusContainedRule) {
                 ((StatusContainedRule) each).updateRuleStatus(new 
DataSourceNameDisabledEvent(governanceSchema.getDataSourceName(), 
event.isDisabled()));
@@ -301,7 +301,7 @@ public final class GovernanceSchemaContexts implements 
SchemaContexts {
     private ShardingSphereMetaData getChangedMetaData(final 
ShardingSphereMetaData oldMetaData, final PhysicalSchemaMetaData 
newSchemaMetaData, final String schemaName) {
         // TODO refresh tableAddressingMetaData
         ShardingSphereSchema schema = new 
ShardingSphereSchema(oldMetaData.getSchema().getTableAddressingMetaData(), 
newSchemaMetaData);
-        return new ShardingSphereMetaData(schemaName, 
oldMetaData.getConfigurations(), oldMetaData.getRules(), 
oldMetaData.getResource(), schema);
+        return new ShardingSphereMetaData(schemaName, 
oldMetaData.getResource(), oldMetaData.getRuleMetaData(), schema);
     }
     
     private ShardingSphereMetaData getChangedMetaData(final 
ShardingSphereMetaData oldMetaData, final Collection<RuleConfiguration> 
ruleConfigs) throws SQLException {
@@ -318,7 +318,7 @@ public final class GovernanceSchemaContexts implements 
SchemaContexts {
         Map<String, Map<String, DataSource>> dataSourcesMap = 
Collections.singletonMap(oldMetaData.getName(), 
                 getNewDataSources(oldMetaData.getResource().getDataSources(), 
getAddedDataSources(oldMetaData, newDataSourceConfigs), modifiedDataSources, 
deletedDataSources));
         return new SchemaContextsBuilder(schemaContexts.getDatabaseType(), 
dataSourcesMap,
-                Collections.singletonMap(oldMetaData.getName(), 
oldMetaData.getConfigurations()), schemaContexts.getAuthentication(), 
+                Collections.singletonMap(oldMetaData.getName(), 
oldMetaData.getRuleMetaData().getConfigurations()), 
schemaContexts.getAuthentication(), 
                 
schemaContexts.getProps().getProps()).build().getMetaDataMap().get(oldMetaData.getName());
     }
     
diff --git 
a/shardingsphere-governance/shardingsphere-governance-core/shardingsphere-governance-core-context/src/test/java/org/apache/shardingsphere/governance/context/schema/GovernanceSchemaContextsTest.java
 
b/shardingsphere-governance/shardingsphere-governance-core/shardingsphere-governance-core-context/src/test/java/org/apache/shardingsphere/governance/context/schema/GovernanceSchemaContextsTest.java
index 351a45d..c5911c8 100644
--- 
a/shardingsphere-governance/shardingsphere-governance-core/shardingsphere-governance-core-context/src/test/java/org/apache/shardingsphere/governance/context/schema/GovernanceSchemaContextsTest.java
+++ 
b/shardingsphere-governance/shardingsphere-governance-core/shardingsphere-governance-core-context/src/test/java/org/apache/shardingsphere/governance/context/schema/GovernanceSchemaContextsTest.java
@@ -48,6 +48,7 @@ import 
org.apache.shardingsphere.replicaquery.rule.ReplicaQueryRule;
 import org.junit.Before;
 import org.junit.Test;
 import org.junit.runner.RunWith;
+import org.mockito.Answers;
 import org.mockito.Mock;
 import org.mockito.junit.MockitoJUnitRunner;
 
@@ -91,7 +92,7 @@ public final class GovernanceSchemaContextsTest {
     @Mock
     private ConfigCenter configCenter;
     
-    @Mock
+    @Mock(answer = Answers.RETURNS_DEEP_STUBS)
     private ShardingSphereMetaData metaData;
     
     @Mock
@@ -113,7 +114,7 @@ public final class GovernanceSchemaContextsTest {
         when(metaData.getName()).thenReturn("schema");
         
when(metaData.getResource()).thenReturn(mock(ShardingSphereResource.class));
         
when(metaData.getSchema()).thenReturn(mock(ShardingSphereSchema.class));
-        
when(metaData.getRules()).thenReturn(Collections.singletonList(replicaQueryRule));
+        
when(metaData.getRuleMetaData().getRules()).thenReturn(Collections.singletonList(replicaQueryRule));
         return Collections.singletonMap("schema", metaData);
     }
     
diff --git 
a/shardingsphere-infra/shardingsphere-infra-common/src/main/java/org/apache/shardingsphere/infra/metadata/ShardingSphereMetaData.java
 
b/shardingsphere-infra/shardingsphere-infra-common/src/main/java/org/apache/shardingsphere/infra/metadata/ShardingSphereMetaData.java
index b1fae59..279943d 100644
--- 
a/shardingsphere-infra/shardingsphere-infra-common/src/main/java/org/apache/shardingsphere/infra/metadata/ShardingSphereMetaData.java
+++ 
b/shardingsphere-infra/shardingsphere-infra-common/src/main/java/org/apache/shardingsphere/infra/metadata/ShardingSphereMetaData.java
@@ -19,13 +19,10 @@ package org.apache.shardingsphere.infra.metadata;
 
 import lombok.Getter;
 import lombok.RequiredArgsConstructor;
-import org.apache.shardingsphere.infra.config.RuleConfiguration;
 import 
org.apache.shardingsphere.infra.metadata.resource.ShardingSphereResource;
-import org.apache.shardingsphere.infra.rule.ShardingSphereRule;
+import 
org.apache.shardingsphere.infra.metadata.rule.ShardingSphereRuleMetaData;
 import org.apache.shardingsphere.infra.schema.model.ShardingSphereSchema;
 
-import java.util.Collection;
-
 /**
  * ShardingSphere meta data.
  */
@@ -35,12 +32,10 @@ public final class ShardingSphereMetaData {
     
     private final String name;
     
-    private final Collection<RuleConfiguration> configurations;
-    
-    private final Collection<ShardingSphereRule> rules;
-    
     private final ShardingSphereResource resource;
     
+    private final ShardingSphereRuleMetaData ruleMetaData;
+    
     private final ShardingSphereSchema schema;
     
     /**
@@ -49,6 +44,6 @@ public final class ShardingSphereMetaData {
      * @return is complete schema context or not
      */
     public boolean isComplete() {
-        return !rules.isEmpty() && !resource.getDataSources().isEmpty();
+        return !ruleMetaData.getRules().isEmpty() && 
!resource.getDataSources().isEmpty();
     }
 }
diff --git 
a/shardingsphere-infra/shardingsphere-infra-common/src/main/java/org/apache/shardingsphere/infra/metadata/ShardingSphereMetaData.java
 
b/shardingsphere-infra/shardingsphere-infra-common/src/main/java/org/apache/shardingsphere/infra/metadata/rule/ShardingSphereRuleMetaData.java
similarity index 64%
copy from 
shardingsphere-infra/shardingsphere-infra-common/src/main/java/org/apache/shardingsphere/infra/metadata/ShardingSphereMetaData.java
copy to 
shardingsphere-infra/shardingsphere-infra-common/src/main/java/org/apache/shardingsphere/infra/metadata/rule/ShardingSphereRuleMetaData.java
index b1fae59..5e64457 100644
--- 
a/shardingsphere-infra/shardingsphere-infra-common/src/main/java/org/apache/shardingsphere/infra/metadata/ShardingSphereMetaData.java
+++ 
b/shardingsphere-infra/shardingsphere-infra-common/src/main/java/org/apache/shardingsphere/infra/metadata/rule/ShardingSphereRuleMetaData.java
@@ -15,40 +15,23 @@
  * limitations under the License.
  */
 
-package org.apache.shardingsphere.infra.metadata;
+package org.apache.shardingsphere.infra.metadata.rule;
 
 import lombok.Getter;
 import lombok.RequiredArgsConstructor;
 import org.apache.shardingsphere.infra.config.RuleConfiguration;
-import 
org.apache.shardingsphere.infra.metadata.resource.ShardingSphereResource;
 import org.apache.shardingsphere.infra.rule.ShardingSphereRule;
-import org.apache.shardingsphere.infra.schema.model.ShardingSphereSchema;
 
 import java.util.Collection;
 
 /**
- * ShardingSphere meta data.
+ * ShardingSphere rule meta data.
  */
 @RequiredArgsConstructor
 @Getter
-public final class ShardingSphereMetaData {
-    
-    private final String name;
+public final class ShardingSphereRuleMetaData {
     
     private final Collection<RuleConfiguration> configurations;
     
     private final Collection<ShardingSphereRule> rules;
-    
-    private final ShardingSphereResource resource;
-    
-    private final ShardingSphereSchema schema;
-    
-    /**
-     * Is complete schema context.
-     *
-     * @return is complete schema context or not
-     */
-    public boolean isComplete() {
-        return !rules.isEmpty() && !resource.getDataSources().isEmpty();
-    }
 }
diff --git 
a/shardingsphere-infra/shardingsphere-infra-common/src/test/java/org/apache/shardingsphere/infra/metadata/ShardingSphereMetaDataTest.java
 
b/shardingsphere-infra/shardingsphere-infra-common/src/test/java/org/apache/shardingsphere/infra/metadata/ShardingSphereMetaDataTest.java
index dc1ffe9..228869d 100644
--- 
a/shardingsphere-infra/shardingsphere-infra-common/src/test/java/org/apache/shardingsphere/infra/metadata/ShardingSphereMetaDataTest.java
+++ 
b/shardingsphere-infra/shardingsphere-infra-common/src/test/java/org/apache/shardingsphere/infra/metadata/ShardingSphereMetaDataTest.java
@@ -19,6 +19,7 @@ package org.apache.shardingsphere.infra.metadata;
 
 import org.apache.shardingsphere.infra.config.RuleConfiguration;
 import 
org.apache.shardingsphere.infra.metadata.resource.ShardingSphereResource;
+import 
org.apache.shardingsphere.infra.metadata.rule.ShardingSphereRuleMetaData;
 import org.apache.shardingsphere.infra.rule.ShardingSphereRule;
 import org.apache.shardingsphere.infra.schema.model.ShardingSphereSchema;
 import 
org.apache.shardingsphere.infra.schema.model.datasource.CachedDatabaseMetaData;
@@ -37,23 +38,24 @@ public final class ShardingSphereMetaDataTest {
     @Test
     public void assertIsComplete() {
         ShardingSphereResource resource = new 
ShardingSphereResource(Collections.singletonMap("ds", mock(DataSource.class)), 
mock(DataSourcesMetaData.class), mock(CachedDatabaseMetaData.class));
-        ShardingSphereMetaData metaData = new ShardingSphereMetaData(
-                "name", Collections.singleton(mock(RuleConfiguration.class)), 
Collections.singleton(mock(ShardingSphereRule.class)), resource, 
mock(ShardingSphereSchema.class));
+        ShardingSphereRuleMetaData ruleMetaData = new 
ShardingSphereRuleMetaData(Collections.singleton(mock(RuleConfiguration.class)),
 Collections.singleton(mock(ShardingSphereRule.class)));
+        ShardingSphereMetaData metaData = new ShardingSphereMetaData("name", 
resource, ruleMetaData, mock(ShardingSphereSchema.class));
         assertTrue(metaData.isComplete());
     }
     
     @Test
     public void assertIsNotCompleteWithoutRule() {
         ShardingSphereResource resource = new 
ShardingSphereResource(Collections.singletonMap("ds", mock(DataSource.class)), 
mock(DataSourcesMetaData.class), mock(CachedDatabaseMetaData.class));
-        ShardingSphereMetaData metaData = new ShardingSphereMetaData("name", 
Collections.emptyList(), Collections.emptyList(), resource, 
mock(ShardingSphereSchema.class));
+        ShardingSphereRuleMetaData ruleMetaData = new 
ShardingSphereRuleMetaData(Collections.emptyList(), Collections.emptyList());
+        ShardingSphereMetaData metaData = new ShardingSphereMetaData("name", 
resource, ruleMetaData, mock(ShardingSphereSchema.class));
         assertFalse(metaData.isComplete());
     }
     
     @Test
     public void assertIsNotCompleteWithoutDataSource() {
         ShardingSphereResource resource = new 
ShardingSphereResource(Collections.emptyMap(), mock(DataSourcesMetaData.class), 
mock(CachedDatabaseMetaData.class));
-        ShardingSphereMetaData metaData = new ShardingSphereMetaData(
-                "name", Collections.singleton(mock(RuleConfiguration.class)), 
Collections.singleton(mock(ShardingSphereRule.class)), resource, 
mock(ShardingSphereSchema.class));
+        ShardingSphereRuleMetaData ruleMetaData = new 
ShardingSphereRuleMetaData(Collections.singleton(mock(RuleConfiguration.class)),
 Collections.singleton(mock(ShardingSphereRule.class)));
+        ShardingSphereMetaData metaData = new ShardingSphereMetaData("name", 
resource, ruleMetaData, mock(ShardingSphereSchema.class));
         assertFalse(metaData.isComplete());
     }
 }
diff --git 
a/shardingsphere-infra/shardingsphere-infra-context/src/main/java/org/apache/shardingsphere/infra/context/kernel/KernelProcessor.java
 
b/shardingsphere-infra/shardingsphere-infra-context/src/main/java/org/apache/shardingsphere/infra/context/kernel/KernelProcessor.java
index f12fd2e..922e42c 100644
--- 
a/shardingsphere-infra/shardingsphere-infra-context/src/main/java/org/apache/shardingsphere/infra/context/kernel/KernelProcessor.java
+++ 
b/shardingsphere-infra/shardingsphere-infra-context/src/main/java/org/apache/shardingsphere/infra/context/kernel/KernelProcessor.java
@@ -46,7 +46,7 @@ public final class KernelProcessor {
      * @return execution context
      */
     public ExecutionContext generateExecutionContext(final LogicSQL logicSQL, 
final ShardingSphereMetaData metaData, final ConfigurationProperties props) {
-        Collection<ShardingSphereRule> rules = metaData.getRules();
+        Collection<ShardingSphereRule> rules = 
metaData.getRuleMetaData().getRules();
         SQLRouteEngine sqlRouteEngine = new SQLRouteEngine(rules, props);
         SQLStatementContext<?> sqlStatementContext = 
logicSQL.getSqlStatementContext();
         RouteContext routeContext = sqlRouteEngine.route(logicSQL, metaData);
diff --git 
a/shardingsphere-infra/shardingsphere-infra-context/src/main/java/org/apache/shardingsphere/infra/context/schema/SchemaContextsBuilder.java
 
b/shardingsphere-infra/shardingsphere-infra-context/src/main/java/org/apache/shardingsphere/infra/context/schema/SchemaContextsBuilder.java
index e88c3ec..c3ea331 100644
--- 
a/shardingsphere-infra/shardingsphere-infra-context/src/main/java/org/apache/shardingsphere/infra/context/schema/SchemaContextsBuilder.java
+++ 
b/shardingsphere-infra/shardingsphere-infra-context/src/main/java/org/apache/shardingsphere/infra/context/schema/SchemaContextsBuilder.java
@@ -28,6 +28,7 @@ import 
org.apache.shardingsphere.infra.database.type.DatabaseType;
 import org.apache.shardingsphere.infra.executor.kernel.ExecutorKernel;
 import org.apache.shardingsphere.infra.metadata.ShardingSphereMetaData;
 import 
org.apache.shardingsphere.infra.metadata.resource.ShardingSphereResource;
+import 
org.apache.shardingsphere.infra.metadata.rule.ShardingSphereRuleMetaData;
 import org.apache.shardingsphere.infra.rule.ShardingSphereRule;
 import org.apache.shardingsphere.infra.rule.ShardingSphereRulesBuilder;
 import org.apache.shardingsphere.infra.schema.model.ShardingSphereSchema;
@@ -100,7 +101,8 @@ public final class SchemaContextsBuilder {
         Map<String, DataSource> dataSourceMap = dataSources.get(schemaName);
         Collection<RuleConfiguration> ruleConfigs = 
this.ruleConfigs.get(schemaName);
         Collection<ShardingSphereRule> rules = 
ShardingSphereRulesBuilder.build(ruleConfigs, dataSourceMap.keySet());
-        return new ShardingSphereMetaData(schemaName, ruleConfigs, rules, 
buildResource(dataSourceMap), buildSchema(schemaName, dataSourceMap, rules));
+        ShardingSphereRuleMetaData ruleMetaData = new 
ShardingSphereRuleMetaData(ruleConfigs, rules);
+        return new ShardingSphereMetaData(schemaName, 
buildResource(dataSourceMap), ruleMetaData, buildSchema(schemaName, 
dataSourceMap, rules));
     }
     
     private ShardingSphereResource buildResource(final Map<String, DataSource> 
dataSourceMap) throws SQLException {
diff --git 
a/shardingsphere-infra/shardingsphere-infra-context/src/test/java/org/apache/shardingsphere/infra/context/schema/SchemaContextsBuilderTest.java
 
b/shardingsphere-infra/shardingsphere-infra-context/src/test/java/org/apache/shardingsphere/infra/context/schema/SchemaContextsBuilderTest.java
index da2a35e..55124ed 100644
--- 
a/shardingsphere-infra/shardingsphere-infra-context/src/test/java/org/apache/shardingsphere/infra/context/schema/SchemaContextsBuilderTest.java
+++ 
b/shardingsphere-infra/shardingsphere-infra-context/src/test/java/org/apache/shardingsphere/infra/context/schema/SchemaContextsBuilderTest.java
@@ -83,8 +83,8 @@ public final class SchemaContextsBuilderTest {
     }
     
     private void assertRules(final SchemaContexts actual) {
-        assertThat(actual.getMetaDataMap().get("logic_db").getRules().size(), 
CoreMatchers.is(1));
-        
assertThat(actual.getMetaDataMap().get("logic_db").getRules().iterator().next(),
 CoreMatchers.instanceOf(FixtureRule.class));
+        
assertThat(actual.getMetaDataMap().get("logic_db").getRuleMetaData().getRules().size(),
 CoreMatchers.is(1));
+        
assertThat(actual.getMetaDataMap().get("logic_db").getRuleMetaData().getRules().iterator().next(),
 CoreMatchers.instanceOf(FixtureRule.class));
     }
     
     private void assertDataSources(final SchemaContexts actual) {
diff --git 
a/shardingsphere-infra/shardingsphere-infra-executor/src/test/java/org/apache/shardingsphere/infra/executor/sql/context/ExecutionContextBuilderTest.java
 
b/shardingsphere-infra/shardingsphere-infra-executor/src/test/java/org/apache/shardingsphere/infra/executor/sql/context/ExecutionContextBuilderTest.java
index 6aa83fa..7cecbd7 100644
--- 
a/shardingsphere-infra/shardingsphere-infra-executor/src/test/java/org/apache/shardingsphere/infra/executor/sql/context/ExecutionContextBuilderTest.java
+++ 
b/shardingsphere-infra/shardingsphere-infra-executor/src/test/java/org/apache/shardingsphere/infra/executor/sql/context/ExecutionContextBuilderTest.java
@@ -20,6 +20,12 @@ package org.apache.shardingsphere.infra.executor.sql.context;
 import org.apache.shardingsphere.infra.binder.statement.SQLStatementContext;
 import org.apache.shardingsphere.infra.metadata.ShardingSphereMetaData;
 import 
org.apache.shardingsphere.infra.metadata.resource.ShardingSphereResource;
+import 
org.apache.shardingsphere.infra.metadata.rule.ShardingSphereRuleMetaData;
+import 
org.apache.shardingsphere.infra.rewrite.engine.result.GenericSQLRewriteResult;
+import 
org.apache.shardingsphere.infra.rewrite.engine.result.RouteSQLRewriteResult;
+import org.apache.shardingsphere.infra.rewrite.engine.result.SQLRewriteUnit;
+import org.apache.shardingsphere.infra.route.context.RouteMapper;
+import org.apache.shardingsphere.infra.route.context.RouteUnit;
 import org.apache.shardingsphere.infra.schema.model.ShardingSphereSchema;
 import 
org.apache.shardingsphere.infra.schema.model.addressing.TableAddressingMetaData;
 import 
org.apache.shardingsphere.infra.schema.model.datasource.CachedDatabaseMetaData;
@@ -27,11 +33,6 @@ import 
org.apache.shardingsphere.infra.schema.model.datasource.DataSourcesMetaDa
 import 
org.apache.shardingsphere.infra.schema.model.schema.physical.model.column.PhysicalColumnMetaData;
 import 
org.apache.shardingsphere.infra.schema.model.schema.physical.model.schema.PhysicalSchemaMetaData;
 import 
org.apache.shardingsphere.infra.schema.model.schema.physical.model.table.PhysicalTableMetaData;
-import 
org.apache.shardingsphere.infra.rewrite.engine.result.GenericSQLRewriteResult;
-import 
org.apache.shardingsphere.infra.rewrite.engine.result.RouteSQLRewriteResult;
-import org.apache.shardingsphere.infra.rewrite.engine.result.SQLRewriteUnit;
-import org.apache.shardingsphere.infra.route.context.RouteMapper;
-import org.apache.shardingsphere.infra.route.context.RouteUnit;
 import org.junit.Test;
 
 import java.sql.Types;
@@ -59,8 +60,9 @@ public final class ExecutionContextBuilderTest {
         String firstDataSourceName = "firstDataSourceName";
         
when(dataSourcesMetaData.getAllInstanceDataSourceNames()).thenReturn(Arrays.asList(firstDataSourceName,
 "lastDataSourceName"));
         ShardingSphereResource resource = new 
ShardingSphereResource(Collections.emptyMap(), dataSourcesMetaData, 
mock(CachedDatabaseMetaData.class));
+        ShardingSphereRuleMetaData ruleMetaData = new 
ShardingSphereRuleMetaData(Collections.emptyList(), Collections.emptyList());
         ShardingSphereSchema schema = new 
ShardingSphereSchema(mock(TableAddressingMetaData.class), 
buildPhysicalSchemaMetaData());
-        ShardingSphereMetaData metaData = new ShardingSphereMetaData("name", 
Collections.emptyList(), Collections.emptyList(), resource, schema);
+        ShardingSphereMetaData metaData = new ShardingSphereMetaData("name", 
resource, ruleMetaData, schema);
         Collection<ExecutionUnit> actual = 
ExecutionContextBuilder.build(metaData, genericSQLRewriteResult, 
mock(SQLStatementContext.class));
         Collection<ExecutionUnit> expected = Collections.singletonList(new 
ExecutionUnit(firstDataSourceName, new SQLUnit(sql, parameters)));
         assertThat(actual, is(expected));
@@ -76,8 +78,9 @@ public final class ExecutionContextBuilderTest {
         sqlRewriteUnits.put(routeUnit1, sqlRewriteUnit1);
         sqlRewriteUnits.put(routeUnit2, sqlRewriteUnit2);
         ShardingSphereResource resource = new 
ShardingSphereResource(Collections.emptyMap(), mock(DataSourcesMetaData.class), 
mock(CachedDatabaseMetaData.class));
+        ShardingSphereRuleMetaData ruleMetaData = new 
ShardingSphereRuleMetaData(Collections.emptyList(), Collections.emptyList());
         ShardingSphereSchema schema = new 
ShardingSphereSchema(mock(TableAddressingMetaData.class), 
buildPhysicalSchemaMetaData());
-        ShardingSphereMetaData metaData = new ShardingSphereMetaData("name", 
Collections.emptyList(), Collections.emptyList(), resource, schema);
+        ShardingSphereMetaData metaData = new ShardingSphereMetaData("name", 
resource, ruleMetaData, schema);
         Collection<ExecutionUnit> actual = 
ExecutionContextBuilder.build(metaData, new 
RouteSQLRewriteResult(sqlRewriteUnits), mock(SQLStatementContext.class));
         ExecutionUnit expectedUnit1 = new ExecutionUnit("actualName1", new 
SQLUnit("sql1", Collections.singletonList("parameter1")));
         ExecutionUnit expectedUnit2 = new ExecutionUnit("actualName2", new 
SQLUnit("sql2", Collections.singletonList("parameter2")));
@@ -95,8 +98,9 @@ public final class ExecutionContextBuilderTest {
         Map<RouteUnit, SQLRewriteUnit> sqlRewriteUnits = new HashMap<>(2, 1);
         sqlRewriteUnits.put(routeUnit2, sqlRewriteUnit2);
         ShardingSphereResource resource = new 
ShardingSphereResource(Collections.emptyMap(), mock(DataSourcesMetaData.class), 
mock(CachedDatabaseMetaData.class));
+        ShardingSphereRuleMetaData ruleMetaData = new 
ShardingSphereRuleMetaData(Collections.emptyList(), Collections.emptyList());
         ShardingSphereSchema schema = new 
ShardingSphereSchema(mock(TableAddressingMetaData.class), 
buildPhysicalSchemaMetaDataWithoutPrimaryKey());
-        ShardingSphereMetaData metaData = new ShardingSphereMetaData("name", 
Collections.emptyList(), Collections.emptyList(), resource, schema);
+        ShardingSphereMetaData metaData = new ShardingSphereMetaData("name", 
resource, ruleMetaData, schema);
         Collection<ExecutionUnit> actual = 
ExecutionContextBuilder.build(metaData, new 
RouteSQLRewriteResult(sqlRewriteUnits), mock(SQLStatementContext.class));
         ExecutionUnit expectedUnit2 = new ExecutionUnit("actualName2", new 
SQLUnit("sql2", Collections.singletonList("parameter2")));
         Collection<ExecutionUnit> expected = new LinkedHashSet<>(1, 1);
diff --git 
a/shardingsphere-infra/shardingsphere-infra-route/src/test/java/org/apache/shardingsphere/infra/route/engine/SQLRouteEngineTest.java
 
b/shardingsphere-infra/shardingsphere-infra-route/src/test/java/org/apache/shardingsphere/infra/route/engine/SQLRouteEngineTest.java
index 3657ca3..3adb476 100644
--- 
a/shardingsphere-infra/shardingsphere-infra-route/src/test/java/org/apache/shardingsphere/infra/route/engine/SQLRouteEngineTest.java
+++ 
b/shardingsphere-infra/shardingsphere-infra-route/src/test/java/org/apache/shardingsphere/infra/route/engine/SQLRouteEngineTest.java
@@ -18,18 +18,19 @@
 package org.apache.shardingsphere.infra.route.engine;
 
 import lombok.SneakyThrows;
+import org.apache.shardingsphere.infra.binder.LogicSQL;
+import org.apache.shardingsphere.infra.binder.statement.SQLStatementContext;
 import 
org.apache.shardingsphere.infra.config.properties.ConfigurationProperties;
-import 
org.apache.shardingsphere.infra.metadata.resource.ShardingSphereResource;
-import org.apache.shardingsphere.infra.schema.model.ShardingSphereSchema;
 import org.apache.shardingsphere.infra.metadata.ShardingSphereMetaData;
+import 
org.apache.shardingsphere.infra.metadata.resource.ShardingSphereResource;
+import 
org.apache.shardingsphere.infra.metadata.rule.ShardingSphereRuleMetaData;
 import org.apache.shardingsphere.infra.route.context.RouteContext;
 import org.apache.shardingsphere.infra.route.context.RouteUnit;
 import 
org.apache.shardingsphere.infra.route.fixture.rule.RouteFailureRuleFixture;
 import org.apache.shardingsphere.infra.route.fixture.rule.RouteRuleFixture;
 import org.apache.shardingsphere.infra.route.hook.SPIRoutingHook;
-import org.apache.shardingsphere.infra.binder.LogicSQL;
+import org.apache.shardingsphere.infra.schema.model.ShardingSphereSchema;
 import 
org.apache.shardingsphere.infra.schema.model.schema.physical.model.schema.PhysicalSchemaMetaData;
-import org.apache.shardingsphere.infra.binder.statement.SQLStatementContext;
 import org.junit.Before;
 import org.junit.Test;
 import org.junit.runner.RunWith;
@@ -68,8 +69,8 @@ public final class SQLRouteEngineTest {
     @Test
     public void assertRouteSuccess() {
         LogicSQL logicSQL = new LogicSQL(mock(SQLStatementContext.class), 
"SELECT 1", Collections.emptyList());
-        ShardingSphereMetaData metaData = new ShardingSphereMetaData(
-                "logic_schema", Collections.emptyList(), 
Collections.singleton(new RouteRuleFixture()), 
mock(ShardingSphereResource.class, RETURNS_DEEP_STUBS), schema);
+        ShardingSphereRuleMetaData ruleMetaData = new 
ShardingSphereRuleMetaData(Collections.emptyList(), Collections.singleton(new 
RouteRuleFixture()));
+        ShardingSphereMetaData metaData = new 
ShardingSphereMetaData("logic_schema", mock(ShardingSphereResource.class, 
RETURNS_DEEP_STUBS), ruleMetaData, schema);
         SQLRouteEngine sqlRouteEngine = new 
SQLRouteEngine(Collections.singleton(new RouteRuleFixture()), props);
         setSPIRoutingHook(sqlRouteEngine);
         RouteContext actual = sqlRouteEngine.route(logicSQL, metaData);
@@ -85,8 +86,8 @@ public final class SQLRouteEngineTest {
     @Test(expected = UnsupportedOperationException.class)
     public void assertRouteFailure() {
         LogicSQL logicSQL = new LogicSQL(mock(SQLStatementContext.class), 
"SELECT 1", Collections.emptyList());
-        ShardingSphereMetaData metaData = new ShardingSphereMetaData(
-                "logic_schema", Collections.emptyList(), 
Collections.singleton(new RouteRuleFixture()), 
mock(ShardingSphereResource.class, RETURNS_DEEP_STUBS), schema);
+        ShardingSphereRuleMetaData ruleMetaData = new 
ShardingSphereRuleMetaData(Collections.emptyList(), Collections.singleton(new 
RouteRuleFixture()));
+        ShardingSphereMetaData metaData = new 
ShardingSphereMetaData("logic_schema", mock(ShardingSphereResource.class, 
RETURNS_DEEP_STUBS), ruleMetaData, schema);
         SQLRouteEngine sqlRouteEngine = new 
SQLRouteEngine(Collections.singleton(new RouteFailureRuleFixture()), props);
         setSPIRoutingHook(sqlRouteEngine);
         try {
diff --git 
a/shardingsphere-jdbc/shardingsphere-jdbc-core/src/main/java/org/apache/shardingsphere/driver/executor/AbstractStatementExecutor.java
 
b/shardingsphere-jdbc/shardingsphere-jdbc-core/src/main/java/org/apache/shardingsphere/driver/executor/AbstractStatementExecutor.java
index 241a27a..806f773 100644
--- 
a/shardingsphere-jdbc/shardingsphere-jdbc-core/src/main/java/org/apache/shardingsphere/driver/executor/AbstractStatementExecutor.java
+++ 
b/shardingsphere-jdbc/shardingsphere-jdbc-core/src/main/java/org/apache/shardingsphere/driver/executor/AbstractStatementExecutor.java
@@ -82,7 +82,7 @@ public abstract class AbstractStatementExecutor {
         }
         Optional<MetaDataRefreshStrategy> refreshStrategy = 
MetaDataRefreshStrategyFactory.newInstance(sqlStatement);
         if (refreshStrategy.isPresent()) {
-            SchemaMetaDataLoader loader = new 
SchemaMetaDataLoader(metaData.getRules());
+            SchemaMetaDataLoader loader = new 
SchemaMetaDataLoader(metaData.getRuleMetaData().getRules());
             Collection<String> routeDataSourceNames = 
routeUnits.stream().map(RouteUnit::getDataSourceMapper).map(RouteMapper::getLogicName).collect(Collectors.toList());
             refreshStrategy.get().refreshMetaData(metaData.getSchema(), 
schemaContexts.getDatabaseType(), routeDataSourceNames, 
                     sqlStatement, tableName -> 
loader.load(schemaContexts.getDatabaseType(), dataSourceMap, tableName, 
schemaContexts.getProps()));
diff --git 
a/shardingsphere-jdbc/shardingsphere-jdbc-core/src/main/java/org/apache/shardingsphere/driver/executor/PreparedStatementExecutor.java
 
b/shardingsphere-jdbc/shardingsphere-jdbc-core/src/main/java/org/apache/shardingsphere/driver/executor/PreparedStatementExecutor.java
index 8ad988b..4af36e4 100644
--- 
a/shardingsphere-jdbc/shardingsphere-jdbc-core/src/main/java/org/apache/shardingsphere/driver/executor/PreparedStatementExecutor.java
+++ 
b/shardingsphere-jdbc/shardingsphere-jdbc-core/src/main/java/org/apache/shardingsphere/driver/executor/PreparedStatementExecutor.java
@@ -83,7 +83,7 @@ public final class PreparedStatementExecutor extends 
AbstractStatementExecutor {
         List<Integer> results = getSqlExecutor().execute(inputGroups, 
sqlExecutorCallback);
         refreshTableMetaData(getSchemaContexts().getDefaultMetaData(), 
sqlStatementContext.getSqlStatement(), routeUnits);
         return isNeedAccumulate(
-                
getSchemaContexts().getDefaultMetaData().getRules().stream().filter(rule -> 
rule instanceof DataNodeRoutedRule).collect(Collectors.toList()), 
sqlStatementContext)
+                
getSchemaContexts().getDefaultMetaData().getRuleMetaData().getRules().stream().filter(rule
 -> rule instanceof DataNodeRoutedRule).collect(Collectors.toList()), 
sqlStatementContext)
                 ? accumulate(results) : results.get(0);
     }
     
diff --git 
a/shardingsphere-jdbc/shardingsphere-jdbc-core/src/main/java/org/apache/shardingsphere/driver/executor/StatementExecutor.java
 
b/shardingsphere-jdbc/shardingsphere-jdbc-core/src/main/java/org/apache/shardingsphere/driver/executor/StatementExecutor.java
index 22852cf..1273510 100644
--- 
a/shardingsphere-jdbc/shardingsphere-jdbc-core/src/main/java/org/apache/shardingsphere/driver/executor/StatementExecutor.java
+++ 
b/shardingsphere-jdbc/shardingsphere-jdbc-core/src/main/java/org/apache/shardingsphere/driver/executor/StatementExecutor.java
@@ -134,7 +134,7 @@ public final class StatementExecutor extends 
AbstractStatementExecutor {
         List<Integer> results = getSqlExecutor().execute(inputGroups, 
sqlExecutorCallback);
         refreshTableMetaData(getSchemaContexts().getDefaultMetaData(), 
sqlStatementContext.getSqlStatement(), routeUnits);
         if (isNeedAccumulate(
-                
getSchemaContexts().getDefaultMetaData().getRules().stream().filter(rule -> 
rule instanceof DataNodeRoutedRule).collect(Collectors.toList()), 
sqlStatementContext)) {
+                
getSchemaContexts().getDefaultMetaData().getRuleMetaData().getRules().stream().filter(rule
 -> rule instanceof DataNodeRoutedRule).collect(Collectors.toList()), 
sqlStatementContext)) {
             return accumulate(results);
         }
         return null == results.get(0) ? 0 : results.get(0);
diff --git 
a/shardingsphere-jdbc/shardingsphere-jdbc-core/src/main/java/org/apache/shardingsphere/driver/executor/batch/BatchPreparedStatementExecutor.java
 
b/shardingsphere-jdbc/shardingsphere-jdbc-core/src/main/java/org/apache/shardingsphere/driver/executor/batch/BatchPreparedStatementExecutor.java
index 6ef14a9..d2de40c 100644
--- 
a/shardingsphere-jdbc/shardingsphere-jdbc-core/src/main/java/org/apache/shardingsphere/driver/executor/batch/BatchPreparedStatementExecutor.java
+++ 
b/shardingsphere-jdbc/shardingsphere-jdbc-core/src/main/java/org/apache/shardingsphere/driver/executor/batch/BatchPreparedStatementExecutor.java
@@ -128,7 +128,7 @@ public final class BatchPreparedStatementExecutor {
         };
         List<int[]> results = sqlExecutor.execute(inputGroups, callback);
         return isNeedAccumulate(
-                
schemaContexts.getDefaultMetaData().getRules().stream().filter(rule -> rule 
instanceof DataNodeRoutedRule).collect(Collectors.toList()), 
sqlStatementContext)
+                
schemaContexts.getDefaultMetaData().getRuleMetaData().getRules().stream().filter(rule
 -> rule instanceof DataNodeRoutedRule).collect(Collectors.toList()), 
sqlStatementContext)
                 ? accumulate(results) : results.get(0);
     }
     
diff --git 
a/shardingsphere-jdbc/shardingsphere-jdbc-core/src/main/java/org/apache/shardingsphere/driver/jdbc/adapter/AbstractResultSetAdapter.java
 
b/shardingsphere-jdbc/shardingsphere-jdbc-core/src/main/java/org/apache/shardingsphere/driver/jdbc/adapter/AbstractResultSetAdapter.java
index b49df33..89c1d81 100644
--- 
a/shardingsphere-jdbc/shardingsphere-jdbc-core/src/main/java/org/apache/shardingsphere/driver/jdbc/adapter/AbstractResultSetAdapter.java
+++ 
b/shardingsphere-jdbc/shardingsphere-jdbc-core/src/main/java/org/apache/shardingsphere/driver/jdbc/adapter/AbstractResultSetAdapter.java
@@ -69,7 +69,7 @@ public abstract class AbstractResultSetAdapter extends 
AbstractUnsupportedOperat
     private Collection<ShardingSphereRule> getRules() {
         ShardingSphereConnection connection = statement instanceof 
ShardingSpherePreparedStatement
                 ? ((ShardingSpherePreparedStatement) 
statement).getConnection() : ((ShardingSphereStatement) 
statement).getConnection();
-        return connection.getSchemaContexts().getDefaultMetaData().getRules();
+        return 
connection.getSchemaContexts().getDefaultMetaData().getRuleMetaData().getRules();
     }
     
     @Override
diff --git 
a/shardingsphere-jdbc/shardingsphere-jdbc-core/src/main/java/org/apache/shardingsphere/driver/jdbc/core/datasource/metadata/ShardingSphereDatabaseMetaData.java
 
b/shardingsphere-jdbc/shardingsphere-jdbc-core/src/main/java/org/apache/shardingsphere/driver/jdbc/core/datasource/metadata/ShardingSphereDatabaseMetaData.java
index 17472a1..10fff0d 100644
--- 
a/shardingsphere-jdbc/shardingsphere-jdbc-core/src/main/java/org/apache/shardingsphere/driver/jdbc/core/datasource/metadata/ShardingSphereDatabaseMetaData.java
+++ 
b/shardingsphere-jdbc/shardingsphere-jdbc-core/src/main/java/org/apache/shardingsphere/driver/jdbc/core/datasource/metadata/ShardingSphereDatabaseMetaData.java
@@ -59,7 +59,7 @@ public final class ShardingSphereDatabaseMetaData extends 
AdaptedDatabaseMetaDat
     public ShardingSphereDatabaseMetaData(final AbstractConnectionAdapter 
connection) {
         
super(connection.getSchemaContexts().getDefaultMetaData().getResource().getCachedDatabaseMetaData());
         this.connection = connection;
-        rules = connection.getSchemaContexts().getDefaultMetaData().getRules();
+        rules = 
connection.getSchemaContexts().getDefaultMetaData().getRuleMetaData().getRules();
         datasourceNames = connection.getDataSourceMap().keySet();
         dataSourcesMetaData = 
connection.getSchemaContexts().getDefaultMetaData().getResource().getDataSourcesMetaData();
     }
diff --git 
a/shardingsphere-jdbc/shardingsphere-jdbc-core/src/main/java/org/apache/shardingsphere/driver/jdbc/core/statement/ShardingSpherePreparedStatement.java
 
b/shardingsphere-jdbc/shardingsphere-jdbc-core/src/main/java/org/apache/shardingsphere/driver/jdbc/core/statement/ShardingSpherePreparedStatement.java
index f479ec7..e47feb9 100644
--- 
a/shardingsphere-jdbc/shardingsphere-jdbc-core/src/main/java/org/apache/shardingsphere/driver/jdbc/core/statement/ShardingSpherePreparedStatement.java
+++ 
b/shardingsphere-jdbc/shardingsphere-jdbc-core/src/main/java/org/apache/shardingsphere/driver/jdbc/core/statement/ShardingSpherePreparedStatement.java
@@ -213,12 +213,12 @@ public final class ShardingSpherePreparedStatement 
extends AbstractPreparedState
     private Collection<InputGroup<StatementExecuteUnit>> getInputGroups() 
throws SQLException {
         int maxConnectionsSizePerQuery = 
schemaContexts.getProps().<Integer>getValue(ConfigurationPropertyKey.MAX_CONNECTIONS_SIZE_PER_QUERY);
         return new 
PreparedStatementExecuteGroupEngine(maxConnectionsSizePerQuery, connection, 
statementOption,
-                
schemaContexts.getDefaultMetaData().getRules()).generate(executionContext.getRouteContext(),
 executionContext.getExecutionUnits());
+                
schemaContexts.getDefaultMetaData().getRuleMetaData().getRules()).generate(executionContext.getRouteContext(),
 executionContext.getExecutionUnits());
     }
     
     private Collection<InputGroup<RawSQLExecuteUnit>> getRawInputGroups() 
throws SQLException {
         int maxConnectionsSizePerQuery = 
schemaContexts.getProps().<Integer>getValue(ConfigurationPropertyKey.MAX_CONNECTIONS_SIZE_PER_QUERY);
-        return new RawExecuteGroupEngine(maxConnectionsSizePerQuery, 
schemaContexts.getDefaultMetaData().getRules())
+        return new RawExecuteGroupEngine(maxConnectionsSizePerQuery, 
schemaContexts.getDefaultMetaData().getRuleMetaData().getRules())
                 .generate(executionContext.getRouteContext(), 
executionContext.getExecutionUnits());
     }
     
@@ -278,7 +278,7 @@ public final class ShardingSpherePreparedStatement extends 
AbstractPreparedState
     
     private MergedResult mergeQuery(final List<QueryResult> queryResults) 
throws SQLException {
         ShardingSphereMetaData metaData = schemaContexts.getDefaultMetaData();
-        MergeEngine mergeEngine = new 
MergeEngine(schemaContexts.getDatabaseType(), 
metaData.getSchema().getSchemaMetaData(), schemaContexts.getProps(), 
metaData.getRules());
+        MergeEngine mergeEngine = new 
MergeEngine(schemaContexts.getDatabaseType(), 
metaData.getSchema().getSchemaMetaData(), schemaContexts.getProps(), 
metaData.getRuleMetaData().getRules());
         return mergeEngine.merge(queryResults, 
executionContext.getSqlStatementContext());
     }
     
@@ -357,7 +357,7 @@ public final class ShardingSpherePreparedStatement extends 
AbstractPreparedState
     private void initBatchPreparedStatementExecutor() throws SQLException {
         PreparedStatementExecuteGroupEngine executeGroupEngine = new 
PreparedStatementExecuteGroupEngine(
                 
schemaContexts.getProps().<Integer>getValue(ConfigurationPropertyKey.MAX_CONNECTIONS_SIZE_PER_QUERY),
-                connection, statementOption, 
schemaContexts.getDefaultMetaData().getRules());
+                connection, statementOption, 
schemaContexts.getDefaultMetaData().getRuleMetaData().getRules());
         
batchPreparedStatementExecutor.init(executeGroupEngine.generate(executionContext.getRouteContext(),
                 new 
ArrayList<>(batchPreparedStatementExecutor.getBatchExecutionUnits()).stream().map(BatchExecutionUnit::getExecutionUnit).collect(Collectors.toList())));
         setBatchParametersForStatements();
@@ -399,7 +399,7 @@ public final class ShardingSpherePreparedStatement extends 
AbstractPreparedState
     
     @Override
     public boolean isAccumulate() {
-        return 
schemaContexts.getDefaultMetaData().getRules().stream().anyMatch(
+        return 
schemaContexts.getDefaultMetaData().getRuleMetaData().getRules().stream().anyMatch(
             each -> each instanceof DataNodeRoutedRule && 
((DataNodeRoutedRule) 
each).isNeedAccumulate(executionContext.getSqlStatementContext().getTablesContext().getTableNames()));
     }
     
diff --git 
a/shardingsphere-jdbc/shardingsphere-jdbc-core/src/main/java/org/apache/shardingsphere/driver/jdbc/core/statement/ShardingSphereStatement.java
 
b/shardingsphere-jdbc/shardingsphere-jdbc-core/src/main/java/org/apache/shardingsphere/driver/jdbc/core/statement/ShardingSphereStatement.java
index 1db13c3..d513ec5 100644
--- 
a/shardingsphere-jdbc/shardingsphere-jdbc-core/src/main/java/org/apache/shardingsphere/driver/jdbc/core/statement/ShardingSphereStatement.java
+++ 
b/shardingsphere-jdbc/shardingsphere-jdbc-core/src/main/java/org/apache/shardingsphere/driver/jdbc/core/statement/ShardingSphereStatement.java
@@ -315,12 +315,12 @@ public final class ShardingSphereStatement extends 
AbstractStatementAdapter {
     private Collection<InputGroup<StatementExecuteUnit>> getInputGroups() 
throws SQLException {
         int maxConnectionsSizePerQuery = 
schemaContexts.getProps().<Integer>getValue(ConfigurationPropertyKey.MAX_CONNECTIONS_SIZE_PER_QUERY);
         return new StatementExecuteGroupEngine(maxConnectionsSizePerQuery, 
connection, statementOption,
-                
schemaContexts.getDefaultMetaData().getRules()).generate(executionContext.getRouteContext(),
 executionContext.getExecutionUnits());
+                
schemaContexts.getDefaultMetaData().getRuleMetaData().getRules()).generate(executionContext.getRouteContext(),
 executionContext.getExecutionUnits());
     }
     
     private Collection<InputGroup<RawSQLExecuteUnit>> getRawInputGroups() 
throws SQLException {
         int maxConnectionsSizePerQuery = 
schemaContexts.getProps().<Integer>getValue(ConfigurationPropertyKey.MAX_CONNECTIONS_SIZE_PER_QUERY);
-        return new RawExecuteGroupEngine(maxConnectionsSizePerQuery, 
schemaContexts.getDefaultMetaData().getRules())
+        return new RawExecuteGroupEngine(maxConnectionsSizePerQuery, 
schemaContexts.getDefaultMetaData().getRuleMetaData().getRules())
                 .generate(executionContext.getRouteContext(), 
executionContext.getExecutionUnits());
     }
     
@@ -372,7 +372,7 @@ public final class ShardingSphereStatement extends 
AbstractStatementAdapter {
     
     private MergedResult mergeQuery(final List<QueryResult> queryResults) 
throws SQLException {
         ShardingSphereMetaData metaData = schemaContexts.getDefaultMetaData();
-        MergeEngine mergeEngine = new 
MergeEngine(schemaContexts.getDatabaseType(), 
metaData.getSchema().getSchemaMetaData(), schemaContexts.getProps(), 
metaData.getRules());
+        MergeEngine mergeEngine = new 
MergeEngine(schemaContexts.getDatabaseType(), 
metaData.getSchema().getSchemaMetaData(), schemaContexts.getProps(), 
metaData.getRuleMetaData().getRules());
         return mergeEngine.merge(queryResults, 
executionContext.getSqlStatementContext());
     }
     
@@ -395,7 +395,7 @@ public final class ShardingSphereStatement extends 
AbstractStatementAdapter {
     
     @Override
     public boolean isAccumulate() {
-        return 
schemaContexts.getDefaultMetaData().getRules().stream().anyMatch(
+        return 
schemaContexts.getDefaultMetaData().getRuleMetaData().getRules().stream().anyMatch(
             each -> each instanceof DataNodeRoutedRule && 
((DataNodeRoutedRule) 
each).isNeedAccumulate(executionContext.getSqlStatementContext().getTablesContext().getTableNames()));
     }
     
diff --git 
a/shardingsphere-jdbc/shardingsphere-jdbc-core/src/test/java/org/apache/shardingsphere/driver/executor/AbstractBaseExecutorTest.java
 
b/shardingsphere-jdbc/shardingsphere-jdbc-core/src/test/java/org/apache/shardingsphere/driver/executor/AbstractBaseExecutorTest.java
index 0c422c5..d02d645 100644
--- 
a/shardingsphere-jdbc/shardingsphere-jdbc-core/src/test/java/org/apache/shardingsphere/driver/executor/AbstractBaseExecutorTest.java
+++ 
b/shardingsphere-jdbc/shardingsphere-jdbc-core/src/test/java/org/apache/shardingsphere/driver/executor/AbstractBaseExecutorTest.java
@@ -70,7 +70,7 @@ public abstract class AbstractBaseExecutorTest {
         
when(schemaContexts.getProps()).thenReturn(createConfigurationProperties());
         
when(schemaContexts.getDatabaseType()).thenReturn(DatabaseTypeRegistry.getActualDatabaseType("H2"));
         ShardingRule shardingRule = mockShardingRule();
-        
when(schemaContexts.getDefaultMetaData().getRules()).thenReturn(Collections.singletonList(shardingRule));
+        
when(schemaContexts.getDefaultMetaData().getRuleMetaData().getRules()).thenReturn(Collections.singletonList(shardingRule));
         TransactionContexts transactionContexts = 
mock(TransactionContexts.class);
         
when(transactionContexts.getDefaultTransactionManagerEngine()).thenReturn(new 
ShardingTransactionManagerEngine());
         DataSource dataSource = mock(DataSource.class, RETURNS_DEEP_STUBS);
diff --git 
a/shardingsphere-jdbc/shardingsphere-jdbc-core/src/test/java/org/apache/shardingsphere/driver/jdbc/core/datasource/metadata/ShardingSphereDatabaseMetaDataTest.java
 
b/shardingsphere-jdbc/shardingsphere-jdbc-core/src/test/java/org/apache/shardingsphere/driver/jdbc/core/datasource/metadata/ShardingSphereDatabaseMetaDataTest.java
index 665b5c9..f61ac96 100644
--- 
a/shardingsphere-jdbc/shardingsphere-jdbc-core/src/test/java/org/apache/shardingsphere/driver/jdbc/core/datasource/metadata/ShardingSphereDatabaseMetaDataTest.java
+++ 
b/shardingsphere-jdbc/shardingsphere-jdbc-core/src/test/java/org/apache/shardingsphere/driver/jdbc/core/datasource/metadata/ShardingSphereDatabaseMetaDataTest.java
@@ -21,8 +21,8 @@ import com.google.common.collect.LinkedHashMultimap;
 import 
org.apache.shardingsphere.driver.jdbc.core.connection.ShardingSphereConnection;
 import 
org.apache.shardingsphere.driver.jdbc.core.resultset.DatabaseMetaDataResultSet;
 import org.apache.shardingsphere.infra.context.schema.SchemaContexts;
-import 
org.apache.shardingsphere.infra.schema.model.datasource.CachedDatabaseMetaData;
 import org.apache.shardingsphere.infra.metadata.ShardingSphereMetaData;
+import 
org.apache.shardingsphere.infra.schema.model.datasource.CachedDatabaseMetaData;
 import org.apache.shardingsphere.sharding.api.config.ShardingRuleConfiguration;
 import 
org.apache.shardingsphere.sharding.api.config.rule.ShardingTableRuleConfiguration;
 import org.apache.shardingsphere.sharding.rule.ShardingRule;
@@ -95,7 +95,7 @@ public final class ShardingSphereDatabaseMetaDataTest {
         ShardingSphereMetaData metaData = mock(ShardingSphereMetaData.class, 
RETURNS_DEEP_STUBS);
         when(schemaContexts.getDefaultMetaData()).thenReturn(metaData);
         
when(metaData.getResource().getCachedDatabaseMetaData()).thenReturn(cachedDatabaseMetaData);
-        
when(metaData.getRules()).thenReturn(Collections.singletonList(mockShardingRule()));
+        
when(metaData.getRuleMetaData().getRules()).thenReturn(Collections.singletonList(mockShardingRule()));
         shardingSphereDatabaseMetaData = new 
ShardingSphereDatabaseMetaData(shardingSphereConnection);
     }
     
diff --git 
a/shardingsphere-jdbc/shardingsphere-jdbc-governance/src/main/java/org/apache/shardingsphere/driver/governance/internal/datasource/GovernanceShardingSphereDataSource.java
 
b/shardingsphere-jdbc/shardingsphere-jdbc-governance/src/main/java/org/apache/shardingsphere/driver/governance/internal/datasource/GovernanceShardingSphereDataSource.java
index 7334d83..9e4add1 100644
--- 
a/shardingsphere-jdbc/shardingsphere-jdbc-governance/src/main/java/org/apache/shardingsphere/driver/governance/internal/datasource/GovernanceShardingSphereDataSource.java
+++ 
b/shardingsphere-jdbc/shardingsphere-jdbc-governance/src/main/java/org/apache/shardingsphere/driver/governance/internal/datasource/GovernanceShardingSphereDataSource.java
@@ -120,7 +120,7 @@ public final class GovernanceShardingSphereDataSource 
extends AbstractUnsupporte
     
     private void uploadLocalConfiguration(final GovernanceFacade 
governanceFacade) {
         Map<String, DataSourceConfiguration> dataSourceConfigs = 
DataSourceConverter.getDataSourceConfigurationMap(schemaContexts.getDefaultMetaData().getResource().getDataSources());
-        Collection<RuleConfiguration> ruleConfigurations = 
schemaContexts.getDefaultMetaData().getConfigurations();
+        Collection<RuleConfiguration> ruleConfigurations = 
schemaContexts.getDefaultMetaData().getRuleMetaData().getConfigurations();
         
governanceFacade.onlineInstance(Collections.singletonMap(DefaultSchema.LOGIC_NAME,
 dataSourceConfigs),
                 Collections.singletonMap(DefaultSchema.LOGIC_NAME, 
ruleConfigurations), null, schemaContexts.getProps().getProps());
     }
diff --git 
a/shardingsphere-jdbc/shardingsphere-jdbc-governance/src/test/java/org/apache/shardingsphere/driver/governance/internal/datasource/GovernanceShardingSphereDataSourceTest.java
 
b/shardingsphere-jdbc/shardingsphere-jdbc-governance/src/test/java/org/apache/shardingsphere/driver/governance/internal/datasource/GovernanceShardingSphereDataSourceTest.java
index 0acaec4..4ae6992 100644
--- 
a/shardingsphere-jdbc/shardingsphere-jdbc-governance/src/test/java/org/apache/shardingsphere/driver/governance/internal/datasource/GovernanceShardingSphereDataSourceTest.java
+++ 
b/shardingsphere-jdbc/shardingsphere-jdbc-governance/src/test/java/org/apache/shardingsphere/driver/governance/internal/datasource/GovernanceShardingSphereDataSourceTest.java
@@ -65,7 +65,7 @@ public final class GovernanceShardingSphereDataSourceTest {
     public static void setUp() throws SQLException, IOException, 
URISyntaxException {
         SchemaContexts schemaContexts = 
getShardingSphereDataSource().getSchemaContexts();
         GovernanceShardingSphereDataSource governanceDataSource = new 
GovernanceShardingSphereDataSource(schemaContexts.getDefaultMetaData().getResource().getDataSources(),
-                schemaContexts.getDefaultMetaData().getConfigurations(), 
schemaContexts.getProps().getProps(), getGovernanceConfiguration());
+                
schemaContexts.getDefaultMetaData().getRuleMetaData().getConfigurations(), 
schemaContexts.getProps().getProps(), getGovernanceConfiguration());
         GovernanceShardingSphereDataSourceTest.schemaContexts = 
(GovernanceSchemaContexts) governanceDataSource.getSchemaContexts();
     }
     
@@ -98,7 +98,7 @@ public final class GovernanceShardingSphereDataSourceTest {
     @Test
     public void assertRenewRules() throws SQLException {
         schemaContexts.renew(new 
RuleConfigurationsChangedEvent(DefaultSchema.LOGIC_NAME, 
Arrays.asList(getShardingRuleConfiguration(), 
getReplicaQueryRuleConfiguration())));
-        assertThat(((ShardingRule) 
schemaContexts.getDefaultMetaData().getRules().iterator().next()).getTableRules().size(),
 is(1));
+        assertThat(((ShardingRule) 
schemaContexts.getDefaultMetaData().getRuleMetaData().getRules().iterator().next()).getTableRules().size(),
 is(1));
     }
     
     private ShardingRuleConfiguration getShardingRuleConfiguration() {
diff --git 
a/shardingsphere-jdbc/shardingsphere-jdbc-spring/shardingsphere-jdbc-core-spring/shardingsphere-jdbc-core-spring-boot-starter/src/test/java/org/apache/shardingsphere/spring/boot/SpringBootStarterTest.java
 
b/shardingsphere-jdbc/shardingsphere-jdbc-spring/shardingsphere-jdbc-core-spring/shardingsphere-jdbc-core-spring-boot-starter/src/test/java/org/apache/shardingsphere/spring/boot/SpringBootStarterTest.java
index a7ea2c2..9851762 100644
--- 
a/shardingsphere-jdbc/shardingsphere-jdbc-spring/shardingsphere-jdbc-core-spring/shardingsphere-jdbc-core-spring-boot-starter/src/test/java/org/apache/shardingsphere/spring/boot/SpringBootStarterTest.java
+++ 
b/shardingsphere-jdbc/shardingsphere-jdbc-spring/shardingsphere-jdbc-core-spring/shardingsphere-jdbc-core-spring-boot-starter/src/test/java/org/apache/shardingsphere/spring/boot/SpringBootStarterTest.java
@@ -71,7 +71,7 @@ public class SpringBootStarterTest {
     
     @Test
     public void assertRules() {
-        Collection<ShardingSphereRule> rules = 
dataSource.getSchemaContexts().getDefaultMetaData().getRules();
+        Collection<ShardingSphereRule> rules = 
dataSource.getSchemaContexts().getDefaultMetaData().getRuleMetaData().getRules();
         assertThat(rules.size(), is(4));
         for (ShardingSphereRule each : rules) {
             if (each instanceof ShardingRule) {
diff --git 
a/shardingsphere-jdbc/shardingsphere-jdbc-spring/shardingsphere-jdbc-core-spring/shardingsphere-jdbc-core-spring-namespace/src/test/java/org/apache/shardingsphere/spring/SpringNamespaceTest.java
 
b/shardingsphere-jdbc/shardingsphere-jdbc-spring/shardingsphere-jdbc-core-spring/shardingsphere-jdbc-core-spring-namespace/src/test/java/org/apache/shardingsphere/spring/SpringNamespaceTest.java
index 455ef08..d0624c9 100644
--- 
a/shardingsphere-jdbc/shardingsphere-jdbc-spring/shardingsphere-jdbc-core-spring/shardingsphere-jdbc-core-spring-namespace/src/test/java/org/apache/shardingsphere/spring/SpringNamespaceTest.java
+++ 
b/shardingsphere-jdbc/shardingsphere-jdbc-spring/shardingsphere-jdbc-core-spring/shardingsphere-jdbc-core-spring-namespace/src/test/java/org/apache/shardingsphere/spring/SpringNamespaceTest.java
@@ -46,7 +46,7 @@ public final class SpringNamespaceTest extends 
AbstractJUnit4SpringContextTests
     @Test
     public void assertShardingSphereDataSource() {
         assertDataSourceMap();
-        Collection<ShardingSphereRule> rules = 
dataSource.getSchemaContexts().getDefaultMetaData().getRules();
+        Collection<ShardingSphereRule> rules = 
dataSource.getSchemaContexts().getDefaultMetaData().getRuleMetaData().getRules();
         assertThat(rules.size(), is(3));
         for (ShardingSphereRule each : rules) {
             if (each instanceof ShardingRule) {
diff --git 
a/shardingsphere-jdbc/shardingsphere-jdbc-spring/shardingsphere-jdbc-governance-spring/shardingsphere-jdbc-governance-spring-boot-starter/src/test/java/org/apache/shardingsphere/spring/boot/governance/type/GovernanceSpringBootEncryptTest.java
 
b/shardingsphere-jdbc/shardingsphere-jdbc-spring/shardingsphere-jdbc-governance-spring/shardingsphere-jdbc-governance-spring-boot-starter/src/test/java/org/apache/shardingsphere/spring/boot/governance/type/GovernanceSpringBootEncryptTest.java
index b6de73d..6e55faf 100644
--- 
a/shardingsphere-jdbc/shardingsphere-jdbc-spring/shardingsphere-jdbc-governance-spring/shardingsphere-jdbc-governance-spring-boot-starter/src/test/java/org/apache/shardingsphere/spring/boot/governance/type/GovernanceSpringBootEncryptTest.java
+++ 
b/shardingsphere-jdbc/shardingsphere-jdbc-spring/shardingsphere-jdbc-governance-spring/shardingsphere-jdbc-governance-spring-boot-starter/src/test/java/org/apache/shardingsphere/spring/boot/governance/type/GovernanceSpringBootEncryptTest.java
@@ -63,7 +63,7 @@ public class GovernanceSpringBootEncryptTest {
         assertThat(embedDataSource.getMaxTotal(), is(100));
         assertThat(embedDataSource.getUsername(), is("sa"));
         AlgorithmProvidedEncryptRuleConfiguration configuration =
-                (AlgorithmProvidedEncryptRuleConfiguration) 
schemaContexts.getDefaultMetaData().getConfigurations().iterator().next();
+                (AlgorithmProvidedEncryptRuleConfiguration) 
schemaContexts.getDefaultMetaData().getRuleMetaData().getConfigurations().iterator().next();
         assertThat(configuration.getEncryptors().size(), is(1));
         EncryptAlgorithm encryptAlgorithm = 
configuration.getEncryptors().get("order_encrypt");
         assertThat(encryptAlgorithm.getType(), is("AES"));
diff --git 
a/shardingsphere-jdbc/shardingsphere-jdbc-spring/shardingsphere-jdbc-governance-spring/shardingsphere-jdbc-governance-spring-boot-starter/src/test/java/org/apache/shardingsphere/spring/boot/governance/type/GovernanceSpringBootRegistryEncryptTest.java
 
b/shardingsphere-jdbc/shardingsphere-jdbc-spring/shardingsphere-jdbc-governance-spring/shardingsphere-jdbc-governance-spring-boot-starter/src/test/java/org/apache/shardingsphere/spring/boot/governance/type/GovernanceSpringBootRegis
 [...]
index 0bef7e3..0d373e9 100644
--- 
a/shardingsphere-jdbc/shardingsphere-jdbc-spring/shardingsphere-jdbc-governance-spring/shardingsphere-jdbc-governance-spring-boot-starter/src/test/java/org/apache/shardingsphere/spring/boot/governance/type/GovernanceSpringBootRegistryEncryptTest.java
+++ 
b/shardingsphere-jdbc/shardingsphere-jdbc-spring/shardingsphere-jdbc-governance-spring/shardingsphere-jdbc-governance-spring-boot-starter/src/test/java/org/apache/shardingsphere/spring/boot/governance/type/GovernanceSpringBootRegistryEncryptTest.java
@@ -82,7 +82,7 @@ public class GovernanceSpringBootRegistryEncryptTest {
         BasicDataSource embedDataSource = (BasicDataSource) 
schemaContexts.getDefaultMetaData().getResource().getDataSources().values().iterator().next();
         assertThat(embedDataSource.getMaxTotal(), is(100));
         assertThat(embedDataSource.getUsername(), is("sa"));
-        EncryptRuleConfiguration config = (EncryptRuleConfiguration) 
schemaContexts.getDefaultMetaData().getConfigurations().iterator().next();
+        EncryptRuleConfiguration config = (EncryptRuleConfiguration) 
schemaContexts.getDefaultMetaData().getRuleMetaData().getConfigurations().iterator().next();
         assertThat(config.getEncryptors().size(), is(1));
         ShardingSphereAlgorithmConfiguration encryptAlgorithmConfig = 
config.getEncryptors().get("order_encrypt");
         assertThat(encryptAlgorithmConfig, 
instanceOf(ShardingSphereAlgorithmConfiguration.class));
diff --git 
a/shardingsphere-jdbc/shardingsphere-jdbc-spring/shardingsphere-jdbc-governance-spring/shardingsphere-jdbc-governance-spring-boot-starter/src/test/java/org/apache/shardingsphere/spring/boot/governance/type/GovernanceSpringBootRegistryShardingTest.java
 
b/shardingsphere-jdbc/shardingsphere-jdbc-spring/shardingsphere-jdbc-governance-spring/shardingsphere-jdbc-governance-spring-boot-starter/src/test/java/org/apache/shardingsphere/spring/boot/governance/type/GovernanceSpringBootRegi
 [...]
index 853e62d..938c3a9 100644
--- 
a/shardingsphere-jdbc/shardingsphere-jdbc-spring/shardingsphere-jdbc-governance-spring/shardingsphere-jdbc-governance-spring-boot-starter/src/test/java/org/apache/shardingsphere/spring/boot/governance/type/GovernanceSpringBootRegistryShardingTest.java
+++ 
b/shardingsphere-jdbc/shardingsphere-jdbc-spring/shardingsphere-jdbc-governance-spring/shardingsphere-jdbc-governance-spring-boot-starter/src/test/java/org/apache/shardingsphere/spring/boot/governance/type/GovernanceSpringBootRegistryShardingTest.java
@@ -87,7 +87,7 @@ public class GovernanceSpringBootRegistryShardingTest {
     @Test
     public void assertWithShardingSphereDataSourceNames() {
         SchemaContexts schemaContexts = getFieldValue("schemaContexts", 
GovernanceShardingSphereDataSource.class, dataSource);
-        ShardingRule shardingRule = (ShardingRule) 
schemaContexts.getDefaultMetaData().getRules().iterator().next();
+        ShardingRule shardingRule = (ShardingRule) 
schemaContexts.getDefaultMetaData().getRuleMetaData().getRules().iterator().next();
         assertThat(shardingRule.getDataSourceNames().size(), is(2));
         assertTrue(shardingRule.getDataSourceNames().contains("ds_0"));
         assertTrue(shardingRule.getDataSourceNames().contains("ds_1"));
@@ -96,7 +96,7 @@ public class GovernanceSpringBootRegistryShardingTest {
     @Test
     public void assertWithTableRules() {
         SchemaContexts schemaContexts = getFieldValue("schemaContexts", 
GovernanceShardingSphereDataSource.class, dataSource);
-        ShardingRule shardingRule = (ShardingRule) 
schemaContexts.getDefaultMetaData().getRules().iterator().next();
+        ShardingRule shardingRule = (ShardingRule) 
schemaContexts.getDefaultMetaData().getRuleMetaData().getRules().iterator().next();
         assertThat(shardingRule.getTableRules().size(), is(2));
         TableRule orderRule = shardingRule.getTableRule("t_order");
         assertThat(orderRule.getLogicTable(), is("t_order"));
@@ -121,7 +121,7 @@ public class GovernanceSpringBootRegistryShardingTest {
     @Test
     public void assertWithBindingTableRules() {
         SchemaContexts schemaContexts = getFieldValue("schemaContexts", 
GovernanceShardingSphereDataSource.class, dataSource);
-        ShardingRule shardingRule = (ShardingRule) 
schemaContexts.getDefaultMetaData().getRules().iterator().next();
+        ShardingRule shardingRule = (ShardingRule) 
schemaContexts.getDefaultMetaData().getRuleMetaData().getRules().iterator().next();
         assertThat(shardingRule.getBindingTableRules().size(), is(2));
         TableRule orderRule = shardingRule.getTableRule("t_order");
         assertThat(orderRule.getLogicTable(), is("t_order"));
@@ -147,7 +147,7 @@ public class GovernanceSpringBootRegistryShardingTest {
     @Test
     public void assertWithBroadcastTables() {
         SchemaContexts schemaContexts = getFieldValue("schemaContexts", 
GovernanceShardingSphereDataSource.class, dataSource);
-        ShardingRule shardingRule = (ShardingRule) 
schemaContexts.getDefaultMetaData().getRules().iterator().next();
+        ShardingRule shardingRule = (ShardingRule) 
schemaContexts.getDefaultMetaData().getRuleMetaData().getRules().iterator().next();
         assertThat(shardingRule.getBroadcastTables().size(), is(1));
         assertThat(shardingRule.getBroadcastTables().iterator().next(), 
is("t_config"));
     }
diff --git 
a/shardingsphere-jdbc/shardingsphere-jdbc-spring/shardingsphere-jdbc-governance-spring/shardingsphere-jdbc-governance-spring-boot-starter/src/test/java/org/apache/shardingsphere/spring/boot/governance/type/GovernanceSpringBootReplicaQueryTest.java
 
b/shardingsphere-jdbc/shardingsphere-jdbc-spring/shardingsphere-jdbc-governance-spring/shardingsphere-jdbc-governance-spring-boot-starter/src/test/java/org/apache/shardingsphere/spring/boot/governance/type/GovernanceSpringBootReplicaQ
 [...]
index 524cd4c..657fdf3 100644
--- 
a/shardingsphere-jdbc/shardingsphere-jdbc-spring/shardingsphere-jdbc-governance-spring/shardingsphere-jdbc-governance-spring-boot-starter/src/test/java/org/apache/shardingsphere/spring/boot/governance/type/GovernanceSpringBootReplicaQueryTest.java
+++ 
b/shardingsphere-jdbc/shardingsphere-jdbc-spring/shardingsphere-jdbc-governance-spring/shardingsphere-jdbc-governance-spring-boot-starter/src/test/java/org/apache/shardingsphere/spring/boot/governance/type/GovernanceSpringBootReplicaQueryTest.java
@@ -65,7 +65,7 @@ public class GovernanceSpringBootReplicaQueryTest {
             assertThat(((BasicDataSource) each).getMaxTotal(), is(16));
             assertThat(((BasicDataSource) each).getUsername(), is("sa"));
         }
-        Collection<ShardingSphereRule> rules = 
schemaContexts.getDefaultMetaData().getRules();
+        Collection<ShardingSphereRule> rules = 
schemaContexts.getDefaultMetaData().getRuleMetaData().getRules();
         assertThat(rules.size(), is(1));
         assertReplicaQueryRule((ReplicaQueryRule) rules.iterator().next());
     }
diff --git 
a/shardingsphere-jdbc/shardingsphere-jdbc-spring/shardingsphere-jdbc-governance-spring/shardingsphere-jdbc-governance-spring-boot-starter/src/test/java/org/apache/shardingsphere/spring/boot/governance/type/GovernanceSpringBootShardingTest.java
 
b/shardingsphere-jdbc/shardingsphere-jdbc-spring/shardingsphere-jdbc-governance-spring/shardingsphere-jdbc-governance-spring-boot-starter/src/test/java/org/apache/shardingsphere/spring/boot/governance/type/GovernanceSpringBootShardingTest.java
index f21f9bf..cc78dda 100644
--- 
a/shardingsphere-jdbc/shardingsphere-jdbc-spring/shardingsphere-jdbc-governance-spring/shardingsphere-jdbc-governance-spring-boot-starter/src/test/java/org/apache/shardingsphere/spring/boot/governance/type/GovernanceSpringBootShardingTest.java
+++ 
b/shardingsphere-jdbc/shardingsphere-jdbc-spring/shardingsphere-jdbc-governance-spring/shardingsphere-jdbc-governance-spring-boot-starter/src/test/java/org/apache/shardingsphere/spring/boot/governance/type/GovernanceSpringBootShardingTest.java
@@ -71,7 +71,7 @@ public class GovernanceSpringBootShardingTest {
     @Test
     public void assertWithShardingSphereDataSourceNames() {
         SchemaContexts schemaContexts = getFieldValue("schemaContexts", 
GovernanceShardingSphereDataSource.class, dataSource);
-        ShardingRule shardingRule = (ShardingRule) 
schemaContexts.getDefaultMetaData().getRules().iterator().next();
+        ShardingRule shardingRule = (ShardingRule) 
schemaContexts.getDefaultMetaData().getRuleMetaData().getRules().iterator().next();
         assertThat(shardingRule.getDataSourceNames().size(), is(2));
         assertTrue(shardingRule.getDataSourceNames().contains("ds_0"));
         assertTrue(shardingRule.getDataSourceNames().contains("ds_1"));
@@ -80,7 +80,7 @@ public class GovernanceSpringBootShardingTest {
     @Test
     public void assertWithTableRules() {
         SchemaContexts schemaContexts = getFieldValue("schemaContexts", 
GovernanceShardingSphereDataSource.class, dataSource);
-        ShardingRule shardingRule = (ShardingRule) 
schemaContexts.getDefaultMetaData().getRules().iterator().next();
+        ShardingRule shardingRule = (ShardingRule) 
schemaContexts.getDefaultMetaData().getRuleMetaData().getRules().iterator().next();
         assertThat(shardingRule.getTableRules().size(), is(2));
         TableRule orderRule = shardingRule.getTableRule("t_order");
         assertThat(orderRule.getLogicTable(), is("t_order"));
@@ -106,7 +106,7 @@ public class GovernanceSpringBootShardingTest {
     @Test
     public void assertWithBindingTableRules() {
         SchemaContexts schemaContexts = getFieldValue("schemaContexts", 
GovernanceShardingSphereDataSource.class, dataSource);
-        ShardingRule shardingRule = (ShardingRule) 
schemaContexts.getDefaultMetaData().getRules().iterator().next();
+        ShardingRule shardingRule = (ShardingRule) 
schemaContexts.getDefaultMetaData().getRuleMetaData().getRules().iterator().next();
         assertThat(shardingRule.getBindingTableRules().size(), is(2));
         TableRule orderRule = shardingRule.getTableRule("t_order");
         assertThat(orderRule.getLogicTable(), is("t_order"));
@@ -131,7 +131,7 @@ public class GovernanceSpringBootShardingTest {
     @Test
     public void assertWithBroadcastTables() {
         SchemaContexts schemaContexts = getFieldValue("schemaContexts", 
GovernanceShardingSphereDataSource.class, dataSource);
-        ShardingRule shardingRule = (ShardingRule) 
schemaContexts.getDefaultMetaData().getRules().iterator().next();
+        ShardingRule shardingRule = (ShardingRule) 
schemaContexts.getDefaultMetaData().getRuleMetaData().getRules().iterator().next();
         assertThat(shardingRule.getBroadcastTables().size(), is(1));
         assertThat(shardingRule.getBroadcastTables().iterator().next(), 
is("t_config"));
     }
diff --git 
a/shardingsphere-jdbc/shardingsphere-jdbc-spring/shardingsphere-jdbc-governance-spring/shardingsphere-jdbc-governance-spring-namespace/src/test/java/org/apache/shardingsphere/spring/namespace/governance/GovernanceEncryptNamespaceTest.java
 
b/shardingsphere-jdbc/shardingsphere-jdbc-spring/shardingsphere-jdbc-governance-spring/shardingsphere-jdbc-governance-spring-namespace/src/test/java/org/apache/shardingsphere/spring/namespace/governance/GovernanceEncryptNamespaceTest.java
index 573da85..e353b2d 100644
--- 
a/shardingsphere-jdbc/shardingsphere-jdbc-spring/shardingsphere-jdbc-governance-spring/shardingsphere-jdbc-governance-spring-namespace/src/test/java/org/apache/shardingsphere/spring/namespace/governance/GovernanceEncryptNamespaceTest.java
+++ 
b/shardingsphere-jdbc/shardingsphere-jdbc-spring/shardingsphere-jdbc-governance-spring/shardingsphere-jdbc-governance-spring-namespace/src/test/java/org/apache/shardingsphere/spring/namespace/governance/GovernanceEncryptNamespaceTest.java
@@ -58,7 +58,7 @@ public final class GovernanceEncryptNamespaceTest extends 
AbstractJUnit4SpringCo
     private AlgorithmProvidedEncryptRuleConfiguration 
getEncryptRuleConfiguration() {
         GovernanceShardingSphereDataSource governanceDataSource = 
(GovernanceShardingSphereDataSource) 
applicationContext.getBean("encryptDataSourceGovernance");
         SchemaContexts schemaContexts = (SchemaContexts) 
FieldValueUtil.getFieldValue(governanceDataSource, "schemaContexts");
-        return (AlgorithmProvidedEncryptRuleConfiguration) 
schemaContexts.getDefaultMetaData().getConfigurations().iterator().next();
+        return (AlgorithmProvidedEncryptRuleConfiguration) 
schemaContexts.getDefaultMetaData().getRuleMetaData().getConfigurations().iterator().next();
     }
     
     private void assertEncryptRule(final 
AlgorithmProvidedEncryptRuleConfiguration config) {
diff --git 
a/shardingsphere-jdbc/shardingsphere-jdbc-spring/shardingsphere-jdbc-governance-spring/shardingsphere-jdbc-governance-spring-namespace/src/test/java/org/apache/shardingsphere/spring/namespace/governance/GovernanceReplicaQueryNamespaceTest.java
 
b/shardingsphere-jdbc/shardingsphere-jdbc-spring/shardingsphere-jdbc-governance-spring/shardingsphere-jdbc-governance-spring-namespace/src/test/java/org/apache/shardingsphere/spring/namespace/governance/GovernanceReplicaQueryNamespaceTest.java
index 8cc7d3c..f7e927f 100644
--- 
a/shardingsphere-jdbc/shardingsphere-jdbc-spring/shardingsphere-jdbc-governance-spring/shardingsphere-jdbc-governance-spring-namespace/src/test/java/org/apache/shardingsphere/spring/namespace/governance/GovernanceReplicaQueryNamespaceTest.java
+++ 
b/shardingsphere-jdbc/shardingsphere-jdbc-spring/shardingsphere-jdbc-governance-spring/shardingsphere-jdbc-governance-spring-namespace/src/test/java/org/apache/shardingsphere/spring/namespace/governance/GovernanceReplicaQueryNamespaceTest.java
@@ -90,7 +90,7 @@ public class GovernanceReplicaQueryNamespaceTest extends 
AbstractJUnit4SpringCon
     private ReplicaQueryRule getReplicaQueryRule(final String dataSourceName) {
         GovernanceShardingSphereDataSource dataSource = 
applicationContext.getBean(dataSourceName, 
GovernanceShardingSphereDataSource.class);
         SchemaContexts schemaContexts = (SchemaContexts) 
FieldValueUtil.getFieldValue(dataSource, "schemaContexts");
-        return (ReplicaQueryRule) 
schemaContexts.getDefaultMetaData().getRules().iterator().next();
+        return (ReplicaQueryRule) 
schemaContexts.getDefaultMetaData().getRuleMetaData().getRules().iterator().next();
     }
     
     @Test
diff --git 
a/shardingsphere-jdbc/shardingsphere-jdbc-spring/shardingsphere-jdbc-governance-spring/shardingsphere-jdbc-governance-spring-namespace/src/test/java/org/apache/shardingsphere/spring/namespace/governance/GovernanceShardingNamespaceTest.java
 
b/shardingsphere-jdbc/shardingsphere-jdbc-spring/shardingsphere-jdbc-governance-spring/shardingsphere-jdbc-governance-spring-namespace/src/test/java/org/apache/shardingsphere/spring/namespace/governance/GovernanceShardingNamespaceTest.java
index d413fc6..7dc1236 100644
--- 
a/shardingsphere-jdbc/shardingsphere-jdbc-spring/shardingsphere-jdbc-governance-spring/shardingsphere-jdbc-governance-spring-namespace/src/test/java/org/apache/shardingsphere/spring/namespace/governance/GovernanceShardingNamespaceTest.java
+++ 
b/shardingsphere-jdbc/shardingsphere-jdbc-spring/shardingsphere-jdbc-governance-spring/shardingsphere-jdbc-governance-spring-namespace/src/test/java/org/apache/shardingsphere/spring/namespace/governance/GovernanceShardingNamespaceTest.java
@@ -154,7 +154,7 @@ public class GovernanceShardingNamespaceTest extends 
AbstractJUnit4SpringContext
     public void assertDefaultActualDataNodes() {
         GovernanceShardingSphereDataSource multiTableRulesDataSource = 
applicationContext.getBean("multiTableRulesDataSourceGovernance", 
GovernanceShardingSphereDataSource.class);
         SchemaContexts schemaContexts = (SchemaContexts) 
FieldValueUtil.getFieldValue(multiTableRulesDataSource, "schemaContexts");
-        ShardingRule shardingRule = (ShardingRule) 
schemaContexts.getDefaultMetaData().getRules().iterator().next();
+        ShardingRule shardingRule = (ShardingRule) 
schemaContexts.getDefaultMetaData().getRuleMetaData().getRules().iterator().next();
         assertThat(shardingRule.getTableRules().size(), is(2));
         Iterator<TableRule> tableRules = 
shardingRule.getTableRules().iterator();
         TableRule orderRule = tableRules.next();
@@ -176,6 +176,6 @@ public class GovernanceShardingNamespaceTest extends 
AbstractJUnit4SpringContext
     private ShardingRule getShardingRule(final String dataSourceName) {
         GovernanceShardingSphereDataSource shardingSphereDataSource = 
applicationContext.getBean(dataSourceName, 
GovernanceShardingSphereDataSource.class);
         SchemaContexts schemaContexts = (SchemaContexts) 
FieldValueUtil.getFieldValue(shardingSphereDataSource, "schemaContexts");
-        return (ShardingRule) 
schemaContexts.getDefaultMetaData().getRules().iterator().next();
+        return (ShardingRule) 
schemaContexts.getDefaultMetaData().getRuleMetaData().getRules().iterator().next();
     }
 }
diff --git 
a/shardingsphere-jdbc/shardingsphere-jdbc-spring/shardingsphere-jdbc-governance-spring/shardingsphere-jdbc-governance-spring-namespace/src/test/java/org/apache/shardingsphere/spring/namespace/governance/GovernanceShardingReplicaQueryNamespaceTest.java
 
b/shardingsphere-jdbc/shardingsphere-jdbc-spring/shardingsphere-jdbc-governance-spring/shardingsphere-jdbc-governance-spring-namespace/src/test/java/org/apache/shardingsphere/spring/namespace/governance/GovernanceShardingReplicaQu
 [...]
index c6dfe0a..731fb90 100644
--- 
a/shardingsphere-jdbc/shardingsphere-jdbc-spring/shardingsphere-jdbc-governance-spring/shardingsphere-jdbc-governance-spring-namespace/src/test/java/org/apache/shardingsphere/spring/namespace/governance/GovernanceShardingReplicaQueryNamespaceTest.java
+++ 
b/shardingsphere-jdbc/shardingsphere-jdbc-spring/shardingsphere-jdbc-governance-spring/shardingsphere-jdbc-governance-spring-namespace/src/test/java/org/apache/shardingsphere/spring/namespace/governance/GovernanceShardingReplicaQueryNamespaceTest.java
@@ -65,6 +65,6 @@ public class GovernanceShardingReplicaQueryNamespaceTest 
extends AbstractJUnit4S
     private ShardingRule getShardingRule(final String dataSourceName) {
         GovernanceShardingSphereDataSource shardingSphereDataSource = 
applicationContext.getBean(dataSourceName, 
GovernanceShardingSphereDataSource.class);
         SchemaContexts schemaContexts = (SchemaContexts) 
FieldValueUtil.getFieldValue(shardingSphereDataSource, "schemaContexts");
-        return (ShardingRule) 
schemaContexts.getDefaultMetaData().getRules().iterator().next();
+        return (ShardingRule) 
schemaContexts.getDefaultMetaData().getRuleMetaData().getRules().iterator().next();
     }
 }
diff --git 
a/shardingsphere-proxy/shardingsphere-proxy-backend/src/main/java/org/apache/shardingsphere/proxy/backend/communication/jdbc/JDBCDatabaseCommunicationEngine.java
 
b/shardingsphere-proxy/shardingsphere-proxy-backend/src/main/java/org/apache/shardingsphere/proxy/backend/communication/jdbc/JDBCDatabaseCommunicationEngine.java
index 48cffd0..0a4c190 100644
--- 
a/shardingsphere-proxy/shardingsphere-proxy-backend/src/main/java/org/apache/shardingsphere/proxy/backend/communication/jdbc/JDBCDatabaseCommunicationEngine.java
+++ 
b/shardingsphere-proxy/shardingsphere-proxy-backend/src/main/java/org/apache/shardingsphere/proxy/backend/communication/jdbc/JDBCDatabaseCommunicationEngine.java
@@ -111,7 +111,7 @@ public final class JDBCDatabaseCommunicationEngine 
implements DatabaseCommunicat
     }
     
     private Optional<PhysicalTableMetaData> loadTableMetaData(final String 
tableName) throws SQLException {
-        SchemaMetaDataLoader loader = new 
SchemaMetaDataLoader(metaData.getRules());
+        SchemaMetaDataLoader loader = new 
SchemaMetaDataLoader(metaData.getRuleMetaData().getRules());
         return loader.load(
                 
ProxyContext.getInstance().getSchemaContexts().getDatabaseType(), 
metaData.getResource().getDataSources(), tableName, 
ProxyContext.getInstance().getSchemaContexts().getProps());
     }
@@ -132,13 +132,14 @@ public final class JDBCDatabaseCommunicationEngine 
implements DatabaseCommunicat
     }
     
     private boolean isNeedAccumulate(final SQLStatementContext<?> 
sqlStatementContext) {
-        Optional<DataNodeRoutedRule> dataNodeRoutedRule = 
metaData.getRules().stream().filter(each -> each instanceof 
DataNodeRoutedRule).findFirst().map(rule -> (DataNodeRoutedRule) rule);
+        Optional<DataNodeRoutedRule> dataNodeRoutedRule = 
+                metaData.getRuleMetaData().getRules().stream().filter(each -> 
each instanceof DataNodeRoutedRule).findFirst().map(rule -> 
(DataNodeRoutedRule) rule);
         return dataNodeRoutedRule.isPresent() && 
dataNodeRoutedRule.get().isNeedAccumulate(sqlStatementContext.getTablesContext().getTableNames());
     }
     
     private MergedResult mergeQuery(final SQLStatementContext<?> 
sqlStatementContext, final List<QueryResult> queryResults) throws SQLException {
         MergeEngine mergeEngine = new 
MergeEngine(ProxyContext.getInstance().getSchemaContexts().getDatabaseType(), 
-                metaData.getSchema().getSchemaMetaData(), 
ProxyContext.getInstance().getSchemaContexts().getProps(), metaData.getRules());
+                metaData.getSchema().getSchemaMetaData(), 
ProxyContext.getInstance().getSchemaContexts().getProps(), 
metaData.getRuleMetaData().getRules());
         return mergeEngine.merge(queryResults, sqlStatementContext);
     }
     
diff --git 
a/shardingsphere-proxy/shardingsphere-proxy-backend/src/main/java/org/apache/shardingsphere/proxy/backend/communication/jdbc/execute/engine/jdbc/JDBCExecuteEngine.java
 
b/shardingsphere-proxy/shardingsphere-proxy-backend/src/main/java/org/apache/shardingsphere/proxy/backend/communication/jdbc/execute/engine/jdbc/JDBCExecuteEngine.java
index 575fcd3..21e6f59 100644
--- 
a/shardingsphere-proxy/shardingsphere-proxy-backend/src/main/java/org/apache/shardingsphere/proxy/backend/communication/jdbc/execute/engine/jdbc/JDBCExecuteEngine.java
+++ 
b/shardingsphere-proxy/shardingsphere-proxy-backend/src/main/java/org/apache/shardingsphere/proxy/backend/communication/jdbc/execute/engine/jdbc/JDBCExecuteEngine.java
@@ -135,13 +135,13 @@ public final class JDBCExecuteEngine implements 
SQLExecuteEngine {
     @SuppressWarnings({"unchecked", "rawtypes"})
     private Collection<InputGroup<StatementExecuteUnit>> 
generateInputGroups(final Collection<ExecutionUnit> executionUnits, final int 
maxConnectionsSizePerQuery, final boolean isReturnGeneratedKeys,
                                                                              
final RouteContext routeContext) throws SQLException {
-        Collection<ShardingSphereRule> rules = 
ProxyContext.getInstance().getMetaData(backendConnection.getSchemaName()).getRules();
+        Collection<ShardingSphereRule> rules = 
ProxyContext.getInstance().getMetaData(backendConnection.getSchemaName()).getRuleMetaData().getRules();
         ExecuteGroupEngine executeGroupEngine = 
accessor.getExecuteGroupEngine(backendConnection, maxConnectionsSizePerQuery, 
new StatementOption(isReturnGeneratedKeys), rules);
         return (Collection<InputGroup<StatementExecuteUnit>>) 
executeGroupEngine.generate(routeContext, executionUnits);
     }
     
     private Collection<ExecuteResult> executeWithUnmanagedResource(final 
ExecutionContext executionContext, final int maxConnectionsSizePerQuery) throws 
SQLException {
-        Collection<ShardingSphereRule> rules = 
ProxyContext.getInstance().getMetaData(backendConnection.getSchemaName()).getRules();
+        Collection<ShardingSphereRule> rules = 
ProxyContext.getInstance().getMetaData(backendConnection.getSchemaName()).getRuleMetaData().getRules();
         Collection<InputGroup<RawSQLExecuteUnit>> inputGroups = new 
RawExecuteGroupEngine(maxConnectionsSizePerQuery, 
rules).generate(executionContext.getRouteContext(),
                 executionContext.getExecutionUnits());
         // TODO handle query header
diff --git 
a/shardingsphere-proxy/shardingsphere-proxy-backend/src/main/java/org/apache/shardingsphere/proxy/backend/response/query/QueryHeaderBuilder.java
 
b/shardingsphere-proxy/shardingsphere-proxy-backend/src/main/java/org/apache/shardingsphere/proxy/backend/response/query/QueryHeaderBuilder.java
index 21d81cd..f889d0c 100644
--- 
a/shardingsphere-proxy/shardingsphere-proxy-backend/src/main/java/org/apache/shardingsphere/proxy/backend/response/query/QueryHeaderBuilder.java
+++ 
b/shardingsphere-proxy/shardingsphere-proxy-backend/src/main/java/org/apache/shardingsphere/proxy/backend/response/query/QueryHeaderBuilder.java
@@ -68,7 +68,8 @@ public final class QueryHeaderBuilder {
     private static QueryHeader build(final ResultSetMetaData 
resultSetMetaData, final ShardingSphereMetaData metaData, final String 
columnName, final int columnIndex) throws SQLException {
         String schemaName = metaData.getName();
         String actualTableName = resultSetMetaData.getTableName(columnIndex);
-        Optional<DataNodeRoutedRule> dataNodeRoutedRule = 
metaData.getRules().stream().filter(each -> each instanceof 
DataNodeRoutedRule).findFirst().map(rule -> (DataNodeRoutedRule) rule);
+        Optional<DataNodeRoutedRule> dataNodeRoutedRule = 
+                metaData.getRuleMetaData().getRules().stream().filter(each -> 
each instanceof DataNodeRoutedRule).findFirst().map(rule -> 
(DataNodeRoutedRule) rule);
         String tableName;
         boolean primaryKey;
         if (null != actualTableName && dataNodeRoutedRule.isPresent()) {
diff --git 
a/shardingsphere-proxy/shardingsphere-proxy-backend/src/test/java/org/apache/shardingsphere/proxy/backend/communication/jdbc/DatabaseCommunicationEngineFactoryTest.java
 
b/shardingsphere-proxy/shardingsphere-proxy-backend/src/test/java/org/apache/shardingsphere/proxy/backend/communication/jdbc/DatabaseCommunicationEngineFactoryTest.java
index e7a9f73..6fbc436 100644
--- 
a/shardingsphere-proxy/shardingsphere-proxy-backend/src/test/java/org/apache/shardingsphere/proxy/backend/communication/jdbc/DatabaseCommunicationEngineFactoryTest.java
+++ 
b/shardingsphere-proxy/shardingsphere-proxy-backend/src/test/java/org/apache/shardingsphere/proxy/backend/communication/jdbc/DatabaseCommunicationEngineFactoryTest.java
@@ -58,7 +58,7 @@ public final class DatabaseCommunicationEngineFactoryTest {
     
     private Map<String, ShardingSphereMetaData> getMetaDataMap() {
         ShardingSphereMetaData result = mock(ShardingSphereMetaData.class, 
RETURNS_DEEP_STUBS);
-        when(result.getRules()).thenReturn(Collections.emptyList());
+        
when(result.getRuleMetaData().getRules()).thenReturn(Collections.emptyList());
         return Collections.singletonMap("schema", result);
     }
     
diff --git 
a/shardingsphere-proxy/shardingsphere-proxy-backend/src/test/java/org/apache/shardingsphere/proxy/backend/response/query/QueryHeaderBuilderTest.java
 
b/shardingsphere-proxy/shardingsphere-proxy-backend/src/test/java/org/apache/shardingsphere/proxy/backend/response/query/QueryHeaderBuilderTest.java
index 1cd4bc0..d9c065d 100644
--- 
a/shardingsphere-proxy/shardingsphere-proxy-backend/src/test/java/org/apache/shardingsphere/proxy/backend/response/query/QueryHeaderBuilderTest.java
+++ 
b/shardingsphere-proxy/shardingsphere-proxy-backend/src/test/java/org/apache/shardingsphere/proxy/backend/response/query/QueryHeaderBuilderTest.java
@@ -139,7 +139,7 @@ public final class QueryHeaderBuilderTest {
         when(result.getSchema()).thenReturn(schema);
         ShardingRule shardingRule = mock(ShardingRule.class);
         
when(shardingRule.findLogicTableByActualTable("t_order")).thenReturn(Optional.of("t_logic_order"));
-        
when(result.getRules()).thenReturn(Collections.singletonList(shardingRule));
+        
when(result.getRuleMetaData().getRules()).thenReturn(Collections.singletonList(shardingRule));
         when(result.getName()).thenReturn("sharding_schema");
         return result;
     }
diff --git 
a/shardingsphere-proxy/shardingsphere-proxy-backend/src/test/java/org/apache/shardingsphere/proxy/backend/text/sctl/explain/ShardingCTLExplainBackendHandlerTest.java
 
b/shardingsphere-proxy/shardingsphere-proxy-backend/src/test/java/org/apache/shardingsphere/proxy/backend/text/sctl/explain/ShardingCTLExplainBackendHandlerTest.java
index b826700..f82562f 100644
--- 
a/shardingsphere-proxy/shardingsphere-proxy-backend/src/test/java/org/apache/shardingsphere/proxy/backend/text/sctl/explain/ShardingCTLExplainBackendHandlerTest.java
+++ 
b/shardingsphere-proxy/shardingsphere-proxy-backend/src/test/java/org/apache/shardingsphere/proxy/backend/text/sctl/explain/ShardingCTLExplainBackendHandlerTest.java
@@ -6,6 +6,7 @@ import 
org.apache.shardingsphere.infra.context.schema.impl.StandardSchemaContext
 import org.apache.shardingsphere.infra.database.type.dialect.MySQLDatabaseType;
 import org.apache.shardingsphere.infra.executor.kernel.ExecutorKernel;
 import 
org.apache.shardingsphere.infra.metadata.resource.ShardingSphereResource;
+import 
org.apache.shardingsphere.infra.metadata.rule.ShardingSphereRuleMetaData;
 import org.apache.shardingsphere.infra.schema.model.ShardingSphereSchema;
 import org.apache.shardingsphere.infra.rule.ShardingSphereRule;
 import org.apache.shardingsphere.infra.metadata.ShardingSphereMetaData;
@@ -64,8 +65,8 @@ public final class ShardingCTLExplainBackendHandlerTest {
     private Map<String, ShardingSphereMetaData> getMetaDataMap() {
         ShardingSphereResource resource = new ShardingSphereResource(
                 Collections.singletonMap("ds0", mock(DataSource.class)), 
mock(DataSourcesMetaData.class, RETURNS_DEEP_STUBS), 
mock(CachedDatabaseMetaData.class));
-        ShardingSphereMetaData metaData = new ShardingSphereMetaData(
-                "schema", Collections.emptyList(), 
Collections.singleton(mock(ShardingSphereRule.class)), resource, 
mock(ShardingSphereSchema.class, RETURNS_DEEP_STUBS));
+        ShardingSphereMetaData metaData = new ShardingSphereMetaData("schema", 
+                resource, new 
ShardingSphereRuleMetaData(Collections.emptyList(), 
Collections.singleton(mock(ShardingSphereRule.class))), 
mock(ShardingSphereSchema.class, RETURNS_DEEP_STUBS));
         return Collections.singletonMap("schema", metaData);
     }
     

Reply via email to