Skip to content

Commit 570acc3

Browse files
committed
fix: a single generic template implementation
1 parent dc92ebe commit 570acc3

File tree

1 file changed

+16
-44
lines changed

1 file changed

+16
-44
lines changed

src/iceberg/table_scan.cc

Lines changed: 16 additions & 44 deletions
Original file line numberDiff line numberDiff line change
@@ -210,37 +210,14 @@ Result<ArrowArrayStream> FileScanTask::ToArrow(
210210
return MakeArrowArrayStream(std::move(reader));
211211
}
212212

213-
// Template specialization for DataTableScan (default)
214-
template <>
215-
Result<std::unique_ptr<TableScanBuilder<DataTableScan>>>
216-
TableScanBuilder<DataTableScan>::Make(std::shared_ptr<TableMetadata> metadata,
217-
std::shared_ptr<FileIO> io) {
218-
ICEBERG_PRECHECK(metadata != nullptr, "Table metadata cannot be null");
219-
ICEBERG_PRECHECK(io != nullptr, "FileIO cannot be null");
220-
return std::unique_ptr<TableScanBuilder<DataTableScan>>(
221-
new TableScanBuilder<DataTableScan>(std::move(metadata), std::move(io)));
222-
}
223-
224-
// Template specialization for IncrementalAppendScan
225-
template <>
226-
Result<std::unique_ptr<TableScanBuilder<IncrementalAppendScan>>>
227-
TableScanBuilder<IncrementalAppendScan>::Make(std::shared_ptr<TableMetadata> metadata,
228-
std::shared_ptr<FileIO> io) {
229-
ICEBERG_PRECHECK(metadata != nullptr, "Table metadata cannot be null");
230-
ICEBERG_PRECHECK(io != nullptr, "FileIO cannot be null");
231-
return std::unique_ptr<TableScanBuilder<IncrementalAppendScan>>(
232-
new TableScanBuilder<IncrementalAppendScan>(std::move(metadata), std::move(io)));
233-
}
234-
235-
// Template specialization for IncrementalChangelogScan
236-
template <>
237-
Result<std::unique_ptr<TableScanBuilder<IncrementalChangelogScan>>>
238-
TableScanBuilder<IncrementalChangelogScan>::Make(std::shared_ptr<TableMetadata> metadata,
239-
std::shared_ptr<FileIO> io) {
213+
// Generic template implementation for Make
214+
template <typename ScanType>
215+
Result<std::unique_ptr<TableScanBuilder<ScanType>>> TableScanBuilder<ScanType>::Make(
216+
std::shared_ptr<TableMetadata> metadata, std::shared_ptr<FileIO> io) {
240217
ICEBERG_PRECHECK(metadata != nullptr, "Table metadata cannot be null");
241218
ICEBERG_PRECHECK(io != nullptr, "FileIO cannot be null");
242-
return std::unique_ptr<TableScanBuilder<IncrementalChangelogScan>>(
243-
new TableScanBuilder<IncrementalChangelogScan>(std::move(metadata), std::move(io)));
219+
return std::unique_ptr<TableScanBuilder<ScanType>>(
220+
new TableScanBuilder<ScanType>(std::move(metadata), std::move(io)));
244221
}
245222

246223
template <typename ScanType>
@@ -421,25 +398,13 @@ TableScanBuilder<ScanType>::ResolveSnapshotSchema() {
421398
return snapshot_schema_;
422399
}
423400

424-
template <>
425-
Result<std::unique_ptr<DataTableScan>> TableScanBuilder<DataTableScan>::Build() {
401+
template <typename ScanType>
402+
Result<std::unique_ptr<ScanType>> TableScanBuilder<ScanType>::Build() {
426403
ICEBERG_RETURN_UNEXPECTED(CheckErrors());
427404
ICEBERG_RETURN_UNEXPECTED(context_.Validate());
428405

429406
ICEBERG_ASSIGN_OR_RAISE(auto schema, ResolveSnapshotSchema());
430-
return DataTableScan::Make(metadata_, schema.get(), io_, std::move(context_));
431-
}
432-
433-
template <>
434-
Result<std::unique_ptr<IncrementalAppendScan>>
435-
TableScanBuilder<IncrementalAppendScan>::Build() {
436-
return NotImplemented("IncrementalAppendScanBuilder is not implemented");
437-
}
438-
439-
template <>
440-
Result<std::unique_ptr<IncrementalChangelogScan>>
441-
TableScanBuilder<IncrementalChangelogScan>::Build() {
442-
return NotImplemented("IncrementalChangelogScanBuilder is not implemented");
407+
return ScanType::Make(metadata_, schema.get(), io_, std::move(context_));
443408
}
444409

445410
// Explicit template instantiations
@@ -577,6 +542,13 @@ IncrementalScan<ScanTaskType>::PlanFiles() const {
577542
return NotImplemented("IncrementalScan::PlanFiles is not implemented");
578543
}
579544

545+
// Explicit template instantiations for IncrementalScan
546+
template Result<std::vector<std::shared_ptr<FileScanTask>>>
547+
IncrementalScan<FileScanTask>::PlanFiles() const;
548+
549+
template Result<std::vector<std::shared_ptr<ChangelogScanTask>>>
550+
IncrementalScan<ChangelogScanTask>::PlanFiles() const;
551+
580552
// IncrementalAppendScan implementation
581553

582554
Result<std::unique_ptr<IncrementalAppendScan>> IncrementalAppendScan::Make(

0 commit comments

Comments
 (0)