Skip to content

Commit 49c54d4

Browse files
authored
feat: manifest evaluator supports row filter (#428)
1 parent 6f802aa commit 49c54d4

File tree

1 file changed

+6
-5
lines changed

1 file changed

+6
-5
lines changed

src/iceberg/expression/manifest_evaluator.cc

Lines changed: 6 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,7 @@
2121

2222
#include "iceberg/expression/binder.h"
2323
#include "iceberg/expression/expression_visitor.h"
24+
#include "iceberg/expression/projections.h"
2425
#include "iceberg/expression/rewrite_not.h"
2526
#include "iceberg/manifest/manifest_list.h"
2627
#include "iceberg/row/struct_like.h"
@@ -352,11 +353,11 @@ ManifestEvaluator::ManifestEvaluator(std::shared_ptr<Expression> expr)
352353
ManifestEvaluator::~ManifestEvaluator() = default;
353354

354355
Result<std::unique_ptr<ManifestEvaluator>> ManifestEvaluator::MakeRowFilter(
355-
[[maybe_unused]] std::shared_ptr<Expression> expr,
356-
[[maybe_unused]] const std::shared_ptr<PartitionSpec>& spec,
357-
[[maybe_unused]] const Schema& schema, [[maybe_unused]] bool case_sensitive) {
358-
// TODO(xiao.dong) we need a projection util to project row filter to the partition col
359-
return NotImplemented("ManifestEvaluator::MakeRowFilter");
356+
std::shared_ptr<Expression> expr, const std::shared_ptr<PartitionSpec>& spec,
357+
const Schema& schema, bool case_sensitive) {
358+
auto projection_valuator = Projections::Inclusive(*spec, schema, case_sensitive);
359+
ICEBERG_ASSIGN_OR_RAISE(auto partition_expr, projection_valuator->Project(expr));
360+
return MakePartitionFilter(partition_expr, spec, schema, case_sensitive);
360361
}
361362

362363
Result<std::unique_ptr<ManifestEvaluator>> ManifestEvaluator::MakePartitionFilter(

0 commit comments

Comments
 (0)