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 3a1157e350a Refactor `ShardingTableNodesResultSet` (#23855)
3a1157e350a is described below

commit 3a1157e350ada5f37164a634c6f0f978150477ed
Author: Zichao <[email protected]>
AuthorDate: Tue Jan 31 18:31:33 2023 +1300

    Refactor `ShardingTableNodesResultSet` (#23855)
    
    * Replace `ShardingTableNodesResultSet` with 
`ShowShardingTableNodesExecutor`
    
    * Replace `ShardingTableNodesResultSet` with 
`ShowShardingTableNodesExecutor`
---
 .../sharding/show-sharding-table-nodes.cn.md       | 43 ++++++++++++++--
 .../sharding/show-sharding-table-nodes.en.md       | 41 +++++++++++++--
 ...et.java => ShowShardingTableNodesExecutor.java} | 40 ++++-----------
 ...hardingsphere.distsql.handler.query.RQLExecutor |  1 +
 ...here.distsql.handler.resultset.DistSQLResultSet |  1 -
 ...ava => ShowShardingTableNodesExecutorTest.java} | 59 ++++++++++++++++------
 6 files changed, 132 insertions(+), 53 deletions(-)

diff --git 
a/docs/document/content/user-manual/shardingsphere-proxy/distsql/syntax/rql/rule-query/sharding/show-sharding-table-nodes.cn.md
 
b/docs/document/content/user-manual/shardingsphere-proxy/distsql/syntax/rql/rule-query/sharding/show-sharding-table-nodes.cn.md
index 8c8bf58e180..17f599814e2 100644
--- 
a/docs/document/content/user-manual/shardingsphere-proxy/distsql/syntax/rql/rule-query/sharding/show-sharding-table-nodes.cn.md
+++ 
b/docs/document/content/user-manual/shardingsphere-proxy/distsql/syntax/rql/rule-query/sharding/show-sharding-table-nodes.cn.md
@@ -5,7 +5,7 @@ weight = 10
 
 ### 描述
 
-`SHOW SHARDING TABLE NODES` 语法用于查询指定逻辑库中的分片表的节点分布。
+`SHOW SHARDING TABLE NODES` 语法用于查询指定逻辑库中的指定分片表的节点分布。
 
 ### 语法
 
@@ -13,7 +13,10 @@ weight = 10
 {{% tab name="语法" %}}
 ```sql
 ShowShardingTableNode::=
-  'SHOW' 'SHARDING' 'TABLE' 'NODES' ('FROM' databaseName)?
+  'SHOW' 'SHARDING' 'TABLE' 'NODES' tableName? ('FROM' databaseName)?
+
+tableName ::=
+  identifier
 
 databaseName ::=
   identifier
@@ -37,7 +40,39 @@ databaseName ::=
 
 ### 示例
 
-- 查询指定逻辑库中的分片表的节点分布
+- 查询指定逻辑库中指定分片表的节点分布
+
+```sql
+SHOW SHARDING TABLE NODES t_order_item FROM sharding_db;
+```
+
+```sql
+mysql> SHOW SHARDING TABLE NODES t_order_item FROM sharding_db;
++--------------+------------------------------------------------------------------------------------------------------------+
+| name         | nodes                                                         
                                             |
++--------------+------------------------------------------------------------------------------------------------------------+
+| t_order_item | resource_0.t_order_item_0, resource_0.t_order_item_1, 
resource_1.t_order_item_0, resource_1.t_order_item_1 |
++--------------+------------------------------------------------------------------------------------------------------------+
+1 row in set (0.00 sec)
+```
+
+- 查询当前逻辑库中指定分片表的节点分布
+
+```sql
+SHOW SHARDING TABLE NODES t_order_item;
+```
+
+```sql
+mysql> SHOW SHARDING TABLE NODES t_order_item;
++--------------+------------------------------------------------------------------------------------------------------------+
+| name         | nodes                                                         
                                             |
++--------------+------------------------------------------------------------------------------------------------------------+
+| t_order_item | resource_0.t_order_item_0, resource_0.t_order_item_1, 
resource_1.t_order_item_0, resource_1.t_order_item_1 |
++--------------+------------------------------------------------------------------------------------------------------------+
+1 row in set (0.00 sec)
+```
+
+- 查询指定逻辑库中所有分片表的节点分布
 
 ```sql
 SHOW SHARDING TABLE NODES FROM sharding_db;
@@ -53,7 +88,7 @@ mysql> SHOW SHARDING TABLE NODES FROM sharding_db;
 1 row in set (0.00 sec)
 ```
 
-- 查询当前逻辑库中的分片表的节点分布
+- 查询当前逻辑库中所有分片表的节点分布
 
 ```sql
 SHOW SHARDING TABLE NODES;
diff --git 
a/docs/document/content/user-manual/shardingsphere-proxy/distsql/syntax/rql/rule-query/sharding/show-sharding-table-nodes.en.md
 
b/docs/document/content/user-manual/shardingsphere-proxy/distsql/syntax/rql/rule-query/sharding/show-sharding-table-nodes.en.md
index 4a35f9e3f41..ce7cefd259b 100644
--- 
a/docs/document/content/user-manual/shardingsphere-proxy/distsql/syntax/rql/rule-query/sharding/show-sharding-table-nodes.en.md
+++ 
b/docs/document/content/user-manual/shardingsphere-proxy/distsql/syntax/rql/rule-query/sharding/show-sharding-table-nodes.en.md
@@ -14,7 +14,10 @@ weight = 10
 {{% tab name="Grammar" %}}
 ```sql
 ShowShardingTableNode::=
-  'SHOW' 'SHARDING' 'TABLE' 'NODES' ('FROM' databaseName)?
+  'SHOW' 'SHARDING' 'TABLE' 'NODES' tableName? ('FROM' databaseName)?
+
+tableName ::=
+  identifier
 
 databaseName ::=
   identifier
@@ -38,7 +41,39 @@ databaseName ::=
 
 ### Example
 
-- Query sharding table nodes for the specified logical database
+- Query sharding table nodes for specified table in the specified logical 
database
+
+```sql
+SHOW SHARDING TABLE NODES t_order_item FROM sharding_db;
+```
+
+```sql
+mysql> SHOW SHARDING TABLE NODES t_order_item FROM sharding_db;
++--------------+------------------------------------------------------------------------------------------------------------+
+| name         | nodes                                                         
                                             |
++--------------+------------------------------------------------------------------------------------------------------------+
+| t_order_item | resource_0.t_order_item_0, resource_0.t_order_item_1, 
resource_1.t_order_item_0, resource_1.t_order_item_1 |
++--------------+------------------------------------------------------------------------------------------------------------+
+1 row in set (0.00 sec)
+```
+
+- Query sharding table nodes for specified table in the current logical 
database
+
+```sql
+SHOW SHARDING TABLE NODES t_order_item;
+```
+
+```sql
+mysql> SHOW SHARDING TABLE NODES t_order_item;
++--------------+------------------------------------------------------------------------------------------------------------+
+| name         | nodes                                                         
                                             |
++--------------+------------------------------------------------------------------------------------------------------------+
+| t_order_item | resource_0.t_order_item_0, resource_0.t_order_item_1, 
resource_1.t_order_item_0, resource_1.t_order_item_1 |
++--------------+------------------------------------------------------------------------------------------------------------+
+1 row in set (0.00 sec
+```
+
+- Query sharding table nodes for all tables in the specified logical database
 
 ```sql
 SHOW SHARDING TABLE NODES FROM sharding_db;
@@ -54,7 +89,7 @@ mysql> SHOW SHARDING TABLE NODES FROM sharding_db;
 1 row in set (0.00 sec)
 ```
 
-- Query sharding table nodes for the current logical database
+- Query sharding table nodes for all tables in the current logical database
 
 ```sql
 SHOW SHARDING TABLE NODES;
diff --git 
a/features/sharding/distsql/handler/src/main/java/org/apache/shardingsphere/sharding/distsql/handler/query/ShardingTableNodesResultSet.java
 
b/features/sharding/distsql/handler/src/main/java/org/apache/shardingsphere/sharding/distsql/handler/query/ShowShardingTableNodesExecutor.java
similarity index 66%
rename from 
features/sharding/distsql/handler/src/main/java/org/apache/shardingsphere/sharding/distsql/handler/query/ShardingTableNodesResultSet.java
rename to 
features/sharding/distsql/handler/src/main/java/org/apache/shardingsphere/sharding/distsql/handler/query/ShowShardingTableNodesExecutor.java
index 6809b0886fb..f7391adc0c6 100644
--- 
a/features/sharding/distsql/handler/src/main/java/org/apache/shardingsphere/sharding/distsql/handler/query/ShardingTableNodesResultSet.java
+++ 
b/features/sharding/distsql/handler/src/main/java/org/apache/shardingsphere/sharding/distsql/handler/query/ShowShardingTableNodesExecutor.java
@@ -17,20 +17,18 @@
 
 package org.apache.shardingsphere.sharding.distsql.handler.query;
 
-import 
org.apache.shardingsphere.distsql.handler.resultset.DatabaseDistSQLResultSet;
+import org.apache.shardingsphere.distsql.handler.query.RQLExecutor;
 import org.apache.shardingsphere.infra.datanode.DataNode;
+import 
org.apache.shardingsphere.infra.merge.result.impl.local.LocalDataQueryResultRow;
 import 
org.apache.shardingsphere.infra.metadata.database.ShardingSphereDatabase;
 import 
org.apache.shardingsphere.sharding.distsql.parser.statement.ShowShardingTableNodesStatement;
 import org.apache.shardingsphere.sharding.rule.ShardingRule;
 import org.apache.shardingsphere.sharding.rule.TableRule;
-import org.apache.shardingsphere.sql.parser.sql.common.statement.SQLStatement;
 
 import java.util.Arrays;
 import java.util.Collection;
 import java.util.Collections;
-import java.util.Iterator;
-import java.util.LinkedHashMap;
-import java.util.Map;
+import java.util.LinkedList;
 import java.util.Map.Entry;
 import java.util.Optional;
 import java.util.stream.Collectors;
@@ -38,30 +36,28 @@ import java.util.stream.Collectors;
 /**
  * Result set for show sharding table nodes.
  */
-public final class ShardingTableNodesResultSet implements 
DatabaseDistSQLResultSet {
+public final class ShowShardingTableNodesExecutor implements 
RQLExecutor<ShowShardingTableNodesStatement> {
     
     private static final String NAME = "name";
     
     private static final String NODES = "nodes";
     
-    private Iterator<Entry<String, String>> data = Collections.emptyIterator();
-    
     @Override
-    public void init(final ShardingSphereDatabase database, final SQLStatement 
sqlStatement) {
+    public Collection<LocalDataQueryResultRow> getRows(final 
ShardingSphereDatabase database, final ShowShardingTableNodesStatement 
sqlStatement) {
         Optional<ShardingRule> shardingRule = 
database.getRuleMetaData().findSingleRule(ShardingRule.class);
         if (!shardingRule.isPresent()) {
-            return;
+            return Collections.emptyList();
         }
-        Map<String, String> result = new LinkedHashMap<>();
-        String tableName = ((ShowShardingTableNodesStatement) 
sqlStatement).getTableName();
+        Collection<LocalDataQueryResultRow> result = new LinkedList<>();
+        String tableName = sqlStatement.getTableName();
         if (null == tableName) {
             for (Entry<String, TableRule> entry : 
shardingRule.get().getTableRules().entrySet()) {
-                result.put(entry.getKey(), getTableNodes(entry.getValue()));
+                result.add(new LocalDataQueryResultRow(entry.getKey(), 
getTableNodes(entry.getValue())));
             }
         } else {
-            result.put(tableName, 
getTableNodes(shardingRule.get().getTableRule(tableName)));
+            result.add(new LocalDataQueryResultRow(tableName, 
getTableNodes(shardingRule.get().getTableRule(tableName))));
         }
-        data = result.entrySet().iterator();
+        return result;
     }
     
     private String getTableNodes(final TableRule tableRule) {
@@ -73,20 +69,6 @@ public final class ShardingTableNodesResultSet implements 
DatabaseDistSQLResultS
         return Arrays.asList(NAME, NODES);
     }
     
-    @Override
-    public boolean next() {
-        return data.hasNext();
-    }
-    
-    @Override
-    public Collection<Object> getRowData() {
-        if (!data.hasNext()) {
-            return Collections.emptyList();
-        }
-        Entry<String, String> entry = data.next();
-        return Arrays.asList(entry.getKey(), entry.getValue());
-    }
-    
     @Override
     public String getType() {
         return ShowShardingTableNodesStatement.class.getName();
diff --git 
a/features/sharding/distsql/handler/src/main/resources/META-INF/services/org.apache.shardingsphere.distsql.handler.query.RQLExecutor
 
b/features/sharding/distsql/handler/src/main/resources/META-INF/services/org.apache.shardingsphere.distsql.handler.query.RQLExecutor
index 0ffd2c93085..562ba7833de 100644
--- 
a/features/sharding/distsql/handler/src/main/resources/META-INF/services/org.apache.shardingsphere.distsql.handler.query.RQLExecutor
+++ 
b/features/sharding/distsql/handler/src/main/resources/META-INF/services/org.apache.shardingsphere.distsql.handler.query.RQLExecutor
@@ -23,3 +23,4 @@ 
org.apache.shardingsphere.sharding.distsql.handler.query.ShowShardingAuditorsExe
 
org.apache.shardingsphere.sharding.distsql.handler.query.ShowShardingTableRulesUsedAlgorithmExecutor
 
org.apache.shardingsphere.sharding.distsql.handler.query.ShowShardingTableRulesUsedKeyGeneratorExecutor
 
org.apache.shardingsphere.sharding.distsql.handler.query.ShowShardingTableRulesUsedAuditorExecutor
+org.apache.shardingsphere.sharding.distsql.handler.query.ShowShardingTableNodesExecutor
diff --git 
a/features/sharding/distsql/handler/src/main/resources/META-INF/services/org.apache.shardingsphere.distsql.handler.resultset.DistSQLResultSet
 
b/features/sharding/distsql/handler/src/main/resources/META-INF/services/org.apache.shardingsphere.distsql.handler.resultset.DistSQLResultSet
index b957cbe61ed..7539893402f 100644
--- 
a/features/sharding/distsql/handler/src/main/resources/META-INF/services/org.apache.shardingsphere.distsql.handler.resultset.DistSQLResultSet
+++ 
b/features/sharding/distsql/handler/src/main/resources/META-INF/services/org.apache.shardingsphere.distsql.handler.resultset.DistSQLResultSet
@@ -17,7 +17,6 @@
 
 
org.apache.shardingsphere.sharding.distsql.handler.query.ShardingTableReferenceRuleResultSet
 
org.apache.shardingsphere.sharding.distsql.handler.query.BroadcastTableRuleResultSet
-org.apache.shardingsphere.sharding.distsql.handler.query.ShardingTableNodesResultSet
 
org.apache.shardingsphere.sharding.distsql.handler.query.UnusedShardingAlgorithmsResultSet
 
org.apache.shardingsphere.sharding.distsql.handler.query.UnusedShardingKeyGeneratorResultSet
 
org.apache.shardingsphere.sharding.distsql.handler.query.UnusedShardingAuditorsResultSet
diff --git 
a/features/sharding/distsql/handler/src/test/java/org/apache/shardingsphere/sharding/distsql/query/ShardingTableNodesResultSetTest.java
 
b/features/sharding/distsql/handler/src/test/java/org/apache/shardingsphere/sharding/distsql/query/ShowShardingTableNodesExecutorTest.java
similarity index 53%
rename from 
features/sharding/distsql/handler/src/test/java/org/apache/shardingsphere/sharding/distsql/query/ShardingTableNodesResultSetTest.java
rename to 
features/sharding/distsql/handler/src/test/java/org/apache/shardingsphere/sharding/distsql/query/ShowShardingTableNodesExecutorTest.java
index a7462c08892..3eeb0876b0e 100644
--- 
a/features/sharding/distsql/handler/src/test/java/org/apache/shardingsphere/sharding/distsql/query/ShardingTableNodesResultSetTest.java
+++ 
b/features/sharding/distsql/handler/src/test/java/org/apache/shardingsphere/sharding/distsql/query/ShowShardingTableNodesExecutorTest.java
@@ -18,13 +18,14 @@
 package org.apache.shardingsphere.sharding.distsql.query;
 
 import lombok.SneakyThrows;
-import 
org.apache.shardingsphere.distsql.handler.resultset.DatabaseDistSQLResultSet;
+import org.apache.shardingsphere.distsql.handler.query.RQLExecutor;
+import 
org.apache.shardingsphere.infra.merge.result.impl.local.LocalDataQueryResultRow;
 import 
org.apache.shardingsphere.infra.metadata.database.ShardingSphereDatabase;
 import 
org.apache.shardingsphere.infra.metadata.database.rule.ShardingSphereRuleMetaData;
 import org.apache.shardingsphere.infra.util.yaml.YamlEngine;
 import org.apache.shardingsphere.infra.yaml.config.pojo.YamlRootConfiguration;
 import org.apache.shardingsphere.sharding.api.config.ShardingRuleConfiguration;
-import 
org.apache.shardingsphere.sharding.distsql.handler.query.ShardingTableNodesResultSet;
+import 
org.apache.shardingsphere.sharding.distsql.handler.query.ShowShardingTableNodesExecutor;
 import 
org.apache.shardingsphere.sharding.distsql.parser.statement.ShowShardingTableNodesStatement;
 import org.apache.shardingsphere.sharding.rule.ShardingRule;
 import 
org.apache.shardingsphere.sharding.yaml.swapper.ShardingRuleConfigurationConverter;
@@ -33,10 +34,10 @@ import org.junit.Test;
 import java.io.File;
 import java.io.IOException;
 import java.net.URL;
-import java.util.ArrayList;
 import java.util.Arrays;
+import java.util.Collection;
 import java.util.Collections;
-import java.util.List;
+import java.util.Iterator;
 
 import static org.hamcrest.CoreMatchers.is;
 import static org.hamcrest.MatcherAssert.assertThat;
@@ -45,7 +46,7 @@ import static org.mockito.Mockito.RETURNS_DEEP_STUBS;
 import static org.mockito.Mockito.mock;
 import static org.mockito.Mockito.when;
 
-public final class ShardingTableNodesResultSetTest {
+public final class ShowShardingTableNodesExecutorTest {
     
     @Test
     public void assertGetRowData() {
@@ -54,6 +55,7 @@ public final class ShardingTableNodesResultSetTest {
         when(database.getRuleMetaData()).thenReturn(new 
ShardingSphereRuleMetaData(Collections.singleton(shardingRule)));
         assertOrder(database);
         assertOrderItem(database);
+        assertAll(database);
     }
     
     @SneakyThrows(IOException.class)
@@ -66,20 +68,45 @@ public final class ShardingTableNodesResultSetTest {
     }
     
     private void assertOrder(final ShardingSphereDatabase database) {
-        DatabaseDistSQLResultSet resultSet = new ShardingTableNodesResultSet();
-        resultSet.init(database, new 
ShowShardingTableNodesStatement("t_order", null));
-        List<Object> actual = new ArrayList<>(resultSet.getRowData());
-        assertThat(actual.size(), is(2));
-        assertThat(actual.get(0), is("t_order"));
-        assertThat(actual.get(1), is("ds_1.t_order_0, ds_2.t_order_1, 
ds_1.t_order_2, ds_2.t_order_3, ds_1.t_order_4, ds_2.t_order_5"));
+        RQLExecutor<ShowShardingTableNodesStatement> executor = new 
ShowShardingTableNodesExecutor();
+        Collection<LocalDataQueryResultRow> actual = 
executor.getRows(database, new ShowShardingTableNodesStatement("t_order", 
null));
+        assertThat(actual.size(), is(1));
+        Iterator<LocalDataQueryResultRow> iterator = actual.iterator();
+        LocalDataQueryResultRow row = iterator.next();
+        assertThat(row.getCell(1), is("t_order"));
+        assertThat(row.getCell(2), is("ds_1.t_order_0, ds_2.t_order_1, 
ds_1.t_order_2, ds_2.t_order_3, ds_1.t_order_4, ds_2.t_order_5"));
     }
     
     private void assertOrderItem(final ShardingSphereDatabase database) {
-        DatabaseDistSQLResultSet resultSet = new ShardingTableNodesResultSet();
-        resultSet.init(database, new 
ShowShardingTableNodesStatement("t_order_item", null));
-        List<Object> actual = new ArrayList<>(resultSet.getRowData());
+        RQLExecutor<ShowShardingTableNodesStatement> executor = new 
ShowShardingTableNodesExecutor();
+        Collection<LocalDataQueryResultRow> actual = 
executor.getRows(database, new ShowShardingTableNodesStatement("t_order_item", 
null));
+        assertThat(actual.size(), is(1));
+        Iterator<LocalDataQueryResultRow> iterator = actual.iterator();
+        LocalDataQueryResultRow row = iterator.next();
+        assertThat(row.getCell(1), is("t_order_item"));
+        assertThat(row.getCell(2), is("ds_2.t_order_item_0, 
ds_3.t_order_item_1, ds_2.t_order_item_2, ds_3.t_order_item_3, 
ds_2.t_order_item_4, ds_3.t_order_item_5"));
+    }
+    
+    private void assertAll(final ShardingSphereDatabase database) {
+        RQLExecutor<ShowShardingTableNodesStatement> executor = new 
ShowShardingTableNodesExecutor();
+        Collection<LocalDataQueryResultRow> actual = 
executor.getRows(database, new ShowShardingTableNodesStatement(null, null));
         assertThat(actual.size(), is(2));
-        assertThat(actual.get(0), is("t_order_item"));
-        assertThat(actual.get(1), is("ds_2.t_order_item_0, 
ds_3.t_order_item_1, ds_2.t_order_item_2, ds_3.t_order_item_3, 
ds_2.t_order_item_4, ds_3.t_order_item_5"));
+        Iterator<LocalDataQueryResultRow> iterator = actual.iterator();
+        LocalDataQueryResultRow row = iterator.next();
+        assertThat(row.getCell(1), is("t_order"));
+        assertThat(row.getCell(2), is("ds_1.t_order_0, ds_2.t_order_1, 
ds_1.t_order_2, ds_2.t_order_3, ds_1.t_order_4, ds_2.t_order_5"));
+        row = iterator.next();
+        assertThat(row.getCell(1), is("t_order_item"));
+        assertThat(row.getCell(2), is("ds_2.t_order_item_0, 
ds_3.t_order_item_1, ds_2.t_order_item_2, ds_3.t_order_item_3, 
ds_2.t_order_item_4, ds_3.t_order_item_5"));
+    }
+    
+    @Test
+    public void assertGetColumnNames() {
+        RQLExecutor<ShowShardingTableNodesStatement> executor = new 
ShowShardingTableNodesExecutor();
+        Collection<String> columns = executor.getColumnNames();
+        assertThat(columns.size(), is(2));
+        Iterator<String> iterator = columns.iterator();
+        assertThat(iterator.next(), is("name"));
+        assertThat(iterator.next(), is("nodes"));
     }
 }

Reply via email to