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

zhangyonglun 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 0dce49b  Fixes #8711 (#8748)
0dce49b is described below

commit 0dce49b97e45224042344137e50759d7f37c8d09
Author: Liang Zhang <[email protected]>
AuthorDate: Thu Dec 24 14:16:52 2020 +0800

    Fixes #8711 (#8748)
    
    * Add DEFAULT_FRONTEND_DATABASE_PROTOCOL_TYPE
    
    * Avoid throw no database selected exception for show databases
    
    * Fix test case
---
 .../response/header/query/impl/QueryHeaderBuilder.java       |  6 +++---
 .../backend/text/admin/DatabaseAdminQueryBackendHandler.java |  4 +++-
 .../text/admin/mysql/executor/ShowDatabasesExecutor.java     | 12 ++++++------
 .../frontend/protocol/FrontDatabaseProtocolTypeFactory.java  |  5 +++--
 .../protocol/FrontDatabaseProtocolTypeFactoryTest.java       |  5 ++---
 5 files changed, 17 insertions(+), 15 deletions(-)

diff --git 
a/shardingsphere-proxy/shardingsphere-proxy-backend/src/main/java/org/apache/shardingsphere/proxy/backend/response/header/query/impl/QueryHeaderBuilder.java
 
b/shardingsphere-proxy/shardingsphere-proxy-backend/src/main/java/org/apache/shardingsphere/proxy/backend/response/header/query/impl/QueryHeaderBuilder.java
index 1b6dab4..12646ac 100644
--- 
a/shardingsphere-proxy/shardingsphere-proxy-backend/src/main/java/org/apache/shardingsphere/proxy/backend/response/header/query/impl/QueryHeaderBuilder.java
+++ 
b/shardingsphere-proxy/shardingsphere-proxy-backend/src/main/java/org/apache/shardingsphere/proxy/backend/response/header/query/impl/QueryHeaderBuilder.java
@@ -65,10 +65,10 @@ public final class QueryHeaderBuilder {
     }
     
     private static QueryHeader build(final QueryResultMetaData 
queryResultMetaData, final ShardingSphereMetaData metaData, final String 
columnName, final int columnIndex) throws SQLException {
-        String schemaName = metaData.getName();
+        String schemaName = null == metaData ? "" : metaData.getName();
         String actualTableName = queryResultMetaData.getTableName(columnIndex);
-        Optional<DataNodeContainedRule> dataNodeContainedRule =
-                metaData.getRuleMetaData().getRules().stream().filter(each -> 
each instanceof DataNodeContainedRule).findFirst().map(rule -> 
(DataNodeContainedRule) rule);
+        Optional<DataNodeContainedRule> dataNodeContainedRule = null == 
metaData
+                ? Optional.empty() : 
metaData.getRuleMetaData().getRules().stream().filter(each -> each instanceof 
DataNodeContainedRule).findFirst().map(rule -> (DataNodeContainedRule) rule);
         String tableName;
         boolean primaryKey;
         if (null != actualTableName && dataNodeContainedRule.isPresent()) {
diff --git 
a/shardingsphere-proxy/shardingsphere-proxy-backend/src/main/java/org/apache/shardingsphere/proxy/backend/text/admin/DatabaseAdminQueryBackendHandler.java
 
b/shardingsphere-proxy/shardingsphere-proxy-backend/src/main/java/org/apache/shardingsphere/proxy/backend/text/admin/DatabaseAdminQueryBackendHandler.java
index ec37956..9442eb1 100644
--- 
a/shardingsphere-proxy/shardingsphere-proxy-backend/src/main/java/org/apache/shardingsphere/proxy/backend/text/admin/DatabaseAdminQueryBackendHandler.java
+++ 
b/shardingsphere-proxy/shardingsphere-proxy-backend/src/main/java/org/apache/shardingsphere/proxy/backend/text/admin/DatabaseAdminQueryBackendHandler.java
@@ -20,6 +20,7 @@ package org.apache.shardingsphere.proxy.backend.text.admin;
 import lombok.RequiredArgsConstructor;
 import 
org.apache.shardingsphere.infra.executor.sql.execute.result.query.QueryResultMetaData;
 import org.apache.shardingsphere.infra.merge.result.MergedResult;
+import org.apache.shardingsphere.infra.metadata.ShardingSphereMetaData;
 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;
@@ -59,8 +60,9 @@ public final class DatabaseAdminQueryBackendHandler 
implements TextProtocolBacke
     
     private List<QueryHeader> createResponseHeader() throws SQLException {
         List<QueryHeader> result = new 
ArrayList<>(queryResultMetaData.getColumnCount());
+        ShardingSphereMetaData metaData = null == 
backendConnection.getSchemaName() ? null : 
ProxyContext.getInstance().getMetaData(backendConnection.getSchemaName());
         for (int columnIndex = 1; columnIndex <= 
queryResultMetaData.getColumnCount(); columnIndex++) {
-            result.add(QueryHeaderBuilder.build(queryResultMetaData, 
ProxyContext.getInstance().getMetaData(backendConnection.getSchemaName()), 
columnIndex));
+            result.add(QueryHeaderBuilder.build(queryResultMetaData, metaData, 
columnIndex));
         }
         return result;
     }
diff --git 
a/shardingsphere-proxy/shardingsphere-proxy-backend/src/main/java/org/apache/shardingsphere/proxy/backend/text/admin/mysql/executor/ShowDatabasesExecutor.java
 
b/shardingsphere-proxy/shardingsphere-proxy-backend/src/main/java/org/apache/shardingsphere/proxy/backend/text/admin/mysql/executor/ShowDatabasesExecutor.java
index a68f6b9..2db5209 100644
--- 
a/shardingsphere-proxy/shardingsphere-proxy-backend/src/main/java/org/apache/shardingsphere/proxy/backend/text/admin/mysql/executor/ShowDatabasesExecutor.java
+++ 
b/shardingsphere-proxy/shardingsphere-proxy-backend/src/main/java/org/apache/shardingsphere/proxy/backend/text/admin/mysql/executor/ShowDatabasesExecutor.java
@@ -47,12 +47,6 @@ public final class ShowDatabasesExecutor implements 
DatabaseAdminQueryExecutor {
         mergedResult = new 
SingleLocalDataMergedResult(getSchemaNames(backendConnection));
     }
     
-    @Override
-    public QueryResultMetaData getQueryResultMetaData() {
-        return new RawQueryResultMetaData(
-                Collections.singletonList(new 
RawQueryResultColumnMetaData("SCHEMATA", "Database", "SCHEMA_NAME", 
Types.VARCHAR, "VARCHAR", 255, 0)));
-    }
-    
     private Collection<Object> getSchemaNames(final BackendConnection 
backendConnection) {
         Collection<Object> result = new 
LinkedList<>(ProxyContext.getInstance().getAllSchemaNames());
         Optional<ShardingSphereUser> user = 
ProxyContext.getInstance().getMetaDataContexts().getAuthentication().findUser(backendConnection.getUsername());
@@ -62,4 +56,10 @@ public final class ShowDatabasesExecutor implements 
DatabaseAdminQueryExecutor {
         }
         return result;
     }
+    
+    @Override
+    public QueryResultMetaData getQueryResultMetaData() {
+        return new RawQueryResultMetaData(
+                Collections.singletonList(new 
RawQueryResultColumnMetaData("SCHEMATA", "Database", "SCHEMA_NAME", 
Types.VARCHAR, "VARCHAR", 255, 0)));
+    }
 }
diff --git 
a/shardingsphere-proxy/shardingsphere-proxy-frontend/shardingsphere-proxy-frontend-core/src/main/java/org/apache/shardingsphere/proxy/frontend/protocol/FrontDatabaseProtocolTypeFactory.java
 
b/shardingsphere-proxy/shardingsphere-proxy-frontend/shardingsphere-proxy-frontend-core/src/main/java/org/apache/shardingsphere/proxy/frontend/protocol/FrontDatabaseProtocolTypeFactory.java
index a3034c1..9c9c11d 100644
--- 
a/shardingsphere-proxy/shardingsphere-proxy-frontend/shardingsphere-proxy-frontend-core/src/main/java/org/apache/shardingsphere/proxy/frontend/protocol/FrontDatabaseProtocolTypeFactory.java
+++ 
b/shardingsphere-proxy/shardingsphere-proxy-frontend/shardingsphere-proxy-frontend-core/src/main/java/org/apache/shardingsphere/proxy/frontend/protocol/FrontDatabaseProtocolTypeFactory.java
@@ -19,7 +19,6 @@ package org.apache.shardingsphere.proxy.frontend.protocol;
 
 import lombok.AccessLevel;
 import lombok.NoArgsConstructor;
-import 
org.apache.shardingsphere.infra.config.exception.ShardingSphereConfigurationException;
 import 
org.apache.shardingsphere.infra.config.properties.ConfigurationPropertyKey;
 import org.apache.shardingsphere.infra.database.type.DatabaseType;
 import org.apache.shardingsphere.infra.database.type.DatabaseTypeRegistry;
@@ -33,6 +32,8 @@ import java.util.Optional;
 @NoArgsConstructor(access = AccessLevel.PRIVATE)
 public final class FrontDatabaseProtocolTypeFactory {
     
+    private static final String DEFAULT_FRONTEND_DATABASE_PROTOCOL_TYPE = 
"MySQL";
+    
     /**
      * Get front database protocol type.
      * 
@@ -44,7 +45,7 @@ public final class FrontDatabaseProtocolTypeFactory {
             return configuredDatabaseType.get();
         }
         if 
(ProxyContext.getInstance().getMetaDataContexts().getAllSchemaNames().isEmpty())
 {
-            throw new ShardingSphereConfigurationException("Can not find any 
configured data sources and database frontend protocol type.");
+            return 
DatabaseTypeRegistry.getTrunkDatabaseType(DEFAULT_FRONTEND_DATABASE_PROTOCOL_TYPE);
         }
         String schemaName = 
ProxyContext.getInstance().getMetaDataContexts().getAllSchemaNames().iterator().next();
         return 
ProxyContext.getInstance().getMetaDataContexts().getMetaData(schemaName).getResource().getDatabaseType();
diff --git 
a/shardingsphere-proxy/shardingsphere-proxy-frontend/shardingsphere-proxy-frontend-core/src/test/java/org/apache/shardingsphere/proxy/frontend/protocol/FrontDatabaseProtocolTypeFactoryTest.java
 
b/shardingsphere-proxy/shardingsphere-proxy-frontend/shardingsphere-proxy-frontend-core/src/test/java/org/apache/shardingsphere/proxy/frontend/protocol/FrontDatabaseProtocolTypeFactoryTest.java
index 8404be1..58b9737 100644
--- 
a/shardingsphere-proxy/shardingsphere-proxy-frontend/shardingsphere-proxy-frontend-core/src/test/java/org/apache/shardingsphere/proxy/frontend/protocol/FrontDatabaseProtocolTypeFactoryTest.java
+++ 
b/shardingsphere-proxy/shardingsphere-proxy-frontend/shardingsphere-proxy-frontend-core/src/test/java/org/apache/shardingsphere/proxy/frontend/protocol/FrontDatabaseProtocolTypeFactoryTest.java
@@ -19,7 +19,6 @@ package org.apache.shardingsphere.proxy.frontend.protocol;
 
 import lombok.SneakyThrows;
 import org.apache.shardingsphere.infra.auth.Authentication;
-import 
org.apache.shardingsphere.infra.config.exception.ShardingSphereConfigurationException;
 import 
org.apache.shardingsphere.infra.config.properties.ConfigurationProperties;
 import 
org.apache.shardingsphere.infra.config.properties.ConfigurationPropertyKey;
 import 
org.apache.shardingsphere.infra.context.metadata.impl.StandardMetaDataContexts;
@@ -47,13 +46,13 @@ import static org.mockito.Mockito.when;
 
 public final class FrontDatabaseProtocolTypeFactoryTest {
     
-    @Test(expected = ShardingSphereConfigurationException.class)
+    @Test
     public void 
assertGetDatabaseTypeWhenThrowShardingSphereConfigurationException() {
         StandardMetaDataContexts metaDataContexts = new 
StandardMetaDataContexts(
                 Collections.emptyMap(), mock(ExecutorEngine.class), 
mock(Authentication.class), new ConfigurationProperties(new Properties()));
         setMetaDataContexts(metaDataContexts);
         assertTrue(metaDataContexts.getMetaDataMap().isEmpty());
-        FrontDatabaseProtocolTypeFactory.getDatabaseType();
+        
assertThat(FrontDatabaseProtocolTypeFactory.getDatabaseType().getName(), 
is("MySQL"));
     }
     
     @Test

Reply via email to