This is an automated email from the ASF dual-hosted git repository.

wuweijie 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 3269d1c  Reuse DataSourcesQueryBackendHandler to decouple 
DataSourcesQueryBackendHandler (#10905)
3269d1c is described below

commit 3269d1cc2bb5a2d46047c1c92c1f3a621c753753
Author: Liang Zhang <[email protected]>
AuthorDate: Tue Jun 22 12:36:02 2021 +0800

    Reuse DataSourcesQueryBackendHandler to decouple 
DataSourcesQueryBackendHandler (#10905)
    
    * Refactor DataSourcesQueryBackendHandler
    
    * Reuse DataSourcesQueryBackendHandler to decouple 
DataSourcesQueryBackendHandler
---
 .../text/distsql/rql/RQLBackendHandlerFactory.java |  8 ++--
 ...Handler.java => DataSourcesQueryResultSet.java} | 48 ++++++----------------
 2 files changed, 17 insertions(+), 39 deletions(-)

diff --git 
a/shardingsphere-proxy/shardingsphere-proxy-backend/src/main/java/org/apache/shardingsphere/proxy/backend/text/distsql/rql/RQLBackendHandlerFactory.java
 
b/shardingsphere-proxy/shardingsphere-proxy-backend/src/main/java/org/apache/shardingsphere/proxy/backend/text/distsql/rql/RQLBackendHandlerFactory.java
index 3130cca..1241f58 100644
--- 
a/shardingsphere-proxy/shardingsphere-proxy-backend/src/main/java/org/apache/shardingsphere/proxy/backend/text/distsql/rql/RQLBackendHandlerFactory.java
+++ 
b/shardingsphere-proxy/shardingsphere-proxy-backend/src/main/java/org/apache/shardingsphere/proxy/backend/text/distsql/rql/RQLBackendHandlerFactory.java
@@ -25,7 +25,7 @@ import 
org.apache.shardingsphere.distsql.parser.statement.rql.show.ShowResources
 import 
org.apache.shardingsphere.encrypt.distsql.parser.statement.ShowEncryptRulesStatement;
 import 
org.apache.shardingsphere.proxy.backend.communication.jdbc.connection.BackendConnection;
 import org.apache.shardingsphere.proxy.backend.text.TextProtocolBackendHandler;
-import 
org.apache.shardingsphere.proxy.backend.text.distsql.rql.impl.DataSourcesQueryBackendHandler;
+import 
org.apache.shardingsphere.proxy.backend.text.distsql.rql.impl.DataSourcesQueryResultSet;
 import 
org.apache.shardingsphere.proxy.backend.text.distsql.rql.impl.DatabaseDiscoveryRuleQueryResultSet;
 import 
org.apache.shardingsphere.proxy.backend.text.distsql.rql.impl.EncryptRuleQueryResultSet;
 import 
org.apache.shardingsphere.proxy.backend.text.distsql.rql.impl.ReadwriteSplittingRuleQueryResultSet;
@@ -51,13 +51,13 @@ public final class RQLBackendHandlerFactory {
      * @return RDL backend handler
      */
     public static TextProtocolBackendHandler newInstance(final RQLStatement 
sqlStatement, final BackendConnection backendConnection) {
-        if (sqlStatement instanceof ShowResourcesStatement) {
-            return new DataSourcesQueryBackendHandler((ShowResourcesStatement) 
sqlStatement, backendConnection);
-        }
         return new RuleQueryBackendHandler(sqlStatement, backendConnection, 
getRuleQueryResultSet(sqlStatement));
     }
     
     private static RuleQueryResultSet getRuleQueryResultSet(final RQLStatement 
sqlStatement) {
+        if (sqlStatement instanceof ShowResourcesStatement) {
+            return new DataSourcesQueryResultSet();
+        }
         if (sqlStatement instanceof ShowShardingBindingTableRulesStatement) {
             return new ShardingBindingTableRuleQueryResultSet();
         }
diff --git 
a/shardingsphere-proxy/shardingsphere-proxy-backend/src/main/java/org/apache/shardingsphere/proxy/backend/text/distsql/rql/impl/DataSourcesQueryBackendHandler.java
 
b/shardingsphere-proxy/shardingsphere-proxy-backend/src/main/java/org/apache/shardingsphere/proxy/backend/text/distsql/rql/impl/DataSourcesQueryResultSet.java
similarity index 57%
rename from 
shardingsphere-proxy/shardingsphere-proxy-backend/src/main/java/org/apache/shardingsphere/proxy/backend/text/distsql/rql/impl/DataSourcesQueryBackendHandler.java
rename to 
shardingsphere-proxy/shardingsphere-proxy-backend/src/main/java/org/apache/shardingsphere/proxy/backend/text/distsql/rql/impl/DataSourcesQueryResultSet.java
index 0256b43..869aaf1 100644
--- 
a/shardingsphere-proxy/shardingsphere-proxy-backend/src/main/java/org/apache/shardingsphere/proxy/backend/text/distsql/rql/impl/DataSourcesQueryBackendHandler.java
+++ 
b/shardingsphere-proxy/shardingsphere-proxy-backend/src/main/java/org/apache/shardingsphere/proxy/backend/text/distsql/rql/impl/DataSourcesQueryResultSet.java
@@ -18,64 +18,42 @@
 package org.apache.shardingsphere.proxy.backend.text.distsql.rql.impl;
 
 import com.google.gson.Gson;
-import 
org.apache.shardingsphere.distsql.parser.statement.rql.show.ShowResourcesStatement;
 import org.apache.shardingsphere.infra.config.datasource.DataSourceConverter;
 import org.apache.shardingsphere.infra.config.datasource.DataSourceParameter;
 import org.apache.shardingsphere.infra.database.metadata.DataSourceMetaData;
-import 
org.apache.shardingsphere.proxy.backend.communication.jdbc.connection.BackendConnection;
 import org.apache.shardingsphere.proxy.backend.context.ProxyContext;
-import org.apache.shardingsphere.proxy.backend.response.header.ResponseHeader;
-import 
org.apache.shardingsphere.proxy.backend.response.header.query.QueryResponseHeader;
-import 
org.apache.shardingsphere.proxy.backend.response.header.query.impl.QueryHeader;
-import 
org.apache.shardingsphere.proxy.backend.text.SchemaRequiredBackendHandler;
+import 
org.apache.shardingsphere.proxy.backend.text.distsql.rql.RuleQueryResultSet;
 import 
org.apache.shardingsphere.proxy.config.util.DataSourceParameterConverter;
+import org.apache.shardingsphere.sql.parser.sql.common.statement.SQLStatement;
 
-import java.sql.Types;
 import java.util.Arrays;
 import java.util.Collection;
 import java.util.HashMap;
 import java.util.Iterator;
-import java.util.LinkedList;
-import java.util.List;
 import java.util.Map;
 
 /**
- * Backend handler for show resources.
+ * Result set for show resources.
  */
-public final class DataSourcesQueryBackendHandler extends 
SchemaRequiredBackendHandler<ShowResourcesStatement> {
+public final class DataSourcesQueryResultSet implements RuleQueryResultSet {
     
     private Map<String, DataSourceParameter> dataSourceParameterMap;
     
-    private final String schema;
-    
     private Iterator<String> dataSourceNames;
     
-    public DataSourcesQueryBackendHandler(final ShowResourcesStatement 
sqlStatement, final BackendConnection backendConnection) {
-        super(sqlStatement, backendConnection);
-        if (sqlStatement.getSchema().isPresent()) {
-            schema = sqlStatement.getSchema().get().getIdentifier().getValue();
-        } else {
-            schema = backendConnection.getSchemaName();
-        }
-    }
+    private String schemaName;
     
     @Override
-    public ResponseHeader execute(final String schemaName, final 
ShowResourcesStatement sqlStatement) {
+    public void init(final String schemaName, final SQLStatement sqlStatement) 
{
+        this.schemaName = schemaName;
         dataSourceParameterMap = 
DataSourceParameterConverter.getDataSourceParameterMap(
-                
DataSourceConverter.getDataSourceConfigurationMap(ProxyContext.getInstance().getMetaData(schema).getResource().getDataSources()));
+                
DataSourceConverter.getDataSourceConfigurationMap(ProxyContext.getInstance().getMetaData(schemaName).getResource().getDataSources()));
         dataSourceNames = dataSourceParameterMap.keySet().iterator();
-        return new QueryResponseHeader(generateResponseHeader());
     }
     
-    private List<QueryHeader> generateResponseHeader() {
-        List<QueryHeader> result = new LinkedList<>();
-        result.add(new QueryHeader(schema, "", "name", "name", Types.CHAR, 
"CHAR", 255, 0, false, false, false, false));
-        result.add(new QueryHeader(schema, "", "type", "type", Types.CHAR, 
"CHAR", 255, 0, false, false, false, false));
-        result.add(new QueryHeader(schema, "", "host", "host", Types.CHAR, 
"CHAR", 255, 0, false, false, false, false));
-        result.add(new QueryHeader(schema, "", "port", "port", Types.BIGINT, 
"BIGINT", 255, 0, false, false, false, false));
-        result.add(new QueryHeader(schema, "", "db", "db", Types.CHAR, "CHAR", 
255, 0, false, false, false, false));
-        result.add(new QueryHeader(schema, "", "attribute", "attribute", 
Types.CHAR, "CHAR", 255, 0, false, false, false, false));
-        return result;
+    @Override
+    public Collection<String> getColumnNames() {
+        return Arrays.asList("name", "type", "host", "port", "db", 
"attribute");
     }
     
     @Override
@@ -86,7 +64,7 @@ public final class DataSourcesQueryBackendHandler extends 
SchemaRequiredBackendH
     @Override
     public Collection<Object> getRowData() {
         String dataSourceName = dataSourceNames.next();
-        DataSourceMetaData dataSourceMetaData = 
ProxyContext.getInstance().getMetaData(schema).getResource().getDataSourcesMetaData().getDataSourceMetaData(dataSourceName);
+        DataSourceMetaData dataSourceMetaData = 
ProxyContext.getInstance().getMetaData(schemaName).getResource().getDataSourcesMetaData().getDataSourceMetaData(dataSourceName);
         Map<Object, Object> attributeMap = new HashMap<>();
         attributeMap.put("connectionTimeoutMilliseconds", 
dataSourceParameterMap.get(dataSourceName).getConnectionTimeoutMilliseconds());
         attributeMap.put("idleTimeoutMilliseconds", 
dataSourceParameterMap.get(dataSourceName).getIdleTimeoutMilliseconds());
@@ -95,7 +73,7 @@ public final class DataSourcesQueryBackendHandler extends 
SchemaRequiredBackendH
         attributeMap.put("minPoolSize", 
dataSourceParameterMap.get(dataSourceName).getMinPoolSize());
         attributeMap.put("maintenanceIntervalMilliseconds", 
dataSourceParameterMap.get(dataSourceName).getMaintenanceIntervalMilliseconds());
         attributeMap.put("readOnly", 
dataSourceParameterMap.get(dataSourceName).isReadOnly());
-        String type = 
ProxyContext.getInstance().getMetaData(schema).getResource().getDatabaseType().getName();
+        String type = 
ProxyContext.getInstance().getMetaData(schemaName).getResource().getDatabaseType().getName();
         String host = dataSourceMetaData.getHostName();
         int port = dataSourceMetaData.getPort();
         String db = dataSourceMetaData.getCatalog();

Reply via email to