From 943664aec8c5c37ca76abe5698404ba0bc190baa Mon Sep 17 00:00:00 2001 From: "xiao.dong" Date: Mon, 22 Dec 2025 11:18:05 +0800 Subject: [PATCH 1/2] feat: manifest evaluator support build for row filter --- src/iceberg/expression/manifest_evaluator.cc | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/src/iceberg/expression/manifest_evaluator.cc b/src/iceberg/expression/manifest_evaluator.cc index 9c4e708f1..b7c9ee12d 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" @@ -355,8 +356,9 @@ 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"); + 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( From 891f33d5301ea53f38584ba7f8b06e68a3145013 Mon Sep 17 00:00:00 2001 From: "xiao.dong" Date: Mon, 22 Dec 2025 14:29:54 +0800 Subject: [PATCH 2/2] fix comments --- src/iceberg/expression/manifest_evaluator.cc | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/src/iceberg/expression/manifest_evaluator.cc b/src/iceberg/expression/manifest_evaluator.cc index b7c9ee12d..bc7d0bfe6 100644 --- a/src/iceberg/expression/manifest_evaluator.cc +++ b/src/iceberg/expression/manifest_evaluator.cc @@ -353,9 +353,8 @@ 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) { + 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);