HIVE-8889 - JDBC Driver ResultSet.getXXXXXX(String columnLabel) methods Broken (Chaoyu Tang via Brock)
git-svn-id: https://svn.apache.org/repos/asf/hive/trunk@1642470 13f79535-47bb-0310-9956-ffa450edef68 Project: http://git-wip-us.apache.org/repos/asf/hive/repo Commit: http://git-wip-us.apache.org/repos/asf/hive/commit/4afa6321 Tree: http://git-wip-us.apache.org/repos/asf/hive/tree/4afa6321 Diff: http://git-wip-us.apache.org/repos/asf/hive/diff/4afa6321 Branch: refs/heads/branch-1.0 Commit: 4afa632100c20f53fb334a9f5b2dd3153e528c44 Parents: a661514 Author: Brock Noland <br...@apache.org> Authored: Sat Nov 29 20:12:02 2014 +0000 Committer: Jason Dere <jd...@hortonworks.com> Committed: Mon Aug 10 16:28:34 2015 -0700 ---------------------------------------------------------------------- .../org/apache/hive/jdbc/TestJdbcDriver2.java | 19 ++++++++++++++----- .../org/apache/hive/jdbc/HiveBaseResultSet.java | 18 ++++++++++++++---- 2 files changed, 28 insertions(+), 9 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/hive/blob/4afa6321/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 e7428ba..ad0fd84 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 @@ -583,6 +583,12 @@ public class TestJdbcDriver2 { } @Test + public final void testSelectAllFromView() throws Exception { + doTestSelectAll(viewName, -1, -1); // tests not setting maxRows (return all) + doTestSelectAll(viewName, 0, -1); // tests setting maxRows to 0 (return all) + } + + @Test public final void testSelectAllPartioned() throws Exception { doTestSelectAll(partitionedTableName, -1, -1); // tests not setting maxRows // (return all) @@ -877,17 +883,20 @@ public class TestJdbcDriver2 { assertEquals( "Unexpected column count", expectedColCount, meta.getColumnCount()); - String colQualifier = ((tableName != null) && !tableName.isEmpty()) ? tableName.toLowerCase() + "." : ""; boolean moreRow = res.next(); while (moreRow) { try { i++; - assertEquals(res.getInt(1), res.getInt(colQualifier + "under_col")); - assertEquals(res.getString(1), res.getString(colQualifier + "under_col")); - assertEquals(res.getString(2), res.getString(colQualifier + "value")); + assertEquals(res.getInt(1), res.getInt(tableName + ".under_col")); + assertEquals(res.getInt(1), res.getInt("under_col")); + assertEquals(res.getString(1), res.getString(tableName + ".under_col")); + assertEquals(res.getString(1), res.getString("under_col")); + assertEquals(res.getString(2), res.getString(tableName + ".value")); + assertEquals(res.getString(2), res.getString("value")); if (isPartitionTable) { assertEquals(res.getString(3), partitionedColumnValue); - assertEquals(res.getString(3), res.getString(colQualifier + partitionedColumnName)); + assertEquals(res.getString(3), res.getString(partitionedColumnName)); + assertEquals(res.getString(3), res.getString(tableName + "."+ partitionedColumnName)); } assertFalse("Last result value was not null", res.wasNull()); assertNull("No warnings should be found on ResultSet", res http://git-wip-us.apache.org/repos/asf/hive/blob/4afa6321/jdbc/src/java/org/apache/hive/jdbc/HiveBaseResultSet.java ---------------------------------------------------------------------- diff --git a/jdbc/src/java/org/apache/hive/jdbc/HiveBaseResultSet.java b/jdbc/src/java/org/apache/hive/jdbc/HiveBaseResultSet.java index 8cbf9e7..cd1916f 100644 --- a/jdbc/src/java/org/apache/hive/jdbc/HiveBaseResultSet.java +++ b/jdbc/src/java/org/apache/hive/jdbc/HiveBaseResultSet.java @@ -85,11 +85,21 @@ public abstract class HiveBaseResultSet implements ResultSet { } public int findColumn(String columnName) throws SQLException { - int columnIndex = normalizedColumnNames.indexOf(columnName.toLowerCase()); - if (columnIndex==-1) { - throw new SQLException(); + int columnIndex = 0; + boolean findColumn = false; + for (String normalizedColumnName : normalizedColumnNames) { + ++columnIndex; + String[] names = normalizedColumnName.split("\\."); + String name = names[names.length -1]; + if (name.equalsIgnoreCase(columnName) || normalizedColumnName.equalsIgnoreCase(columnName)) { + findColumn = true; + break; + } + } + if (!findColumn) { + throw new SQLException("Could not find " + columnName + " in " + normalizedColumnNames); } else { - return ++columnIndex; + return columnIndex; } }