@@ -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
246223template <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
582541Result<std::unique_ptr<IncrementalAppendScan>> IncrementalAppendScan::Make (
0 commit comments