Skip to content

Commit b3da562

Browse files
authored
feat: introduce Like LeafFunction for Predicate (#109)
1 parent 60448b8 commit b3da562

8 files changed

Lines changed: 27 additions & 0 deletions

File tree

include/paimon/file_index/file_index_reader.h

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -60,6 +60,8 @@ class PAIMON_EXPORT FileIndexReader : public FunctionVisitor<std::shared_ptr<Fil
6060
Result<std::shared_ptr<FileIndexResult>> VisitEndsWith(const Literal& suffix) override;
6161

6262
Result<std::shared_ptr<FileIndexResult>> VisitContains(const Literal& literal) override;
63+
64+
Result<std::shared_ptr<FileIndexResult>> VisitLike(const Literal& literal) override;
6365
};
6466

6567
} // namespace paimon

include/paimon/predicate/function_visitor.h

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -71,5 +71,8 @@ class PAIMON_EXPORT FunctionVisitor {
7171

7272
/// Evaluates whether string values contain the given substring.
7373
virtual Result<T> VisitContains(const Literal& literal) = 0;
74+
75+
/// Evaluates whether string values like the given string.
76+
virtual Result<T> VisitLike(const Literal& literal) = 0;
7477
};
7578
} // namespace paimon

src/paimon/common/file_index/empty/empty_file_index_reader.h

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -46,6 +46,9 @@ class EmptyFileIndexReader : public FileIndexReader {
4646
Result<std::shared_ptr<FileIndexResult>> VisitContains(const Literal& literal) override {
4747
return FileIndexResult::Skip();
4848
}
49+
Result<std::shared_ptr<FileIndexResult>> VisitLike(const Literal& literal) override {
50+
return FileIndexResult::Skip();
51+
}
4952
Result<std::shared_ptr<FileIndexResult>> VisitLessThan(const Literal& literal) override {
5053
return FileIndexResult::Skip();
5154
}

src/paimon/common/file_index/empty/empty_file_index_reader_test.cpp

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,7 @@ TEST(EmptyFileIndexReaderTest, TestSimple) {
3131
ASSERT_FALSE(reader.VisitStartsWith(lit0).value()->IsRemain().value());
3232
ASSERT_FALSE(reader.VisitEndsWith(lit0).value()->IsRemain().value());
3333
ASSERT_FALSE(reader.VisitContains(lit0).value()->IsRemain().value());
34+
ASSERT_FALSE(reader.VisitLike(lit0).value()->IsRemain().value());
3435
ASSERT_FALSE(reader.VisitLessThan(lit0).value()->IsRemain().value());
3536
ASSERT_FALSE(reader.VisitGreaterOrEqual(lit0).value()->IsRemain().value());
3637
ASSERT_FALSE(reader.VisitLessOrEqual(lit0).value()->IsRemain().value());

src/paimon/common/file_index/file_index_reader.cpp

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -41,6 +41,10 @@ Result<std::shared_ptr<FileIndexResult>> FileIndexReader::VisitContains(const Li
4141
return FileIndexResult::Remain();
4242
}
4343

44+
Result<std::shared_ptr<FileIndexResult>> FileIndexReader::VisitLike(const Literal& literal) {
45+
return FileIndexResult::Remain();
46+
}
47+
4448
Result<std::shared_ptr<FileIndexResult>> FileIndexReader::VisitLessThan(const Literal& literal) {
4549
return FileIndexResult::Remain();
4650
}

src/paimon/common/global_index/wrap/file_index_reader_wrapper.h

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -114,6 +114,12 @@ class FileIndexReaderWrapper : public GlobalIndexReader {
114114
return transform_(file_index_result);
115115
}
116116

117+
Result<std::shared_ptr<GlobalIndexResult>> VisitLike(const Literal& literal) override {
118+
PAIMON_ASSIGN_OR_RAISE(std::shared_ptr<FileIndexResult> file_index_result,
119+
reader_->VisitLike(literal));
120+
return transform_(file_index_result);
121+
}
122+
117123
Result<std::shared_ptr<VectorSearchGlobalIndexResult>> VisitVectorSearch(
118124
const std::shared_ptr<VectorSearch>& vector_search) override {
119125
return Status::Invalid(

src/paimon/global_index/lucene/lucene_global_index.h

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -158,6 +158,10 @@ class LuceneGlobalIndexReader : public GlobalIndexReader {
158158
return CreateAllResult();
159159
}
160160

161+
Result<std::shared_ptr<GlobalIndexResult>> VisitLike(const Literal& literal) override {
162+
return CreateAllResult();
163+
}
164+
161165
Result<std::shared_ptr<VectorSearchGlobalIndexResult>> VisitVectorSearch(
162166
const std::shared_ptr<VectorSearch>& vector_search) override {
163167
return Status::Invalid(

src/paimon/global_index/lumina/lumina_global_index.h

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -183,6 +183,10 @@ class LuminaIndexReader : public GlobalIndexReader {
183183
return BitmapGlobalIndexResult::FromRanges({Range(0, range_end_)});
184184
}
185185

186+
Result<std::shared_ptr<GlobalIndexResult>> VisitLike(const Literal& literal) override {
187+
return BitmapGlobalIndexResult::FromRanges({Range(0, range_end_)});
188+
}
189+
186190
bool IsThreadSafe() const override {
187191
return true;
188192
}

0 commit comments

Comments
 (0)