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 <[email protected]>
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));
+    }
 }

Reply via email to