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) {

Reply via email to