diff --git a/src/paimon/common/reader/predicate_batch_reader.cpp b/src/paimon/common/reader/predicate_batch_reader.cpp index 75400998..da4ece4b 100644 --- a/src/paimon/common/reader/predicate_batch_reader.cpp +++ b/src/paimon/common/reader/predicate_batch_reader.cpp @@ -48,6 +48,9 @@ PredicateBatchReader::PredicateBatchReader(std::unique_ptr&& reader Result> PredicateBatchReader::Create( std::unique_ptr&& reader, const std::shared_ptr& predicate, const std::shared_ptr& pool) { + if (!predicate) { + return Status::Invalid("create predicate batch reader failed. predicate is nullptr"); + } auto predicate_filter = std::dynamic_pointer_cast(predicate); if (!predicate_filter) { return Status::Invalid( diff --git a/src/paimon/common/reader/predicate_batch_reader_test.cpp b/src/paimon/common/reader/predicate_batch_reader_test.cpp index 549dfe07..bd757bcc 100644 --- a/src/paimon/common/reader/predicate_batch_reader_test.cpp +++ b/src/paimon/common/reader/predicate_batch_reader_test.cpp @@ -188,4 +188,11 @@ TEST_F(PredicateBatchReaderTest, TestFullAndEmptyCase) { } } +TEST_F(PredicateBatchReaderTest, TestInvalidInput) { + auto data_array = PrepareArray(8); + auto reader = std::make_unique(data_array, data_type_, /*batch_size=*/10); + ASSERT_NOK_WITH_MSG(PredicateBatchReader::Create(std::move(reader), nullptr, GetDefaultPool()), + "create predicate batch reader failed. predicate is nullptr"); +} + } // namespace paimon::test diff --git a/src/paimon/core/operation/abstract_split_read.cpp b/src/paimon/core/operation/abstract_split_read.cpp index 8fa3f0c8..5717a1b6 100644 --- a/src/paimon/core/operation/abstract_split_read.cpp +++ b/src/paimon/core/operation/abstract_split_read.cpp @@ -123,7 +123,7 @@ std::unordered_map AbstractSplitRead::CreateDeletionF Result> AbstractSplitRead::ApplyPredicateFilterIfNeeded( std::unique_ptr&& reader, const std::shared_ptr& predicate) const { - if (!context_->EnablePredicateFilter()) { + if (!context_->EnablePredicateFilter() || predicate == nullptr) { return std::move(reader); } return PredicateBatchReader::Create(std::move(reader), predicate, pool_);