You are viewing a plain text version of this content. The canonical link for it is here.
Posted to notifications@shardingsphere.apache.org by zh...@apache.org on 2020/12/24 06:17:20 UTC
[shardingsphere] branch master updated: Fixes #8711 (#8748)
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 <te...@163.com>
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