You are viewing a plain text version of this content. The canonical link for it is here.
Posted to notifications@shardingsphere.apache.org by ji...@apache.org on 2022/04/07 03:52:25 UTC

[shardingsphere] branch master updated: DistSQL statement enhancements (#16611)

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

jianglongtao pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/shardingsphere.git


The following commit(s) were added to refs/heads/master by this push:
     new 07cfb65da56 DistSQL statement enhancements (#16611)
07cfb65da56 is described below

commit 07cfb65da56bcce89501ee38a4288cd8da6ec20e
Author: lanchengx <52...@users.noreply.github.com>
AuthorDate: Thu Apr 7 11:52:06 2022 +0800

    DistSQL statement enhancements (#16611)
    
    * The sharding statement implements the `subjectSupplier` interface
    
    * The shadow statement implements the `subjectSupplier` interface
    
    * The readwrite splitting statement implements the `subjectSupplier` interface
    
    * The encrypt statement implements the `subjectSupplier` interface
    
    * The database discovery statement implements the `subjectSupplier` interface
    
    * The resource & single table rule statement implements the `subjectSupplier` interface
    
    * The abstract statement implements the `subjectSupplier` interface
    
    * Add subject & operation supplier interface
    
    * Reformat
    
    * Revert server.yaml
    
    * Update java doc
    
    * Update java doc
    
    * Adjust the path.
    
    * Update java doc
    
    * Use operation.
---
 .../DistSQLOperationSupplier.java}                 | 15 ++--
 .../DistSQLOperationTypeEnum.java}                 | 33 +++++----
 .../impl/AddOperationSupplier.java}                | 16 ++---
 .../impl/AlterOperationSupplier.java}              | 16 ++---
 .../impl/CreateOperationSupplier.java}             | 16 ++---
 .../impl/DropOperationSupplier.java}               | 16 ++---
 .../impl/RALOperationSupplier.java}                | 16 ++---
 .../impl/ShowOperationSupplier.java}               | 16 ++---
 .../distsql/parser/statement/DistSQLStatement.java | 11 ++-
 .../parser/statement/DistSQLStatementType.java     | 80 ++++++++++++++++++++++
 .../distsql/parser/statement/ral/RALStatement.java | 21 +++++-
 .../distsql/parser/statement/rdl/RDLStatement.java |  6 ++
 .../statement/rdl/ResourceDefinitionStatement.java | 10 ++-
 .../AlterDefaultSingleTableRuleStatement.java      |  3 +-
 .../rdl/alter/AlterResourceStatement.java          |  4 +-
 .../statement/rdl/alter/AlterRuleStatement.java    |  6 ++
 .../statement/rdl/create/AddResourceStatement.java |  9 ++-
 .../CreateDefaultSingleTableRuleStatement.java     |  3 +-
 .../statement/rdl/create/CreateRuleStatement.java  |  4 +-
 .../drop/DropDefaultSingleTableRuleStatement.java  |  3 +-
 .../statement/rdl/drop/DropResourceStatement.java  |  6 ++
 .../statement/rdl/drop/DropRuleStatement.java      |  6 ++
 .../distsql/parser/statement/rql/RQLStatement.java | 12 ++++
 .../rql/show/CountSchemaRulesStatement.java        |  6 ++
 .../statement/rql/show/ShowResourcesStatement.java |  3 +-
 .../rql/show/ShowRulesUsedResourceStatement.java   |  3 +-
 .../rql/show/ShowSingleTableRulesStatement.java    |  3 +-
 .../rql/show/ShowSingleTableStatement.java         |  3 +-
 .../rql/show/ShowUnusedResourcesStatement.java     |  3 +-
 .../parser/subject/DistSQLSubjectSupplier.java     | 29 +++++---
 .../parser/subject/DistSQLSubjectTypeEnum.java     | 40 ++++++-----
 .../impl/DatabaseDiscoverySubjectSupplier.java}    | 16 ++---
 .../impl/EncryptSubjectSupplier.java}              | 16 ++---
 .../impl/ReadwriteSplittingSubjectSupplier.java}   | 16 ++---
 .../impl/ResourceSubjectSupplier.java}             | 16 ++---
 .../impl/ScalingSubjectSupplier.java}              | 16 ++---
 .../impl/ShadowSubjectSupplier.java}               | 16 ++---
 .../impl/ShardingSubjectSupplier.java}             | 16 ++---
 .../impl/SingleTableSubjectSupplier.java}          | 16 ++---
 .../AlterDatabaseDiscoveryHeartbeatStatement.java  |  3 +-
 .../AlterDatabaseDiscoveryRuleStatement.java       |  3 +-
 .../AlterDatabaseDiscoveryTypeStatement.java       |  3 +-
 .../CreateDatabaseDiscoveryHeartbeatStatement.java |  3 +-
 .../CreateDatabaseDiscoveryRuleStatement.java      |  3 +-
 .../CreateDatabaseDiscoveryTypeStatement.java      |  3 +-
 .../DropDatabaseDiscoveryHeartbeatStatement.java   |  3 +-
 .../DropDatabaseDiscoveryRuleStatement.java        |  3 +-
 .../DropDatabaseDiscoveryTypeStatement.java        |  3 +-
 .../ShowDatabaseDiscoveryHeartbeatsStatement.java  |  3 +-
 .../ShowDatabaseDiscoveryRulesStatement.java       |  3 +-
 .../ShowDatabaseDiscoveryTypesStatement.java       |  3 +-
 .../statement/AlterEncryptRuleStatement.java       |  9 ++-
 .../statement/CreateEncryptRuleStatement.java      | 11 ++-
 .../parser/statement/DropEncryptRuleStatement.java |  8 ++-
 .../statement/ShowEncryptRulesStatement.java       | 11 ++-
 .../AlterReadwriteSplittingRuleStatement.java      |  3 +-
 .../CreateReadwriteSplittingRuleStatement.java     |  3 +-
 .../DropReadwriteSplittingRuleStatement.java       |  3 +-
 ...owReadwriteSplittingReadResourcesStatement.java |  3 +-
 .../ShowReadwriteSplittingRulesStatement.java      |  3 +-
 .../hint/ClearReadwriteSplittingHintStatement.java |  3 +-
 .../hint/SetReadwriteSplittingHintStatement.java   |  3 +-
 .../ShowReadwriteSplittingHintStatusStatement.java |  3 +-
 .../SetReadwriteSplittingStatusStatement.java      |  3 +-
 .../statement/AlterShadowAlgorithmStatement.java   |  3 +-
 .../parser/statement/AlterShadowRuleStatement.java |  3 +-
 .../CreateDefaultShadowAlgorithmStatement.java     |  3 +-
 .../statement/CreateShadowAlgorithmStatement.java  |  3 +-
 .../statement/CreateShadowRuleStatement.java       |  3 +-
 .../DropDefaultShadowAlgorithmStatement.java       |  3 +-
 .../statement/DropShadowAlgorithmStatement.java    |  3 +-
 .../parser/statement/DropShadowRuleStatement.java  |  3 +-
 .../statement/ShowShadowAlgorithmsStatement.java   |  3 +-
 .../parser/statement/ShowShadowRulesStatement.java |  3 +-
 .../statement/ShowShadowTableRulesStatement.java   |  3 +-
 .../distsql/statement/ApplyScalingStatement.java   |  3 +-
 .../distsql/statement/CheckScalingStatement.java   |  3 +-
 .../CreateShardingScalingRuleStatement.java        |  3 +-
 .../DisableShardingScalingRuleStatement.java       |  3 +-
 .../distsql/statement/DropScalingStatement.java    |  3 +-
 .../DropShardingScalingRuleStatement.java          |  3 +-
 .../EnableShardingScalingRuleStatement.java        |  3 +-
 .../distsql/statement/ResetScalingStatement.java   |  3 +-
 .../RestoreScalingSourceWritingStatement.java      |  3 +-
 .../ShowScalingCheckAlgorithmsStatement.java       |  3 +-
 .../statement/ShowScalingListStatement.java        |  3 +-
 .../statement/ShowScalingStatusStatement.java      |  3 +-
 .../ShowShardingScalingRulesStatement.java         |  3 +-
 .../distsql/statement/StartScalingStatement.java   |  3 +-
 .../StopScalingSourceWritingStatement.java         |  3 +-
 .../distsql/statement/StopScalingStatement.java    |  3 +-
 .../AlterDefaultShardingStrategyStatement.java     |  3 +-
 .../statement/AlterShardingAlgorithmStatement.java |  3 +-
 .../AlterShardingBindingTableRulesStatement.java   |  8 ++-
 .../AlterShardingBroadcastTableRulesStatement.java |  8 ++-
 .../AlterShardingKeyGeneratorStatement.java        |  3 +-
 .../statement/AlterShardingTableRuleStatement.java |  9 ++-
 .../CreateDefaultShardingStrategyStatement.java    |  3 +-
 .../CreateShardingAlgorithmStatement.java          |  3 +-
 .../CreateShardingBindingTableRulesStatement.java  |  8 ++-
 ...CreateShardingBroadcastTableRulesStatement.java |  3 +-
 .../CreateShardingKeyGeneratorStatement.java       |  3 +-
 .../CreateShardingTableRuleStatement.java          |  9 ++-
 .../DropDefaultShardingStrategyStatement.java      |  3 +-
 .../statement/DropShardingAlgorithmStatement.java  |  3 +-
 .../DropShardingBindingTableRulesStatement.java    |  3 +-
 .../DropShardingBroadcastTableRulesStatement.java  |  8 ++-
 .../DropShardingKeyGeneratorStatement.java         |  3 +-
 .../statement/DropShardingTableRuleStatement.java  |  3 +-
 .../ShowDefaultShardingStrategyStatement.java      |  3 +-
 .../statement/ShowShardingAlgorithmsStatement.java |  3 +-
 .../ShowShardingBindingTableRulesStatement.java    |  3 +-
 .../ShowShardingBroadcastTableRulesStatement.java  |  3 +-
 .../ShowShardingKeyGeneratorsStatement.java        |  3 +-
 .../statement/ShowShardingTableNodesStatement.java | 11 ++-
 .../statement/ShowShardingTableRulesStatement.java | 11 ++-
 ...owShardingTableRulesUsedAlgorithmStatement.java |  3 +-
 ...hardingTableRulesUsedKeyGeneratorStatement.java |  3 +-
 .../ShowUnusedShardingAlgorithmsStatement.java     |  3 +-
 .../ShowUnusedShardingKeyGeneratorsStatement.java  |  3 +-
 .../fixture/CreateFixtureRuleStatement.java        |  6 ++
 121 files changed, 617 insertions(+), 253 deletions(-)

diff --git a/shardingsphere-distsql/shardingsphere-distsql-statement/src/main/java/org/apache/shardingsphere/distsql/parser/statement/DistSQLStatement.java b/shardingsphere-distsql/shardingsphere-distsql-statement/src/main/java/org/apache/shardingsphere/distsql/parser/operation/DistSQLOperationSupplier.java
similarity index 75%
copy from shardingsphere-distsql/shardingsphere-distsql-statement/src/main/java/org/apache/shardingsphere/distsql/parser/statement/DistSQLStatement.java
copy to shardingsphere-distsql/shardingsphere-distsql-statement/src/main/java/org/apache/shardingsphere/distsql/parser/operation/DistSQLOperationSupplier.java
index d0b132f26c4..ee76642de07 100644
--- a/shardingsphere-distsql/shardingsphere-distsql-statement/src/main/java/org/apache/shardingsphere/distsql/parser/statement/DistSQLStatement.java
+++ b/shardingsphere-distsql/shardingsphere-distsql-statement/src/main/java/org/apache/shardingsphere/distsql/parser/operation/DistSQLOperationSupplier.java
@@ -15,12 +15,17 @@
  * limitations under the License.
  */
 
-package org.apache.shardingsphere.distsql.parser.statement;
-
-import org.apache.shardingsphere.sql.parser.sql.common.statement.AbstractSQLStatement;
+package org.apache.shardingsphere.distsql.parser.operation;
 
 /**
- * Dist SQL Statement.
+ * Dist SQL operation supplier.
  */
-public abstract class DistSQLStatement extends AbstractSQLStatement {
+public interface DistSQLOperationSupplier {
+    
+    /**
+     * Get operation type.
+     *
+     * @return operation type
+     */
+    DistSQLOperationTypeEnum getOperationType();
 }
diff --git a/shardingsphere-distsql/shardingsphere-distsql-statement/src/main/java/org/apache/shardingsphere/distsql/parser/statement/rql/show/ShowSingleTableStatement.java b/shardingsphere-distsql/shardingsphere-distsql-statement/src/main/java/org/apache/shardingsphere/distsql/parser/operation/DistSQLOperationTypeEnum.java
similarity index 54%
copy from shardingsphere-distsql/shardingsphere-distsql-statement/src/main/java/org/apache/shardingsphere/distsql/parser/statement/rql/show/ShowSingleTableStatement.java
copy to shardingsphere-distsql/shardingsphere-distsql-statement/src/main/java/org/apache/shardingsphere/distsql/parser/operation/DistSQLOperationTypeEnum.java
index f0b80b1e686..87f6a7f09b7 100644
--- a/shardingsphere-distsql/shardingsphere-distsql-statement/src/main/java/org/apache/shardingsphere/distsql/parser/statement/rql/show/ShowSingleTableStatement.java
+++ b/shardingsphere-distsql/shardingsphere-distsql-statement/src/main/java/org/apache/shardingsphere/distsql/parser/operation/DistSQLOperationTypeEnum.java
@@ -15,21 +15,28 @@
  * limitations under the License.
  */
 
-package org.apache.shardingsphere.distsql.parser.statement.rql.show;
+package org.apache.shardingsphere.distsql.parser.operation;
 
-import lombok.Getter;
-import org.apache.shardingsphere.sql.parser.sql.common.segment.generic.SchemaSegment;
-
-/**
- * Show single table statement.
- */
-@Getter
-public final class ShowSingleTableStatement extends ShowRulesStatement {
+public enum DistSQLOperationTypeEnum {
     
-    private final String tableName;
+    RAL_OPERATION,
+    ADD,
+    CREATE,
+    ALTER,
+    DROP,
+    SHOW;
     
-    public ShowSingleTableStatement(final String tableName, final SchemaSegment schema) {
-        super(schema);
-        this.tableName = tableName;
+    /**
+     * Returns the operation type of the specified operation type name.
+     *
+     * @param operationTypeName operation type name
+     * @return statement type constant
+     */
+    public static DistSQLOperationTypeEnum getValueOf(final String operationTypeName) {
+        try {
+            return valueOf(operationTypeName.toUpperCase());
+        } catch (IllegalArgumentException ex) {
+            throw new UnsupportedOperationException(String.format("Unsupported operation type `%s`", operationTypeName));
+        }
     }
 }
diff --git a/shardingsphere-distsql/shardingsphere-distsql-statement/src/main/java/org/apache/shardingsphere/distsql/parser/statement/rql/show/CountSchemaRulesStatement.java b/shardingsphere-distsql/shardingsphere-distsql-statement/src/main/java/org/apache/shardingsphere/distsql/parser/operation/impl/AddOperationSupplier.java
similarity index 64%
copy from shardingsphere-distsql/shardingsphere-distsql-statement/src/main/java/org/apache/shardingsphere/distsql/parser/statement/rql/show/CountSchemaRulesStatement.java
copy to shardingsphere-distsql/shardingsphere-distsql-statement/src/main/java/org/apache/shardingsphere/distsql/parser/operation/impl/AddOperationSupplier.java
index ab38b8a2d62..4feb6b9f5ff 100644
--- a/shardingsphere-distsql/shardingsphere-distsql-statement/src/main/java/org/apache/shardingsphere/distsql/parser/statement/rql/show/CountSchemaRulesStatement.java
+++ b/shardingsphere-distsql/shardingsphere-distsql-statement/src/main/java/org/apache/shardingsphere/distsql/parser/operation/impl/AddOperationSupplier.java
@@ -15,18 +15,18 @@
  * limitations under the License.
  */
 
-package org.apache.shardingsphere.distsql.parser.statement.rql.show;
+package org.apache.shardingsphere.distsql.parser.operation.impl;
 
-import lombok.Getter;
-import org.apache.shardingsphere.sql.parser.sql.common.segment.generic.SchemaSegment;
+import org.apache.shardingsphere.distsql.parser.operation.DistSQLOperationSupplier;
+import org.apache.shardingsphere.distsql.parser.operation.DistSQLOperationTypeEnum;
 
 /**
- * Count schema rules statement.
+ * Add operation supplier.
  */
-@Getter
-public final class CountSchemaRulesStatement extends ShowRulesStatement {
+public interface AddOperationSupplier extends DistSQLOperationSupplier {
     
-    public CountSchemaRulesStatement(final SchemaSegment schema) {
-        super(schema);
+    @Override
+    default DistSQLOperationTypeEnum getOperationType() {
+        return DistSQLOperationTypeEnum.ADD;
     }
 }
diff --git a/shardingsphere-distsql/shardingsphere-distsql-statement/src/main/java/org/apache/shardingsphere/distsql/parser/statement/rql/show/CountSchemaRulesStatement.java b/shardingsphere-distsql/shardingsphere-distsql-statement/src/main/java/org/apache/shardingsphere/distsql/parser/operation/impl/AlterOperationSupplier.java
similarity index 64%
copy from shardingsphere-distsql/shardingsphere-distsql-statement/src/main/java/org/apache/shardingsphere/distsql/parser/statement/rql/show/CountSchemaRulesStatement.java
copy to shardingsphere-distsql/shardingsphere-distsql-statement/src/main/java/org/apache/shardingsphere/distsql/parser/operation/impl/AlterOperationSupplier.java
index ab38b8a2d62..ba1f40ea65a 100644
--- a/shardingsphere-distsql/shardingsphere-distsql-statement/src/main/java/org/apache/shardingsphere/distsql/parser/statement/rql/show/CountSchemaRulesStatement.java
+++ b/shardingsphere-distsql/shardingsphere-distsql-statement/src/main/java/org/apache/shardingsphere/distsql/parser/operation/impl/AlterOperationSupplier.java
@@ -15,18 +15,18 @@
  * limitations under the License.
  */
 
-package org.apache.shardingsphere.distsql.parser.statement.rql.show;
+package org.apache.shardingsphere.distsql.parser.operation.impl;
 
-import lombok.Getter;
-import org.apache.shardingsphere.sql.parser.sql.common.segment.generic.SchemaSegment;
+import org.apache.shardingsphere.distsql.parser.operation.DistSQLOperationSupplier;
+import org.apache.shardingsphere.distsql.parser.operation.DistSQLOperationTypeEnum;
 
 /**
- * Count schema rules statement.
+ * Alter operation supplier.
  */
-@Getter
-public final class CountSchemaRulesStatement extends ShowRulesStatement {
+public interface AlterOperationSupplier extends DistSQLOperationSupplier {
     
-    public CountSchemaRulesStatement(final SchemaSegment schema) {
-        super(schema);
+    @Override
+    default DistSQLOperationTypeEnum getOperationType() {
+        return DistSQLOperationTypeEnum.ALTER;
     }
 }
diff --git a/shardingsphere-distsql/shardingsphere-distsql-statement/src/main/java/org/apache/shardingsphere/distsql/parser/statement/rql/show/CountSchemaRulesStatement.java b/shardingsphere-distsql/shardingsphere-distsql-statement/src/main/java/org/apache/shardingsphere/distsql/parser/operation/impl/CreateOperationSupplier.java
similarity index 64%
copy from shardingsphere-distsql/shardingsphere-distsql-statement/src/main/java/org/apache/shardingsphere/distsql/parser/statement/rql/show/CountSchemaRulesStatement.java
copy to shardingsphere-distsql/shardingsphere-distsql-statement/src/main/java/org/apache/shardingsphere/distsql/parser/operation/impl/CreateOperationSupplier.java
index ab38b8a2d62..2f168aaae9d 100644
--- a/shardingsphere-distsql/shardingsphere-distsql-statement/src/main/java/org/apache/shardingsphere/distsql/parser/statement/rql/show/CountSchemaRulesStatement.java
+++ b/shardingsphere-distsql/shardingsphere-distsql-statement/src/main/java/org/apache/shardingsphere/distsql/parser/operation/impl/CreateOperationSupplier.java
@@ -15,18 +15,18 @@
  * limitations under the License.
  */
 
-package org.apache.shardingsphere.distsql.parser.statement.rql.show;
+package org.apache.shardingsphere.distsql.parser.operation.impl;
 
-import lombok.Getter;
-import org.apache.shardingsphere.sql.parser.sql.common.segment.generic.SchemaSegment;
+import org.apache.shardingsphere.distsql.parser.operation.DistSQLOperationSupplier;
+import org.apache.shardingsphere.distsql.parser.operation.DistSQLOperationTypeEnum;
 
 /**
- * Count schema rules statement.
+ * Create operation supplier.
  */
-@Getter
-public final class CountSchemaRulesStatement extends ShowRulesStatement {
+public interface CreateOperationSupplier extends DistSQLOperationSupplier {
     
-    public CountSchemaRulesStatement(final SchemaSegment schema) {
-        super(schema);
+    @Override
+    default DistSQLOperationTypeEnum getOperationType() {
+        return DistSQLOperationTypeEnum.CREATE;
     }
 }
diff --git a/shardingsphere-distsql/shardingsphere-distsql-statement/src/main/java/org/apache/shardingsphere/distsql/parser/statement/rql/show/CountSchemaRulesStatement.java b/shardingsphere-distsql/shardingsphere-distsql-statement/src/main/java/org/apache/shardingsphere/distsql/parser/operation/impl/DropOperationSupplier.java
similarity index 64%
copy from shardingsphere-distsql/shardingsphere-distsql-statement/src/main/java/org/apache/shardingsphere/distsql/parser/statement/rql/show/CountSchemaRulesStatement.java
copy to shardingsphere-distsql/shardingsphere-distsql-statement/src/main/java/org/apache/shardingsphere/distsql/parser/operation/impl/DropOperationSupplier.java
index ab38b8a2d62..be62a0fedef 100644
--- a/shardingsphere-distsql/shardingsphere-distsql-statement/src/main/java/org/apache/shardingsphere/distsql/parser/statement/rql/show/CountSchemaRulesStatement.java
+++ b/shardingsphere-distsql/shardingsphere-distsql-statement/src/main/java/org/apache/shardingsphere/distsql/parser/operation/impl/DropOperationSupplier.java
@@ -15,18 +15,18 @@
  * limitations under the License.
  */
 
-package org.apache.shardingsphere.distsql.parser.statement.rql.show;
+package org.apache.shardingsphere.distsql.parser.operation.impl;
 
-import lombok.Getter;
-import org.apache.shardingsphere.sql.parser.sql.common.segment.generic.SchemaSegment;
+import org.apache.shardingsphere.distsql.parser.operation.DistSQLOperationSupplier;
+import org.apache.shardingsphere.distsql.parser.operation.DistSQLOperationTypeEnum;
 
 /**
- * Count schema rules statement.
+ * Drop operation supplier.
  */
-@Getter
-public final class CountSchemaRulesStatement extends ShowRulesStatement {
+public interface DropOperationSupplier extends DistSQLOperationSupplier {
     
-    public CountSchemaRulesStatement(final SchemaSegment schema) {
-        super(schema);
+    @Override
+    default DistSQLOperationTypeEnum getOperationType() {
+        return DistSQLOperationTypeEnum.DROP;
     }
 }
diff --git a/shardingsphere-distsql/shardingsphere-distsql-statement/src/main/java/org/apache/shardingsphere/distsql/parser/statement/rql/show/CountSchemaRulesStatement.java b/shardingsphere-distsql/shardingsphere-distsql-statement/src/main/java/org/apache/shardingsphere/distsql/parser/operation/impl/RALOperationSupplier.java
similarity index 64%
copy from shardingsphere-distsql/shardingsphere-distsql-statement/src/main/java/org/apache/shardingsphere/distsql/parser/statement/rql/show/CountSchemaRulesStatement.java
copy to shardingsphere-distsql/shardingsphere-distsql-statement/src/main/java/org/apache/shardingsphere/distsql/parser/operation/impl/RALOperationSupplier.java
index ab38b8a2d62..55a41531ccc 100644
--- a/shardingsphere-distsql/shardingsphere-distsql-statement/src/main/java/org/apache/shardingsphere/distsql/parser/statement/rql/show/CountSchemaRulesStatement.java
+++ b/shardingsphere-distsql/shardingsphere-distsql-statement/src/main/java/org/apache/shardingsphere/distsql/parser/operation/impl/RALOperationSupplier.java
@@ -15,18 +15,18 @@
  * limitations under the License.
  */
 
-package org.apache.shardingsphere.distsql.parser.statement.rql.show;
+package org.apache.shardingsphere.distsql.parser.operation.impl;
 
-import lombok.Getter;
-import org.apache.shardingsphere.sql.parser.sql.common.segment.generic.SchemaSegment;
+import org.apache.shardingsphere.distsql.parser.operation.DistSQLOperationSupplier;
+import org.apache.shardingsphere.distsql.parser.operation.DistSQLOperationTypeEnum;
 
 /**
- * Count schema rules statement.
+ * RAL operation supplier.
  */
-@Getter
-public final class CountSchemaRulesStatement extends ShowRulesStatement {
+public interface RALOperationSupplier extends DistSQLOperationSupplier {
     
-    public CountSchemaRulesStatement(final SchemaSegment schema) {
-        super(schema);
+    @Override
+    default DistSQLOperationTypeEnum getOperationType() {
+        return DistSQLOperationTypeEnum.RAL_OPERATION;
     }
 }
diff --git a/shardingsphere-distsql/shardingsphere-distsql-statement/src/main/java/org/apache/shardingsphere/distsql/parser/statement/rql/show/CountSchemaRulesStatement.java b/shardingsphere-distsql/shardingsphere-distsql-statement/src/main/java/org/apache/shardingsphere/distsql/parser/operation/impl/ShowOperationSupplier.java
similarity index 64%
copy from shardingsphere-distsql/shardingsphere-distsql-statement/src/main/java/org/apache/shardingsphere/distsql/parser/statement/rql/show/CountSchemaRulesStatement.java
copy to shardingsphere-distsql/shardingsphere-distsql-statement/src/main/java/org/apache/shardingsphere/distsql/parser/operation/impl/ShowOperationSupplier.java
index ab38b8a2d62..290f5ea6770 100644
--- a/shardingsphere-distsql/shardingsphere-distsql-statement/src/main/java/org/apache/shardingsphere/distsql/parser/statement/rql/show/CountSchemaRulesStatement.java
+++ b/shardingsphere-distsql/shardingsphere-distsql-statement/src/main/java/org/apache/shardingsphere/distsql/parser/operation/impl/ShowOperationSupplier.java
@@ -15,18 +15,18 @@
  * limitations under the License.
  */
 
-package org.apache.shardingsphere.distsql.parser.statement.rql.show;
+package org.apache.shardingsphere.distsql.parser.operation.impl;
 
-import lombok.Getter;
-import org.apache.shardingsphere.sql.parser.sql.common.segment.generic.SchemaSegment;
+import org.apache.shardingsphere.distsql.parser.operation.DistSQLOperationSupplier;
+import org.apache.shardingsphere.distsql.parser.operation.DistSQLOperationTypeEnum;
 
 /**
- * Count schema rules statement.
+ * Show operation supplier.
  */
-@Getter
-public final class CountSchemaRulesStatement extends ShowRulesStatement {
+public interface ShowOperationSupplier extends DistSQLOperationSupplier {
     
-    public CountSchemaRulesStatement(final SchemaSegment schema) {
-        super(schema);
+    @Override
+    default DistSQLOperationTypeEnum getOperationType() {
+        return DistSQLOperationTypeEnum.SHOW;
     }
 }
diff --git a/shardingsphere-distsql/shardingsphere-distsql-statement/src/main/java/org/apache/shardingsphere/distsql/parser/statement/DistSQLStatement.java b/shardingsphere-distsql/shardingsphere-distsql-statement/src/main/java/org/apache/shardingsphere/distsql/parser/statement/DistSQLStatement.java
index d0b132f26c4..d73da62536f 100644
--- a/shardingsphere-distsql/shardingsphere-distsql-statement/src/main/java/org/apache/shardingsphere/distsql/parser/statement/DistSQLStatement.java
+++ b/shardingsphere-distsql/shardingsphere-distsql-statement/src/main/java/org/apache/shardingsphere/distsql/parser/statement/DistSQLStatement.java
@@ -17,10 +17,19 @@
 
 package org.apache.shardingsphere.distsql.parser.statement;
 
+import org.apache.shardingsphere.distsql.parser.operation.DistSQLOperationSupplier;
+import org.apache.shardingsphere.distsql.parser.subject.DistSQLSubjectSupplier;
 import org.apache.shardingsphere.sql.parser.sql.common.statement.AbstractSQLStatement;
 
 /**
  * Dist SQL Statement.
  */
-public abstract class DistSQLStatement extends AbstractSQLStatement {
+public abstract class DistSQLStatement extends AbstractSQLStatement implements DistSQLOperationSupplier, DistSQLSubjectSupplier {
+    
+    /**
+     * Get statement type.
+     *
+     * @return statement type
+     */
+    public abstract DistSQLStatementType getStatementType();
 }
diff --git a/shardingsphere-distsql/shardingsphere-distsql-statement/src/main/java/org/apache/shardingsphere/distsql/parser/statement/DistSQLStatementType.java b/shardingsphere-distsql/shardingsphere-distsql-statement/src/main/java/org/apache/shardingsphere/distsql/parser/statement/DistSQLStatementType.java
new file mode 100644
index 00000000000..631d102df69
--- /dev/null
+++ b/shardingsphere-distsql/shardingsphere-distsql-statement/src/main/java/org/apache/shardingsphere/distsql/parser/statement/DistSQLStatementType.java
@@ -0,0 +1,80 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.apache.shardingsphere.distsql.parser.statement;
+
+import org.apache.shardingsphere.distsql.parser.operation.DistSQLOperationTypeEnum;
+
+import java.util.Arrays;
+import java.util.Collection;
+import java.util.Collections;
+
+/**
+ * Dist SQL statement type.
+ */
+public enum DistSQLStatementType {
+    
+    RQL {
+        /**
+         * Get operation types.
+         * @return operation types
+         */
+        public Collection<DistSQLOperationTypeEnum> getOperationTypes() {
+            return Collections.singletonList(DistSQLOperationTypeEnum.SHOW);
+        }
+    },
+    RDL {
+        /**
+         * Get operation types.
+         * @return operation types
+         */
+        @Override
+        public Collection<DistSQLOperationTypeEnum> getOperationTypes() {
+            return Arrays.asList(DistSQLOperationTypeEnum.ADD, DistSQLOperationTypeEnum.ALTER, DistSQLOperationTypeEnum.CREATE, DistSQLOperationTypeEnum.DROP);
+        }
+    },
+    RAL {
+        /**
+         * Get operation types.
+         * @return operation types
+         */
+        @Override
+        public Collection<DistSQLOperationTypeEnum> getOperationTypes() {
+            return Collections.singletonList(DistSQLOperationTypeEnum.RAL_OPERATION);
+        }
+    };
+    
+    /**
+     * Get operation types.
+     * @return operation types
+     */
+    public abstract Collection<DistSQLOperationTypeEnum> getOperationTypes();
+    
+    /**
+     * Returns the statement type of the specified variable name.
+     *
+     * @param statementTypeName statement type name
+     * @return statement type constant
+     */
+    public static DistSQLStatementType getValueOf(final String statementTypeName) {
+        try {
+            return valueOf(statementTypeName.toUpperCase());
+        } catch (IllegalArgumentException ex) {
+            throw new UnsupportedOperationException(String.format("Unsupported statement type `%s`", statementTypeName));
+        }
+    }
+}
diff --git a/shardingsphere-distsql/shardingsphere-distsql-statement/src/main/java/org/apache/shardingsphere/distsql/parser/statement/ral/RALStatement.java b/shardingsphere-distsql/shardingsphere-distsql-statement/src/main/java/org/apache/shardingsphere/distsql/parser/statement/ral/RALStatement.java
index 1bca62fc347..e4113098d06 100644
--- a/shardingsphere-distsql/shardingsphere-distsql-statement/src/main/java/org/apache/shardingsphere/distsql/parser/statement/ral/RALStatement.java
+++ b/shardingsphere-distsql/shardingsphere-distsql-statement/src/main/java/org/apache/shardingsphere/distsql/parser/statement/ral/RALStatement.java
@@ -17,10 +17,29 @@
 
 package org.apache.shardingsphere.distsql.parser.statement.ral;
 
+import org.apache.shardingsphere.distsql.parser.subject.DistSQLSubjectSupplier;
+import org.apache.shardingsphere.distsql.parser.operation.DistSQLOperationTypeEnum;
+import org.apache.shardingsphere.distsql.parser.subject.DistSQLSubjectTypeEnum;
 import org.apache.shardingsphere.distsql.parser.statement.DistSQLStatement;
+import org.apache.shardingsphere.distsql.parser.statement.DistSQLStatementType;
 
 /**
  * RAL statement.
  */
-public abstract class RALStatement extends DistSQLStatement {
+public abstract class RALStatement extends DistSQLStatement implements DistSQLSubjectSupplier {
+    
+    @Override
+    public DistSQLStatementType getStatementType() {
+        return DistSQLStatementType.RAL;
+    }
+    
+    @Override
+    public DistSQLOperationTypeEnum getOperationType() {
+        return DistSQLOperationTypeEnum.RAL_OPERATION;
+    }
+    
+    @Override
+    public DistSQLSubjectTypeEnum getSubjectType() {
+        return DistSQLSubjectTypeEnum.DEFAULT;
+    }
 }
diff --git a/shardingsphere-distsql/shardingsphere-distsql-statement/src/main/java/org/apache/shardingsphere/distsql/parser/statement/rdl/RDLStatement.java b/shardingsphere-distsql/shardingsphere-distsql-statement/src/main/java/org/apache/shardingsphere/distsql/parser/statement/rdl/RDLStatement.java
index 5e954998f16..73f166261df 100644
--- a/shardingsphere-distsql/shardingsphere-distsql-statement/src/main/java/org/apache/shardingsphere/distsql/parser/statement/rdl/RDLStatement.java
+++ b/shardingsphere-distsql/shardingsphere-distsql-statement/src/main/java/org/apache/shardingsphere/distsql/parser/statement/rdl/RDLStatement.java
@@ -18,9 +18,15 @@
 package org.apache.shardingsphere.distsql.parser.statement.rdl;
 
 import org.apache.shardingsphere.distsql.parser.statement.DistSQLStatement;
+import org.apache.shardingsphere.distsql.parser.statement.DistSQLStatementType;
 
 /**
  * RDL statement.
  */
 public abstract class RDLStatement extends DistSQLStatement {
+    
+    @Override
+    public DistSQLStatementType getStatementType() {
+        return DistSQLStatementType.RDL;
+    }
 }
diff --git a/shardingsphere-distsql/shardingsphere-distsql-statement/src/main/java/org/apache/shardingsphere/distsql/parser/statement/rdl/ResourceDefinitionStatement.java b/shardingsphere-distsql/shardingsphere-distsql-statement/src/main/java/org/apache/shardingsphere/distsql/parser/statement/rdl/ResourceDefinitionStatement.java
index 5a33bdb74db..86f2caf5a51 100644
--- a/shardingsphere-distsql/shardingsphere-distsql-statement/src/main/java/org/apache/shardingsphere/distsql/parser/statement/rdl/ResourceDefinitionStatement.java
+++ b/shardingsphere-distsql/shardingsphere-distsql-statement/src/main/java/org/apache/shardingsphere/distsql/parser/statement/rdl/ResourceDefinitionStatement.java
@@ -17,8 +17,16 @@
 
 package org.apache.shardingsphere.distsql.parser.statement.rdl;
 
+import org.apache.shardingsphere.distsql.parser.subject.DistSQLSubjectTypeEnum;
+import org.apache.shardingsphere.distsql.parser.subject.impl.ResourceSubjectSupplier;
+
 /**
  * Resource definition statement.
  */
-public abstract class ResourceDefinitionStatement extends RDLStatement {
+public abstract class ResourceDefinitionStatement extends RDLStatement implements ResourceSubjectSupplier {
+    
+    @Override
+    public DistSQLSubjectTypeEnum getSubjectType() {
+        return DistSQLSubjectTypeEnum.RESOURCE;
+    }
 }
diff --git a/shardingsphere-distsql/shardingsphere-distsql-statement/src/main/java/org/apache/shardingsphere/distsql/parser/statement/rdl/alter/AlterDefaultSingleTableRuleStatement.java b/shardingsphere-distsql/shardingsphere-distsql-statement/src/main/java/org/apache/shardingsphere/distsql/parser/statement/rdl/alter/AlterDefaultSingleTableRuleStatement.java
index 37c5ef29494..1d05bb275b2 100644
--- a/shardingsphere-distsql/shardingsphere-distsql-statement/src/main/java/org/apache/shardingsphere/distsql/parser/statement/rdl/alter/AlterDefaultSingleTableRuleStatement.java
+++ b/shardingsphere-distsql/shardingsphere-distsql-statement/src/main/java/org/apache/shardingsphere/distsql/parser/statement/rdl/alter/AlterDefaultSingleTableRuleStatement.java
@@ -19,13 +19,14 @@ package org.apache.shardingsphere.distsql.parser.statement.rdl.alter;
 
 import lombok.Getter;
 import lombok.RequiredArgsConstructor;
+import org.apache.shardingsphere.distsql.parser.subject.impl.SingleTableSubjectSupplier;
 
 /**
  * Alter default single table rule statement.
  */
 @RequiredArgsConstructor
 @Getter
-public final class AlterDefaultSingleTableRuleStatement extends AlterRuleStatement {
+public final class AlterDefaultSingleTableRuleStatement extends AlterRuleStatement implements SingleTableSubjectSupplier {
     
     private final String defaultResource;
 }
diff --git a/shardingsphere-distsql/shardingsphere-distsql-statement/src/main/java/org/apache/shardingsphere/distsql/parser/statement/rdl/alter/AlterResourceStatement.java b/shardingsphere-distsql/shardingsphere-distsql-statement/src/main/java/org/apache/shardingsphere/distsql/parser/statement/rdl/alter/AlterResourceStatement.java
index 924376c0c13..fc8e7ea4ccd 100644
--- a/shardingsphere-distsql/shardingsphere-distsql-statement/src/main/java/org/apache/shardingsphere/distsql/parser/statement/rdl/alter/AlterResourceStatement.java
+++ b/shardingsphere-distsql/shardingsphere-distsql-statement/src/main/java/org/apache/shardingsphere/distsql/parser/statement/rdl/alter/AlterResourceStatement.java
@@ -19,6 +19,8 @@ package org.apache.shardingsphere.distsql.parser.statement.rdl.alter;
 
 import lombok.Getter;
 import lombok.RequiredArgsConstructor;
+import org.apache.shardingsphere.distsql.parser.operation.impl.AlterOperationSupplier;
+import org.apache.shardingsphere.distsql.parser.subject.impl.ResourceSubjectSupplier;
 import org.apache.shardingsphere.distsql.parser.segment.DataSourceSegment;
 import org.apache.shardingsphere.distsql.parser.statement.rdl.ResourceDefinitionStatement;
 
@@ -29,7 +31,7 @@ import java.util.Collection;
  */
 @RequiredArgsConstructor
 @Getter
-public final class AlterResourceStatement extends ResourceDefinitionStatement {
+public final class AlterResourceStatement extends ResourceDefinitionStatement implements ResourceSubjectSupplier, AlterOperationSupplier {
     
     private final Collection<DataSourceSegment> dataSources;
 }
diff --git a/shardingsphere-distsql/shardingsphere-distsql-statement/src/main/java/org/apache/shardingsphere/distsql/parser/statement/rdl/alter/AlterRuleStatement.java b/shardingsphere-distsql/shardingsphere-distsql-statement/src/main/java/org/apache/shardingsphere/distsql/parser/statement/rdl/alter/AlterRuleStatement.java
index 2bf4373c3d8..b29b70fae6c 100644
--- a/shardingsphere-distsql/shardingsphere-distsql-statement/src/main/java/org/apache/shardingsphere/distsql/parser/statement/rdl/alter/AlterRuleStatement.java
+++ b/shardingsphere-distsql/shardingsphere-distsql-statement/src/main/java/org/apache/shardingsphere/distsql/parser/statement/rdl/alter/AlterRuleStatement.java
@@ -17,10 +17,16 @@
 
 package org.apache.shardingsphere.distsql.parser.statement.rdl.alter;
 
+import org.apache.shardingsphere.distsql.parser.operation.DistSQLOperationTypeEnum;
 import org.apache.shardingsphere.distsql.parser.statement.rdl.RuleDefinitionStatement;
 
 /**
  * Alter rule statement.
  */
 public abstract class AlterRuleStatement extends RuleDefinitionStatement {
+    
+    @Override
+    public DistSQLOperationTypeEnum getOperationType() {
+        return DistSQLOperationTypeEnum.ALTER;
+    }
 }
diff --git a/shardingsphere-distsql/shardingsphere-distsql-statement/src/main/java/org/apache/shardingsphere/distsql/parser/statement/rdl/create/AddResourceStatement.java b/shardingsphere-distsql/shardingsphere-distsql-statement/src/main/java/org/apache/shardingsphere/distsql/parser/statement/rdl/create/AddResourceStatement.java
index 17b214ecb5d..703d03b0652 100644
--- a/shardingsphere-distsql/shardingsphere-distsql-statement/src/main/java/org/apache/shardingsphere/distsql/parser/statement/rdl/create/AddResourceStatement.java
+++ b/shardingsphere-distsql/shardingsphere-distsql-statement/src/main/java/org/apache/shardingsphere/distsql/parser/statement/rdl/create/AddResourceStatement.java
@@ -19,6 +19,8 @@ package org.apache.shardingsphere.distsql.parser.statement.rdl.create;
 
 import lombok.Getter;
 import lombok.RequiredArgsConstructor;
+import org.apache.shardingsphere.distsql.parser.operation.impl.AddOperationSupplier;
+import org.apache.shardingsphere.distsql.parser.operation.DistSQLOperationTypeEnum;
 import org.apache.shardingsphere.distsql.parser.segment.DataSourceSegment;
 import org.apache.shardingsphere.distsql.parser.statement.rdl.ResourceDefinitionStatement;
 
@@ -29,7 +31,12 @@ import java.util.Collection;
  */
 @RequiredArgsConstructor
 @Getter
-public final class AddResourceStatement extends ResourceDefinitionStatement {
+public final class AddResourceStatement extends ResourceDefinitionStatement implements AddOperationSupplier {
     
     private final Collection<DataSourceSegment> dataSources;
+    
+    @Override
+    public DistSQLOperationTypeEnum getOperationType() {
+        return DistSQLOperationTypeEnum.ADD;
+    }
 }
diff --git a/shardingsphere-distsql/shardingsphere-distsql-statement/src/main/java/org/apache/shardingsphere/distsql/parser/statement/rdl/create/CreateDefaultSingleTableRuleStatement.java b/shardingsphere-distsql/shardingsphere-distsql-statement/src/main/java/org/apache/shardingsphere/distsql/parser/statement/rdl/create/CreateDefaultSingleTableRuleStatement.java
index 31c6e62372a..c8431f65bbf 100644
--- a/shardingsphere-distsql/shardingsphere-distsql-statement/src/main/java/org/apache/shardingsphere/distsql/parser/statement/rdl/create/CreateDefaultSingleTableRuleStatement.java
+++ b/shardingsphere-distsql/shardingsphere-distsql-statement/src/main/java/org/apache/shardingsphere/distsql/parser/statement/rdl/create/CreateDefaultSingleTableRuleStatement.java
@@ -19,13 +19,14 @@ package org.apache.shardingsphere.distsql.parser.statement.rdl.create;
 
 import lombok.Getter;
 import lombok.RequiredArgsConstructor;
+import org.apache.shardingsphere.distsql.parser.subject.impl.SingleTableSubjectSupplier;
 
 /**
  * Create default single table rule statement.
  */
 @RequiredArgsConstructor
 @Getter
-public final class CreateDefaultSingleTableRuleStatement extends CreateRuleStatement {
+public final class CreateDefaultSingleTableRuleStatement extends CreateRuleStatement implements SingleTableSubjectSupplier {
     
     private final String defaultResource;
 }
diff --git a/shardingsphere-distsql/shardingsphere-distsql-statement/src/main/java/org/apache/shardingsphere/distsql/parser/statement/rdl/create/CreateRuleStatement.java b/shardingsphere-distsql/shardingsphere-distsql-statement/src/main/java/org/apache/shardingsphere/distsql/parser/statement/rdl/create/CreateRuleStatement.java
index b8d5a3d4e6c..0b84ab77a45 100644
--- a/shardingsphere-distsql/shardingsphere-distsql-statement/src/main/java/org/apache/shardingsphere/distsql/parser/statement/rdl/create/CreateRuleStatement.java
+++ b/shardingsphere-distsql/shardingsphere-distsql-statement/src/main/java/org/apache/shardingsphere/distsql/parser/statement/rdl/create/CreateRuleStatement.java
@@ -17,10 +17,12 @@
 
 package org.apache.shardingsphere.distsql.parser.statement.rdl.create;
 
+import org.apache.shardingsphere.distsql.parser.operation.impl.CreateOperationSupplier;
 import org.apache.shardingsphere.distsql.parser.statement.rdl.RuleDefinitionStatement;
 
 /**
  * Create rule statement.
  */
-public abstract class CreateRuleStatement extends RuleDefinitionStatement {
+public abstract class CreateRuleStatement extends RuleDefinitionStatement implements CreateOperationSupplier {
+    
 }
diff --git a/shardingsphere-distsql/shardingsphere-distsql-statement/src/main/java/org/apache/shardingsphere/distsql/parser/statement/rdl/drop/DropDefaultSingleTableRuleStatement.java b/shardingsphere-distsql/shardingsphere-distsql-statement/src/main/java/org/apache/shardingsphere/distsql/parser/statement/rdl/drop/DropDefaultSingleTableRuleStatement.java
index 452cbc4a39b..78393c100ed 100644
--- a/shardingsphere-distsql/shardingsphere-distsql-statement/src/main/java/org/apache/shardingsphere/distsql/parser/statement/rdl/drop/DropDefaultSingleTableRuleStatement.java
+++ b/shardingsphere-distsql/shardingsphere-distsql-statement/src/main/java/org/apache/shardingsphere/distsql/parser/statement/rdl/drop/DropDefaultSingleTableRuleStatement.java
@@ -19,13 +19,14 @@ package org.apache.shardingsphere.distsql.parser.statement.rdl.drop;
 
 import lombok.Getter;
 import lombok.NoArgsConstructor;
+import org.apache.shardingsphere.distsql.parser.subject.impl.SingleTableSubjectSupplier;
 
 /**
  * Drop default single table rule statement.
  */
 @Getter
 @NoArgsConstructor
-public final class DropDefaultSingleTableRuleStatement extends DropRuleStatement {
+public final class DropDefaultSingleTableRuleStatement extends DropRuleStatement implements SingleTableSubjectSupplier {
     
     public DropDefaultSingleTableRuleStatement(final boolean containsExistClause) {
         setContainsExistClause(containsExistClause);
diff --git a/shardingsphere-distsql/shardingsphere-distsql-statement/src/main/java/org/apache/shardingsphere/distsql/parser/statement/rdl/drop/DropResourceStatement.java b/shardingsphere-distsql/shardingsphere-distsql-statement/src/main/java/org/apache/shardingsphere/distsql/parser/statement/rdl/drop/DropResourceStatement.java
index 5ee29b3b665..49a8f0b3a1e 100644
--- a/shardingsphere-distsql/shardingsphere-distsql-statement/src/main/java/org/apache/shardingsphere/distsql/parser/statement/rdl/drop/DropResourceStatement.java
+++ b/shardingsphere-distsql/shardingsphere-distsql-statement/src/main/java/org/apache/shardingsphere/distsql/parser/statement/rdl/drop/DropResourceStatement.java
@@ -19,6 +19,7 @@ package org.apache.shardingsphere.distsql.parser.statement.rdl.drop;
 
 import lombok.Getter;
 import lombok.RequiredArgsConstructor;
+import org.apache.shardingsphere.distsql.parser.operation.DistSQLOperationTypeEnum;
 import org.apache.shardingsphere.distsql.parser.statement.rdl.ResourceDefinitionStatement;
 
 import java.util.Collection;
@@ -41,4 +42,9 @@ public final class DropResourceStatement extends ResourceDefinitionStatement {
         this.names = names;
         this.ignoreSingleTables = ignoreSingleTables;
     }
+    
+    @Override
+    public DistSQLOperationTypeEnum getOperationType() {
+        return DistSQLOperationTypeEnum.DROP;
+    }
 }
diff --git a/shardingsphere-distsql/shardingsphere-distsql-statement/src/main/java/org/apache/shardingsphere/distsql/parser/statement/rdl/drop/DropRuleStatement.java b/shardingsphere-distsql/shardingsphere-distsql-statement/src/main/java/org/apache/shardingsphere/distsql/parser/statement/rdl/drop/DropRuleStatement.java
index 349cd8c8ab8..445eda706bf 100644
--- a/shardingsphere-distsql/shardingsphere-distsql-statement/src/main/java/org/apache/shardingsphere/distsql/parser/statement/rdl/drop/DropRuleStatement.java
+++ b/shardingsphere-distsql/shardingsphere-distsql-statement/src/main/java/org/apache/shardingsphere/distsql/parser/statement/rdl/drop/DropRuleStatement.java
@@ -19,6 +19,7 @@ package org.apache.shardingsphere.distsql.parser.statement.rdl.drop;
 
 import lombok.Getter;
 import lombok.Setter;
+import org.apache.shardingsphere.distsql.parser.operation.DistSQLOperationTypeEnum;
 import org.apache.shardingsphere.distsql.parser.statement.rdl.RuleDefinitionStatement;
 
 /**
@@ -29,4 +30,9 @@ public abstract class DropRuleStatement extends RuleDefinitionStatement {
     @Getter
     @Setter
     private boolean containsExistClause;
+    
+    @Override
+    public DistSQLOperationTypeEnum getOperationType() {
+        return DistSQLOperationTypeEnum.DROP;
+    }
 }
diff --git a/shardingsphere-distsql/shardingsphere-distsql-statement/src/main/java/org/apache/shardingsphere/distsql/parser/statement/rql/RQLStatement.java b/shardingsphere-distsql/shardingsphere-distsql-statement/src/main/java/org/apache/shardingsphere/distsql/parser/statement/rql/RQLStatement.java
index 886166ce47e..53f9a51d250 100644
--- a/shardingsphere-distsql/shardingsphere-distsql-statement/src/main/java/org/apache/shardingsphere/distsql/parser/statement/rql/RQLStatement.java
+++ b/shardingsphere-distsql/shardingsphere-distsql-statement/src/main/java/org/apache/shardingsphere/distsql/parser/statement/rql/RQLStatement.java
@@ -17,10 +17,22 @@
 
 package org.apache.shardingsphere.distsql.parser.statement.rql;
 
+import org.apache.shardingsphere.distsql.parser.operation.DistSQLOperationTypeEnum;
 import org.apache.shardingsphere.distsql.parser.statement.DistSQLStatement;
+import org.apache.shardingsphere.distsql.parser.statement.DistSQLStatementType;
 
 /**
  * RQL statement.
  */
 public abstract class RQLStatement extends DistSQLStatement {
+    
+    @Override
+    public DistSQLStatementType getStatementType() {
+        return DistSQLStatementType.RQL;
+    }
+    
+    @Override
+    public DistSQLOperationTypeEnum getOperationType() {
+        return DistSQLOperationTypeEnum.SHOW;
+    }
 }
diff --git a/shardingsphere-distsql/shardingsphere-distsql-statement/src/main/java/org/apache/shardingsphere/distsql/parser/statement/rql/show/CountSchemaRulesStatement.java b/shardingsphere-distsql/shardingsphere-distsql-statement/src/main/java/org/apache/shardingsphere/distsql/parser/statement/rql/show/CountSchemaRulesStatement.java
index ab38b8a2d62..0357e6675c6 100644
--- a/shardingsphere-distsql/shardingsphere-distsql-statement/src/main/java/org/apache/shardingsphere/distsql/parser/statement/rql/show/CountSchemaRulesStatement.java
+++ b/shardingsphere-distsql/shardingsphere-distsql-statement/src/main/java/org/apache/shardingsphere/distsql/parser/statement/rql/show/CountSchemaRulesStatement.java
@@ -18,6 +18,7 @@
 package org.apache.shardingsphere.distsql.parser.statement.rql.show;
 
 import lombok.Getter;
+import org.apache.shardingsphere.distsql.parser.subject.DistSQLSubjectTypeEnum;
 import org.apache.shardingsphere.sql.parser.sql.common.segment.generic.SchemaSegment;
 
 /**
@@ -29,4 +30,9 @@ public final class CountSchemaRulesStatement extends ShowRulesStatement {
     public CountSchemaRulesStatement(final SchemaSegment schema) {
         super(schema);
     }
+    
+    @Override
+    public DistSQLSubjectTypeEnum getSubjectType() {
+        return DistSQLSubjectTypeEnum.DEFAULT;
+    }
 }
diff --git a/shardingsphere-distsql/shardingsphere-distsql-statement/src/main/java/org/apache/shardingsphere/distsql/parser/statement/rql/show/ShowResourcesStatement.java b/shardingsphere-distsql/shardingsphere-distsql-statement/src/main/java/org/apache/shardingsphere/distsql/parser/statement/rql/show/ShowResourcesStatement.java
index 08a84ab889b..54e7b87716e 100644
--- a/shardingsphere-distsql/shardingsphere-distsql-statement/src/main/java/org/apache/shardingsphere/distsql/parser/statement/rql/show/ShowResourcesStatement.java
+++ b/shardingsphere-distsql/shardingsphere-distsql-statement/src/main/java/org/apache/shardingsphere/distsql/parser/statement/rql/show/ShowResourcesStatement.java
@@ -18,6 +18,7 @@
 package org.apache.shardingsphere.distsql.parser.statement.rql.show;
 
 import lombok.RequiredArgsConstructor;
+import org.apache.shardingsphere.distsql.parser.subject.impl.ResourceSubjectSupplier;
 import org.apache.shardingsphere.distsql.parser.statement.rql.RQLStatement;
 import org.apache.shardingsphere.sql.parser.sql.common.segment.generic.SchemaSegment;
 import org.apache.shardingsphere.sql.parser.sql.common.statement.available.FromSchemaAvailable;
@@ -28,7 +29,7 @@ import java.util.Optional;
  * Show resources statement.
  */
 @RequiredArgsConstructor
-public final class ShowResourcesStatement extends RQLStatement implements FromSchemaAvailable {
+public final class ShowResourcesStatement extends RQLStatement implements FromSchemaAvailable, ResourceSubjectSupplier {
     
     private final SchemaSegment schema;
     
diff --git a/shardingsphere-distsql/shardingsphere-distsql-statement/src/main/java/org/apache/shardingsphere/distsql/parser/statement/rql/show/ShowRulesUsedResourceStatement.java b/shardingsphere-distsql/shardingsphere-distsql-statement/src/main/java/org/apache/shardingsphere/distsql/parser/statement/rql/show/ShowRulesUsedResourceStatement.java
index f614b4691ca..f8cc182960a 100644
--- a/shardingsphere-distsql/shardingsphere-distsql-statement/src/main/java/org/apache/shardingsphere/distsql/parser/statement/rql/show/ShowRulesUsedResourceStatement.java
+++ b/shardingsphere-distsql/shardingsphere-distsql-statement/src/main/java/org/apache/shardingsphere/distsql/parser/statement/rql/show/ShowRulesUsedResourceStatement.java
@@ -18,6 +18,7 @@
 package org.apache.shardingsphere.distsql.parser.statement.rql.show;
 
 import lombok.Getter;
+import org.apache.shardingsphere.distsql.parser.subject.impl.ResourceSubjectSupplier;
 import org.apache.shardingsphere.sql.parser.sql.common.segment.generic.SchemaSegment;
 
 import java.util.Optional;
@@ -26,7 +27,7 @@ import java.util.Optional;
  * Show rules used resource statement.
  */
 @Getter
-public final class ShowRulesUsedResourceStatement extends ShowRulesStatement {
+public final class ShowRulesUsedResourceStatement extends ShowRulesStatement implements ResourceSubjectSupplier {
     
     private final Optional<String> resourceName;
     
diff --git a/shardingsphere-distsql/shardingsphere-distsql-statement/src/main/java/org/apache/shardingsphere/distsql/parser/statement/rql/show/ShowSingleTableRulesStatement.java b/shardingsphere-distsql/shardingsphere-distsql-statement/src/main/java/org/apache/shardingsphere/distsql/parser/statement/rql/show/ShowSingleTableRulesStatement.java
index 41904c1acc6..f9e0446c618 100644
--- a/shardingsphere-distsql/shardingsphere-distsql-statement/src/main/java/org/apache/shardingsphere/distsql/parser/statement/rql/show/ShowSingleTableRulesStatement.java
+++ b/shardingsphere-distsql/shardingsphere-distsql-statement/src/main/java/org/apache/shardingsphere/distsql/parser/statement/rql/show/ShowSingleTableRulesStatement.java
@@ -18,13 +18,14 @@
 package org.apache.shardingsphere.distsql.parser.statement.rql.show;
 
 import lombok.Getter;
+import org.apache.shardingsphere.distsql.parser.subject.impl.ResourceSubjectSupplier;
 import org.apache.shardingsphere.sql.parser.sql.common.segment.generic.SchemaSegment;
 
 /**
  * Show single table rules statement.
  */
 @Getter
-public final class ShowSingleTableRulesStatement extends ShowRulesStatement {
+public final class ShowSingleTableRulesStatement extends ShowRulesStatement implements ResourceSubjectSupplier {
     
     public ShowSingleTableRulesStatement(final SchemaSegment schema) {
         super(schema);
diff --git a/shardingsphere-distsql/shardingsphere-distsql-statement/src/main/java/org/apache/shardingsphere/distsql/parser/statement/rql/show/ShowSingleTableStatement.java b/shardingsphere-distsql/shardingsphere-distsql-statement/src/main/java/org/apache/shardingsphere/distsql/parser/statement/rql/show/ShowSingleTableStatement.java
index f0b80b1e686..cfb3c3cfa99 100644
--- a/shardingsphere-distsql/shardingsphere-distsql-statement/src/main/java/org/apache/shardingsphere/distsql/parser/statement/rql/show/ShowSingleTableStatement.java
+++ b/shardingsphere-distsql/shardingsphere-distsql-statement/src/main/java/org/apache/shardingsphere/distsql/parser/statement/rql/show/ShowSingleTableStatement.java
@@ -18,13 +18,14 @@
 package org.apache.shardingsphere.distsql.parser.statement.rql.show;
 
 import lombok.Getter;
+import org.apache.shardingsphere.distsql.parser.subject.impl.ResourceSubjectSupplier;
 import org.apache.shardingsphere.sql.parser.sql.common.segment.generic.SchemaSegment;
 
 /**
  * Show single table statement.
  */
 @Getter
-public final class ShowSingleTableStatement extends ShowRulesStatement {
+public final class ShowSingleTableStatement extends ShowRulesStatement implements ResourceSubjectSupplier {
     
     private final String tableName;
     
diff --git a/shardingsphere-distsql/shardingsphere-distsql-statement/src/main/java/org/apache/shardingsphere/distsql/parser/statement/rql/show/ShowUnusedResourcesStatement.java b/shardingsphere-distsql/shardingsphere-distsql-statement/src/main/java/org/apache/shardingsphere/distsql/parser/statement/rql/show/ShowUnusedResourcesStatement.java
index 49374925180..4ef027061a0 100644
--- a/shardingsphere-distsql/shardingsphere-distsql-statement/src/main/java/org/apache/shardingsphere/distsql/parser/statement/rql/show/ShowUnusedResourcesStatement.java
+++ b/shardingsphere-distsql/shardingsphere-distsql-statement/src/main/java/org/apache/shardingsphere/distsql/parser/statement/rql/show/ShowUnusedResourcesStatement.java
@@ -18,6 +18,7 @@
 package org.apache.shardingsphere.distsql.parser.statement.rql.show;
 
 import lombok.RequiredArgsConstructor;
+import org.apache.shardingsphere.distsql.parser.subject.impl.ResourceSubjectSupplier;
 import org.apache.shardingsphere.distsql.parser.statement.rql.RQLStatement;
 import org.apache.shardingsphere.sql.parser.sql.common.segment.generic.SchemaSegment;
 import org.apache.shardingsphere.sql.parser.sql.common.statement.available.FromSchemaAvailable;
@@ -28,7 +29,7 @@ import java.util.Optional;
  * Show unused resources statement.
  */
 @RequiredArgsConstructor
-public final class ShowUnusedResourcesStatement extends RQLStatement implements FromSchemaAvailable {
+public final class ShowUnusedResourcesStatement extends RQLStatement implements FromSchemaAvailable, ResourceSubjectSupplier {
     
     private final SchemaSegment schema;
     
diff --git a/shardingsphere-features/shardingsphere-sharding/shardingsphere-sharding-distsql/shardingsphere-sharding-distsql-statement/src/main/java/org/apache/shardingsphere/sharding/distsql/parser/statement/DropShardingAlgorithmStatement.java b/shardingsphere-distsql/shardingsphere-distsql-statement/src/main/java/org/apache/shardingsphere/distsql/parser/subject/DistSQLSubjectSupplier.java
similarity index 64%
copy from shardingsphere-features/shardingsphere-sharding/shardingsphere-sharding-distsql/shardingsphere-sharding-distsql-statement/src/main/java/org/apache/shardingsphere/sharding/distsql/parser/statement/DropShardingAlgorithmStatement.java
copy to shardingsphere-distsql/shardingsphere-distsql-statement/src/main/java/org/apache/shardingsphere/distsql/parser/subject/DistSQLSubjectSupplier.java
index db4d4ec2b1d..2ca2608d1fd 100644
--- a/shardingsphere-features/shardingsphere-sharding/shardingsphere-sharding-distsql/shardingsphere-sharding-distsql-statement/src/main/java/org/apache/shardingsphere/sharding/distsql/parser/statement/DropShardingAlgorithmStatement.java
+++ b/shardingsphere-distsql/shardingsphere-distsql-statement/src/main/java/org/apache/shardingsphere/distsql/parser/subject/DistSQLSubjectSupplier.java
@@ -15,20 +15,29 @@
  * limitations under the License.
  */
 
-package org.apache.shardingsphere.sharding.distsql.parser.statement;
-
-import lombok.Getter;
-import lombok.RequiredArgsConstructor;
-import org.apache.shardingsphere.distsql.parser.statement.rdl.drop.DropRuleStatement;
+package org.apache.shardingsphere.distsql.parser.subject;
 
 import java.util.Collection;
+import java.util.Collections;
 
 /**
- * Drop sharding algorithm statement.
+ * Dist SQL subject supplier.
  */
-@RequiredArgsConstructor
-@Getter
-public final class DropShardingAlgorithmStatement extends DropRuleStatement {
+public interface DistSQLSubjectSupplier {
+    
+    /**
+     * Get subject type.
+     *
+     * @return subject type
+     */
+    DistSQLSubjectTypeEnum getSubjectType();
     
-    private final Collection<String> algorithmNames;
+    /**
+     * Get subject names.
+     *
+     * @return subject names
+     */
+    default Collection<String> getSubjectNames() {
+        return Collections.emptyList();
+    }
 }
diff --git a/shardingsphere-features/shardingsphere-db-discovery/shardingsphere-db-discovery-distsql/shardingsphere-db-discovery-distsql-statement/src/main/java/org/apache/shardingsphere/dbdiscovery/distsql/parser/statement/DropDatabaseDiscoveryHeartbeatStatement.java b/shardingsphere-distsql/shardingsphere-distsql-statement/src/main/java/org/apache/shardingsphere/distsql/parser/subject/DistSQLSubjectTypeEnum.java
similarity index 55%
copy from shardingsphere-features/shardingsphere-db-discovery/shardingsphere-db-discovery-distsql/shardingsphere-db-discovery-distsql-statement/src/main/java/org/apache/shardingsphere/dbdiscovery/distsql/parser/statement/DropDatabaseDiscoveryHeartbeatStatement.java
copy to shardingsphere-distsql/shardingsphere-distsql-statement/src/main/java/org/apache/shardingsphere/distsql/parser/subject/DistSQLSubjectTypeEnum.java
index 3a220d05bca..d118bb2a9df 100644
--- a/shardingsphere-features/shardingsphere-db-discovery/shardingsphere-db-discovery-distsql/shardingsphere-db-discovery-distsql-statement/src/main/java/org/apache/shardingsphere/dbdiscovery/distsql/parser/statement/DropDatabaseDiscoveryHeartbeatStatement.java
+++ b/shardingsphere-distsql/shardingsphere-distsql-statement/src/main/java/org/apache/shardingsphere/distsql/parser/subject/DistSQLSubjectTypeEnum.java
@@ -15,25 +15,31 @@
  * limitations under the License.
  */
 
-package org.apache.shardingsphere.dbdiscovery.distsql.parser.statement;
+package org.apache.shardingsphere.distsql.parser.subject;
 
-import lombok.Getter;
-import lombok.RequiredArgsConstructor;
-import org.apache.shardingsphere.distsql.parser.statement.rdl.drop.DropRuleStatement;
-
-import java.util.Collection;
-
-/**
- * Drop database discovery heartbeat statement.
- */
-@RequiredArgsConstructor
-@Getter
-public final class DropDatabaseDiscoveryHeartbeatStatement extends DropRuleStatement {
+public enum DistSQLSubjectTypeEnum {
     
-    private final Collection<String> heartbeatNames;
+    DEFAULT,
+    RESOURCE,
+    SHARDING,
+    READWRITE_SPLITTING,
+    DB_DISCOVERY,
+    ENCRYPT,
+    SHADOW,
+    SINGLE_TABLE,
+    SCALING;
     
-    public DropDatabaseDiscoveryHeartbeatStatement(final Collection<String> heartbeatNames, final boolean containsExistClause) {
-        setContainsExistClause(containsExistClause);
-        this.heartbeatNames = heartbeatNames;
+    /**
+     * Returns the dist subject of the specified subject name.
+     *
+     * @param subjectName subject name
+     * @return subject constant
+     */
+    public static DistSQLSubjectTypeEnum getValueOf(final String subjectName) {
+        try {
+            return valueOf(subjectName.toUpperCase());
+        } catch (IllegalArgumentException ex) {
+            throw new UnsupportedOperationException(String.format("Unsupported subject `%s`", subjectName));
+        }
     }
 }
diff --git a/shardingsphere-distsql/shardingsphere-distsql-statement/src/main/java/org/apache/shardingsphere/distsql/parser/statement/rql/show/CountSchemaRulesStatement.java b/shardingsphere-distsql/shardingsphere-distsql-statement/src/main/java/org/apache/shardingsphere/distsql/parser/subject/impl/DatabaseDiscoverySubjectSupplier.java
similarity index 63%
copy from shardingsphere-distsql/shardingsphere-distsql-statement/src/main/java/org/apache/shardingsphere/distsql/parser/statement/rql/show/CountSchemaRulesStatement.java
copy to shardingsphere-distsql/shardingsphere-distsql-statement/src/main/java/org/apache/shardingsphere/distsql/parser/subject/impl/DatabaseDiscoverySubjectSupplier.java
index ab38b8a2d62..c25242d8fe9 100644
--- a/shardingsphere-distsql/shardingsphere-distsql-statement/src/main/java/org/apache/shardingsphere/distsql/parser/statement/rql/show/CountSchemaRulesStatement.java
+++ b/shardingsphere-distsql/shardingsphere-distsql-statement/src/main/java/org/apache/shardingsphere/distsql/parser/subject/impl/DatabaseDiscoverySubjectSupplier.java
@@ -15,18 +15,18 @@
  * limitations under the License.
  */
 
-package org.apache.shardingsphere.distsql.parser.statement.rql.show;
+package org.apache.shardingsphere.distsql.parser.subject.impl;
 
-import lombok.Getter;
-import org.apache.shardingsphere.sql.parser.sql.common.segment.generic.SchemaSegment;
+import org.apache.shardingsphere.distsql.parser.subject.DistSQLSubjectSupplier;
+import org.apache.shardingsphere.distsql.parser.subject.DistSQLSubjectTypeEnum;
 
 /**
- * Count schema rules statement.
+ * Database discovery subject supplier.
  */
-@Getter
-public final class CountSchemaRulesStatement extends ShowRulesStatement {
+public interface DatabaseDiscoverySubjectSupplier extends DistSQLSubjectSupplier {
     
-    public CountSchemaRulesStatement(final SchemaSegment schema) {
-        super(schema);
+    @Override
+    default DistSQLSubjectTypeEnum getSubjectType() {
+        return DistSQLSubjectTypeEnum.DB_DISCOVERY;
     }
 }
diff --git a/shardingsphere-distsql/shardingsphere-distsql-statement/src/main/java/org/apache/shardingsphere/distsql/parser/statement/rql/show/CountSchemaRulesStatement.java b/shardingsphere-distsql/shardingsphere-distsql-statement/src/main/java/org/apache/shardingsphere/distsql/parser/subject/impl/EncryptSubjectSupplier.java
similarity index 65%
copy from shardingsphere-distsql/shardingsphere-distsql-statement/src/main/java/org/apache/shardingsphere/distsql/parser/statement/rql/show/CountSchemaRulesStatement.java
copy to shardingsphere-distsql/shardingsphere-distsql-statement/src/main/java/org/apache/shardingsphere/distsql/parser/subject/impl/EncryptSubjectSupplier.java
index ab38b8a2d62..48e66757cee 100644
--- a/shardingsphere-distsql/shardingsphere-distsql-statement/src/main/java/org/apache/shardingsphere/distsql/parser/statement/rql/show/CountSchemaRulesStatement.java
+++ b/shardingsphere-distsql/shardingsphere-distsql-statement/src/main/java/org/apache/shardingsphere/distsql/parser/subject/impl/EncryptSubjectSupplier.java
@@ -15,18 +15,18 @@
  * limitations under the License.
  */
 
-package org.apache.shardingsphere.distsql.parser.statement.rql.show;
+package org.apache.shardingsphere.distsql.parser.subject.impl;
 
-import lombok.Getter;
-import org.apache.shardingsphere.sql.parser.sql.common.segment.generic.SchemaSegment;
+import org.apache.shardingsphere.distsql.parser.subject.DistSQLSubjectSupplier;
+import org.apache.shardingsphere.distsql.parser.subject.DistSQLSubjectTypeEnum;
 
 /**
- * Count schema rules statement.
+ * Encrypt subject supplier.
  */
-@Getter
-public final class CountSchemaRulesStatement extends ShowRulesStatement {
+public interface EncryptSubjectSupplier extends DistSQLSubjectSupplier {
     
-    public CountSchemaRulesStatement(final SchemaSegment schema) {
-        super(schema);
+    @Override
+    default DistSQLSubjectTypeEnum getSubjectType() {
+        return DistSQLSubjectTypeEnum.ENCRYPT;
     }
 }
diff --git a/shardingsphere-distsql/shardingsphere-distsql-statement/src/main/java/org/apache/shardingsphere/distsql/parser/statement/rql/show/CountSchemaRulesStatement.java b/shardingsphere-distsql/shardingsphere-distsql-statement/src/main/java/org/apache/shardingsphere/distsql/parser/subject/impl/ReadwriteSplittingSubjectSupplier.java
similarity index 63%
copy from shardingsphere-distsql/shardingsphere-distsql-statement/src/main/java/org/apache/shardingsphere/distsql/parser/statement/rql/show/CountSchemaRulesStatement.java
copy to shardingsphere-distsql/shardingsphere-distsql-statement/src/main/java/org/apache/shardingsphere/distsql/parser/subject/impl/ReadwriteSplittingSubjectSupplier.java
index ab38b8a2d62..07852e13742 100644
--- a/shardingsphere-distsql/shardingsphere-distsql-statement/src/main/java/org/apache/shardingsphere/distsql/parser/statement/rql/show/CountSchemaRulesStatement.java
+++ b/shardingsphere-distsql/shardingsphere-distsql-statement/src/main/java/org/apache/shardingsphere/distsql/parser/subject/impl/ReadwriteSplittingSubjectSupplier.java
@@ -15,18 +15,18 @@
  * limitations under the License.
  */
 
-package org.apache.shardingsphere.distsql.parser.statement.rql.show;
+package org.apache.shardingsphere.distsql.parser.subject.impl;
 
-import lombok.Getter;
-import org.apache.shardingsphere.sql.parser.sql.common.segment.generic.SchemaSegment;
+import org.apache.shardingsphere.distsql.parser.subject.DistSQLSubjectSupplier;
+import org.apache.shardingsphere.distsql.parser.subject.DistSQLSubjectTypeEnum;
 
 /**
- * Count schema rules statement.
+ * Readwrite splitting subject supplier.
  */
-@Getter
-public final class CountSchemaRulesStatement extends ShowRulesStatement {
+public interface ReadwriteSplittingSubjectSupplier extends DistSQLSubjectSupplier {
     
-    public CountSchemaRulesStatement(final SchemaSegment schema) {
-        super(schema);
+    @Override
+    default DistSQLSubjectTypeEnum getSubjectType() {
+        return DistSQLSubjectTypeEnum.READWRITE_SPLITTING;
     }
 }
diff --git a/shardingsphere-distsql/shardingsphere-distsql-statement/src/main/java/org/apache/shardingsphere/distsql/parser/statement/rql/show/CountSchemaRulesStatement.java b/shardingsphere-distsql/shardingsphere-distsql-statement/src/main/java/org/apache/shardingsphere/distsql/parser/subject/impl/ResourceSubjectSupplier.java
similarity index 64%
copy from shardingsphere-distsql/shardingsphere-distsql-statement/src/main/java/org/apache/shardingsphere/distsql/parser/statement/rql/show/CountSchemaRulesStatement.java
copy to shardingsphere-distsql/shardingsphere-distsql-statement/src/main/java/org/apache/shardingsphere/distsql/parser/subject/impl/ResourceSubjectSupplier.java
index ab38b8a2d62..fbd7845fe21 100644
--- a/shardingsphere-distsql/shardingsphere-distsql-statement/src/main/java/org/apache/shardingsphere/distsql/parser/statement/rql/show/CountSchemaRulesStatement.java
+++ b/shardingsphere-distsql/shardingsphere-distsql-statement/src/main/java/org/apache/shardingsphere/distsql/parser/subject/impl/ResourceSubjectSupplier.java
@@ -15,18 +15,18 @@
  * limitations under the License.
  */
 
-package org.apache.shardingsphere.distsql.parser.statement.rql.show;
+package org.apache.shardingsphere.distsql.parser.subject.impl;
 
-import lombok.Getter;
-import org.apache.shardingsphere.sql.parser.sql.common.segment.generic.SchemaSegment;
+import org.apache.shardingsphere.distsql.parser.subject.DistSQLSubjectSupplier;
+import org.apache.shardingsphere.distsql.parser.subject.DistSQLSubjectTypeEnum;
 
 /**
- * Count schema rules statement.
+ * Dist SQL resource subject supplier.
  */
-@Getter
-public final class CountSchemaRulesStatement extends ShowRulesStatement {
+public interface ResourceSubjectSupplier extends DistSQLSubjectSupplier {
     
-    public CountSchemaRulesStatement(final SchemaSegment schema) {
-        super(schema);
+    @Override
+    default DistSQLSubjectTypeEnum getSubjectType() {
+        return DistSQLSubjectTypeEnum.RESOURCE;
     }
 }
diff --git a/shardingsphere-distsql/shardingsphere-distsql-statement/src/main/java/org/apache/shardingsphere/distsql/parser/statement/rql/show/CountSchemaRulesStatement.java b/shardingsphere-distsql/shardingsphere-distsql-statement/src/main/java/org/apache/shardingsphere/distsql/parser/subject/impl/ScalingSubjectSupplier.java
similarity index 65%
copy from shardingsphere-distsql/shardingsphere-distsql-statement/src/main/java/org/apache/shardingsphere/distsql/parser/statement/rql/show/CountSchemaRulesStatement.java
copy to shardingsphere-distsql/shardingsphere-distsql-statement/src/main/java/org/apache/shardingsphere/distsql/parser/subject/impl/ScalingSubjectSupplier.java
index ab38b8a2d62..59dbf41d0dc 100644
--- a/shardingsphere-distsql/shardingsphere-distsql-statement/src/main/java/org/apache/shardingsphere/distsql/parser/statement/rql/show/CountSchemaRulesStatement.java
+++ b/shardingsphere-distsql/shardingsphere-distsql-statement/src/main/java/org/apache/shardingsphere/distsql/parser/subject/impl/ScalingSubjectSupplier.java
@@ -15,18 +15,18 @@
  * limitations under the License.
  */
 
-package org.apache.shardingsphere.distsql.parser.statement.rql.show;
+package org.apache.shardingsphere.distsql.parser.subject.impl;
 
-import lombok.Getter;
-import org.apache.shardingsphere.sql.parser.sql.common.segment.generic.SchemaSegment;
+import org.apache.shardingsphere.distsql.parser.subject.DistSQLSubjectSupplier;
+import org.apache.shardingsphere.distsql.parser.subject.DistSQLSubjectTypeEnum;
 
 /**
- * Count schema rules statement.
+ * Scaling subject supplier.
  */
-@Getter
-public final class CountSchemaRulesStatement extends ShowRulesStatement {
+public interface ScalingSubjectSupplier extends DistSQLSubjectSupplier {
     
-    public CountSchemaRulesStatement(final SchemaSegment schema) {
-        super(schema);
+    @Override
+    default DistSQLSubjectTypeEnum getSubjectType() {
+        return DistSQLSubjectTypeEnum.SCALING;
     }
 }
diff --git a/shardingsphere-distsql/shardingsphere-distsql-statement/src/main/java/org/apache/shardingsphere/distsql/parser/statement/rql/show/CountSchemaRulesStatement.java b/shardingsphere-distsql/shardingsphere-distsql-statement/src/main/java/org/apache/shardingsphere/distsql/parser/subject/impl/ShadowSubjectSupplier.java
similarity index 65%
copy from shardingsphere-distsql/shardingsphere-distsql-statement/src/main/java/org/apache/shardingsphere/distsql/parser/statement/rql/show/CountSchemaRulesStatement.java
copy to shardingsphere-distsql/shardingsphere-distsql-statement/src/main/java/org/apache/shardingsphere/distsql/parser/subject/impl/ShadowSubjectSupplier.java
index ab38b8a2d62..19be07c3bef 100644
--- a/shardingsphere-distsql/shardingsphere-distsql-statement/src/main/java/org/apache/shardingsphere/distsql/parser/statement/rql/show/CountSchemaRulesStatement.java
+++ b/shardingsphere-distsql/shardingsphere-distsql-statement/src/main/java/org/apache/shardingsphere/distsql/parser/subject/impl/ShadowSubjectSupplier.java
@@ -15,18 +15,18 @@
  * limitations under the License.
  */
 
-package org.apache.shardingsphere.distsql.parser.statement.rql.show;
+package org.apache.shardingsphere.distsql.parser.subject.impl;
 
-import lombok.Getter;
-import org.apache.shardingsphere.sql.parser.sql.common.segment.generic.SchemaSegment;
+import org.apache.shardingsphere.distsql.parser.subject.DistSQLSubjectSupplier;
+import org.apache.shardingsphere.distsql.parser.subject.DistSQLSubjectTypeEnum;
 
 /**
- * Count schema rules statement.
+ * Shadow subject supplier.
  */
-@Getter
-public final class CountSchemaRulesStatement extends ShowRulesStatement {
+public interface ShadowSubjectSupplier extends DistSQLSubjectSupplier {
     
-    public CountSchemaRulesStatement(final SchemaSegment schema) {
-        super(schema);
+    @Override
+    default DistSQLSubjectTypeEnum getSubjectType() {
+        return DistSQLSubjectTypeEnum.SHADOW;
     }
 }
diff --git a/shardingsphere-distsql/shardingsphere-distsql-statement/src/main/java/org/apache/shardingsphere/distsql/parser/statement/rql/show/CountSchemaRulesStatement.java b/shardingsphere-distsql/shardingsphere-distsql-statement/src/main/java/org/apache/shardingsphere/distsql/parser/subject/impl/ShardingSubjectSupplier.java
similarity index 65%
copy from shardingsphere-distsql/shardingsphere-distsql-statement/src/main/java/org/apache/shardingsphere/distsql/parser/statement/rql/show/CountSchemaRulesStatement.java
copy to shardingsphere-distsql/shardingsphere-distsql-statement/src/main/java/org/apache/shardingsphere/distsql/parser/subject/impl/ShardingSubjectSupplier.java
index ab38b8a2d62..4ffc92fcbd7 100644
--- a/shardingsphere-distsql/shardingsphere-distsql-statement/src/main/java/org/apache/shardingsphere/distsql/parser/statement/rql/show/CountSchemaRulesStatement.java
+++ b/shardingsphere-distsql/shardingsphere-distsql-statement/src/main/java/org/apache/shardingsphere/distsql/parser/subject/impl/ShardingSubjectSupplier.java
@@ -15,18 +15,18 @@
  * limitations under the License.
  */
 
-package org.apache.shardingsphere.distsql.parser.statement.rql.show;
+package org.apache.shardingsphere.distsql.parser.subject.impl;
 
-import lombok.Getter;
-import org.apache.shardingsphere.sql.parser.sql.common.segment.generic.SchemaSegment;
+import org.apache.shardingsphere.distsql.parser.subject.DistSQLSubjectSupplier;
+import org.apache.shardingsphere.distsql.parser.subject.DistSQLSubjectTypeEnum;
 
 /**
- * Count schema rules statement.
+ * Sharding subject supplier.
  */
-@Getter
-public final class CountSchemaRulesStatement extends ShowRulesStatement {
+public interface ShardingSubjectSupplier extends DistSQLSubjectSupplier {
     
-    public CountSchemaRulesStatement(final SchemaSegment schema) {
-        super(schema);
+    @Override
+    default DistSQLSubjectTypeEnum getSubjectType() {
+        return DistSQLSubjectTypeEnum.SHARDING;
     }
 }
diff --git a/shardingsphere-distsql/shardingsphere-distsql-statement/src/main/java/org/apache/shardingsphere/distsql/parser/statement/rql/show/CountSchemaRulesStatement.java b/shardingsphere-distsql/shardingsphere-distsql-statement/src/main/java/org/apache/shardingsphere/distsql/parser/subject/impl/SingleTableSubjectSupplier.java
similarity index 64%
copy from shardingsphere-distsql/shardingsphere-distsql-statement/src/main/java/org/apache/shardingsphere/distsql/parser/statement/rql/show/CountSchemaRulesStatement.java
copy to shardingsphere-distsql/shardingsphere-distsql-statement/src/main/java/org/apache/shardingsphere/distsql/parser/subject/impl/SingleTableSubjectSupplier.java
index ab38b8a2d62..ea3a752270e 100644
--- a/shardingsphere-distsql/shardingsphere-distsql-statement/src/main/java/org/apache/shardingsphere/distsql/parser/statement/rql/show/CountSchemaRulesStatement.java
+++ b/shardingsphere-distsql/shardingsphere-distsql-statement/src/main/java/org/apache/shardingsphere/distsql/parser/subject/impl/SingleTableSubjectSupplier.java
@@ -15,18 +15,18 @@
  * limitations under the License.
  */
 
-package org.apache.shardingsphere.distsql.parser.statement.rql.show;
+package org.apache.shardingsphere.distsql.parser.subject.impl;
 
-import lombok.Getter;
-import org.apache.shardingsphere.sql.parser.sql.common.segment.generic.SchemaSegment;
+import org.apache.shardingsphere.distsql.parser.subject.DistSQLSubjectSupplier;
+import org.apache.shardingsphere.distsql.parser.subject.DistSQLSubjectTypeEnum;
 
 /**
- * Count schema rules statement.
+ * Single table subject supplier.
  */
-@Getter
-public final class CountSchemaRulesStatement extends ShowRulesStatement {
+public interface SingleTableSubjectSupplier extends DistSQLSubjectSupplier {
     
-    public CountSchemaRulesStatement(final SchemaSegment schema) {
-        super(schema);
+    @Override
+    default DistSQLSubjectTypeEnum getSubjectType() {
+        return DistSQLSubjectTypeEnum.SINGLE_TABLE;
     }
 }
diff --git a/shardingsphere-features/shardingsphere-db-discovery/shardingsphere-db-discovery-distsql/shardingsphere-db-discovery-distsql-statement/src/main/java/org/apache/shardingsphere/dbdiscovery/distsql/parser/statement/AlterDatabaseDiscoveryHeartbeatStatement.java b/shardingsphere-features/shardingsphere-db-discovery/shardingsphere-db-discovery-distsql/shardingsphere-db-discovery-distsql-statement/src/main/java/org/apache/shardingsphere/dbdiscovery/distsql/parser/statement/AlterDatab [...]
index cf5531c762b..4efbe16fb3a 100644
--- a/shardingsphere-features/shardingsphere-db-discovery/shardingsphere-db-discovery-distsql/shardingsphere-db-discovery-distsql-statement/src/main/java/org/apache/shardingsphere/dbdiscovery/distsql/parser/statement/AlterDatabaseDiscoveryHeartbeatStatement.java
+++ b/shardingsphere-features/shardingsphere-db-discovery/shardingsphere-db-discovery-distsql/shardingsphere-db-discovery-distsql-statement/src/main/java/org/apache/shardingsphere/dbdiscovery/distsql/parser/statement/AlterDatabaseDiscoveryHeartbeatStatement.java
@@ -19,6 +19,7 @@ package org.apache.shardingsphere.dbdiscovery.distsql.parser.statement;
 
 import lombok.Getter;
 import lombok.RequiredArgsConstructor;
+import org.apache.shardingsphere.distsql.parser.subject.impl.DatabaseDiscoverySubjectSupplier;
 import org.apache.shardingsphere.dbdiscovery.distsql.parser.segment.DatabaseDiscoveryHeartbeatSegment;
 import org.apache.shardingsphere.distsql.parser.statement.rdl.alter.AlterRuleStatement;
 
@@ -29,7 +30,7 @@ import java.util.Collection;
  */
 @RequiredArgsConstructor
 @Getter
-public final class AlterDatabaseDiscoveryHeartbeatStatement extends AlterRuleStatement {
+public final class AlterDatabaseDiscoveryHeartbeatStatement extends AlterRuleStatement implements DatabaseDiscoverySubjectSupplier {
     
     private final Collection<DatabaseDiscoveryHeartbeatSegment> heartbeats;
 }
diff --git a/shardingsphere-features/shardingsphere-db-discovery/shardingsphere-db-discovery-distsql/shardingsphere-db-discovery-distsql-statement/src/main/java/org/apache/shardingsphere/dbdiscovery/distsql/parser/statement/AlterDatabaseDiscoveryRuleStatement.java b/shardingsphere-features/shardingsphere-db-discovery/shardingsphere-db-discovery-distsql/shardingsphere-db-discovery-distsql-statement/src/main/java/org/apache/shardingsphere/dbdiscovery/distsql/parser/statement/AlterDatabaseDi [...]
index b483d7664f3..4e539caa7bd 100644
--- a/shardingsphere-features/shardingsphere-db-discovery/shardingsphere-db-discovery-distsql/shardingsphere-db-discovery-distsql-statement/src/main/java/org/apache/shardingsphere/dbdiscovery/distsql/parser/statement/AlterDatabaseDiscoveryRuleStatement.java
+++ b/shardingsphere-features/shardingsphere-db-discovery/shardingsphere-db-discovery-distsql/shardingsphere-db-discovery-distsql-statement/src/main/java/org/apache/shardingsphere/dbdiscovery/distsql/parser/statement/AlterDatabaseDiscoveryRuleStatement.java
@@ -19,6 +19,7 @@ package org.apache.shardingsphere.dbdiscovery.distsql.parser.statement;
 
 import lombok.Getter;
 import lombok.RequiredArgsConstructor;
+import org.apache.shardingsphere.distsql.parser.subject.impl.DatabaseDiscoverySubjectSupplier;
 import org.apache.shardingsphere.dbdiscovery.distsql.parser.segment.AbstractDatabaseDiscoverySegment;
 import org.apache.shardingsphere.distsql.parser.statement.rdl.alter.AlterRuleStatement;
 
@@ -29,7 +30,7 @@ import java.util.Collection;
  */
 @RequiredArgsConstructor
 @Getter
-public final class AlterDatabaseDiscoveryRuleStatement extends AlterRuleStatement {
+public final class AlterDatabaseDiscoveryRuleStatement extends AlterRuleStatement implements DatabaseDiscoverySubjectSupplier {
     
     private final Collection<AbstractDatabaseDiscoverySegment> rules;
 }
diff --git a/shardingsphere-features/shardingsphere-db-discovery/shardingsphere-db-discovery-distsql/shardingsphere-db-discovery-distsql-statement/src/main/java/org/apache/shardingsphere/dbdiscovery/distsql/parser/statement/AlterDatabaseDiscoveryTypeStatement.java b/shardingsphere-features/shardingsphere-db-discovery/shardingsphere-db-discovery-distsql/shardingsphere-db-discovery-distsql-statement/src/main/java/org/apache/shardingsphere/dbdiscovery/distsql/parser/statement/AlterDatabaseDi [...]
index 70051e2202c..0d181c911fe 100644
--- a/shardingsphere-features/shardingsphere-db-discovery/shardingsphere-db-discovery-distsql/shardingsphere-db-discovery-distsql-statement/src/main/java/org/apache/shardingsphere/dbdiscovery/distsql/parser/statement/AlterDatabaseDiscoveryTypeStatement.java
+++ b/shardingsphere-features/shardingsphere-db-discovery/shardingsphere-db-discovery-distsql/shardingsphere-db-discovery-distsql-statement/src/main/java/org/apache/shardingsphere/dbdiscovery/distsql/parser/statement/AlterDatabaseDiscoveryTypeStatement.java
@@ -19,6 +19,7 @@ package org.apache.shardingsphere.dbdiscovery.distsql.parser.statement;
 
 import lombok.Getter;
 import lombok.RequiredArgsConstructor;
+import org.apache.shardingsphere.distsql.parser.subject.impl.DatabaseDiscoverySubjectSupplier;
 import org.apache.shardingsphere.dbdiscovery.distsql.parser.segment.DatabaseDiscoveryTypeSegment;
 import org.apache.shardingsphere.distsql.parser.statement.rdl.alter.AlterRuleStatement;
 
@@ -29,7 +30,7 @@ import java.util.Collection;
  */
 @RequiredArgsConstructor
 @Getter
-public final class AlterDatabaseDiscoveryTypeStatement extends AlterRuleStatement {
+public final class AlterDatabaseDiscoveryTypeStatement extends AlterRuleStatement implements DatabaseDiscoverySubjectSupplier {
     
     private final Collection<DatabaseDiscoveryTypeSegment> types;
 }
diff --git a/shardingsphere-features/shardingsphere-db-discovery/shardingsphere-db-discovery-distsql/shardingsphere-db-discovery-distsql-statement/src/main/java/org/apache/shardingsphere/dbdiscovery/distsql/parser/statement/CreateDatabaseDiscoveryHeartbeatStatement.java b/shardingsphere-features/shardingsphere-db-discovery/shardingsphere-db-discovery-distsql/shardingsphere-db-discovery-distsql-statement/src/main/java/org/apache/shardingsphere/dbdiscovery/distsql/parser/statement/CreateDat [...]
index 1a215d99ae1..d946e162582 100644
--- a/shardingsphere-features/shardingsphere-db-discovery/shardingsphere-db-discovery-distsql/shardingsphere-db-discovery-distsql-statement/src/main/java/org/apache/shardingsphere/dbdiscovery/distsql/parser/statement/CreateDatabaseDiscoveryHeartbeatStatement.java
+++ b/shardingsphere-features/shardingsphere-db-discovery/shardingsphere-db-discovery-distsql/shardingsphere-db-discovery-distsql-statement/src/main/java/org/apache/shardingsphere/dbdiscovery/distsql/parser/statement/CreateDatabaseDiscoveryHeartbeatStatement.java
@@ -19,6 +19,7 @@ package org.apache.shardingsphere.dbdiscovery.distsql.parser.statement;
 
 import lombok.Getter;
 import lombok.RequiredArgsConstructor;
+import org.apache.shardingsphere.distsql.parser.subject.impl.DatabaseDiscoverySubjectSupplier;
 import org.apache.shardingsphere.dbdiscovery.distsql.parser.segment.DatabaseDiscoveryHeartbeatSegment;
 import org.apache.shardingsphere.distsql.parser.statement.rdl.create.CreateRuleStatement;
 
@@ -29,7 +30,7 @@ import java.util.Collection;
  */
 @RequiredArgsConstructor
 @Getter
-public final class CreateDatabaseDiscoveryHeartbeatStatement extends CreateRuleStatement {
+public final class CreateDatabaseDiscoveryHeartbeatStatement extends CreateRuleStatement implements DatabaseDiscoverySubjectSupplier {
     
     private final Collection<DatabaseDiscoveryHeartbeatSegment> heartbeats;
 }
diff --git a/shardingsphere-features/shardingsphere-db-discovery/shardingsphere-db-discovery-distsql/shardingsphere-db-discovery-distsql-statement/src/main/java/org/apache/shardingsphere/dbdiscovery/distsql/parser/statement/CreateDatabaseDiscoveryRuleStatement.java b/shardingsphere-features/shardingsphere-db-discovery/shardingsphere-db-discovery-distsql/shardingsphere-db-discovery-distsql-statement/src/main/java/org/apache/shardingsphere/dbdiscovery/distsql/parser/statement/CreateDatabase [...]
index 1c041f1af50..85b294fc6a5 100644
--- a/shardingsphere-features/shardingsphere-db-discovery/shardingsphere-db-discovery-distsql/shardingsphere-db-discovery-distsql-statement/src/main/java/org/apache/shardingsphere/dbdiscovery/distsql/parser/statement/CreateDatabaseDiscoveryRuleStatement.java
+++ b/shardingsphere-features/shardingsphere-db-discovery/shardingsphere-db-discovery-distsql/shardingsphere-db-discovery-distsql-statement/src/main/java/org/apache/shardingsphere/dbdiscovery/distsql/parser/statement/CreateDatabaseDiscoveryRuleStatement.java
@@ -19,6 +19,7 @@ package org.apache.shardingsphere.dbdiscovery.distsql.parser.statement;
 
 import lombok.Getter;
 import lombok.RequiredArgsConstructor;
+import org.apache.shardingsphere.distsql.parser.subject.impl.DatabaseDiscoverySubjectSupplier;
 import org.apache.shardingsphere.dbdiscovery.distsql.parser.segment.AbstractDatabaseDiscoverySegment;
 import org.apache.shardingsphere.distsql.parser.statement.rdl.create.CreateRuleStatement;
 
@@ -29,7 +30,7 @@ import java.util.Collection;
  */
 @RequiredArgsConstructor
 @Getter
-public final class CreateDatabaseDiscoveryRuleStatement extends CreateRuleStatement {
+public final class CreateDatabaseDiscoveryRuleStatement extends CreateRuleStatement implements DatabaseDiscoverySubjectSupplier {
     
     private final Collection<AbstractDatabaseDiscoverySegment> rules;
 }
diff --git a/shardingsphere-features/shardingsphere-db-discovery/shardingsphere-db-discovery-distsql/shardingsphere-db-discovery-distsql-statement/src/main/java/org/apache/shardingsphere/dbdiscovery/distsql/parser/statement/CreateDatabaseDiscoveryTypeStatement.java b/shardingsphere-features/shardingsphere-db-discovery/shardingsphere-db-discovery-distsql/shardingsphere-db-discovery-distsql-statement/src/main/java/org/apache/shardingsphere/dbdiscovery/distsql/parser/statement/CreateDatabase [...]
index 4ff9680a436..09b667fd73f 100644
--- a/shardingsphere-features/shardingsphere-db-discovery/shardingsphere-db-discovery-distsql/shardingsphere-db-discovery-distsql-statement/src/main/java/org/apache/shardingsphere/dbdiscovery/distsql/parser/statement/CreateDatabaseDiscoveryTypeStatement.java
+++ b/shardingsphere-features/shardingsphere-db-discovery/shardingsphere-db-discovery-distsql/shardingsphere-db-discovery-distsql-statement/src/main/java/org/apache/shardingsphere/dbdiscovery/distsql/parser/statement/CreateDatabaseDiscoveryTypeStatement.java
@@ -19,6 +19,7 @@ package org.apache.shardingsphere.dbdiscovery.distsql.parser.statement;
 
 import lombok.Getter;
 import lombok.RequiredArgsConstructor;
+import org.apache.shardingsphere.distsql.parser.subject.impl.DatabaseDiscoverySubjectSupplier;
 import org.apache.shardingsphere.dbdiscovery.distsql.parser.segment.DatabaseDiscoveryTypeSegment;
 import org.apache.shardingsphere.distsql.parser.statement.rdl.create.CreateRuleStatement;
 
@@ -29,7 +30,7 @@ import java.util.Collection;
  */
 @RequiredArgsConstructor
 @Getter
-public final class CreateDatabaseDiscoveryTypeStatement extends CreateRuleStatement {
+public final class CreateDatabaseDiscoveryTypeStatement extends CreateRuleStatement implements DatabaseDiscoverySubjectSupplier {
     
     private final Collection<DatabaseDiscoveryTypeSegment> types;
 }
diff --git a/shardingsphere-features/shardingsphere-db-discovery/shardingsphere-db-discovery-distsql/shardingsphere-db-discovery-distsql-statement/src/main/java/org/apache/shardingsphere/dbdiscovery/distsql/parser/statement/DropDatabaseDiscoveryHeartbeatStatement.java b/shardingsphere-features/shardingsphere-db-discovery/shardingsphere-db-discovery-distsql/shardingsphere-db-discovery-distsql-statement/src/main/java/org/apache/shardingsphere/dbdiscovery/distsql/parser/statement/DropDatabas [...]
index 3a220d05bca..1a3f067cbc4 100644
--- a/shardingsphere-features/shardingsphere-db-discovery/shardingsphere-db-discovery-distsql/shardingsphere-db-discovery-distsql-statement/src/main/java/org/apache/shardingsphere/dbdiscovery/distsql/parser/statement/DropDatabaseDiscoveryHeartbeatStatement.java
+++ b/shardingsphere-features/shardingsphere-db-discovery/shardingsphere-db-discovery-distsql/shardingsphere-db-discovery-distsql-statement/src/main/java/org/apache/shardingsphere/dbdiscovery/distsql/parser/statement/DropDatabaseDiscoveryHeartbeatStatement.java
@@ -19,6 +19,7 @@ package org.apache.shardingsphere.dbdiscovery.distsql.parser.statement;
 
 import lombok.Getter;
 import lombok.RequiredArgsConstructor;
+import org.apache.shardingsphere.distsql.parser.subject.impl.DatabaseDiscoverySubjectSupplier;
 import org.apache.shardingsphere.distsql.parser.statement.rdl.drop.DropRuleStatement;
 
 import java.util.Collection;
@@ -28,7 +29,7 @@ import java.util.Collection;
  */
 @RequiredArgsConstructor
 @Getter
-public final class DropDatabaseDiscoveryHeartbeatStatement extends DropRuleStatement {
+public final class DropDatabaseDiscoveryHeartbeatStatement extends DropRuleStatement implements DatabaseDiscoverySubjectSupplier {
     
     private final Collection<String> heartbeatNames;
     
diff --git a/shardingsphere-features/shardingsphere-db-discovery/shardingsphere-db-discovery-distsql/shardingsphere-db-discovery-distsql-statement/src/main/java/org/apache/shardingsphere/dbdiscovery/distsql/parser/statement/DropDatabaseDiscoveryRuleStatement.java b/shardingsphere-features/shardingsphere-db-discovery/shardingsphere-db-discovery-distsql/shardingsphere-db-discovery-distsql-statement/src/main/java/org/apache/shardingsphere/dbdiscovery/distsql/parser/statement/DropDatabaseDisc [...]
index 8b80f5c7dff..de87c933e03 100644
--- a/shardingsphere-features/shardingsphere-db-discovery/shardingsphere-db-discovery-distsql/shardingsphere-db-discovery-distsql-statement/src/main/java/org/apache/shardingsphere/dbdiscovery/distsql/parser/statement/DropDatabaseDiscoveryRuleStatement.java
+++ b/shardingsphere-features/shardingsphere-db-discovery/shardingsphere-db-discovery-distsql/shardingsphere-db-discovery-distsql-statement/src/main/java/org/apache/shardingsphere/dbdiscovery/distsql/parser/statement/DropDatabaseDiscoveryRuleStatement.java
@@ -19,6 +19,7 @@ package org.apache.shardingsphere.dbdiscovery.distsql.parser.statement;
 
 import lombok.Getter;
 import lombok.RequiredArgsConstructor;
+import org.apache.shardingsphere.distsql.parser.subject.impl.DatabaseDiscoverySubjectSupplier;
 import org.apache.shardingsphere.distsql.parser.statement.rdl.drop.DropRuleStatement;
 
 import java.util.Collection;
@@ -28,7 +29,7 @@ import java.util.Collection;
  */
 @RequiredArgsConstructor
 @Getter
-public final class DropDatabaseDiscoveryRuleStatement extends DropRuleStatement {
+public final class DropDatabaseDiscoveryRuleStatement extends DropRuleStatement implements DatabaseDiscoverySubjectSupplier {
     
     private final Collection<String> ruleNames;
     
diff --git a/shardingsphere-features/shardingsphere-db-discovery/shardingsphere-db-discovery-distsql/shardingsphere-db-discovery-distsql-statement/src/main/java/org/apache/shardingsphere/dbdiscovery/distsql/parser/statement/DropDatabaseDiscoveryTypeStatement.java b/shardingsphere-features/shardingsphere-db-discovery/shardingsphere-db-discovery-distsql/shardingsphere-db-discovery-distsql-statement/src/main/java/org/apache/shardingsphere/dbdiscovery/distsql/parser/statement/DropDatabaseDisc [...]
index fa77d3c46d3..8ea6951523e 100644
--- a/shardingsphere-features/shardingsphere-db-discovery/shardingsphere-db-discovery-distsql/shardingsphere-db-discovery-distsql-statement/src/main/java/org/apache/shardingsphere/dbdiscovery/distsql/parser/statement/DropDatabaseDiscoveryTypeStatement.java
+++ b/shardingsphere-features/shardingsphere-db-discovery/shardingsphere-db-discovery-distsql/shardingsphere-db-discovery-distsql-statement/src/main/java/org/apache/shardingsphere/dbdiscovery/distsql/parser/statement/DropDatabaseDiscoveryTypeStatement.java
@@ -19,6 +19,7 @@ package org.apache.shardingsphere.dbdiscovery.distsql.parser.statement;
 
 import lombok.Getter;
 import lombok.RequiredArgsConstructor;
+import org.apache.shardingsphere.distsql.parser.subject.impl.DatabaseDiscoverySubjectSupplier;
 import org.apache.shardingsphere.distsql.parser.statement.rdl.drop.DropRuleStatement;
 
 import java.util.Collection;
@@ -28,7 +29,7 @@ import java.util.Collection;
  */
 @RequiredArgsConstructor
 @Getter
-public final class DropDatabaseDiscoveryTypeStatement extends DropRuleStatement {
+public final class DropDatabaseDiscoveryTypeStatement extends DropRuleStatement implements DatabaseDiscoverySubjectSupplier {
     
     private final Collection<String> types;
     
diff --git a/shardingsphere-features/shardingsphere-db-discovery/shardingsphere-db-discovery-distsql/shardingsphere-db-discovery-distsql-statement/src/main/java/org/apache/shardingsphere/dbdiscovery/distsql/parser/statement/ShowDatabaseDiscoveryHeartbeatsStatement.java b/shardingsphere-features/shardingsphere-db-discovery/shardingsphere-db-discovery-distsql/shardingsphere-db-discovery-distsql-statement/src/main/java/org/apache/shardingsphere/dbdiscovery/distsql/parser/statement/ShowDataba [...]
index 1b118bdc7f2..1d365b6a62b 100644
--- a/shardingsphere-features/shardingsphere-db-discovery/shardingsphere-db-discovery-distsql/shardingsphere-db-discovery-distsql-statement/src/main/java/org/apache/shardingsphere/dbdiscovery/distsql/parser/statement/ShowDatabaseDiscoveryHeartbeatsStatement.java
+++ b/shardingsphere-features/shardingsphere-db-discovery/shardingsphere-db-discovery-distsql/shardingsphere-db-discovery-distsql-statement/src/main/java/org/apache/shardingsphere/dbdiscovery/distsql/parser/statement/ShowDatabaseDiscoveryHeartbeatsStatement.java
@@ -17,13 +17,14 @@
 
 package org.apache.shardingsphere.dbdiscovery.distsql.parser.statement;
 
+import org.apache.shardingsphere.distsql.parser.subject.impl.DatabaseDiscoverySubjectSupplier;
 import org.apache.shardingsphere.distsql.parser.statement.rql.show.ShowRulesStatement;
 import org.apache.shardingsphere.sql.parser.sql.common.segment.generic.SchemaSegment;
 
 /**
  * Show database discovery heartbeats statement.
  */
-public final class ShowDatabaseDiscoveryHeartbeatsStatement extends ShowRulesStatement {
+public final class ShowDatabaseDiscoveryHeartbeatsStatement extends ShowRulesStatement implements DatabaseDiscoverySubjectSupplier {
     
     public ShowDatabaseDiscoveryHeartbeatsStatement(final SchemaSegment schema) {
         super(schema);
diff --git a/shardingsphere-features/shardingsphere-db-discovery/shardingsphere-db-discovery-distsql/shardingsphere-db-discovery-distsql-statement/src/main/java/org/apache/shardingsphere/dbdiscovery/distsql/parser/statement/ShowDatabaseDiscoveryRulesStatement.java b/shardingsphere-features/shardingsphere-db-discovery/shardingsphere-db-discovery-distsql/shardingsphere-db-discovery-distsql-statement/src/main/java/org/apache/shardingsphere/dbdiscovery/distsql/parser/statement/ShowDatabaseDis [...]
index c65e7058e6d..8843bb859c5 100644
--- a/shardingsphere-features/shardingsphere-db-discovery/shardingsphere-db-discovery-distsql/shardingsphere-db-discovery-distsql-statement/src/main/java/org/apache/shardingsphere/dbdiscovery/distsql/parser/statement/ShowDatabaseDiscoveryRulesStatement.java
+++ b/shardingsphere-features/shardingsphere-db-discovery/shardingsphere-db-discovery-distsql/shardingsphere-db-discovery-distsql-statement/src/main/java/org/apache/shardingsphere/dbdiscovery/distsql/parser/statement/ShowDatabaseDiscoveryRulesStatement.java
@@ -17,13 +17,14 @@
 
 package org.apache.shardingsphere.dbdiscovery.distsql.parser.statement;
 
+import org.apache.shardingsphere.distsql.parser.subject.impl.DatabaseDiscoverySubjectSupplier;
 import org.apache.shardingsphere.distsql.parser.statement.rql.show.ShowRulesStatement;
 import org.apache.shardingsphere.sql.parser.sql.common.segment.generic.SchemaSegment;
 
 /**
  * Show database discovery rules statement.
  */
-public final class ShowDatabaseDiscoveryRulesStatement extends ShowRulesStatement {
+public final class ShowDatabaseDiscoveryRulesStatement extends ShowRulesStatement implements DatabaseDiscoverySubjectSupplier {
     
     public ShowDatabaseDiscoveryRulesStatement(final SchemaSegment schema) {
         super(schema);
diff --git a/shardingsphere-features/shardingsphere-db-discovery/shardingsphere-db-discovery-distsql/shardingsphere-db-discovery-distsql-statement/src/main/java/org/apache/shardingsphere/dbdiscovery/distsql/parser/statement/ShowDatabaseDiscoveryTypesStatement.java b/shardingsphere-features/shardingsphere-db-discovery/shardingsphere-db-discovery-distsql/shardingsphere-db-discovery-distsql-statement/src/main/java/org/apache/shardingsphere/dbdiscovery/distsql/parser/statement/ShowDatabaseDis [...]
index 1a1549bcce2..2609fe7e07e 100644
--- a/shardingsphere-features/shardingsphere-db-discovery/shardingsphere-db-discovery-distsql/shardingsphere-db-discovery-distsql-statement/src/main/java/org/apache/shardingsphere/dbdiscovery/distsql/parser/statement/ShowDatabaseDiscoveryTypesStatement.java
+++ b/shardingsphere-features/shardingsphere-db-discovery/shardingsphere-db-discovery-distsql/shardingsphere-db-discovery-distsql-statement/src/main/java/org/apache/shardingsphere/dbdiscovery/distsql/parser/statement/ShowDatabaseDiscoveryTypesStatement.java
@@ -17,13 +17,14 @@
 
 package org.apache.shardingsphere.dbdiscovery.distsql.parser.statement;
 
+import org.apache.shardingsphere.distsql.parser.subject.impl.DatabaseDiscoverySubjectSupplier;
 import org.apache.shardingsphere.distsql.parser.statement.rql.show.ShowRulesStatement;
 import org.apache.shardingsphere.sql.parser.sql.common.segment.generic.SchemaSegment;
 
 /**
  * Show database discovery types statement.
  */
-public final class ShowDatabaseDiscoveryTypesStatement extends ShowRulesStatement {
+public final class ShowDatabaseDiscoveryTypesStatement extends ShowRulesStatement implements DatabaseDiscoverySubjectSupplier {
     
     public ShowDatabaseDiscoveryTypesStatement(final SchemaSegment schema) {
         super(schema);
diff --git a/shardingsphere-features/shardingsphere-encrypt/shardingsphere-encrypt-distsql/shardingsphere-encrypt-distsql-statement/src/main/java/org/apache/shardingsphere/encrypt/distsql/parser/statement/AlterEncryptRuleStatement.java b/shardingsphere-features/shardingsphere-encrypt/shardingsphere-encrypt-distsql/shardingsphere-encrypt-distsql-statement/src/main/java/org/apache/shardingsphere/encrypt/distsql/parser/statement/AlterEncryptRuleStatement.java
index 4659a8139e0..c218eea2989 100644
--- a/shardingsphere-features/shardingsphere-encrypt/shardingsphere-encrypt-distsql/shardingsphere-encrypt-distsql-statement/src/main/java/org/apache/shardingsphere/encrypt/distsql/parser/statement/AlterEncryptRuleStatement.java
+++ b/shardingsphere-features/shardingsphere-encrypt/shardingsphere-encrypt-distsql/shardingsphere-encrypt-distsql-statement/src/main/java/org/apache/shardingsphere/encrypt/distsql/parser/statement/AlterEncryptRuleStatement.java
@@ -19,17 +19,24 @@ package org.apache.shardingsphere.encrypt.distsql.parser.statement;
 
 import lombok.Getter;
 import lombok.RequiredArgsConstructor;
+import org.apache.shardingsphere.distsql.parser.subject.impl.EncryptSubjectSupplier;
 import org.apache.shardingsphere.encrypt.distsql.parser.segment.EncryptRuleSegment;
 import org.apache.shardingsphere.distsql.parser.statement.rdl.alter.AlterRuleStatement;
 
 import java.util.Collection;
+import java.util.stream.Collectors;
 
 /**
  * Alter encrypt rule statement.
  */
 @RequiredArgsConstructor
 @Getter
-public final class AlterEncryptRuleStatement extends AlterRuleStatement {
+public final class AlterEncryptRuleStatement extends AlterRuleStatement implements EncryptSubjectSupplier {
     
     private final Collection<EncryptRuleSegment> rules;
+    
+    @Override
+    public Collection<String> getSubjectNames() {
+        return rules.stream().map(EncryptRuleSegment::getTableName).collect(Collectors.toSet());
+    }
 }
diff --git a/shardingsphere-features/shardingsphere-encrypt/shardingsphere-encrypt-distsql/shardingsphere-encrypt-distsql-statement/src/main/java/org/apache/shardingsphere/encrypt/distsql/parser/statement/CreateEncryptRuleStatement.java b/shardingsphere-features/shardingsphere-encrypt/shardingsphere-encrypt-distsql/shardingsphere-encrypt-distsql-statement/src/main/java/org/apache/shardingsphere/encrypt/distsql/parser/statement/CreateEncryptRuleStatement.java
index 8f98adeed80..593b8a9f2a0 100644
--- a/shardingsphere-features/shardingsphere-encrypt/shardingsphere-encrypt-distsql/shardingsphere-encrypt-distsql-statement/src/main/java/org/apache/shardingsphere/encrypt/distsql/parser/statement/CreateEncryptRuleStatement.java
+++ b/shardingsphere-features/shardingsphere-encrypt/shardingsphere-encrypt-distsql/shardingsphere-encrypt-distsql-statement/src/main/java/org/apache/shardingsphere/encrypt/distsql/parser/statement/CreateEncryptRuleStatement.java
@@ -19,17 +19,24 @@ package org.apache.shardingsphere.encrypt.distsql.parser.statement;
 
 import lombok.Getter;
 import lombok.RequiredArgsConstructor;
-import org.apache.shardingsphere.encrypt.distsql.parser.segment.EncryptRuleSegment;
 import org.apache.shardingsphere.distsql.parser.statement.rdl.create.CreateRuleStatement;
+import org.apache.shardingsphere.distsql.parser.subject.impl.EncryptSubjectSupplier;
+import org.apache.shardingsphere.encrypt.distsql.parser.segment.EncryptRuleSegment;
 
 import java.util.Collection;
+import java.util.stream.Collectors;
 
 /**
  * Create encrypt rule statement.
  */
 @RequiredArgsConstructor
 @Getter
-public final class CreateEncryptRuleStatement extends CreateRuleStatement {
+public final class CreateEncryptRuleStatement extends CreateRuleStatement implements EncryptSubjectSupplier {
     
     private final Collection<EncryptRuleSegment> rules;
+    
+    @Override
+    public Collection<String> getSubjectNames() {
+        return rules.stream().map(EncryptRuleSegment::getTableName).collect(Collectors.toSet());
+    }
 }
diff --git a/shardingsphere-features/shardingsphere-encrypt/shardingsphere-encrypt-distsql/shardingsphere-encrypt-distsql-statement/src/main/java/org/apache/shardingsphere/encrypt/distsql/parser/statement/DropEncryptRuleStatement.java b/shardingsphere-features/shardingsphere-encrypt/shardingsphere-encrypt-distsql/shardingsphere-encrypt-distsql-statement/src/main/java/org/apache/shardingsphere/encrypt/distsql/parser/statement/DropEncryptRuleStatement.java
index 9f04756384a..71204d9296e 100644
--- a/shardingsphere-features/shardingsphere-encrypt/shardingsphere-encrypt-distsql/shardingsphere-encrypt-distsql-statement/src/main/java/org/apache/shardingsphere/encrypt/distsql/parser/statement/DropEncryptRuleStatement.java
+++ b/shardingsphere-features/shardingsphere-encrypt/shardingsphere-encrypt-distsql/shardingsphere-encrypt-distsql-statement/src/main/java/org/apache/shardingsphere/encrypt/distsql/parser/statement/DropEncryptRuleStatement.java
@@ -20,6 +20,7 @@ package org.apache.shardingsphere.encrypt.distsql.parser.statement;
 import lombok.Getter;
 import lombok.RequiredArgsConstructor;
 import org.apache.shardingsphere.distsql.parser.statement.rdl.drop.DropRuleStatement;
+import org.apache.shardingsphere.distsql.parser.subject.impl.EncryptSubjectSupplier;
 
 import java.util.Collection;
 
@@ -28,7 +29,7 @@ import java.util.Collection;
  */
 @RequiredArgsConstructor
 @Getter
-public final class DropEncryptRuleStatement extends DropRuleStatement {
+public final class DropEncryptRuleStatement extends DropRuleStatement implements EncryptSubjectSupplier {
     
     private final Collection<String> tables;
     
@@ -36,4 +37,9 @@ public final class DropEncryptRuleStatement extends DropRuleStatement {
         setContainsExistClause(containsExistClause);
         this.tables = tables;
     }
+    
+    @Override
+    public Collection<String> getSubjectNames() {
+        return tables;
+    }
 }
diff --git a/shardingsphere-features/shardingsphere-encrypt/shardingsphere-encrypt-distsql/shardingsphere-encrypt-distsql-statement/src/main/java/org/apache/shardingsphere/encrypt/distsql/parser/statement/ShowEncryptRulesStatement.java b/shardingsphere-features/shardingsphere-encrypt/shardingsphere-encrypt-distsql/shardingsphere-encrypt-distsql-statement/src/main/java/org/apache/shardingsphere/encrypt/distsql/parser/statement/ShowEncryptRulesStatement.java
index 1adebbd1136..d116f06b819 100644
--- a/shardingsphere-features/shardingsphere-encrypt/shardingsphere-encrypt-distsql/shardingsphere-encrypt-distsql-statement/src/main/java/org/apache/shardingsphere/encrypt/distsql/parser/statement/ShowEncryptRulesStatement.java
+++ b/shardingsphere-features/shardingsphere-encrypt/shardingsphere-encrypt-distsql/shardingsphere-encrypt-distsql-statement/src/main/java/org/apache/shardingsphere/encrypt/distsql/parser/statement/ShowEncryptRulesStatement.java
@@ -19,13 +19,17 @@ package org.apache.shardingsphere.encrypt.distsql.parser.statement;
 
 import lombok.Getter;
 import org.apache.shardingsphere.distsql.parser.statement.rql.show.ShowRulesStatement;
+import org.apache.shardingsphere.distsql.parser.subject.impl.EncryptSubjectSupplier;
 import org.apache.shardingsphere.sql.parser.sql.common.segment.generic.SchemaSegment;
 
+import java.util.Collection;
+import java.util.Collections;
+
 /**
  * Show encrypt rules statement.
  */
 @Getter
-public final class ShowEncryptRulesStatement extends ShowRulesStatement {
+public final class ShowEncryptRulesStatement extends ShowRulesStatement implements EncryptSubjectSupplier {
     
     private final String tableName;
     
@@ -33,4 +37,9 @@ public final class ShowEncryptRulesStatement extends ShowRulesStatement {
         super(schema);
         this.tableName = tableName;
     }
+    
+    @Override
+    public Collection<String> getSubjectNames() {
+        return null != tableName ? Collections.singletonList(tableName) : Collections.emptyList();
+    }
 }
diff --git a/shardingsphere-features/shardingsphere-readwrite-splitting/shardingsphere-readwrite-splitting-distsql/shardingsphere-readwrite-splitting-distsql-statement/src/main/java/org/apache/shardingsphere/readwritesplitting/distsql/parser/statement/AlterReadwriteSplittingRuleStatement.java b/shardingsphere-features/shardingsphere-readwrite-splitting/shardingsphere-readwrite-splitting-distsql/shardingsphere-readwrite-splitting-distsql-statement/src/main/java/org/apache/shardingsphere/re [...]
index a982993aea5..2901d93e8ba 100644
--- a/shardingsphere-features/shardingsphere-readwrite-splitting/shardingsphere-readwrite-splitting-distsql/shardingsphere-readwrite-splitting-distsql-statement/src/main/java/org/apache/shardingsphere/readwritesplitting/distsql/parser/statement/AlterReadwriteSplittingRuleStatement.java
+++ b/shardingsphere-features/shardingsphere-readwrite-splitting/shardingsphere-readwrite-splitting-distsql/shardingsphere-readwrite-splitting-distsql-statement/src/main/java/org/apache/shardingsphere/readwritesplitting/distsql/parser/statement/AlterReadwriteSplittingRuleStatement.java
@@ -19,6 +19,7 @@ package org.apache.shardingsphere.readwritesplitting.distsql.parser.statement;
 
 import lombok.Getter;
 import lombok.RequiredArgsConstructor;
+import org.apache.shardingsphere.distsql.parser.subject.impl.ReadwriteSplittingSubjectSupplier;
 import org.apache.shardingsphere.readwritesplitting.distsql.parser.segment.ReadwriteSplittingRuleSegment;
 import org.apache.shardingsphere.distsql.parser.statement.rdl.alter.AlterRuleStatement;
 
@@ -29,7 +30,7 @@ import java.util.Collection;
  */
 @RequiredArgsConstructor
 @Getter
-public final class AlterReadwriteSplittingRuleStatement extends AlterRuleStatement {
+public final class AlterReadwriteSplittingRuleStatement extends AlterRuleStatement implements ReadwriteSplittingSubjectSupplier {
     
     private final Collection<ReadwriteSplittingRuleSegment> rules;
 }
diff --git a/shardingsphere-features/shardingsphere-readwrite-splitting/shardingsphere-readwrite-splitting-distsql/shardingsphere-readwrite-splitting-distsql-statement/src/main/java/org/apache/shardingsphere/readwritesplitting/distsql/parser/statement/CreateReadwriteSplittingRuleStatement.java b/shardingsphere-features/shardingsphere-readwrite-splitting/shardingsphere-readwrite-splitting-distsql/shardingsphere-readwrite-splitting-distsql-statement/src/main/java/org/apache/shardingsphere/r [...]
index 87ac6f260ca..28a227f91f8 100644
--- a/shardingsphere-features/shardingsphere-readwrite-splitting/shardingsphere-readwrite-splitting-distsql/shardingsphere-readwrite-splitting-distsql-statement/src/main/java/org/apache/shardingsphere/readwritesplitting/distsql/parser/statement/CreateReadwriteSplittingRuleStatement.java
+++ b/shardingsphere-features/shardingsphere-readwrite-splitting/shardingsphere-readwrite-splitting-distsql/shardingsphere-readwrite-splitting-distsql-statement/src/main/java/org/apache/shardingsphere/readwritesplitting/distsql/parser/statement/CreateReadwriteSplittingRuleStatement.java
@@ -19,6 +19,7 @@ package org.apache.shardingsphere.readwritesplitting.distsql.parser.statement;
 
 import lombok.Getter;
 import lombok.RequiredArgsConstructor;
+import org.apache.shardingsphere.distsql.parser.subject.impl.ReadwriteSplittingSubjectSupplier;
 import org.apache.shardingsphere.readwritesplitting.distsql.parser.segment.ReadwriteSplittingRuleSegment;
 import org.apache.shardingsphere.distsql.parser.statement.rdl.create.CreateRuleStatement;
 
@@ -29,7 +30,7 @@ import java.util.Collection;
  */
 @RequiredArgsConstructor
 @Getter
-public final class CreateReadwriteSplittingRuleStatement extends CreateRuleStatement {
+public final class CreateReadwriteSplittingRuleStatement extends CreateRuleStatement implements ReadwriteSplittingSubjectSupplier {
     
     private final Collection<ReadwriteSplittingRuleSegment> rules;
 }
diff --git a/shardingsphere-features/shardingsphere-readwrite-splitting/shardingsphere-readwrite-splitting-distsql/shardingsphere-readwrite-splitting-distsql-statement/src/main/java/org/apache/shardingsphere/readwritesplitting/distsql/parser/statement/DropReadwriteSplittingRuleStatement.java b/shardingsphere-features/shardingsphere-readwrite-splitting/shardingsphere-readwrite-splitting-distsql/shardingsphere-readwrite-splitting-distsql-statement/src/main/java/org/apache/shardingsphere/rea [...]
index ea055375e8a..598355f0033 100644
--- a/shardingsphere-features/shardingsphere-readwrite-splitting/shardingsphere-readwrite-splitting-distsql/shardingsphere-readwrite-splitting-distsql-statement/src/main/java/org/apache/shardingsphere/readwritesplitting/distsql/parser/statement/DropReadwriteSplittingRuleStatement.java
+++ b/shardingsphere-features/shardingsphere-readwrite-splitting/shardingsphere-readwrite-splitting-distsql/shardingsphere-readwrite-splitting-distsql-statement/src/main/java/org/apache/shardingsphere/readwritesplitting/distsql/parser/statement/DropReadwriteSplittingRuleStatement.java
@@ -20,6 +20,7 @@ package org.apache.shardingsphere.readwritesplitting.distsql.parser.statement;
 import lombok.Getter;
 import lombok.RequiredArgsConstructor;
 import org.apache.shardingsphere.distsql.parser.statement.rdl.drop.DropRuleStatement;
+import org.apache.shardingsphere.distsql.parser.subject.impl.ReadwriteSplittingSubjectSupplier;
 
 import java.util.Collection;
 
@@ -28,7 +29,7 @@ import java.util.Collection;
  */
 @RequiredArgsConstructor
 @Getter
-public final class DropReadwriteSplittingRuleStatement extends DropRuleStatement {
+public final class DropReadwriteSplittingRuleStatement extends DropRuleStatement implements ReadwriteSplittingSubjectSupplier {
     
     private final Collection<String> ruleNames;
     
diff --git a/shardingsphere-features/shardingsphere-readwrite-splitting/shardingsphere-readwrite-splitting-distsql/shardingsphere-readwrite-splitting-distsql-statement/src/main/java/org/apache/shardingsphere/readwritesplitting/distsql/parser/statement/ShowReadwriteSplittingReadResourcesStatement.java b/shardingsphere-features/shardingsphere-readwrite-splitting/shardingsphere-readwrite-splitting-distsql/shardingsphere-readwrite-splitting-distsql-statement/src/main/java/org/apache/shardings [...]
index 945daa7dcd5..7dd07438e48 100644
--- a/shardingsphere-features/shardingsphere-readwrite-splitting/shardingsphere-readwrite-splitting-distsql/shardingsphere-readwrite-splitting-distsql-statement/src/main/java/org/apache/shardingsphere/readwritesplitting/distsql/parser/statement/ShowReadwriteSplittingReadResourcesStatement.java
+++ b/shardingsphere-features/shardingsphere-readwrite-splitting/shardingsphere-readwrite-splitting-distsql/shardingsphere-readwrite-splitting-distsql-statement/src/main/java/org/apache/shardingsphere/readwritesplitting/distsql/parser/statement/ShowReadwriteSplittingReadResourcesStatement.java
@@ -19,6 +19,7 @@ package org.apache.shardingsphere.readwritesplitting.distsql.parser.statement;
 
 import lombok.RequiredArgsConstructor;
 import org.apache.shardingsphere.distsql.parser.statement.ral.QueryableRALStatement;
+import org.apache.shardingsphere.distsql.parser.subject.impl.ReadwriteSplittingSubjectSupplier;
 import org.apache.shardingsphere.sql.parser.sql.common.segment.generic.SchemaSegment;
 import org.apache.shardingsphere.sql.parser.sql.common.statement.available.FromSchemaAvailable;
 
@@ -28,7 +29,7 @@ import java.util.Optional;
  * Show readwrite-splitting read resources statement.
  */
 @RequiredArgsConstructor
-public final class ShowReadwriteSplittingReadResourcesStatement extends QueryableRALStatement implements FromSchemaAvailable {
+public final class ShowReadwriteSplittingReadResourcesStatement extends QueryableRALStatement implements FromSchemaAvailable, ReadwriteSplittingSubjectSupplier {
     
     private final SchemaSegment schema;
     
diff --git a/shardingsphere-features/shardingsphere-readwrite-splitting/shardingsphere-readwrite-splitting-distsql/shardingsphere-readwrite-splitting-distsql-statement/src/main/java/org/apache/shardingsphere/readwritesplitting/distsql/parser/statement/ShowReadwriteSplittingRulesStatement.java b/shardingsphere-features/shardingsphere-readwrite-splitting/shardingsphere-readwrite-splitting-distsql/shardingsphere-readwrite-splitting-distsql-statement/src/main/java/org/apache/shardingsphere/re [...]
index 82a897f71a7..1019fbad22a 100644
--- a/shardingsphere-features/shardingsphere-readwrite-splitting/shardingsphere-readwrite-splitting-distsql/shardingsphere-readwrite-splitting-distsql-statement/src/main/java/org/apache/shardingsphere/readwritesplitting/distsql/parser/statement/ShowReadwriteSplittingRulesStatement.java
+++ b/shardingsphere-features/shardingsphere-readwrite-splitting/shardingsphere-readwrite-splitting-distsql/shardingsphere-readwrite-splitting-distsql-statement/src/main/java/org/apache/shardingsphere/readwritesplitting/distsql/parser/statement/ShowReadwriteSplittingRulesStatement.java
@@ -18,12 +18,13 @@
 package org.apache.shardingsphere.readwritesplitting.distsql.parser.statement;
 
 import org.apache.shardingsphere.distsql.parser.statement.rql.show.ShowRulesStatement;
+import org.apache.shardingsphere.distsql.parser.subject.impl.ReadwriteSplittingSubjectSupplier;
 import org.apache.shardingsphere.sql.parser.sql.common.segment.generic.SchemaSegment;
 
 /**
  * Show readwrite splitting rules statement.
  */
-public final class ShowReadwriteSplittingRulesStatement extends ShowRulesStatement {
+public final class ShowReadwriteSplittingRulesStatement extends ShowRulesStatement implements ReadwriteSplittingSubjectSupplier {
     
     public ShowReadwriteSplittingRulesStatement(final SchemaSegment schema) {
         super(schema);
diff --git a/shardingsphere-features/shardingsphere-readwrite-splitting/shardingsphere-readwrite-splitting-distsql/shardingsphere-readwrite-splitting-distsql-statement/src/main/java/org/apache/shardingsphere/readwritesplitting/distsql/parser/statement/hint/ClearReadwriteSplittingHintStatement.java b/shardingsphere-features/shardingsphere-readwrite-splitting/shardingsphere-readwrite-splitting-distsql/shardingsphere-readwrite-splitting-distsql-statement/src/main/java/org/apache/shardingsphe [...]
index bb12bafccd7..8dbc0ad1625 100644
--- a/shardingsphere-features/shardingsphere-readwrite-splitting/shardingsphere-readwrite-splitting-distsql/shardingsphere-readwrite-splitting-distsql-statement/src/main/java/org/apache/shardingsphere/readwritesplitting/distsql/parser/statement/hint/ClearReadwriteSplittingHintStatement.java
+++ b/shardingsphere-features/shardingsphere-readwrite-splitting/shardingsphere-readwrite-splitting-distsql/shardingsphere-readwrite-splitting-distsql-statement/src/main/java/org/apache/shardingsphere/readwritesplitting/distsql/parser/statement/hint/ClearReadwriteSplittingHintStatement.java
@@ -18,9 +18,10 @@
 package org.apache.shardingsphere.readwritesplitting.distsql.parser.statement.hint;
 
 import org.apache.shardingsphere.distsql.parser.statement.ral.common.HintDistSQLStatement;
+import org.apache.shardingsphere.distsql.parser.subject.impl.ReadwriteSplittingSubjectSupplier;
 
 /**
  * Clear readwrite-splitting hint statement.
  */
-public final class ClearReadwriteSplittingHintStatement extends HintDistSQLStatement {
+public final class ClearReadwriteSplittingHintStatement extends HintDistSQLStatement implements ReadwriteSplittingSubjectSupplier {
 }
diff --git a/shardingsphere-features/shardingsphere-readwrite-splitting/shardingsphere-readwrite-splitting-distsql/shardingsphere-readwrite-splitting-distsql-statement/src/main/java/org/apache/shardingsphere/readwritesplitting/distsql/parser/statement/hint/SetReadwriteSplittingHintStatement.java b/shardingsphere-features/shardingsphere-readwrite-splitting/shardingsphere-readwrite-splitting-distsql/shardingsphere-readwrite-splitting-distsql-statement/src/main/java/org/apache/shardingsphere [...]
index 181d32fcf00..da811036e7c 100644
--- a/shardingsphere-features/shardingsphere-readwrite-splitting/shardingsphere-readwrite-splitting-distsql/shardingsphere-readwrite-splitting-distsql-statement/src/main/java/org/apache/shardingsphere/readwritesplitting/distsql/parser/statement/hint/SetReadwriteSplittingHintStatement.java
+++ b/shardingsphere-features/shardingsphere-readwrite-splitting/shardingsphere-readwrite-splitting-distsql/shardingsphere-readwrite-splitting-distsql-statement/src/main/java/org/apache/shardingsphere/readwritesplitting/distsql/parser/statement/hint/SetReadwriteSplittingHintStatement.java
@@ -20,13 +20,14 @@ package org.apache.shardingsphere.readwritesplitting.distsql.parser.statement.hi
 import lombok.Getter;
 import lombok.RequiredArgsConstructor;
 import org.apache.shardingsphere.distsql.parser.statement.ral.common.HintDistSQLStatement;
+import org.apache.shardingsphere.distsql.parser.subject.impl.ReadwriteSplittingSubjectSupplier;
 
 /**
  * Set readwrite-splitting hint statement.
  */
 @RequiredArgsConstructor
 @Getter
-public final class SetReadwriteSplittingHintStatement extends HintDistSQLStatement {
+public final class SetReadwriteSplittingHintStatement extends HintDistSQLStatement implements ReadwriteSplittingSubjectSupplier {
     
     private final String source;
 }
diff --git a/shardingsphere-features/shardingsphere-readwrite-splitting/shardingsphere-readwrite-splitting-distsql/shardingsphere-readwrite-splitting-distsql-statement/src/main/java/org/apache/shardingsphere/readwritesplitting/distsql/parser/statement/hint/ShowReadwriteSplittingHintStatusStatement.java b/shardingsphere-features/shardingsphere-readwrite-splitting/shardingsphere-readwrite-splitting-distsql/shardingsphere-readwrite-splitting-distsql-statement/src/main/java/org/apache/shardin [...]
index b3102429b3f..e6fcf3c32a6 100644
--- a/shardingsphere-features/shardingsphere-readwrite-splitting/shardingsphere-readwrite-splitting-distsql/shardingsphere-readwrite-splitting-distsql-statement/src/main/java/org/apache/shardingsphere/readwritesplitting/distsql/parser/statement/hint/ShowReadwriteSplittingHintStatusStatement.java
+++ b/shardingsphere-features/shardingsphere-readwrite-splitting/shardingsphere-readwrite-splitting-distsql/shardingsphere-readwrite-splitting-distsql-statement/src/main/java/org/apache/shardingsphere/readwritesplitting/distsql/parser/statement/hint/ShowReadwriteSplittingHintStatusStatement.java
@@ -18,9 +18,10 @@
 package org.apache.shardingsphere.readwritesplitting.distsql.parser.statement.hint;
 
 import org.apache.shardingsphere.distsql.parser.statement.ral.common.HintDistSQLStatement;
+import org.apache.shardingsphere.distsql.parser.subject.impl.ReadwriteSplittingSubjectSupplier;
 
 /**
  * Show readwrite-splitting hint status statement.
  */
-public final class ShowReadwriteSplittingHintStatusStatement extends HintDistSQLStatement {
+public final class ShowReadwriteSplittingHintStatusStatement extends HintDistSQLStatement implements ReadwriteSplittingSubjectSupplier {
 }
diff --git a/shardingsphere-features/shardingsphere-readwrite-splitting/shardingsphere-readwrite-splitting-distsql/shardingsphere-readwrite-splitting-distsql-statement/src/main/java/org/apache/shardingsphere/readwritesplitting/distsql/parser/statement/status/SetReadwriteSplittingStatusStatement.java b/shardingsphere-features/shardingsphere-readwrite-splitting/shardingsphere-readwrite-splitting-distsql/shardingsphere-readwrite-splitting-distsql-statement/src/main/java/org/apache/shardingsp [...]
index b5ca6c3ef93..ec887c97bcf 100644
--- a/shardingsphere-features/shardingsphere-readwrite-splitting/shardingsphere-readwrite-splitting-distsql/shardingsphere-readwrite-splitting-distsql-statement/src/main/java/org/apache/shardingsphere/readwritesplitting/distsql/parser/statement/status/SetReadwriteSplittingStatusStatement.java
+++ b/shardingsphere-features/shardingsphere-readwrite-splitting/shardingsphere-readwrite-splitting-distsql/shardingsphere-readwrite-splitting-distsql-statement/src/main/java/org/apache/shardingsphere/readwritesplitting/distsql/parser/statement/status/SetReadwriteSplittingStatusStatement.java
@@ -20,6 +20,7 @@ package org.apache.shardingsphere.readwritesplitting.distsql.parser.statement.st
 import lombok.Getter;
 import lombok.RequiredArgsConstructor;
 import org.apache.shardingsphere.distsql.parser.statement.ral.UpdatableRALStatement;
+import org.apache.shardingsphere.distsql.parser.subject.impl.ReadwriteSplittingSubjectSupplier;
 import org.apache.shardingsphere.sql.parser.sql.common.segment.generic.SchemaSegment;
 import org.apache.shardingsphere.sql.parser.sql.common.statement.available.FromSchemaAvailable;
 
@@ -30,7 +31,7 @@ import java.util.Optional;
  */
 @Getter
 @RequiredArgsConstructor
-public class SetReadwriteSplittingStatusStatement extends UpdatableRALStatement implements FromSchemaAvailable {
+public class SetReadwriteSplittingStatusStatement extends UpdatableRALStatement implements FromSchemaAvailable, ReadwriteSplittingSubjectSupplier {
     
     private final String status;
     
diff --git a/shardingsphere-features/shardingsphere-shadow/shardingsphere-shadow-distsql/shardingsphere-shadow-distsql-statement/src/main/java/org/apache/shardingsphere/shadow/distsql/parser/statement/AlterShadowAlgorithmStatement.java b/shardingsphere-features/shardingsphere-shadow/shardingsphere-shadow-distsql/shardingsphere-shadow-distsql-statement/src/main/java/org/apache/shardingsphere/shadow/distsql/parser/statement/AlterShadowAlgorithmStatement.java
index 792ed4af9d4..342cfc048d9 100644
--- a/shardingsphere-features/shardingsphere-shadow/shardingsphere-shadow-distsql/shardingsphere-shadow-distsql-statement/src/main/java/org/apache/shardingsphere/shadow/distsql/parser/statement/AlterShadowAlgorithmStatement.java
+++ b/shardingsphere-features/shardingsphere-shadow/shardingsphere-shadow-distsql/shardingsphere-shadow-distsql-statement/src/main/java/org/apache/shardingsphere/shadow/distsql/parser/statement/AlterShadowAlgorithmStatement.java
@@ -19,6 +19,7 @@ package org.apache.shardingsphere.shadow.distsql.parser.statement;
 
 import lombok.Getter;
 import lombok.RequiredArgsConstructor;
+import org.apache.shardingsphere.distsql.parser.subject.impl.ShadowSubjectSupplier;
 import org.apache.shardingsphere.distsql.parser.statement.rdl.alter.AlterRuleStatement;
 import org.apache.shardingsphere.shadow.distsql.parser.segment.ShadowAlgorithmSegment;
 
@@ -29,7 +30,7 @@ import java.util.Collection;
  */
 @RequiredArgsConstructor
 @Getter
-public final class AlterShadowAlgorithmStatement extends AlterRuleStatement {
+public final class AlterShadowAlgorithmStatement extends AlterRuleStatement implements ShadowSubjectSupplier {
 
     private final Collection<ShadowAlgorithmSegment> algorithms;
 }
diff --git a/shardingsphere-features/shardingsphere-shadow/shardingsphere-shadow-distsql/shardingsphere-shadow-distsql-statement/src/main/java/org/apache/shardingsphere/shadow/distsql/parser/statement/AlterShadowRuleStatement.java b/shardingsphere-features/shardingsphere-shadow/shardingsphere-shadow-distsql/shardingsphere-shadow-distsql-statement/src/main/java/org/apache/shardingsphere/shadow/distsql/parser/statement/AlterShadowRuleStatement.java
index 83eaa3fa897..7c63f50ce12 100644
--- a/shardingsphere-features/shardingsphere-shadow/shardingsphere-shadow-distsql/shardingsphere-shadow-distsql-statement/src/main/java/org/apache/shardingsphere/shadow/distsql/parser/statement/AlterShadowRuleStatement.java
+++ b/shardingsphere-features/shardingsphere-shadow/shardingsphere-shadow-distsql/shardingsphere-shadow-distsql-statement/src/main/java/org/apache/shardingsphere/shadow/distsql/parser/statement/AlterShadowRuleStatement.java
@@ -19,6 +19,7 @@ package org.apache.shardingsphere.shadow.distsql.parser.statement;
 
 import lombok.Getter;
 import lombok.RequiredArgsConstructor;
+import org.apache.shardingsphere.distsql.parser.subject.impl.ShadowSubjectSupplier;
 import org.apache.shardingsphere.distsql.parser.statement.rdl.alter.AlterRuleStatement;
 import org.apache.shardingsphere.shadow.distsql.parser.segment.ShadowRuleSegment;
 
@@ -29,7 +30,7 @@ import java.util.Collection;
  */
 @RequiredArgsConstructor
 @Getter
-public final class AlterShadowRuleStatement extends AlterRuleStatement {
+public final class AlterShadowRuleStatement extends AlterRuleStatement implements ShadowSubjectSupplier {
 
     private final Collection<ShadowRuleSegment> rules;
 }
diff --git a/shardingsphere-features/shardingsphere-shadow/shardingsphere-shadow-distsql/shardingsphere-shadow-distsql-statement/src/main/java/org/apache/shardingsphere/shadow/distsql/parser/statement/CreateDefaultShadowAlgorithmStatement.java b/shardingsphere-features/shardingsphere-shadow/shardingsphere-shadow-distsql/shardingsphere-shadow-distsql-statement/src/main/java/org/apache/shardingsphere/shadow/distsql/parser/statement/CreateDefaultShadowAlgorithmStatement.java
index 82787e41ac8..b4f12148ae2 100644
--- a/shardingsphere-features/shardingsphere-shadow/shardingsphere-shadow-distsql/shardingsphere-shadow-distsql-statement/src/main/java/org/apache/shardingsphere/shadow/distsql/parser/statement/CreateDefaultShadowAlgorithmStatement.java
+++ b/shardingsphere-features/shardingsphere-shadow/shardingsphere-shadow-distsql/shardingsphere-shadow-distsql-statement/src/main/java/org/apache/shardingsphere/shadow/distsql/parser/statement/CreateDefaultShadowAlgorithmStatement.java
@@ -19,6 +19,7 @@ package org.apache.shardingsphere.shadow.distsql.parser.statement;
 
 import lombok.Getter;
 import lombok.RequiredArgsConstructor;
+import org.apache.shardingsphere.distsql.parser.subject.impl.ShadowSubjectSupplier;
 import org.apache.shardingsphere.distsql.parser.statement.rdl.create.CreateRuleStatement;
 
 /**
@@ -26,7 +27,7 @@ import org.apache.shardingsphere.distsql.parser.statement.rdl.create.CreateRuleS
  */
 @RequiredArgsConstructor
 @Getter
-public final class CreateDefaultShadowAlgorithmStatement extends CreateRuleStatement {
+public final class CreateDefaultShadowAlgorithmStatement extends CreateRuleStatement implements ShadowSubjectSupplier {
 
     private final String algorithmName;
 }
diff --git a/shardingsphere-features/shardingsphere-shadow/shardingsphere-shadow-distsql/shardingsphere-shadow-distsql-statement/src/main/java/org/apache/shardingsphere/shadow/distsql/parser/statement/CreateShadowAlgorithmStatement.java b/shardingsphere-features/shardingsphere-shadow/shardingsphere-shadow-distsql/shardingsphere-shadow-distsql-statement/src/main/java/org/apache/shardingsphere/shadow/distsql/parser/statement/CreateShadowAlgorithmStatement.java
index 2f452945833..2b1bc780cdc 100644
--- a/shardingsphere-features/shardingsphere-shadow/shardingsphere-shadow-distsql/shardingsphere-shadow-distsql-statement/src/main/java/org/apache/shardingsphere/shadow/distsql/parser/statement/CreateShadowAlgorithmStatement.java
+++ b/shardingsphere-features/shardingsphere-shadow/shardingsphere-shadow-distsql/shardingsphere-shadow-distsql-statement/src/main/java/org/apache/shardingsphere/shadow/distsql/parser/statement/CreateShadowAlgorithmStatement.java
@@ -19,6 +19,7 @@ package org.apache.shardingsphere.shadow.distsql.parser.statement;
 
 import lombok.Getter;
 import lombok.RequiredArgsConstructor;
+import org.apache.shardingsphere.distsql.parser.subject.impl.ShadowSubjectSupplier;
 import org.apache.shardingsphere.distsql.parser.statement.rdl.create.CreateRuleStatement;
 import org.apache.shardingsphere.shadow.distsql.parser.segment.ShadowAlgorithmSegment;
 
@@ -29,7 +30,7 @@ import java.util.Collection;
  */
 @RequiredArgsConstructor
 @Getter
-public final class CreateShadowAlgorithmStatement extends CreateRuleStatement {
+public final class CreateShadowAlgorithmStatement extends CreateRuleStatement implements ShadowSubjectSupplier {
 
     private final Collection<ShadowAlgorithmSegment> algorithms;
 }
diff --git a/shardingsphere-features/shardingsphere-shadow/shardingsphere-shadow-distsql/shardingsphere-shadow-distsql-statement/src/main/java/org/apache/shardingsphere/shadow/distsql/parser/statement/CreateShadowRuleStatement.java b/shardingsphere-features/shardingsphere-shadow/shardingsphere-shadow-distsql/shardingsphere-shadow-distsql-statement/src/main/java/org/apache/shardingsphere/shadow/distsql/parser/statement/CreateShadowRuleStatement.java
index b5c976ac0a1..28404afb26a 100644
--- a/shardingsphere-features/shardingsphere-shadow/shardingsphere-shadow-distsql/shardingsphere-shadow-distsql-statement/src/main/java/org/apache/shardingsphere/shadow/distsql/parser/statement/CreateShadowRuleStatement.java
+++ b/shardingsphere-features/shardingsphere-shadow/shardingsphere-shadow-distsql/shardingsphere-shadow-distsql-statement/src/main/java/org/apache/shardingsphere/shadow/distsql/parser/statement/CreateShadowRuleStatement.java
@@ -19,6 +19,7 @@ package org.apache.shardingsphere.shadow.distsql.parser.statement;
 
 import lombok.Getter;
 import lombok.RequiredArgsConstructor;
+import org.apache.shardingsphere.distsql.parser.subject.impl.ShadowSubjectSupplier;
 import org.apache.shardingsphere.distsql.parser.statement.rdl.create.CreateRuleStatement;
 import org.apache.shardingsphere.shadow.distsql.parser.segment.ShadowRuleSegment;
 
@@ -29,7 +30,7 @@ import java.util.Collection;
  */
 @RequiredArgsConstructor
 @Getter
-public final class CreateShadowRuleStatement extends CreateRuleStatement {
+public final class CreateShadowRuleStatement extends CreateRuleStatement implements ShadowSubjectSupplier {
 
     private final Collection<ShadowRuleSegment> rules;
 }
diff --git a/shardingsphere-features/shardingsphere-shadow/shardingsphere-shadow-distsql/shardingsphere-shadow-distsql-statement/src/main/java/org/apache/shardingsphere/shadow/distsql/parser/statement/DropDefaultShadowAlgorithmStatement.java b/shardingsphere-features/shardingsphere-shadow/shardingsphere-shadow-distsql/shardingsphere-shadow-distsql-statement/src/main/java/org/apache/shardingsphere/shadow/distsql/parser/statement/DropDefaultShadowAlgorithmStatement.java
index a05ed2b73e2..833bec9fa27 100644
--- a/shardingsphere-features/shardingsphere-shadow/shardingsphere-shadow-distsql/shardingsphere-shadow-distsql-statement/src/main/java/org/apache/shardingsphere/shadow/distsql/parser/statement/DropDefaultShadowAlgorithmStatement.java
+++ b/shardingsphere-features/shardingsphere-shadow/shardingsphere-shadow-distsql/shardingsphere-shadow-distsql-statement/src/main/java/org/apache/shardingsphere/shadow/distsql/parser/statement/DropDefaultShadowAlgorithmStatement.java
@@ -19,6 +19,7 @@ package org.apache.shardingsphere.shadow.distsql.parser.statement;
 
 import lombok.Getter;
 import lombok.RequiredArgsConstructor;
+import org.apache.shardingsphere.distsql.parser.subject.impl.ShadowSubjectSupplier;
 import org.apache.shardingsphere.distsql.parser.statement.rdl.drop.DropRuleStatement;
 
 /**
@@ -26,7 +27,7 @@ import org.apache.shardingsphere.distsql.parser.statement.rdl.drop.DropRuleState
  */
 @RequiredArgsConstructor
 @Getter
-public final class DropDefaultShadowAlgorithmStatement extends DropRuleStatement {
+public final class DropDefaultShadowAlgorithmStatement extends DropRuleStatement implements ShadowSubjectSupplier {
     
     public DropDefaultShadowAlgorithmStatement(final boolean containsExistClause) {
         setContainsExistClause(containsExistClause);
diff --git a/shardingsphere-features/shardingsphere-shadow/shardingsphere-shadow-distsql/shardingsphere-shadow-distsql-statement/src/main/java/org/apache/shardingsphere/shadow/distsql/parser/statement/DropShadowAlgorithmStatement.java b/shardingsphere-features/shardingsphere-shadow/shardingsphere-shadow-distsql/shardingsphere-shadow-distsql-statement/src/main/java/org/apache/shardingsphere/shadow/distsql/parser/statement/DropShadowAlgorithmStatement.java
index 6691ece1a67..650957006ff 100644
--- a/shardingsphere-features/shardingsphere-shadow/shardingsphere-shadow-distsql/shardingsphere-shadow-distsql-statement/src/main/java/org/apache/shardingsphere/shadow/distsql/parser/statement/DropShadowAlgorithmStatement.java
+++ b/shardingsphere-features/shardingsphere-shadow/shardingsphere-shadow-distsql/shardingsphere-shadow-distsql-statement/src/main/java/org/apache/shardingsphere/shadow/distsql/parser/statement/DropShadowAlgorithmStatement.java
@@ -19,6 +19,7 @@ package org.apache.shardingsphere.shadow.distsql.parser.statement;
 
 import lombok.Getter;
 import lombok.RequiredArgsConstructor;
+import org.apache.shardingsphere.distsql.parser.subject.impl.ShadowSubjectSupplier;
 import org.apache.shardingsphere.distsql.parser.statement.rdl.drop.DropRuleStatement;
 
 import java.util.Collection;
@@ -28,7 +29,7 @@ import java.util.Collection;
  */
 @RequiredArgsConstructor
 @Getter
-public final class DropShadowAlgorithmStatement extends DropRuleStatement {
+public final class DropShadowAlgorithmStatement extends DropRuleStatement implements ShadowSubjectSupplier {
     
     private final Collection<String> algorithmNames;
     
diff --git a/shardingsphere-features/shardingsphere-shadow/shardingsphere-shadow-distsql/shardingsphere-shadow-distsql-statement/src/main/java/org/apache/shardingsphere/shadow/distsql/parser/statement/DropShadowRuleStatement.java b/shardingsphere-features/shardingsphere-shadow/shardingsphere-shadow-distsql/shardingsphere-shadow-distsql-statement/src/main/java/org/apache/shardingsphere/shadow/distsql/parser/statement/DropShadowRuleStatement.java
index 560c6501cff..44f5e0ef03f 100644
--- a/shardingsphere-features/shardingsphere-shadow/shardingsphere-shadow-distsql/shardingsphere-shadow-distsql-statement/src/main/java/org/apache/shardingsphere/shadow/distsql/parser/statement/DropShadowRuleStatement.java
+++ b/shardingsphere-features/shardingsphere-shadow/shardingsphere-shadow-distsql/shardingsphere-shadow-distsql-statement/src/main/java/org/apache/shardingsphere/shadow/distsql/parser/statement/DropShadowRuleStatement.java
@@ -19,6 +19,7 @@ package org.apache.shardingsphere.shadow.distsql.parser.statement;
 
 import lombok.Getter;
 import lombok.RequiredArgsConstructor;
+import org.apache.shardingsphere.distsql.parser.subject.impl.ShadowSubjectSupplier;
 import org.apache.shardingsphere.distsql.parser.statement.rdl.drop.DropRuleStatement;
 
 import java.util.Collection;
@@ -28,7 +29,7 @@ import java.util.Collection;
  */
 @RequiredArgsConstructor
 @Getter
-public final class DropShadowRuleStatement extends DropRuleStatement {
+public final class DropShadowRuleStatement extends DropRuleStatement implements ShadowSubjectSupplier {
 
     private final Collection<String> ruleNames;
     
diff --git a/shardingsphere-features/shardingsphere-shadow/shardingsphere-shadow-distsql/shardingsphere-shadow-distsql-statement/src/main/java/org/apache/shardingsphere/shadow/distsql/parser/statement/ShowShadowAlgorithmsStatement.java b/shardingsphere-features/shardingsphere-shadow/shardingsphere-shadow-distsql/shardingsphere-shadow-distsql-statement/src/main/java/org/apache/shardingsphere/shadow/distsql/parser/statement/ShowShadowAlgorithmsStatement.java
index f74bcc90acc..849d97fd5ea 100644
--- a/shardingsphere-features/shardingsphere-shadow/shardingsphere-shadow-distsql/shardingsphere-shadow-distsql-statement/src/main/java/org/apache/shardingsphere/shadow/distsql/parser/statement/ShowShadowAlgorithmsStatement.java
+++ b/shardingsphere-features/shardingsphere-shadow/shardingsphere-shadow-distsql/shardingsphere-shadow-distsql-statement/src/main/java/org/apache/shardingsphere/shadow/distsql/parser/statement/ShowShadowAlgorithmsStatement.java
@@ -18,6 +18,7 @@
 package org.apache.shardingsphere.shadow.distsql.parser.statement;
 
 import lombok.Getter;
+import org.apache.shardingsphere.distsql.parser.subject.impl.ShadowSubjectSupplier;
 import org.apache.shardingsphere.distsql.parser.statement.rql.show.ShowRulesStatement;
 import org.apache.shardingsphere.sql.parser.sql.common.segment.generic.SchemaSegment;
 
@@ -25,7 +26,7 @@ import org.apache.shardingsphere.sql.parser.sql.common.segment.generic.SchemaSeg
  * Show shadow algorithms statement.
  */
 @Getter
-public final class ShowShadowAlgorithmsStatement extends ShowRulesStatement {
+public final class ShowShadowAlgorithmsStatement extends ShowRulesStatement implements ShadowSubjectSupplier {
     
     public ShowShadowAlgorithmsStatement(final SchemaSegment schema) {
         super(schema);
diff --git a/shardingsphere-features/shardingsphere-shadow/shardingsphere-shadow-distsql/shardingsphere-shadow-distsql-statement/src/main/java/org/apache/shardingsphere/shadow/distsql/parser/statement/ShowShadowRulesStatement.java b/shardingsphere-features/shardingsphere-shadow/shardingsphere-shadow-distsql/shardingsphere-shadow-distsql-statement/src/main/java/org/apache/shardingsphere/shadow/distsql/parser/statement/ShowShadowRulesStatement.java
index da6adbb7c53..29068b4a66d 100644
--- a/shardingsphere-features/shardingsphere-shadow/shardingsphere-shadow-distsql/shardingsphere-shadow-distsql-statement/src/main/java/org/apache/shardingsphere/shadow/distsql/parser/statement/ShowShadowRulesStatement.java
+++ b/shardingsphere-features/shardingsphere-shadow/shardingsphere-shadow-distsql/shardingsphere-shadow-distsql-statement/src/main/java/org/apache/shardingsphere/shadow/distsql/parser/statement/ShowShadowRulesStatement.java
@@ -18,6 +18,7 @@
 package org.apache.shardingsphere.shadow.distsql.parser.statement;
 
 import lombok.Getter;
+import org.apache.shardingsphere.distsql.parser.subject.impl.ShadowSubjectSupplier;
 import org.apache.shardingsphere.distsql.parser.statement.rql.show.ShowRulesStatement;
 import org.apache.shardingsphere.sql.parser.sql.common.segment.generic.SchemaSegment;
 
@@ -25,7 +26,7 @@ import org.apache.shardingsphere.sql.parser.sql.common.segment.generic.SchemaSeg
  * Show shadow rules statement.
  */
 @Getter
-public final class ShowShadowRulesStatement extends ShowRulesStatement {
+public final class ShowShadowRulesStatement extends ShowRulesStatement implements ShadowSubjectSupplier {
     
     private final String ruleName;
     
diff --git a/shardingsphere-features/shardingsphere-shadow/shardingsphere-shadow-distsql/shardingsphere-shadow-distsql-statement/src/main/java/org/apache/shardingsphere/shadow/distsql/parser/statement/ShowShadowTableRulesStatement.java b/shardingsphere-features/shardingsphere-shadow/shardingsphere-shadow-distsql/shardingsphere-shadow-distsql-statement/src/main/java/org/apache/shardingsphere/shadow/distsql/parser/statement/ShowShadowTableRulesStatement.java
index cb804227ded..43ca910aec4 100644
--- a/shardingsphere-features/shardingsphere-shadow/shardingsphere-shadow-distsql/shardingsphere-shadow-distsql-statement/src/main/java/org/apache/shardingsphere/shadow/distsql/parser/statement/ShowShadowTableRulesStatement.java
+++ b/shardingsphere-features/shardingsphere-shadow/shardingsphere-shadow-distsql/shardingsphere-shadow-distsql-statement/src/main/java/org/apache/shardingsphere/shadow/distsql/parser/statement/ShowShadowTableRulesStatement.java
@@ -18,6 +18,7 @@
 package org.apache.shardingsphere.shadow.distsql.parser.statement;
 
 import lombok.Getter;
+import org.apache.shardingsphere.distsql.parser.subject.impl.ShadowSubjectSupplier;
 import org.apache.shardingsphere.distsql.parser.statement.rql.show.ShowRulesStatement;
 import org.apache.shardingsphere.sql.parser.sql.common.segment.generic.SchemaSegment;
 
@@ -25,7 +26,7 @@ import org.apache.shardingsphere.sql.parser.sql.common.segment.generic.SchemaSeg
  * Show shadow table rules statement.
  */
 @Getter
-public final class ShowShadowTableRulesStatement extends ShowRulesStatement {
+public final class ShowShadowTableRulesStatement extends ShowRulesStatement implements ShadowSubjectSupplier {
     
     public ShowShadowTableRulesStatement(final SchemaSegment schema) {
         super(schema);
diff --git a/shardingsphere-features/shardingsphere-sharding/shardingsphere-sharding-distsql/shardingsphere-sharding-distsql-statement/src/main/java/org/apache/shardingsphere/scaling/distsql/statement/ApplyScalingStatement.java b/shardingsphere-features/shardingsphere-sharding/shardingsphere-sharding-distsql/shardingsphere-sharding-distsql-statement/src/main/java/org/apache/shardingsphere/scaling/distsql/statement/ApplyScalingStatement.java
index d475fc1859d..601b9e30727 100644
--- a/shardingsphere-features/shardingsphere-sharding/shardingsphere-sharding-distsql/shardingsphere-sharding-distsql-statement/src/main/java/org/apache/shardingsphere/scaling/distsql/statement/ApplyScalingStatement.java
+++ b/shardingsphere-features/shardingsphere-sharding/shardingsphere-sharding-distsql/shardingsphere-sharding-distsql-statement/src/main/java/org/apache/shardingsphere/scaling/distsql/statement/ApplyScalingStatement.java
@@ -19,6 +19,7 @@ package org.apache.shardingsphere.scaling.distsql.statement;
 
 import lombok.Getter;
 import lombok.RequiredArgsConstructor;
+import org.apache.shardingsphere.distsql.parser.subject.impl.ScalingSubjectSupplier;
 import org.apache.shardingsphere.distsql.parser.statement.ral.scaling.UpdatableScalingRALStatement;
 
 /**
@@ -26,7 +27,7 @@ import org.apache.shardingsphere.distsql.parser.statement.ral.scaling.UpdatableS
  */
 @RequiredArgsConstructor
 @Getter
-public final class ApplyScalingStatement extends UpdatableScalingRALStatement {
+public final class ApplyScalingStatement extends UpdatableScalingRALStatement implements ScalingSubjectSupplier {
     
     private final String jobId;
 }
diff --git a/shardingsphere-features/shardingsphere-sharding/shardingsphere-sharding-distsql/shardingsphere-sharding-distsql-statement/src/main/java/org/apache/shardingsphere/scaling/distsql/statement/CheckScalingStatement.java b/shardingsphere-features/shardingsphere-sharding/shardingsphere-sharding-distsql/shardingsphere-sharding-distsql-statement/src/main/java/org/apache/shardingsphere/scaling/distsql/statement/CheckScalingStatement.java
index 258b8706920..702c355f9e9 100644
--- a/shardingsphere-features/shardingsphere-sharding/shardingsphere-sharding-distsql/shardingsphere-sharding-distsql-statement/src/main/java/org/apache/shardingsphere/scaling/distsql/statement/CheckScalingStatement.java
+++ b/shardingsphere-features/shardingsphere-sharding/shardingsphere-sharding-distsql/shardingsphere-sharding-distsql-statement/src/main/java/org/apache/shardingsphere/scaling/distsql/statement/CheckScalingStatement.java
@@ -19,6 +19,7 @@ package org.apache.shardingsphere.scaling.distsql.statement;
 
 import lombok.Getter;
 import lombok.RequiredArgsConstructor;
+import org.apache.shardingsphere.distsql.parser.subject.impl.ScalingSubjectSupplier;
 import org.apache.shardingsphere.distsql.parser.segment.AlgorithmSegment;
 import org.apache.shardingsphere.distsql.parser.statement.ral.scaling.QueryableScalingRALStatement;
 
@@ -27,7 +28,7 @@ import org.apache.shardingsphere.distsql.parser.statement.ral.scaling.QueryableS
  */
 @RequiredArgsConstructor
 @Getter
-public final class CheckScalingStatement extends QueryableScalingRALStatement {
+public final class CheckScalingStatement extends QueryableScalingRALStatement implements ScalingSubjectSupplier {
     
     private final String jobId;
     
diff --git a/shardingsphere-features/shardingsphere-sharding/shardingsphere-sharding-distsql/shardingsphere-sharding-distsql-statement/src/main/java/org/apache/shardingsphere/scaling/distsql/statement/CreateShardingScalingRuleStatement.java b/shardingsphere-features/shardingsphere-sharding/shardingsphere-sharding-distsql/shardingsphere-sharding-distsql-statement/src/main/java/org/apache/shardingsphere/scaling/distsql/statement/CreateShardingScalingRuleStatement.java
index f0e351ffbf8..7b24f4cea51 100644
--- a/shardingsphere-features/shardingsphere-sharding/shardingsphere-sharding-distsql/shardingsphere-sharding-distsql-statement/src/main/java/org/apache/shardingsphere/scaling/distsql/statement/CreateShardingScalingRuleStatement.java
+++ b/shardingsphere-features/shardingsphere-sharding/shardingsphere-sharding-distsql/shardingsphere-sharding-distsql-statement/src/main/java/org/apache/shardingsphere/scaling/distsql/statement/CreateShardingScalingRuleStatement.java
@@ -20,6 +20,7 @@ package org.apache.shardingsphere.scaling.distsql.statement;
 import lombok.Getter;
 import lombok.RequiredArgsConstructor;
 import lombok.Setter;
+import org.apache.shardingsphere.distsql.parser.subject.impl.ScalingSubjectSupplier;
 import org.apache.shardingsphere.distsql.parser.statement.rdl.create.CreateRuleStatement;
 import org.apache.shardingsphere.scaling.distsql.statement.segment.ShardingScalingRuleConfigurationSegment;
 
@@ -29,7 +30,7 @@ import org.apache.shardingsphere.scaling.distsql.statement.segment.ShardingScali
 @RequiredArgsConstructor
 @Getter
 @Setter
-public final class CreateShardingScalingRuleStatement extends CreateRuleStatement {
+public final class CreateShardingScalingRuleStatement extends CreateRuleStatement implements ScalingSubjectSupplier {
     
     private final String scalingName;
     
diff --git a/shardingsphere-features/shardingsphere-sharding/shardingsphere-sharding-distsql/shardingsphere-sharding-distsql-statement/src/main/java/org/apache/shardingsphere/scaling/distsql/statement/DisableShardingScalingRuleStatement.java b/shardingsphere-features/shardingsphere-sharding/shardingsphere-sharding-distsql/shardingsphere-sharding-distsql-statement/src/main/java/org/apache/shardingsphere/scaling/distsql/statement/DisableShardingScalingRuleStatement.java
index a1283038e45..5ad33305fbb 100644
--- a/shardingsphere-features/shardingsphere-sharding/shardingsphere-sharding-distsql/shardingsphere-sharding-distsql-statement/src/main/java/org/apache/shardingsphere/scaling/distsql/statement/DisableShardingScalingRuleStatement.java
+++ b/shardingsphere-features/shardingsphere-sharding/shardingsphere-sharding-distsql/shardingsphere-sharding-distsql-statement/src/main/java/org/apache/shardingsphere/scaling/distsql/statement/DisableShardingScalingRuleStatement.java
@@ -19,6 +19,7 @@ package org.apache.shardingsphere.scaling.distsql.statement;
 
 import lombok.Getter;
 import lombok.RequiredArgsConstructor;
+import org.apache.shardingsphere.distsql.parser.subject.impl.ScalingSubjectSupplier;
 import org.apache.shardingsphere.distsql.parser.statement.rdl.alter.AlterRuleStatement;
 
 /**
@@ -26,7 +27,7 @@ import org.apache.shardingsphere.distsql.parser.statement.rdl.alter.AlterRuleSta
  */
 @RequiredArgsConstructor
 @Getter
-public final class DisableShardingScalingRuleStatement extends AlterRuleStatement {
+public final class DisableShardingScalingRuleStatement extends AlterRuleStatement implements ScalingSubjectSupplier {
     
     private final String scalingName;
 }
diff --git a/shardingsphere-features/shardingsphere-sharding/shardingsphere-sharding-distsql/shardingsphere-sharding-distsql-statement/src/main/java/org/apache/shardingsphere/scaling/distsql/statement/DropScalingStatement.java b/shardingsphere-features/shardingsphere-sharding/shardingsphere-sharding-distsql/shardingsphere-sharding-distsql-statement/src/main/java/org/apache/shardingsphere/scaling/distsql/statement/DropScalingStatement.java
index 85b7269d420..455ad7730b5 100644
--- a/shardingsphere-features/shardingsphere-sharding/shardingsphere-sharding-distsql/shardingsphere-sharding-distsql-statement/src/main/java/org/apache/shardingsphere/scaling/distsql/statement/DropScalingStatement.java
+++ b/shardingsphere-features/shardingsphere-sharding/shardingsphere-sharding-distsql/shardingsphere-sharding-distsql-statement/src/main/java/org/apache/shardingsphere/scaling/distsql/statement/DropScalingStatement.java
@@ -19,6 +19,7 @@ package org.apache.shardingsphere.scaling.distsql.statement;
 
 import lombok.Getter;
 import lombok.RequiredArgsConstructor;
+import org.apache.shardingsphere.distsql.parser.subject.impl.ScalingSubjectSupplier;
 import org.apache.shardingsphere.distsql.parser.statement.ral.scaling.UpdatableScalingRALStatement;
 
 /**
@@ -26,7 +27,7 @@ import org.apache.shardingsphere.distsql.parser.statement.ral.scaling.UpdatableS
  */
 @RequiredArgsConstructor
 @Getter
-public final class DropScalingStatement extends UpdatableScalingRALStatement {
+public final class DropScalingStatement extends UpdatableScalingRALStatement implements ScalingSubjectSupplier {
     
     private final String jobId;
 }
diff --git a/shardingsphere-features/shardingsphere-sharding/shardingsphere-sharding-distsql/shardingsphere-sharding-distsql-statement/src/main/java/org/apache/shardingsphere/scaling/distsql/statement/DropShardingScalingRuleStatement.java b/shardingsphere-features/shardingsphere-sharding/shardingsphere-sharding-distsql/shardingsphere-sharding-distsql-statement/src/main/java/org/apache/shardingsphere/scaling/distsql/statement/DropShardingScalingRuleStatement.java
index 5d551afcf75..c990d0ab257 100644
--- a/shardingsphere-features/shardingsphere-sharding/shardingsphere-sharding-distsql/shardingsphere-sharding-distsql-statement/src/main/java/org/apache/shardingsphere/scaling/distsql/statement/DropShardingScalingRuleStatement.java
+++ b/shardingsphere-features/shardingsphere-sharding/shardingsphere-sharding-distsql/shardingsphere-sharding-distsql-statement/src/main/java/org/apache/shardingsphere/scaling/distsql/statement/DropShardingScalingRuleStatement.java
@@ -19,6 +19,7 @@ package org.apache.shardingsphere.scaling.distsql.statement;
 
 import lombok.Getter;
 import lombok.RequiredArgsConstructor;
+import org.apache.shardingsphere.distsql.parser.subject.impl.ScalingSubjectSupplier;
 import org.apache.shardingsphere.distsql.parser.statement.rdl.drop.DropRuleStatement;
 
 /**
@@ -26,7 +27,7 @@ import org.apache.shardingsphere.distsql.parser.statement.rdl.drop.DropRuleState
  */
 @RequiredArgsConstructor
 @Getter
-public final class DropShardingScalingRuleStatement extends DropRuleStatement {
+public final class DropShardingScalingRuleStatement extends DropRuleStatement implements ScalingSubjectSupplier {
     
     private final String scalingName;
     
diff --git a/shardingsphere-features/shardingsphere-sharding/shardingsphere-sharding-distsql/shardingsphere-sharding-distsql-statement/src/main/java/org/apache/shardingsphere/scaling/distsql/statement/EnableShardingScalingRuleStatement.java b/shardingsphere-features/shardingsphere-sharding/shardingsphere-sharding-distsql/shardingsphere-sharding-distsql-statement/src/main/java/org/apache/shardingsphere/scaling/distsql/statement/EnableShardingScalingRuleStatement.java
index 6470b9acb8d..21bbd842a02 100644
--- a/shardingsphere-features/shardingsphere-sharding/shardingsphere-sharding-distsql/shardingsphere-sharding-distsql-statement/src/main/java/org/apache/shardingsphere/scaling/distsql/statement/EnableShardingScalingRuleStatement.java
+++ b/shardingsphere-features/shardingsphere-sharding/shardingsphere-sharding-distsql/shardingsphere-sharding-distsql-statement/src/main/java/org/apache/shardingsphere/scaling/distsql/statement/EnableShardingScalingRuleStatement.java
@@ -19,6 +19,7 @@ package org.apache.shardingsphere.scaling.distsql.statement;
 
 import lombok.Getter;
 import lombok.RequiredArgsConstructor;
+import org.apache.shardingsphere.distsql.parser.subject.impl.ScalingSubjectSupplier;
 import org.apache.shardingsphere.distsql.parser.statement.rdl.alter.AlterRuleStatement;
 
 /**
@@ -26,7 +27,7 @@ import org.apache.shardingsphere.distsql.parser.statement.rdl.alter.AlterRuleSta
  */
 @RequiredArgsConstructor
 @Getter
-public final class EnableShardingScalingRuleStatement extends AlterRuleStatement {
+public final class EnableShardingScalingRuleStatement extends AlterRuleStatement implements ScalingSubjectSupplier {
     
     private final String scalingName;
 }
diff --git a/shardingsphere-features/shardingsphere-sharding/shardingsphere-sharding-distsql/shardingsphere-sharding-distsql-statement/src/main/java/org/apache/shardingsphere/scaling/distsql/statement/ResetScalingStatement.java b/shardingsphere-features/shardingsphere-sharding/shardingsphere-sharding-distsql/shardingsphere-sharding-distsql-statement/src/main/java/org/apache/shardingsphere/scaling/distsql/statement/ResetScalingStatement.java
index 3ac3ba09f0b..3004b833130 100644
--- a/shardingsphere-features/shardingsphere-sharding/shardingsphere-sharding-distsql/shardingsphere-sharding-distsql-statement/src/main/java/org/apache/shardingsphere/scaling/distsql/statement/ResetScalingStatement.java
+++ b/shardingsphere-features/shardingsphere-sharding/shardingsphere-sharding-distsql/shardingsphere-sharding-distsql-statement/src/main/java/org/apache/shardingsphere/scaling/distsql/statement/ResetScalingStatement.java
@@ -19,6 +19,7 @@ package org.apache.shardingsphere.scaling.distsql.statement;
 
 import lombok.Getter;
 import lombok.RequiredArgsConstructor;
+import org.apache.shardingsphere.distsql.parser.subject.impl.ScalingSubjectSupplier;
 import org.apache.shardingsphere.distsql.parser.statement.ral.scaling.UpdatableScalingRALStatement;
 
 /**
@@ -26,7 +27,7 @@ import org.apache.shardingsphere.distsql.parser.statement.ral.scaling.UpdatableS
  */
 @RequiredArgsConstructor
 @Getter
-public final class ResetScalingStatement extends UpdatableScalingRALStatement {
+public final class ResetScalingStatement extends UpdatableScalingRALStatement implements ScalingSubjectSupplier {
     
     private final String jobId;
 }
diff --git a/shardingsphere-features/shardingsphere-sharding/shardingsphere-sharding-distsql/shardingsphere-sharding-distsql-statement/src/main/java/org/apache/shardingsphere/scaling/distsql/statement/RestoreScalingSourceWritingStatement.java b/shardingsphere-features/shardingsphere-sharding/shardingsphere-sharding-distsql/shardingsphere-sharding-distsql-statement/src/main/java/org/apache/shardingsphere/scaling/distsql/statement/RestoreScalingSourceWritingStatement.java
index c368ec5bbcf..3c096070ea6 100644
--- a/shardingsphere-features/shardingsphere-sharding/shardingsphere-sharding-distsql/shardingsphere-sharding-distsql-statement/src/main/java/org/apache/shardingsphere/scaling/distsql/statement/RestoreScalingSourceWritingStatement.java
+++ b/shardingsphere-features/shardingsphere-sharding/shardingsphere-sharding-distsql/shardingsphere-sharding-distsql-statement/src/main/java/org/apache/shardingsphere/scaling/distsql/statement/RestoreScalingSourceWritingStatement.java
@@ -19,6 +19,7 @@ package org.apache.shardingsphere.scaling.distsql.statement;
 
 import lombok.Getter;
 import lombok.RequiredArgsConstructor;
+import org.apache.shardingsphere.distsql.parser.subject.impl.ScalingSubjectSupplier;
 import org.apache.shardingsphere.distsql.parser.statement.ral.scaling.UpdatableScalingRALStatement;
 
 /**
@@ -26,7 +27,7 @@ import org.apache.shardingsphere.distsql.parser.statement.ral.scaling.UpdatableS
  */
 @RequiredArgsConstructor
 @Getter
-public final class RestoreScalingSourceWritingStatement extends UpdatableScalingRALStatement {
+public final class RestoreScalingSourceWritingStatement extends UpdatableScalingRALStatement implements ScalingSubjectSupplier {
     
     private final String jobId;
 }
diff --git a/shardingsphere-features/shardingsphere-sharding/shardingsphere-sharding-distsql/shardingsphere-sharding-distsql-statement/src/main/java/org/apache/shardingsphere/scaling/distsql/statement/ShowScalingCheckAlgorithmsStatement.java b/shardingsphere-features/shardingsphere-sharding/shardingsphere-sharding-distsql/shardingsphere-sharding-distsql-statement/src/main/java/org/apache/shardingsphere/scaling/distsql/statement/ShowScalingCheckAlgorithmsStatement.java
index acd4ca33653..8170c1abd4a 100644
--- a/shardingsphere-features/shardingsphere-sharding/shardingsphere-sharding-distsql/shardingsphere-sharding-distsql-statement/src/main/java/org/apache/shardingsphere/scaling/distsql/statement/ShowScalingCheckAlgorithmsStatement.java
+++ b/shardingsphere-features/shardingsphere-sharding/shardingsphere-sharding-distsql/shardingsphere-sharding-distsql-statement/src/main/java/org/apache/shardingsphere/scaling/distsql/statement/ShowScalingCheckAlgorithmsStatement.java
@@ -17,10 +17,11 @@
 
 package org.apache.shardingsphere.scaling.distsql.statement;
 
+import org.apache.shardingsphere.distsql.parser.subject.impl.ScalingSubjectSupplier;
 import org.apache.shardingsphere.distsql.parser.statement.ral.scaling.QueryableScalingRALStatement;
 
 /**
  * Show scaling check algorithms statement.
  */
-public final class ShowScalingCheckAlgorithmsStatement extends QueryableScalingRALStatement {
+public final class ShowScalingCheckAlgorithmsStatement extends QueryableScalingRALStatement implements ScalingSubjectSupplier {
 }
diff --git a/shardingsphere-features/shardingsphere-sharding/shardingsphere-sharding-distsql/shardingsphere-sharding-distsql-statement/src/main/java/org/apache/shardingsphere/scaling/distsql/statement/ShowScalingListStatement.java b/shardingsphere-features/shardingsphere-sharding/shardingsphere-sharding-distsql/shardingsphere-sharding-distsql-statement/src/main/java/org/apache/shardingsphere/scaling/distsql/statement/ShowScalingListStatement.java
index 8cd86fb8eb5..d05e32f8772 100644
--- a/shardingsphere-features/shardingsphere-sharding/shardingsphere-sharding-distsql/shardingsphere-sharding-distsql-statement/src/main/java/org/apache/shardingsphere/scaling/distsql/statement/ShowScalingListStatement.java
+++ b/shardingsphere-features/shardingsphere-sharding/shardingsphere-sharding-distsql/shardingsphere-sharding-distsql-statement/src/main/java/org/apache/shardingsphere/scaling/distsql/statement/ShowScalingListStatement.java
@@ -17,10 +17,11 @@
 
 package org.apache.shardingsphere.scaling.distsql.statement;
 
+import org.apache.shardingsphere.distsql.parser.subject.impl.ScalingSubjectSupplier;
 import org.apache.shardingsphere.distsql.parser.statement.ral.scaling.QueryableScalingRALStatement;
 
 /**
  * Show scaling list statement.
  */
-public final class ShowScalingListStatement extends QueryableScalingRALStatement {
+public final class ShowScalingListStatement extends QueryableScalingRALStatement implements ScalingSubjectSupplier {
 }
diff --git a/shardingsphere-features/shardingsphere-sharding/shardingsphere-sharding-distsql/shardingsphere-sharding-distsql-statement/src/main/java/org/apache/shardingsphere/scaling/distsql/statement/ShowScalingStatusStatement.java b/shardingsphere-features/shardingsphere-sharding/shardingsphere-sharding-distsql/shardingsphere-sharding-distsql-statement/src/main/java/org/apache/shardingsphere/scaling/distsql/statement/ShowScalingStatusStatement.java
index 114b302b62d..a929edfd17b 100644
--- a/shardingsphere-features/shardingsphere-sharding/shardingsphere-sharding-distsql/shardingsphere-sharding-distsql-statement/src/main/java/org/apache/shardingsphere/scaling/distsql/statement/ShowScalingStatusStatement.java
+++ b/shardingsphere-features/shardingsphere-sharding/shardingsphere-sharding-distsql/shardingsphere-sharding-distsql-statement/src/main/java/org/apache/shardingsphere/scaling/distsql/statement/ShowScalingStatusStatement.java
@@ -19,6 +19,7 @@ package org.apache.shardingsphere.scaling.distsql.statement;
 
 import lombok.Getter;
 import lombok.RequiredArgsConstructor;
+import org.apache.shardingsphere.distsql.parser.subject.impl.ScalingSubjectSupplier;
 import org.apache.shardingsphere.distsql.parser.statement.ral.scaling.QueryableScalingRALStatement;
 
 /**
@@ -26,7 +27,7 @@ import org.apache.shardingsphere.distsql.parser.statement.ral.scaling.QueryableS
  */
 @RequiredArgsConstructor
 @Getter
-public final class ShowScalingStatusStatement extends QueryableScalingRALStatement {
+public final class ShowScalingStatusStatement extends QueryableScalingRALStatement implements ScalingSubjectSupplier {
     
     private final String jobId;
 }
diff --git a/shardingsphere-features/shardingsphere-sharding/shardingsphere-sharding-distsql/shardingsphere-sharding-distsql-statement/src/main/java/org/apache/shardingsphere/scaling/distsql/statement/ShowShardingScalingRulesStatement.java b/shardingsphere-features/shardingsphere-sharding/shardingsphere-sharding-distsql/shardingsphere-sharding-distsql-statement/src/main/java/org/apache/shardingsphere/scaling/distsql/statement/ShowShardingScalingRulesStatement.java
index fa2c2f44dcd..319db2877b2 100644
--- a/shardingsphere-features/shardingsphere-sharding/shardingsphere-sharding-distsql/shardingsphere-sharding-distsql-statement/src/main/java/org/apache/shardingsphere/scaling/distsql/statement/ShowShardingScalingRulesStatement.java
+++ b/shardingsphere-features/shardingsphere-sharding/shardingsphere-sharding-distsql/shardingsphere-sharding-distsql-statement/src/main/java/org/apache/shardingsphere/scaling/distsql/statement/ShowShardingScalingRulesStatement.java
@@ -17,13 +17,14 @@
 
 package org.apache.shardingsphere.scaling.distsql.statement;
 
+import org.apache.shardingsphere.distsql.parser.subject.impl.ScalingSubjectSupplier;
 import org.apache.shardingsphere.distsql.parser.statement.rql.show.ShowRulesStatement;
 import org.apache.shardingsphere.sql.parser.sql.common.segment.generic.SchemaSegment;
 
 /**
  * Show sharding scaling rules statement.
  */
-public final class ShowShardingScalingRulesStatement extends ShowRulesStatement {
+public final class ShowShardingScalingRulesStatement extends ShowRulesStatement implements ScalingSubjectSupplier {
     
     public ShowShardingScalingRulesStatement(final SchemaSegment schema) {
         super(schema);
diff --git a/shardingsphere-features/shardingsphere-sharding/shardingsphere-sharding-distsql/shardingsphere-sharding-distsql-statement/src/main/java/org/apache/shardingsphere/scaling/distsql/statement/StartScalingStatement.java b/shardingsphere-features/shardingsphere-sharding/shardingsphere-sharding-distsql/shardingsphere-sharding-distsql-statement/src/main/java/org/apache/shardingsphere/scaling/distsql/statement/StartScalingStatement.java
index 37e8ad1a750..77f971c8123 100644
--- a/shardingsphere-features/shardingsphere-sharding/shardingsphere-sharding-distsql/shardingsphere-sharding-distsql-statement/src/main/java/org/apache/shardingsphere/scaling/distsql/statement/StartScalingStatement.java
+++ b/shardingsphere-features/shardingsphere-sharding/shardingsphere-sharding-distsql/shardingsphere-sharding-distsql-statement/src/main/java/org/apache/shardingsphere/scaling/distsql/statement/StartScalingStatement.java
@@ -19,6 +19,7 @@ package org.apache.shardingsphere.scaling.distsql.statement;
 
 import lombok.Getter;
 import lombok.RequiredArgsConstructor;
+import org.apache.shardingsphere.distsql.parser.subject.impl.ScalingSubjectSupplier;
 import org.apache.shardingsphere.distsql.parser.statement.ral.scaling.UpdatableScalingRALStatement;
 
 /**
@@ -26,7 +27,7 @@ import org.apache.shardingsphere.distsql.parser.statement.ral.scaling.UpdatableS
  */
 @RequiredArgsConstructor
 @Getter
-public final class StartScalingStatement extends UpdatableScalingRALStatement {
+public final class StartScalingStatement extends UpdatableScalingRALStatement implements ScalingSubjectSupplier {
     
     private final String jobId;
 }
diff --git a/shardingsphere-features/shardingsphere-sharding/shardingsphere-sharding-distsql/shardingsphere-sharding-distsql-statement/src/main/java/org/apache/shardingsphere/scaling/distsql/statement/StopScalingSourceWritingStatement.java b/shardingsphere-features/shardingsphere-sharding/shardingsphere-sharding-distsql/shardingsphere-sharding-distsql-statement/src/main/java/org/apache/shardingsphere/scaling/distsql/statement/StopScalingSourceWritingStatement.java
index 811c8cb2742..a4feeae86ca 100644
--- a/shardingsphere-features/shardingsphere-sharding/shardingsphere-sharding-distsql/shardingsphere-sharding-distsql-statement/src/main/java/org/apache/shardingsphere/scaling/distsql/statement/StopScalingSourceWritingStatement.java
+++ b/shardingsphere-features/shardingsphere-sharding/shardingsphere-sharding-distsql/shardingsphere-sharding-distsql-statement/src/main/java/org/apache/shardingsphere/scaling/distsql/statement/StopScalingSourceWritingStatement.java
@@ -19,6 +19,7 @@ package org.apache.shardingsphere.scaling.distsql.statement;
 
 import lombok.Getter;
 import lombok.RequiredArgsConstructor;
+import org.apache.shardingsphere.distsql.parser.subject.impl.ScalingSubjectSupplier;
 import org.apache.shardingsphere.distsql.parser.statement.ral.scaling.UpdatableScalingRALStatement;
 
 /**
@@ -26,7 +27,7 @@ import org.apache.shardingsphere.distsql.parser.statement.ral.scaling.UpdatableS
  */
 @RequiredArgsConstructor
 @Getter
-public final class StopScalingSourceWritingStatement extends UpdatableScalingRALStatement {
+public final class StopScalingSourceWritingStatement extends UpdatableScalingRALStatement implements ScalingSubjectSupplier {
     
     private final String jobId;
 }
diff --git a/shardingsphere-features/shardingsphere-sharding/shardingsphere-sharding-distsql/shardingsphere-sharding-distsql-statement/src/main/java/org/apache/shardingsphere/scaling/distsql/statement/StopScalingStatement.java b/shardingsphere-features/shardingsphere-sharding/shardingsphere-sharding-distsql/shardingsphere-sharding-distsql-statement/src/main/java/org/apache/shardingsphere/scaling/distsql/statement/StopScalingStatement.java
index 2c2a1acad93..44c95199231 100644
--- a/shardingsphere-features/shardingsphere-sharding/shardingsphere-sharding-distsql/shardingsphere-sharding-distsql-statement/src/main/java/org/apache/shardingsphere/scaling/distsql/statement/StopScalingStatement.java
+++ b/shardingsphere-features/shardingsphere-sharding/shardingsphere-sharding-distsql/shardingsphere-sharding-distsql-statement/src/main/java/org/apache/shardingsphere/scaling/distsql/statement/StopScalingStatement.java
@@ -19,6 +19,7 @@ package org.apache.shardingsphere.scaling.distsql.statement;
 
 import lombok.Getter;
 import lombok.RequiredArgsConstructor;
+import org.apache.shardingsphere.distsql.parser.subject.impl.ScalingSubjectSupplier;
 import org.apache.shardingsphere.distsql.parser.statement.ral.scaling.UpdatableScalingRALStatement;
 
 /**
@@ -26,7 +27,7 @@ import org.apache.shardingsphere.distsql.parser.statement.ral.scaling.UpdatableS
  */
 @RequiredArgsConstructor
 @Getter
-public final class StopScalingStatement extends UpdatableScalingRALStatement {
+public final class StopScalingStatement extends UpdatableScalingRALStatement implements ScalingSubjectSupplier {
     
     private final String jobId;
 }
diff --git a/shardingsphere-features/shardingsphere-sharding/shardingsphere-sharding-distsql/shardingsphere-sharding-distsql-statement/src/main/java/org/apache/shardingsphere/sharding/distsql/parser/statement/AlterDefaultShardingStrategyStatement.java b/shardingsphere-features/shardingsphere-sharding/shardingsphere-sharding-distsql/shardingsphere-sharding-distsql-statement/src/main/java/org/apache/shardingsphere/sharding/distsql/parser/statement/AlterDefaultShardingStrategyStatement.java
index 4e006e953c7..c409c39f213 100644
--- a/shardingsphere-features/shardingsphere-sharding/shardingsphere-sharding-distsql/shardingsphere-sharding-distsql-statement/src/main/java/org/apache/shardingsphere/sharding/distsql/parser/statement/AlterDefaultShardingStrategyStatement.java
+++ b/shardingsphere-features/shardingsphere-sharding/shardingsphere-sharding-distsql/shardingsphere-sharding-distsql-statement/src/main/java/org/apache/shardingsphere/sharding/distsql/parser/statement/AlterDefaultShardingStrategyStatement.java
@@ -21,13 +21,14 @@ import lombok.Getter;
 import lombok.RequiredArgsConstructor;
 import org.apache.shardingsphere.distsql.parser.segment.AlgorithmSegment;
 import org.apache.shardingsphere.distsql.parser.statement.rdl.alter.AlterRuleStatement;
+import org.apache.shardingsphere.distsql.parser.subject.impl.ShardingSubjectSupplier;
 
 /**
  * Alter default sharding strategy statement.
  */
 @RequiredArgsConstructor
 @Getter
-public final class AlterDefaultShardingStrategyStatement extends AlterRuleStatement {
+public final class AlterDefaultShardingStrategyStatement extends AlterRuleStatement implements ShardingSubjectSupplier {
     
     private final String defaultType;
     
diff --git a/shardingsphere-features/shardingsphere-sharding/shardingsphere-sharding-distsql/shardingsphere-sharding-distsql-statement/src/main/java/org/apache/shardingsphere/sharding/distsql/parser/statement/AlterShardingAlgorithmStatement.java b/shardingsphere-features/shardingsphere-sharding/shardingsphere-sharding-distsql/shardingsphere-sharding-distsql-statement/src/main/java/org/apache/shardingsphere/sharding/distsql/parser/statement/AlterShardingAlgorithmStatement.java
index 11615a33aa2..ec0600ed2f5 100644
--- a/shardingsphere-features/shardingsphere-sharding/shardingsphere-sharding-distsql/shardingsphere-sharding-distsql-statement/src/main/java/org/apache/shardingsphere/sharding/distsql/parser/statement/AlterShardingAlgorithmStatement.java
+++ b/shardingsphere-features/shardingsphere-sharding/shardingsphere-sharding-distsql/shardingsphere-sharding-distsql-statement/src/main/java/org/apache/shardingsphere/sharding/distsql/parser/statement/AlterShardingAlgorithmStatement.java
@@ -20,6 +20,7 @@ package org.apache.shardingsphere.sharding.distsql.parser.statement;
 import lombok.Getter;
 import lombok.RequiredArgsConstructor;
 import org.apache.shardingsphere.distsql.parser.statement.rdl.alter.AlterRuleStatement;
+import org.apache.shardingsphere.distsql.parser.subject.impl.ShardingSubjectSupplier;
 import org.apache.shardingsphere.sharding.distsql.parser.segment.ShardingAlgorithmSegment;
 
 import java.util.Collection;
@@ -29,7 +30,7 @@ import java.util.Collection;
  */
 @RequiredArgsConstructor
 @Getter
-public final class AlterShardingAlgorithmStatement extends AlterRuleStatement {
+public final class AlterShardingAlgorithmStatement extends AlterRuleStatement implements ShardingSubjectSupplier {
     
     private final Collection<ShardingAlgorithmSegment> algorithmSegments;
 }
diff --git a/shardingsphere-features/shardingsphere-sharding/shardingsphere-sharding-distsql/shardingsphere-sharding-distsql-statement/src/main/java/org/apache/shardingsphere/sharding/distsql/parser/statement/AlterShardingBindingTableRulesStatement.java b/shardingsphere-features/shardingsphere-sharding/shardingsphere-sharding-distsql/shardingsphere-sharding-distsql-statement/src/main/java/org/apache/shardingsphere/sharding/distsql/parser/statement/AlterShardingBindingTableRulesStatement.java
index b6fbd480860..62cc9a8172d 100644
--- a/shardingsphere-features/shardingsphere-sharding/shardingsphere-sharding-distsql/shardingsphere-sharding-distsql-statement/src/main/java/org/apache/shardingsphere/sharding/distsql/parser/statement/AlterShardingBindingTableRulesStatement.java
+++ b/shardingsphere-features/shardingsphere-sharding/shardingsphere-sharding-distsql/shardingsphere-sharding-distsql-statement/src/main/java/org/apache/shardingsphere/sharding/distsql/parser/statement/AlterShardingBindingTableRulesStatement.java
@@ -20,6 +20,7 @@ package org.apache.shardingsphere.sharding.distsql.parser.statement;
 import lombok.Getter;
 import lombok.RequiredArgsConstructor;
 import org.apache.shardingsphere.distsql.parser.statement.rdl.alter.AlterRuleStatement;
+import org.apache.shardingsphere.distsql.parser.subject.impl.ShardingSubjectSupplier;
 import org.apache.shardingsphere.sharding.distsql.parser.segment.BindingTableRuleSegment;
 
 import java.util.Collection;
@@ -30,7 +31,7 @@ import java.util.LinkedList;
  */
 @RequiredArgsConstructor
 @Getter
-public final class AlterShardingBindingTableRulesStatement extends AlterRuleStatement {
+public final class AlterShardingBindingTableRulesStatement extends AlterRuleStatement implements ShardingSubjectSupplier {
     
     private final Collection<BindingTableRuleSegment> rules;
     
@@ -46,4 +47,9 @@ public final class AlterShardingBindingTableRulesStatement extends AlterRuleStat
         }
         return result;
     }
+    
+    @Override
+    public Collection<String> getSubjectNames() {
+        return getBindingTables();
+    }
 }
diff --git a/shardingsphere-features/shardingsphere-sharding/shardingsphere-sharding-distsql/shardingsphere-sharding-distsql-statement/src/main/java/org/apache/shardingsphere/sharding/distsql/parser/statement/AlterShardingBroadcastTableRulesStatement.java b/shardingsphere-features/shardingsphere-sharding/shardingsphere-sharding-distsql/shardingsphere-sharding-distsql-statement/src/main/java/org/apache/shardingsphere/sharding/distsql/parser/statement/AlterShardingBroadcastTableRulesStatement.java
index 4fd4feab2a3..05a094872ec 100644
--- a/shardingsphere-features/shardingsphere-sharding/shardingsphere-sharding-distsql/shardingsphere-sharding-distsql-statement/src/main/java/org/apache/shardingsphere/sharding/distsql/parser/statement/AlterShardingBroadcastTableRulesStatement.java
+++ b/shardingsphere-features/shardingsphere-sharding/shardingsphere-sharding-distsql/shardingsphere-sharding-distsql-statement/src/main/java/org/apache/shardingsphere/sharding/distsql/parser/statement/AlterShardingBroadcastTableRulesStatement.java
@@ -20,6 +20,7 @@ package org.apache.shardingsphere.sharding.distsql.parser.statement;
 import lombok.Getter;
 import lombok.RequiredArgsConstructor;
 import org.apache.shardingsphere.distsql.parser.statement.rdl.alter.AlterRuleStatement;
+import org.apache.shardingsphere.distsql.parser.subject.impl.ShardingSubjectSupplier;
 
 import java.util.Collection;
 
@@ -28,7 +29,12 @@ import java.util.Collection;
  */
 @RequiredArgsConstructor
 @Getter
-public final class AlterShardingBroadcastTableRulesStatement extends AlterRuleStatement {
+public final class AlterShardingBroadcastTableRulesStatement extends AlterRuleStatement implements ShardingSubjectSupplier {
     
     private final Collection<String> tables;
+    
+    @Override
+    public Collection<String> getSubjectNames() {
+        return tables;
+    }
 }
diff --git a/shardingsphere-features/shardingsphere-sharding/shardingsphere-sharding-distsql/shardingsphere-sharding-distsql-statement/src/main/java/org/apache/shardingsphere/sharding/distsql/parser/statement/AlterShardingKeyGeneratorStatement.java b/shardingsphere-features/shardingsphere-sharding/shardingsphere-sharding-distsql/shardingsphere-sharding-distsql-statement/src/main/java/org/apache/shardingsphere/sharding/distsql/parser/statement/AlterShardingKeyGeneratorStatement.java
index f4f7bac17be..354546a1c16 100644
--- a/shardingsphere-features/shardingsphere-sharding/shardingsphere-sharding-distsql/shardingsphere-sharding-distsql-statement/src/main/java/org/apache/shardingsphere/sharding/distsql/parser/statement/AlterShardingKeyGeneratorStatement.java
+++ b/shardingsphere-features/shardingsphere-sharding/shardingsphere-sharding-distsql/shardingsphere-sharding-distsql-statement/src/main/java/org/apache/shardingsphere/sharding/distsql/parser/statement/AlterShardingKeyGeneratorStatement.java
@@ -20,6 +20,7 @@ package org.apache.shardingsphere.sharding.distsql.parser.statement;
 import lombok.Getter;
 import lombok.RequiredArgsConstructor;
 import org.apache.shardingsphere.distsql.parser.statement.rdl.alter.AlterRuleStatement;
+import org.apache.shardingsphere.distsql.parser.subject.impl.ShardingSubjectSupplier;
 import org.apache.shardingsphere.sharding.distsql.parser.segment.ShardingKeyGeneratorSegment;
 
 import java.util.Collection;
@@ -29,7 +30,7 @@ import java.util.Collection;
  */
 @RequiredArgsConstructor
 @Getter
-public final class AlterShardingKeyGeneratorStatement extends AlterRuleStatement {
+public final class AlterShardingKeyGeneratorStatement extends AlterRuleStatement implements ShardingSubjectSupplier {
     
     private final Collection<ShardingKeyGeneratorSegment> keyGeneratorSegments;
 }
diff --git a/shardingsphere-features/shardingsphere-sharding/shardingsphere-sharding-distsql/shardingsphere-sharding-distsql-statement/src/main/java/org/apache/shardingsphere/sharding/distsql/parser/statement/AlterShardingTableRuleStatement.java b/shardingsphere-features/shardingsphere-sharding/shardingsphere-sharding-distsql/shardingsphere-sharding-distsql-statement/src/main/java/org/apache/shardingsphere/sharding/distsql/parser/statement/AlterShardingTableRuleStatement.java
index 662996c3756..03ee674b745 100644
--- a/shardingsphere-features/shardingsphere-sharding/shardingsphere-sharding-distsql/shardingsphere-sharding-distsql-statement/src/main/java/org/apache/shardingsphere/sharding/distsql/parser/statement/AlterShardingTableRuleStatement.java
+++ b/shardingsphere-features/shardingsphere-sharding/shardingsphere-sharding-distsql/shardingsphere-sharding-distsql-statement/src/main/java/org/apache/shardingsphere/sharding/distsql/parser/statement/AlterShardingTableRuleStatement.java
@@ -20,16 +20,23 @@ package org.apache.shardingsphere.sharding.distsql.parser.statement;
 import lombok.Getter;
 import lombok.RequiredArgsConstructor;
 import org.apache.shardingsphere.distsql.parser.statement.rdl.alter.AlterRuleStatement;
+import org.apache.shardingsphere.distsql.parser.subject.impl.ShardingSubjectSupplier;
 import org.apache.shardingsphere.sharding.distsql.parser.segment.AbstractTableRuleSegment;
 
 import java.util.Collection;
+import java.util.stream.Collectors;
 
 /**
  * Alter sharding table rule statement.
  */
 @RequiredArgsConstructor
 @Getter
-public final class AlterShardingTableRuleStatement extends AlterRuleStatement {
+public final class AlterShardingTableRuleStatement extends AlterRuleStatement implements ShardingSubjectSupplier {
     
     private final Collection<AbstractTableRuleSegment> rules;
+    
+    @Override
+    public Collection<String> getSubjectNames() {
+        return rules.stream().map(AbstractTableRuleSegment::getLogicTable).collect(Collectors.toSet());
+    }
 }
diff --git a/shardingsphere-features/shardingsphere-sharding/shardingsphere-sharding-distsql/shardingsphere-sharding-distsql-statement/src/main/java/org/apache/shardingsphere/sharding/distsql/parser/statement/CreateDefaultShardingStrategyStatement.java b/shardingsphere-features/shardingsphere-sharding/shardingsphere-sharding-distsql/shardingsphere-sharding-distsql-statement/src/main/java/org/apache/shardingsphere/sharding/distsql/parser/statement/CreateDefaultShardingStrategyStatement.java
index cd42f255134..865bf596bfd 100644
--- a/shardingsphere-features/shardingsphere-sharding/shardingsphere-sharding-distsql/shardingsphere-sharding-distsql-statement/src/main/java/org/apache/shardingsphere/sharding/distsql/parser/statement/CreateDefaultShardingStrategyStatement.java
+++ b/shardingsphere-features/shardingsphere-sharding/shardingsphere-sharding-distsql/shardingsphere-sharding-distsql-statement/src/main/java/org/apache/shardingsphere/sharding/distsql/parser/statement/CreateDefaultShardingStrategyStatement.java
@@ -21,13 +21,14 @@ import lombok.Getter;
 import lombok.RequiredArgsConstructor;
 import org.apache.shardingsphere.distsql.parser.segment.AlgorithmSegment;
 import org.apache.shardingsphere.distsql.parser.statement.rdl.create.CreateRuleStatement;
+import org.apache.shardingsphere.distsql.parser.subject.impl.ShardingSubjectSupplier;
 
 /**
  * Create default sharding strategy statement.
  */
 @RequiredArgsConstructor
 @Getter
-public final class CreateDefaultShardingStrategyStatement extends CreateRuleStatement {
+public final class CreateDefaultShardingStrategyStatement extends CreateRuleStatement implements ShardingSubjectSupplier {
     
     private final String defaultType;
     
diff --git a/shardingsphere-features/shardingsphere-sharding/shardingsphere-sharding-distsql/shardingsphere-sharding-distsql-statement/src/main/java/org/apache/shardingsphere/sharding/distsql/parser/statement/CreateShardingAlgorithmStatement.java b/shardingsphere-features/shardingsphere-sharding/shardingsphere-sharding-distsql/shardingsphere-sharding-distsql-statement/src/main/java/org/apache/shardingsphere/sharding/distsql/parser/statement/CreateShardingAlgorithmStatement.java
index e9be4b85dcd..058011a9f31 100644
--- a/shardingsphere-features/shardingsphere-sharding/shardingsphere-sharding-distsql/shardingsphere-sharding-distsql-statement/src/main/java/org/apache/shardingsphere/sharding/distsql/parser/statement/CreateShardingAlgorithmStatement.java
+++ b/shardingsphere-features/shardingsphere-sharding/shardingsphere-sharding-distsql/shardingsphere-sharding-distsql-statement/src/main/java/org/apache/shardingsphere/sharding/distsql/parser/statement/CreateShardingAlgorithmStatement.java
@@ -20,6 +20,7 @@ package org.apache.shardingsphere.sharding.distsql.parser.statement;
 import lombok.Getter;
 import lombok.RequiredArgsConstructor;
 import org.apache.shardingsphere.distsql.parser.statement.rdl.create.CreateRuleStatement;
+import org.apache.shardingsphere.distsql.parser.subject.impl.ShardingSubjectSupplier;
 import org.apache.shardingsphere.sharding.distsql.parser.segment.ShardingAlgorithmSegment;
 
 import java.util.Collection;
@@ -29,7 +30,7 @@ import java.util.Collection;
  */
 @RequiredArgsConstructor
 @Getter
-public final class CreateShardingAlgorithmStatement extends CreateRuleStatement {
+public final class CreateShardingAlgorithmStatement extends CreateRuleStatement implements ShardingSubjectSupplier {
     
     private final Collection<ShardingAlgorithmSegment> algorithmSegments;
 }
diff --git a/shardingsphere-features/shardingsphere-sharding/shardingsphere-sharding-distsql/shardingsphere-sharding-distsql-statement/src/main/java/org/apache/shardingsphere/sharding/distsql/parser/statement/CreateShardingBindingTableRulesStatement.java b/shardingsphere-features/shardingsphere-sharding/shardingsphere-sharding-distsql/shardingsphere-sharding-distsql-statement/src/main/java/org/apache/shardingsphere/sharding/distsql/parser/statement/CreateShardingBindingTableRulesStatement.java
index 3eca763f640..a14c944ff4c 100644
--- a/shardingsphere-features/shardingsphere-sharding/shardingsphere-sharding-distsql/shardingsphere-sharding-distsql-statement/src/main/java/org/apache/shardingsphere/sharding/distsql/parser/statement/CreateShardingBindingTableRulesStatement.java
+++ b/shardingsphere-features/shardingsphere-sharding/shardingsphere-sharding-distsql/shardingsphere-sharding-distsql-statement/src/main/java/org/apache/shardingsphere/sharding/distsql/parser/statement/CreateShardingBindingTableRulesStatement.java
@@ -20,6 +20,7 @@ package org.apache.shardingsphere.sharding.distsql.parser.statement;
 import lombok.Getter;
 import lombok.RequiredArgsConstructor;
 import org.apache.shardingsphere.distsql.parser.statement.rdl.create.CreateRuleStatement;
+import org.apache.shardingsphere.distsql.parser.subject.impl.ShardingSubjectSupplier;
 import org.apache.shardingsphere.sharding.distsql.parser.segment.BindingTableRuleSegment;
 
 import java.util.Collection;
@@ -30,7 +31,7 @@ import java.util.LinkedList;
  */
 @RequiredArgsConstructor
 @Getter
-public final class CreateShardingBindingTableRulesStatement extends CreateRuleStatement {
+public final class CreateShardingBindingTableRulesStatement extends CreateRuleStatement implements ShardingSubjectSupplier {
     
     private final Collection<BindingTableRuleSegment> rules;
     
@@ -46,4 +47,9 @@ public final class CreateShardingBindingTableRulesStatement extends CreateRuleSt
         }
         return result;
     }
+    
+    @Override
+    public Collection<String> getSubjectNames() {
+        return getBindingTables();
+    }
 }
diff --git a/shardingsphere-features/shardingsphere-sharding/shardingsphere-sharding-distsql/shardingsphere-sharding-distsql-statement/src/main/java/org/apache/shardingsphere/sharding/distsql/parser/statement/CreateShardingBroadcastTableRulesStatement.java b/shardingsphere-features/shardingsphere-sharding/shardingsphere-sharding-distsql/shardingsphere-sharding-distsql-statement/src/main/java/org/apache/shardingsphere/sharding/distsql/parser/statement/CreateShardingBroadcastTableRulesState [...]
index 68120803ace..954daf560ca 100644
--- a/shardingsphere-features/shardingsphere-sharding/shardingsphere-sharding-distsql/shardingsphere-sharding-distsql-statement/src/main/java/org/apache/shardingsphere/sharding/distsql/parser/statement/CreateShardingBroadcastTableRulesStatement.java
+++ b/shardingsphere-features/shardingsphere-sharding/shardingsphere-sharding-distsql/shardingsphere-sharding-distsql-statement/src/main/java/org/apache/shardingsphere/sharding/distsql/parser/statement/CreateShardingBroadcastTableRulesStatement.java
@@ -20,6 +20,7 @@ package org.apache.shardingsphere.sharding.distsql.parser.statement;
 import lombok.Getter;
 import lombok.RequiredArgsConstructor;
 import org.apache.shardingsphere.distsql.parser.statement.rdl.create.CreateRuleStatement;
+import org.apache.shardingsphere.distsql.parser.subject.impl.ShardingSubjectSupplier;
 
 import java.util.Collection;
 
@@ -28,7 +29,7 @@ import java.util.Collection;
  */
 @RequiredArgsConstructor
 @Getter
-public final class CreateShardingBroadcastTableRulesStatement extends CreateRuleStatement {
+public final class CreateShardingBroadcastTableRulesStatement extends CreateRuleStatement implements ShardingSubjectSupplier {
     
     private final Collection<String> tables;
 }
diff --git a/shardingsphere-features/shardingsphere-sharding/shardingsphere-sharding-distsql/shardingsphere-sharding-distsql-statement/src/main/java/org/apache/shardingsphere/sharding/distsql/parser/statement/CreateShardingKeyGeneratorStatement.java b/shardingsphere-features/shardingsphere-sharding/shardingsphere-sharding-distsql/shardingsphere-sharding-distsql-statement/src/main/java/org/apache/shardingsphere/sharding/distsql/parser/statement/CreateShardingKeyGeneratorStatement.java
index 2bc1cbd7f58..2406df76405 100644
--- a/shardingsphere-features/shardingsphere-sharding/shardingsphere-sharding-distsql/shardingsphere-sharding-distsql-statement/src/main/java/org/apache/shardingsphere/sharding/distsql/parser/statement/CreateShardingKeyGeneratorStatement.java
+++ b/shardingsphere-features/shardingsphere-sharding/shardingsphere-sharding-distsql/shardingsphere-sharding-distsql-statement/src/main/java/org/apache/shardingsphere/sharding/distsql/parser/statement/CreateShardingKeyGeneratorStatement.java
@@ -20,6 +20,7 @@ package org.apache.shardingsphere.sharding.distsql.parser.statement;
 import lombok.Getter;
 import lombok.RequiredArgsConstructor;
 import org.apache.shardingsphere.distsql.parser.statement.rdl.create.CreateRuleStatement;
+import org.apache.shardingsphere.distsql.parser.subject.impl.ShardingSubjectSupplier;
 import org.apache.shardingsphere.sharding.distsql.parser.segment.ShardingKeyGeneratorSegment;
 
 import java.util.Collection;
@@ -29,7 +30,7 @@ import java.util.Collection;
  */
 @RequiredArgsConstructor
 @Getter
-public final class CreateShardingKeyGeneratorStatement extends CreateRuleStatement {
+public final class CreateShardingKeyGeneratorStatement extends CreateRuleStatement implements ShardingSubjectSupplier {
     
     private final Collection<ShardingKeyGeneratorSegment> keyGeneratorSegments;
 }
diff --git a/shardingsphere-features/shardingsphere-sharding/shardingsphere-sharding-distsql/shardingsphere-sharding-distsql-statement/src/main/java/org/apache/shardingsphere/sharding/distsql/parser/statement/CreateShardingTableRuleStatement.java b/shardingsphere-features/shardingsphere-sharding/shardingsphere-sharding-distsql/shardingsphere-sharding-distsql-statement/src/main/java/org/apache/shardingsphere/sharding/distsql/parser/statement/CreateShardingTableRuleStatement.java
index 12a96528f45..78353558007 100644
--- a/shardingsphere-features/shardingsphere-sharding/shardingsphere-sharding-distsql/shardingsphere-sharding-distsql-statement/src/main/java/org/apache/shardingsphere/sharding/distsql/parser/statement/CreateShardingTableRuleStatement.java
+++ b/shardingsphere-features/shardingsphere-sharding/shardingsphere-sharding-distsql/shardingsphere-sharding-distsql-statement/src/main/java/org/apache/shardingsphere/sharding/distsql/parser/statement/CreateShardingTableRuleStatement.java
@@ -20,16 +20,23 @@ package org.apache.shardingsphere.sharding.distsql.parser.statement;
 import lombok.Getter;
 import lombok.RequiredArgsConstructor;
 import org.apache.shardingsphere.distsql.parser.statement.rdl.create.CreateRuleStatement;
+import org.apache.shardingsphere.distsql.parser.subject.impl.ShardingSubjectSupplier;
 import org.apache.shardingsphere.sharding.distsql.parser.segment.AbstractTableRuleSegment;
 
 import java.util.Collection;
+import java.util.stream.Collectors;
 
 /**
  * Create sharding table rule statement.
  */
 @RequiredArgsConstructor
 @Getter
-public final class CreateShardingTableRuleStatement extends CreateRuleStatement {
+public final class CreateShardingTableRuleStatement extends CreateRuleStatement implements ShardingSubjectSupplier {
     
     private final Collection<AbstractTableRuleSegment> rules;
+    
+    @Override
+    public Collection<String> getSubjectNames() {
+        return rules.stream().map(AbstractTableRuleSegment::getLogicTable).collect(Collectors.toSet());
+    }
 }
diff --git a/shardingsphere-features/shardingsphere-sharding/shardingsphere-sharding-distsql/shardingsphere-sharding-distsql-statement/src/main/java/org/apache/shardingsphere/sharding/distsql/parser/statement/DropDefaultShardingStrategyStatement.java b/shardingsphere-features/shardingsphere-sharding/shardingsphere-sharding-distsql/shardingsphere-sharding-distsql-statement/src/main/java/org/apache/shardingsphere/sharding/distsql/parser/statement/DropDefaultShardingStrategyStatement.java
index 1de82c146f4..6da71fde85f 100644
--- a/shardingsphere-features/shardingsphere-sharding/shardingsphere-sharding-distsql/shardingsphere-sharding-distsql-statement/src/main/java/org/apache/shardingsphere/sharding/distsql/parser/statement/DropDefaultShardingStrategyStatement.java
+++ b/shardingsphere-features/shardingsphere-sharding/shardingsphere-sharding-distsql/shardingsphere-sharding-distsql-statement/src/main/java/org/apache/shardingsphere/sharding/distsql/parser/statement/DropDefaultShardingStrategyStatement.java
@@ -20,13 +20,14 @@ package org.apache.shardingsphere.sharding.distsql.parser.statement;
 import lombok.Getter;
 import lombok.RequiredArgsConstructor;
 import org.apache.shardingsphere.distsql.parser.statement.rdl.drop.DropRuleStatement;
+import org.apache.shardingsphere.distsql.parser.subject.impl.ShardingSubjectSupplier;
 
 /**
  * Drop default sharding strategy statement.
  */
 @RequiredArgsConstructor
 @Getter
-public final class DropDefaultShardingStrategyStatement extends DropRuleStatement {
+public final class DropDefaultShardingStrategyStatement extends DropRuleStatement implements ShardingSubjectSupplier {
     
     private final String defaultType;
     
diff --git a/shardingsphere-features/shardingsphere-sharding/shardingsphere-sharding-distsql/shardingsphere-sharding-distsql-statement/src/main/java/org/apache/shardingsphere/sharding/distsql/parser/statement/DropShardingAlgorithmStatement.java b/shardingsphere-features/shardingsphere-sharding/shardingsphere-sharding-distsql/shardingsphere-sharding-distsql-statement/src/main/java/org/apache/shardingsphere/sharding/distsql/parser/statement/DropShardingAlgorithmStatement.java
index db4d4ec2b1d..2d05a46eab6 100644
--- a/shardingsphere-features/shardingsphere-sharding/shardingsphere-sharding-distsql/shardingsphere-sharding-distsql-statement/src/main/java/org/apache/shardingsphere/sharding/distsql/parser/statement/DropShardingAlgorithmStatement.java
+++ b/shardingsphere-features/shardingsphere-sharding/shardingsphere-sharding-distsql/shardingsphere-sharding-distsql-statement/src/main/java/org/apache/shardingsphere/sharding/distsql/parser/statement/DropShardingAlgorithmStatement.java
@@ -20,6 +20,7 @@ package org.apache.shardingsphere.sharding.distsql.parser.statement;
 import lombok.Getter;
 import lombok.RequiredArgsConstructor;
 import org.apache.shardingsphere.distsql.parser.statement.rdl.drop.DropRuleStatement;
+import org.apache.shardingsphere.distsql.parser.subject.impl.ShardingSubjectSupplier;
 
 import java.util.Collection;
 
@@ -28,7 +29,7 @@ import java.util.Collection;
  */
 @RequiredArgsConstructor
 @Getter
-public final class DropShardingAlgorithmStatement extends DropRuleStatement {
+public final class DropShardingAlgorithmStatement extends DropRuleStatement implements ShardingSubjectSupplier {
     
     private final Collection<String> algorithmNames;
 }
diff --git a/shardingsphere-features/shardingsphere-sharding/shardingsphere-sharding-distsql/shardingsphere-sharding-distsql-statement/src/main/java/org/apache/shardingsphere/sharding/distsql/parser/statement/DropShardingBindingTableRulesStatement.java b/shardingsphere-features/shardingsphere-sharding/shardingsphere-sharding-distsql/shardingsphere-sharding-distsql-statement/src/main/java/org/apache/shardingsphere/sharding/distsql/parser/statement/DropShardingBindingTableRulesStatement.java
index 4d6a9a2cdb4..3a77fa5288f 100644
--- a/shardingsphere-features/shardingsphere-sharding/shardingsphere-sharding-distsql/shardingsphere-sharding-distsql-statement/src/main/java/org/apache/shardingsphere/sharding/distsql/parser/statement/DropShardingBindingTableRulesStatement.java
+++ b/shardingsphere-features/shardingsphere-sharding/shardingsphere-sharding-distsql/shardingsphere-sharding-distsql-statement/src/main/java/org/apache/shardingsphere/sharding/distsql/parser/statement/DropShardingBindingTableRulesStatement.java
@@ -20,6 +20,7 @@ package org.apache.shardingsphere.sharding.distsql.parser.statement;
 import lombok.Getter;
 import lombok.RequiredArgsConstructor;
 import org.apache.shardingsphere.distsql.parser.statement.rdl.drop.DropRuleStatement;
+import org.apache.shardingsphere.distsql.parser.subject.impl.ShardingSubjectSupplier;
 import org.apache.shardingsphere.sharding.distsql.parser.segment.BindingTableRuleSegment;
 
 import java.util.Collection;
@@ -30,7 +31,7 @@ import java.util.LinkedList;
  */
 @RequiredArgsConstructor
 @Getter
-public final class DropShardingBindingTableRulesStatement extends DropRuleStatement {
+public final class DropShardingBindingTableRulesStatement extends DropRuleStatement implements ShardingSubjectSupplier {
     
     private final Collection<BindingTableRuleSegment> rules;
     
diff --git a/shardingsphere-features/shardingsphere-sharding/shardingsphere-sharding-distsql/shardingsphere-sharding-distsql-statement/src/main/java/org/apache/shardingsphere/sharding/distsql/parser/statement/DropShardingBroadcastTableRulesStatement.java b/shardingsphere-features/shardingsphere-sharding/shardingsphere-sharding-distsql/shardingsphere-sharding-distsql-statement/src/main/java/org/apache/shardingsphere/sharding/distsql/parser/statement/DropShardingBroadcastTableRulesStatement.java
index f5745724d36..49f20ac2b97 100644
--- a/shardingsphere-features/shardingsphere-sharding/shardingsphere-sharding-distsql/shardingsphere-sharding-distsql-statement/src/main/java/org/apache/shardingsphere/sharding/distsql/parser/statement/DropShardingBroadcastTableRulesStatement.java
+++ b/shardingsphere-features/shardingsphere-sharding/shardingsphere-sharding-distsql/shardingsphere-sharding-distsql-statement/src/main/java/org/apache/shardingsphere/sharding/distsql/parser/statement/DropShardingBroadcastTableRulesStatement.java
@@ -20,6 +20,7 @@ package org.apache.shardingsphere.sharding.distsql.parser.statement;
 import lombok.Getter;
 import lombok.RequiredArgsConstructor;
 import org.apache.shardingsphere.distsql.parser.statement.rdl.drop.DropRuleStatement;
+import org.apache.shardingsphere.distsql.parser.subject.impl.ShardingSubjectSupplier;
 
 import java.util.Collection;
 
@@ -28,7 +29,7 @@ import java.util.Collection;
  */
 @Getter
 @RequiredArgsConstructor
-public final class DropShardingBroadcastTableRulesStatement extends DropRuleStatement {
+public final class DropShardingBroadcastTableRulesStatement extends DropRuleStatement implements ShardingSubjectSupplier {
     
     private final Collection<String> rules;
     
@@ -36,4 +37,9 @@ public final class DropShardingBroadcastTableRulesStatement extends DropRuleStat
         setContainsExistClause(containsExistClause);
         this.rules = rules;
     }
+    
+    @Override
+    public Collection<String> getSubjectNames() {
+        return rules;
+    }
 }
diff --git a/shardingsphere-features/shardingsphere-sharding/shardingsphere-sharding-distsql/shardingsphere-sharding-distsql-statement/src/main/java/org/apache/shardingsphere/sharding/distsql/parser/statement/DropShardingKeyGeneratorStatement.java b/shardingsphere-features/shardingsphere-sharding/shardingsphere-sharding-distsql/shardingsphere-sharding-distsql-statement/src/main/java/org/apache/shardingsphere/sharding/distsql/parser/statement/DropShardingKeyGeneratorStatement.java
index 5c1b4d7368d..53d9524f8b3 100644
--- a/shardingsphere-features/shardingsphere-sharding/shardingsphere-sharding-distsql/shardingsphere-sharding-distsql-statement/src/main/java/org/apache/shardingsphere/sharding/distsql/parser/statement/DropShardingKeyGeneratorStatement.java
+++ b/shardingsphere-features/shardingsphere-sharding/shardingsphere-sharding-distsql/shardingsphere-sharding-distsql-statement/src/main/java/org/apache/shardingsphere/sharding/distsql/parser/statement/DropShardingKeyGeneratorStatement.java
@@ -20,6 +20,7 @@ package org.apache.shardingsphere.sharding.distsql.parser.statement;
 import lombok.Getter;
 import lombok.RequiredArgsConstructor;
 import org.apache.shardingsphere.distsql.parser.statement.rdl.drop.DropRuleStatement;
+import org.apache.shardingsphere.distsql.parser.subject.impl.ShardingSubjectSupplier;
 
 import java.util.Collection;
 
@@ -28,7 +29,7 @@ import java.util.Collection;
  */
 @RequiredArgsConstructor
 @Getter
-public final class DropShardingKeyGeneratorStatement extends DropRuleStatement {
+public final class DropShardingKeyGeneratorStatement extends DropRuleStatement implements ShardingSubjectSupplier {
 
     private final Collection<String> keyGeneratorNames;
 }
diff --git a/shardingsphere-features/shardingsphere-sharding/shardingsphere-sharding-distsql/shardingsphere-sharding-distsql-statement/src/main/java/org/apache/shardingsphere/sharding/distsql/parser/statement/DropShardingTableRuleStatement.java b/shardingsphere-features/shardingsphere-sharding/shardingsphere-sharding-distsql/shardingsphere-sharding-distsql-statement/src/main/java/org/apache/shardingsphere/sharding/distsql/parser/statement/DropShardingTableRuleStatement.java
index 949e17b4e21..29926ab979f 100644
--- a/shardingsphere-features/shardingsphere-sharding/shardingsphere-sharding-distsql/shardingsphere-sharding-distsql-statement/src/main/java/org/apache/shardingsphere/sharding/distsql/parser/statement/DropShardingTableRuleStatement.java
+++ b/shardingsphere-features/shardingsphere-sharding/shardingsphere-sharding-distsql/shardingsphere-sharding-distsql-statement/src/main/java/org/apache/shardingsphere/sharding/distsql/parser/statement/DropShardingTableRuleStatement.java
@@ -20,6 +20,7 @@ package org.apache.shardingsphere.sharding.distsql.parser.statement;
 import lombok.Getter;
 import lombok.RequiredArgsConstructor;
 import org.apache.shardingsphere.distsql.parser.statement.rdl.drop.DropRuleStatement;
+import org.apache.shardingsphere.distsql.parser.subject.impl.ShardingSubjectSupplier;
 import org.apache.shardingsphere.sql.parser.sql.common.segment.generic.table.TableNameSegment;
 
 import java.util.Collection;
@@ -29,7 +30,7 @@ import java.util.Collection;
  */
 @RequiredArgsConstructor
 @Getter
-public final class DropShardingTableRuleStatement extends DropRuleStatement {
+public final class DropShardingTableRuleStatement extends DropRuleStatement implements ShardingSubjectSupplier {
     
     private final Collection<TableNameSegment> tableNames;
     
diff --git a/shardingsphere-features/shardingsphere-sharding/shardingsphere-sharding-distsql/shardingsphere-sharding-distsql-statement/src/main/java/org/apache/shardingsphere/sharding/distsql/parser/statement/ShowDefaultShardingStrategyStatement.java b/shardingsphere-features/shardingsphere-sharding/shardingsphere-sharding-distsql/shardingsphere-sharding-distsql-statement/src/main/java/org/apache/shardingsphere/sharding/distsql/parser/statement/ShowDefaultShardingStrategyStatement.java
index 54ec03d3a1b..589800e1252 100644
--- a/shardingsphere-features/shardingsphere-sharding/shardingsphere-sharding-distsql/shardingsphere-sharding-distsql-statement/src/main/java/org/apache/shardingsphere/sharding/distsql/parser/statement/ShowDefaultShardingStrategyStatement.java
+++ b/shardingsphere-features/shardingsphere-sharding/shardingsphere-sharding-distsql/shardingsphere-sharding-distsql-statement/src/main/java/org/apache/shardingsphere/sharding/distsql/parser/statement/ShowDefaultShardingStrategyStatement.java
@@ -18,12 +18,13 @@
 package org.apache.shardingsphere.sharding.distsql.parser.statement;
 
 import org.apache.shardingsphere.distsql.parser.statement.rql.show.ShowRulesStatement;
+import org.apache.shardingsphere.distsql.parser.subject.impl.ShardingSubjectSupplier;
 import org.apache.shardingsphere.sql.parser.sql.common.segment.generic.SchemaSegment;
 
 /**
  * Show default sharding strategy statement.
  */
-public final class ShowDefaultShardingStrategyStatement extends ShowRulesStatement {
+public final class ShowDefaultShardingStrategyStatement extends ShowRulesStatement implements ShardingSubjectSupplier {
     
     public ShowDefaultShardingStrategyStatement(final SchemaSegment schema) {
         super(schema);
diff --git a/shardingsphere-features/shardingsphere-sharding/shardingsphere-sharding-distsql/shardingsphere-sharding-distsql-statement/src/main/java/org/apache/shardingsphere/sharding/distsql/parser/statement/ShowShardingAlgorithmsStatement.java b/shardingsphere-features/shardingsphere-sharding/shardingsphere-sharding-distsql/shardingsphere-sharding-distsql-statement/src/main/java/org/apache/shardingsphere/sharding/distsql/parser/statement/ShowShardingAlgorithmsStatement.java
index 3258d4d32c5..0cf80e5c067 100644
--- a/shardingsphere-features/shardingsphere-sharding/shardingsphere-sharding-distsql/shardingsphere-sharding-distsql-statement/src/main/java/org/apache/shardingsphere/sharding/distsql/parser/statement/ShowShardingAlgorithmsStatement.java
+++ b/shardingsphere-features/shardingsphere-sharding/shardingsphere-sharding-distsql/shardingsphere-sharding-distsql-statement/src/main/java/org/apache/shardingsphere/sharding/distsql/parser/statement/ShowShardingAlgorithmsStatement.java
@@ -18,12 +18,13 @@
 package org.apache.shardingsphere.sharding.distsql.parser.statement;
 
 import org.apache.shardingsphere.distsql.parser.statement.rql.show.ShowRulesStatement;
+import org.apache.shardingsphere.distsql.parser.subject.impl.ShardingSubjectSupplier;
 import org.apache.shardingsphere.sql.parser.sql.common.segment.generic.SchemaSegment;
 
 /**
  * Show sharding algorithms statement.
  */
-public final class ShowShardingAlgorithmsStatement extends ShowRulesStatement {
+public final class ShowShardingAlgorithmsStatement extends ShowRulesStatement implements ShardingSubjectSupplier {
     
     public ShowShardingAlgorithmsStatement(final SchemaSegment schema) {
         super(schema);
diff --git a/shardingsphere-features/shardingsphere-sharding/shardingsphere-sharding-distsql/shardingsphere-sharding-distsql-statement/src/main/java/org/apache/shardingsphere/sharding/distsql/parser/statement/ShowShardingBindingTableRulesStatement.java b/shardingsphere-features/shardingsphere-sharding/shardingsphere-sharding-distsql/shardingsphere-sharding-distsql-statement/src/main/java/org/apache/shardingsphere/sharding/distsql/parser/statement/ShowShardingBindingTableRulesStatement.java
index 48b604b4b6a..2b181341939 100644
--- a/shardingsphere-features/shardingsphere-sharding/shardingsphere-sharding-distsql/shardingsphere-sharding-distsql-statement/src/main/java/org/apache/shardingsphere/sharding/distsql/parser/statement/ShowShardingBindingTableRulesStatement.java
+++ b/shardingsphere-features/shardingsphere-sharding/shardingsphere-sharding-distsql/shardingsphere-sharding-distsql-statement/src/main/java/org/apache/shardingsphere/sharding/distsql/parser/statement/ShowShardingBindingTableRulesStatement.java
@@ -18,12 +18,13 @@
 package org.apache.shardingsphere.sharding.distsql.parser.statement;
 
 import org.apache.shardingsphere.distsql.parser.statement.rql.show.ShowRulesStatement;
+import org.apache.shardingsphere.distsql.parser.subject.impl.ShardingSubjectSupplier;
 import org.apache.shardingsphere.sql.parser.sql.common.segment.generic.SchemaSegment;
 
 /**
  * Show sharding binding table rules statement.
  */
-public final class ShowShardingBindingTableRulesStatement extends ShowRulesStatement {
+public final class ShowShardingBindingTableRulesStatement extends ShowRulesStatement implements ShardingSubjectSupplier {
     
     public ShowShardingBindingTableRulesStatement(final SchemaSegment schema) {
         super(schema);
diff --git a/shardingsphere-features/shardingsphere-sharding/shardingsphere-sharding-distsql/shardingsphere-sharding-distsql-statement/src/main/java/org/apache/shardingsphere/sharding/distsql/parser/statement/ShowShardingBroadcastTableRulesStatement.java b/shardingsphere-features/shardingsphere-sharding/shardingsphere-sharding-distsql/shardingsphere-sharding-distsql-statement/src/main/java/org/apache/shardingsphere/sharding/distsql/parser/statement/ShowShardingBroadcastTableRulesStatement.java
index 72b5c319f3c..e01a18528f1 100644
--- a/shardingsphere-features/shardingsphere-sharding/shardingsphere-sharding-distsql/shardingsphere-sharding-distsql-statement/src/main/java/org/apache/shardingsphere/sharding/distsql/parser/statement/ShowShardingBroadcastTableRulesStatement.java
+++ b/shardingsphere-features/shardingsphere-sharding/shardingsphere-sharding-distsql/shardingsphere-sharding-distsql-statement/src/main/java/org/apache/shardingsphere/sharding/distsql/parser/statement/ShowShardingBroadcastTableRulesStatement.java
@@ -18,12 +18,13 @@
 package org.apache.shardingsphere.sharding.distsql.parser.statement;
 
 import org.apache.shardingsphere.distsql.parser.statement.rql.show.ShowRulesStatement;
+import org.apache.shardingsphere.distsql.parser.subject.impl.ShardingSubjectSupplier;
 import org.apache.shardingsphere.sql.parser.sql.common.segment.generic.SchemaSegment;
 
 /**
  * Show sharding broadcast table rules statement.
  */
-public final class ShowShardingBroadcastTableRulesStatement extends ShowRulesStatement {
+public final class ShowShardingBroadcastTableRulesStatement extends ShowRulesStatement implements ShardingSubjectSupplier {
     
     public ShowShardingBroadcastTableRulesStatement(final SchemaSegment schema) {
         super(schema);
diff --git a/shardingsphere-features/shardingsphere-sharding/shardingsphere-sharding-distsql/shardingsphere-sharding-distsql-statement/src/main/java/org/apache/shardingsphere/sharding/distsql/parser/statement/ShowShardingKeyGeneratorsStatement.java b/shardingsphere-features/shardingsphere-sharding/shardingsphere-sharding-distsql/shardingsphere-sharding-distsql-statement/src/main/java/org/apache/shardingsphere/sharding/distsql/parser/statement/ShowShardingKeyGeneratorsStatement.java
index a91e0cb8e61..2a6c247599a 100644
--- a/shardingsphere-features/shardingsphere-sharding/shardingsphere-sharding-distsql/shardingsphere-sharding-distsql-statement/src/main/java/org/apache/shardingsphere/sharding/distsql/parser/statement/ShowShardingKeyGeneratorsStatement.java
+++ b/shardingsphere-features/shardingsphere-sharding/shardingsphere-sharding-distsql/shardingsphere-sharding-distsql-statement/src/main/java/org/apache/shardingsphere/sharding/distsql/parser/statement/ShowShardingKeyGeneratorsStatement.java
@@ -18,12 +18,13 @@
 package org.apache.shardingsphere.sharding.distsql.parser.statement;
 
 import org.apache.shardingsphere.distsql.parser.statement.rql.show.ShowRulesStatement;
+import org.apache.shardingsphere.distsql.parser.subject.impl.ShardingSubjectSupplier;
 import org.apache.shardingsphere.sql.parser.sql.common.segment.generic.SchemaSegment;
 
 /**
  * Show sharding key generators statement.
  */
-public final class ShowShardingKeyGeneratorsStatement extends ShowRulesStatement {
+public final class ShowShardingKeyGeneratorsStatement extends ShowRulesStatement implements ShardingSubjectSupplier {
     
     public ShowShardingKeyGeneratorsStatement(final SchemaSegment schema) {
         super(schema);
diff --git a/shardingsphere-features/shardingsphere-sharding/shardingsphere-sharding-distsql/shardingsphere-sharding-distsql-statement/src/main/java/org/apache/shardingsphere/sharding/distsql/parser/statement/ShowShardingTableNodesStatement.java b/shardingsphere-features/shardingsphere-sharding/shardingsphere-sharding-distsql/shardingsphere-sharding-distsql-statement/src/main/java/org/apache/shardingsphere/sharding/distsql/parser/statement/ShowShardingTableNodesStatement.java
index c46e18260b4..92dd0d04320 100644
--- a/shardingsphere-features/shardingsphere-sharding/shardingsphere-sharding-distsql/shardingsphere-sharding-distsql-statement/src/main/java/org/apache/shardingsphere/sharding/distsql/parser/statement/ShowShardingTableNodesStatement.java
+++ b/shardingsphere-features/shardingsphere-sharding/shardingsphere-sharding-distsql/shardingsphere-sharding-distsql-statement/src/main/java/org/apache/shardingsphere/sharding/distsql/parser/statement/ShowShardingTableNodesStatement.java
@@ -19,13 +19,17 @@ package org.apache.shardingsphere.sharding.distsql.parser.statement;
 
 import lombok.Getter;
 import org.apache.shardingsphere.distsql.parser.statement.rql.show.ShowRulesStatement;
+import org.apache.shardingsphere.distsql.parser.subject.impl.ShardingSubjectSupplier;
 import org.apache.shardingsphere.sql.parser.sql.common.segment.generic.SchemaSegment;
 
+import java.util.Collection;
+import java.util.Collections;
+
 /**
  * Show sharding table nodes statement.
  */
 @Getter
-public final class ShowShardingTableNodesStatement extends ShowRulesStatement {
+public final class ShowShardingTableNodesStatement extends ShowRulesStatement implements ShardingSubjectSupplier {
     
     private final String tableName;
     
@@ -33,4 +37,9 @@ public final class ShowShardingTableNodesStatement extends ShowRulesStatement {
         super(schema);
         this.tableName = tableName;
     }
+    
+    @Override
+    public Collection<String> getSubjectNames() {
+        return null != tableName ? Collections.singletonList(tableName) : Collections.emptyList();
+    }
 }
diff --git a/shardingsphere-features/shardingsphere-sharding/shardingsphere-sharding-distsql/shardingsphere-sharding-distsql-statement/src/main/java/org/apache/shardingsphere/sharding/distsql/parser/statement/ShowShardingTableRulesStatement.java b/shardingsphere-features/shardingsphere-sharding/shardingsphere-sharding-distsql/shardingsphere-sharding-distsql-statement/src/main/java/org/apache/shardingsphere/sharding/distsql/parser/statement/ShowShardingTableRulesStatement.java
index 7df2eb0a1f1..3b57bad6c60 100644
--- a/shardingsphere-features/shardingsphere-sharding/shardingsphere-sharding-distsql/shardingsphere-sharding-distsql-statement/src/main/java/org/apache/shardingsphere/sharding/distsql/parser/statement/ShowShardingTableRulesStatement.java
+++ b/shardingsphere-features/shardingsphere-sharding/shardingsphere-sharding-distsql/shardingsphere-sharding-distsql-statement/src/main/java/org/apache/shardingsphere/sharding/distsql/parser/statement/ShowShardingTableRulesStatement.java
@@ -19,13 +19,17 @@ package org.apache.shardingsphere.sharding.distsql.parser.statement;
 
 import lombok.Getter;
 import org.apache.shardingsphere.distsql.parser.statement.rql.show.ShowRulesStatement;
+import org.apache.shardingsphere.distsql.parser.subject.impl.ShardingSubjectSupplier;
 import org.apache.shardingsphere.sql.parser.sql.common.segment.generic.SchemaSegment;
 
+import java.util.Collection;
+import java.util.Collections;
+
 /**
  * Show sharding table rules statement.
  */
 @Getter
-public final class ShowShardingTableRulesStatement extends ShowRulesStatement {
+public final class ShowShardingTableRulesStatement extends ShowRulesStatement implements ShardingSubjectSupplier {
     
     private final String tableName;
     
@@ -33,4 +37,9 @@ public final class ShowShardingTableRulesStatement extends ShowRulesStatement {
         super(schema);
         this.tableName = tableName;
     }
+    
+    @Override
+    public Collection<String> getSubjectNames() {
+        return null != tableName ? Collections.singletonList(tableName) : Collections.emptyList();
+    }
 }
diff --git a/shardingsphere-features/shardingsphere-sharding/shardingsphere-sharding-distsql/shardingsphere-sharding-distsql-statement/src/main/java/org/apache/shardingsphere/sharding/distsql/parser/statement/ShowShardingTableRulesUsedAlgorithmStatement.java b/shardingsphere-features/shardingsphere-sharding/shardingsphere-sharding-distsql/shardingsphere-sharding-distsql-statement/src/main/java/org/apache/shardingsphere/sharding/distsql/parser/statement/ShowShardingTableRulesUsedAlgorithmS [...]
index 16459123091..265e1162ae4 100644
--- a/shardingsphere-features/shardingsphere-sharding/shardingsphere-sharding-distsql/shardingsphere-sharding-distsql-statement/src/main/java/org/apache/shardingsphere/sharding/distsql/parser/statement/ShowShardingTableRulesUsedAlgorithmStatement.java
+++ b/shardingsphere-features/shardingsphere-sharding/shardingsphere-sharding-distsql/shardingsphere-sharding-distsql-statement/src/main/java/org/apache/shardingsphere/sharding/distsql/parser/statement/ShowShardingTableRulesUsedAlgorithmStatement.java
@@ -18,6 +18,7 @@
 package org.apache.shardingsphere.sharding.distsql.parser.statement;
 
 import org.apache.shardingsphere.distsql.parser.statement.rql.show.ShowRulesStatement;
+import org.apache.shardingsphere.distsql.parser.subject.impl.ShardingSubjectSupplier;
 import org.apache.shardingsphere.sql.parser.sql.common.segment.generic.SchemaSegment;
 
 import java.util.Optional;
@@ -25,7 +26,7 @@ import java.util.Optional;
 /**
  * Show sharding table rules used algorithm statement.
  */
-public final class ShowShardingTableRulesUsedAlgorithmStatement extends ShowRulesStatement {
+public final class ShowShardingTableRulesUsedAlgorithmStatement extends ShowRulesStatement implements ShardingSubjectSupplier {
 
     private final String algorithmName;
 
diff --git a/shardingsphere-features/shardingsphere-sharding/shardingsphere-sharding-distsql/shardingsphere-sharding-distsql-statement/src/main/java/org/apache/shardingsphere/sharding/distsql/parser/statement/ShowShardingTableRulesUsedKeyGeneratorStatement.java b/shardingsphere-features/shardingsphere-sharding/shardingsphere-sharding-distsql/shardingsphere-sharding-distsql-statement/src/main/java/org/apache/shardingsphere/sharding/distsql/parser/statement/ShowShardingTableRulesUsedKeyGene [...]
index 1a5ea2b8c35..bb1ad9358be 100644
--- a/shardingsphere-features/shardingsphere-sharding/shardingsphere-sharding-distsql/shardingsphere-sharding-distsql-statement/src/main/java/org/apache/shardingsphere/sharding/distsql/parser/statement/ShowShardingTableRulesUsedKeyGeneratorStatement.java
+++ b/shardingsphere-features/shardingsphere-sharding/shardingsphere-sharding-distsql/shardingsphere-sharding-distsql-statement/src/main/java/org/apache/shardingsphere/sharding/distsql/parser/statement/ShowShardingTableRulesUsedKeyGeneratorStatement.java
@@ -18,6 +18,7 @@
 package org.apache.shardingsphere.sharding.distsql.parser.statement;
 
 import org.apache.shardingsphere.distsql.parser.statement.rql.show.ShowRulesStatement;
+import org.apache.shardingsphere.distsql.parser.subject.impl.ShardingSubjectSupplier;
 import org.apache.shardingsphere.sql.parser.sql.common.segment.generic.SchemaSegment;
 
 import java.util.Optional;
@@ -25,7 +26,7 @@ import java.util.Optional;
 /**
  * Show sharding table rules used key generator statement.
  */
-public final class ShowShardingTableRulesUsedKeyGeneratorStatement extends ShowRulesStatement {
+public final class ShowShardingTableRulesUsedKeyGeneratorStatement extends ShowRulesStatement implements ShardingSubjectSupplier {
     
     private final String keyGeneratorName;
     
diff --git a/shardingsphere-features/shardingsphere-sharding/shardingsphere-sharding-distsql/shardingsphere-sharding-distsql-statement/src/main/java/org/apache/shardingsphere/sharding/distsql/parser/statement/ShowUnusedShardingAlgorithmsStatement.java b/shardingsphere-features/shardingsphere-sharding/shardingsphere-sharding-distsql/shardingsphere-sharding-distsql-statement/src/main/java/org/apache/shardingsphere/sharding/distsql/parser/statement/ShowUnusedShardingAlgorithmsStatement.java
index 6a08f5f28fc..10a1e71a4e9 100644
--- a/shardingsphere-features/shardingsphere-sharding/shardingsphere-sharding-distsql/shardingsphere-sharding-distsql-statement/src/main/java/org/apache/shardingsphere/sharding/distsql/parser/statement/ShowUnusedShardingAlgorithmsStatement.java
+++ b/shardingsphere-features/shardingsphere-sharding/shardingsphere-sharding-distsql/shardingsphere-sharding-distsql-statement/src/main/java/org/apache/shardingsphere/sharding/distsql/parser/statement/ShowUnusedShardingAlgorithmsStatement.java
@@ -18,12 +18,13 @@
 package org.apache.shardingsphere.sharding.distsql.parser.statement;
 
 import org.apache.shardingsphere.distsql.parser.statement.rql.show.ShowRulesStatement;
+import org.apache.shardingsphere.distsql.parser.subject.impl.ShardingSubjectSupplier;
 import org.apache.shardingsphere.sql.parser.sql.common.segment.generic.SchemaSegment;
 
 /**
  * Show unused sharding algorithms statement.
  */
-public final class ShowUnusedShardingAlgorithmsStatement extends ShowRulesStatement {
+public final class ShowUnusedShardingAlgorithmsStatement extends ShowRulesStatement implements ShardingSubjectSupplier {
     
     public ShowUnusedShardingAlgorithmsStatement(final SchemaSegment schema) {
         super(schema);
diff --git a/shardingsphere-features/shardingsphere-sharding/shardingsphere-sharding-distsql/shardingsphere-sharding-distsql-statement/src/main/java/org/apache/shardingsphere/sharding/distsql/parser/statement/ShowUnusedShardingKeyGeneratorsStatement.java b/shardingsphere-features/shardingsphere-sharding/shardingsphere-sharding-distsql/shardingsphere-sharding-distsql-statement/src/main/java/org/apache/shardingsphere/sharding/distsql/parser/statement/ShowUnusedShardingKeyGeneratorsStatement.java
index bcfcaddb0bf..34971787eaa 100644
--- a/shardingsphere-features/shardingsphere-sharding/shardingsphere-sharding-distsql/shardingsphere-sharding-distsql-statement/src/main/java/org/apache/shardingsphere/sharding/distsql/parser/statement/ShowUnusedShardingKeyGeneratorsStatement.java
+++ b/shardingsphere-features/shardingsphere-sharding/shardingsphere-sharding-distsql/shardingsphere-sharding-distsql-statement/src/main/java/org/apache/shardingsphere/sharding/distsql/parser/statement/ShowUnusedShardingKeyGeneratorsStatement.java
@@ -18,12 +18,13 @@
 package org.apache.shardingsphere.sharding.distsql.parser.statement;
 
 import org.apache.shardingsphere.distsql.parser.statement.rql.show.ShowRulesStatement;
+import org.apache.shardingsphere.distsql.parser.subject.impl.ShardingSubjectSupplier;
 import org.apache.shardingsphere.sql.parser.sql.common.segment.generic.SchemaSegment;
 
 /**
  * Show unused sharding key generators statement.
  */
-public final class ShowUnusedShardingKeyGeneratorsStatement extends ShowRulesStatement {
+public final class ShowUnusedShardingKeyGeneratorsStatement extends ShowRulesStatement implements ShardingSubjectSupplier {
     
     public ShowUnusedShardingKeyGeneratorsStatement(final SchemaSegment schema) {
         super(schema);
diff --git a/shardingsphere-proxy/shardingsphere-proxy-backend/src/test/java/org/apache/shardingsphere/proxy/backend/text/distsql/fixture/CreateFixtureRuleStatement.java b/shardingsphere-proxy/shardingsphere-proxy-backend/src/test/java/org/apache/shardingsphere/proxy/backend/text/distsql/fixture/CreateFixtureRuleStatement.java
index 4553e8805c2..ea27d91d73f 100644
--- a/shardingsphere-proxy/shardingsphere-proxy-backend/src/test/java/org/apache/shardingsphere/proxy/backend/text/distsql/fixture/CreateFixtureRuleStatement.java
+++ b/shardingsphere-proxy/shardingsphere-proxy-backend/src/test/java/org/apache/shardingsphere/proxy/backend/text/distsql/fixture/CreateFixtureRuleStatement.java
@@ -17,7 +17,13 @@
 
 package org.apache.shardingsphere.proxy.backend.text.distsql.fixture;
 
+import org.apache.shardingsphere.distsql.parser.subject.DistSQLSubjectTypeEnum;
 import org.apache.shardingsphere.distsql.parser.statement.rdl.create.CreateRuleStatement;
 
 public final class CreateFixtureRuleStatement extends CreateRuleStatement {
+    
+    @Override
+    public DistSQLSubjectTypeEnum getSubjectType() {
+        return null;
+    }
 }