diff --git itests/hive-unit/src/test/java/org/apache/hive/jdbc/TestJdbcDriver2.java itests/hive-unit/src/test/java/org/apache/hive/jdbc/TestJdbcDriver2.java index 7b1c9da..1ba8ad3 100644 --- itests/hive-unit/src/test/java/org/apache/hive/jdbc/TestJdbcDriver2.java +++ itests/hive-unit/src/test/java/org/apache/hive/jdbc/TestJdbcDriver2.java @@ -1315,6 +1315,10 @@ public void testDatabaseMetaData() throws SQLException { assertFalse(meta.supportsMultipleResultSets()); assertFalse(meta.supportsStoredProcedures()); assertTrue(meta.supportsAlterTableWithAddColumn()); + + //-1 indicates malformed version. + assertTrue(meta.getDatabaseMajorVersion() > -1); + assertTrue(meta.getDatabaseMinorVersion() > -1); } @Test diff --git jdbc/src/java/org/apache/hive/jdbc/HiveDatabaseMetaData.java jdbc/src/java/org/apache/hive/jdbc/HiveDatabaseMetaData.java index c447d44..1327d0b 100644 --- jdbc/src/java/org/apache/hive/jdbc/HiveDatabaseMetaData.java +++ jdbc/src/java/org/apache/hive/jdbc/HiveDatabaseMetaData.java @@ -254,11 +254,11 @@ public ResultSet getCrossReference(String primaryCatalog, } 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 { diff --git jdbc/src/java/org/apache/hive/jdbc/Utils.java jdbc/src/java/org/apache/hive/jdbc/Utils.java index 4d75d98..913dc46 100644 --- jdbc/src/java/org/apache/hive/jdbc/Utils.java +++ jdbc/src/java/org/apache/hive/jdbc/Utils.java @@ -270,4 +270,30 @@ public static JdbcConnectionParams parseURL(String uri) throws IllegalArgumentEx 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; + } }