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 {

Reply via email to