Author: xuefu
Date: Fri Dec  6 21:05:33 2013
New Revision: 1548722

URL: http://svn.apache.org/r1548722
Log:
HIVE-3181: getDatabaseMajor/Minor version does not return values (Szehon via 
Xuefu, reviewed by Navis)

Modified:
    
hive/trunk/itests/hive-unit/src/test/java/org/apache/hive/jdbc/TestJdbcDriver2.java
    hive/trunk/jdbc/src/java/org/apache/hive/jdbc/HiveConnection.java
    hive/trunk/jdbc/src/java/org/apache/hive/jdbc/HiveDatabaseMetaData.java
    hive/trunk/jdbc/src/java/org/apache/hive/jdbc/Utils.java

Modified: 
hive/trunk/itests/hive-unit/src/test/java/org/apache/hive/jdbc/TestJdbcDriver2.java
URL: 
http://svn.apache.org/viewvc/hive/trunk/itests/hive-unit/src/test/java/org/apache/hive/jdbc/TestJdbcDriver2.java?rev=1548722&r1=1548721&r2=1548722&view=diff
==============================================================================
--- 
hive/trunk/itests/hive-unit/src/test/java/org/apache/hive/jdbc/TestJdbcDriver2.java
 (original)
+++ 
hive/trunk/itests/hive-unit/src/test/java/org/apache/hive/jdbc/TestJdbcDriver2.java
 Fri Dec  6 21:05:33 2013
@@ -1315,6 +1315,10 @@ public class TestJdbcDriver2 {
     assertFalse(meta.supportsMultipleResultSets());
     assertFalse(meta.supportsStoredProcedures());
     assertTrue(meta.supportsAlterTableWithAddColumn());
+
+    //-1 indicates malformed version.
+    assertTrue(meta.getDatabaseMajorVersion() > -1);
+    assertTrue(meta.getDatabaseMinorVersion() > -1);
   }
 
   @Test

Modified: hive/trunk/jdbc/src/java/org/apache/hive/jdbc/HiveConnection.java
URL: 
http://svn.apache.org/viewvc/hive/trunk/jdbc/src/java/org/apache/hive/jdbc/HiveConnection.java?rev=1548722&r1=1548721&r2=1548722&view=diff
==============================================================================
--- hive/trunk/jdbc/src/java/org/apache/hive/jdbc/HiveConnection.java (original)
+++ hive/trunk/jdbc/src/java/org/apache/hive/jdbc/HiveConnection.java Fri Dec  
6 21:05:33 2013
@@ -540,6 +540,9 @@ public class HiveConnection implements j
    */
 
   public DatabaseMetaData getMetaData() throws SQLException {
+    if (isClosed) {
+      throw new SQLException("Connection is closed");
+    }
     return new HiveDatabaseMetaData(this, client, sessHandle);
   }
 

Modified: 
hive/trunk/jdbc/src/java/org/apache/hive/jdbc/HiveDatabaseMetaData.java
URL: 
http://svn.apache.org/viewvc/hive/trunk/jdbc/src/java/org/apache/hive/jdbc/HiveDatabaseMetaData.java?rev=1548722&r1=1548721&r2=1548722&view=diff
==============================================================================
--- hive/trunk/jdbc/src/java/org/apache/hive/jdbc/HiveDatabaseMetaData.java 
(original)
+++ hive/trunk/jdbc/src/java/org/apache/hive/jdbc/HiveDatabaseMetaData.java Fri 
Dec  6 21:05:33 2013
@@ -65,6 +65,9 @@ public class HiveDatabaseMetaData implem
   //  The maximum column length = MFieldSchema.FNAME in 
metastore/src/model/package.jdo
   private static final int maxColumnNameLength = 128;
 
+  //  Cached values, to save on round trips to database.
+  private String dbVersion = null;
+
   /**
    *
    */
@@ -254,11 +257,11 @@ public class HiveDatabaseMetaData implem
   }
 
   public int getDatabaseMajorVersion() throws SQLException {
-    throw new SQLException("Method not supported");
+    return Utils.getVersionPart(getDatabaseProductVersion(), 1);
   }
 
   public int getDatabaseMinorVersion() throws SQLException {
-    throw new SQLException("Method not supported");
+    return Utils.getVersionPart(getDatabaseProductVersion(), 2);
   }
 
   public String getDatabaseProductName() throws SQLException {
@@ -266,6 +269,9 @@ public class HiveDatabaseMetaData implem
   }
 
   public String getDatabaseProductVersion() throws SQLException {
+    if (dbVersion != null) { //lazy-caching of the version.
+      return dbVersion;
+    }
 
     TGetInfoReq req = new TGetInfoReq(sessHandle, 
GetInfoType.CLI_DBMS_VER.toTGetInfoType());
     TGetInfoResp resp;
@@ -276,7 +282,8 @@ public class HiveDatabaseMetaData implem
     }
     Utils.verifySuccess(resp.getStatus());
 
-    return resp.getInfoValue().getStringValue();
+    this.dbVersion = resp.getInfoValue().getStringValue();
+    return dbVersion;
   }
 
   public int getDefaultTransactionIsolation() throws SQLException {

Modified: hive/trunk/jdbc/src/java/org/apache/hive/jdbc/Utils.java
URL: 
http://svn.apache.org/viewvc/hive/trunk/jdbc/src/java/org/apache/hive/jdbc/Utils.java?rev=1548722&r1=1548721&r2=1548722&view=diff
==============================================================================
--- hive/trunk/jdbc/src/java/org/apache/hive/jdbc/Utils.java (original)
+++ hive/trunk/jdbc/src/java/org/apache/hive/jdbc/Utils.java Fri Dec  6 
21:05:33 2013
@@ -270,4 +270,30 @@ public class Utils {
 
     return connParams;
   }
+
+  /**
+   * Takes a version string delmited by '.' and '-' characters
+   * and returns a partial version.
+   *
+   * @param fullVersion
+   *          version string.
+   * @param tokenPosition
+   *          position of version string to get starting at 1. eg, for a 
X.x.xxx
+   *          string, 1 will return the major version, 2 will return minor
+   *          version.
+   * @return version part, or -1 if version string was malformed.
+   */
+  static int getVersionPart(String fullVersion, int position) {
+    int version = -1;
+    try {
+      String[] tokens = fullVersion.split("[\\.-]"); //$NON-NLS-1$
+
+      if (tokens != null && tokens.length > 1 && tokens[position] != null) {
+        version = Integer.parseInt(tokens[position]);
+      }
+    } catch (Exception e) {
+      version = -1;
+    }
+    return version;
+  }
 }


Reply via email to