Skip to content

Commit c0943c3

Browse files
committed
[core] Unify TransformPredicate and LeafPredicate to one class
1 parent 1af2dd5 commit c0943c3

File tree

28 files changed

+249
-326
lines changed

28 files changed

+249
-326
lines changed

paimon-common/src/main/java/org/apache/paimon/fileindex/FileIndexPredicate.java

Lines changed: 9 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -31,7 +31,6 @@
3131
import org.apache.paimon.predicate.PredicateVisitor;
3232
import org.apache.paimon.predicate.SortValue;
3333
import org.apache.paimon.predicate.TopN;
34-
import org.apache.paimon.predicate.TransformPredicate;
3534
import org.apache.paimon.types.RowType;
3635

3736
import org.slf4j.Logger;
@@ -42,11 +41,11 @@
4241
import java.io.Closeable;
4342
import java.io.IOException;
4443
import java.util.Collection;
45-
import java.util.Collections;
4644
import java.util.HashMap;
4745
import java.util.HashSet;
4846
import java.util.List;
4947
import java.util.Map;
48+
import java.util.Optional;
5049
import java.util.Set;
5150

5251
import static org.apache.paimon.fileindex.FileIndexResult.REMAIN;
@@ -121,7 +120,7 @@ private Set<String> getRequiredNames(Predicate filePredicate) {
121120

122121
@Override
123122
public Set<String> visit(LeafPredicate predicate) {
124-
return Collections.singleton(predicate.fieldName());
123+
return new HashSet<>(predicate.fieldNames());
125124
}
126125

127126
@Override
@@ -133,11 +132,6 @@ public Set<String> visit(CompoundPredicate predicate) {
133132
}
134133
return result;
135134
}
136-
137-
@Override
138-
public Set<String> visit(TransformPredicate predicate) {
139-
return new HashSet<>(predicate.fieldNames());
140-
}
141135
});
142136
}
143137

@@ -161,10 +155,14 @@ public FileIndexResult test(Predicate predicate) {
161155

162156
@Override
163157
public FileIndexResult visit(LeafPredicate predicate) {
158+
Optional<FieldRef> fieldRefOptional = predicate.fieldRefOptional();
159+
if (!fieldRefOptional.isPresent()) {
160+
return REMAIN;
161+
}
162+
164163
FileIndexResult compoundResult = REMAIN;
165-
FieldRef fieldRef =
166-
new FieldRef(predicate.index(), predicate.fieldName(), predicate.type());
167-
for (FileIndexReader fileIndexReader : columnIndexReaders.get(predicate.fieldName())) {
164+
FieldRef fieldRef = fieldRefOptional.get();
165+
for (FileIndexReader fileIndexReader : columnIndexReaders.get(fieldRef.name())) {
168166
compoundResult =
169167
compoundResult.and(
170168
predicate
@@ -204,10 +202,5 @@ public FileIndexResult visit(CompoundPredicate predicate) {
204202
return compoundResult == null ? REMAIN : compoundResult;
205203
}
206204
}
207-
208-
@Override
209-
public FileIndexResult visit(TransformPredicate predicate) {
210-
return REMAIN;
211-
}
212205
}
213206
}

paimon-common/src/main/java/org/apache/paimon/fileindex/FileIndexReader.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -20,8 +20,8 @@
2020

2121
import org.apache.paimon.predicate.FieldRef;
2222
import org.apache.paimon.predicate.FunctionVisitor;
23+
import org.apache.paimon.predicate.LeafPredicate;
2324
import org.apache.paimon.predicate.TopN;
24-
import org.apache.paimon.predicate.TransformPredicate;
2525

2626
import java.util.List;
2727

@@ -132,7 +132,7 @@ public FileIndexResult visitTopN(TopN topN, FileIndexResult result) {
132132
}
133133

134134
@Override
135-
public FileIndexResult visit(TransformPredicate predicate) {
135+
public FileIndexResult visitNonFieldLeaf(LeafPredicate predicate) {
136136
return REMAIN;
137137
}
138138
}

paimon-common/src/main/java/org/apache/paimon/globalindex/GlobalIndexEvaluator.java

Lines changed: 6 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,6 @@
2424
import org.apache.paimon.predicate.Or;
2525
import org.apache.paimon.predicate.Predicate;
2626
import org.apache.paimon.predicate.PredicateVisitor;
27-
import org.apache.paimon.predicate.TransformPredicate;
2827
import org.apache.paimon.predicate.VectorSearch;
2928
import org.apache.paimon.types.RowType;
3029
import org.apache.paimon.utils.IOUtils;
@@ -90,10 +89,13 @@ public Optional<GlobalIndexResult> evaluate(
9089

9190
@Override
9291
public Optional<GlobalIndexResult> visit(LeafPredicate predicate) {
92+
Optional<FieldRef> fieldRefOptional = predicate.fieldRefOptional();
93+
if (!fieldRefOptional.isPresent()) {
94+
return Optional.empty();
95+
}
9396
Optional<GlobalIndexResult> compoundResult = Optional.empty();
94-
FieldRef fieldRef =
95-
new FieldRef(predicate.index(), predicate.fieldName(), predicate.type());
96-
int fieldId = rowType.getField(predicate.fieldName()).id();
97+
FieldRef fieldRef = fieldRefOptional.get();
98+
int fieldId = rowType.getField(fieldRef.name()).id();
9799
Collection<GlobalIndexReader> readers =
98100
indexReadersCache.computeIfAbsent(fieldId, readersFunction::apply);
99101
for (GlobalIndexReader fileIndexReader : readers) {
@@ -158,11 +160,6 @@ public Optional<GlobalIndexResult> visit(CompoundPredicate predicate) {
158160
}
159161
}
160162

161-
@Override
162-
public Optional<GlobalIndexResult> visit(TransformPredicate predicate) {
163-
return Optional.empty();
164-
}
165-
166163
public void close() {
167164
IOUtils.closeAllQuietly(
168165
indexReadersCache.values().stream()

paimon-common/src/main/java/org/apache/paimon/globalindex/GlobalIndexReader.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,7 @@
1919
package org.apache.paimon.globalindex;
2020

2121
import org.apache.paimon.predicate.FunctionVisitor;
22-
import org.apache.paimon.predicate.TransformPredicate;
22+
import org.apache.paimon.predicate.LeafPredicate;
2323
import org.apache.paimon.predicate.VectorSearch;
2424

2525
import java.io.Closeable;
@@ -40,7 +40,7 @@ default Optional<GlobalIndexResult> visitOr(List<Optional<GlobalIndexResult>> ch
4040
}
4141

4242
@Override
43-
default Optional<GlobalIndexResult> visit(TransformPredicate predicate) {
43+
default Optional<GlobalIndexResult> visitNonFieldLeaf(LeafPredicate predicate) {
4444
throw new UnsupportedOperationException();
4545
}
4646

paimon-common/src/main/java/org/apache/paimon/globalindex/btree/BTreeFileMetaSelector.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,7 @@
2222
import org.apache.paimon.memory.MemorySlice;
2323
import org.apache.paimon.predicate.FieldRef;
2424
import org.apache.paimon.predicate.FunctionVisitor;
25-
import org.apache.paimon.predicate.TransformPredicate;
25+
import org.apache.paimon.predicate.LeafPredicate;
2626
import org.apache.paimon.utils.Pair;
2727

2828
import java.util.ArrayList;
@@ -212,7 +212,7 @@ public Optional<List<GlobalIndexIOMeta>> visitOr(
212212
}
213213

214214
@Override
215-
public Optional<List<GlobalIndexIOMeta>> visit(TransformPredicate predicate) {
215+
public Optional<List<GlobalIndexIOMeta>> visitNonFieldLeaf(LeafPredicate predicate) {
216216
return Optional.empty();
217217
}
218218

paimon-common/src/main/java/org/apache/paimon/predicate/FieldTransform.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,7 @@
2626
import java.util.Objects;
2727

2828
import static org.apache.paimon.utils.InternalRowUtils.get;
29+
import static org.apache.paimon.utils.Preconditions.checkArgument;
2930

3031
/** Transform that extracts a field from a row. */
3132
public class FieldTransform implements Transform {
@@ -59,7 +60,7 @@ public Object transform(InternalRow row) {
5960

6061
@Override
6162
public Transform copyWithNewInputs(List<Object> inputs) {
62-
assert inputs.size() == 1;
63+
checkArgument(inputs.size() == 1);
6364
return new FieldTransform((FieldRef) inputs.get(0));
6465
}
6566

paimon-common/src/main/java/org/apache/paimon/predicate/FunctionVisitor.java

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -19,16 +19,23 @@
1919
package org.apache.paimon.predicate;
2020

2121
import java.util.List;
22+
import java.util.Optional;
2223
import java.util.stream.Collectors;
2324

2425
/** A {@link PredicateVisitor} to visit functions. */
2526
public interface FunctionVisitor<T> extends PredicateVisitor<T> {
2627

2728
@Override
2829
default T visit(LeafPredicate predicate) {
29-
return predicate.function().visit(this, predicate.fieldRef(), predicate.literals());
30+
Optional<FieldRef> fieldRef = predicate.fieldRefOptional();
31+
if (!fieldRef.isPresent()) {
32+
return visitNonFieldLeaf(predicate);
33+
}
34+
return predicate.function().visit(this, fieldRef.get(), predicate.literals());
3035
}
3136

37+
T visitNonFieldLeaf(LeafPredicate leafPredicate);
38+
3239
@Override
3340
default T visit(CompoundPredicate predicate) {
3441
return predicate

0 commit comments

Comments
 (0)