You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@hive.apache.org by jd...@apache.org on 2015/01/24 01:22:01 UTC

svn commit: r1654441 - in /hive/trunk: itests/hive-unit/src/test/java/org/apache/hive/jdbc/ metastore/src/java/org/apache/hadoop/hive/metastore/ ql/src/java/org/apache/hadoop/hive/ql/metadata/

Author: jdere
Date: Sat Jan 24 00:22:00 2015
New Revision: 1654441

URL: http://svn.apache.org/r1654441
Log:
HIVE-9446: JDBC DatabaseMetadata.getColumns() does not work for temporary tables (Jason Dere, reviewed by Thejas Nair)

Modified:
    hive/trunk/itests/hive-unit/src/test/java/org/apache/hive/jdbc/TestJdbcWithMiniMr.java
    hive/trunk/metastore/src/java/org/apache/hadoop/hive/metastore/HiveMetaStoreClient.java
    hive/trunk/ql/src/java/org/apache/hadoop/hive/ql/metadata/SessionHiveMetaStoreClient.java

Modified: hive/trunk/itests/hive-unit/src/test/java/org/apache/hive/jdbc/TestJdbcWithMiniMr.java
URL: http://svn.apache.org/viewvc/hive/trunk/itests/hive-unit/src/test/java/org/apache/hive/jdbc/TestJdbcWithMiniMr.java?rev=1654441&r1=1654440&r2=1654441&view=diff
==============================================================================
--- hive/trunk/itests/hive-unit/src/test/java/org/apache/hive/jdbc/TestJdbcWithMiniMr.java (original)
+++ hive/trunk/itests/hive-unit/src/test/java/org/apache/hive/jdbc/TestJdbcWithMiniMr.java Sat Jan 24 00:22:00 2015
@@ -23,10 +23,12 @@ import static org.junit.Assert.assertFal
 import static org.junit.Assert.assertTrue;
 
 import java.sql.Connection;
+import java.sql.DatabaseMetaData;
 import java.sql.DriverManager;
 import java.sql.ResultSet;
 import java.sql.SQLException;
 import java.sql.Statement;
+import java.sql.Types;
 import java.util.HashMap;
 import java.util.Map;
 
@@ -226,6 +228,46 @@ public class TestJdbcWithMiniMr {
         " where value = '" + resultVal + "'";
     verifyResult(queryStr, resultVal, 2);
 
+
+    // Test getTables()
+    DatabaseMetaData md = hs2Conn.getMetaData();
+    assertTrue(md.getConnection() == hs2Conn);
+
+    ResultSet rs = md.getTables(null, null, tempTableName, null);
+    boolean foundTable = false;
+    while (rs.next()) {
+      String tableName = rs.getString(3);
+      if (tableName.equalsIgnoreCase(tempTableName)) {
+        assertFalse("Table not found yet", foundTable);
+        foundTable = true;
+      }
+    }
+    assertTrue("Found temp table", foundTable);
+
+    // Test getTables() with no table name pattern
+    rs = md.getTables(null, null, null, null);
+    foundTable = false;
+    while (rs.next()) {
+      String tableName = rs.getString(3);
+      if (tableName.equalsIgnoreCase(tempTableName)) {
+        assertFalse("Table not found yet", foundTable);
+        foundTable = true;
+      }
+    }
+    assertTrue("Found temp table", foundTable);
+
+    // Test getColumns()
+    rs = md.getColumns(null, null, tempTableName, null);
+    assertTrue("First row", rs.next());
+    assertTrue(rs.getString(3).equalsIgnoreCase(tempTableName));
+    assertTrue(rs.getString(4).equalsIgnoreCase("key"));
+    assertEquals(Types.VARCHAR, rs.getInt(5));
+
+    assertTrue("Second row", rs.next());
+    assertTrue(rs.getString(3).equalsIgnoreCase(tempTableName));
+    assertTrue(rs.getString(4).equalsIgnoreCase("value"));
+    assertEquals(Types.VARCHAR, rs.getInt(5));
+
     // A second connection should not be able to see the table
     Connection conn2 = DriverManager.getConnection(miniHS2.getJdbcURL(dbName),
         System.getProperty("user.name"), "bar");

Modified: hive/trunk/metastore/src/java/org/apache/hadoop/hive/metastore/HiveMetaStoreClient.java
URL: http://svn.apache.org/viewvc/hive/trunk/metastore/src/java/org/apache/hadoop/hive/metastore/HiveMetaStoreClient.java?rev=1654441&r1=1654440&r2=1654441&view=diff
==============================================================================
--- hive/trunk/metastore/src/java/org/apache/hadoop/hive/metastore/HiveMetaStoreClient.java (original)
+++ hive/trunk/metastore/src/java/org/apache/hadoop/hive/metastore/HiveMetaStoreClient.java Sat Jan 24 00:22:00 2015
@@ -1575,7 +1575,7 @@ public class HiveMetaStoreClient impleme
     return copy;
   }
 
-  private List<FieldSchema> deepCopyFieldSchemas(List<FieldSchema> schemas) {
+  protected List<FieldSchema> deepCopyFieldSchemas(List<FieldSchema> schemas) {
     List<FieldSchema> copy = null;
     if (schemas != null) {
       copy = new ArrayList<FieldSchema>();

Modified: hive/trunk/ql/src/java/org/apache/hadoop/hive/ql/metadata/SessionHiveMetaStoreClient.java
URL: http://svn.apache.org/viewvc/hive/trunk/ql/src/java/org/apache/hadoop/hive/ql/metadata/SessionHiveMetaStoreClient.java?rev=1654441&r1=1654440&r2=1654441&view=diff
==============================================================================
--- hive/trunk/ql/src/java/org/apache/hadoop/hive/ql/metadata/SessionHiveMetaStoreClient.java (original)
+++ hive/trunk/ql/src/java/org/apache/hadoop/hive/ql/metadata/SessionHiveMetaStoreClient.java Sat Jan 24 00:22:00 2015
@@ -59,6 +59,7 @@ import org.apache.hadoop.hive.metastore.
 import org.apache.hadoop.hive.metastore.api.PrincipalPrivilegeSet;
 import org.apache.hadoop.hive.metastore.api.TableStatsRequest;
 import org.apache.hadoop.hive.metastore.api.UnknownDBException;
+import org.apache.hadoop.hive.metastore.api.UnknownTableException;
 import org.apache.hadoop.hive.ql.session.SessionState;
 import org.apache.hadoop.hive.ql.stats.StatsUtils;
 import org.apache.thrift.TException;
@@ -211,7 +212,6 @@ public class SessionHiveMetaStoreClient
     return tables;
   }
 
-
   @Override
   public boolean tableExists(String databaseName, String tableName) throws MetaException,
   TException, UnknownDBException {
@@ -226,6 +226,20 @@ public class SessionHiveMetaStoreClient
   }
 
   @Override
+  public List<FieldSchema> getSchema(String dbName, String tableName)
+      throws MetaException, TException, UnknownTableException,
+      UnknownDBException {
+    // First check temp tables
+    org.apache.hadoop.hive.metastore.api.Table table = getTempTable(dbName, tableName);
+    if (table != null) {
+      return deepCopyFieldSchemas(table.getSd().getCols());
+    }
+
+    // Try underlying client
+    return super.getSchema(dbName, tableName);
+  }
+
+  @Override
   public void alter_table(String dbname, String tbl_name, org.apache.hadoop.hive.metastore.api.Table new_tbl,
       boolean cascade) throws InvalidOperationException, MetaException, TException {
     org.apache.hadoop.hive.metastore.api.Table old_tbl = getTempTable(dbname, tbl_name);