From e6025248615d1701e79a809a59697feb34b42f7c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E8=BF=9E=E6=96=87=E7=8F=91?= Date: Fri, 25 Sep 2026 16:01:12 +0800 Subject: [PATCH 1/4] fix(predicate): export Like symbols --- src/paimon/common/predicate/like.h | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/paimon/common/predicate/like.h b/src/paimon/common/predicate/like.h index 1434ccf53..9ad6d0bf5 100644 --- a/src/paimon/common/predicate/like.h +++ b/src/paimon/common/predicate/like.h @@ -22,10 +22,11 @@ #include "paimon/common/predicate/string_leaf_binary_function.h" #include "paimon/result.h" +#include "paimon/visibility.h" namespace paimon { /// A `StringLeafBinaryFunction` to eval filter like. -class Like : public StringLeafBinaryFunction { +class PAIMON_EXPORT Like : public StringLeafBinaryFunction { public: static const Like& Instance() { static const Like instance = Like(); From c02bc23c72aa88197c7f684be219b09fe5f44915 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E8=BF=9E=E6=96=87=E7=8F=91?= Date: Sat, 26 Sep 2026 13:46:31 +0800 Subject: [PATCH 2/4] fix(global-index): avoid exporting predicate hierarchy --- .../common/global_index/bitmap/bitmap_index_reader.cpp | 2 +- src/paimon/common/predicate/like.cpp | 4 ++++ src/paimon/common/predicate/like.h | 5 ++++- 3 files changed, 9 insertions(+), 2 deletions(-) diff --git a/src/paimon/common/global_index/bitmap/bitmap_index_reader.cpp b/src/paimon/common/global_index/bitmap/bitmap_index_reader.cpp index 8a38a67a9..8771a0079 100644 --- a/src/paimon/common/global_index/bitmap/bitmap_index_reader.cpp +++ b/src/paimon/common/global_index/bitmap/bitmap_index_reader.cpp @@ -382,7 +382,7 @@ Result BitmapIndexReader::Like(const Literal& literal) { if (key.GetType() != FieldType::STRING) { return false; } - return paimon::Like::Instance().TestString(key.GetValue(), pattern); + return paimon::TestLikeString(key.GetValue(), pattern); }); } diff --git a/src/paimon/common/predicate/like.cpp b/src/paimon/common/predicate/like.cpp index 3e6d6efe5..6bb9b5581 100644 --- a/src/paimon/common/predicate/like.cpp +++ b/src/paimon/common/predicate/like.cpp @@ -166,4 +166,8 @@ Result Like::TestString(const std::string& field, const std::string& patte } return static_cast(dp[n]); } + +Result TestLikeString(const std::string& field, const std::string& pattern) { + return Like::Instance().TestString(field, pattern); +} } // namespace paimon diff --git a/src/paimon/common/predicate/like.h b/src/paimon/common/predicate/like.h index 9ad6d0bf5..6b5f6fa90 100644 --- a/src/paimon/common/predicate/like.h +++ b/src/paimon/common/predicate/like.h @@ -26,7 +26,7 @@ namespace paimon { /// A `StringLeafBinaryFunction` to eval filter like. -class PAIMON_EXPORT Like : public StringLeafBinaryFunction { +class Like : public StringLeafBinaryFunction { public: static const Like& Instance() { static const Like instance = Like(); @@ -46,4 +46,7 @@ class PAIMON_EXPORT Like : public StringLeafBinaryFunction { private: Like() = default; }; + +PAIMON_EXPORT Result TestLikeString(const std::string& field, + const std::string& pattern); } // namespace paimon From 14733731f72fc3e8b48c6d5c6541d3ffd057d544 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E8=BF=9E=E6=96=87=E7=8F=91?= Date: Sat, 26 Sep 2026 15:58:35 +0800 Subject: [PATCH 3/4] style(predicate): format exported LIKE helper --- src/paimon/common/predicate/like.h | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/src/paimon/common/predicate/like.h b/src/paimon/common/predicate/like.h index 6b5f6fa90..0c03d2d1c 100644 --- a/src/paimon/common/predicate/like.h +++ b/src/paimon/common/predicate/like.h @@ -47,6 +47,5 @@ class Like : public StringLeafBinaryFunction { Like() = default; }; -PAIMON_EXPORT Result TestLikeString(const std::string& field, - const std::string& pattern); +PAIMON_EXPORT Result TestLikeString(const std::string& field, const std::string& pattern); } // namespace paimon From 681f6d5c6f8a0de4e4bdc73104e4fa2603fd6f0f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E8=BF=9E=E6=96=87=E7=8F=91?= Date: Sun, 27 Sep 2026 17:09:03 +0800 Subject: [PATCH 4/4] refactor(predicate): scope LIKE matcher export --- .../common/global_index/bitmap/bitmap_index_reader.cpp | 2 +- src/paimon/common/predicate/like.cpp | 6 +++--- src/paimon/common/predicate/like.h | 5 +++-- 3 files changed, 7 insertions(+), 6 deletions(-) diff --git a/src/paimon/common/global_index/bitmap/bitmap_index_reader.cpp b/src/paimon/common/global_index/bitmap/bitmap_index_reader.cpp index 8771a0079..4e3e9dfed 100644 --- a/src/paimon/common/global_index/bitmap/bitmap_index_reader.cpp +++ b/src/paimon/common/global_index/bitmap/bitmap_index_reader.cpp @@ -382,7 +382,7 @@ Result BitmapIndexReader::Like(const Literal& literal) { if (key.GetType() != FieldType::STRING) { return false; } - return paimon::TestLikeString(key.GetValue(), pattern); + return paimon::Like::MatchString(key.GetValue(), pattern); }); } diff --git a/src/paimon/common/predicate/like.cpp b/src/paimon/common/predicate/like.cpp index 6bb9b5581..d6ee817de 100644 --- a/src/paimon/common/predicate/like.cpp +++ b/src/paimon/common/predicate/like.cpp @@ -51,7 +51,7 @@ inline bool IsJavaRegexLineTerminator(const std::string& code_point) { } // namespace -Result Like::TestString(const std::string& field, const std::string& pattern) const { +Result Like::MatchString(const std::string& field, const std::string& pattern) { if (pattern.empty()) { return field.empty(); } @@ -167,7 +167,7 @@ Result Like::TestString(const std::string& field, const std::string& patte return static_cast(dp[n]); } -Result TestLikeString(const std::string& field, const std::string& pattern) { - return Like::Instance().TestString(field, pattern); +Result Like::TestString(const std::string& field, const std::string& pattern) const { + return MatchString(field, pattern); } } // namespace paimon diff --git a/src/paimon/common/predicate/like.h b/src/paimon/common/predicate/like.h index 0c03d2d1c..d180b29b7 100644 --- a/src/paimon/common/predicate/like.h +++ b/src/paimon/common/predicate/like.h @@ -28,6 +28,9 @@ namespace paimon { /// A `StringLeafBinaryFunction` to eval filter like. class Like : public StringLeafBinaryFunction { public: + PAIMON_EXPORT static Result MatchString(const std::string& field, + const std::string& pattern); + static const Like& Instance() { static const Like instance = Like(); return instance; @@ -46,6 +49,4 @@ class Like : public StringLeafBinaryFunction { private: Like() = default; }; - -PAIMON_EXPORT Result TestLikeString(const std::string& field, const std::string& pattern); } // namespace paimon