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/01/21 06:17:20 UTC

[shardingsphere] branch master updated: Fixed incomplete display of `count schema rules` when not configure (#14969)

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 e963a13  Fixed incomplete display of `count schema rules` when not configure (#14969)
e963a13 is described below

commit e963a135f887a1d3c05e1fac7c861f5536261d7e
Author: lanchengx <52...@users.noreply.github.com>
AuthorDate: Fri Jan 21 14:06:26 2022 +0800

    Fixed incomplete display of `count schema rules` when not configure (#14969)
    
    * Fixed incomplete display of `Count Schema rules` when not configure
    
    * Rename method.
    
    * Adjust the position.
---
 .../rql/rule/SchemaRulesQueryResultSet.java        | 49 ++++++++++++++++------
 .../distsql/rql/SchemaRulesQueryResultSetTest.java | 49 ++++++++++++++++++++++
 2 files changed, 86 insertions(+), 12 deletions(-)

diff --git a/shardingsphere-proxy/shardingsphere-proxy-backend/src/main/java/org/apache/shardingsphere/proxy/backend/text/distsql/rql/rule/SchemaRulesQueryResultSet.java b/shardingsphere-proxy/shardingsphere-proxy-backend/src/main/java/org/apache/shardingsphere/proxy/backend/text/distsql/rql/rule/SchemaRulesQueryResultSet.java
index e6bf3f7..7f29758 100644
--- a/shardingsphere-proxy/shardingsphere-proxy-backend/src/main/java/org/apache/shardingsphere/proxy/backend/text/distsql/rql/rule/SchemaRulesQueryResultSet.java
+++ b/shardingsphere-proxy/shardingsphere-proxy-backend/src/main/java/org/apache/shardingsphere/proxy/backend/text/distsql/rql/rule/SchemaRulesQueryResultSet.java
@@ -85,13 +85,11 @@ public final class SchemaRulesQueryResultSet implements DistSQLResultSet {
     public void init(final ShardingSphereMetaData metaData, final SQLStatement sqlStatement) {
         Map<String, Collection<Object>> dataMap = new LinkedHashMap<>();
         addSingleTableData(dataMap, metaData.getRuleMetaData().findRules(SingleTableRule.class));
-        metaData.getRuleMetaData().getConfigurations().forEach(each -> {
-            addShardingData(dataMap, each);
-            addReadwriteSplittingData(dataMap, each);
-            addDBDiscoveryData(dataMap, each);
-            addEncryptData(dataMap, each);
-            addShadowData(dataMap, each);
-        });
+        if (hasRuleConfiguration(metaData)) {
+            addConfigurationData(dataMap, metaData.getRuleMetaData().getConfigurations());
+        } else {
+            addDefaultData(dataMap);
+        }
         this.data = dataMap.values().iterator();
     }
     
@@ -101,6 +99,29 @@ public final class SchemaRulesQueryResultSet implements DistSQLResultSet {
         dataMap.putIfAbsent(SINGLE_TABLE, buildRow(SINGLE_TABLE, TABLE, count.orElse(DEFAULT_COUNT)));
     }
     
+    private boolean hasRuleConfiguration(final ShardingSphereMetaData metaData) {
+        Collection<RuleConfiguration> configurations = metaData.getRuleMetaData().getConfigurations();
+        return null != configurations && !configurations.isEmpty();
+    }
+    
+    private void addDefaultData(final Map<String, Collection<Object>> dataMap) {
+        addShardingData(dataMap, null);
+        addReadwriteSplittingData(dataMap, null);
+        addDBDiscoveryData(dataMap, null);
+        addEncryptData(dataMap, null);
+        addShadowData(dataMap, null);
+    }
+    
+    private void addConfigurationData(final Map<String, Collection<Object>> dataMap, final Collection<RuleConfiguration> configurations) {
+        configurations.forEach(each -> {
+            addShardingData(dataMap, each);
+            addReadwriteSplittingData(dataMap, each);
+            addDBDiscoveryData(dataMap, each);
+            addEncryptData(dataMap, each);
+            addShadowData(dataMap, each);
+        });
+    }
+    
     private void addShardingData(final Map<String, Collection<Object>> dataMap, final RuleConfiguration ruleConfiguration) {
         addData(dataMap, String.join("_", SHARDING, SHARDING_TABLE), SHARDING, SHARDING_TABLE, ruleConfiguration,
             config -> ((ShardingRuleConfiguration) config).getTables().size() + ((ShardingRuleConfiguration) config).getAutoTables().size());
@@ -124,8 +145,17 @@ public final class SchemaRulesQueryResultSet implements DistSQLResultSet {
         addData(dataMap, SHADOW, DATA_SOURCE, ruleConfiguration, config -> ((ShadowRuleConfiguration) config).getDataSources().size());
     }
     
+    private void addData(final Map<String, Collection<Object>> dataMap, final String feature, final String type,
+                         final RuleConfiguration ruleConfiguration, final Function<RuleConfiguration, Integer> apply) {
+        addData(dataMap, feature, feature, type, ruleConfiguration, apply);
+    }
+    
     private void addData(final Map<String, Collection<Object>> dataMap, final String dataKey, final String feature, final String type,
                          final RuleConfiguration ruleConfiguration, final Function<RuleConfiguration, Integer> apply) {
+        if (null == ruleConfiguration) {
+            dataMap.putIfAbsent(dataKey, buildRow(feature, type, DEFAULT_COUNT));
+            return;   
+        }
         Class<? extends RuleConfiguration> clz = FEATURE_MAP.get(feature);
         if (!(ruleConfiguration.getClass().getCanonicalName().equals(clz.getCanonicalName()))) {
             dataMap.putIfAbsent(dataKey, buildRow(feature, type, DEFAULT_COUNT));
@@ -134,11 +164,6 @@ public final class SchemaRulesQueryResultSet implements DistSQLResultSet {
         dataMap.put(dataKey, buildRow(feature, type, apply.apply(ruleConfiguration)));
     }
     
-    private void addData(final Map<String, Collection<Object>> dataMap, final String feature, final String type,
-                         final RuleConfiguration ruleConfiguration, final Function<RuleConfiguration, Integer> apply) {
-        addData(dataMap, feature, feature, type, ruleConfiguration, apply);
-    }
-    
     private Collection<Object> buildRow(final String type, final String name, final Integer count) {
         return Arrays.asList(type, name, count);
     }
diff --git a/shardingsphere-proxy/shardingsphere-proxy-backend/src/test/java/org/apache/shardingsphere/proxy/backend/text/distsql/rql/SchemaRulesQueryResultSetTest.java b/shardingsphere-proxy/shardingsphere-proxy-backend/src/test/java/org/apache/shardingsphere/proxy/backend/text/distsql/rql/SchemaRulesQueryResultSetTest.java
index ef77e74..c161546 100644
--- a/shardingsphere-proxy/shardingsphere-proxy-backend/src/test/java/org/apache/shardingsphere/proxy/backend/text/distsql/rql/SchemaRulesQueryResultSetTest.java
+++ b/shardingsphere-proxy/shardingsphere-proxy-backend/src/test/java/org/apache/shardingsphere/proxy/backend/text/distsql/rql/SchemaRulesQueryResultSetTest.java
@@ -146,4 +146,53 @@ public final class SchemaRulesQueryResultSetTest {
         assertThat(rowData.next(), is("table"));
         assertThat(rowData.next(), is(1));
     }
+    
+    @Test
+    public void assertGetRowDataWithoutConfiguration() {
+        DistSQLResultSet resultSet = new SchemaRulesQueryResultSet();
+        when(shardingSphereMetaData.getRuleMetaData().getConfigurations()).thenReturn(Collections.emptyList());
+        resultSet.init(shardingSphereMetaData, mock(CountSchemaRulesStatement.class));
+        Collection<Object> actual = resultSet.getRowData();
+        assertThat(actual.size(), is(3));
+        Iterator<Object> rowData = actual.iterator();
+        assertThat(rowData.next(), is("single_table"));
+        assertThat(rowData.next(), is("table"));
+        assertThat(rowData.next(), is(2));
+        resultSet.next();
+        actual = resultSet.getRowData();
+        rowData = actual.iterator();
+        assertThat(rowData.next(), is("sharding"));
+        assertThat(rowData.next(), is("sharding_table"));
+        assertThat(rowData.next(), is(0));
+        resultSet.next();
+        actual = resultSet.getRowData();
+        rowData = actual.iterator();
+        assertThat(rowData.next(), is("sharding"));
+        assertThat(rowData.next(), is("binding_table"));
+        assertThat(rowData.next(), is(0));
+        resultSet.next();
+        actual = resultSet.getRowData();
+        rowData = actual.iterator();
+        assertThat(rowData.next(), is("sharding"));
+        assertThat(rowData.next(), is("broadcast_table"));
+        assertThat(rowData.next(), is(0));
+        resultSet.next();
+        actual = resultSet.getRowData();
+        rowData = actual.iterator();
+        assertThat(rowData.next(), is("readwrite_splitting"));
+        assertThat(rowData.next(), is("data_source"));
+        assertThat(rowData.next(), is(0));
+        resultSet.next();
+        actual = resultSet.getRowData();
+        rowData = actual.iterator();
+        assertThat(rowData.next(), is("db_discovery"));
+        assertThat(rowData.next(), is("data_source"));
+        assertThat(rowData.next(), is(0));
+        resultSet.next();
+        actual = resultSet.getRowData();
+        rowData = actual.iterator();
+        assertThat(rowData.next(), is("encrypt"));
+        assertThat(rowData.next(), is("table"));
+        assertThat(rowData.next(), is(0));
+    }
 }