Skip to content

Commit 68ee0f4

Browse files
fix(scan): reject missing column stats fields (#759)
1 parent 93577b3 commit 68ee0f4

2 files changed

Lines changed: 12 additions & 3 deletions

File tree

src/iceberg/table_scan.cc

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -400,9 +400,8 @@ Status TableScanBuilder<ScanType>::ResolveColumnStatsSelection() {
400400
const auto& schema = schema_ref.get();
401401
for (const auto& column_name : *requested_column_stats_) {
402402
ICEBERG_ASSIGN_OR_RAISE(auto field, schema->FindFieldByName(column_name));
403-
if (field.has_value()) {
404-
context_.columns_to_keep_stats.insert(field.value().get().field_id());
405-
}
403+
ICEBERG_CHECK(field.has_value(), "Cannot find stats column: {}", column_name);
404+
context_.columns_to_keep_stats.insert(field.value().get().field_id());
406405
}
407406

408407
return {};

src/iceberg/test/table_scan_test.cc

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -285,6 +285,16 @@ TEST_P(TableScanTest, IncludeColumnStatsUsesFinalSnapshotSchema) {
285285
}
286286
}
287287

288+
TEST_P(TableScanTest, IncludeColumnStatsRejectsMissingColumn) {
289+
ICEBERG_UNWRAP_OR_FAIL(auto builder,
290+
DataTableScanBuilder::Make(table_metadata_, file_io_));
291+
builder->IncludeColumnStats({"missing"});
292+
293+
EXPECT_THAT(builder->Build(),
294+
::testing::AllOf(IsError(ErrorKind::kValidationFailed),
295+
HasErrorMessage("Cannot find stats column: missing")));
296+
}
297+
288298
TEST_P(TableScanTest, TableScanBuilderValidationErrors) {
289299
// Test negative min rows
290300
ICEBERG_UNWRAP_OR_FAIL(auto builder,

0 commit comments

Comments
 (0)