This is an automated email from the ASF dual-hosted git repository. arjansh pushed a commit to branch master in repository https://gitbox.apache.org/repos/asf/metamodel.git
commit d4626a98ba7a5e0b94b4b83c0b4b6e00ab39cfe1 Author: Gerard Dellemann <[email protected]> AuthorDate: Tue Sep 3 11:32:46 2019 +0200 MM-1219 Returning schemas SQL Server - Refactoring based on comments in PR --- .../org/apache/metamodel/jdbc/JdbcDataContext.java | 39 +++++++++++++--------- 1 file changed, 23 insertions(+), 16 deletions(-) diff --git a/jdbc/src/main/java/org/apache/metamodel/jdbc/JdbcDataContext.java b/jdbc/src/main/java/org/apache/metamodel/jdbc/JdbcDataContext.java index 346afef..bb0ecfe 100644 --- a/jdbc/src/main/java/org/apache/metamodel/jdbc/JdbcDataContext.java +++ b/jdbc/src/main/java/org/apache/metamodel/jdbc/JdbcDataContext.java @@ -101,6 +101,7 @@ public class JdbcDataContext extends AbstractDataContext implements UpdateableDa public static final String DATABASE_PRODUCT_IMPALA = "Impala"; private static final String DEFAULT_SCHEMA_NAME_SQLSERVER = "dbo"; + private static final String RESULT_SET_COLUMN_NAME_SCHEMA_SQLSERVER = "TABLE_SCHEM"; public static final ColumnType COLUMN_TYPE_CLOB_AS_STRING = new ColumnTypeImpl("CLOB", SuperColumnType.LITERAL_TYPE, String.class, true); @@ -782,32 +783,38 @@ public class JdbcDataContext extends AbstractDataContext implements UpdateableDa private Set<String> getSchemaSQLServerNames(DatabaseMetaData metaData) throws SQLException { // Distinct schema names. metaData.getTables() is a denormalized resultset final Set<String> schemas = new HashSet<>(); - ResultSet resultSet = null; - // Find DBO schema if present + if (hasDefaultSQLServerSchema(metaData)) { + schemas.add(DEFAULT_SCHEMA_NAME_SQLSERVER); + } + + // Find other schemas from tables + ResultSet tables = null; try { - resultSet = metaData.getSchemas(); - while (resultSet.next()) { - if (resultSet.getString("TABLE_SCHEM").equals(DEFAULT_SCHEMA_NAME_SQLSERVER)) { - schemas.add(DEFAULT_SCHEMA_NAME_SQLSERVER); - break; - } + tables = metaData.getTables(_catalogName, null, null, JdbcUtils.getTableTypesAsStrings(_tableTypes)); + while (tables.next()) { + schemas.add(tables.getString(RESULT_SET_COLUMN_NAME_SCHEMA_SQLSERVER)); } } finally { - FileHelper.safeClose(resultSet); + FileHelper.safeClose(tables); } - // Find other schemas + return schemas; + } + + private boolean hasDefaultSQLServerSchema(final DatabaseMetaData metaData) throws SQLException { + ResultSet schemas = null; try { - resultSet = metaData.getTables(_catalogName, null, null, JdbcUtils.getTableTypesAsStrings(_tableTypes)); - while (resultSet.next()) { - schemas.add(resultSet.getString("TABLE_SCHEM")); + schemas = metaData.getSchemas(); + while (schemas.next()) { + if (schemas.getString(RESULT_SET_COLUMN_NAME_SCHEMA_SQLSERVER).equals(DEFAULT_SCHEMA_NAME_SQLSERVER)) { + return true; + } } } finally { - FileHelper.safeClose(resultSet); + FileHelper.safeClose(schemas); } - - return schemas; + return false; } public JdbcDataContext setQueryRewriter(IQueryRewriter queryRewriter) {
