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