diff --git a/src/iceberg/expression/manifest_evaluator.cc b/src/iceberg/expression/manifest_evaluator.cc index 9c4e708f1..bc7d0bfe6 100644 --- a/src/iceberg/expression/manifest_evaluator.cc +++ b/src/iceberg/expression/manifest_evaluator.cc @@ -21,6 +21,7 @@ #include "iceberg/expression/binder.h" #include "iceberg/expression/expression_visitor.h" +#include "iceberg/expression/projections.h" #include "iceberg/expression/rewrite_not.h" #include "iceberg/manifest/manifest_list.h" #include "iceberg/row/struct_like.h" @@ -352,11 +353,11 @@ ManifestEvaluator::ManifestEvaluator(std::shared_ptr expr) ManifestEvaluator::~ManifestEvaluator() = default; Result> ManifestEvaluator::MakeRowFilter( - [[maybe_unused]] std::shared_ptr expr, - [[maybe_unused]] const std::shared_ptr& spec, - [[maybe_unused]] const Schema& schema, [[maybe_unused]] bool case_sensitive) { - // TODO(xiao.dong) we need a projection util to project row filter to the partition col - return NotImplemented("ManifestEvaluator::MakeRowFilter"); + std::shared_ptr expr, const std::shared_ptr& spec, + const Schema& schema, bool case_sensitive) { + auto projection_valuator = Projections::Inclusive(*spec, schema, case_sensitive); + ICEBERG_ASSIGN_OR_RAISE(auto partition_expr, projection_valuator->Project(expr)); + return MakePartitionFilter(partition_expr, spec, schema, case_sensitive); } Result> ManifestEvaluator::MakePartitionFilter(