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);