This is an automated email from the ASF dual-hosted git repository. shaofengshi pushed a commit to branch master in repository https://gitbox.apache.org/repos/asf/kylin.git
The following commit(s) were added to refs/heads/master by this push: new 5e9d533 KYLIN-3798 SQL Server cannot show databases 5e9d533 is described below commit 5e9d53311637efcb04fc8529f6682d17a6f08968 Author: hit-lacus <hit_la...@126.com> AuthorDate: Wed Jan 30 12:38:15 2019 +0800 KYLIN-3798 SQL Server cannot show databases --- .../kylin/source/jdbc/metadata/SQLServerJdbcMetadata.java | 13 +++++++------ .../source/jdbc/metadata/SQLServerJdbcMetadataTest.java | 4 ++-- 2 files changed, 9 insertions(+), 8 deletions(-) diff --git a/source-jdbc/src/main/java/org/apache/kylin/source/jdbc/metadata/SQLServerJdbcMetadata.java b/source-jdbc/src/main/java/org/apache/kylin/source/jdbc/metadata/SQLServerJdbcMetadata.java index 1a34b37..5373672 100644 --- a/source-jdbc/src/main/java/org/apache/kylin/source/jdbc/metadata/SQLServerJdbcMetadata.java +++ b/source-jdbc/src/main/java/org/apache/kylin/source/jdbc/metadata/SQLServerJdbcMetadata.java @@ -21,7 +21,9 @@ import java.sql.Connection; import java.sql.ResultSet; import java.sql.SQLException; import java.util.ArrayList; +import java.util.HashSet; import java.util.List; +import java.util.Set; import org.apache.commons.lang3.StringUtils; import org.apache.kylin.source.hive.DBConnConf; @@ -36,26 +38,25 @@ public class SQLServerJdbcMetadata extends DefaultJdbcMetadata { @Override public List<String> listDatabases() throws SQLException { - List<String> ret = new ArrayList<>(); + Set<String> ret = new HashSet<>(); try (Connection con = SqlUtil.getConnection(dbconf)) { String database = con.getCatalog(); Preconditions.checkArgument(StringUtils.isNotEmpty(database), "SQL Server needs a specific database in " + "connection string."); - try (ResultSet rs = con.getMetaData().getSchemas(database, "%")) { + try (ResultSet rs = con.getMetaData().getTables(database, null, null, null)) { String schema; String catalog; while (rs.next()) { schema = rs.getString("TABLE_SCHEM"); - catalog = rs.getString("TABLE_CATALOG"); - // Skip system schemas - if (database.equals(catalog)) { + catalog = rs.getString("TABLE_CAT"); + if (database.equals(catalog) || schema.equals("dbo")) { ret.add(schema); } } } } - return ret; + return new ArrayList<>(ret); } } diff --git a/source-jdbc/src/test/java/org/apache/kylin/source/jdbc/metadata/SQLServerJdbcMetadataTest.java b/source-jdbc/src/test/java/org/apache/kylin/source/jdbc/metadata/SQLServerJdbcMetadataTest.java index a5516ab..65b66bb 100644 --- a/source-jdbc/src/test/java/org/apache/kylin/source/jdbc/metadata/SQLServerJdbcMetadataTest.java +++ b/source-jdbc/src/test/java/org/apache/kylin/source/jdbc/metadata/SQLServerJdbcMetadataTest.java @@ -48,11 +48,11 @@ public class SQLServerJdbcMetadataTest extends DefaultJdbcMetadataTest { ResultSet rs = mock(ResultSet.class); when(rs.next()).thenReturn(true).thenReturn(true).thenReturn(false); when(rs.getString("TABLE_SCHEM")).thenReturn("schema1").thenReturn("schema2"); - when(rs.getString("TABLE_CATALOG")).thenReturn("catalog1").thenReturn("testdb"); + when(rs.getString("TABLE_CAT")).thenReturn("catalog1").thenReturn("testdb"); when(connection.getCatalog()).thenReturn("testdb"); when(connection.getMetaData()).thenReturn(dbmd); - when(dbmd.getSchemas("testdb", "%")).thenReturn(rs); + when(dbmd.getTables("testdb", null, null, null)).thenReturn(rs); List<String> dbs = jdbcMetadata.listDatabases();