Skip to content

Commit 1c7bf01

Browse files
committed
refactor: use templatem member method for incremental plan files
1 parent 5666e67 commit 1c7bf01

File tree

2 files changed

+18
-29
lines changed

2 files changed

+18
-29
lines changed

src/iceberg/table_scan.cc

Lines changed: 11 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -644,23 +644,21 @@ Result<std::vector<std::shared_ptr<FileScanTask>>> DataTableScan::PlanFiles() co
644644
// to the two-arg virtual PlanFiles() override in the concrete subclass.
645645
// Defined as a friend to access the protected two-arg PlanFiles().
646646
template <typename ScanTaskType>
647-
Result<std::vector<std::shared_ptr<ScanTaskType>>> ResolvePlanFiles(
648-
const IncrementalScan<ScanTaskType>& scan) {
649-
if (IsScanCurrentLineage(scan.context())) {
650-
if (scan.metadata()->current_snapshot_id == kInvalidSnapshotId) {
647+
Result<std::vector<std::shared_ptr<ScanTaskType>>>
648+
IncrementalScan<ScanTaskType>::PlanFiles() const {
649+
if (IsScanCurrentLineage(context_)) {
650+
if (metadata_->current_snapshot_id == kInvalidSnapshotId) {
651651
return std::vector<std::shared_ptr<ScanTaskType>>{};
652652
}
653653
}
654654

655-
ICEBERG_ASSIGN_OR_RAISE(
656-
int64_t to_snapshot_id_inclusive,
657-
internal::ToSnapshotIdInclusive(scan.context(), *scan.metadata()));
655+
ICEBERG_ASSIGN_OR_RAISE(int64_t to_snapshot_id_inclusive,
656+
internal::ToSnapshotIdInclusive(context_, *metadata_));
658657
ICEBERG_ASSIGN_OR_RAISE(
659658
std::optional<int64_t> from_snapshot_id_exclusive,
660-
internal::FromSnapshotIdExclusive(scan.context(), *scan.metadata(),
661-
to_snapshot_id_inclusive));
659+
internal::FromSnapshotIdExclusive(context_, *metadata_, to_snapshot_id_inclusive));
662660

663-
return scan.PlanFiles(from_snapshot_id_exclusive, to_snapshot_id_inclusive);
661+
return PlanFiles(from_snapshot_id_exclusive, to_snapshot_id_inclusive);
664662
}
665663

666664
// IncrementalAppendScan implementation
@@ -675,11 +673,6 @@ Result<std::unique_ptr<IncrementalAppendScan>> IncrementalAppendScan::Make(
675673
std::move(metadata), std::move(schema), std::move(io), std::move(context)));
676674
}
677675

678-
Result<std::vector<std::shared_ptr<FileScanTask>>> IncrementalAppendScan::PlanFiles()
679-
const {
680-
return ResolvePlanFiles<FileScanTask>(*this);
681-
}
682-
683676
Result<std::vector<std::shared_ptr<FileScanTask>>> IncrementalAppendScan::PlanFiles(
684677
std::optional<int64_t> from_snapshot_id_exclusive,
685678
int64_t to_snapshot_id_inclusive) const {
@@ -754,15 +747,13 @@ Result<std::unique_ptr<IncrementalChangelogScan>> IncrementalChangelogScan::Make
754747
return NotImplemented("IncrementalChangelogScan is not implemented");
755748
}
756749

757-
Result<std::vector<std::shared_ptr<ChangelogScanTask>>>
758-
IncrementalChangelogScan::PlanFiles() const {
759-
return ResolvePlanFiles<ChangelogScanTask>(*this);
760-
}
761-
762750
Result<std::vector<std::shared_ptr<ChangelogScanTask>>>
763751
IncrementalChangelogScan::PlanFiles(std::optional<int64_t> from_snapshot_id_exclusive,
764752
int64_t to_snapshot_id_inclusive) const {
765753
return NotImplemented("IncrementalChangelogScan::PlanFiles is not implemented");
766754
}
767755

756+
template class ICEBERG_TEMPLATE_EXPORT IncrementalScan<FileScanTask>;
757+
template class ICEBERG_TEMPLATE_EXPORT IncrementalScan<ChangelogScanTask>;
758+
768759
} // namespace iceberg

src/iceberg/table_scan.h

Lines changed: 7 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -356,25 +356,23 @@ class ICEBERG_EXPORT DataTableScan : public TableScan {
356356
/// \brief A base template class for incremental scans that read changes between
357357
/// snapshots, and return scan tasks of the specified type.
358358
template <typename ScanTaskType>
359-
class IncrementalScan : public TableScan {
359+
class ICEBERG_TEMPLATE_CLASS_EXPORT IncrementalScan : public TableScan {
360360
public:
361361
~IncrementalScan() override = default;
362362

363-
virtual Result<std::vector<std::shared_ptr<ScanTaskType>>> PlanFiles() const = 0;
363+
Result<std::vector<std::shared_ptr<ScanTaskType>>> PlanFiles() const;
364364

365365
protected:
366366
virtual Result<std::vector<std::shared_ptr<ScanTaskType>>> PlanFiles(
367367
std::optional<int64_t> from_snapshot_id_exclusive,
368368
int64_t to_snapshot_id_inclusive) const = 0;
369369

370370
using TableScan::TableScan;
371-
372-
// Allow the free function ResolvePlanFiles to access protected members.
373-
template <typename T>
374-
friend Result<std::vector<std::shared_ptr<T>>> ResolvePlanFiles(
375-
const IncrementalScan<T>& scan);
376371
};
377372

373+
extern template class ICEBERG_TEMPLATE_CLASS_EXPORT IncrementalScan<FileScanTask>;
374+
extern template class ICEBERG_TEMPLATE_CLASS_EXPORT IncrementalScan<ChangelogScanTask>;
375+
378376
/// \brief A scan that reads data files added between snapshots (incremental appends).
379377
class ICEBERG_EXPORT IncrementalAppendScan : public IncrementalScan<FileScanTask> {
380378
public:
@@ -385,7 +383,7 @@ class ICEBERG_EXPORT IncrementalAppendScan : public IncrementalScan<FileScanTask
385383

386384
~IncrementalAppendScan() override = default;
387385

388-
Result<std::vector<std::shared_ptr<FileScanTask>>> PlanFiles() const override;
386+
using IncrementalScan::PlanFiles;
389387

390388
protected:
391389
Result<std::vector<std::shared_ptr<FileScanTask>>> PlanFiles(
@@ -406,7 +404,7 @@ class ICEBERG_EXPORT IncrementalChangelogScan
406404

407405
~IncrementalChangelogScan() override = default;
408406

409-
Result<std::vector<std::shared_ptr<ChangelogScanTask>>> PlanFiles() const override;
407+
using IncrementalScan::PlanFiles;
410408

411409
protected:
412410
Result<std::vector<std::shared_ptr<ChangelogScanTask>>> PlanFiles(

0 commit comments

Comments
 (0)