This is an automated email from the ASF dual-hosted git repository. dkuzmenko pushed a commit to branch master in repository https://gitbox.apache.org/repos/asf/hive.git
commit 3f6d918bd358205ecbffa12b675939dfffa8fbe7 Author: Kurt Deschler <[email protected]> AuthorDate: Mon Jan 22 14:37:14 2024 -0500 HIVE-28018: Don't require HiveConf for JDBC Metadata calls (Kurt Deschler, reviewed by Attila Turoczy, Denys Kuzmenko) This patch eliminates the requirement to set hive.default.nulls.last in HiveConf when calling DatabaseMetaData.nullsAreSorted(High/Low) functions. The static default from HiveConf will be used if the HiveConf or key is no present. When connecting to Hive databases, this is normally not an issue since the server hiveconf will have this key. However, the hs2 protocol is used outside of Hive (i.e. Impala) and the server is not quaranteed to have hive keys. Closes #4902 --- .../apache/hive/jdbc/TestHiveDatabaseMetaData.java | 12 ++++-------- .../org/apache/hive/jdbc/HiveDatabaseMetaData.java | 21 ++++++++++++--------- jdbc/src/java/org/apache/hive/jdbc/Utils.java | 9 ++++++++- 3 files changed, 24 insertions(+), 18 deletions(-) diff --git a/itests/hive-unit/src/test/java/org/apache/hive/jdbc/TestHiveDatabaseMetaData.java b/itests/hive-unit/src/test/java/org/apache/hive/jdbc/TestHiveDatabaseMetaData.java index 70f222e0857..e7b6014558e 100644 --- a/itests/hive-unit/src/test/java/org/apache/hive/jdbc/TestHiveDatabaseMetaData.java +++ b/itests/hive-unit/src/test/java/org/apache/hive/jdbc/TestHiveDatabaseMetaData.java @@ -50,14 +50,10 @@ public class TestHiveDatabaseMetaData { } @Test - public void testGetHiveDefaultNullsLastNullConfig() { + public void testGetHiveDefaultNullsLastNullConfig() throws SQLException { map.remove(Utils.JdbcConnectionParams.HIVE_DEFAULT_NULLS_LAST_KEY); - try { - hiveDatabaseMetaData.nullsAreSortedLow(); - fail("SQLException is expected"); - } catch (Exception e) { - assertTrue(e.getMessage().contains("HIVE_DEFAULT_NULLS_LAST is not available")); - } + assertTrue(hiveDatabaseMetaData.nullsAreSortedHigh()); + assertFalse(hiveDatabaseMetaData.nullsAreSortedLow()); } @Test @@ -117,4 +113,4 @@ public class TestHiveDatabaseMetaData { public void testGetURL() { assertEquals(connection.getConnectedUrl(), hiveDatabaseMetaData.getURL()); } -} \ No newline at end of file +} diff --git a/jdbc/src/java/org/apache/hive/jdbc/HiveDatabaseMetaData.java b/jdbc/src/java/org/apache/hive/jdbc/HiveDatabaseMetaData.java index 41f9857cd5e..f9e69dc7de4 100644 --- a/jdbc/src/java/org/apache/hive/jdbc/HiveDatabaseMetaData.java +++ b/jdbc/src/java/org/apache/hive/jdbc/HiveDatabaseMetaData.java @@ -22,6 +22,7 @@ import java.util.ArrayList; import java.util.List; +import org.apache.hadoop.hive.conf.HiveConf.ConfVars; import org.apache.hadoop.hive.metastore.api.FieldSchema; import org.apache.hive.jdbc.Utils.JdbcConnectionParams; import org.apache.hive.service.cli.TableSchema; @@ -785,11 +786,11 @@ public class HiveDatabaseMetaData implements DatabaseMetaData { return false; } - public boolean nullsAreSortedHigh() throws SQLException { + public boolean nullsAreSortedHigh() { return getHiveDefaultNullsLast(connection.getConnParams().getHiveConfs()); } - public boolean nullsAreSortedLow() throws SQLException { + public boolean nullsAreSortedLow() { return !getHiveDefaultNullsLast(connection.getConnParams().getHiveConfs()); } @@ -1157,13 +1158,15 @@ public class HiveDatabaseMetaData implements DatabaseMetaData { * @param hiveConfs * @return */ - public static boolean getHiveDefaultNullsLast(Map<String, String> hiveConfs) throws SQLException { - if (hiveConfs == null) { - throw new SQLException("hiveConfs is not available"); - } - if (hiveConfs.get(JdbcConnectionParams.HIVE_DEFAULT_NULLS_LAST_KEY) == null) { - throw new SQLException("HIVE_DEFAULT_NULLS_LAST is not available"); + public static boolean getHiveDefaultNullsLast(Map<String, String> hiveConfs) { + if (hiveConfs == null || + hiveConfs.get(JdbcConnectionParams.HIVE_DEFAULT_NULLS_LAST_KEY) == null) { + try { + return Boolean.parseBoolean(ConfVars.HIVE_DEFAULT_NULLS_LAST.getDefaultValue()); + } catch(java.lang.NoSuchFieldError e) { + return true; + } } return Boolean.parseBoolean(hiveConfs.get(JdbcConnectionParams.HIVE_DEFAULT_NULLS_LAST_KEY)); } -} \ No newline at end of file +} diff --git a/jdbc/src/java/org/apache/hive/jdbc/Utils.java b/jdbc/src/java/org/apache/hive/jdbc/Utils.java index a4230a4699f..01fdc9de56f 100644 --- a/jdbc/src/java/org/apache/hive/jdbc/Utils.java +++ b/jdbc/src/java/org/apache/hive/jdbc/Utils.java @@ -218,8 +218,15 @@ public class Utils { private final List<String> rejectedHostZnodePaths = new ArrayList<String>(); // HiveConf parameters + private static String getNullsLastVarname() { + try { + return HiveConf.ConfVars.HIVE_DEFAULT_NULLS_LAST.varname; + } catch(java.lang.NoSuchFieldError e) { + return "hive.default.nulls.last"; + } + } public static final String HIVE_DEFAULT_NULLS_LAST_KEY = - HIVE_CONF_PREFIX + HiveConf.ConfVars.HIVE_DEFAULT_NULLS_LAST.varname; + HIVE_CONF_PREFIX + getNullsLastVarname(); private static String getFetchThreadsVarname() { try {
