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();
 

Reply via email to