2323// / Writer implementation for manifest list files and manifest files.
2424
2525#include " iceberg/manifest_writer.h"
26+ #include " iceberg/v1_metadata.h"
27+ #include " iceberg/v2_metadata.h"
28+ #include " iceberg/v3_metadata.h"
2629
2730namespace iceberg {
2831
2932// / \brief Write manifest entries to a manifest file.
3033class ManifestWriterImpl : public ManifestWriter {
3134 public:
32- explicit ManifestWriterImpl (int64_t first_row_id , std::unique_ptr<Writer> writer,
35+ explicit ManifestWriterImpl (int64_t snapshot_id , std::unique_ptr<Writer> writer,
3336 std::shared_ptr<Schema> schema)
3437 : schema_(std::move(schema)), writer_(std::move(writer)) {}
3538
@@ -41,44 +44,55 @@ class ManifestWriterImpl : public ManifestWriter {
4144// / \brief Write v1 manifest entries to a manifest file.
4245class ManifestWriterV1 : public ManifestWriterImpl {
4346 public:
44- explicit ManifestWriterV1 (int64_t first_row_id , std::unique_ptr<Writer> writer,
47+ explicit ManifestWriterV1 (int64_t snapshot_id , std::unique_ptr<Writer> writer,
4548 std::shared_ptr<Schema> schema)
46- : ManifestWriterImpl(first_row_id , std::move(writer), std::move(schema)) {}
49+ : ManifestWriterImpl(snapshot_id , std::move(writer), std::move(schema)) {}
4750
4851 Status WriteManifestEntry (const ManifestEntry& entry) const override ;
4952
5053 Status Close () override ;
54+
55+ private:
56+ V1MetaData::ManifestEntryWrapper wrapper_;
5157};
5258
5359// / \brief Write v2 manifest entries to a manifest file.
5460class ManifestWriterV2 : public ManifestWriterImpl {
5561 public:
56- explicit ManifestWriterV2 (int64_t first_row_id , std::unique_ptr<Writer> writer,
62+ explicit ManifestWriterV2 (int64_t snapshot_id , std::unique_ptr<Writer> writer,
5763 std::shared_ptr<Schema> schema)
58- : ManifestWriterImpl(first_row_id, std::move(writer), std::move(schema)) {}
64+ : ManifestWriterImpl(snapshot_id, std::move(writer), std::move(schema)),
65+ wrapper_(snapshot_id) {}
5966
6067 Status WriteManifestEntry (const ManifestEntry& entry) const override ;
6168
6269 Status Close () override ;
70+
71+ private:
72+ V2MetaData::ManifestEntryWrapper wrapper_;
6373};
6474
6575// / \brief Write v3 manifest entries to a manifest file.
6676class ManifestWriterV3 : public ManifestWriterImpl {
6777 public:
68- explicit ManifestWriterV3 (int64_t first_row_id, std::unique_ptr<Writer> writer,
78+ explicit ManifestWriterV3 (int64_t snapshot_id, int64_t first_row_id,
79+ std::unique_ptr<Writer> writer,
6980 std::shared_ptr<Schema> schema)
70- : ManifestWriterImpl(first_row_id, std::move(writer), std::move(schema)) {}
81+ : ManifestWriterImpl(snapshot_id, std::move(writer), std::move(schema)),
82+ wrapper_(snapshot_id) {}
7183
7284 Status WriteManifestEntry (const ManifestEntry& entry) const override ;
7385
7486 Status Close () override ;
87+
88+ private:
89+ V3MetaData::ManifestEntryWrapper wrapper_;
7590};
7691
7792// / \brief Write manifest files to a manifest list file.
7893class ManifestListWriterImpl : public ManifestListWriter {
7994 public:
8095 explicit ManifestListWriterImpl (int64_t snapshot_id, int64_t parent_snapshot_id,
81- int64_t sequence_number, int64_t first_row_id,
8296 std::unique_ptr<Writer> writer,
8397 std::shared_ptr<Schema> schema)
8498 : schema_(std::move(schema)), writer_(std::move(writer)) {}
@@ -92,30 +106,36 @@ class ManifestListWriterImpl : public ManifestListWriter {
92106class ManifestListWriterV1 : public ManifestListWriterImpl {
93107 public:
94108 explicit ManifestListWriterV1 (int64_t snapshot_id, int64_t parent_snapshot_id,
95- int64_t sequence_number, int64_t first_row_id,
109+
96110 std::unique_ptr<Writer> writer,
97111 std::shared_ptr<Schema> schema)
98- : ManifestListWriterImpl(snapshot_id, parent_snapshot_id, sequence_number ,
99- first_row_id, std::move(writer), std::move(schema)) {}
112+ : ManifestListWriterImpl(snapshot_id, parent_snapshot_id, std::move(writer) ,
113+ std::move(schema)) {}
100114
101115 Status WriteManifestFile (const ManifestFile& file) const override ;
102116
103117 Status Close () override ;
118+
119+ private:
120+ V1MetaData::ManifestFileWrapper wrapper_;
104121};
105122
106123// / \brief Write v2 manifest files to a manifest list file.
107124class ManifestListWriterV2 : public ManifestListWriterImpl {
108125 public:
109126 explicit ManifestListWriterV2 (int64_t snapshot_id, int64_t parent_snapshot_id,
110- int64_t sequence_number, int64_t first_row_id,
111- std::unique_ptr<Writer> writer,
127+ int64_t sequence_number, std::unique_ptr<Writer> writer,
112128 std::shared_ptr<Schema> schema)
113- : ManifestListWriterImpl(snapshot_id, parent_snapshot_id, sequence_number,
114- first_row_id, std::move(writer), std::move(schema)) {}
129+ : ManifestListWriterImpl(snapshot_id, parent_snapshot_id, std::move(writer),
130+ std::move(schema)),
131+ wrapper_(snapshot_id, sequence_number) {}
115132
116133 Status WriteManifestFile (const ManifestFile& file) const override ;
117134
118135 Status Close () override ;
136+
137+ private:
138+ V2MetaData::ManifestFileWrapper wrapper_;
119139};
120140
121141// / \brief Write v3 manifest files to a manifest list file.
@@ -125,12 +145,16 @@ class ManifestListWriterV3 : public ManifestListWriterImpl {
125145 int64_t sequence_number, int64_t first_row_id,
126146 std::unique_ptr<Writer> writer,
127147 std::shared_ptr<Schema> schema)
128- : ManifestListWriterImpl(snapshot_id, parent_snapshot_id, sequence_number,
129- first_row_id, std::move(writer), std::move(schema)) {}
148+ : ManifestListWriterImpl(snapshot_id, parent_snapshot_id, std::move(writer),
149+ std::move(schema)),
150+ wrapper_(snapshot_id, sequence_number) {}
130151
131152 Status WriteManifestFile (const ManifestFile& file) const override ;
132153
133154 Status Close () override ;
155+
156+ private:
157+ V3MetaData::ManifestFileWrapper wrapper_;
134158};
135159
136160} // namespace iceberg
0 commit comments