Skip to content

Commit c1768ae

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

File tree

2 files changed

+12
-51
lines changed

2 files changed

+12
-51
lines changed

src/iceberg/table_scan.cc

Lines changed: 9 additions & 50 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
@@ -571,12 +536,6 @@ Result<std::vector<std::shared_ptr<FileScanTask>>> DataTableScan::PlanFiles() co
571536
return manifest_group->PlanFiles();
572537
}
573538

574-
template <typename ScanTaskType>
575-
Result<std::vector<std::shared_ptr<ScanTaskType>>>
576-
IncrementalScan<ScanTaskType>::PlanFiles() const {
577-
return NotImplemented("IncrementalScan::PlanFiles is not implemented");
578-
}
579-
580539
// IncrementalAppendScan implementation
581540

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

src/iceberg/table_scan.h

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -361,7 +361,9 @@ class ICEBERG_EXPORT IncrementalScan : public TableScan {
361361

362362
/// \brief Plans the scan tasks by resolving manifests and data files.
363363
/// \return A Result containing scan tasks or an error.
364-
Result<std::vector<std::shared_ptr<ScanTaskType>>> PlanFiles() const;
364+
Result<std::vector<std::shared_ptr<ScanTaskType>>> PlanFiles() const {
365+
return NotImplemented("IncrementalScan::PlanFiles is not implemented");
366+
}
365367

366368
protected:
367369
virtual Result<std::vector<std::shared_ptr<ScanTaskType>>> PlanFiles(

0 commit comments

Comments
 (0)