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 6d15bd3ea [core] Remove Predicate.test(Object[]) to use InternalRow
(#2796)
6d15bd3ea is described below
commit 6d15bd3ea0de105503f5faa03b57caa5afcc1c23
Author: Jingsong Lee <[email protected]>
AuthorDate: Fri Jan 26 16:45:02 2024 +0800
[core] Remove Predicate.test(Object[]) to use InternalRow (#2796)
---
.../main/java/org/apache/paimon/predicate/And.java | 10 --
.../apache/paimon/predicate/CompoundPredicate.java | 7 -
.../org/apache/paimon/predicate/LeafPredicate.java | 5 -
.../main/java/org/apache/paimon/predicate/Or.java | 10 --
.../org/apache/paimon/predicate/Predicate.java | 7 -
.../apache/paimon/predicate/PredicateFilter.java | 49 -------
.../paimon/predicate/PredicateBuilderTest.java | 21 +--
.../org/apache/paimon/predicate/PredicateTest.java | 157 +++++++++++----------
.../paimon/operation/AbstractFileStoreScan.java | 2 +-
.../paimon/operation/FileStoreCommitImpl.java | 8 +-
.../paimon/partition/PartitionPredicate.java | 12 +-
.../java/org/apache/paimon/table/TableUtils.java | 4 +-
.../paimon/operation/FileStoreCommitTest.java | 5 +-
.../paimon/partition/PartitionPredicateTest.java | 2 +-
.../paimon/schema/SchemaEvolutionUtilTest.java | 4 +-
.../flink/lookup/FileStoreLookupFunction.java | 10 +-
.../paimon/flink/lookup/FullCacheLookupTable.java | 23 +--
.../flink/lookup/NoPrimaryKeyLookupTable.java | 4 +-
.../paimon/flink/lookup/PrimaryKeyLookupTable.java | 4 +-
.../flink/lookup/SecondaryIndexLookupTable.java | 4 +-
.../paimon/flink/lookup/TableStreamingReader.java | 15 +-
.../paimon/flink/PredicateConverterTest.java | 3 +-
.../paimon/flink/lookup/LookupTableTest.java | 27 ++--
23 files changed, 150 insertions(+), 243 deletions(-)
diff --git a/paimon-common/src/main/java/org/apache/paimon/predicate/And.java
b/paimon-common/src/main/java/org/apache/paimon/predicate/And.java
index 98e53947d..c4ec83525 100644
--- a/paimon-common/src/main/java/org/apache/paimon/predicate/And.java
+++ b/paimon-common/src/main/java/org/apache/paimon/predicate/And.java
@@ -34,16 +34,6 @@ public class And extends CompoundPredicate.Function {
private And() {}
- @Override
- public boolean test(Object[] values, List<Predicate> children) {
- for (Predicate child : children) {
- if (!child.test(values)) {
- return false;
- }
- }
- return true;
- }
-
@Override
public boolean test(InternalRow row, List<Predicate> children) {
for (Predicate child : children) {
diff --git
a/paimon-common/src/main/java/org/apache/paimon/predicate/CompoundPredicate.java
b/paimon-common/src/main/java/org/apache/paimon/predicate/CompoundPredicate.java
index a162d491a..b8540722f 100644
---
a/paimon-common/src/main/java/org/apache/paimon/predicate/CompoundPredicate.java
+++
b/paimon-common/src/main/java/org/apache/paimon/predicate/CompoundPredicate.java
@@ -48,11 +48,6 @@ public class CompoundPredicate implements Predicate {
return children;
}
- @Override
- public boolean test(Object[] values) {
- return function.test(values, children);
- }
-
@Override
public boolean test(InternalRow row) {
return function.test(row, children);
@@ -95,8 +90,6 @@ public class CompoundPredicate implements Predicate {
/** Evaluate the predicate result based on multiple {@link Predicate}s. */
public abstract static class Function implements Serializable {
- public abstract boolean test(Object[] values, List<Predicate>
children);
-
public abstract boolean test(InternalRow row, List<Predicate>
children);
public abstract boolean test(
diff --git
a/paimon-common/src/main/java/org/apache/paimon/predicate/LeafPredicate.java
b/paimon-common/src/main/java/org/apache/paimon/predicate/LeafPredicate.java
index ed291a15e..d2a2461ee 100644
--- a/paimon-common/src/main/java/org/apache/paimon/predicate/LeafPredicate.java
+++ b/paimon-common/src/main/java/org/apache/paimon/predicate/LeafPredicate.java
@@ -88,11 +88,6 @@ public class LeafPredicate implements Predicate {
return new LeafPredicate(function, type, fieldIndex, fieldName,
literals);
}
- @Override
- public boolean test(Object[] values) {
- return function.test(type, values[fieldIndex], literals);
- }
-
@Override
public boolean test(InternalRow row) {
return function.test(type, InternalRowUtils.get(row, fieldIndex,
type), literals);
diff --git a/paimon-common/src/main/java/org/apache/paimon/predicate/Or.java
b/paimon-common/src/main/java/org/apache/paimon/predicate/Or.java
index e5beb0ddf..c145878a2 100644
--- a/paimon-common/src/main/java/org/apache/paimon/predicate/Or.java
+++ b/paimon-common/src/main/java/org/apache/paimon/predicate/Or.java
@@ -34,16 +34,6 @@ public class Or extends CompoundPredicate.Function {
private Or() {}
- @Override
- public boolean test(Object[] values, List<Predicate> children) {
- for (Predicate child : children) {
- if (child.test(values)) {
- return true;
- }
- }
- return false;
- }
-
@Override
public boolean test(InternalRow row, List<Predicate> children) {
for (Predicate child : children) {
diff --git
a/paimon-common/src/main/java/org/apache/paimon/predicate/Predicate.java
b/paimon-common/src/main/java/org/apache/paimon/predicate/Predicate.java
index 3c9d04b18..c3d0cd8eb 100644
--- a/paimon-common/src/main/java/org/apache/paimon/predicate/Predicate.java
+++ b/paimon-common/src/main/java/org/apache/paimon/predicate/Predicate.java
@@ -34,13 +34,6 @@ import java.util.Optional;
@Public
public interface Predicate extends Serializable {
- /**
- * Test based on the specific input column values.
- *
- * @return return true when hit, false when not hit.
- */
- boolean test(Object[] values);
-
/**
* Test based on the specific input row.
*
diff --git
a/paimon-common/src/main/java/org/apache/paimon/predicate/PredicateFilter.java
b/paimon-common/src/main/java/org/apache/paimon/predicate/PredicateFilter.java
deleted file mode 100644
index f88bc1445..000000000
---
a/paimon-common/src/main/java/org/apache/paimon/predicate/PredicateFilter.java
+++ /dev/null
@@ -1,49 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package org.apache.paimon.predicate;
-
-import org.apache.paimon.data.InternalRow;
-import org.apache.paimon.types.RowType;
-import org.apache.paimon.utils.Filter;
-import org.apache.paimon.utils.RowDataToObjectArrayConverter;
-
-import javax.annotation.Nullable;
-
-import java.util.List;
-
-/** A {@link Filter} to filter {@link InternalRow}. */
-public class PredicateFilter implements Filter<InternalRow> {
-
- private final RowDataToObjectArrayConverter arrayConverter;
- @Nullable private final Predicate predicate;
-
- public PredicateFilter(RowType rowType, List<Predicate> predicates) {
- this(rowType, predicates.isEmpty() ? null :
PredicateBuilder.and(predicates));
- }
-
- public PredicateFilter(RowType rowType, @Nullable Predicate predicate) {
- this.arrayConverter = new RowDataToObjectArrayConverter(rowType);
- this.predicate = predicate;
- }
-
- @Override
- public boolean test(InternalRow rowData) {
- return predicate == null ||
predicate.test(arrayConverter.convert(rowData));
- }
-}
diff --git
a/paimon-common/src/test/java/org/apache/paimon/predicate/PredicateBuilderTest.java
b/paimon-common/src/test/java/org/apache/paimon/predicate/PredicateBuilderTest.java
index 3f7d821ed..b88240333 100644
---
a/paimon-common/src/test/java/org/apache/paimon/predicate/PredicateBuilderTest.java
+++
b/paimon-common/src/test/java/org/apache/paimon/predicate/PredicateBuilderTest.java
@@ -18,6 +18,7 @@
package org.apache.paimon.predicate;
+import org.apache.paimon.data.GenericRow;
import org.apache.paimon.format.FieldStats;
import org.apache.paimon.types.IntType;
import org.apache.paimon.types.RowType;
@@ -36,11 +37,11 @@ public class PredicateBuilderTest {
PredicateBuilder builder = new PredicateBuilder(RowType.of(new
IntType()));
Predicate predicate = builder.between(0, 1, 3);
- assertThat(predicate.test(new Object[] {1})).isEqualTo(true);
- assertThat(predicate.test(new Object[] {2})).isEqualTo(true);
- assertThat(predicate.test(new Object[] {3})).isEqualTo(true);
- assertThat(predicate.test(new Object[] {4})).isEqualTo(false);
- assertThat(predicate.test(new Object[] {null})).isEqualTo(false);
+ assertThat(predicate.test(GenericRow.of(1))).isEqualTo(true);
+ assertThat(predicate.test(GenericRow.of(2))).isEqualTo(true);
+ assertThat(predicate.test(GenericRow.of(3))).isEqualTo(true);
+ assertThat(predicate.test(GenericRow.of(4))).isEqualTo(false);
+ assertThat(predicate.test(GenericRow.of((Object)
null))).isEqualTo(false);
assertThat(predicate.test(3, new FieldStats[] {new FieldStats(0, 5,
0L)})).isEqualTo(true);
assertThat(predicate.test(3, new FieldStats[] {new FieldStats(2, 5,
0L)})).isEqualTo(true);
@@ -55,11 +56,11 @@ public class PredicateBuilderTest {
PredicateBuilder builder = new PredicateBuilder(RowType.of(new
IntType()));
Predicate predicate = builder.between(0, 1, null);
- assertThat(predicate.test(new Object[] {1})).isEqualTo(false);
- assertThat(predicate.test(new Object[] {2})).isEqualTo(false);
- assertThat(predicate.test(new Object[] {3})).isEqualTo(false);
- assertThat(predicate.test(new Object[] {4})).isEqualTo(false);
- assertThat(predicate.test(new Object[] {null})).isEqualTo(false);
+ assertThat(predicate.test(GenericRow.of(1))).isEqualTo(false);
+ assertThat(predicate.test(GenericRow.of(2))).isEqualTo(false);
+ assertThat(predicate.test(GenericRow.of(3))).isEqualTo(false);
+ assertThat(predicate.test(GenericRow.of(4))).isEqualTo(false);
+ assertThat(predicate.test(GenericRow.of((Object)
null))).isEqualTo(false);
assertThat(predicate.test(3, new FieldStats[] {new FieldStats(0, 5,
0L)})).isEqualTo(false);
assertThat(predicate.test(3, new FieldStats[] {new FieldStats(2, 5,
0L)})).isEqualTo(false);
diff --git
a/paimon-common/src/test/java/org/apache/paimon/predicate/PredicateTest.java
b/paimon-common/src/test/java/org/apache/paimon/predicate/PredicateTest.java
index 58cc61dd8..ceac81b38 100644
--- a/paimon-common/src/test/java/org/apache/paimon/predicate/PredicateTest.java
+++ b/paimon-common/src/test/java/org/apache/paimon/predicate/PredicateTest.java
@@ -18,6 +18,7 @@
package org.apache.paimon.predicate;
+import org.apache.paimon.data.GenericRow;
import org.apache.paimon.format.FieldStats;
import org.apache.paimon.types.IntType;
import org.apache.paimon.types.RowType;
@@ -38,9 +39,9 @@ public class PredicateTest {
PredicateBuilder builder = new PredicateBuilder(RowType.of(new
IntType()));
Predicate predicate = builder.equal(0, 5);
- assertThat(predicate.test(new Object[] {4})).isEqualTo(false);
- assertThat(predicate.test(new Object[] {5})).isEqualTo(true);
- assertThat(predicate.test(new Object[] {null})).isEqualTo(false);
+ assertThat(predicate.test(GenericRow.of(4))).isEqualTo(false);
+ assertThat(predicate.test(GenericRow.of(5))).isEqualTo(true);
+ assertThat(predicate.test(GenericRow.of((Object)
null))).isEqualTo(false);
assertThat(predicate.test(3, new FieldStats[] {new FieldStats(0, 5,
0L)})).isEqualTo(true);
assertThat(predicate.test(3, new FieldStats[] {new FieldStats(0, 6,
0L)})).isEqualTo(true);
@@ -56,8 +57,8 @@ public class PredicateTest {
PredicateBuilder builder = new PredicateBuilder(RowType.of(new
IntType()));
Predicate predicate = builder.equal(0, null);
- assertThat(predicate.test(new Object[] {4})).isEqualTo(false);
- assertThat(predicate.test(new Object[] {null})).isEqualTo(false);
+ assertThat(predicate.test(GenericRow.of(4))).isEqualTo(false);
+ assertThat(predicate.test(GenericRow.of((Object)
null))).isEqualTo(false);
assertThat(predicate.test(3, new FieldStats[] {new FieldStats(0, 5,
0L)})).isEqualTo(false);
assertThat(predicate.test(1, new FieldStats[] {new FieldStats(null,
null, 1L)}))
@@ -69,9 +70,9 @@ public class PredicateTest {
PredicateBuilder builder = new PredicateBuilder(RowType.of(new
IntType()));
Predicate predicate = builder.notEqual(0, 5);
- assertThat(predicate.test(new Object[] {4})).isEqualTo(true);
- assertThat(predicate.test(new Object[] {5})).isEqualTo(false);
- assertThat(predicate.test(new Object[] {null})).isEqualTo(false);
+ assertThat(predicate.test(GenericRow.of(4))).isEqualTo(true);
+ assertThat(predicate.test(GenericRow.of(5))).isEqualTo(false);
+ assertThat(predicate.test(GenericRow.of((Object)
null))).isEqualTo(false);
assertThat(predicate.test(3, new FieldStats[] {new FieldStats(0, 5,
0L)})).isEqualTo(true);
assertThat(predicate.test(3, new FieldStats[] {new FieldStats(0, 6,
0L)})).isEqualTo(true);
@@ -88,8 +89,8 @@ public class PredicateTest {
PredicateBuilder builder = new PredicateBuilder(RowType.of(new
IntType()));
Predicate predicate = builder.notEqual(0, null);
- assertThat(predicate.test(new Object[] {4})).isEqualTo(false);
- assertThat(predicate.test(new Object[] {null})).isEqualTo(false);
+ assertThat(predicate.test(GenericRow.of(4))).isEqualTo(false);
+ assertThat(predicate.test(GenericRow.of((Object)
null))).isEqualTo(false);
assertThat(predicate.test(3, new FieldStats[] {new FieldStats(0, 5,
0L)})).isEqualTo(false);
assertThat(predicate.test(1, new FieldStats[] {new FieldStats(null,
null, 1L)}))
@@ -101,10 +102,10 @@ public class PredicateTest {
PredicateBuilder builder = new PredicateBuilder(RowType.of(new
IntType()));
Predicate predicate = builder.greaterThan(0, 5);
- assertThat(predicate.test(new Object[] {4})).isEqualTo(false);
- assertThat(predicate.test(new Object[] {5})).isEqualTo(false);
- assertThat(predicate.test(new Object[] {6})).isEqualTo(true);
- assertThat(predicate.test(new Object[] {null})).isEqualTo(false);
+ assertThat(predicate.test(GenericRow.of(4))).isEqualTo(false);
+ assertThat(predicate.test(GenericRow.of(5))).isEqualTo(false);
+ assertThat(predicate.test(GenericRow.of(6))).isEqualTo(true);
+ assertThat(predicate.test(GenericRow.of((Object)
null))).isEqualTo(false);
assertThat(predicate.test(3, new FieldStats[] {new FieldStats(0, 4,
0L)})).isEqualTo(false);
assertThat(predicate.test(3, new FieldStats[] {new FieldStats(0, 5,
0L)})).isEqualTo(false);
@@ -121,8 +122,8 @@ public class PredicateTest {
PredicateBuilder builder = new PredicateBuilder(RowType.of(new
IntType()));
Predicate predicate = builder.greaterThan(0, null);
- assertThat(predicate.test(new Object[] {4})).isEqualTo(false);
- assertThat(predicate.test(new Object[] {null})).isEqualTo(false);
+ assertThat(predicate.test(GenericRow.of(4))).isEqualTo(false);
+ assertThat(predicate.test(GenericRow.of((Object)
null))).isEqualTo(false);
assertThat(predicate.test(3, new FieldStats[] {new FieldStats(0, 4,
0L)})).isEqualTo(false);
assertThat(predicate.test(1, new FieldStats[] {new FieldStats(null,
null, 1L)}))
@@ -134,10 +135,10 @@ public class PredicateTest {
PredicateBuilder builder = new PredicateBuilder(RowType.of(new
IntType()));
Predicate predicate = builder.greaterOrEqual(0, 5);
- assertThat(predicate.test(new Object[] {4})).isEqualTo(false);
- assertThat(predicate.test(new Object[] {5})).isEqualTo(true);
- assertThat(predicate.test(new Object[] {6})).isEqualTo(true);
- assertThat(predicate.test(new Object[] {null})).isEqualTo(false);
+ assertThat(predicate.test(GenericRow.of(4))).isEqualTo(false);
+ assertThat(predicate.test(GenericRow.of(5))).isEqualTo(true);
+ assertThat(predicate.test(GenericRow.of(6))).isEqualTo(true);
+ assertThat(predicate.test(GenericRow.of((Object)
null))).isEqualTo(false);
assertThat(predicate.test(3, new FieldStats[] {new FieldStats(0, 4,
0L)})).isEqualTo(false);
assertThat(predicate.test(3, new FieldStats[] {new FieldStats(0, 5,
0L)})).isEqualTo(true);
@@ -154,8 +155,8 @@ public class PredicateTest {
PredicateBuilder builder = new PredicateBuilder(RowType.of(new
IntType()));
Predicate predicate = builder.greaterOrEqual(0, null);
- assertThat(predicate.test(new Object[] {4})).isEqualTo(false);
- assertThat(predicate.test(new Object[] {null})).isEqualTo(false);
+ assertThat(predicate.test(GenericRow.of(4))).isEqualTo(false);
+ assertThat(predicate.test(GenericRow.of((Object)
null))).isEqualTo(false);
assertThat(predicate.test(3, new FieldStats[] {new FieldStats(0, 4,
0L)})).isEqualTo(false);
assertThat(predicate.test(1, new FieldStats[] {new FieldStats(null,
null, 1L)}))
@@ -167,10 +168,10 @@ public class PredicateTest {
PredicateBuilder builder = new PredicateBuilder(RowType.of(new
IntType()));
Predicate predicate = builder.lessThan(0, 5);
- assertThat(predicate.test(new Object[] {4})).isEqualTo(true);
- assertThat(predicate.test(new Object[] {5})).isEqualTo(false);
- assertThat(predicate.test(new Object[] {6})).isEqualTo(false);
- assertThat(predicate.test(new Object[] {null})).isEqualTo(false);
+ assertThat(predicate.test(GenericRow.of(4))).isEqualTo(true);
+ assertThat(predicate.test(GenericRow.of(5))).isEqualTo(false);
+ assertThat(predicate.test(GenericRow.of(6))).isEqualTo(false);
+ assertThat(predicate.test(GenericRow.of((Object)
null))).isEqualTo(false);
assertThat(predicate.test(3, new FieldStats[] {new FieldStats(6, 7,
0L)})).isEqualTo(false);
assertThat(predicate.test(3, new FieldStats[] {new FieldStats(5, 7,
0L)})).isEqualTo(false);
@@ -186,8 +187,8 @@ public class PredicateTest {
PredicateBuilder builder = new PredicateBuilder(RowType.of(new
IntType()));
Predicate predicate = builder.lessThan(0, null);
- assertThat(predicate.test(new Object[] {4})).isEqualTo(false);
- assertThat(predicate.test(new Object[] {null})).isEqualTo(false);
+ assertThat(predicate.test(GenericRow.of(4))).isEqualTo(false);
+ assertThat(predicate.test(GenericRow.of((Object)
null))).isEqualTo(false);
assertThat(predicate.test(3, new FieldStats[] {new FieldStats(6, 7,
0L)})).isEqualTo(false);
assertThat(predicate.test(1, new FieldStats[] {new FieldStats(null,
null, 1L)}))
@@ -199,10 +200,10 @@ public class PredicateTest {
PredicateBuilder builder = new PredicateBuilder(RowType.of(new
IntType()));
Predicate predicate = builder.lessOrEqual(0, 5);
- assertThat(predicate.test(new Object[] {4})).isEqualTo(true);
- assertThat(predicate.test(new Object[] {5})).isEqualTo(true);
- assertThat(predicate.test(new Object[] {6})).isEqualTo(false);
- assertThat(predicate.test(new Object[] {null})).isEqualTo(false);
+ assertThat(predicate.test(GenericRow.of(4))).isEqualTo(true);
+ assertThat(predicate.test(GenericRow.of(5))).isEqualTo(true);
+ assertThat(predicate.test(GenericRow.of(6))).isEqualTo(false);
+ assertThat(predicate.test(GenericRow.of((Object)
null))).isEqualTo(false);
assertThat(predicate.test(3, new FieldStats[] {new FieldStats(6, 7,
0L)})).isEqualTo(false);
assertThat(predicate.test(3, new FieldStats[] {new FieldStats(5, 7,
0L)})).isEqualTo(true);
@@ -218,8 +219,8 @@ public class PredicateTest {
PredicateBuilder builder = new PredicateBuilder(RowType.of(new
IntType()));
Predicate predicate = builder.lessOrEqual(0, null);
- assertThat(predicate.test(new Object[] {4})).isEqualTo(false);
- assertThat(predicate.test(new Object[] {null})).isEqualTo(false);
+ assertThat(predicate.test(GenericRow.of(4))).isEqualTo(false);
+ assertThat(predicate.test(GenericRow.of((Object)
null))).isEqualTo(false);
assertThat(predicate.test(3, new FieldStats[] {new FieldStats(6, 7,
0L)})).isEqualTo(false);
assertThat(predicate.test(1, new FieldStats[] {new FieldStats(null,
null, 1L)}))
@@ -231,8 +232,8 @@ public class PredicateTest {
PredicateBuilder builder = new PredicateBuilder(RowType.of(new
IntType()));
Predicate predicate = builder.isNull(0);
- assertThat(predicate.test(new Object[] {4})).isEqualTo(false);
- assertThat(predicate.test(new Object[] {null})).isEqualTo(true);
+ assertThat(predicate.test(GenericRow.of(4))).isEqualTo(false);
+ assertThat(predicate.test(GenericRow.of((Object)
null))).isEqualTo(true);
assertThat(predicate.test(3, new FieldStats[] {new FieldStats(6, 7,
0L)})).isEqualTo(false);
assertThat(predicate.test(3, new FieldStats[] {new FieldStats(5, 7,
1L)})).isEqualTo(true);
@@ -245,8 +246,8 @@ public class PredicateTest {
PredicateBuilder builder = new PredicateBuilder(RowType.of(new
IntType()));
Predicate predicate = builder.isNotNull(0);
- assertThat(predicate.test(new Object[] {4})).isEqualTo(true);
- assertThat(predicate.test(new Object[] {null})).isEqualTo(false);
+ assertThat(predicate.test(GenericRow.of(4))).isEqualTo(true);
+ assertThat(predicate.test(GenericRow.of((Object)
null))).isEqualTo(false);
assertThat(predicate.test(3, new FieldStats[] {new FieldStats(6, 7,
0L)})).isEqualTo(true);
assertThat(predicate.test(3, new FieldStats[] {new FieldStats(5, 7,
1L)})).isEqualTo(true);
@@ -262,10 +263,10 @@ public class PredicateTest {
Predicate predicate = builder.in(0, Arrays.asList(1, 3));
assertThat(predicate).isInstanceOf(CompoundPredicate.class);
- assertThat(predicate.test(new Object[] {1})).isEqualTo(true);
- assertThat(predicate.test(new Object[] {2})).isEqualTo(false);
- assertThat(predicate.test(new Object[] {3})).isEqualTo(true);
- assertThat(predicate.test(new Object[] {null})).isEqualTo(false);
+ assertThat(predicate.test(GenericRow.of(1))).isEqualTo(true);
+ assertThat(predicate.test(GenericRow.of(2))).isEqualTo(false);
+ assertThat(predicate.test(GenericRow.of(3))).isEqualTo(true);
+ assertThat(predicate.test(GenericRow.of((Object)
null))).isEqualTo(false);
assertThat(predicate.test(3, new FieldStats[] {new FieldStats(0, 5,
0L)})).isEqualTo(true);
assertThat(predicate.test(3, new FieldStats[] {new FieldStats(6, 7,
0L)})).isEqualTo(false);
@@ -279,10 +280,10 @@ public class PredicateTest {
Predicate predicate = builder.in(0, Arrays.asList(1, null, 3));
assertThat(predicate).isInstanceOf(CompoundPredicate.class);
- assertThat(predicate.test(new Object[] {1})).isEqualTo(true);
- assertThat(predicate.test(new Object[] {2})).isEqualTo(false);
- assertThat(predicate.test(new Object[] {3})).isEqualTo(true);
- assertThat(predicate.test(new Object[] {null})).isEqualTo(false);
+ assertThat(predicate.test(GenericRow.of(1))).isEqualTo(true);
+ assertThat(predicate.test(GenericRow.of(2))).isEqualTo(false);
+ assertThat(predicate.test(GenericRow.of(3))).isEqualTo(true);
+ assertThat(predicate.test(GenericRow.of((Object)
null))).isEqualTo(false);
assertThat(predicate.test(3, new FieldStats[] {new FieldStats(0, 5,
0L)})).isEqualTo(true);
assertThat(predicate.test(3, new FieldStats[] {new FieldStats(6, 7,
0L)})).isEqualTo(false);
@@ -296,10 +297,10 @@ public class PredicateTest {
Predicate predicate = builder.notIn(0, Arrays.asList(1, 3));
assertThat(predicate).isInstanceOf(CompoundPredicate.class);
- assertThat(predicate.test(new Object[] {1})).isEqualTo(false);
- assertThat(predicate.test(new Object[] {2})).isEqualTo(true);
- assertThat(predicate.test(new Object[] {3})).isEqualTo(false);
- assertThat(predicate.test(new Object[] {null})).isEqualTo(false);
+ assertThat(predicate.test(GenericRow.of(1))).isEqualTo(false);
+ assertThat(predicate.test(GenericRow.of(2))).isEqualTo(true);
+ assertThat(predicate.test(GenericRow.of(3))).isEqualTo(false);
+ assertThat(predicate.test(GenericRow.of((Object)
null))).isEqualTo(false);
assertThat(predicate.test(3, new FieldStats[] {new FieldStats(1, 1,
0L)})).isEqualTo(false);
assertThat(predicate.test(3, new FieldStats[] {new FieldStats(3, 3,
0L)})).isEqualTo(false);
@@ -316,10 +317,10 @@ public class PredicateTest {
Predicate predicate = builder.notIn(0, Arrays.asList(1, null, 3));
assertThat(predicate).isInstanceOf(CompoundPredicate.class);
- assertThat(predicate.test(new Object[] {1})).isEqualTo(false);
- assertThat(predicate.test(new Object[] {2})).isEqualTo(false);
- assertThat(predicate.test(new Object[] {3})).isEqualTo(false);
- assertThat(predicate.test(new Object[] {null})).isEqualTo(false);
+ assertThat(predicate.test(GenericRow.of(1))).isEqualTo(false);
+ assertThat(predicate.test(GenericRow.of(2))).isEqualTo(false);
+ assertThat(predicate.test(GenericRow.of(3))).isEqualTo(false);
+ assertThat(predicate.test(GenericRow.of((Object)
null))).isEqualTo(false);
assertThat(predicate.test(3, new FieldStats[] {new FieldStats(1, 1,
0L)})).isEqualTo(false);
assertThat(predicate.test(3, new FieldStats[] {new FieldStats(3, 3,
0L)})).isEqualTo(false);
@@ -342,10 +343,10 @@ public class PredicateTest {
Predicate predicate = builder.in(0, literals);
assertThat(predicate).isInstanceOf(LeafPredicate.class);
- assertThat(predicate.test(new Object[] {1})).isEqualTo(true);
- assertThat(predicate.test(new Object[] {2})).isEqualTo(false);
- assertThat(predicate.test(new Object[] {3})).isEqualTo(true);
- assertThat(predicate.test(new Object[] {null})).isEqualTo(false);
+ assertThat(predicate.test(GenericRow.of(1))).isEqualTo(true);
+ assertThat(predicate.test(GenericRow.of(2))).isEqualTo(false);
+ assertThat(predicate.test(GenericRow.of(3))).isEqualTo(true);
+ assertThat(predicate.test(GenericRow.of((Object)
null))).isEqualTo(false);
assertThat(predicate.test(3, new FieldStats[] {new FieldStats(0, 5,
0L)})).isEqualTo(true);
assertThat(predicate.test(3, new FieldStats[] {new FieldStats(6, 7,
0L)})).isEqualTo(false);
@@ -368,10 +369,10 @@ public class PredicateTest {
Predicate predicate = builder.in(0, literals);
assertThat(predicate).isInstanceOf(LeafPredicate.class);
- assertThat(predicate.test(new Object[] {1})).isEqualTo(true);
- assertThat(predicate.test(new Object[] {2})).isEqualTo(false);
- assertThat(predicate.test(new Object[] {3})).isEqualTo(true);
- assertThat(predicate.test(new Object[] {null})).isEqualTo(false);
+ assertThat(predicate.test(GenericRow.of(1))).isEqualTo(true);
+ assertThat(predicate.test(GenericRow.of(2))).isEqualTo(false);
+ assertThat(predicate.test(GenericRow.of(3))).isEqualTo(true);
+ assertThat(predicate.test(GenericRow.of((Object)
null))).isEqualTo(false);
assertThat(predicate.test(3, new FieldStats[] {new FieldStats(0, 5,
0L)})).isEqualTo(true);
assertThat(predicate.test(3, new FieldStats[] {new FieldStats(6, 7,
0L)})).isEqualTo(false);
@@ -393,10 +394,10 @@ public class PredicateTest {
Predicate predicate = builder.notIn(0, literals);
assertThat(predicate).isInstanceOf(LeafPredicate.class);
- assertThat(predicate.test(new Object[] {1})).isEqualTo(false);
- assertThat(predicate.test(new Object[] {2})).isEqualTo(true);
- assertThat(predicate.test(new Object[] {3})).isEqualTo(false);
- assertThat(predicate.test(new Object[] {null})).isEqualTo(false);
+ assertThat(predicate.test(GenericRow.of(1))).isEqualTo(false);
+ assertThat(predicate.test(GenericRow.of(2))).isEqualTo(true);
+ assertThat(predicate.test(GenericRow.of(3))).isEqualTo(false);
+ assertThat(predicate.test(GenericRow.of((Object)
null))).isEqualTo(false);
assertThat(predicate.test(3, new FieldStats[] {new FieldStats(1, 1,
0L)})).isEqualTo(false);
assertThat(predicate.test(3, new FieldStats[] {new FieldStats(3, 3,
0L)})).isEqualTo(false);
@@ -422,10 +423,10 @@ public class PredicateTest {
Predicate predicate = builder.notIn(0, literals);
assertThat(predicate).isInstanceOf(LeafPredicate.class);
- assertThat(predicate.test(new Object[] {1})).isEqualTo(false);
- assertThat(predicate.test(new Object[] {2})).isEqualTo(false);
- assertThat(predicate.test(new Object[] {3})).isEqualTo(false);
- assertThat(predicate.test(new Object[] {null})).isEqualTo(false);
+ assertThat(predicate.test(GenericRow.of(1))).isEqualTo(false);
+ assertThat(predicate.test(GenericRow.of(2))).isEqualTo(false);
+ assertThat(predicate.test(GenericRow.of(3))).isEqualTo(false);
+ assertThat(predicate.test(GenericRow.of((Object)
null))).isEqualTo(false);
assertThat(predicate.test(3, new FieldStats[] {new FieldStats(1, 1,
0L)})).isEqualTo(false);
assertThat(predicate.test(3, new FieldStats[] {new FieldStats(3, 3,
0L)})).isEqualTo(false);
@@ -443,10 +444,10 @@ public class PredicateTest {
PredicateBuilder builder = new PredicateBuilder(RowType.of(new
IntType(), new IntType()));
Predicate predicate = PredicateBuilder.and(builder.equal(0, 3),
builder.equal(1, 5));
- assertThat(predicate.test(new Object[] {4, 5})).isEqualTo(false);
- assertThat(predicate.test(new Object[] {3, 6})).isEqualTo(false);
- assertThat(predicate.test(new Object[] {3, 5})).isEqualTo(true);
- assertThat(predicate.test(new Object[] {null, 5})).isEqualTo(false);
+ assertThat(predicate.test(GenericRow.of(4, 5))).isEqualTo(false);
+ assertThat(predicate.test(GenericRow.of(3, 6))).isEqualTo(false);
+ assertThat(predicate.test(GenericRow.of(3, 5))).isEqualTo(true);
+ assertThat(predicate.test(GenericRow.of(null, 5))).isEqualTo(false);
assertThat(
predicate.test(
@@ -479,10 +480,10 @@ public class PredicateTest {
PredicateBuilder builder = new PredicateBuilder(RowType.of(new
IntType(), new IntType()));
Predicate predicate = PredicateBuilder.or(builder.equal(0, 3),
builder.equal(1, 5));
- assertThat(predicate.test(new Object[] {4, 6})).isEqualTo(false);
- assertThat(predicate.test(new Object[] {3, 6})).isEqualTo(true);
- assertThat(predicate.test(new Object[] {3, 5})).isEqualTo(true);
- assertThat(predicate.test(new Object[] {null, 5})).isEqualTo(true);
+ assertThat(predicate.test(GenericRow.of(4, 6))).isEqualTo(false);
+ assertThat(predicate.test(GenericRow.of(3, 6))).isEqualTo(true);
+ assertThat(predicate.test(GenericRow.of(3, 5))).isEqualTo(true);
+ assertThat(predicate.test(GenericRow.of(null, 5))).isEqualTo(true);
assertThat(
predicate.test(
diff --git
a/paimon-core/src/main/java/org/apache/paimon/operation/AbstractFileStoreScan.java
b/paimon-core/src/main/java/org/apache/paimon/operation/AbstractFileStoreScan.java
index 766e17417..94a383f95 100644
---
a/paimon-core/src/main/java/org/apache/paimon/operation/AbstractFileStoreScan.java
+++
b/paimon-core/src/main/java/org/apache/paimon/operation/AbstractFileStoreScan.java
@@ -112,7 +112,7 @@ public abstract class AbstractFileStoreScan implements
FileStoreScan {
@Override
public FileStoreScan withPartitionFilter(Predicate predicate) {
if (partitionType.getFieldCount() > 0 && predicate != null) {
- this.partitionFilter =
PartitionPredicate.fromPredicate(partitionType, predicate);
+ this.partitionFilter = PartitionPredicate.fromPredicate(predicate);
} else {
this.partitionFilter = null;
}
diff --git
a/paimon-core/src/main/java/org/apache/paimon/operation/FileStoreCommitImpl.java
b/paimon-core/src/main/java/org/apache/paimon/operation/FileStoreCommitImpl.java
index 1962edcff..044eb7f6e 100644
---
a/paimon-core/src/main/java/org/apache/paimon/operation/FileStoreCommitImpl.java
+++
b/paimon-core/src/main/java/org/apache/paimon/operation/FileStoreCommitImpl.java
@@ -392,8 +392,7 @@ public class FileStoreCommitImpl implements FileStoreCommit
{
// sanity check, all changes must be done within the given
partition
if (partitionFilter != null) {
for (ManifestEntry entry : appendTableFiles) {
- if (!partitionFilter.test(
-
partitionObjectConverter.convert(entry.partition()))) {
+ if (!partitionFilter.test(entry.partition())) {
throw new IllegalArgumentException(
"Trying to overwrite partition "
+ partition
@@ -651,13 +650,10 @@ public class FileStoreCommitImpl implements
FileStoreCommit {
// collect index files
if (latestSnapshot.indexManifest() != null) {
- RowDataToObjectArrayConverter converter =
- new RowDataToObjectArrayConverter(partitionType);
List<IndexManifestEntry> entries =
indexManifestFile.read(latestSnapshot.indexManifest());
for (IndexManifestEntry entry : entries) {
- if (partitionFilter == null
- ||
partitionFilter.test(converter.convert(entry.partition()))) {
+ if (partitionFilter == null ||
partitionFilter.test(entry.partition())) {
indexChangesWithOverwrite.add(entry.toDeleteEntry());
}
}
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 0a9b5df97..2748ef40b 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
@@ -39,9 +39,8 @@ public interface PartitionPredicate {
boolean test(long rowCount, FieldStats[] fieldStats);
- static PartitionPredicate fromPredicate(RowType partitionType, Predicate
predicate) {
- return new DefaultPartitionPredicate(
- new RowDataToObjectArrayConverter(partitionType), predicate);
+ static PartitionPredicate fromPredicate(Predicate predicate) {
+ return new DefaultPartitionPredicate(predicate);
}
static PartitionPredicate fromMultiple(RowType partitionType,
List<BinaryRow> partitions) {
@@ -52,18 +51,15 @@ public interface PartitionPredicate {
/** A {@link PartitionPredicate} using {@link Predicate}. */
class DefaultPartitionPredicate implements PartitionPredicate {
- private final RowDataToObjectArrayConverter converter;
private final Predicate predicate;
- private DefaultPartitionPredicate(
- RowDataToObjectArrayConverter converter, Predicate predicate) {
- this.converter = converter;
+ private DefaultPartitionPredicate(Predicate predicate) {
this.predicate = predicate;
}
@Override
public boolean test(BinaryRow part) {
- return predicate.test(converter.convert(part));
+ return predicate.test(part);
}
@Override
diff --git a/paimon-core/src/main/java/org/apache/paimon/table/TableUtils.java
b/paimon-core/src/main/java/org/apache/paimon/table/TableUtils.java
index 91460c1bd..9b9db719a 100644
--- a/paimon-core/src/main/java/org/apache/paimon/table/TableUtils.java
+++ b/paimon-core/src/main/java/org/apache/paimon/table/TableUtils.java
@@ -22,7 +22,7 @@ import org.apache.paimon.data.InternalRow;
import org.apache.paimon.disk.IOManager;
import org.apache.paimon.disk.IOManagerImpl;
import org.apache.paimon.predicate.Predicate;
-import org.apache.paimon.predicate.PredicateFilter;
+import org.apache.paimon.predicate.PredicateBuilder;
import org.apache.paimon.reader.RecordReader;
import org.apache.paimon.table.sink.BatchTableCommit;
import org.apache.paimon.table.sink.BatchTableWrite;
@@ -58,7 +58,7 @@ public class TableUtils {
BatchTableCommit commit = writeBuilder.newCommit()) {
write.withIOManager(ioManager);
CloseableIterator<InternalRow> iterator =
reader.toCloseableIterator();
- PredicateFilter filter = new PredicateFilter(table.rowType(),
filters);
+ Predicate filter = PredicateBuilder.and(filters);
while (iterator.hasNext()) {
InternalRow row = iterator.next();
if (filter.test(row)) {
diff --git
a/paimon-core/src/test/java/org/apache/paimon/operation/FileStoreCommitTest.java
b/paimon-core/src/test/java/org/apache/paimon/operation/FileStoreCommitTest.java
index 40526b156..8d18abc16 100644
---
a/paimon-core/src/test/java/org/apache/paimon/operation/FileStoreCommitTest.java
+++
b/paimon-core/src/test/java/org/apache/paimon/operation/FileStoreCommitTest.java
@@ -44,7 +44,6 @@ import org.apache.paimon.types.DataTypes;
import org.apache.paimon.types.RowKind;
import org.apache.paimon.types.RowType;
import org.apache.paimon.utils.FailingFileIO;
-import org.apache.paimon.utils.RowDataToObjectArrayConverter;
import org.apache.paimon.utils.SnapshotManager;
import org.apache.paimon.utils.TraceableFileIO;
@@ -650,8 +649,6 @@ public class FileStoreCommitTest {
assertThat(snapshot.commitKind()).isEqualTo(Snapshot.CommitKind.OVERWRITE);
// check data
- RowDataToObjectArrayConverter partitionConverter =
- new
RowDataToObjectArrayConverter(TestKeyValueGenerator.DEFAULT_PART_TYPE);
org.apache.paimon.predicate.Predicate partitionFilter =
partitions.stream()
.map(
@@ -663,7 +660,7 @@ public class FileStoreCommitTest {
List<KeyValue> expectedKvs = new ArrayList<>();
for (Map.Entry<BinaryRow, List<KeyValue>> entry : data.entrySet()) {
- if
(partitionFilter.test(partitionConverter.convert(entry.getKey()))) {
+ if (partitionFilter.test(entry.getKey())) {
continue;
}
expectedKvs.addAll(entry.getValue());
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 78ee1377f..68a1a0265 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
@@ -57,7 +57,7 @@ public class PartitionPredicateTest {
and(builder.equal(0, 3), builder.equal(1, 5)),
and(builder.equal(0, 4), builder.equal(1, 6)));
- PartitionPredicate p1 = PartitionPredicate.fromPredicate(type,
predicate);
+ PartitionPredicate p1 = PartitionPredicate.fromPredicate(predicate);
PartitionPredicate p2 =
PartitionPredicate.fromMultiple(
type, Arrays.asList(createPart(3, 5), createPart(4,
6)));
diff --git
a/paimon-core/src/test/java/org/apache/paimon/schema/SchemaEvolutionUtilTest.java
b/paimon-core/src/test/java/org/apache/paimon/schema/SchemaEvolutionUtilTest.java
index 532fb0063..9d947f76d 100644
---
a/paimon-core/src/test/java/org/apache/paimon/schema/SchemaEvolutionUtilTest.java
+++
b/paimon-core/src/test/java/org/apache/paimon/schema/SchemaEvolutionUtilTest.java
@@ -306,8 +306,8 @@ public class SchemaEvolutionUtilTest {
LeafPredicate child = (LeafPredicate) filters.get(0);
// Validate value 1 with index 1
- assertThat(child.test(new Integer[] {0, 1})).isTrue();
+ assertThat(child.test(GenericRow.of(0, 1))).isTrue();
// Validate value 2 with index 1
- assertThat(child.test(new Integer[] {1, 2})).isFalse();
+ assertThat(child.test(GenericRow.of(1, 2))).isFalse();
}
}
diff --git
a/paimon-flink/paimon-flink-common/src/main/java/org/apache/paimon/flink/lookup/FileStoreLookupFunction.java
b/paimon-flink/paimon-flink-common/src/main/java/org/apache/paimon/flink/lookup/FileStoreLookupFunction.java
index 5685cd1cd..77ea719a2 100644
---
a/paimon-flink/paimon-flink-common/src/main/java/org/apache/paimon/flink/lookup/FileStoreLookupFunction.java
+++
b/paimon-flink/paimon-flink-common/src/main/java/org/apache/paimon/flink/lookup/FileStoreLookupFunction.java
@@ -26,12 +26,10 @@ import org.apache.paimon.flink.FlinkRowWrapper;
import org.apache.paimon.flink.utils.TableScanUtils;
import org.apache.paimon.options.Options;
import org.apache.paimon.predicate.Predicate;
-import org.apache.paimon.predicate.PredicateFilter;
import org.apache.paimon.table.FileStoreTable;
import org.apache.paimon.table.Table;
import org.apache.paimon.table.source.OutOfRangeException;
import org.apache.paimon.utils.FileIOUtils;
-import org.apache.paimon.utils.TypeUtils;
import org.apache.paimon.shade.guava30.com.google.common.primitives.Ints;
@@ -161,8 +159,8 @@ public class FileStoreLookupFunction implements
Serializable, Closeable {
storeTable,
projection,
predicate,
+ createProjectedPredicate(projection),
path,
- createRecordFilter(projection),
joinKeys);
this.lookupTable = FullCacheLookupTable.create(context,
options.get(LOOKUP_CACHE_ROWS));
}
@@ -170,7 +168,8 @@ public class FileStoreLookupFunction implements
Serializable, Closeable {
lookupTable.open();
}
- private PredicateFilter createRecordFilter(int[] projection) {
+ @Nullable
+ private Predicate createProjectedPredicate(int[] projection) {
Predicate adjustedPredicate = null;
if (predicate != null) {
// adjust to projection index
@@ -182,8 +181,7 @@ public class FileStoreLookupFunction implements
Serializable, Closeable {
.toArray())
.orElse(null);
}
- return new PredicateFilter(
- TypeUtils.project(table.rowType(), projection),
adjustedPredicate);
+ return adjustedPredicate;
}
public Collection<RowData> lookup(RowData keyRow) {
diff --git
a/paimon-flink/paimon-flink-common/src/main/java/org/apache/paimon/flink/lookup/FullCacheLookupTable.java
b/paimon-flink/paimon-flink-common/src/main/java/org/apache/paimon/flink/lookup/FullCacheLookupTable.java
index fb6e2e3b2..d0f817f79 100644
---
a/paimon-flink/paimon-flink-common/src/main/java/org/apache/paimon/flink/lookup/FullCacheLookupTable.java
+++
b/paimon-flink/paimon-flink-common/src/main/java/org/apache/paimon/flink/lookup/FullCacheLookupTable.java
@@ -34,7 +34,6 @@ import org.apache.paimon.sort.BinaryExternalSortBuffer;
import org.apache.paimon.table.FileStoreTable;
import org.apache.paimon.types.DataTypes;
import org.apache.paimon.types.RowType;
-import org.apache.paimon.utils.Filter;
import org.apache.paimon.utils.MutableObjectIterator;
import org.apache.paimon.utils.PartialRow;
import org.apache.paimon.utils.TypeUtils;
@@ -67,7 +66,7 @@ public abstract class FullCacheLookupTable implements
LookupTable {
context.table.coreOptions().toConfiguration(),
null);
FileStoreTable table = context.table;
- this.reader = new TableStreamingReader(table, context.projection,
context.predicate);
+ this.reader = new TableStreamingReader(table, context.projection,
context.tablePredicate);
this.sequenceFieldEnabled =
table.primaryKeys().size() > 0
&& new
CoreOptions(table.options()).sequenceField().isPresent();
@@ -83,11 +82,12 @@ public abstract class FullCacheLookupTable implements
LookupTable {
BinaryExternalSortBuffer bulkLoadSorter =
RocksDBState.createBulkLoadSorter(
IOManager.create(context.tempPath.toString()),
context.table.coreOptions());
+ Predicate predicate = projectedPredicate();
try (RecordReaderIterator<InternalRow> batch =
new RecordReaderIterator<>(reader.nextBatch(true,
sequenceFieldEnabled))) {
while (batch.hasNext()) {
InternalRow row = batch.next();
- if (recordFilter().test(row)) {
+ if (predicate == null || predicate.test(row)) {
bulkLoadSorter.write(GenericRow.of(toKeyBytes(row),
toValueBytes(row)));
}
}
@@ -143,8 +143,9 @@ public abstract class FullCacheLookupTable implements
LookupTable {
public abstract void refresh(Iterator<InternalRow> input, boolean
orderByLastField)
throws IOException;
- public Filter<InternalRow> recordFilter() {
- return context.recordFilter;
+ @Nullable
+ public Predicate projectedPredicate() {
+ return context.projectedPredicate;
}
public abstract byte[] toKeyBytes(InternalRow row) throws IOException;
@@ -184,23 +185,23 @@ public abstract class FullCacheLookupTable implements
LookupTable {
public final FileStoreTable table;
public final int[] projection;
- public final @Nullable Predicate predicate;
+ @Nullable public final Predicate tablePredicate;
+ @Nullable public final Predicate projectedPredicate;
public final File tempPath;
- public final Filter<InternalRow> recordFilter;
public final List<String> joinKey;
public Context(
FileStoreTable table,
int[] projection,
- @Nullable Predicate predicate,
+ @Nullable Predicate tablePredicate,
+ @Nullable Predicate projectedPredicate,
File tempPath,
- Filter<InternalRow> recordFilter,
List<String> joinKey) {
this.table = table;
this.projection = projection;
- this.predicate = predicate;
+ this.tablePredicate = tablePredicate;
+ this.projectedPredicate = projectedPredicate;
this.tempPath = tempPath;
- this.recordFilter = recordFilter;
this.joinKey = joinKey;
}
}
diff --git
a/paimon-flink/paimon-flink-common/src/main/java/org/apache/paimon/flink/lookup/NoPrimaryKeyLookupTable.java
b/paimon-flink/paimon-flink-common/src/main/java/org/apache/paimon/flink/lookup/NoPrimaryKeyLookupTable.java
index 329cd0d6a..9acb39567 100644
---
a/paimon-flink/paimon-flink-common/src/main/java/org/apache/paimon/flink/lookup/NoPrimaryKeyLookupTable.java
+++
b/paimon-flink/paimon-flink-common/src/main/java/org/apache/paimon/flink/lookup/NoPrimaryKeyLookupTable.java
@@ -24,6 +24,7 @@ import org.apache.paimon.data.InternalRow;
import org.apache.paimon.data.serializer.InternalSerializers;
import org.apache.paimon.lookup.BulkLoader;
import org.apache.paimon.lookup.RocksDBListState;
+import org.apache.paimon.predicate.Predicate;
import org.apache.paimon.types.RowKind;
import org.apache.paimon.utils.KeyProjectedRow;
import org.apache.paimon.utils.TypeUtils;
@@ -68,11 +69,12 @@ public class NoPrimaryKeyLookupTable extends
FullCacheLookupTable {
"Append table does not support order by last field.");
}
+ Predicate predicate = projectedPredicate();
while (incremental.hasNext()) {
InternalRow row = incremental.next();
joinKeyRow.replaceRow(row);
if (row.getRowKind() == RowKind.INSERT || row.getRowKind() ==
RowKind.UPDATE_AFTER) {
- if (recordFilter().test(row)) {
+ if (predicate == null || predicate.test(row)) {
state.add(joinKeyRow, row);
}
} else {
diff --git
a/paimon-flink/paimon-flink-common/src/main/java/org/apache/paimon/flink/lookup/PrimaryKeyLookupTable.java
b/paimon-flink/paimon-flink-common/src/main/java/org/apache/paimon/flink/lookup/PrimaryKeyLookupTable.java
index 8757effa3..fbec4d443 100644
---
a/paimon-flink/paimon-flink-common/src/main/java/org/apache/paimon/flink/lookup/PrimaryKeyLookupTable.java
+++
b/paimon-flink/paimon-flink-common/src/main/java/org/apache/paimon/flink/lookup/PrimaryKeyLookupTable.java
@@ -22,6 +22,7 @@ import org.apache.paimon.data.InternalRow;
import org.apache.paimon.data.serializer.InternalSerializers;
import org.apache.paimon.lookup.BulkLoader;
import org.apache.paimon.lookup.RocksDBValueState;
+import org.apache.paimon.predicate.Predicate;
import org.apache.paimon.table.FileStoreTable;
import org.apache.paimon.types.RowKind;
import org.apache.paimon.utils.KeyProjectedRow;
@@ -87,6 +88,7 @@ public class PrimaryKeyLookupTable extends
FullCacheLookupTable {
@Override
public void refresh(Iterator<InternalRow> incremental, boolean
orderByLastField)
throws IOException {
+ Predicate predicate = projectedPredicate();
while (incremental.hasNext()) {
InternalRow row = incremental.next();
primaryKeyRow.replaceRow(row);
@@ -99,7 +101,7 @@ public class PrimaryKeyLookupTable extends
FullCacheLookupTable {
}
if (row.getRowKind() == RowKind.INSERT || row.getRowKind() ==
RowKind.UPDATE_AFTER) {
- if (recordFilter().test(row)) {
+ if (predicate == null || predicate.test(row)) {
tableState.put(primaryKeyRow, row);
} else {
// The new record under primary key is filtered
diff --git
a/paimon-flink/paimon-flink-common/src/main/java/org/apache/paimon/flink/lookup/SecondaryIndexLookupTable.java
b/paimon-flink/paimon-flink-common/src/main/java/org/apache/paimon/flink/lookup/SecondaryIndexLookupTable.java
index 2f973bfd5..d95481a32 100644
---
a/paimon-flink/paimon-flink-common/src/main/java/org/apache/paimon/flink/lookup/SecondaryIndexLookupTable.java
+++
b/paimon-flink/paimon-flink-common/src/main/java/org/apache/paimon/flink/lookup/SecondaryIndexLookupTable.java
@@ -21,6 +21,7 @@ package org.apache.paimon.flink.lookup;
import org.apache.paimon.data.InternalRow;
import org.apache.paimon.data.serializer.InternalSerializers;
import org.apache.paimon.lookup.RocksDBSetState;
+import org.apache.paimon.predicate.Predicate;
import org.apache.paimon.types.RowKind;
import org.apache.paimon.utils.KeyProjectedRow;
import org.apache.paimon.utils.TypeUtils;
@@ -67,6 +68,7 @@ public class SecondaryIndexLookupTable extends
PrimaryKeyLookupTable {
@Override
public void refresh(Iterator<InternalRow> incremental, boolean
orderByLastField)
throws IOException {
+ Predicate predicate = projectedPredicate();
while (incremental.hasNext()) {
InternalRow row = incremental.next();
primaryKeyRow.replaceRow(row);
@@ -90,7 +92,7 @@ public class SecondaryIndexLookupTable extends
PrimaryKeyLookupTable {
indexState.retract(secKeyRow.replaceRow(previous),
primaryKeyRow);
}
- if (recordFilter().test(row)) {
+ if (predicate == null || predicate.test(row)) {
tableState.put(primaryKeyRow, row);
indexState.add(secKeyRow.replaceRow(row), primaryKeyRow);
} else {
diff --git
a/paimon-flink/paimon-flink-common/src/main/java/org/apache/paimon/flink/lookup/TableStreamingReader.java
b/paimon-flink/paimon-flink-common/src/main/java/org/apache/paimon/flink/lookup/TableStreamingReader.java
index 7ff1493cc..c96eab450 100644
---
a/paimon-flink/paimon-flink-common/src/main/java/org/apache/paimon/flink/lookup/TableStreamingReader.java
+++
b/paimon-flink/paimon-flink-common/src/main/java/org/apache/paimon/flink/lookup/TableStreamingReader.java
@@ -26,7 +26,6 @@ import org.apache.paimon.io.SplitsParallelReadUtil;
import org.apache.paimon.mergetree.compact.ConcatRecordReader;
import org.apache.paimon.options.Options;
import org.apache.paimon.predicate.Predicate;
-import org.apache.paimon.predicate.PredicateFilter;
import org.apache.paimon.reader.RecordReader;
import org.apache.paimon.table.Table;
import org.apache.paimon.table.source.KeyValueTableRead;
@@ -59,7 +58,7 @@ public class TableStreamingReader {
private final Table table;
private final int[] projection;
private final ReadBuilder readBuilder;
- @Nullable private final PredicateFilter recordFilter;
+ @Nullable private final Predicate projectedPredicate;
private final StreamTableScan scan;
public TableStreamingReader(Table table, int[] projection, @Nullable
Predicate predicate) {
@@ -94,12 +93,10 @@ public class TableStreamingReader {
int[] fieldIdxToProjectionIdx =
IntStream.range(0,
table.rowType().getFieldCount()).map(operator).toArray();
- this.recordFilter =
- new PredicateFilter(
- TypeUtils.project(table.rowType(), projection),
- transformFieldMapping(predicate,
fieldIdxToProjectionIdx).orElse(null));
+ this.projectedPredicate =
+ transformFieldMapping(predicate,
fieldIdxToProjectionIdx).orElse(null);
} else {
- recordFilter = null;
+ this.projectedPredicate = null;
}
}
@@ -134,8 +131,8 @@ public class TableStreamingReader {
reader = ConcatRecordReader.create(readers);
}
- if (recordFilter != null) {
- reader = reader.filter(recordFilter::test);
+ if (projectedPredicate != null) {
+ reader = reader.filter(projectedPredicate::test);
}
return reader;
}
diff --git
a/paimon-flink/paimon-flink-common/src/test/java/org/apache/paimon/flink/PredicateConverterTest.java
b/paimon-flink/paimon-flink-common/src/test/java/org/apache/paimon/flink/PredicateConverterTest.java
index 66d757b09..e5df44849 100644
---
a/paimon-flink/paimon-flink-common/src/test/java/org/apache/paimon/flink/PredicateConverterTest.java
+++
b/paimon-flink/paimon-flink-common/src/test/java/org/apache/paimon/flink/PredicateConverterTest.java
@@ -19,6 +19,7 @@
package org.apache.paimon.flink;
import org.apache.paimon.data.BinaryString;
+import org.apache.paimon.data.GenericRow;
import org.apache.paimon.format.FieldStats;
import org.apache.paimon.predicate.Predicate;
import org.apache.paimon.predicate.PredicateBuilder;
@@ -259,7 +260,7 @@ public class PredicateConverterTest {
IntStream.range(0, valuesList.size())
.forEach(
i ->
- assertThat(predicate.test(valuesList.get(i)))
+
assertThat(predicate.test(GenericRow.of(valuesList.get(i))))
.isEqualTo(expectedForValues.get(i)));
IntStream.range(0, rowCountList.size())
.forEach(
diff --git
a/paimon-flink/paimon-flink-common/src/test/java/org/apache/paimon/flink/lookup/LookupTableTest.java
b/paimon-flink/paimon-flink-common/src/test/java/org/apache/paimon/flink/lookup/LookupTableTest.java
index 0e5d0792b..9af88502a 100644
---
a/paimon-flink/paimon-flink-common/src/test/java/org/apache/paimon/flink/lookup/LookupTableTest.java
+++
b/paimon-flink/paimon-flink-common/src/test/java/org/apache/paimon/flink/lookup/LookupTableTest.java
@@ -29,6 +29,7 @@ import
org.apache.paimon.flink.lookup.FullCacheLookupTable.TableBulkLoader;
import org.apache.paimon.fs.FileIO;
import org.apache.paimon.fs.local.LocalFileIO;
import org.apache.paimon.options.Options;
+import org.apache.paimon.predicate.PredicateBuilder;
import org.apache.paimon.schema.Schema;
import org.apache.paimon.schema.SchemaManager;
import org.apache.paimon.schema.SchemaUtils;
@@ -36,7 +37,6 @@ import org.apache.paimon.schema.TableSchema;
import org.apache.paimon.table.FileStoreTable;
import org.apache.paimon.table.FileStoreTableFactory;
import org.apache.paimon.table.TableTestBase;
-import org.apache.paimon.types.DataTypes;
import org.apache.paimon.types.IntType;
import org.apache.paimon.types.RowKind;
import org.apache.paimon.types.RowType;
@@ -63,6 +63,7 @@ import java.util.concurrent.ThreadLocalRandom;
import static java.util.Collections.emptyList;
import static java.util.Collections.singletonList;
+import static org.apache.paimon.types.DataTypes.INT;
import static org.assertj.core.api.Assertions.assertThat;
import static org.assertj.core.api.Assertions.assertThatThrownBy;
@@ -111,8 +112,8 @@ public class LookupTableTest extends TableTestBase {
storeTable,
new int[] {0, 1, 2},
null,
+ null,
tempDir.toFile(),
- r -> true,
singletonList("f0"));
table = FullCacheLookupTable.create(context,
ThreadLocalRandom.current().nextInt(2) * 10);
@@ -169,8 +170,8 @@ public class LookupTableTest extends TableTestBase {
storeTable,
new int[] {0, 1, 2},
null,
+ null,
tempDir.toFile(),
- r -> true,
singletonList("f0"));
table = FullCacheLookupTable.create(context,
ThreadLocalRandom.current().nextInt(2) * 10);
@@ -213,8 +214,8 @@ public class LookupTableTest extends TableTestBase {
storeTable,
new int[] {0, 1, 2},
null,
+ new PredicateBuilder(RowType.of(INT())).lessThan(0, 3),
tempDir.toFile(),
- r -> r.getInt(0) < 3,
singletonList("f0"));
table = FullCacheLookupTable.create(context,
ThreadLocalRandom.current().nextInt(2) * 10);
@@ -244,8 +245,8 @@ public class LookupTableTest extends TableTestBase {
storeTable,
new int[] {0, 1, 2},
null,
+ new PredicateBuilder(RowType.of(INT(),
INT())).lessThan(1, 22),
tempDir.toFile(),
- r -> r.getInt(1) < 22,
singletonList("f0"));
table = FullCacheLookupTable.create(context,
ThreadLocalRandom.current().nextInt(2) * 10);
@@ -267,8 +268,8 @@ public class LookupTableTest extends TableTestBase {
storeTable,
new int[] {0, 1, 2},
null,
+ null,
tempDir.toFile(),
- r -> true,
singletonList("f1"));
table = FullCacheLookupTable.create(context,
ThreadLocalRandom.current().nextInt(2) * 10);
@@ -311,8 +312,8 @@ public class LookupTableTest extends TableTestBase {
storeTable,
new int[] {0, 1, 2},
null,
+ null,
tempDir.toFile(),
- r -> true,
singletonList("f1"));
table = FullCacheLookupTable.create(context,
ThreadLocalRandom.current().nextInt(2) * 10);
@@ -365,8 +366,8 @@ public class LookupTableTest extends TableTestBase {
storeTable,
new int[] {0, 1, 2},
null,
+ new PredicateBuilder(RowType.of(INT())).lessThan(0, 3),
tempDir.toFile(),
- r -> r.getInt(0) < 3,
singletonList("f1"));
table = FullCacheLookupTable.create(context,
ThreadLocalRandom.current().nextInt(2) * 10);
@@ -405,8 +406,8 @@ public class LookupTableTest extends TableTestBase {
storeTable,
new int[] {0, 1, 2},
null,
+ null,
tempDir.toFile(),
- r -> true,
singletonList("f1"));
table = FullCacheLookupTable.create(context,
ThreadLocalRandom.current().nextInt(2) * 10);
@@ -447,8 +448,8 @@ public class LookupTableTest extends TableTestBase {
storeTable,
new int[] {0, 1, 2},
null,
+ new PredicateBuilder(RowType.of(INT(), INT(),
INT())).lessThan(2, 222),
tempDir.toFile(),
- r -> r.getInt(2) < 222,
singletonList("f1"));
table = FullCacheLookupTable.create(context,
ThreadLocalRandom.current().nextInt(2) * 10);
@@ -555,9 +556,9 @@ public class LookupTableTest extends TableTestBase {
String.format("%s/%s.db/%s", warehouse, database,
"T"));
Schema schema =
Schema.newBuilder()
- .column("pk1", DataTypes.INT())
- .column("pk2", DataTypes.INT())
- .column("col2", DataTypes.INT())
+ .column("pk1", INT())
+ .column("pk2", INT())
+ .column("col2", INT())
.primaryKey("pk1", "pk2")
.option(CoreOptions.BUCKET.key(), "2")
.option(CoreOptions.BUCKET_KEY.key(), "pk2")