2727
2828namespace iceberg {
2929
30- Result<std::unique_ptr<ManifestWriter>> ManifestWriter::MakeWriter (
31- int32_t format_version, int64_t snapshot_id, int64_t first_row_id,
30+ Result<std::unique_ptr<ManifestWriter>> ManifestWriter::Make (
31+ int32_t format_version, int64_t snapshot_id, std::optional< int64_t > first_row_id,
3232 std::string_view manifest_location, std::shared_ptr<FileIO> file_io,
3333 std::shared_ptr<Schema> partition_schema) {
34- auto manifest_entry_schema = ManifestEntry::TypeFromPartitionType (partition_schema);
34+ auto manifest_entry_schema =
35+ ManifestEntry::TypeFromPartitionType (std::move (partition_schema));
3536 auto fields_span = manifest_entry_schema->fields ();
3637 std::vector<SchemaField> fields (fields_span.begin (), fields_span.end ());
3738 auto schema = std::make_shared<Schema>(fields);
@@ -48,17 +49,21 @@ Result<std::unique_ptr<ManifestWriter>> ManifestWriter::MakeWriter(
4849 return std::make_unique<ManifestWriterV2>(snapshot_id, std::move (writer),
4950 std::move (schema));
5051 case 3 :
51- return std::make_unique<ManifestWriterV3>(snapshot_id, first_row_id,
52+ // first_row_id is required for V3 manifest entry
53+ if (!first_row_id.has_value ()) {
54+ return InvalidManifest (" first_row_id is required for V3 manifest entry" );
55+ }
56+ return std::make_unique<ManifestWriterV3>(snapshot_id, first_row_id.value (),
5257 std::move (writer), std::move (schema));
5358
5459 default :
55- return InvalidArgument (" Unsupported manifest format version: {}" , format_version);
60+ return NotSupported (" Unsupported manifest format version: {}" , format_version);
5661 }
5762}
5863
59- Result<std::unique_ptr<ManifestListWriter>> ManifestListWriter::MakeWriter (
64+ Result<std::unique_ptr<ManifestListWriter>> ManifestListWriter::Make (
6065 int32_t format_version, int64_t snapshot_id, int64_t parent_snapshot_id,
61- int64_t sequence_number, int64_t first_row_id,
66+ std::optional< int64_t > sequence_number, std::optional< int64_t > first_row_id,
6267 std::string_view manifest_list_location, std::shared_ptr<FileIO> file_io) {
6368 std::vector<SchemaField> fields (ManifestFile::Type ().fields ().begin (),
6469 ManifestFile::Type ().fields ().end ());
@@ -71,20 +76,25 @@ Result<std::unique_ptr<ManifestListWriter>> ManifestListWriter::MakeWriter(
7176 switch (format_version) {
7277 case 1 :
7378 return std::make_unique<ManifestListWriterV1>(snapshot_id, parent_snapshot_id,
74-
7579 std::move (writer), std::move (schema));
7680 case 2 :
7781 return std::make_unique<ManifestListWriterV2>(snapshot_id, parent_snapshot_id,
78- sequence_number, std::move (writer),
79- std::move (schema));
80- case 3 :
81- return std::make_unique<ManifestListWriterV3>(snapshot_id, parent_snapshot_id,
82- sequence_number, first_row_id,
82+ sequence_number.value (),
8383 std::move (writer), std::move (schema));
84+ case 3 :
85+ // sequence_number&first_row_id is required for V3 manifest list
86+ if (!sequence_number.has_value ()) {
87+ return InvalidManifestList (" sequence_number is required for V3 manifest list" );
88+ }
89+ if (!first_row_id.has_value ()) {
90+ return InvalidManifestList (" first_row_id is required for V3 manifest list" );
91+ }
92+ return std::make_unique<ManifestListWriterV3>(
93+ snapshot_id, parent_snapshot_id, sequence_number.value (), first_row_id.value (),
94+ std::move (writer), std::move (schema));
8495
8596 default :
86- return InvalidArgument (" Unsupported manifest list format version: {}" ,
87- format_version);
97+ return NotSupported (" Unsupported manifest list format version: {}" , format_version);
8898 }
8999}
90100
0 commit comments