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

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


The following commit(s) were added to refs/heads/master by this push:
     new e85f8f43547 [HUDI-7309] Disable constructing AND & OR filter 
predicates when filter pushing down for any of its operand's logical type  for 
is unsupported in ExpressionPredicates::toParquetPredicate (#10524)
e85f8f43547 is described below

commit e85f8f43547cf107ce4dedf737eede74e2c811e7
Author: Paul Zhang <[email protected]>
AuthorDate: Fri Jan 19 10:27:36 2024 +0800

    [HUDI-7309] Disable constructing AND & OR filter predicates when filter 
pushing down for any of its operand's logical type  for is unsupported in 
ExpressionPredicates::toParquetPredicate (#10524)
---
 .../org/apache/hudi/source/ExpressionPredicates.java    |  6 ++++++
 .../apache/hudi/source/TestExpressionPredicates.java    | 17 +++++++++++++++++
 2 files changed, 23 insertions(+)

diff --git 
a/hudi-flink-datasource/hudi-flink/src/main/java/org/apache/hudi/source/ExpressionPredicates.java
 
b/hudi-flink-datasource/hudi-flink/src/main/java/org/apache/hudi/source/ExpressionPredicates.java
index 046e4b739ad..34bb58f6c8e 100644
--- 
a/hudi-flink-datasource/hudi-flink/src/main/java/org/apache/hudi/source/ExpressionPredicates.java
+++ 
b/hudi-flink-datasource/hudi-flink/src/main/java/org/apache/hudi/source/ExpressionPredicates.java
@@ -548,6 +548,9 @@ public class ExpressionPredicates {
 
     @Override
     public FilterPredicate filter() {
+      if (null == predicates[0].filter() || null == predicates[1].filter()) {
+        return null;
+      }
       return and(predicates[0].filter(), predicates[1].filter());
     }
 
@@ -586,6 +589,9 @@ public class ExpressionPredicates {
 
     @Override
     public FilterPredicate filter() {
+      if (null == predicates[0].filter() || null == predicates[1].filter()) {
+        return null;
+      }
       return or(predicates[0].filter(), predicates[1].filter());
     }
 
diff --git 
a/hudi-flink-datasource/hudi-flink/src/test/java/org/apache/hudi/source/TestExpressionPredicates.java
 
b/hudi-flink-datasource/hudi-flink/src/test/java/org/apache/hudi/source/TestExpressionPredicates.java
index 97b06644266..b8c4b1caf2e 100644
--- 
a/hudi-flink-datasource/hudi-flink/src/test/java/org/apache/hudi/source/TestExpressionPredicates.java
+++ 
b/hudi-flink-datasource/hudi-flink/src/test/java/org/apache/hudi/source/TestExpressionPredicates.java
@@ -42,6 +42,7 @@ import 
org.apache.parquet.filter2.predicate.Operators.IntColumn;
 import org.apache.parquet.filter2.predicate.Operators.Lt;
 import org.junit.jupiter.api.Test;
 
+import java.math.BigDecimal;
 import java.util.Arrays;
 import java.util.Collections;
 import java.util.List;
@@ -58,6 +59,7 @@ import static 
org.apache.parquet.filter2.predicate.FilterApi.not;
 import static org.apache.parquet.filter2.predicate.FilterApi.notEq;
 import static org.apache.parquet.filter2.predicate.FilterApi.or;
 import static org.junit.jupiter.api.Assertions.assertEquals;
+import static org.junit.jupiter.api.Assertions.assertNull;
 
 /**
  * Test cases for {@link ExpressionPredicates}.
@@ -164,4 +166,19 @@ public class TestExpressionPredicates {
     assertEquals(predicate19.toString(), predicate20.toString());
     assertEquals(or(lt, gt), predicate20.filter());
   }
+
+  @Test
+  public void testDisablePredicatesPushDownForUnsupportedType() {
+    FieldReferenceExpression fieldReference = new 
FieldReferenceExpression("f_decimal", DataTypes.DECIMAL(7, 2), 0, 0);
+    ValueLiteralExpression valueLiteral = new 
ValueLiteralExpression(BigDecimal.valueOf(100.00));
+    List<ResolvedExpression> expressions = Arrays.asList(fieldReference, 
valueLiteral);
+
+    CallExpression greaterThanExpression = new 
CallExpression(BuiltInFunctionDefinitions.GREATER_THAN, expressions, 
DataTypes.DECIMAL(7, 2));
+    Predicate greaterThanPredicate = fromExpression(greaterThanExpression);
+    CallExpression lessThanExpression = new 
CallExpression(BuiltInFunctionDefinitions.LESS_THAN, expressions, 
DataTypes.DECIMAL(7, 2));
+    Predicate lessThanPredicate = fromExpression(lessThanExpression);
+
+    assertNull(And.getInstance().bindPredicates(greaterThanPredicate, 
lessThanPredicate).filter(), "Decimal type push down is unsupported, so we 
expect null");
+    assertNull(Or.getInstance().bindPredicates(greaterThanPredicate, 
lessThanPredicate).filter(), "Decimal type push down is unsupported, so we 
expect null");
+  }
 }

Reply via email to