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


The following commit(s) were added to refs/heads/master by this push:
     new 7c25c2e490c HIVE-27967: Iceberg: Fix dynamic runtime filtering (Denys 
Kuzmenko, reviewed by Attila Turoczy, Butao Zhang)
7c25c2e490c is described below

commit 7c25c2e490cd02af57c5142b94c4fdb120eb2f59
Author: Denys Kuzmenko <[email protected]>
AuthorDate: Sat Dec 23 12:52:48 2023 +0200

    HIVE-27967: Iceberg: Fix dynamic runtime filtering (Denys Kuzmenko, 
reviewed by Attila Turoczy, Butao Zhang)
    
    Closes #4962
---
 .../iceberg/mr/hive/HiveIcebergFilterFactory.java  |  3 -
 .../mr/hive/TestHiveIcebergFilterFactory.java      | 84 ----------------------
 2 files changed, 87 deletions(-)

diff --git 
a/iceberg/iceberg-handler/src/main/java/org/apache/iceberg/mr/hive/HiveIcebergFilterFactory.java
 
b/iceberg/iceberg-handler/src/main/java/org/apache/iceberg/mr/hive/HiveIcebergFilterFactory.java
index d443672b0e8..4db6627cbc9 100644
--- 
a/iceberg/iceberg-handler/src/main/java/org/apache/iceberg/mr/hive/HiveIcebergFilterFactory.java
+++ 
b/iceberg/iceberg-handler/src/main/java/org/apache/iceberg/mr/hive/HiveIcebergFilterFactory.java
@@ -110,9 +110,6 @@ public class HiveIcebergFilterFactory {
         return in(column, leafToLiteralList(leaf));
       case BETWEEN:
         List<Object> icebergLiterals = leafToLiteralList(leaf);
-        if (icebergLiterals.size() < 2) {
-          throw new UnsupportedOperationException("Missing leaf literals: " + 
leaf);
-        }
         if (icebergLiterals.size() == 2) {
           return and(greaterThanOrEqual(column, icebergLiterals.get(0)),
               lessThanOrEqual(column, icebergLiterals.get(1)));
diff --git 
a/iceberg/iceberg-handler/src/test/java/org/apache/iceberg/mr/hive/TestHiveIcebergFilterFactory.java
 
b/iceberg/iceberg-handler/src/test/java/org/apache/iceberg/mr/hive/TestHiveIcebergFilterFactory.java
index 1614d937c37..3044f0467af 100644
--- 
a/iceberg/iceberg-handler/src/test/java/org/apache/iceberg/mr/hive/TestHiveIcebergFilterFactory.java
+++ 
b/iceberg/iceberg-handler/src/test/java/org/apache/iceberg/mr/hive/TestHiveIcebergFilterFactory.java
@@ -24,9 +24,6 @@ import java.sql.Date;
 import java.sql.Timestamp;
 import java.time.LocalDate;
 import java.time.ZoneOffset;
-import java.util.Collections;
-import java.util.List;
-import org.apache.hadoop.hive.ql.io.sarg.ExpressionTree;
 import org.apache.hadoop.hive.ql.io.sarg.PredicateLeaf;
 import org.apache.hadoop.hive.ql.io.sarg.SearchArgument;
 import org.apache.hadoop.hive.ql.io.sarg.SearchArgumentFactory;
@@ -39,7 +36,6 @@ import org.apache.iceberg.expressions.Or;
 import org.apache.iceberg.expressions.UnboundPredicate;
 import org.apache.iceberg.types.Types;
 import org.apache.iceberg.util.DateTimeUtil;
-import org.assertj.core.api.Assertions;
 import org.junit.Test;
 
 import static org.junit.Assert.assertEquals;
@@ -138,21 +134,6 @@ public class TestHiveIcebergFilterFactory {
     assertEquals(actual.right().op(), expected.right().op());
   }
 
-  @Test
-  public void testUnsupportedBetweenOperandEmptyLeaves() {
-    SearchArgument.Builder builder = SearchArgumentFactory.newBuilder();
-    final SearchArgument arg =
-        new MockSearchArgument(
-            builder
-                .startAnd()
-                .between("salary", PredicateLeaf.Type.LONG, 9000L, 15000L)
-                .end()
-                .build());
-    Assertions.assertThatThrownBy(() -> 
HiveIcebergFilterFactory.generateFilterExpression(arg))
-        .isInstanceOf(UnsupportedOperationException.class)
-        .hasMessage("Missing leaf literals: Leaf[empty]");
-  }
-
   @Test
   public void testIsNullOperand() {
     SearchArgument.Builder builder = SearchArgumentFactory.newBuilder();
@@ -278,69 +259,4 @@ public class TestHiveIcebergFilterFactory {
     assertEquals(expected.literal(), actual.literal());
     assertEquals(expected.ref().name(), actual.ref().name());
   }
-
-  private static class MockSearchArgument implements SearchArgument {
-
-    private final SearchArgument delegate;
-
-    MockSearchArgument(SearchArgument original) {
-      delegate = original;
-    }
-
-    @Override
-    public ExpressionTree getExpression() {
-      return delegate.getExpression();
-    }
-
-    @Override
-    public ExpressionTree getCompactExpression() {
-      return null;
-    }
-
-    @Override
-    public TruthValue evaluate(TruthValue[] leaves) {
-      return delegate.evaluate(leaves);
-    }
-
-    @Override
-    public List<PredicateLeaf> getLeaves() {
-      return Collections.singletonList(
-          new PredicateLeaf() {
-            @Override
-            public Operator getOperator() {
-              return Operator.BETWEEN;
-            }
-
-            @Override
-            public Type getType() {
-              return Type.LONG;
-            }
-
-            @Override
-            public String getColumnName() {
-              return "salary";
-            }
-
-            @Override
-            public Object getLiteral() {
-              return null;
-            }
-
-            @Override
-            public List<Object> getLiteralList() {
-              return Collections.emptyList();
-            }
-
-            @Override
-            public int getId() {
-              return 0;
-            }
-
-            @Override
-            public String toString() {
-              return "Leaf[empty]";
-            }
-          });
-    }
-  }
 }

Reply via email to