This is an automated email from the ASF dual-hosted git repository.

zhangbutao pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/hive.git


The following commit(s) were added to refs/heads/master by this push:
     new 98d9d223983 HIVE-28291: Fix Partition spec is incorrect in 
getPartitionsByFilter RPC (#5271)(cxzl25, reviewed by Wechar Yu, Butao Zhang)
98d9d223983 is described below

commit 98d9d22398370f817fe64449368671b978fff096
Author: cxzl25 <[email protected]>
AuthorDate: Thu Jun 6 22:55:15 2024 +0800

    HIVE-28291: Fix Partition spec is incorrect in getPartitionsByFilter RPC 
(#5271)(cxzl25, reviewed by Wechar Yu, Butao Zhang)
---
 .../java/org/apache/hadoop/hive/metastore/MetaStoreDirectSql.java | 6 ++++--
 .../java/org/apache/hadoop/hive/metastore/TestObjectStore.java    | 8 ++++++++
 2 files changed, 12 insertions(+), 2 deletions(-)

diff --git 
a/standalone-metastore/metastore-server/src/main/java/org/apache/hadoop/hive/metastore/MetaStoreDirectSql.java
 
b/standalone-metastore/metastore-server/src/main/java/org/apache/hadoop/hive/metastore/MetaStoreDirectSql.java
index 272b388a40d..8c6701ae138 100644
--- 
a/standalone-metastore/metastore-server/src/main/java/org/apache/hadoop/hive/metastore/MetaStoreDirectSql.java
+++ 
b/standalone-metastore/metastore-server/src/main/java/org/apache/hadoop/hive/metastore/MetaStoreDirectSql.java
@@ -1551,9 +1551,11 @@ class MetaStoreDirectSql {
               : tableValue + " " + node.operator.getSqlOp() + " " + nodeValue0;
       // For equals and not-equals filter, we can add partition name filter to 
improve performance.
       boolean isOpEquals = Operator.isEqualOperator(node.operator);
-      if (isOpEquals || Operator.isNotEqualOperator(node.operator)) {
+      boolean isOpNotEqual = Operator.isNotEqualOperator(node.operator);
+      String nodeValueStr = node.value.toString();
+      if (StringUtils.isNotEmpty(nodeValueStr) && (isOpEquals || 
isOpNotEqual)) {
         Map<String, String> partKeyToVal = new HashMap<>();
-        partKeyToVal.put(partCol.getName(), node.value.toString());
+        partKeyToVal.put(partCol.getName(), nodeValueStr);
         String escapedNameFragment = Warehouse.makePartName(partKeyToVal, 
false);
         if (colType == FilterType.Date) {
           // Some engines like Pig will record both date and time values, in 
which case we need
diff --git 
a/standalone-metastore/metastore-server/src/test/java/org/apache/hadoop/hive/metastore/TestObjectStore.java
 
b/standalone-metastore/metastore-server/src/test/java/org/apache/hadoop/hive/metastore/TestObjectStore.java
index 4ee768b163a..e308f94905c 100644
--- 
a/standalone-metastore/metastore-server/src/test/java/org/apache/hadoop/hive/metastore/TestObjectStore.java
+++ 
b/standalone-metastore/metastore-server/src/test/java/org/apache/hadoop/hive/metastore/TestObjectStore.java
@@ -566,6 +566,14 @@ public class TestObjectStore {
     }
     Assert.assertEquals(1, partNames.size());
     Assert.assertEquals("country=US/state=MA", partNames.get(0));
+
+    try (AutoCloseable c = deadline()) {
+      partNames = objectStore.listPartitionNamesByFilter(DEFAULT_CATALOG_NAME, 
DB1, TABLE1,
+          new GetPartitionsArgs.GetPartitionsArgsBuilder().filter("Country != 
''").build());
+    }
+    Assert.assertEquals(2, partNames.size());
+    Assert.assertEquals("country=US/state=CA", partNames.get(0));
+    Assert.assertEquals("country=US/state=MA", partNames.get(1));
   }
 
   @Test

Reply via email to