Skip to content

Commit 5b06944

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

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,23 +356,18 @@ 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

378373
/// \brief A scan that reads data files added between snapshots (incremental appends).
@@ -385,7 +380,7 @@ class ICEBERG_EXPORT IncrementalAppendScan : public IncrementalScan<FileScanTask
385380

386381
~IncrementalAppendScan() override = default;
387382

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

390385
protected:
391386
Result<std::vector<std::shared_ptr<FileScanTask>>> PlanFiles(
@@ -406,7 +401,7 @@ class ICEBERG_EXPORT IncrementalChangelogScan
406401

407402
~IncrementalChangelogScan() override = default;
408403

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

411406
protected:
412407
Result<std::vector<std::shared_ptr<ChangelogScanTask>>> PlanFiles(
@@ -416,4 +411,7 @@ class ICEBERG_EXPORT IncrementalChangelogScan
416411
using IncrementalScan::IncrementalScan;
417412
};
418413

414+
extern template class ICEBERG_TEMPLATE_CLASS_EXPORT IncrementalScan<FileScanTask>;
415+
extern template class ICEBERG_TEMPLATE_CLASS_EXPORT IncrementalScan<ChangelogScanTask>;
416+
419417
} // namespace iceberg

0 commit comments

Comments
 (0)