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 2023/02/15 03:25:04 UTC
[shardingsphere] branch master updated: Make `ShowReadwriteSplittingRule`support query specified rule (#24165)
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 66e107df766 Make `ShowReadwriteSplittingRule`support query specified rule (#24165)
66e107df766 is described below
commit 66e107df766990fc3ca2b19d8e278f9b61778d0a
Author: Zichao <57...@users.noreply.github.com>
AuthorDate: Wed Feb 15 11:24:57 2023 +0800
Make `ShowReadwriteSplittingRule`support query specified rule (#24165)
* Make `ShowReadwriteSplittingRule`support query specified rule
* Make `ShowReadwriteSplittingRule`support query specified rule
---
.../query/ShowDatabaseDiscoveryRuleExecutor.java | 4 +---
.../query/ShowReadwriteSplittingRuleExecutor.java | 8 +++++---
.../ShowReadwriteSplittingRuleExecutorTest.java | 21 +++++++++++++++++++++
.../imports/readwrite-splitting/RQLStatement.g4 | 6 +++++-
.../ReadwriteSplittingDistSQLStatementVisitor.java | 3 ++-
.../ShowReadwriteSplittingRulesStatement.java | 7 ++++++-
6 files changed, 40 insertions(+), 9 deletions(-)
diff --git a/features/db-discovery/distsql/handler/src/main/java/org/apache/shardingsphere/dbdiscovery/distsql/handler/query/ShowDatabaseDiscoveryRuleExecutor.java b/features/db-discovery/distsql/handler/src/main/java/org/apache/shardingsphere/dbdiscovery/distsql/handler/query/ShowDatabaseDiscoveryRuleExecutor.java
index b73de16e474..0055cfa139e 100644
--- a/features/db-discovery/distsql/handler/src/main/java/org/apache/shardingsphere/dbdiscovery/distsql/handler/query/ShowDatabaseDiscoveryRuleExecutor.java
+++ b/features/db-discovery/distsql/handler/src/main/java/org/apache/shardingsphere/dbdiscovery/distsql/handler/query/ShowDatabaseDiscoveryRuleExecutor.java
@@ -70,9 +70,7 @@ public final class ShowDatabaseDiscoveryRuleExecutor implements RQLExecutor<Show
heartbeatMap.putAll(convertToMap(discoveryHeartbeats.get(dataSourceRuleConfig.getDiscoveryHeartbeatName())));
String groupName = dataSourceRuleConfig.getGroupName();
String primaryDataSourceName = null == primaryDataSources.get(groupName) ? "" : primaryDataSources.get(groupName);
- if (null == sqlStatement.getRuleName()) {
- result.add(new LocalDataQueryResultRow(groupName, String.join(",", dataSourceRuleConfig.getDataSourceNames()), primaryDataSourceName, typeMap, heartbeatMap));
- } else if (sqlStatement.getRuleName().equalsIgnoreCase(groupName)) {
+ if (null == sqlStatement.getRuleName() || sqlStatement.getRuleName().equalsIgnoreCase(groupName)) {
result.add(new LocalDataQueryResultRow(groupName, String.join(",", dataSourceRuleConfig.getDataSourceNames()), primaryDataSourceName, typeMap, heartbeatMap));
}
}
diff --git a/features/readwrite-splitting/distsql/handler/src/main/java/org/apache/shardingsphere/readwritesplitting/distsql/handler/query/ShowReadwriteSplittingRuleExecutor.java b/features/readwrite-splitting/distsql/handler/src/main/java/org/apache/shardingsphere/readwritesplitting/distsql/handler/query/ShowReadwriteSplittingRuleExecutor.java
index f55b60f2dfd..32f3971b264 100644
--- a/features/readwrite-splitting/distsql/handler/src/main/java/org/apache/shardingsphere/readwritesplitting/distsql/handler/query/ShowReadwriteSplittingRuleExecutor.java
+++ b/features/readwrite-splitting/distsql/handler/src/main/java/org/apache/shardingsphere/readwritesplitting/distsql/handler/query/ShowReadwriteSplittingRuleExecutor.java
@@ -52,7 +52,7 @@ public final class ShowReadwriteSplittingRuleExecutor implements RQLExecutor<Sho
Collection<LocalDataQueryResultRow> result = new LinkedList<>();
if (rule.isPresent()) {
buildExportableMap(rule.get());
- result = buildData(rule.get());
+ result = buildData(rule.get(), sqlStatement);
}
return result;
}
@@ -64,11 +64,13 @@ public final class ShowReadwriteSplittingRuleExecutor implements RQLExecutor<Sho
exportableDataSourceMap = (Map<String, Map<String, String>>) exportedData.get(ExportableConstants.EXPORT_STATIC_READWRITE_SPLITTING_RULE);
}
- private Collection<LocalDataQueryResultRow> buildData(final ReadwriteSplittingRule rule) {
+ private Collection<LocalDataQueryResultRow> buildData(final ReadwriteSplittingRule rule, final ShowReadwriteSplittingRulesStatement sqlStatement) {
Collection<LocalDataQueryResultRow> result = new LinkedList<>();
((ReadwriteSplittingRuleConfiguration) rule.getConfiguration()).getDataSources().forEach(each -> {
LocalDataQueryResultRow dataItem = buildDataItem(each, getLoadBalancers((ReadwriteSplittingRuleConfiguration) rule.getConfiguration()));
- result.add(dataItem);
+ if (null == sqlStatement.getRuleName() || sqlStatement.getRuleName().equalsIgnoreCase(each.getName())) {
+ result.add(dataItem);
+ }
});
return result;
}
diff --git a/features/readwrite-splitting/distsql/handler/src/test/java/org/apache/shardingsphere/readwritesplitting/distsql/handler/query/ShowReadwriteSplittingRuleExecutorTest.java b/features/readwrite-splitting/distsql/handler/src/test/java/org/apache/shardingsphere/readwritesplitting/distsql/handler/query/ShowReadwriteSplittingRuleExecutorTest.java
index 65afb6ee0b3..5cf54ab3c9a 100644
--- a/features/readwrite-splitting/distsql/handler/src/test/java/org/apache/shardingsphere/readwritesplitting/distsql/handler/query/ShowReadwriteSplittingRuleExecutorTest.java
+++ b/features/readwrite-splitting/distsql/handler/src/test/java/org/apache/shardingsphere/readwritesplitting/distsql/handler/query/ShowReadwriteSplittingRuleExecutorTest.java
@@ -82,6 +82,27 @@ public final class ShowReadwriteSplittingRuleExecutorTest {
assertThat(row.getCell(7), is("read_weight=2:1"));
}
+ @Test
+ public void assertGetRowDataWithSpecifiedRuleName() {
+ ShardingSphereDatabase database = mock(ShardingSphereDatabase.class, RETURNS_DEEP_STUBS);
+ ReadwriteSplittingRule rule = mock(ReadwriteSplittingRule.class);
+ when(rule.getConfiguration()).thenReturn(createRuleConfiguration());
+ when(rule.getExportData()).thenReturn(createExportedData());
+ when(database.getRuleMetaData()).thenReturn(new ShardingSphereRuleMetaData(Collections.singleton(rule)));
+ RQLExecutor<ShowReadwriteSplittingRulesStatement> executor = new ShowReadwriteSplittingRuleExecutor();
+ Collection<LocalDataQueryResultRow> actual = executor.getRows(database, new ShowReadwriteSplittingRulesStatement("readwrite_ds", null));
+ assertThat(actual.size(), is(1));
+ Iterator<LocalDataQueryResultRow> iterator = actual.iterator();
+ LocalDataQueryResultRow row = iterator.next();
+ assertThat(row.getCell(1), is("readwrite_ds"));
+ assertThat(row.getCell(2), is(""));
+ assertThat(row.getCell(3), is(""));
+ assertThat(row.getCell(4), is("ds_primary"));
+ assertThat(row.getCell(5), is("ds_slave_0,ds_slave_1"));
+ assertThat(row.getCell(6), is("random"));
+ assertThat(row.getCell(7), is("read_weight=2:1"));
+ }
+
private Map<String, Object> createExportedData() {
Map<String, Object> result = new HashMap<>(2, 1);
result.put(ExportableConstants.EXPORT_DYNAMIC_READWRITE_SPLITTING_RULE, Collections.emptyMap());
diff --git a/features/readwrite-splitting/distsql/parser/src/main/antlr4/imports/readwrite-splitting/RQLStatement.g4 b/features/readwrite-splitting/distsql/parser/src/main/antlr4/imports/readwrite-splitting/RQLStatement.g4
index 05724fa2aa2..c28629199af 100644
--- a/features/readwrite-splitting/distsql/parser/src/main/antlr4/imports/readwrite-splitting/RQLStatement.g4
+++ b/features/readwrite-splitting/distsql/parser/src/main/antlr4/imports/readwrite-splitting/RQLStatement.g4
@@ -20,9 +20,13 @@ grammar RQLStatement;
import BaseRule;
showReadwriteSplittingRules
- : SHOW READWRITE_SPLITTING RULES (FROM databaseName)?
+ : SHOW READWRITE_SPLITTING (RULE ruleName | RULES) (FROM databaseName)?
;
countReadwriteSplittingRule
: COUNT READWRITE_SPLITTING RULE (FROM databaseName)?
;
+
+ruleName
+ : IDENTIFIER_
+ ;
diff --git a/features/readwrite-splitting/distsql/parser/src/main/java/org/apache/shardingsphere/readwritesplitting/distsql/parser/core/ReadwriteSplittingDistSQLStatementVisitor.java b/features/readwrite-splitting/distsql/parser/src/main/java/org/apache/shardingsphere/readwritesplitting/distsql/parser/core/ReadwriteSplittingDistSQLStatementVisitor.java
index 69e60b46d2b..9b1309c9da0 100644
--- a/features/readwrite-splitting/distsql/parser/src/main/java/org/apache/shardingsphere/readwritesplitting/distsql/parser/core/ReadwriteSplittingDistSQLStatementVisitor.java
+++ b/features/readwrite-splitting/distsql/parser/src/main/java/org/apache/shardingsphere/readwritesplitting/distsql/parser/core/ReadwriteSplittingDistSQLStatementVisitor.java
@@ -88,7 +88,8 @@ public final class ReadwriteSplittingDistSQLStatementVisitor extends ReadwriteSp
@Override
public ASTNode visitShowReadwriteSplittingRules(final ShowReadwriteSplittingRulesContext ctx) {
- return new ShowReadwriteSplittingRulesStatement(Objects.nonNull(ctx.databaseName()) ? (DatabaseSegment) visit(ctx.databaseName()) : null);
+ return new ShowReadwriteSplittingRulesStatement(null == ctx.ruleName() ? null : getIdentifierValue(ctx.ruleName()),
+ Objects.nonNull(ctx.databaseName()) ? (DatabaseSegment) visit(ctx.databaseName()) : null);
}
@Override
diff --git a/features/readwrite-splitting/distsql/statement/src/main/java/org/apache/shardingsphere/readwritesplitting/distsql/parser/statement/ShowReadwriteSplittingRulesStatement.java b/features/readwrite-splitting/distsql/statement/src/main/java/org/apache/shardingsphere/readwritesplitting/distsql/parser/statement/ShowReadwriteSplittingRulesStatement.java
index 0e374025898..87295051399 100644
--- a/features/readwrite-splitting/distsql/statement/src/main/java/org/apache/shardingsphere/readwritesplitting/distsql/parser/statement/ShowReadwriteSplittingRulesStatement.java
+++ b/features/readwrite-splitting/distsql/statement/src/main/java/org/apache/shardingsphere/readwritesplitting/distsql/parser/statement/ShowReadwriteSplittingRulesStatement.java
@@ -17,15 +17,20 @@
package org.apache.shardingsphere.readwritesplitting.distsql.parser.statement;
+import lombok.Getter;
import org.apache.shardingsphere.distsql.parser.statement.rql.show.ShowRulesStatement;
import org.apache.shardingsphere.sql.parser.sql.common.segment.generic.DatabaseSegment;
/**
* Show readwrite splitting rules statement.
*/
+@Getter
public final class ShowReadwriteSplittingRulesStatement extends ShowRulesStatement {
- public ShowReadwriteSplittingRulesStatement(final DatabaseSegment database) {
+ private final String ruleName;
+
+ public ShowReadwriteSplittingRulesStatement(final String ruleName, final DatabaseSegment database) {
super(database);
+ this.ruleName = ruleName;
}
}