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));
+ }
}