2727#include " iceberg/schema.h"
2828#include " iceberg/schema_internal.h"
2929#include " iceberg/transform.h"
30+ #include " iceberg/type.h"
3031#include " iceberg/util/macros.h"
3132
3233namespace iceberg {
@@ -42,8 +43,7 @@ class ResidualVisitor : public BoundVisitor<std::shared_ptr<Expression>> {
4243 const StructLike& partition_data,
4344 bool case_sensitive) {
4445 ICEBERG_ASSIGN_OR_RAISE (auto partition_type, spec.PartitionType (schema));
45- auto partition_schema = FromStructType (std::move (*partition_type), std::nullopt );
46- return ResidualVisitor (spec, schema, std::move (partition_schema), partition_data,
46+ return ResidualVisitor (spec, schema, std::move (partition_type), partition_data,
4747 case_sensitive);
4848 }
4949
@@ -202,17 +202,17 @@ class ResidualVisitor : public BoundVisitor<std::shared_ptr<Expression>> {
202202
203203 private:
204204 ResidualVisitor (const PartitionSpec& spec, const Schema& schema,
205- std::unique_ptr<Schema> partition_schema ,
205+ std::unique_ptr<StructType> partition_type ,
206206 const StructLike& partition_data, bool case_sensitive)
207207 : spec_(spec),
208208 schema_ (schema),
209- partition_schema_ (std::move(partition_schema )),
209+ partition_type_ (std::move(partition_type )),
210210 partition_data_(partition_data),
211211 case_sensitive_(case_sensitive) {}
212212
213213 const PartitionSpec& spec_;
214214 const Schema& schema_;
215- std::unique_ptr<Schema> partition_schema_ ;
215+ std::unique_ptr<StructType> partition_type_ ;
216216 const StructLike& partition_data_;
217217 bool case_sensitive_;
218218};
@@ -243,9 +243,8 @@ Result<std::shared_ptr<Expression>> ResidualVisitor::Predicate(
243243 std::shared_ptr<Expression> strict_result = nullptr ;
244244
245245 if (strict_projection != nullptr ) {
246- ICEBERG_ASSIGN_OR_RAISE (
247- auto bound_strict,
248- strict_projection->Bind (*partition_schema_, case_sensitive_));
246+ ICEBERG_ASSIGN_OR_RAISE (auto bound_strict,
247+ strict_projection->Bind (*partition_type_, case_sensitive_));
249248 if (bound_strict->is_bound_predicate ()) {
250249 ICEBERG_ASSIGN_OR_RAISE (
251250 strict_result, BoundVisitor::Predicate (
@@ -270,7 +269,7 @@ Result<std::shared_ptr<Expression>> ResidualVisitor::Predicate(
270269 if (inclusive_projection != nullptr ) {
271270 ICEBERG_ASSIGN_OR_RAISE (
272271 auto bound_inclusive,
273- inclusive_projection->Bind (*partition_schema_ , case_sensitive_));
272+ inclusive_projection->Bind (*partition_type_ , case_sensitive_));
274273
275274 if (bound_inclusive->is_bound_predicate ()) {
276275 ICEBERG_ASSIGN_OR_RAISE (
0 commit comments