zabetak commented on code in PR #3470:
URL: https://github.com/apache/hive/pull/3470#discussion_r935307984


##########
jdbc-handler/src/main/java/org/apache/hive/storage/jdbc/dao/GenericJdbcDatabaseAccessor.java:
##########
@@ -89,23 +92,76 @@ public List<String> getColumnNames(Configuration conf) 
throws HiveJdbcDatabaseAc
 
       ResultSetMetaData metadata = rs.getMetaData();
       int numColumns = metadata.getColumnCount();
-      List<String> columnNames = new ArrayList<String>(numColumns);
+      List<T> columnMeta = new ArrayList<>(numColumns);
       for (int i = 0; i < numColumns; i++) {
-        columnNames.add(metadata.getColumnName(i + 1));
+        columnMeta.add(colAccessor.get(metadata, i + 1));
       }
 
-      return columnNames;
+      return columnMeta;
     }
     catch (Exception e) {
-      LOGGER.error("Error while trying to get column names.", e);
-      throw new HiveJdbcDatabaseAccessException("Error while trying to get 
column names: " + e.getMessage(), e);
+      throw new HiveJdbcDatabaseAccessException("", e);

Review Comment:
   The choice boils down to which stacktrace we prefer to see when a problem 
occurs. Below, we have the three alternatives mentioned here:
   **Alternative 1**
   ```java
   throw new HiveJdbcDatabaseAccessException("", e);
   
   org.apache.hive.storage.jdbc.exception.HiveJdbcDatabaseAccessException: 
        at 
org.apache.hive.storage.jdbc.dao.GenericJdbcDatabaseAccessor.getColumnMetadata(GenericJdbcDatabaseAccessor.java:103)
        at 
org.apache.hive.storage.jdbc.dao.GenericJdbcDatabaseAccessor.getColumnTypes(GenericJdbcDatabaseAccessor.java:118)
        at 
org.apache.hive.storage.jdbc.dao.TestGenericJdbcDatabaseAccessor.testGetColumnTypes_fieldListQuery(TestGenericJdbcDatabaseAccessor.java:113)
   Caused by: org.h2.jdbc.JdbcSQLSyntaxErrorException: Table "T_STRATEGY" not 
found; SQL statement:
   select name,referrer from t_strategy  LIMIT 1  [42102-210]
        at org.h2.message.DbException.getJdbcSQLException(DbException.java:521)
        at org.h2.message.DbException.getJdbcSQLException(DbException.java:496)
        at org.h2.message.DbException.get(DbException.java:227)
        at org.h2.message.DbException.get(DbException.java:203)
        at 
org.h2.command.Parser.getTableOrViewNotFoundDbException(Parser.java:8410)
        at 
org.h2.command.Parser.getTableOrViewNotFoundDbException(Parser.java:8381)
        at org.h2.command.Parser.readTableOrView(Parser.java:8370)
        at org.h2.command.Parser.readTablePrimary(Parser.java:1866)
        at org.h2.command.Parser.readTableReference(Parser.java:2342)
        at org.h2.command.Parser.parseSelectFromPart(Parser.java:2793)
        at org.h2.command.Parser.parseSelect(Parser.java:2900)
        at org.h2.command.Parser.parseQueryPrimary(Parser.java:2783)
        at org.h2.command.Parser.parseQueryTerm(Parser.java:2650)
        at org.h2.command.Parser.parseQueryExpressionBody(Parser.java:2629)
        at 
org.h2.command.Parser.parseQueryExpressionBodyAndEndOfQuery(Parser.java:2622)
        at org.h2.command.Parser.parseQueryExpression(Parser.java:2615)
        at org.h2.command.Parser.parseQuery(Parser.java:2576)
        at org.h2.command.Parser.parsePrepared(Parser.java:707)
        at org.h2.command.Parser.parse(Parser.java:674)
        at org.h2.command.Parser.parse(Parser.java:644)
        at org.h2.command.Parser.prepareCommand(Parser.java:551)
        at org.h2.engine.SessionLocal.prepareLocal(SessionLocal.java:615)
        at org.h2.engine.SessionLocal.prepareCommand(SessionLocal.java:553)
        at org.h2.jdbc.JdbcConnection.prepareCommand(JdbcConnection.java:1116)
        at 
org.h2.jdbc.JdbcPreparedStatement.<init>(JdbcPreparedStatement.java:92)
        at org.h2.jdbc.JdbcConnection.prepareStatement(JdbcConnection.java:288)
        at 
org.apache.commons.dbcp2.DelegatingConnection.prepareStatement(DelegatingConnection.java:303)
        at 
org.apache.commons.dbcp2.DelegatingConnection.prepareStatement(DelegatingConnection.java:303)
        at 
org.apache.hive.storage.jdbc.dao.GenericJdbcDatabaseAccessor.getColumnMetadata(GenericJdbcDatabaseAccessor.java:90)
        ... 46 more
   ```
   
   **Alternative 2**
   ```java
   throw new HiveJdbcDatabaseAccessException(e);
   
   org.apache.hive.storage.jdbc.exception.HiveJdbcDatabaseAccessException: 
org.h2.jdbc.JdbcSQLSyntaxErrorException: Table "T_STRATEGY" not found; SQL 
statement:
   select name,referrer from t_strategy  LIMIT 1  [42102-210]
   
        at 
org.apache.hive.storage.jdbc.dao.GenericJdbcDatabaseAccessor.getColumnMetadata(GenericJdbcDatabaseAccessor.java:103)
        at 
org.apache.hive.storage.jdbc.dao.GenericJdbcDatabaseAccessor.getColumnTypes(GenericJdbcDatabaseAccessor.java:118)
        at 
org.apache.hive.storage.jdbc.dao.TestGenericJdbcDatabaseAccessor.testGetColumnTypes_fieldListQuery(TestGenericJdbcDatabaseAccessor.java:113)
   Caused by: org.h2.jdbc.JdbcSQLSyntaxErrorException: Table "T_STRATEGY" not 
found; SQL statement:
   select name,referrer from t_strategy  LIMIT 1  [42102-210]
        at org.h2.message.DbException.getJdbcSQLException(DbException.java:521)
        at org.h2.message.DbException.getJdbcSQLException(DbException.java:496)
        at org.h2.message.DbException.get(DbException.java:227)
        at org.h2.message.DbException.get(DbException.java:203)
        at 
org.h2.command.Parser.getTableOrViewNotFoundDbException(Parser.java:8410)
        at 
org.h2.command.Parser.getTableOrViewNotFoundDbException(Parser.java:8381)
        at org.h2.command.Parser.readTableOrView(Parser.java:8370)
        at org.h2.command.Parser.readTablePrimary(Parser.java:1866)
        at org.h2.command.Parser.readTableReference(Parser.java:2342)
        at org.h2.command.Parser.parseSelectFromPart(Parser.java:2793)
        at org.h2.command.Parser.parseSelect(Parser.java:2900)
        at org.h2.command.Parser.parseQueryPrimary(Parser.java:2783)
        at org.h2.command.Parser.parseQueryTerm(Parser.java:2650)
        at org.h2.command.Parser.parseQueryExpressionBody(Parser.java:2629)
        at 
org.h2.command.Parser.parseQueryExpressionBodyAndEndOfQuery(Parser.java:2622)
        at org.h2.command.Parser.parseQueryExpression(Parser.java:2615)
        at org.h2.command.Parser.parseQuery(Parser.java:2576)
        at org.h2.command.Parser.parsePrepared(Parser.java:707)
        at org.h2.command.Parser.parse(Parser.java:674)
        at org.h2.command.Parser.parse(Parser.java:644)
        at org.h2.command.Parser.prepareCommand(Parser.java:551)
        at org.h2.engine.SessionLocal.prepareLocal(SessionLocal.java:615)
        at org.h2.engine.SessionLocal.prepareCommand(SessionLocal.java:553)
        at org.h2.jdbc.JdbcConnection.prepareCommand(JdbcConnection.java:1116)
        at 
org.h2.jdbc.JdbcPreparedStatement.<init>(JdbcPreparedStatement.java:92)
        at org.h2.jdbc.JdbcConnection.prepareStatement(JdbcConnection.java:288)
        at 
org.apache.commons.dbcp2.DelegatingConnection.prepareStatement(DelegatingConnection.java:303)
        at 
org.apache.commons.dbcp2.DelegatingConnection.prepareStatement(DelegatingConnection.java:303)
        at 
org.apache.hive.storage.jdbc.dao.GenericJdbcDatabaseAccessor.getColumnMetadata(GenericJdbcDatabaseAccessor.java:90)
        ... 27 more
   ```
   **Alternative 3**
   ```java
   throw new HiveJdbcDatabaseAccessException("Error while trying to get column 
metadata", e);
   
   org.apache.hive.storage.jdbc.exception.HiveJdbcDatabaseAccessException: 
Error while trying to get column metadata
   
        at 
org.apache.hive.storage.jdbc.dao.GenericJdbcDatabaseAccessor.getColumnMetadata(GenericJdbcDatabaseAccessor.java:103)
        at 
org.apache.hive.storage.jdbc.dao.GenericJdbcDatabaseAccessor.getColumnTypes(GenericJdbcDatabaseAccessor.java:118)
        at 
org.apache.hive.storage.jdbc.dao.TestGenericJdbcDatabaseAccessor.testGetColumnTypes_fieldListQuery(TestGenericJdbcDatabaseAccessor.java:113)
   Caused by: org.h2.jdbc.JdbcSQLSyntaxErrorException: Table "T_STRATEGY" not 
found; SQL statement:
   select name,referrer from t_strategy  LIMIT 1  [42102-210]
        at org.h2.message.DbException.getJdbcSQLException(DbException.java:521)
        at org.h2.message.DbException.getJdbcSQLException(DbException.java:496)
        at org.h2.message.DbException.get(DbException.java:227)
        at org.h2.message.DbException.get(DbException.java:203)
        at 
org.h2.command.Parser.getTableOrViewNotFoundDbException(Parser.java:8410)
        at 
org.h2.command.Parser.getTableOrViewNotFoundDbException(Parser.java:8381)
        at org.h2.command.Parser.readTableOrView(Parser.java:8370)
        at org.h2.command.Parser.readTablePrimary(Parser.java:1866)
        at org.h2.command.Parser.readTableReference(Parser.java:2342)
        at org.h2.command.Parser.parseSelectFromPart(Parser.java:2793)
        at org.h2.command.Parser.parseSelect(Parser.java:2900)
        at org.h2.command.Parser.parseQueryPrimary(Parser.java:2783)
        at org.h2.command.Parser.parseQueryTerm(Parser.java:2650)
        at org.h2.command.Parser.parseQueryExpressionBody(Parser.java:2629)
        at 
org.h2.command.Parser.parseQueryExpressionBodyAndEndOfQuery(Parser.java:2622)
        at org.h2.command.Parser.parseQueryExpression(Parser.java:2615)
        at org.h2.command.Parser.parseQuery(Parser.java:2576)
        at org.h2.command.Parser.parsePrepared(Parser.java:707)
        at org.h2.command.Parser.parse(Parser.java:674)
        at org.h2.command.Parser.parse(Parser.java:644)
        at org.h2.command.Parser.prepareCommand(Parser.java:551)
        at org.h2.engine.SessionLocal.prepareLocal(SessionLocal.java:615)
        at org.h2.engine.SessionLocal.prepareCommand(SessionLocal.java:553)
        at org.h2.jdbc.JdbcConnection.prepareCommand(JdbcConnection.java:1116)
        at 
org.h2.jdbc.JdbcPreparedStatement.<init>(JdbcPreparedStatement.java:92)
        at org.h2.jdbc.JdbcConnection.prepareStatement(JdbcConnection.java:288)
        at 
org.apache.commons.dbcp2.DelegatingConnection.prepareStatement(DelegatingConnection.java:303)
        at 
org.apache.commons.dbcp2.DelegatingConnection.prepareStatement(DelegatingConnection.java:303)
        at 
org.apache.hive.storage.jdbc.dao.GenericJdbcDatabaseAccessor.getColumnMetadata(GenericJdbcDatabaseAccessor.java:90)
        ... 27 more
   ```
   Personally, I prefer _Alt1_ since it conveys the problem without redundant 
information. Next in the list is _Alt3_ and last goes _Alt2_ which makes the 
exception quite verbose.
   
   @kasakrisz let me know which one you prefer and I will apply the changes.



-- 
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.

To unsubscribe, e-mail: [email protected]

For queries about this service, please contact Infrastructure at:
[email protected]


---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to