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]