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 04:08:27 UTC
[shardingsphere] branch master updated: Make `ShowShardingTableReferenceRule`support query specified rule (#24170)
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 eabed449129 Make `ShowShardingTableReferenceRule`support query specified rule (#24170)
eabed449129 is described below
commit eabed449129207828d822753fb41ba35908794e7
Author: Zichao <57...@users.noreply.github.com>
AuthorDate: Wed Feb 15 12:08:20 2023 +0800
Make `ShowShardingTableReferenceRule`support query specified rule (#24170)
---
.../handler/query/ShowShardingTableReferenceRuleExecutor.java | 8 +++-----
.../query/ShowShardingTableReferenceRuleExecutorTest.java | 11 +++++++++++
.../parser/src/main/antlr4/imports/sharding/RQLStatement.g4 | 2 +-
.../distsql/parser/core/ShardingDistSQLStatementVisitor.java | 3 ++-
.../statement/ShowShardingTableReferenceRulesStatement.java | 7 ++++++-
.../driver/jdbc/core/resultset/DatabaseMetaDataResultSet.java | 6 +++---
6 files changed, 26 insertions(+), 11 deletions(-)
diff --git a/features/sharding/distsql/handler/src/main/java/org/apache/shardingsphere/sharding/distsql/handler/query/ShowShardingTableReferenceRuleExecutor.java b/features/sharding/distsql/handler/src/main/java/org/apache/shardingsphere/sharding/distsql/handler/query/ShowShardingTableReferenceRuleExecutor.java
index cf05539e0d8..53d3fcac0fa 100644
--- a/features/sharding/distsql/handler/src/main/java/org/apache/shardingsphere/sharding/distsql/handler/query/ShowShardingTableReferenceRuleExecutor.java
+++ b/features/sharding/distsql/handler/src/main/java/org/apache/shardingsphere/sharding/distsql/handler/query/ShowShardingTableReferenceRuleExecutor.java
@@ -44,15 +44,13 @@ public final class ShowShardingTableReferenceRuleExecutor implements RQLExecutor
}
Collection<LocalDataQueryResultRow> result = new LinkedList<>();
for (final ShardingTableReferenceRuleConfiguration referenceRule : ((ShardingRuleConfiguration) rule.get().getConfiguration()).getBindingTableGroups()) {
- result.add(new LocalDataQueryResultRow(referenceRule.getName(), referenceRule.getReference()));
+ if (null == sqlStatement.getRuleName() || referenceRule.getName().equalsIgnoreCase(sqlStatement.getRuleName())) {
+ result.add(new LocalDataQueryResultRow(referenceRule.getName(), referenceRule.getReference()));
+ }
}
return result;
}
- private Collection<ShardingTableReferenceRuleConfiguration> buildData(final ShardingRuleConfiguration ruleConfig) {
- return ruleConfig.getBindingTableGroups();
- }
-
@Override
public Collection<String> getColumnNames() {
return Arrays.asList("name", "sharding_table_reference");
diff --git a/features/sharding/distsql/handler/src/test/java/org/apache/shardingsphere/sharding/distsql/query/ShowShardingTableReferenceRuleExecutorTest.java b/features/sharding/distsql/handler/src/test/java/org/apache/shardingsphere/sharding/distsql/query/ShowShardingTableReferenceRuleExecutorTest.java
index 837ebad9712..1be2133cee3 100644
--- a/features/sharding/distsql/handler/src/test/java/org/apache/shardingsphere/sharding/distsql/query/ShowShardingTableReferenceRuleExecutorTest.java
+++ b/features/sharding/distsql/handler/src/test/java/org/apache/shardingsphere/sharding/distsql/query/ShowShardingTableReferenceRuleExecutorTest.java
@@ -53,6 +53,17 @@ public final class ShowShardingTableReferenceRuleExecutorTest {
assertThat(row.getCell(2), is("t_order,t_order_item"));
}
+ @Test
+ public void assertGetRowDataWithSpecifiedRuleName() {
+ RQLExecutor<ShowShardingTableReferenceRulesStatement> executor = new ShowShardingTableReferenceRuleExecutor();
+ Collection<LocalDataQueryResultRow> actual = executor.getRows(mockDatabase(), new ShowShardingTableReferenceRulesStatement("foo", null));
+ assertThat(actual.size(), is(1));
+ Iterator<LocalDataQueryResultRow> iterator = actual.iterator();
+ LocalDataQueryResultRow row = iterator.next();
+ assertThat(row.getCell(1), is("foo"));
+ assertThat(row.getCell(2), is("t_order,t_order_item"));
+ }
+
@Test
public void assertGetColumnNames() {
RQLExecutor<ShowShardingTableReferenceRulesStatement> executor = new ShowShardingTableReferenceRuleExecutor();
diff --git a/features/sharding/distsql/parser/src/main/antlr4/imports/sharding/RQLStatement.g4 b/features/sharding/distsql/parser/src/main/antlr4/imports/sharding/RQLStatement.g4
index d2923c72775..cc021eb5cd1 100644
--- a/features/sharding/distsql/parser/src/main/antlr4/imports/sharding/RQLStatement.g4
+++ b/features/sharding/distsql/parser/src/main/antlr4/imports/sharding/RQLStatement.g4
@@ -24,7 +24,7 @@ showShardingTableRules
;
showShardingTableReferenceRules
- : SHOW SHARDING TABLE REFERENCE RULES (FROM databaseName)?
+ : SHOW SHARDING TABLE REFERENCE (RULE ruleName | RULES) (FROM databaseName)?
;
showBroadcastTableRules
diff --git a/features/sharding/distsql/parser/src/main/java/org/apache/shardingsphere/sharding/distsql/parser/core/ShardingDistSQLStatementVisitor.java b/features/sharding/distsql/parser/src/main/java/org/apache/shardingsphere/sharding/distsql/parser/core/ShardingDistSQLStatementVisitor.java
index fc32fd215fd..43b68e40ff2 100644
--- a/features/sharding/distsql/parser/src/main/java/org/apache/shardingsphere/sharding/distsql/parser/core/ShardingDistSQLStatementVisitor.java
+++ b/features/sharding/distsql/parser/src/main/java/org/apache/shardingsphere/sharding/distsql/parser/core/ShardingDistSQLStatementVisitor.java
@@ -378,7 +378,8 @@ public final class ShardingDistSQLStatementVisitor extends ShardingDistSQLStatem
@Override
public ASTNode visitShowShardingTableReferenceRules(final ShowShardingTableReferenceRulesContext ctx) {
- return new ShowShardingTableReferenceRulesStatement(null == ctx.databaseName() ? null : (DatabaseSegment) visit(ctx.databaseName()));
+ return new ShowShardingTableReferenceRulesStatement(null == ctx.ruleName() ? null : getIdentifierValue(ctx.ruleName()),
+ null == ctx.databaseName() ? null : (DatabaseSegment) visit(ctx.databaseName()));
}
@Override
diff --git a/features/sharding/distsql/statement/src/main/java/org/apache/shardingsphere/sharding/distsql/parser/statement/ShowShardingTableReferenceRulesStatement.java b/features/sharding/distsql/statement/src/main/java/org/apache/shardingsphere/sharding/distsql/parser/statement/ShowShardingTableReferenceRulesStatement.java
index 4628c8f9217..bbb67698790 100644
--- a/features/sharding/distsql/statement/src/main/java/org/apache/shardingsphere/sharding/distsql/parser/statement/ShowShardingTableReferenceRulesStatement.java
+++ b/features/sharding/distsql/statement/src/main/java/org/apache/shardingsphere/sharding/distsql/parser/statement/ShowShardingTableReferenceRulesStatement.java
@@ -17,15 +17,20 @@
package org.apache.shardingsphere.sharding.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 sharding table reference rules statement.
*/
+@Getter
public final class ShowShardingTableReferenceRulesStatement extends ShowRulesStatement {
- public ShowShardingTableReferenceRulesStatement(final DatabaseSegment database) {
+ private final String ruleName;
+
+ public ShowShardingTableReferenceRulesStatement(final String ruleName, final DatabaseSegment database) {
super(database);
+ this.ruleName = ruleName;
}
}
diff --git a/jdbc/core/src/main/java/org/apache/shardingsphere/driver/jdbc/core/resultset/DatabaseMetaDataResultSet.java b/jdbc/core/src/main/java/org/apache/shardingsphere/driver/jdbc/core/resultset/DatabaseMetaDataResultSet.java
index 0491c006e7f..cb2844f6a85 100644
--- a/jdbc/core/src/main/java/org/apache/shardingsphere/driver/jdbc/core/resultset/DatabaseMetaDataResultSet.java
+++ b/jdbc/core/src/main/java/org/apache/shardingsphere/driver/jdbc/core/resultset/DatabaseMetaDataResultSet.java
@@ -175,12 +175,12 @@ public final class DatabaseMetaDataResultSet extends AbstractUnsupportedDatabase
public BigDecimal getBigDecimal(final String columnLabel) throws SQLException {
return getBigDecimal(findColumn(columnLabel));
}
-
+
@Override
public Statement getStatement() throws SQLException {
return resultSet.getStatement();
}
-
+
@Override
public String getString(final int columnIndex) throws SQLException {
checkClosed();
@@ -209,7 +209,7 @@ public final class DatabaseMetaDataResultSet extends AbstractUnsupportedDatabase
checkColumnIndex(columnIndex);
return (boolean) ResultSetUtil.convertValue(currentDatabaseMetaDataObject.getObject(columnIndex), boolean.class);
}
-
+
@Override
public boolean getBoolean(final String columnLabel) throws SQLException {
return getBoolean(findColumn(columnLabel));