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

lzljs3620320 pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/incubator-paimon.git


The following commit(s) were added to refs/heads/master by this push:
     new a39df41c2 [common] MultiplePartitionPredicate returns true only after 
all partition fields have been checked. (#2351)
a39df41c2 is described below

commit a39df41c26a6504745048ae1fbd335a3051a4f68
Author: liming.1018 <[email protected]>
AuthorDate: Tue Nov 21 15:36:19 2023 +0800

    [common] MultiplePartitionPredicate returns true only after all partition 
fields have been checked. (#2351)
---
 .../paimon/partition/PartitionPredicate.java       |  6 +--
 .../paimon/partition/PartitionPredicateTest.java   | 50 ++++++++++++++++------
 2 files changed, 39 insertions(+), 17 deletions(-)

diff --git 
a/paimon-core/src/main/java/org/apache/paimon/partition/PartitionPredicate.java 
b/paimon-core/src/main/java/org/apache/paimon/partition/PartitionPredicate.java
index 687eac1fc..0a9b5df97 100644
--- 
a/paimon-core/src/main/java/org/apache/paimon/partition/PartitionPredicate.java
+++ 
b/paimon-core/src/main/java/org/apache/paimon/partition/PartitionPredicate.java
@@ -123,11 +123,11 @@ public interface PartitionPredicate {
             }
 
             for (int i = 0; i < fieldStats.length; i++) {
-                if (min[i].test(rowCount, fieldStats) && max[i].test(rowCount, 
fieldStats)) {
-                    return true;
+                if (!min[i].test(rowCount, fieldStats) || 
!max[i].test(rowCount, fieldStats)) {
+                    return false;
                 }
             }
-            return false;
+            return true;
         }
     }
 }
diff --git 
a/paimon-core/src/test/java/org/apache/paimon/partition/PartitionPredicateTest.java
 
b/paimon-core/src/test/java/org/apache/paimon/partition/PartitionPredicateTest.java
index 71c46fb38..78ee1377f 100644
--- 
a/paimon-core/src/test/java/org/apache/paimon/partition/PartitionPredicateTest.java
+++ 
b/paimon-core/src/test/java/org/apache/paimon/partition/PartitionPredicateTest.java
@@ -62,27 +62,27 @@ public class PartitionPredicateTest {
                 PartitionPredicate.fromMultiple(
                         type, Arrays.asList(createPart(3, 5), createPart(4, 
6)));
 
-        assertThat(vailidate(p1, p2, createPart(3, 4))).isFalse();
-        assertThat(vailidate(p1, p2, createPart(3, 5))).isTrue();
-        assertThat(vailidate(p1, p2, createPart(4, 6))).isTrue();
-        assertThat(vailidate(p1, p2, createPart(4, 5))).isFalse();
+        assertThat(validate(p1, p2, createPart(3, 4))).isFalse();
+        assertThat(validate(p1, p2, createPart(3, 5))).isTrue();
+        assertThat(validate(p1, p2, createPart(4, 6))).isTrue();
+        assertThat(validate(p1, p2, createPart(4, 5))).isFalse();
 
         assertThat(
-                        vailidate(
+                        validate(
                                 p1,
                                 new FieldStats[] {
                                     new FieldStats(4, 8, 0L), new 
FieldStats(10, 12, 0L)
                                 }))
                 .isFalse();
         assertThat(
-                        vailidate(
+                        validate(
                                 p2,
                                 new FieldStats[] {
                                     new FieldStats(4, 8, 0L), new 
FieldStats(10, 12, 0L)
                                 }))
-                .isTrue();
+                .isFalse();
         assertThat(
-                        vailidate(
+                        validate(
                                 p2,
                                 new FieldStats[] {
                                     new FieldStats(6, 8, 0L), new 
FieldStats(10, 12, 0L)
@@ -90,14 +90,14 @@ public class PartitionPredicateTest {
                 .isFalse();
 
         assertThat(
-                        vailidate(
+                        validate(
                                 p1,
                                 new FieldStats[] {
                                     new FieldStats(4, 8, 0L), new 
FieldStats(5, 12, 0L)
                                 }))
                 .isTrue();
         assertThat(
-                        vailidate(
+                        validate(
                                 p2,
                                 new FieldStats[] {
                                     new FieldStats(4, 8, 0L), new 
FieldStats(5, 12, 0L)
@@ -105,14 +105,14 @@ public class PartitionPredicateTest {
                 .isTrue();
 
         assertThat(
-                        vailidate(
+                        validate(
                                 p1,
                                 new FieldStats[] {
                                     new FieldStats(1, 2, 0L), new 
FieldStats(2, 3, 0L)
                                 }))
                 .isFalse();
         assertThat(
-                        vailidate(
+                        validate(
                                 p2,
                                 new FieldStats[] {
                                     new FieldStats(1, 2, 0L), new 
FieldStats(2, 3, 0L)
@@ -120,14 +120,36 @@ public class PartitionPredicateTest {
                 .isFalse();
     }
 
-    private boolean vailidate(
+    @Test
+    public void testPartitionWithMultiFields() {
+        RowType type = DataTypes.ROW(DataTypes.INT(), DataTypes.INT());
+        PartitionPredicate predicate =
+                PartitionPredicate.fromMultiple(type, 
Collections.singletonList(createPart(3, 4)));
+
+        assertThat(
+                        validate(
+                                predicate,
+                                new FieldStats[] {
+                                    new FieldStats(2, 2, 0L), new 
FieldStats(4, 4, 0L)
+                                }))
+                .isFalse();
+        assertThat(
+                        validate(
+                                predicate,
+                                new FieldStats[] {
+                                    new FieldStats(2, 4, 0L), new 
FieldStats(4, 4, 0L)
+                                }))
+                .isTrue();
+    }
+
+    private boolean validate(
             PartitionPredicate predicate1, PartitionPredicate predicate2, 
BinaryRow part) {
         boolean ret = predicate1.test(part);
         assertThat(predicate2.test(part)).isEqualTo(ret);
         return ret;
     }
 
-    private boolean vailidate(PartitionPredicate predicate, FieldStats[] 
fieldStats) {
+    private boolean validate(PartitionPredicate predicate, FieldStats[] 
fieldStats) {
         return predicate.test(3, fieldStats);
     }
 

Reply via email to