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 b3ddd6ccfa4 Refactor `DatabaseDiscoveryRuleResultSet`  (#23788)
b3ddd6ccfa4 is described below

commit b3ddd6ccfa405b29bcfc9bd63e8be0aa79cd955a
Author: Zichao <[email protected]>
AuthorDate: Sun Jan 29 05:14:52 2023 +1300

    Refactor `DatabaseDiscoveryRuleResultSet`  (#23788)
    
    * Replace `DatabaseDiscoveryRuleResultSet` with 
`ShowDatabaseDiscoveryRuleExecutor`
    
    * Replace `DatabaseDiscoveryRuleResultSet` with 
`ShowDatabaseDiscoveryRuleExecutor`
    
    * Replace `DatabaseDiscoveryRuleResultSet` with 
`ShowDatabaseDiscoveryRuleExecutor`
    
    * Replace `DatabaseDiscoveryRuleResultSet` with 
`ShowDatabaseDiscoveryRuleExecutor`
---
 ...java => ShowDatabaseDiscoveryRuleExecutor.java} | 63 +++++++++-------------
 ...ardingsphere.distsql.handler.query.RQLExecutor} |  5 +-
 ...here.distsql.handler.resultset.DistSQLResultSet |  1 -
 ... => ShowDatabaseDiscoveryRuleExecutorTest.java} | 40 +++++++-------
 4 files changed, 45 insertions(+), 64 deletions(-)

diff --git 
a/features/db-discovery/distsql/handler/src/main/java/org/apache/shardingsphere/dbdiscovery/distsql/handler/query/DatabaseDiscoveryRuleResultSet.java
 
b/features/db-discovery/distsql/handler/src/main/java/org/apache/shardingsphere/dbdiscovery/distsql/handler/query/ShowDatabaseDiscoveryRuleExecutor.java
similarity index 60%
rename from 
features/db-discovery/distsql/handler/src/main/java/org/apache/shardingsphere/dbdiscovery/distsql/handler/query/DatabaseDiscoveryRuleResultSet.java
rename to 
features/db-discovery/distsql/handler/src/main/java/org/apache/shardingsphere/dbdiscovery/distsql/handler/query/ShowDatabaseDiscoveryRuleExecutor.java
index b6c0d193ac7..fdd05acf604 100644
--- 
a/features/db-discovery/distsql/handler/src/main/java/org/apache/shardingsphere/dbdiscovery/distsql/handler/query/DatabaseDiscoveryRuleResultSet.java
+++ 
b/features/db-discovery/distsql/handler/src/main/java/org/apache/shardingsphere/dbdiscovery/distsql/handler/query/ShowDatabaseDiscoveryRuleExecutor.java
@@ -23,25 +23,26 @@ import 
org.apache.shardingsphere.dbdiscovery.api.config.rule.DatabaseDiscoveryDa
 import 
org.apache.shardingsphere.dbdiscovery.api.config.rule.DatabaseDiscoveryHeartBeatConfiguration;
 import 
org.apache.shardingsphere.dbdiscovery.distsql.parser.statement.ShowDatabaseDiscoveryRulesStatement;
 import org.apache.shardingsphere.dbdiscovery.rule.DatabaseDiscoveryRule;
+import org.apache.shardingsphere.distsql.handler.query.RQLExecutor;
 import org.apache.shardingsphere.infra.config.algorithm.AlgorithmConfiguration;
-import 
org.apache.shardingsphere.distsql.handler.resultset.DatabaseDistSQLResultSet;
+import 
org.apache.shardingsphere.infra.merge.result.impl.local.LocalDataQueryResultRow;
 import 
org.apache.shardingsphere.infra.metadata.database.ShardingSphereDatabase;
-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.LinkedList;
 import java.util.Map;
 import java.util.Map.Entry;
 import java.util.Optional;
 import java.util.stream.Collectors;
 
 /**
- * Result set for show database discovery rule.
+ * Show database discovery rule executor.
  */
-public final class DatabaseDiscoveryRuleResultSet implements 
DatabaseDistSQLResultSet {
+public final class ShowDatabaseDiscoveryRuleExecutor implements 
RQLExecutor<ShowDatabaseDiscoveryRulesStatement> {
     
     private static final String GROUP_NAME = "group_name";
     
@@ -55,26 +56,33 @@ public final class DatabaseDiscoveryRuleResultSet 
implements DatabaseDistSQLResu
     
     private static final String HEARTBEAT = "discovery_heartbeat";
     
-    private Iterator<DatabaseDiscoveryDataSourceRuleConfiguration> 
dataSourceRules;
-    
-    private Map<String, AlgorithmConfiguration> discoveryTypes;
-    
-    private Map<String, DatabaseDiscoveryHeartBeatConfiguration> 
discoveryHeartbeats;
-    
-    private Map<String, String> primaryDataSources;
-    
     @Override
-    public void init(final ShardingSphereDatabase database, final SQLStatement 
sqlStatement) {
+    public Collection<LocalDataQueryResultRow> getRows(final 
ShardingSphereDatabase database, final ShowDatabaseDiscoveryRulesStatement 
sqlStatement) {
         Optional<DatabaseDiscoveryRule> rule = 
database.getRuleMetaData().findSingleRule(DatabaseDiscoveryRule.class);
+        Iterator<DatabaseDiscoveryDataSourceRuleConfiguration> dataSourceRules;
         if (!rule.isPresent()) {
-            dataSourceRules = Collections.emptyIterator();
-            return;
+            return Collections.emptyList();
         }
         DatabaseDiscoveryRuleConfiguration ruleConfig = 
(DatabaseDiscoveryRuleConfiguration) rule.get().getConfiguration();
         dataSourceRules = ruleConfig.getDataSources().iterator();
-        discoveryTypes = ruleConfig.getDiscoveryTypes();
-        discoveryHeartbeats = ruleConfig.getDiscoveryHeartbeats();
-        primaryDataSources = 
rule.get().getDataSourceRules().entrySet().stream().collect(Collectors.toMap(Entry::getKey,
 entry -> entry.getValue().getPrimaryDataSourceName(), (a, b) -> b));
+        Map<String, AlgorithmConfiguration> discoveryTypes = 
ruleConfig.getDiscoveryTypes();
+        Map<String, DatabaseDiscoveryHeartBeatConfiguration> 
discoveryHeartbeats = ruleConfig.getDiscoveryHeartbeats();
+        Map<String, String> primaryDataSources = 
rule.get().getDataSourceRules().entrySet().stream()
+                .collect(Collectors.toMap(Entry::getKey, entry -> 
entry.getValue().getPrimaryDataSourceName(), (a, b) -> b));
+        Collection<LocalDataQueryResultRow> result = new LinkedList<>();
+        while (dataSourceRules.hasNext()) {
+            DatabaseDiscoveryDataSourceRuleConfiguration dataSourceRuleConfig 
= dataSourceRules.next();
+            Map<String, String> typeMap = new LinkedHashMap<>();
+            typeMap.put(NAME, dataSourceRuleConfig.getDiscoveryTypeName());
+            
typeMap.putAll(convertToMap(discoveryTypes.get(dataSourceRuleConfig.getDiscoveryTypeName())));
+            Map<String, String> heartbeatMap = new LinkedHashMap<>();
+            heartbeatMap.put(NAME, 
dataSourceRuleConfig.getDiscoveryHeartbeatName());
+            
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));
+        }
+        return result;
     }
     
     @Override
@@ -82,25 +90,6 @@ public final class DatabaseDiscoveryRuleResultSet implements 
DatabaseDistSQLResu
         return Arrays.asList(GROUP_NAME, DATA_SOURCE_NAMES, 
PRIMARY_DATA_SOURCE_NAME, DISCOVER_TYPE, HEARTBEAT);
     }
     
-    @Override
-    public boolean next() {
-        return dataSourceRules.hasNext();
-    }
-    
-    @Override
-    public Collection<Object> getRowData() {
-        DatabaseDiscoveryDataSourceRuleConfiguration dataSourceRuleConfig = 
dataSourceRules.next();
-        Map<String, String> typeMap = new LinkedHashMap<>();
-        typeMap.put(NAME, dataSourceRuleConfig.getDiscoveryTypeName());
-        
typeMap.putAll(convertToMap(discoveryTypes.get(dataSourceRuleConfig.getDiscoveryTypeName())));
-        Map<String, String> heartbeatMap = new LinkedHashMap<>();
-        heartbeatMap.put(NAME, 
dataSourceRuleConfig.getDiscoveryHeartbeatName());
-        
heartbeatMap.putAll(convertToMap(discoveryHeartbeats.get(dataSourceRuleConfig.getDiscoveryHeartbeatName())));
-        String groupName = dataSourceRuleConfig.getGroupName();
-        String primaryDataSourceName = null == 
primaryDataSources.get(groupName) ? "" : primaryDataSources.get(groupName);
-        return Arrays.asList(groupName, String.join(",", 
dataSourceRuleConfig.getDataSourceNames()), primaryDataSourceName, typeMap, 
heartbeatMap);
-    }
-    
     @SuppressWarnings("unchecked")
     private Map<String, String> convertToMap(final Object obj) {
         return null == obj ? Collections.emptyMap() : new Gson().fromJson(new 
Gson().toJson(obj), LinkedHashMap.class);
diff --git 
a/features/db-discovery/distsql/handler/src/main/resources/META-INF/services/org.apache.shardingsphere.distsql.handler.resultset.DistSQLResultSet
 
b/features/db-discovery/distsql/handler/src/main/resources/META-INF/services/org.apache.shardingsphere.distsql.handler.query.RQLExecutor
similarity index 67%
copy from 
features/db-discovery/distsql/handler/src/main/resources/META-INF/services/org.apache.shardingsphere.distsql.handler.resultset.DistSQLResultSet
copy to 
features/db-discovery/distsql/handler/src/main/resources/META-INF/services/org.apache.shardingsphere.distsql.handler.query.RQLExecutor
index 1dbe50b229d..c6ffa89b25d 100644
--- 
a/features/db-discovery/distsql/handler/src/main/resources/META-INF/services/org.apache.shardingsphere.distsql.handler.resultset.DistSQLResultSet
+++ 
b/features/db-discovery/distsql/handler/src/main/resources/META-INF/services/org.apache.shardingsphere.distsql.handler.query.RQLExecutor
@@ -15,7 +15,4 @@
 # limitations under the License.
 #
 
-org.apache.shardingsphere.dbdiscovery.distsql.handler.query.DatabaseDiscoveryRuleResultSet
-org.apache.shardingsphere.dbdiscovery.distsql.handler.query.DatabaseDiscoveryTypeResultSet
-org.apache.shardingsphere.dbdiscovery.distsql.handler.query.DatabaseDiscoveryHeartbeatResultSet
-org.apache.shardingsphere.dbdiscovery.distsql.handler.query.CountDatabaseDiscoveryRuleResultSet
+org.apache.shardingsphere.dbdiscovery.distsql.handler.query.ShowDatabaseDiscoveryRuleExecutor
diff --git 
a/features/db-discovery/distsql/handler/src/main/resources/META-INF/services/org.apache.shardingsphere.distsql.handler.resultset.DistSQLResultSet
 
b/features/db-discovery/distsql/handler/src/main/resources/META-INF/services/org.apache.shardingsphere.distsql.handler.resultset.DistSQLResultSet
index 1dbe50b229d..a504b7063a7 100644
--- 
a/features/db-discovery/distsql/handler/src/main/resources/META-INF/services/org.apache.shardingsphere.distsql.handler.resultset.DistSQLResultSet
+++ 
b/features/db-discovery/distsql/handler/src/main/resources/META-INF/services/org.apache.shardingsphere.distsql.handler.resultset.DistSQLResultSet
@@ -15,7 +15,6 @@
 # limitations under the License.
 #
 
-org.apache.shardingsphere.dbdiscovery.distsql.handler.query.DatabaseDiscoveryRuleResultSet
 
org.apache.shardingsphere.dbdiscovery.distsql.handler.query.DatabaseDiscoveryTypeResultSet
 
org.apache.shardingsphere.dbdiscovery.distsql.handler.query.DatabaseDiscoveryHeartbeatResultSet
 
org.apache.shardingsphere.dbdiscovery.distsql.handler.query.CountDatabaseDiscoveryRuleResultSet
diff --git 
a/features/db-discovery/distsql/handler/src/test/java/org/apache/shardingsphere/dbdiscovery/distsql/handler/query/DatabaseDiscoveryRuleResultSetTest.java
 
b/features/db-discovery/distsql/handler/src/test/java/org/apache/shardingsphere/dbdiscovery/distsql/handler/query/ShowDatabaseDiscoveryRuleExecutorTest.java
similarity index 74%
rename from 
features/db-discovery/distsql/handler/src/test/java/org/apache/shardingsphere/dbdiscovery/distsql/handler/query/DatabaseDiscoveryRuleResultSetTest.java
rename to 
features/db-discovery/distsql/handler/src/test/java/org/apache/shardingsphere/dbdiscovery/distsql/handler/query/ShowDatabaseDiscoveryRuleExecutorTest.java
index e15e2087572..484690d778f 100644
--- 
a/features/db-discovery/distsql/handler/src/test/java/org/apache/shardingsphere/dbdiscovery/distsql/handler/query/DatabaseDiscoveryRuleResultSetTest.java
+++ 
b/features/db-discovery/distsql/handler/src/test/java/org/apache/shardingsphere/dbdiscovery/distsql/handler/query/ShowDatabaseDiscoveryRuleExecutorTest.java
@@ -23,8 +23,9 @@ import 
org.apache.shardingsphere.dbdiscovery.api.config.rule.DatabaseDiscoveryHe
 import 
org.apache.shardingsphere.dbdiscovery.distsql.parser.statement.ShowDatabaseDiscoveryRulesStatement;
 import 
org.apache.shardingsphere.dbdiscovery.rule.DatabaseDiscoveryDataSourceRule;
 import org.apache.shardingsphere.dbdiscovery.rule.DatabaseDiscoveryRule;
-import 
org.apache.shardingsphere.distsql.handler.resultset.DatabaseDistSQLResultSet;
+import org.apache.shardingsphere.distsql.handler.query.RQLExecutor;
 import org.apache.shardingsphere.infra.config.algorithm.AlgorithmConfiguration;
+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.junit.Test;
@@ -33,22 +34,20 @@ import java.util.ArrayList;
 import java.util.Arrays;
 import java.util.Collection;
 import java.util.Collections;
-import java.util.List;
 import java.util.Map;
 import java.util.Properties;
 
 import static org.hamcrest.CoreMatchers.is;
 import static org.hamcrest.MatcherAssert.assertThat;
-import static org.junit.Assert.assertFalse;
 import static org.junit.Assert.assertTrue;
 import static org.mockito.Mockito.RETURNS_DEEP_STUBS;
 import static org.mockito.Mockito.mock;
 import static org.mockito.Mockito.when;
 
-public final class DatabaseDiscoveryRuleResultSetTest {
+public final class ShowDatabaseDiscoveryRuleExecutorTest {
     
     @Test
-    public void assertInit() {
+    public void assertGetRows() {
         ShardingSphereDatabase database = mock(ShardingSphereDatabase.class, 
RETURNS_DEEP_STUBS);
         DatabaseDiscoveryRule rule = mock(DatabaseDiscoveryRule.class, 
RETURNS_DEEP_STUBS);
         when(rule.getConfiguration()).thenReturn(createRuleConfiguration());
@@ -56,19 +55,15 @@ public final class DatabaseDiscoveryRuleResultSetTest {
         when(dataSourceRule.getPrimaryDataSourceName()).thenReturn("ds_0");
         
when(rule.getDataSourceRules()).thenReturn(Collections.singletonMap("ms_group", 
dataSourceRule));
         when(database.getRuleMetaData()).thenReturn(new 
ShardingSphereRuleMetaData(Collections.singleton(rule)));
-        DatabaseDistSQLResultSet resultSet = new 
DatabaseDiscoveryRuleResultSet();
-        resultSet.init(database, 
mock(ShowDatabaseDiscoveryRulesStatement.class));
-        assertColumns(resultSet.getColumnNames());
-        assertRowData(new ArrayList<>(resultSet.getRowData()));
+        RQLExecutor<ShowDatabaseDiscoveryRulesStatement> executor = new 
ShowDatabaseDiscoveryRuleExecutor();
+        assertColumns(executor.getColumnNames());
+        assertRowData(new ArrayList<>(executor.getRows(database, 
mock(ShowDatabaseDiscoveryRulesStatement.class))));
     }
     
     @Test
-    public void assertInitWithNullDatabaseDiscoveryRule() {
-        ShardingSphereDatabase database = mock(ShardingSphereDatabase.class, 
RETURNS_DEEP_STUBS);
-        DatabaseDistSQLResultSet resultSet = new 
DatabaseDiscoveryRuleResultSet();
-        resultSet.init(database, 
mock(ShowDatabaseDiscoveryRulesStatement.class));
-        assertColumns(resultSet.getColumnNames());
-        assertFalse(resultSet.next());
+    public void assertGetColumnNames() {
+        RQLExecutor<ShowDatabaseDiscoveryRulesStatement> executor = new 
ShowDatabaseDiscoveryRuleExecutor();
+        assertColumns(executor.getColumnNames());
     }
     
     private DatabaseDiscoveryRuleConfiguration createRuleConfiguration() {
@@ -85,12 +80,13 @@ public final class DatabaseDiscoveryRuleResultSetTest {
         assertTrue(actual.containsAll(Arrays.asList("group_name", 
"data_source_names", "primary_data_source_name", "discovery_type", 
"discovery_heartbeat")));
     }
     
-    private void assertRowData(final List<Object> actual) {
-        assertThat(actual.size(), is(5));
-        assertThat(actual.get(0), is("ms_group"));
-        assertThat(actual.get(1), is("ds_0,ds_1"));
-        assertThat(actual.get(2), is("ds_0"));
-        assertThat(actual.get(3).toString(), is("{name=type_test, 
type=MySQL.MGR, props={}}"));
-        assertThat(actual.get(4).toString(), is("{name=heartbeat_test, 
props={}}"));
+    private void assertRowData(final Collection<LocalDataQueryResultRow> 
actual) {
+        assertThat(actual.size(), is(1));
+        LocalDataQueryResultRow row = actual.iterator().next();
+        assertThat(row.getCell(1), is("ms_group"));
+        assertThat(row.getCell(2), is("ds_0,ds_1"));
+        assertThat(row.getCell(3), is("ds_0"));
+        assertThat(row.getCell(4).toString(), is("{name=type_test, 
type=MySQL.MGR, props={}}"));
+        assertThat(row.getCell(5).toString(), is("{name=heartbeat_test, 
props={}}"));
     }
 }

Reply via email to