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 <[email protected]>
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();