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/14 12:01:39 UTC
[shardingsphere] branch master updated: Make `ShowDatabaseDiscoveryRule`support query specified rule (#24162)
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 2fc47ab14dd Make `ShowDatabaseDiscoveryRule`support query specified rule (#24162)
2fc47ab14dd is described below
commit 2fc47ab14ddf57edf95cd6b3bef5d8c9b02c5cfd
Author: Zichao <57...@users.noreply.github.com>
AuthorDate: Tue Feb 14 20:01:23 2023 +0800
Make `ShowDatabaseDiscoveryRule`support query specified rule (#24162)
---
.../query/ShowDatabaseDiscoveryRuleExecutor.java | 18 ++++++------------
.../query/ShowDatabaseDiscoveryRuleExecutorTest.java | 14 ++++++++++++++
.../main/antlr4/imports/db-discovery/RQLStatement.g4 | 6 +++++-
.../core/DatabaseDiscoveryDistSQLStatementVisitor.java | 3 ++-
.../statement/ShowDatabaseDiscoveryRulesStatement.java | 7 ++++++-
5 files changed, 33 insertions(+), 15 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 fdd05acf604..b73de16e474 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
@@ -44,18 +44,8 @@ import java.util.stream.Collectors;
*/
public final class ShowDatabaseDiscoveryRuleExecutor implements RQLExecutor<ShowDatabaseDiscoveryRulesStatement> {
- private static final String GROUP_NAME = "group_name";
-
- private static final String DATA_SOURCE_NAMES = "data_source_names";
-
- private static final String PRIMARY_DATA_SOURCE_NAME = "primary_data_source_name";
-
private static final String NAME = "name";
- private static final String DISCOVER_TYPE = "discovery_type";
-
- private static final String HEARTBEAT = "discovery_heartbeat";
-
@Override
public Collection<LocalDataQueryResultRow> getRows(final ShardingSphereDatabase database, final ShowDatabaseDiscoveryRulesStatement sqlStatement) {
Optional<DatabaseDiscoveryRule> rule = database.getRuleMetaData().findSingleRule(DatabaseDiscoveryRule.class);
@@ -80,14 +70,18 @@ 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);
- result.add(new LocalDataQueryResultRow(groupName, String.join(",", dataSourceRuleConfig.getDataSourceNames()), primaryDataSourceName, typeMap, heartbeatMap));
+ if (null == sqlStatement.getRuleName()) {
+ result.add(new LocalDataQueryResultRow(groupName, String.join(",", dataSourceRuleConfig.getDataSourceNames()), primaryDataSourceName, typeMap, heartbeatMap));
+ } else if (sqlStatement.getRuleName().equalsIgnoreCase(groupName)) {
+ result.add(new LocalDataQueryResultRow(groupName, String.join(",", dataSourceRuleConfig.getDataSourceNames()), primaryDataSourceName, typeMap, heartbeatMap));
+ }
}
return result;
}
@Override
public Collection<String> getColumnNames() {
- return Arrays.asList(GROUP_NAME, DATA_SOURCE_NAMES, PRIMARY_DATA_SOURCE_NAME, DISCOVER_TYPE, HEARTBEAT);
+ return Arrays.asList("group_name", "data_source_names", "primary_data_source_name", "discovery_type", "discovery_heartbeat");
}
@SuppressWarnings("unchecked")
diff --git a/features/db-discovery/distsql/handler/src/test/java/org/apache/shardingsphere/dbdiscovery/distsql/handler/query/ShowDatabaseDiscoveryRuleExecutorTest.java b/features/db-discovery/distsql/handler/src/test/java/org/apache/shardingsphere/dbdiscovery/distsql/handler/query/ShowDatabaseDiscoveryRuleExecutorTest.java
index 484690d778f..ebddf3b4d9c 100644
--- a/features/db-discovery/distsql/handler/src/test/java/org/apache/shardingsphere/dbdiscovery/distsql/handler/query/ShowDatabaseDiscoveryRuleExecutorTest.java
+++ b/features/db-discovery/distsql/handler/src/test/java/org/apache/shardingsphere/dbdiscovery/distsql/handler/query/ShowDatabaseDiscoveryRuleExecutorTest.java
@@ -60,6 +60,20 @@ public final class ShowDatabaseDiscoveryRuleExecutorTest {
assertRowData(new ArrayList<>(executor.getRows(database, mock(ShowDatabaseDiscoveryRulesStatement.class))));
}
+ @Test
+ public void assertGetRowsWithSpecifiedRuleName() {
+ ShardingSphereDatabase database = mock(ShardingSphereDatabase.class, RETURNS_DEEP_STUBS);
+ DatabaseDiscoveryRule rule = mock(DatabaseDiscoveryRule.class, RETURNS_DEEP_STUBS);
+ when(rule.getConfiguration()).thenReturn(createRuleConfiguration());
+ DatabaseDiscoveryDataSourceRule dataSourceRule = mock(DatabaseDiscoveryDataSourceRule.class);
+ when(dataSourceRule.getPrimaryDataSourceName()).thenReturn("ds_0");
+ when(rule.getDataSourceRules()).thenReturn(Collections.singletonMap("ms_group", dataSourceRule));
+ when(database.getRuleMetaData()).thenReturn(new ShardingSphereRuleMetaData(Collections.singleton(rule)));
+ RQLExecutor<ShowDatabaseDiscoveryRulesStatement> executor = new ShowDatabaseDiscoveryRuleExecutor();
+ assertColumns(executor.getColumnNames());
+ assertRowData(new ArrayList<>(executor.getRows(database, new ShowDatabaseDiscoveryRulesStatement("ms_group", null))));
+ }
+
@Test
public void assertGetColumnNames() {
RQLExecutor<ShowDatabaseDiscoveryRulesStatement> executor = new ShowDatabaseDiscoveryRuleExecutor();
diff --git a/features/db-discovery/distsql/parser/src/main/antlr4/imports/db-discovery/RQLStatement.g4 b/features/db-discovery/distsql/parser/src/main/antlr4/imports/db-discovery/RQLStatement.g4
index 7f8c7a814d3..25addc2d0a8 100644
--- a/features/db-discovery/distsql/parser/src/main/antlr4/imports/db-discovery/RQLStatement.g4
+++ b/features/db-discovery/distsql/parser/src/main/antlr4/imports/db-discovery/RQLStatement.g4
@@ -20,7 +20,7 @@ grammar RQLStatement;
import BaseRule;
showDatabaseDiscoveryRules
- : SHOW DB_DISCOVERY RULES (FROM databaseName)?
+ : SHOW DB_DISCOVERY (RULE ruleName | RULES) (FROM databaseName)?
;
showDatabaseDiscoveryTypes
@@ -35,6 +35,10 @@ countDatabaseDiscoveryRule
: COUNT DB_DISCOVERY RULE (FROM databaseName)?
;
+ruleName
+ : IDENTIFIER_
+ ;
+
databaseName
: IDENTIFIER_
;
diff --git a/features/db-discovery/distsql/parser/src/main/java/org/apache/shardingsphere/dbdiscovery/distsql/parser/core/DatabaseDiscoveryDistSQLStatementVisitor.java b/features/db-discovery/distsql/parser/src/main/java/org/apache/shardingsphere/dbdiscovery/distsql/parser/core/DatabaseDiscoveryDistSQLStatementVisitor.java
index 57f4cef423f..178a16b291f 100644
--- a/features/db-discovery/distsql/parser/src/main/java/org/apache/shardingsphere/dbdiscovery/distsql/parser/core/DatabaseDiscoveryDistSQLStatementVisitor.java
+++ b/features/db-discovery/distsql/parser/src/main/java/org/apache/shardingsphere/dbdiscovery/distsql/parser/core/DatabaseDiscoveryDistSQLStatementVisitor.java
@@ -88,7 +88,8 @@ public final class DatabaseDiscoveryDistSQLStatementVisitor extends DatabaseDisc
@Override
public ASTNode visitShowDatabaseDiscoveryRules(final ShowDatabaseDiscoveryRulesContext ctx) {
- return new ShowDatabaseDiscoveryRulesStatement(null == ctx.databaseName() ? null : (DatabaseSegment) visit(ctx.databaseName()));
+ return new ShowDatabaseDiscoveryRulesStatement(null == ctx.ruleName() ? null : getIdentifierValue(ctx.ruleName()),
+ null == ctx.databaseName() ? null : (DatabaseSegment) visit(ctx.databaseName()));
}
@Override
diff --git a/features/db-discovery/distsql/statement/src/main/java/org/apache/shardingsphere/dbdiscovery/distsql/parser/statement/ShowDatabaseDiscoveryRulesStatement.java b/features/db-discovery/distsql/statement/src/main/java/org/apache/shardingsphere/dbdiscovery/distsql/parser/statement/ShowDatabaseDiscoveryRulesStatement.java
index a0d508a4942..ac5f38d4093 100644
--- a/features/db-discovery/distsql/statement/src/main/java/org/apache/shardingsphere/dbdiscovery/distsql/parser/statement/ShowDatabaseDiscoveryRulesStatement.java
+++ b/features/db-discovery/distsql/statement/src/main/java/org/apache/shardingsphere/dbdiscovery/distsql/parser/statement/ShowDatabaseDiscoveryRulesStatement.java
@@ -17,15 +17,20 @@
package org.apache.shardingsphere.dbdiscovery.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 database discovery rules statement.
*/
+@Getter
public final class ShowDatabaseDiscoveryRulesStatement extends ShowRulesStatement {
- public ShowDatabaseDiscoveryRulesStatement(final DatabaseSegment database) {
+ private final String ruleName;
+
+ public ShowDatabaseDiscoveryRulesStatement(final String ruleName, final DatabaseSegment database) {
super(database);
+ this.ruleName = ruleName;
}
}