Repository: hive Updated Branches: refs/heads/llap 342668f91 -> e073cce23
HIVE-13462 : HiveResultSetMetaData.getPrecision() fails for NULL columns (Jason Dere via Ashutosh Chauhan) Signed-off-by: Ashutosh Chauhan <[email protected]> Project: http://git-wip-us.apache.org/repos/asf/hive/repo Commit: http://git-wip-us.apache.org/repos/asf/hive/commit/35227eb3 Tree: http://git-wip-us.apache.org/repos/asf/hive/tree/35227eb3 Diff: http://git-wip-us.apache.org/repos/asf/hive/diff/35227eb3 Branch: refs/heads/llap Commit: 35227eb3caa3f58577171199402a98ee385d6a6b Parents: 2b59337 Author: Jason Dere <[email protected]> Authored: Fri Apr 8 12:59:00 2016 -0800 Committer: Ashutosh Chauhan <[email protected]> Committed: Sun May 1 18:32:56 2016 -0700 ---------------------------------------------------------------------- .../org/apache/hive/jdbc/TestJdbcDriver2.java | 25 ++++++++++++++------ .../java/org/apache/hive/jdbc/JdbcColumn.java | 13 ++++++---- 2 files changed, 26 insertions(+), 12 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/hive/blob/35227eb3/itests/hive-unit/src/test/java/org/apache/hive/jdbc/TestJdbcDriver2.java ---------------------------------------------------------------------- diff --git a/itests/hive-unit/src/test/java/org/apache/hive/jdbc/TestJdbcDriver2.java b/itests/hive-unit/src/test/java/org/apache/hive/jdbc/TestJdbcDriver2.java index 965627f..73bc620 100644 --- a/itests/hive-unit/src/test/java/org/apache/hive/jdbc/TestJdbcDriver2.java +++ b/itests/hive-unit/src/test/java/org/apache/hive/jdbc/TestJdbcDriver2.java @@ -1605,14 +1605,14 @@ public class TestJdbcDriver2 { ResultSet res = stmt.executeQuery( "select c1, c2, c3, c4, c5 as a, c6, c7, c8, c9, c10, c11, c12, " + - "c1*2, sentences(null, null, null) as b, c17, c18, c20, c21, c22, c23 from " + dataTypeTableName + + "c1*2, sentences(null, null, null) as b, c17, c18, c20, c21, c22, c23, null as null_val from " + dataTypeTableName + " limit 1"); ResultSetMetaData meta = res.getMetaData(); ResultSet colRS = con.getMetaData().getColumns(null, null, dataTypeTableName.toLowerCase(), null); - assertEquals(20, meta.getColumnCount()); + assertEquals(21, meta.getColumnCount()); assertTrue(colRS.next()); @@ -1876,6 +1876,14 @@ public class TestJdbcDriver2 { assertEquals(15, meta.getPrecision(19)); assertEquals(0, meta.getScale(19)); + assertEquals("c22", colRS.getString("COLUMN_NAME")); + assertEquals(Types.CHAR, colRS.getInt("DATA_TYPE")); + assertEquals("char", colRS.getString("TYPE_NAME").toLowerCase()); + assertEquals(meta.getPrecision(19), colRS.getInt("COLUMN_SIZE")); + assertEquals(meta.getScale(19), colRS.getInt("DECIMAL_DIGITS")); + + assertTrue(colRS.next()); + assertEquals("c23", meta.getColumnName(20)); assertEquals(Types.BINARY, meta.getColumnType(20)); assertEquals("binary", meta.getColumnTypeName(20)); @@ -1883,11 +1891,14 @@ public class TestJdbcDriver2 { assertEquals(Integer.MAX_VALUE, meta.getPrecision(20)); assertEquals(0, meta.getScale(20)); - assertEquals("c22", colRS.getString("COLUMN_NAME")); - assertEquals(Types.CHAR, colRS.getInt("DATA_TYPE")); - assertEquals("char", colRS.getString("TYPE_NAME").toLowerCase()); - assertEquals(meta.getPrecision(19), colRS.getInt("COLUMN_SIZE")); - assertEquals(meta.getScale(19), colRS.getInt("DECIMAL_DIGITS")); + assertTrue(colRS.next()); + + assertEquals("null_val", meta.getColumnName(21)); + assertEquals(Types.NULL, meta.getColumnType(21)); + assertEquals("void", meta.getColumnTypeName(21)); + assertEquals(4, meta.getColumnDisplaySize(21)); + assertEquals(0, meta.getPrecision(21)); + assertEquals(0, meta.getScale(21)); for (int i = 1; i <= meta.getColumnCount(); i++) { assertFalse(meta.isAutoIncrement(i)); http://git-wip-us.apache.org/repos/asf/hive/blob/35227eb3/jdbc/src/java/org/apache/hive/jdbc/JdbcColumn.java ---------------------------------------------------------------------- diff --git a/jdbc/src/java/org/apache/hive/jdbc/JdbcColumn.java b/jdbc/src/java/org/apache/hive/jdbc/JdbcColumn.java index 5aed679..38918f0 100644 --- a/jdbc/src/java/org/apache/hive/jdbc/JdbcColumn.java +++ b/jdbc/src/java/org/apache/hive/jdbc/JdbcColumn.java @@ -156,6 +156,8 @@ public class JdbcColumn { return Type.ARRAY_TYPE; } else if ("struct".equalsIgnoreCase(type)) { return Type.STRUCT_TYPE; + } else if ("void".equalsIgnoreCase(type) || "null".equalsIgnoreCase(type)) { + return Type.NULL_TYPE; } throw new SQLException("Unrecognized column type: " + type); } @@ -165,11 +167,7 @@ public class JdbcColumn { } public static int hiveTypeToSqlType(String type) throws SQLException { - if ("void".equalsIgnoreCase(type) || "null".equalsIgnoreCase(type)) { - return Types.NULL; - } else { - return hiveTypeToSqlType(typeStringToHiveType(type)); - } + return hiveTypeToSqlType(typeStringToHiveType(type)); } static String getColumnTypeName(String type) throws SQLException { @@ -225,6 +223,8 @@ public class JdbcColumn { // according to hiveTypeToSqlType possible options are: int columnType = hiveTypeToSqlType(hiveType); switch(columnType) { + case Types.NULL: + return 4; // "NULL" case Types.BOOLEAN: return columnPrecision(hiveType, columnAttributes); case Types.CHAR: @@ -266,6 +266,8 @@ public class JdbcColumn { int columnType = hiveTypeToSqlType(hiveType); // according to hiveTypeToSqlType possible options are: switch(columnType) { + case Types.NULL: + return 0; case Types.BOOLEAN: return 1; case Types.CHAR: @@ -320,6 +322,7 @@ public class JdbcColumn { int columnType = hiveTypeToSqlType(hiveType); // according to hiveTypeToSqlType possible options are: switch(columnType) { + case Types.NULL: case Types.BOOLEAN: case Types.CHAR: case Types.VARCHAR:
