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