You are viewing a plain text version of this content. The canonical link for it is here.
Posted to notifications@shardingsphere.apache.org by zh...@apache.org on 2023/04/19 15:47:25 UTC

[shardingsphere] branch master updated: Optimize count rule executor. (#25243)

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

zhangliang 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 91da0bb47c2 Optimize count rule executor. (#25243)
91da0bb47c2 is described below

commit 91da0bb47c2e809acd79c62ee794a01557f72bfa
Author: Raigor <ra...@gmail.com>
AuthorDate: Wed Apr 19 23:47:17 2023 +0800

    Optimize count rule executor. (#25243)
---
 .../handler/query/CountEncryptRuleExecutor.java    | 32 ++--------------------
 .../query/CountEncryptRuleExecutorTest.java        |  7 ++---
 .../handler/query/CountMaskRuleExecutor.java       | 29 ++------------------
 .../handler/query/CountMaskRuleExecutorTest.java   |  7 ++---
 .../query/CountReadwriteSplittingRuleExecutor.java | 29 ++------------------
 .../CountReadwriteSplittingRuleExecutorTest.java   |  7 ++---
 .../handler/query/CountShadowRuleExecutor.java     | 32 ++--------------------
 .../distsql/query/CountShadowRuleExecutorTest.java |  7 ++---
 .../handler/query/CountShardingRuleExecutor.java   | 21 +++++---------
 .../query/CountShardingRuleExecutorTest.java       |  7 ++---
 .../distsql/rql/rule/CountSingleTableExecutor.java | 10 +++----
 .../rql/rule/CountSingleTableExecutorTest.java     |  7 ++---
 12 files changed, 36 insertions(+), 159 deletions(-)

diff --git a/features/encrypt/distsql/handler/src/main/java/org/apache/shardingsphere/encrypt/distsql/handler/query/CountEncryptRuleExecutor.java b/features/encrypt/distsql/handler/src/main/java/org/apache/shardingsphere/encrypt/distsql/handler/query/CountEncryptRuleExecutor.java
index 7b7a6bed71f..6d071a03385 100644
--- a/features/encrypt/distsql/handler/src/main/java/org/apache/shardingsphere/encrypt/distsql/handler/query/CountEncryptRuleExecutor.java
+++ b/features/encrypt/distsql/handler/src/main/java/org/apache/shardingsphere/encrypt/distsql/handler/query/CountEncryptRuleExecutor.java
@@ -25,21 +25,14 @@ import org.apache.shardingsphere.infra.metadata.database.ShardingSphereDatabase;
 
 import java.util.Arrays;
 import java.util.Collection;
-import java.util.Iterator;
-import java.util.LinkedHashMap;
 import java.util.LinkedList;
-import java.util.Map;
-import java.util.Map.Entry;
 import java.util.Optional;
-import java.util.function.Supplier;
 
 /**
  * Count encrypt rule executor.
  */
 public final class CountEncryptRuleExecutor implements RQLExecutor<CountEncryptRuleStatement> {
     
-    private static final String ENCRYPT = "encrypt";
-    
     @Override
     public Collection<String> getColumnNames() {
         return Arrays.asList("rule_name", "database", "count");
@@ -48,32 +41,13 @@ public final class CountEncryptRuleExecutor implements RQLExecutor<CountEncryptR
     @Override
     public Collection<LocalDataQueryResultRow> getRows(final ShardingSphereDatabase database, final CountEncryptRuleStatement sqlStatement) {
         Optional<EncryptRule> rule = database.getRuleMetaData().findSingleRule(EncryptRule.class);
-        Map<String, LinkedList<Object>> rowMap = new LinkedHashMap<>();
-        rule.ifPresent(optional -> addEncryptData(rowMap, database.getName(), rule.get()));
-        Iterator<Entry<String, LinkedList<Object>>> data = rowMap.entrySet().iterator();
         Collection<LocalDataQueryResultRow> result = new LinkedList<>();
-        while (data.hasNext()) {
-            Entry<String, LinkedList<Object>> entry = data.next();
-            entry.getValue().addFirst(entry.getKey());
-            result.add(new LocalDataQueryResultRow(entry.getValue()));
-        }
+        rule.ifPresent(optional -> fillRows(result, rule.get(), database.getName()));
         return result;
     }
     
-    private void addEncryptData(final Map<String, LinkedList<Object>> rowMap, final String databaseName, final EncryptRule rule) {
-        addData(rowMap, ENCRYPT, databaseName, () -> rule.getTables().size());
-    }
-    
-    private void addData(final Map<String, LinkedList<Object>> rowMap, final String dataKey, final String databaseName, final Supplier<Integer> apply) {
-        rowMap.compute(dataKey, (key, value) -> buildRow(value, databaseName, apply.get()));
-    }
-    
-    private LinkedList<Object> buildRow(final LinkedList<Object> value, final String databaseName, final int count) {
-        if (null == value) {
-            return new LinkedList<>(Arrays.asList(databaseName, count));
-        }
-        value.set(1, (Integer) value.get(1) + count);
-        return value;
+    private void fillRows(final Collection<LocalDataQueryResultRow> result, final EncryptRule rule, final String databaseName) {
+        result.add(new LocalDataQueryResultRow("encrypt", databaseName, rule.getTables().size()));
     }
     
     @Override
diff --git a/features/encrypt/distsql/handler/src/test/java/org/apache/shardingsphere/encrypt/distsql/handler/query/CountEncryptRuleExecutorTest.java b/features/encrypt/distsql/handler/src/test/java/org/apache/shardingsphere/encrypt/distsql/handler/query/CountEncryptRuleExecutorTest.java
index 24557bb015c..15bd10aeb92 100644
--- a/features/encrypt/distsql/handler/src/test/java/org/apache/shardingsphere/encrypt/distsql/handler/query/CountEncryptRuleExecutorTest.java
+++ b/features/encrypt/distsql/handler/src/test/java/org/apache/shardingsphere/encrypt/distsql/handler/query/CountEncryptRuleExecutorTest.java
@@ -17,7 +17,6 @@
 
 package org.apache.shardingsphere.encrypt.distsql.handler.query;
 
-import org.apache.shardingsphere.distsql.handler.query.RQLExecutor;
 import org.apache.shardingsphere.encrypt.distsql.parser.statement.CountEncryptRuleStatement;
 import org.apache.shardingsphere.encrypt.rule.EncryptRule;
 import org.apache.shardingsphere.infra.merge.result.impl.local.LocalDataQueryResultRow;
@@ -39,8 +38,7 @@ class CountEncryptRuleExecutorTest {
     
     @Test
     void assertGetRowData() {
-        RQLExecutor<CountEncryptRuleStatement> executor = new CountEncryptRuleExecutor();
-        Collection<LocalDataQueryResultRow> actual = executor.getRows(mockDatabase(), mock(CountEncryptRuleStatement.class));
+        Collection<LocalDataQueryResultRow> actual = new CountEncryptRuleExecutor().getRows(mockDatabase(), mock(CountEncryptRuleStatement.class));
         assertThat(actual.size(), is(1));
         Iterator<LocalDataQueryResultRow> iterator = actual.iterator();
         LocalDataQueryResultRow row = iterator.next();
@@ -51,8 +49,7 @@ class CountEncryptRuleExecutorTest {
     
     @Test
     void assertGetColumnNames() {
-        RQLExecutor<CountEncryptRuleStatement> executor = new CountEncryptRuleExecutor();
-        Collection<String> columns = executor.getColumnNames();
+        Collection<String> columns = new CountEncryptRuleExecutor().getColumnNames();
         assertThat(columns.size(), is(3));
         Iterator<String> iterator = columns.iterator();
         assertThat(iterator.next(), is("rule_name"));
diff --git a/features/mask/distsql/handler/src/main/java/org/apache/shardingsphere/mask/distsql/handler/query/CountMaskRuleExecutor.java b/features/mask/distsql/handler/src/main/java/org/apache/shardingsphere/mask/distsql/handler/query/CountMaskRuleExecutor.java
index f1edd19f419..64f6f8a2229 100644
--- a/features/mask/distsql/handler/src/main/java/org/apache/shardingsphere/mask/distsql/handler/query/CountMaskRuleExecutor.java
+++ b/features/mask/distsql/handler/src/main/java/org/apache/shardingsphere/mask/distsql/handler/query/CountMaskRuleExecutor.java
@@ -25,20 +25,14 @@ import org.apache.shardingsphere.mask.rule.MaskRule;
 
 import java.util.Arrays;
 import java.util.Collection;
-import java.util.LinkedHashMap;
 import java.util.LinkedList;
-import java.util.Map;
-import java.util.Map.Entry;
 import java.util.Optional;
-import java.util.function.Supplier;
 
 /**
  * Count mask rule executor.
  */
 public final class CountMaskRuleExecutor implements RQLExecutor<CountMaskRuleStatement> {
     
-    private static final String MASK = "mask";
-    
     @Override
     public Collection<String> getColumnNames() {
         return Arrays.asList("rule_name", "database", "count");
@@ -47,30 +41,13 @@ public final class CountMaskRuleExecutor implements RQLExecutor<CountMaskRuleSta
     @Override
     public Collection<LocalDataQueryResultRow> getRows(final ShardingSphereDatabase database, final CountMaskRuleStatement sqlStatement) {
         Optional<MaskRule> rule = database.getRuleMetaData().findSingleRule(MaskRule.class);
-        Map<String, LinkedList<Object>> rowMap = new LinkedHashMap<>();
-        rule.ifPresent(optional -> addMaskData(rowMap, database.getName(), rule.get()));
         Collection<LocalDataQueryResultRow> result = new LinkedList<>();
-        for (final Entry<String, LinkedList<Object>> entry : rowMap.entrySet()) {
-            entry.getValue().addFirst(entry.getKey());
-            result.add(new LocalDataQueryResultRow(entry.getValue()));
-        }
+        rule.ifPresent(optional -> fillRows(result, rule.get(), database.getName()));
         return result;
     }
     
-    private void addMaskData(final Map<String, LinkedList<Object>> rowMap, final String databaseName, final MaskRule rule) {
-        addData(rowMap, MASK, databaseName, () -> rule.getTables().size());
-    }
-    
-    private void addData(final Map<String, LinkedList<Object>> rowMap, final String dataKey, final String databaseName, final Supplier<Integer> apply) {
-        rowMap.compute(dataKey, (key, value) -> buildRow(value, databaseName, apply.get()));
-    }
-    
-    private LinkedList<Object> buildRow(final LinkedList<Object> value, final String databaseName, final int count) {
-        if (null == value) {
-            return new LinkedList<>(Arrays.asList(databaseName, count));
-        }
-        value.set(1, (Integer) value.get(1) + count);
-        return value;
+    private void fillRows(final Collection<LocalDataQueryResultRow> result, final MaskRule rule, final String databaseName) {
+        result.add(new LocalDataQueryResultRow("mask", databaseName, rule.getTables().size()));
     }
     
     @Override
diff --git a/features/mask/distsql/handler/src/test/java/org/apache/shardingsphere/mask/distsql/handler/query/CountMaskRuleExecutorTest.java b/features/mask/distsql/handler/src/test/java/org/apache/shardingsphere/mask/distsql/handler/query/CountMaskRuleExecutorTest.java
index 16e4d60ae3d..c09824288cc 100644
--- a/features/mask/distsql/handler/src/test/java/org/apache/shardingsphere/mask/distsql/handler/query/CountMaskRuleExecutorTest.java
+++ b/features/mask/distsql/handler/src/test/java/org/apache/shardingsphere/mask/distsql/handler/query/CountMaskRuleExecutorTest.java
@@ -17,7 +17,6 @@
 
 package org.apache.shardingsphere.mask.distsql.handler.query;
 
-import org.apache.shardingsphere.distsql.handler.query.RQLExecutor;
 import org.apache.shardingsphere.infra.merge.result.impl.local.LocalDataQueryResultRow;
 import org.apache.shardingsphere.infra.metadata.database.ShardingSphereDatabase;
 import org.apache.shardingsphere.infra.metadata.database.rule.ShardingSphereRuleMetaData;
@@ -39,8 +38,7 @@ class CountMaskRuleExecutorTest {
     
     @Test
     void assertGetRowData() {
-        RQLExecutor<CountMaskRuleStatement> executor = new CountMaskRuleExecutor();
-        Collection<LocalDataQueryResultRow> actual = executor.getRows(mockDatabase(), mock(CountMaskRuleStatement.class));
+        Collection<LocalDataQueryResultRow> actual = new CountMaskRuleExecutor().getRows(mockDatabase(), mock(CountMaskRuleStatement.class));
         assertThat(actual.size(), is(1));
         Iterator<LocalDataQueryResultRow> iterator = actual.iterator();
         LocalDataQueryResultRow row = iterator.next();
@@ -51,8 +49,7 @@ class CountMaskRuleExecutorTest {
     
     @Test
     void assertGetColumnNames() {
-        RQLExecutor<CountMaskRuleStatement> executor = new CountMaskRuleExecutor();
-        Collection<String> columns = executor.getColumnNames();
+        Collection<String> columns = new CountMaskRuleExecutor().getColumnNames();
         assertThat(columns.size(), is(3));
         Iterator<String> iterator = columns.iterator();
         assertThat(iterator.next(), is("rule_name"));
diff --git a/features/readwrite-splitting/distsql/handler/src/main/java/org/apache/shardingsphere/readwritesplitting/distsql/handler/query/CountReadwriteSplittingRuleExecutor.java b/features/readwrite-splitting/distsql/handler/src/main/java/org/apache/shardingsphere/readwritesplitting/distsql/handler/query/CountReadwriteSplittingRuleExecutor.java
index e116faef834..074f29c0557 100644
--- a/features/readwrite-splitting/distsql/handler/src/main/java/org/apache/shardingsphere/readwritesplitting/distsql/handler/query/CountReadwriteSplittingRuleExecutor.java
+++ b/features/readwrite-splitting/distsql/handler/src/main/java/org/apache/shardingsphere/readwritesplitting/distsql/handler/query/CountReadwriteSplittingRuleExecutor.java
@@ -25,20 +25,14 @@ import org.apache.shardingsphere.readwritesplitting.rule.ReadwriteSplittingRule;
 
 import java.util.Arrays;
 import java.util.Collection;
-import java.util.LinkedHashMap;
 import java.util.LinkedList;
-import java.util.Map;
-import java.util.Map.Entry;
 import java.util.Optional;
-import java.util.function.Supplier;
 
 /**
  * Count readwrite-splitting rule executor.
  */
 public final class CountReadwriteSplittingRuleExecutor implements RQLExecutor<CountReadwriteSplittingRuleStatement> {
     
-    private static final String READWRITE_SPLITTING = "readwrite_splitting";
-    
     @Override
     public Collection<String> getColumnNames() {
         return Arrays.asList("rule_name", "database", "count");
@@ -47,30 +41,13 @@ public final class CountReadwriteSplittingRuleExecutor implements RQLExecutor<Co
     @Override
     public Collection<LocalDataQueryResultRow> getRows(final ShardingSphereDatabase database, final CountReadwriteSplittingRuleStatement sqlStatement) {
         Optional<ReadwriteSplittingRule> rule = database.getRuleMetaData().findSingleRule(ReadwriteSplittingRule.class);
-        Map<String, LinkedList<Object>> rowMap = new LinkedHashMap<>();
-        rule.ifPresent(optional -> addReadwriteSplittingData(rowMap, database.getName(), rule.get()));
         Collection<LocalDataQueryResultRow> result = new LinkedList<>();
-        for (final Entry<String, LinkedList<Object>> entry : rowMap.entrySet()) {
-            entry.getValue().addFirst(entry.getKey());
-            result.add(new LocalDataQueryResultRow(entry.getValue()));
-        }
+        rule.ifPresent(optional -> fillRows(result, rule.get(), database.getName()));
         return result;
     }
     
-    private void addReadwriteSplittingData(final Map<String, LinkedList<Object>> rowMap, final String databaseName, final ReadwriteSplittingRule rule) {
-        addData(rowMap, READWRITE_SPLITTING, databaseName, () -> rule.getDataSourceMapper().size());
-    }
-    
-    private void addData(final Map<String, LinkedList<Object>> rowMap, final String dataKey, final String databaseName, final Supplier<Integer> apply) {
-        rowMap.compute(dataKey, (key, value) -> buildRow(value, databaseName, apply.get()));
-    }
-    
-    private LinkedList<Object> buildRow(final LinkedList<Object> value, final String databaseName, final int count) {
-        if (null == value) {
-            return new LinkedList<>(Arrays.asList(databaseName, count));
-        }
-        value.set(1, (Integer) value.get(1) + count);
-        return value;
+    private void fillRows(final Collection<LocalDataQueryResultRow> result, final ReadwriteSplittingRule rule, final String databaseName) {
+        result.add(new LocalDataQueryResultRow("readwrite_splitting", databaseName, rule.getDataSourceMapper().size()));
     }
     
     @Override
diff --git a/features/readwrite-splitting/distsql/handler/src/test/java/org/apache/shardingsphere/readwritesplitting/distsql/handler/query/CountReadwriteSplittingRuleExecutorTest.java b/features/readwrite-splitting/distsql/handler/src/test/java/org/apache/shardingsphere/readwritesplitting/distsql/handler/query/CountReadwriteSplittingRuleExecutorTest.java
index 84609648c01..4cd2373ca90 100644
--- a/features/readwrite-splitting/distsql/handler/src/test/java/org/apache/shardingsphere/readwritesplitting/distsql/handler/query/CountReadwriteSplittingRuleExecutorTest.java
+++ b/features/readwrite-splitting/distsql/handler/src/test/java/org/apache/shardingsphere/readwritesplitting/distsql/handler/query/CountReadwriteSplittingRuleExecutorTest.java
@@ -17,7 +17,6 @@
 
 package org.apache.shardingsphere.readwritesplitting.distsql.handler.query;
 
-import org.apache.shardingsphere.distsql.handler.query.RQLExecutor;
 import org.apache.shardingsphere.infra.datasource.mapper.DataSourceRole;
 import org.apache.shardingsphere.infra.datasource.mapper.DataSourceRoleInfo;
 import org.apache.shardingsphere.infra.merge.result.impl.local.LocalDataQueryResultRow;
@@ -43,8 +42,7 @@ class CountReadwriteSplittingRuleExecutorTest {
     
     @Test
     void assertGetRowData() {
-        RQLExecutor<CountReadwriteSplittingRuleStatement> executor = new CountReadwriteSplittingRuleExecutor();
-        Collection<LocalDataQueryResultRow> actual = executor.getRows(mockDatabase(), mock(CountReadwriteSplittingRuleStatement.class));
+        Collection<LocalDataQueryResultRow> actual = new CountReadwriteSplittingRuleExecutor().getRows(mockDatabase(), mock(CountReadwriteSplittingRuleStatement.class));
         assertThat(actual.size(), is(1));
         Iterator<LocalDataQueryResultRow> iterator = actual.iterator();
         LocalDataQueryResultRow row = iterator.next();
@@ -55,8 +53,7 @@ class CountReadwriteSplittingRuleExecutorTest {
     
     @Test
     void assertGetColumnNames() {
-        RQLExecutor<CountReadwriteSplittingRuleStatement> executor = new CountReadwriteSplittingRuleExecutor();
-        Collection<String> columns = executor.getColumnNames();
+        Collection<String> columns = new CountReadwriteSplittingRuleExecutor().getColumnNames();
         assertThat(columns.size(), is(3));
         Iterator<String> iterator = columns.iterator();
         assertThat(iterator.next(), is("rule_name"));
diff --git a/features/shadow/distsql/handler/src/main/java/org/apache/shardingsphere/shadow/distsql/handler/query/CountShadowRuleExecutor.java b/features/shadow/distsql/handler/src/main/java/org/apache/shardingsphere/shadow/distsql/handler/query/CountShadowRuleExecutor.java
index 1b3c8858ec7..cb961f689eb 100644
--- a/features/shadow/distsql/handler/src/main/java/org/apache/shardingsphere/shadow/distsql/handler/query/CountShadowRuleExecutor.java
+++ b/features/shadow/distsql/handler/src/main/java/org/apache/shardingsphere/shadow/distsql/handler/query/CountShadowRuleExecutor.java
@@ -25,21 +25,14 @@ import org.apache.shardingsphere.shadow.rule.ShadowRule;
 
 import java.util.Arrays;
 import java.util.Collection;
-import java.util.Iterator;
-import java.util.LinkedHashMap;
 import java.util.LinkedList;
-import java.util.Map;
-import java.util.Map.Entry;
 import java.util.Optional;
-import java.util.function.Supplier;
 
 /**
  * Count shadow rule executor.
  */
 public final class CountShadowRuleExecutor implements RQLExecutor<CountShadowRuleStatement> {
     
-    private static final String SHADOW = "shadow";
-    
     @Override
     public Collection<String> getColumnNames() {
         return Arrays.asList("rule_name", "database", "count");
@@ -48,32 +41,13 @@ public final class CountShadowRuleExecutor implements RQLExecutor<CountShadowRul
     @Override
     public Collection<LocalDataQueryResultRow> getRows(final ShardingSphereDatabase database, final CountShadowRuleStatement sqlStatement) {
         Optional<ShadowRule> rule = database.getRuleMetaData().findSingleRule(ShadowRule.class);
-        Map<String, LinkedList<Object>> rowMap = new LinkedHashMap<>();
-        rule.ifPresent(optional -> addShadowData(rowMap, database.getName(), rule.get()));
-        Iterator<Entry<String, LinkedList<Object>>> data = rowMap.entrySet().iterator();
         Collection<LocalDataQueryResultRow> result = new LinkedList<>();
-        while (data.hasNext()) {
-            Entry<String, LinkedList<Object>> entry = data.next();
-            entry.getValue().addFirst(entry.getKey());
-            result.add(new LocalDataQueryResultRow(entry.getValue()));
-        }
+        rule.ifPresent(optional -> fillRows(result, rule.get(), database.getName()));
         return result;
     }
     
-    private void addShadowData(final Map<String, LinkedList<Object>> rowMap, final String databaseName, final ShadowRule rule) {
-        addData(rowMap, SHADOW, databaseName, () -> rule.getDataSourceMapper().size());
-    }
-    
-    private void addData(final Map<String, LinkedList<Object>> rowMap, final String dataKey, final String databaseName, final Supplier<Integer> apply) {
-        rowMap.compute(dataKey, (key, value) -> buildRow(value, databaseName, apply.get()));
-    }
-    
-    private LinkedList<Object> buildRow(final LinkedList<Object> value, final String databaseName, final int count) {
-        if (null == value) {
-            return new LinkedList<>(Arrays.asList(databaseName, count));
-        }
-        value.set(1, (Integer) value.get(1) + count);
-        return value;
+    private void fillRows(final Collection<LocalDataQueryResultRow> result, final ShadowRule rule, final String databaseName) {
+        result.add(new LocalDataQueryResultRow("shadow", databaseName, rule.getDataSourceMapper().size()));
     }
     
     @Override
diff --git a/features/shadow/distsql/handler/src/test/java/org/apache/shardingsphere/shadow/distsql/query/CountShadowRuleExecutorTest.java b/features/shadow/distsql/handler/src/test/java/org/apache/shardingsphere/shadow/distsql/query/CountShadowRuleExecutorTest.java
index 419d1174254..1ba4be5c2d5 100644
--- a/features/shadow/distsql/handler/src/test/java/org/apache/shardingsphere/shadow/distsql/query/CountShadowRuleExecutorTest.java
+++ b/features/shadow/distsql/handler/src/test/java/org/apache/shardingsphere/shadow/distsql/query/CountShadowRuleExecutorTest.java
@@ -17,7 +17,6 @@
 
 package org.apache.shardingsphere.shadow.distsql.query;
 
-import org.apache.shardingsphere.distsql.handler.query.RQLExecutor;
 import org.apache.shardingsphere.infra.datasource.mapper.DataSourceRole;
 import org.apache.shardingsphere.infra.datasource.mapper.DataSourceRoleInfo;
 import org.apache.shardingsphere.infra.merge.result.impl.local.LocalDataQueryResultRow;
@@ -45,8 +44,7 @@ class CountShadowRuleExecutorTest {
     
     @Test
     void assertGetRowData() {
-        RQLExecutor<CountShadowRuleStatement> executor = new CountShadowRuleExecutor();
-        Collection<LocalDataQueryResultRow> actual = executor.getRows(mockDatabase(), mock(CountShadowRuleStatement.class));
+        Collection<LocalDataQueryResultRow> actual = new CountShadowRuleExecutor().getRows(mockDatabase(), mock(CountShadowRuleStatement.class));
         assertThat(actual.size(), is(1));
         Iterator<LocalDataQueryResultRow> iterator = actual.iterator();
         LocalDataQueryResultRow row = iterator.next();
@@ -57,8 +55,7 @@ class CountShadowRuleExecutorTest {
     
     @Test
     void assertGetColumnNames() {
-        RQLExecutor<CountShadowRuleStatement> executor = new CountShadowRuleExecutor();
-        Collection<String> columns = executor.getColumnNames();
+        Collection<String> columns = new CountShadowRuleExecutor().getColumnNames();
         assertThat(columns.size(), is(3));
         Iterator<String> iterator = columns.iterator();
         assertThat(iterator.next(), is("rule_name"));
diff --git a/features/sharding/distsql/handler/src/main/java/org/apache/shardingsphere/sharding/distsql/handler/query/CountShardingRuleExecutor.java b/features/sharding/distsql/handler/src/main/java/org/apache/shardingsphere/sharding/distsql/handler/query/CountShardingRuleExecutor.java
index 5bcf31f2a5a..f59ceceb7ad 100644
--- a/features/sharding/distsql/handler/src/main/java/org/apache/shardingsphere/sharding/distsql/handler/query/CountShardingRuleExecutor.java
+++ b/features/sharding/distsql/handler/src/main/java/org/apache/shardingsphere/sharding/distsql/handler/query/CountShardingRuleExecutor.java
@@ -28,19 +28,12 @@ import java.util.Arrays;
 import java.util.Collection;
 import java.util.LinkedList;
 import java.util.Optional;
-import java.util.function.Supplier;
 
 /**
  * Count sharding rule executor.
  */
 public final class CountShardingRuleExecutor implements RQLExecutor<CountShardingRuleStatement> {
     
-    private static final String SHARDING_TABLE = "sharding_table";
-    
-    private static final String SHARDING_BINDING_TABLE = "sharding_table_reference";
-    
-    private static final String SHARDING_BROADCAST_TABLE = "broadcast_table";
-    
     @Override
     public Collection<String> getColumnNames() {
         return Arrays.asList("rule_name", "database", "count");
@@ -50,18 +43,18 @@ public final class CountShardingRuleExecutor implements RQLExecutor<CountShardin
     public Collection<LocalDataQueryResultRow> getRows(final ShardingSphereDatabase database, final CountShardingRuleStatement sqlStatement) {
         Optional<ShardingRule> rule = database.getRuleMetaData().findSingleRule(ShardingRule.class);
         Collection<LocalDataQueryResultRow> result = new LinkedList<>();
-        rule.ifPresent(optional -> addShardingData(result, rule.get(), database.getName()));
+        rule.ifPresent(optional -> fillRows(result, rule.get(), database.getName()));
         return result;
     }
     
-    private void addShardingData(final Collection<LocalDataQueryResultRow> result, final ShardingRule rule, final String databaseName) {
-        addData(result, SHARDING_TABLE, databaseName, () -> rule.getTableRules().size());
-        addData(result, SHARDING_BINDING_TABLE, databaseName, () -> ((ShardingRuleConfiguration) rule.getConfiguration()).getBindingTableGroups().size());
-        addData(result, SHARDING_BROADCAST_TABLE, databaseName, () -> rule.getBroadcastTables().size());
+    private void fillRows(final Collection<LocalDataQueryResultRow> result, final ShardingRule rule, final String databaseName) {
+        fillRows(result, "sharding_table", databaseName, rule.getTableRules().size());
+        fillRows(result, "sharding_table_reference", databaseName, ((ShardingRuleConfiguration) rule.getConfiguration()).getBindingTableGroups().size());
+        fillRows(result, "broadcast_table", databaseName, rule.getBroadcastTables().size());
     }
     
-    private void addData(final Collection<LocalDataQueryResultRow> result, final String dataKey, final String databaseName, final Supplier<Integer> apply) {
-        result.add(new LocalDataQueryResultRow(dataKey, databaseName, apply.get()));
+    private void fillRows(final Collection<LocalDataQueryResultRow> result, final String ruleName, final String databaseName, final int count) {
+        result.add(new LocalDataQueryResultRow(ruleName, databaseName, count));
     }
     
     @Override
diff --git a/features/sharding/distsql/handler/src/test/java/org/apache/shardingsphere/sharding/distsql/query/CountShardingRuleExecutorTest.java b/features/sharding/distsql/handler/src/test/java/org/apache/shardingsphere/sharding/distsql/query/CountShardingRuleExecutorTest.java
index aa37cc0f490..9cfbd257c85 100644
--- a/features/sharding/distsql/handler/src/test/java/org/apache/shardingsphere/sharding/distsql/query/CountShardingRuleExecutorTest.java
+++ b/features/sharding/distsql/handler/src/test/java/org/apache/shardingsphere/sharding/distsql/query/CountShardingRuleExecutorTest.java
@@ -17,7 +17,6 @@
 
 package org.apache.shardingsphere.sharding.distsql.query;
 
-import org.apache.shardingsphere.distsql.handler.query.RQLExecutor;
 import org.apache.shardingsphere.infra.merge.result.impl.local.LocalDataQueryResultRow;
 import org.apache.shardingsphere.infra.metadata.database.ShardingSphereDatabase;
 import org.apache.shardingsphere.infra.metadata.database.rule.ShardingSphereRuleMetaData;
@@ -46,8 +45,7 @@ class CountShardingRuleExecutorTest {
     
     @Test
     void assertGetRowData() {
-        RQLExecutor<CountShardingRuleStatement> executor = new CountShardingRuleExecutor();
-        Collection<LocalDataQueryResultRow> actual = executor.getRows(mockDatabase(), mock(CountShardingRuleStatement.class));
+        Collection<LocalDataQueryResultRow> actual = new CountShardingRuleExecutor().getRows(mockDatabase(), mock(CountShardingRuleStatement.class));
         assertThat(actual.size(), is(3));
         Iterator<LocalDataQueryResultRow> iterator = actual.iterator();
         LocalDataQueryResultRow row = iterator.next();
@@ -66,8 +64,7 @@ class CountShardingRuleExecutorTest {
     
     @Test
     void assertGetColumns() {
-        RQLExecutor<CountShardingRuleStatement> executor = new CountShardingRuleExecutor();
-        Collection<String> columns = executor.getColumnNames();
+        Collection<String> columns = new CountShardingRuleExecutor().getColumnNames();
         assertThat(columns.size(), is(3));
         Iterator<String> iterator = columns.iterator();
         assertThat(iterator.next(), is("rule_name"));
diff --git a/proxy/backend/core/src/main/java/org/apache/shardingsphere/proxy/backend/handler/distsql/rql/rule/CountSingleTableExecutor.java b/proxy/backend/core/src/main/java/org/apache/shardingsphere/proxy/backend/handler/distsql/rql/rule/CountSingleTableExecutor.java
index 1bbff063f64..05e7160403c 100644
--- a/proxy/backend/core/src/main/java/org/apache/shardingsphere/proxy/backend/handler/distsql/rql/rule/CountSingleTableExecutor.java
+++ b/proxy/backend/core/src/main/java/org/apache/shardingsphere/proxy/backend/handler/distsql/rql/rule/CountSingleTableExecutor.java
@@ -33,14 +33,14 @@ import java.util.Collections;
 public final class CountSingleTableExecutor implements RQLExecutor<CountSingleTableStatement> {
     
     @Override
-    public Collection<LocalDataQueryResultRow> getRows(final ShardingSphereDatabase database, final CountSingleTableStatement sqlStatement) {
-        SingleRule rule = database.getRuleMetaData().getSingleRule(SingleRule.class);
-        return Collections.singleton(new LocalDataQueryResultRow(database.getName(), rule.getAllTables().size()));
+    public Collection<String> getColumnNames() {
+        return Arrays.asList("database", "count");
     }
     
     @Override
-    public Collection<String> getColumnNames() {
-        return Arrays.asList("database", "count");
+    public Collection<LocalDataQueryResultRow> getRows(final ShardingSphereDatabase database, final CountSingleTableStatement sqlStatement) {
+        SingleRule rule = database.getRuleMetaData().getSingleRule(SingleRule.class);
+        return Collections.singleton(new LocalDataQueryResultRow(database.getName(), rule.getAllTables().size()));
     }
     
     @Override
diff --git a/proxy/backend/core/src/test/java/org/apache/shardingsphere/proxy/backend/handler/distsql/rql/rule/CountSingleTableExecutorTest.java b/proxy/backend/core/src/test/java/org/apache/shardingsphere/proxy/backend/handler/distsql/rql/rule/CountSingleTableExecutorTest.java
index 93976858b78..4b74029094d 100644
--- a/proxy/backend/core/src/test/java/org/apache/shardingsphere/proxy/backend/handler/distsql/rql/rule/CountSingleTableExecutorTest.java
+++ b/proxy/backend/core/src/test/java/org/apache/shardingsphere/proxy/backend/handler/distsql/rql/rule/CountSingleTableExecutorTest.java
@@ -17,7 +17,6 @@
 
 package org.apache.shardingsphere.proxy.backend.handler.distsql.rql.rule;
 
-import org.apache.shardingsphere.distsql.handler.query.RQLExecutor;
 import org.apache.shardingsphere.distsql.parser.statement.rql.show.CountSingleTableStatement;
 import org.apache.shardingsphere.infra.merge.result.impl.local.LocalDataQueryResultRow;
 import org.apache.shardingsphere.infra.metadata.database.ShardingSphereDatabase;
@@ -40,8 +39,7 @@ class CountSingleTableExecutorTest {
     
     @Test
     void assertGetRowData() {
-        RQLExecutor<CountSingleTableStatement> executor = new CountSingleTableExecutor();
-        Collection<LocalDataQueryResultRow> actual = executor.getRows(mockDatabase(), mock(CountSingleTableStatement.class));
+        Collection<LocalDataQueryResultRow> actual = new CountSingleTableExecutor().getRows(mockDatabase(), mock(CountSingleTableStatement.class));
         assertThat(actual.size(), is(1));
         Iterator<LocalDataQueryResultRow> iterator = actual.iterator();
         LocalDataQueryResultRow row = iterator.next();
@@ -51,8 +49,7 @@ class CountSingleTableExecutorTest {
     
     @Test
     void assertGetColumnNames() {
-        RQLExecutor<CountSingleTableStatement> executor = new CountSingleTableExecutor();
-        Collection<String> columns = executor.getColumnNames();
+        Collection<String> columns = new CountSingleTableExecutor().getColumnNames();
         assertThat(columns.size(), is(2));
         Iterator<String> iterator = columns.iterator();
         assertThat(iterator.next(), is("database"));