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);
}