This is an automated email from the ASF dual-hosted git repository.

gangwu pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/iceberg-cpp.git


The following commit(s) were added to refs/heads/main by this push:
     new 7c325fa6 refactor(manifest): remove MakeVxWriter functions in favor of 
MakeWriter (#551)
7c325fa6 is described below

commit 7c325fa6ad7483f20326a0b5ae9431208977468d
Author: Junwang Zhao <[email protected]>
AuthorDate: Sat Jan 31 15:31:23 2026 +0800

    refactor(manifest): remove MakeVxWriter functions in favor of MakeWriter 
(#551)
    
    Remove MakeVxWriter functions in favor of MakeWriter, and apply int8_t
    to all format version parameters for consistency.
---
 src/iceberg/json_serde.cc                         |   1 +
 src/iceberg/manifest/manifest_writer.cc           | 222 ++++++----------------
 src/iceberg/manifest/manifest_writer.h            |  77 --------
 src/iceberg/test/delete_file_index_test.cc        |  42 ++--
 src/iceberg/test/manifest_group_test.cc           |  20 +-
 src/iceberg/test/manifest_list_versions_test.cc   |  17 +-
 src/iceberg/test/manifest_reader_stats_test.cc    |  14 +-
 src/iceberg/test/manifest_reader_test.cc          |  20 +-
 src/iceberg/test/manifest_writer_versions_test.cc |  26 +--
 src/iceberg/test/rolling_manifest_writer_test.cc  |  14 +-
 src/iceberg/test/table_scan_test.cc               |  16 +-
 src/iceberg/update/update_partition_spec.cc       |   1 -
 12 files changed, 145 insertions(+), 325 deletions(-)

diff --git a/src/iceberg/json_serde.cc b/src/iceberg/json_serde.cc
index 93705f53..004e8b3f 100644
--- a/src/iceberg/json_serde.cc
+++ b/src/iceberg/json_serde.cc
@@ -26,6 +26,7 @@
 
 #include <nlohmann/json.hpp>
 
+#include "iceberg/constants.h"
 #include "iceberg/json_serde_internal.h"
 #include "iceberg/name_mapping.h"
 #include "iceberg/partition_field.h"
diff --git a/src/iceberg/manifest/manifest_writer.cc 
b/src/iceberg/manifest/manifest_writer.cc
index 36b34b8b..fbe3d79b 100644
--- a/src/iceberg/manifest/manifest_writer.cc
+++ b/src/iceberg/manifest/manifest_writer.cc
@@ -30,7 +30,6 @@
 #include "iceberg/partition_summary_internal.h"
 #include "iceberg/result.h"
 #include "iceberg/schema.h"
-#include "iceberg/snapshot.h"
 #include "iceberg/table_metadata.h"
 #include "iceberg/util/macros.h"
 
@@ -272,87 +271,41 @@ Result<std::unique_ptr<Writer>> OpenFileWriter(
   return writer;
 }
 
-Result<std::unique_ptr<ManifestWriter>> ManifestWriter::MakeV1Writer(
-    std::optional<int64_t> snapshot_id, std::string_view manifest_location,
-    std::shared_ptr<FileIO> file_io, std::shared_ptr<PartitionSpec> 
partition_spec,
-    std::shared_ptr<Schema> current_schema) {
-  if (manifest_location.empty()) {
-    return InvalidArgument("Manifest location cannot be empty");
-  }
-  if (!file_io) {
-    return InvalidArgument("FileIO cannot be null");
-  }
-  if (!partition_spec) {
-    return InvalidArgument("PartitionSpec cannot be null");
-  }
-  if (!current_schema) {
-    return InvalidArgument("Current schema cannot be null");
-  }
+Result<std::unique_ptr<ManifestWriter>> ManifestWriter::MakeWriter(
+    int8_t format_version, std::optional<int64_t> snapshot_id,
+    std::string_view manifest_location, std::shared_ptr<FileIO> file_io,
+    std::shared_ptr<PartitionSpec> partition_spec, std::shared_ptr<Schema> 
current_schema,
+    ManifestContent content, std::optional<int64_t> first_row_id) {
+  ICEBERG_PRECHECK(!manifest_location.empty(), "Manifest location cannot be 
empty");
+  ICEBERG_PRECHECK(file_io, "FileIO cannot be null");
+  ICEBERG_PRECHECK(partition_spec, "PartitionSpec cannot be null");
+  ICEBERG_PRECHECK(current_schema, "Current schema cannot be null");
 
-  auto adapter = std::make_unique<ManifestEntryAdapterV1>(
-      snapshot_id, std::move(partition_spec), std::move(current_schema));
-  ICEBERG_RETURN_UNEXPECTED(adapter->Init());
-  ICEBERG_RETURN_UNEXPECTED(adapter->StartAppending());
+  std::unique_ptr<ManifestEntryAdapter> adapter;
+  std::optional<int64_t> writer_first_row_id = std::nullopt;
 
-  auto schema = adapter->schema();
-  ICEBERG_ASSIGN_OR_RAISE(
-      auto writer,
-      OpenFileWriter(manifest_location, std::move(schema), std::move(file_io),
-                     adapter->metadata(), "manifest_entry"));
-  return std::unique_ptr<ManifestWriter>(new ManifestWriter(
-      std::move(writer), std::move(adapter), manifest_location, std::nullopt));
-}
-
-Result<std::unique_ptr<ManifestWriter>> ManifestWriter::MakeV2Writer(
-    std::optional<int64_t> snapshot_id, std::string_view manifest_location,
-    std::shared_ptr<FileIO> file_io, std::shared_ptr<PartitionSpec> 
partition_spec,
-    std::shared_ptr<Schema> current_schema, ManifestContent content) {
-  if (manifest_location.empty()) {
-    return InvalidArgument("Manifest location cannot be empty");
-  }
-  if (!file_io) {
-    return InvalidArgument("FileIO cannot be null");
-  }
-  if (!partition_spec) {
-    return InvalidArgument("PartitionSpec cannot be null");
-  }
-  if (!current_schema) {
-    return InvalidArgument("Current schema cannot be null");
+  switch (format_version) {
+    case 1: {
+      adapter = std::make_unique<ManifestEntryAdapterV1>(
+          snapshot_id, std::move(partition_spec), std::move(current_schema));
+      break;
+    }
+    case 2: {
+      adapter = std::make_unique<ManifestEntryAdapterV2>(
+          snapshot_id, std::move(partition_spec), std::move(current_schema), 
content);
+      break;
+    }
+    case 3: {
+      adapter = std::make_unique<ManifestEntryAdapterV3>(
+          snapshot_id, first_row_id, std::move(partition_spec), 
std::move(current_schema),
+          content);
+      writer_first_row_id = first_row_id;
+      break;
+    }
+    default:
+      return NotSupported("Format version {} is not supported", 
format_version);
   }
-  auto adapter = std::make_unique<ManifestEntryAdapterV2>(
-      snapshot_id, std::move(partition_spec), std::move(current_schema), 
content);
-  ICEBERG_RETURN_UNEXPECTED(adapter->Init());
-  ICEBERG_RETURN_UNEXPECTED(adapter->StartAppending());
-
-  auto schema = adapter->schema();
-  ICEBERG_ASSIGN_OR_RAISE(
-      auto writer,
-      OpenFileWriter(manifest_location, std::move(schema), std::move(file_io),
-                     adapter->metadata(), "manifest_entry"));
-  return std::unique_ptr<ManifestWriter>(new ManifestWriter(
-      std::move(writer), std::move(adapter), manifest_location, std::nullopt));
-}
 
-Result<std::unique_ptr<ManifestWriter>> ManifestWriter::MakeV3Writer(
-    std::optional<int64_t> snapshot_id, std::optional<int64_t> first_row_id,
-    std::string_view manifest_location, std::shared_ptr<FileIO> file_io,
-    std::shared_ptr<PartitionSpec> partition_spec, std::shared_ptr<Schema> 
current_schema,
-    ManifestContent content) {
-  if (manifest_location.empty()) {
-    return InvalidArgument("Manifest location cannot be empty");
-  }
-  if (!file_io) {
-    return InvalidArgument("FileIO cannot be null");
-  }
-  if (!partition_spec) {
-    return InvalidArgument("PartitionSpec cannot be null");
-  }
-  if (!current_schema) {
-    return InvalidArgument("Current schema cannot be null");
-  }
-  auto adapter = std::make_unique<ManifestEntryAdapterV3>(
-      snapshot_id, first_row_id, std::move(partition_spec), 
std::move(current_schema),
-      content);
   ICEBERG_RETURN_UNEXPECTED(adapter->Init());
   ICEBERG_RETURN_UNEXPECTED(adapter->StartAppending());
 
@@ -362,28 +315,7 @@ Result<std::unique_ptr<ManifestWriter>> 
ManifestWriter::MakeV3Writer(
       OpenFileWriter(manifest_location, std::move(schema), std::move(file_io),
                      adapter->metadata(), "manifest_entry"));
   return std::unique_ptr<ManifestWriter>(new ManifestWriter(
-      std::move(writer), std::move(adapter), manifest_location, first_row_id));
-}
-
-Result<std::unique_ptr<ManifestWriter>> ManifestWriter::MakeWriter(
-    int8_t format_version, std::optional<int64_t> snapshot_id,
-    std::string_view manifest_location, std::shared_ptr<FileIO> file_io,
-    std::shared_ptr<PartitionSpec> partition_spec, std::shared_ptr<Schema> 
current_schema,
-    ManifestContent content, std::optional<int64_t> first_row_id) {
-  switch (format_version) {
-    case 1:
-      return MakeV1Writer(snapshot_id, manifest_location, std::move(file_io),
-                          std::move(partition_spec), 
std::move(current_schema));
-    case 2:
-      return MakeV2Writer(snapshot_id, manifest_location, std::move(file_io),
-                          std::move(partition_spec), 
std::move(current_schema), content);
-    case 3:
-      return MakeV3Writer(snapshot_id, first_row_id, manifest_location,
-                          std::move(file_io), std::move(partition_spec),
-                          std::move(current_schema), content);
-    default:
-      return NotSupported("Format version {} is not supported", 
format_version);
-  }
+      std::move(writer), std::move(adapter), manifest_location, 
writer_first_row_id));
 }
 
 ManifestListWriter::ManifestListWriter(std::unique_ptr<Writer> writer,
@@ -420,83 +352,47 @@ std::optional<int64_t> ManifestListWriter::next_row_id() 
const {
   return adapter_->next_row_id();
 }
 
-Result<std::unique_ptr<ManifestListWriter>> ManifestListWriter::MakeV1Writer(
-    int64_t snapshot_id, std::optional<int64_t> parent_snapshot_id,
-    std::string_view manifest_list_location, std::shared_ptr<FileIO> file_io) {
-  auto adapter = std::make_unique<ManifestFileAdapterV1>(snapshot_id, 
parent_snapshot_id);
-  ICEBERG_RETURN_UNEXPECTED(adapter->Init());
-  ICEBERG_RETURN_UNEXPECTED(adapter->StartAppending());
-
-  auto schema = adapter->schema();
-  ICEBERG_ASSIGN_OR_RAISE(
-      auto writer,
-      OpenFileWriter(manifest_list_location, std::move(schema), 
std::move(file_io),
-                     adapter->metadata(), "manifest_file"));
-  return std::unique_ptr<ManifestListWriter>(
-      new ManifestListWriter(std::move(writer), std::move(adapter)));
-}
-
-Result<std::unique_ptr<ManifestListWriter>> ManifestListWriter::MakeV2Writer(
-    int64_t snapshot_id, std::optional<int64_t> parent_snapshot_id,
-    int64_t sequence_number, std::string_view manifest_list_location,
-    std::shared_ptr<FileIO> file_io) {
-  auto adapter = std::make_unique<ManifestFileAdapterV2>(snapshot_id, 
parent_snapshot_id,
-                                                         sequence_number);
-  ICEBERG_RETURN_UNEXPECTED(adapter->Init());
-  ICEBERG_RETURN_UNEXPECTED(adapter->StartAppending());
-
-  auto schema = adapter->schema();
-  ICEBERG_ASSIGN_OR_RAISE(
-      auto writer,
-      OpenFileWriter(manifest_list_location, std::move(schema), 
std::move(file_io),
-                     adapter->metadata(), "manifest_file"));
-
-  return std::unique_ptr<ManifestListWriter>(
-      new ManifestListWriter(std::move(writer), std::move(adapter)));
-}
-
-Result<std::unique_ptr<ManifestListWriter>> ManifestListWriter::MakeV3Writer(
-    int64_t snapshot_id, std::optional<int64_t> parent_snapshot_id,
-    int64_t sequence_number, int64_t first_row_id,
-    std::string_view manifest_list_location, std::shared_ptr<FileIO> file_io) {
-  auto adapter = std::make_unique<ManifestFileAdapterV3>(snapshot_id, 
parent_snapshot_id,
-                                                         sequence_number, 
first_row_id);
-  ICEBERG_RETURN_UNEXPECTED(adapter->Init());
-  ICEBERG_RETURN_UNEXPECTED(adapter->StartAppending());
-
-  auto schema = adapter->schema();
-  ICEBERG_ASSIGN_OR_RAISE(
-      auto writer,
-      OpenFileWriter(manifest_list_location, std::move(schema), 
std::move(file_io),
-                     adapter->metadata(), "manifest_file"));
-  return std::unique_ptr<ManifestListWriter>(
-      new ManifestListWriter(std::move(writer), std::move(adapter)));
-}
-
 Result<std::unique_ptr<ManifestListWriter>> ManifestListWriter::MakeWriter(
     int8_t format_version, int64_t snapshot_id, std::optional<int64_t> 
parent_snapshot_id,
     std::string_view manifest_list_location, std::shared_ptr<FileIO> file_io,
     std::optional<int64_t> sequence_number, std::optional<int64_t> 
first_row_id) {
+  std::unique_ptr<ManifestFileAdapter> adapter;
+
   switch (format_version) {
-    case 1:
-      return MakeV1Writer(snapshot_id, parent_snapshot_id, 
manifest_list_location,
-                          std::move(file_io));
-    case 2:
+    case 1: {
+      adapter = std::make_unique<ManifestFileAdapterV1>(snapshot_id, 
parent_snapshot_id);
+      break;
+    }
+    case 2: {
       ICEBERG_PRECHECK(sequence_number.has_value(),
                        "Sequence number is required for format version 2");
-      return MakeV2Writer(snapshot_id, parent_snapshot_id, 
sequence_number.value(),
-                          manifest_list_location, std::move(file_io));
-    case 3:
+      adapter = std::make_unique<ManifestFileAdapterV2>(snapshot_id, 
parent_snapshot_id,
+                                                        
sequence_number.value());
+      break;
+    }
+    case 3: {
       ICEBERG_PRECHECK(sequence_number.has_value(),
                        "Sequence number is required for format version 3");
       ICEBERG_PRECHECK(first_row_id.has_value(),
                        "First row ID is required for format version 3");
-      return MakeV3Writer(snapshot_id, parent_snapshot_id, 
sequence_number.value(),
-                          first_row_id.value(), manifest_list_location,
-                          std::move(file_io));
+      adapter = std::make_unique<ManifestFileAdapterV3>(
+          snapshot_id, parent_snapshot_id, sequence_number.value(), 
first_row_id.value());
+      break;
+    }
     default:
       return NotSupported("Format version {} is not supported", 
format_version);
   }
+
+  ICEBERG_RETURN_UNEXPECTED(adapter->Init());
+  ICEBERG_RETURN_UNEXPECTED(adapter->StartAppending());
+
+  auto schema = adapter->schema();
+  ICEBERG_ASSIGN_OR_RAISE(
+      auto writer,
+      OpenFileWriter(manifest_list_location, std::move(schema), 
std::move(file_io),
+                     adapter->metadata(), "manifest_file"));
+  return std::unique_ptr<ManifestListWriter>(
+      new ManifestListWriter(std::move(writer), std::move(adapter)));
 }
 
 }  // namespace iceberg
diff --git a/src/iceberg/manifest/manifest_writer.h 
b/src/iceberg/manifest/manifest_writer.h
index 288bda31..cc57f25f 100644
--- a/src/iceberg/manifest/manifest_writer.h
+++ b/src/iceberg/manifest/manifest_writer.h
@@ -117,48 +117,6 @@ class ICEBERG_EXPORT ManifestWriter {
   /// \note Only valid after the file is closed.
   Result<ManifestFile> ToManifestFile() const;
 
-  /// \brief Creates a writer for a manifest file.
-  /// \param snapshot_id ID of the snapshot.
-  /// \param manifest_location Path to the manifest file.
-  /// \param file_io File IO implementation to use.
-  /// \param partition_spec Partition spec for the manifest.
-  /// \param current_schema Current table schema.
-  /// \return A Result containing the writer or an error.
-  static Result<std::unique_ptr<ManifestWriter>> MakeV1Writer(
-      std::optional<int64_t> snapshot_id, std::string_view manifest_location,
-      std::shared_ptr<FileIO> file_io, std::shared_ptr<PartitionSpec> 
partition_spec,
-      std::shared_ptr<Schema> current_schema);
-
-  /// \brief Creates a writer for a manifest file.
-  /// \param snapshot_id ID of the snapshot.
-  /// \param manifest_location Path to the manifest file.
-  /// \param file_io File IO implementation to use.
-  /// \param partition_spec Partition spec for the manifest.
-  /// \param current_schema Schema containing the source fields referenced by 
partition
-  /// spec.
-  /// \param content Content of the manifest.
-  /// \return A Result containing the writer or an error.
-  static Result<std::unique_ptr<ManifestWriter>> MakeV2Writer(
-      std::optional<int64_t> snapshot_id, std::string_view manifest_location,
-      std::shared_ptr<FileIO> file_io, std::shared_ptr<PartitionSpec> 
partition_spec,
-      std::shared_ptr<Schema> current_schema, ManifestContent content);
-
-  /// \brief Creates a writer for a manifest file.
-  /// \param snapshot_id ID of the snapshot.
-  /// \param first_row_id First row ID of the snapshot.
-  /// \param manifest_location Path to the manifest file.
-  /// \param file_io File IO implementation to use.
-  /// \param partition_spec Partition spec for the manifest.
-  /// \param current_schema Schema containing the source fields referenced by 
partition
-  /// spec.
-  /// \param content Content of the manifest.
-  /// \return A Result containing the writer or an error.
-  static Result<std::unique_ptr<ManifestWriter>> MakeV3Writer(
-      std::optional<int64_t> snapshot_id, std::optional<int64_t> first_row_id,
-      std::string_view manifest_location, std::shared_ptr<FileIO> file_io,
-      std::shared_ptr<PartitionSpec> partition_spec,
-      std::shared_ptr<Schema> current_schema, ManifestContent content);
-
   /// \brief Factory function to create a writer for a manifest file based on 
format
   /// version.
   /// \param format_version The format version (1, 2, 3, etc.).
@@ -226,41 +184,6 @@ class ICEBERG_EXPORT ManifestListWriter {
   /// \brief Get the next row id to assign.
   std::optional<int64_t> next_row_id() const;
 
-  /// \brief Creates a writer for the v1 manifest list.
-  /// \param snapshot_id ID of the snapshot.
-  /// \param parent_snapshot_id ID of the parent snapshot.
-  /// \param manifest_list_location Path to the manifest list file.
-  /// \param file_io File IO implementation to use.
-  /// \return A Result containing the writer or an error.
-  static Result<std::unique_ptr<ManifestListWriter>> MakeV1Writer(
-      int64_t snapshot_id, std::optional<int64_t> parent_snapshot_id,
-      std::string_view manifest_list_location, std::shared_ptr<FileIO> 
file_io);
-
-  /// \brief Creates a writer for the manifest list.
-  /// \param snapshot_id ID of the snapshot.
-  /// \param parent_snapshot_id ID of the parent snapshot.
-  /// \param sequence_number Sequence number of the snapshot.
-  /// \param manifest_list_location Path to the manifest list file.
-  /// \param file_io File IO implementation to use.
-  /// \return A Result containing the writer or an error.
-  static Result<std::unique_ptr<ManifestListWriter>> MakeV2Writer(
-      int64_t snapshot_id, std::optional<int64_t> parent_snapshot_id,
-      int64_t sequence_number, std::string_view manifest_list_location,
-      std::shared_ptr<FileIO> file_io);
-
-  /// \brief Creates a writer for the manifest list.
-  /// \param snapshot_id ID of the snapshot.
-  /// \param parent_snapshot_id ID of the parent snapshot.
-  /// \param sequence_number Sequence number of the snapshot.
-  /// \param first_row_id First row ID of the snapshot.
-  /// \param manifest_list_location Path to the manifest list file.
-  /// \param file_io File IO implementation to use.
-  /// \return A Result containing the writer or an error.
-  static Result<std::unique_ptr<ManifestListWriter>> MakeV3Writer(
-      int64_t snapshot_id, std::optional<int64_t> parent_snapshot_id,
-      int64_t sequence_number, int64_t first_row_id,
-      std::string_view manifest_list_location, std::shared_ptr<FileIO> 
file_io);
-
   /// \brief Factory function to create a writer for the manifest list based 
on format
   /// version.
   /// \param format_version The format version (1, 2, 3, etc.).
diff --git a/src/iceberg/test/delete_file_index_test.cc 
b/src/iceberg/test/delete_file_index_test.cc
index d5866e27..b99a2816 100644
--- a/src/iceberg/test/delete_file_index_test.cc
+++ b/src/iceberg/test/delete_file_index_test.cc
@@ -44,7 +44,7 @@
 
 namespace iceberg {
 
-class DeleteFileIndexTest : public testing::TestWithParam<int> {
+class DeleteFileIndexTest : public testing::TestWithParam<int8_t> {
  protected:
   void SetUp() override {
     avro::RegisterAll();
@@ -160,7 +160,7 @@ class DeleteFileIndexTest : public 
testing::TestWithParam<int> {
     };
   }
 
-  ManifestFile WriteDeleteManifest(int format_version, int64_t snapshot_id,
+  ManifestFile WriteDeleteManifest(int8_t format_version, int64_t snapshot_id,
                                    std::vector<ManifestEntry> entries,
                                    std::shared_ptr<PartitionSpec> spec) {
     const std::string manifest_path = MakeManifestPath();
@@ -230,7 +230,7 @@ TEST_P(DeleteFileIndexTest, TestEmptyIndex) {
 }
 
 TEST_P(DeleteFileIndexTest, TestMinSequenceNumberFilteringForFiles) {
-  int version = GetParam();
+  auto version = GetParam();
 
   auto eq_delete_1 = MakeEqualityDeleteFile("/path/to/eq-delete-1.parquet",
                                             
PartitionValues(std::vector<Literal>{}),
@@ -261,7 +261,7 @@ TEST_P(DeleteFileIndexTest, 
TestMinSequenceNumberFilteringForFiles) {
 }
 
 TEST_P(DeleteFileIndexTest, TestUnpartitionedDeletes) {
-  int version = GetParam();
+  auto version = GetParam();
 
   auto eq_delete_1 = MakeEqualityDeleteFile("/path/to/eq-delete-1.parquet",
                                             
PartitionValues(std::vector<Literal>{}),
@@ -359,7 +359,7 @@ TEST_P(DeleteFileIndexTest, TestUnpartitionedDeletes) {
 }
 
 TEST_P(DeleteFileIndexTest, TestPartitionedDeleteIndex) {
-  int version = GetParam();
+  auto version = GetParam();
 
   auto partition_a = PartitionValues({Literal::Int(0)});
   auto eq_delete_1 = MakeEqualityDeleteFile("/path/to/eq-delete-1.parquet", 
partition_a,
@@ -462,7 +462,7 @@ TEST_P(DeleteFileIndexTest, TestPartitionedDeleteIndex) {
 }
 
 TEST_P(DeleteFileIndexTest, TestPartitionedTableWithPartitionPosDeletes) {
-  int version = GetParam();
+  auto version = GetParam();
 
   auto partition_a = PartitionValues({Literal::Int(0)});
   auto pos_delete = MakePositionDeleteFile("/path/to/pos-delete.parquet", 
partition_a,
@@ -487,7 +487,7 @@ TEST_P(DeleteFileIndexTest, 
TestPartitionedTableWithPartitionPosDeletes) {
 }
 
 TEST_P(DeleteFileIndexTest, TestPartitionedTableWithPartitionEqDeletes) {
-  int version = GetParam();
+  auto version = GetParam();
 
   auto partition_a = PartitionValues({Literal::Int(0)});
   auto eq_delete = MakeEqualityDeleteFile("/path/to/eq-delete.parquet", 
partition_a,
@@ -512,7 +512,7 @@ TEST_P(DeleteFileIndexTest, 
TestPartitionedTableWithPartitionEqDeletes) {
 }
 
 TEST_P(DeleteFileIndexTest, TestPartitionedTableWithUnrelatedPartitionDeletes) 
{
-  int version = GetParam();
+  auto version = GetParam();
 
   // Create deletes for partition A
   auto partition_a = PartitionValues({Literal::Int(0)});
@@ -538,7 +538,7 @@ TEST_P(DeleteFileIndexTest, 
TestPartitionedTableWithUnrelatedPartitionDeletes) {
 }
 
 TEST_P(DeleteFileIndexTest, TestPartitionedTableWithOlderPartitionDeletes) {
-  int version = GetParam();
+  auto version = GetParam();
   if (version >= 3) {
     GTEST_SKIP() << "DVs are not filtered using sequence numbers in V3+";
   }
@@ -568,7 +568,7 @@ TEST_P(DeleteFileIndexTest, 
TestPartitionedTableWithOlderPartitionDeletes) {
 }
 
 TEST_P(DeleteFileIndexTest, TestPartitionedTableScanWithGlobalDeletes) {
-  int version = GetParam();
+  auto version = GetParam();
   if (version >= 3) {
     GTEST_SKIP() << "Different behavior for position deletes in V3";
   }
@@ -599,7 +599,7 @@ TEST_P(DeleteFileIndexTest, 
TestPartitionedTableScanWithGlobalDeletes) {
 }
 
 TEST_P(DeleteFileIndexTest, 
TestPartitionedTableScanWithGlobalAndPartitionDeletes) {
-  int version = GetParam();
+  auto version = GetParam();
   if (version >= 3) {
     GTEST_SKIP() << "Different behavior for position deletes in V3";
   }
@@ -644,7 +644,7 @@ TEST_P(DeleteFileIndexTest, 
TestPartitionedTableScanWithGlobalAndPartitionDelete
 }
 
 TEST_P(DeleteFileIndexTest, TestPartitionedTableSequenceNumbers) {
-  int version = GetParam();
+  auto version = GetParam();
 
   auto partition_a = PartitionValues({Literal::Int(0)});
   auto eq_delete = MakeEqualityDeleteFile("/path/to/eq-delete.parquet", 
partition_a,
@@ -672,7 +672,7 @@ TEST_P(DeleteFileIndexTest, 
TestPartitionedTableSequenceNumbers) {
 }
 
 TEST_P(DeleteFileIndexTest, TestUnpartitionedTableSequenceNumbers) {
-  int version = GetParam();
+  auto version = GetParam();
   if (version >= 3) {
     GTEST_SKIP() << "Different behavior in V3";
   }
@@ -841,7 +841,7 @@ TEST_P(DeleteFileIndexTest, TestEqualityDeletesGroup) {
 }
 
 TEST_P(DeleteFileIndexTest, TestMixDeleteFilesAndDVs) {
-  int version = GetParam();
+  auto version = GetParam();
   if (version < 3) {
     GTEST_SKIP() << "DVs only supported in V3+";
   }
@@ -897,7 +897,7 @@ TEST_P(DeleteFileIndexTest, TestMixDeleteFilesAndDVs) {
 }
 
 TEST_P(DeleteFileIndexTest, TestMultipleDVs) {
-  int version = GetParam();
+  auto version = GetParam();
   if (version < 3) {
     GTEST_SKIP() << "DVs only supported in V3+";
   }
@@ -923,7 +923,7 @@ TEST_P(DeleteFileIndexTest, TestMultipleDVs) {
 }
 
 TEST_P(DeleteFileIndexTest, TestInvalidDVSequenceNumber) {
-  int version = GetParam();
+  auto version = GetParam();
   if (version < 3) {
     GTEST_SKIP() << "DVs only supported in V3+";
   }
@@ -949,7 +949,7 @@ TEST_P(DeleteFileIndexTest, TestInvalidDVSequenceNumber) {
 }
 
 TEST_P(DeleteFileIndexTest, TestReferencedDeleteFiles) {
-  int version = GetParam();
+  auto version = GetParam();
 
   auto partition_a = PartitionValues({Literal::Int(0)});
   auto eq_delete = MakeEqualityDeleteFile("/path/to/eq-delete.parquet", 
partition_a,
@@ -987,7 +987,7 @@ TEST_P(DeleteFileIndexTest, TestReferencedDeleteFiles) {
 }
 
 TEST_P(DeleteFileIndexTest, TestExistingDeleteFiles) {
-  int version = GetParam();
+  auto version = GetParam();
 
   auto partition_a = PartitionValues({Literal::Int(0)});
   auto eq_delete = MakeEqualityDeleteFile("/path/to/eq-delete.parquet", 
partition_a,
@@ -1020,7 +1020,7 @@ TEST_P(DeleteFileIndexTest, TestExistingDeleteFiles) {
 }
 
 TEST_P(DeleteFileIndexTest, TestDeletedStatusExcluded) {
-  int version = GetParam();
+  auto version = GetParam();
 
   auto partition_a = PartitionValues({Literal::Int(0)});
   auto eq_delete_added = MakeEqualityDeleteFile(
@@ -1059,7 +1059,7 @@ TEST_P(DeleteFileIndexTest, TestDeletedStatusExcluded) {
 }
 
 TEST_P(DeleteFileIndexTest, TestPositionDeleteDiscardMetrics) {
-  int version = GetParam();
+  auto version = GetParam();
 
   auto partition_a = PartitionValues({Literal::Int(0)});
 
@@ -1119,7 +1119,7 @@ TEST_P(DeleteFileIndexTest, 
TestPositionDeleteDiscardMetrics) {
 }
 
 TEST_P(DeleteFileIndexTest, TestEqualityDeleteDiscardMetrics) {
-  int version = GetParam();
+  auto version = GetParam();
 
   auto partition_a = PartitionValues({Literal::Int(0)});
 
diff --git a/src/iceberg/test/manifest_group_test.cc 
b/src/iceberg/test/manifest_group_test.cc
index 2a062c9e..34ff9993 100644
--- a/src/iceberg/test/manifest_group_test.cc
+++ b/src/iceberg/test/manifest_group_test.cc
@@ -45,7 +45,7 @@
 
 namespace iceberg {
 
-class ManifestGroupTest : public testing::TestWithParam<int> {
+class ManifestGroupTest : public testing::TestWithParam<int8_t> {
  protected:
   void SetUp() override {
     avro::RegisterAll();
@@ -130,7 +130,7 @@ class ManifestGroupTest : public 
testing::TestWithParam<int> {
     };
   }
 
-  ManifestFile WriteDataManifest(int format_version, int64_t snapshot_id,
+  ManifestFile WriteDataManifest(int8_t format_version, int64_t snapshot_id,
                                  std::vector<ManifestEntry> entries,
                                  std::shared_ptr<PartitionSpec> spec) {
     const std::string manifest_path = MakeManifestPath();
@@ -152,7 +152,7 @@ class ManifestGroupTest : public 
testing::TestWithParam<int> {
     return std::move(manifest_result.value());
   }
 
-  ManifestFile WriteDeleteManifest(int format_version, int64_t snapshot_id,
+  ManifestFile WriteDeleteManifest(int8_t format_version, int64_t snapshot_id,
                                    std::vector<ManifestEntry> entries,
                                    std::shared_ptr<PartitionSpec> spec) {
     const std::string manifest_path = MakeManifestPath();
@@ -187,7 +187,7 @@ class ManifestGroupTest : public 
testing::TestWithParam<int> {
 
   // Write a ManifestFile to a manifest list and read it back. This is useful 
for v1
   // to populate all missing fields like sequence_number.
-  ManifestFile WriteAndReadManifestListEntry(int format_version, int64_t 
snapshot_id,
+  ManifestFile WriteAndReadManifestListEntry(int8_t format_version, int64_t 
snapshot_id,
                                              int64_t sequence_number,
                                              const ManifestFile& manifest) {
     const std::string manifest_list_path = MakeManifestListPath();
@@ -236,7 +236,7 @@ class ManifestGroupTest : public 
testing::TestWithParam<int> {
 };
 
 TEST_P(ManifestGroupTest, CreateAndGetEntries) {
-  int version = GetParam();
+  auto version = GetParam();
   if (version < 2) {
     GTEST_SKIP() << "Delete files only supported in V2+";
   }
@@ -291,7 +291,7 @@ TEST_P(ManifestGroupTest, CreateAndGetEntries) {
 }
 
 TEST_P(ManifestGroupTest, IgnoreDeleted) {
-  int version = GetParam();
+  auto version = GetParam();
 
   constexpr int64_t kSnapshotId = 1000L;
   constexpr int64_t kSequenceNumber = 1L;
@@ -329,7 +329,7 @@ TEST_P(ManifestGroupTest, IgnoreDeleted) {
 }
 
 TEST_P(ManifestGroupTest, IgnoreExisting) {
-  int version = GetParam();
+  auto version = GetParam();
 
   constexpr int64_t kSnapshotId = 1000L;
   constexpr int64_t kSequenceNumber = 1L;
@@ -367,7 +367,7 @@ TEST_P(ManifestGroupTest, IgnoreExisting) {
 }
 
 TEST_P(ManifestGroupTest, CustomManifestEntriesFilter) {
-  int version = GetParam();
+  auto version = GetParam();
 
   constexpr int64_t kSnapshotId = 1000L;
   const auto part_value = PartitionValues({Literal::Int(0)});
@@ -418,7 +418,7 @@ TEST_P(ManifestGroupTest, EmptyManifestGroup) {
 }
 
 TEST_P(ManifestGroupTest, MultipleDataManifests) {
-  int version = GetParam();
+  auto version = GetParam();
 
   const auto partition_a = PartitionValues({Literal::Int(0)});
   const auto partition_b = PartitionValues({Literal::Int(1)});
@@ -451,7 +451,7 @@ TEST_P(ManifestGroupTest, MultipleDataManifests) {
 }
 
 TEST_P(ManifestGroupTest, PartitionFilter) {
-  int version = GetParam();
+  auto version = GetParam();
 
   // Create two files with different partition values (bucket 0 and bucket 1)
   const auto partition_bucket_0 = PartitionValues({Literal::Int(0)});
diff --git a/src/iceberg/test/manifest_list_versions_test.cc 
b/src/iceberg/test/manifest_list_versions_test.cc
index f7049fad..9c16a02e 100644
--- a/src/iceberg/test/manifest_list_versions_test.cc
+++ b/src/iceberg/test/manifest_list_versions_test.cc
@@ -103,7 +103,7 @@ class TestManifestListVersions : public ::testing::Test {
                        
std::chrono::system_clock::now().time_since_epoch().count());
   }
 
-  std::string WriteManifestList(int format_version, int64_t 
expected_next_row_id,
+  std::string WriteManifestList(int8_t format_version, int64_t 
expected_next_row_id,
                                 const std::vector<ManifestFile>& manifests) 
const {
     const std::string manifest_list_path = CreateManifestListPath();
     constexpr int64_t kParentSnapshotId = kSnapshotId - 1;
@@ -126,7 +126,7 @@ class TestManifestListVersions : public ::testing::Test {
     return manifest_list_path;
   }
 
-  ManifestFile WriteAndReadManifestList(int format_version) const {
+  ManifestFile WriteAndReadManifestList(int8_t format_version) const {
     return ReadManifestList(
         WriteManifestList(format_version, kSnapshotFirstRowId, 
{kTestManifest}));
   }
@@ -190,9 +190,9 @@ class TestManifestListVersions : public ::testing::Test {
 TEST_F(TestManifestListVersions, TestV1WriteDeleteManifest) {
   const std::string manifest_list_path = CreateManifestListPath();
 
-  ICEBERG_UNWRAP_OR_FAIL(auto writer,
-                         ManifestListWriter::MakeV1Writer(kSnapshotId, 
kSnapshotId - 1,
-                                                          manifest_list_path, 
file_io_));
+  ICEBERG_UNWRAP_OR_FAIL(auto writer, ManifestListWriter::MakeWriter(
+                                          /*format_version=*/1, kSnapshotId,
+                                          kSnapshotId - 1, manifest_list_path, 
file_io_));
   auto status = writer->Add(kDeleteManifest);
 
   EXPECT_THAT(status, IsError(ErrorKind::kInvalidManifestList));
@@ -224,7 +224,7 @@ TEST_F(TestManifestListVersions, TestV1Write) {
 }
 
 TEST_F(TestManifestListVersions, TestV2Write) {
-  auto manifest = WriteAndReadManifestList(2);
+  auto manifest = WriteAndReadManifestList(/*format_version=*/2);
 
   // V3 fields are not written and are defaulted
   EXPECT_FALSE(manifest.first_row_id.has_value());
@@ -299,7 +299,8 @@ TEST_F(TestManifestListVersions, 
TestV3WriteMixedRowIdAssignment) {
       kSnapshotFirstRowId + 2 * (kAddedRows + kExistingRows);
 
   auto manifest_list_path = WriteManifestList(
-      3, kExpectedNextRowId, {missing_first_row_id, kTestManifest, 
missing_first_row_id});
+      /*format_version=*/3, kExpectedNextRowId,
+      {missing_first_row_id, kTestManifest, missing_first_row_id});
 
   auto manifests = ReadAllManifests(manifest_list_path);
   EXPECT_EQ(manifests.size(), 3);
@@ -444,7 +445,7 @@ TEST_F(TestManifestListVersions, 
TestManifestsPartitionSummary) {
   };
 
   // Test for all format versions
-  for (int format_version = 1; format_version <= 3; ++format_version) {
+  for (int8_t format_version = 1; format_version <= 3; ++format_version) {
     int64_t expected_next_row_id = kSnapshotFirstRowId +
                                    manifest.added_rows_count.value() +
                                    manifest.existing_rows_count.value();
diff --git a/src/iceberg/test/manifest_reader_stats_test.cc 
b/src/iceberg/test/manifest_reader_stats_test.cc
index d1da1795..a94dca12 100644
--- a/src/iceberg/test/manifest_reader_stats_test.cc
+++ b/src/iceberg/test/manifest_reader_stats_test.cc
@@ -40,7 +40,7 @@
 
 namespace iceberg {
 
-class TestManifestReaderStats : public testing::TestWithParam<int> {
+class TestManifestReaderStats : public testing::TestWithParam<int8_t> {
  protected:
   void SetUp() override {
     avro::RegisterAll();
@@ -86,7 +86,7 @@ class TestManifestReaderStats : public 
testing::TestWithParam<int> {
     });
   }
 
-  ManifestFile WriteManifest(int format_version, std::unique_ptr<DataFile> 
data_file) {
+  ManifestFile WriteManifest(int8_t format_version, std::unique_ptr<DataFile> 
data_file) {
     const std::string manifest_path = MakeManifestPath();
 
     auto writer_result = ManifestWriter::MakeWriter(
@@ -127,7 +127,7 @@ class TestManifestReaderStats : public 
testing::TestWithParam<int> {
 };
 
 TEST_P(TestManifestReaderStats, TestReadIncludesFullStats) {
-  int version = GetParam();
+  auto version = GetParam();
   auto manifest = WriteManifest(version, MakeDataFileWithStats());
 
   auto reader_result = ManifestReader::Make(manifest, file_io_, schema_, 
spec_);
@@ -142,7 +142,7 @@ TEST_P(TestManifestReaderStats, TestReadIncludesFullStats) {
 }
 
 TEST_P(TestManifestReaderStats, TestReadEntriesWithFilterIncludesFullStats) {
-  int version = GetParam();
+  auto version = GetParam();
   auto manifest = WriteManifest(version, MakeDataFileWithStats());
 
   auto reader_result = ManifestReader::Make(manifest, file_io_, schema_, 
spec_);
@@ -159,7 +159,7 @@ TEST_P(TestManifestReaderStats, 
TestReadEntriesWithFilterIncludesFullStats) {
 }
 
 TEST_P(TestManifestReaderStats, 
TestReadEntriesWithFilterAndSelectIncludesFullStats) {
-  int version = GetParam();
+  auto version = GetParam();
   auto manifest = WriteManifest(version, MakeDataFileWithStats());
 
   auto reader_result = ManifestReader::Make(manifest, file_io_, schema_, 
spec_);
@@ -177,7 +177,7 @@ TEST_P(TestManifestReaderStats, 
TestReadEntriesWithFilterAndSelectIncludesFullSt
 }
 
 TEST_P(TestManifestReaderStats, TestReadEntriesWithSelectNotProjectStats) {
-  int version = GetParam();
+  auto version = GetParam();
   auto manifest = WriteManifest(version, MakeDataFileWithStats());
 
   auto reader_result = ManifestReader::Make(manifest, file_io_, schema_, 
spec_);
@@ -194,7 +194,7 @@ TEST_P(TestManifestReaderStats, 
TestReadEntriesWithSelectNotProjectStats) {
 }
 
 TEST_P(TestManifestReaderStats, 
TestReadEntriesWithSelectCertainStatNotProjectStats) {
-  int version = GetParam();
+  auto version = GetParam();
   auto manifest = WriteManifest(version, MakeDataFileWithStats());
 
   auto reader_result = ManifestReader::Make(manifest, file_io_, schema_, 
spec_);
diff --git a/src/iceberg/test/manifest_reader_test.cc 
b/src/iceberg/test/manifest_reader_test.cc
index 7604eba9..3e93f6ff 100644
--- a/src/iceberg/test/manifest_reader_test.cc
+++ b/src/iceberg/test/manifest_reader_test.cc
@@ -42,7 +42,7 @@
 
 namespace iceberg {
 
-class TestManifestReader : public testing::TestWithParam<int> {
+class TestManifestReader : public testing::TestWithParam<int8_t> {
  protected:
   void SetUp() override {
     avro::RegisterAll();
@@ -78,7 +78,7 @@ class TestManifestReader : public testing::TestWithParam<int> 
{
     });
   }
 
-  ManifestFile WriteManifest(int format_version, std::optional<int64_t> 
snapshot_id,
+  ManifestFile WriteManifest(int8_t format_version, std::optional<int64_t> 
snapshot_id,
                              const std::vector<ManifestEntry>& entries) {
     const std::string manifest_path = MakeManifestPath();
 
@@ -134,7 +134,7 @@ class TestManifestReader : public 
testing::TestWithParam<int> {
     });
   }
 
-  ManifestFile WriteDeleteManifest(int format_version, int64_t snapshot_id,
+  ManifestFile WriteDeleteManifest(int8_t format_version, int64_t snapshot_id,
                                    std::vector<ManifestEntry> entries) {
     const std::string manifest_path = MakeManifestPath();
 
@@ -162,7 +162,7 @@ class TestManifestReader : public 
testing::TestWithParam<int> {
 };
 
 TEST_P(TestManifestReader, TestManifestReaderWithEmptyInheritableMetadata) {
-  int version = GetParam();
+  auto version = GetParam();
   auto file_a =
       MakeDataFile("/path/to/data-a.parquet", 
PartitionValues({Literal::Int(0)}));
 
@@ -191,7 +191,7 @@ TEST_P(TestManifestReader, 
TestManifestReaderWithEmptyInheritableMetadata) {
 }
 
 TEST_P(TestManifestReader, TestReaderWithFilterWithoutSelect) {
-  int version = GetParam();
+  auto version = GetParam();
   auto file_a =
       MakeDataFile("/path/to/data-a.parquet", 
PartitionValues({Literal::Int(0)}));
   auto file_b =
@@ -225,7 +225,7 @@ TEST_P(TestManifestReader, 
TestReaderWithFilterWithoutSelect) {
 }
 
 TEST_P(TestManifestReader, TestManifestReaderWithPartitionMetadata) {
-  int version = GetParam();
+  auto version = GetParam();
   auto file_a =
       MakeDataFile("/path/to/data-a.parquet", 
PartitionValues({Literal::Int(0)}));
   auto entry =
@@ -254,7 +254,7 @@ TEST_P(TestManifestReader, 
TestManifestReaderWithPartitionMetadata) {
 }
 
 TEST_P(TestManifestReader, TestDeleteFilesWithReferences) {
-  int version = GetParam();
+  auto version = GetParam();
   if (version < 2) {
     GTEST_SKIP() << "Delete files only supported in V2+";
   }
@@ -293,7 +293,7 @@ TEST_P(TestManifestReader, TestDeleteFilesWithReferences) {
 }
 
 TEST_P(TestManifestReader, TestDVs) {
-  int version = GetParam();
+  auto version = GetParam();
   if (version < 3) {
     GTEST_SKIP() << "DVs only supported in V3+";
   }
@@ -337,7 +337,7 @@ TEST_P(TestManifestReader, TestDVs) {
 }
 
 TEST_P(TestManifestReader, TestInvalidUsage) {
-  int version = GetParam();
+  auto version = GetParam();
   auto file_a =
       MakeDataFile("/path/to/data-a.parquet", 
PartitionValues({Literal::Int(0)}));
   auto entry =
@@ -354,7 +354,7 @@ TEST_P(TestManifestReader, TestInvalidUsage) {
 }
 
 TEST_P(TestManifestReader, TestDropStats) {
-  int version = GetParam();
+  auto version = GetParam();
 
   // Create a data file with full metrics
   auto file_with_stats = std::make_unique<DataFile>(DataFile{
diff --git a/src/iceberg/test/manifest_writer_versions_test.cc 
b/src/iceberg/test/manifest_writer_versions_test.cc
index cc4e804b..fc61980a 100644
--- a/src/iceberg/test/manifest_writer_versions_test.cc
+++ b/src/iceberg/test/manifest_writer_versions_test.cc
@@ -157,7 +157,7 @@ class ManifestWriterVersionsTest : public ::testing::Test {
                        
std::chrono::system_clock::now().time_since_epoch().count());
   }
 
-  std::string WriteManifests(int format_version,
+  std::string WriteManifests(int8_t format_version,
                              const std::vector<ManifestFile>& manifests) const 
{
     const std::string manifest_list_path = CreateManifestListPath();
     constexpr int64_t kParentSnapshotId = kSnapshotId - 1;
@@ -175,7 +175,7 @@ class ManifestWriterVersionsTest : public ::testing::Test {
   }
 
   std::vector<ManifestFile> WriteAndReadManifests(
-      const std::vector<ManifestFile>& manifests, int format_version) const {
+      const std::vector<ManifestFile>& manifests, int8_t format_version) const 
{
     return ReadManifests(WriteManifests(format_version, manifests));
   }
 
@@ -195,7 +195,7 @@ class ManifestWriterVersionsTest : public ::testing::Test {
                        
std::chrono::system_clock::now().time_since_epoch().count());
   }
 
-  ManifestFile WriteManifest(int format_version,
+  ManifestFile WriteManifest(int8_t format_version,
                              std::vector<std::shared_ptr<DataFile>> 
data_files) {
     const std::string manifest_path = CreateManifestPath();
 
@@ -228,7 +228,7 @@ class ManifestWriterVersionsTest : public ::testing::Test {
     return entries_result.value();
   }
 
-  ManifestFile WriteDeleteManifest(int format_version,
+  ManifestFile WriteDeleteManifest(int8_t format_version,
                                    std::shared_ptr<DataFile> delete_file) {
     const std::string manifest_path = CreateManifestPath();
 
@@ -249,7 +249,7 @@ class ManifestWriterVersionsTest : public ::testing::Test {
     return std::move(manifest_result.value());
   }
 
-  ManifestFile RewriteManifest(const ManifestFile& old_manifest, int 
format_version) {
+  ManifestFile RewriteManifest(const ManifestFile& old_manifest, int8_t 
format_version) {
     auto entries = ReadManifest(old_manifest);
 
     const std::string manifest_path = CreateManifestPath();
@@ -422,8 +422,8 @@ TEST_F(ManifestWriterVersionsTest, TestV1Write) {
 TEST_F(ManifestWriterVersionsTest, TestV1WriteDelete) {
   const std::string manifest_path = CreateManifestPath();
   ICEBERG_UNWRAP_OR_FAIL(
-      auto writer,
-      ManifestWriter::MakeV1Writer(kSnapshotId, manifest_path, file_io_, 
spec_, schema_));
+      auto writer, ManifestWriter::MakeWriter(/*format_version=*/1, 
kSnapshotId,
+                                              manifest_path, file_io_, spec_, 
schema_));
 
   ManifestEntry entry;
   entry.snapshot_id = kSnapshotId;
@@ -485,7 +485,7 @@ TEST_F(ManifestWriterVersionsTest, 
TestV2ManifestListRewriteWithInheritance) {
                 TableMetadata::kInitialSequenceNumber);
 
   // rewrite existing metadata with v2 manifest list
-  auto manifests2 = WriteAndReadManifests(manifests, 2);
+  auto manifests2 = WriteAndReadManifests(manifests, /*format_version=*/2);
   // the ManifestFile did not change and should still have its original 
sequence number, 0
   CheckManifest(manifests2[0], TableMetadata::kInitialSequenceNumber,
                 TableMetadata::kInitialSequenceNumber);
@@ -504,12 +504,12 @@ TEST_F(ManifestWriterVersionsTest, 
TestV2ManifestRewriteWithInheritance) {
                 TableMetadata::kInitialSequenceNumber);
 
   // rewrite the manifest file using a v2 manifest
-  auto rewritten_manifest = RewriteManifest(manifests[0], 2);
+  auto rewritten_manifest = RewriteManifest(manifests[0], 
/*format_version=*/2);
   CheckRewrittenManifest(rewritten_manifest, kInvalidSequenceNumber,
                          TableMetadata::kInitialSequenceNumber);
 
   // add the v2 manifest to a v2 manifest list, with a sequence number
-  auto manifests2 = WriteAndReadManifests({rewritten_manifest}, 2);
+  auto manifests2 = WriteAndReadManifests({rewritten_manifest}, 
/*format_version=*/2);
   // the ManifestFile is new so it has a sequence number, but the min sequence 
number 0 is
   // from the entry
   CheckRewrittenManifest(manifests2[0], kSequenceNumber,
@@ -573,7 +573,7 @@ TEST_F(ManifestWriterVersionsTest, 
TestV3ManifestListRewriteWithInheritance) {
                 TableMetadata::kInitialSequenceNumber);
 
   // rewrite existing metadata with a manifest list
-  auto manifests3 = WriteAndReadManifests(manifests, 3);
+  auto manifests3 = WriteAndReadManifests(manifests, /*format_version=*/3);
   // the ManifestFile did not change and should still have its original 
sequence number, 0
   CheckManifest(manifests3[0], TableMetadata::kInitialSequenceNumber,
                 TableMetadata::kInitialSequenceNumber);
@@ -593,12 +593,12 @@ TEST_F(ManifestWriterVersionsTest, 
TestV3ManifestRewriteWithInheritance) {
                 TableMetadata::kInitialSequenceNumber);
 
   // rewrite the manifest file using a v3 manifest
-  auto rewritten_manifest = RewriteManifest(manifests[0], 3);
+  auto rewritten_manifest = RewriteManifest(manifests[0], 
/*format_version=*/3);
   CheckRewrittenManifest(rewritten_manifest, kInvalidSequenceNumber,
                          TableMetadata::kInitialSequenceNumber);
 
   // add the v3 manifest to a v3 manifest list, with a sequence number
-  auto manifests3 = WriteAndReadManifests({rewritten_manifest}, 3);
+  auto manifests3 = WriteAndReadManifests({rewritten_manifest}, 
/*format_version=*/3);
   // the ManifestFile is new so it has a sequence number, but the min sequence 
number 0 is
   // from the entry
   CheckRewrittenManifest(manifests3[0], kSequenceNumber,
diff --git a/src/iceberg/test/rolling_manifest_writer_test.cc 
b/src/iceberg/test/rolling_manifest_writer_test.cc
index 439359bc..b996eb16 100644
--- a/src/iceberg/test/rolling_manifest_writer_test.cc
+++ b/src/iceberg/test/rolling_manifest_writer_test.cc
@@ -86,7 +86,7 @@ static std::string CreateManifestPath() {
 
 }  // namespace
 
-class RollingManifestWriterTest : public ::testing::TestWithParam<int32_t> {
+class RollingManifestWriterTest : public ::testing::TestWithParam<int8_t> {
  protected:
   void SetUp() override {
     avro::RegisterAll();
@@ -106,7 +106,7 @@ class RollingManifestWriterTest : public 
::testing::TestWithParam<int32_t> {
   }
 
   RollingManifestWriter::ManifestWriterFactory NewRollingWriteManifestFactory(
-      int32_t format_version) {
+      int8_t format_version) {
     return [this, format_version]() -> Result<std::unique_ptr<ManifestWriter>> 
{
       const std::string manifest_path = CreateManifestPath();
       return ManifestWriter::MakeWriter(format_version, kSnapshotId, 
manifest_path,
@@ -116,7 +116,7 @@ class RollingManifestWriterTest : public 
::testing::TestWithParam<int32_t> {
   }
 
   RollingManifestWriter::ManifestWriterFactory 
NewRollingWriteDeleteManifestFactory(
-      int32_t format_version) {
+      int8_t format_version) {
     return [this, format_version]() -> Result<std::unique_ptr<ManifestWriter>> 
{
       const std::string manifest_path = CreateManifestPath();
       return ManifestWriter::MakeWriter(format_version, kSnapshotId, 
manifest_path,
@@ -155,7 +155,7 @@ class RollingManifestWriterTest : public 
::testing::TestWithParam<int32_t> {
 };
 
 TEST_P(RollingManifestWriterTest, TestRollingManifestWriterNoRecords) {
-  int32_t format_version = GetParam();
+  auto format_version = GetParam();
   RollingManifestWriter writer(NewRollingWriteManifestFactory(format_version),
                                kSmallFileSize);
 
@@ -170,7 +170,7 @@ TEST_P(RollingManifestWriterTest, 
TestRollingManifestWriterNoRecords) {
 }
 
 TEST_P(RollingManifestWriterTest, TestRollingDeleteManifestWriterNoRecords) {
-  int32_t format_version = GetParam();
+  auto format_version = GetParam();
   if (format_version < 2) {
     GTEST_SKIP() << "Delete manifests only supported in V2+";
   }
@@ -188,7 +188,7 @@ TEST_P(RollingManifestWriterTest, 
TestRollingDeleteManifestWriterNoRecords) {
 }
 
 TEST_P(RollingManifestWriterTest, TestRollingManifestWriterSplitFiles) {
-  int32_t format_version = GetParam();
+  auto format_version = GetParam();
   RollingManifestWriter writer(NewRollingWriteManifestFactory(format_version),
                                kSmallFileSize);
 
@@ -239,7 +239,7 @@ TEST_P(RollingManifestWriterTest, 
TestRollingManifestWriterSplitFiles) {
 }
 
 TEST_P(RollingManifestWriterTest, TestRollingDeleteManifestWriterSplitFiles) {
-  int32_t format_version = GetParam();
+  auto format_version = GetParam();
   if (format_version < 2) {
     GTEST_SKIP() << "Delete manifests only supported in V2+";
   }
diff --git a/src/iceberg/test/table_scan_test.cc 
b/src/iceberg/test/table_scan_test.cc
index b496606c..2eed8673 100644
--- a/src/iceberg/test/table_scan_test.cc
+++ b/src/iceberg/test/table_scan_test.cc
@@ -47,7 +47,7 @@
 
 namespace iceberg {
 
-class TableScanTest : public testing::TestWithParam<int> {
+class TableScanTest : public testing::TestWithParam<int8_t> {
  protected:
   void SetUp() override {
     avro::RegisterAll();
@@ -175,7 +175,7 @@ class TableScanTest : public testing::TestWithParam<int> {
     };
   }
 
-  ManifestFile WriteDataManifest(int format_version, int64_t snapshot_id,
+  ManifestFile WriteDataManifest(int8_t format_version, int64_t snapshot_id,
                                  std::vector<ManifestEntry> entries,
                                  std::shared_ptr<PartitionSpec> spec) {
     const std::string manifest_path = MakeManifestPath();
@@ -197,7 +197,7 @@ class TableScanTest : public testing::TestWithParam<int> {
     return std::move(manifest_result.value());
   }
 
-  ManifestFile WriteDeleteManifest(int format_version, int64_t snapshot_id,
+  ManifestFile WriteDeleteManifest(int8_t format_version, int64_t snapshot_id,
                                    std::vector<ManifestEntry> entries,
                                    std::shared_ptr<PartitionSpec> spec) {
     const std::string manifest_path = MakeManifestPath();
@@ -224,7 +224,7 @@ class TableScanTest : public testing::TestWithParam<int> {
                        
std::chrono::system_clock::now().time_since_epoch().count());
   }
 
-  std::string WriteManifestList(int format_version, int64_t snapshot_id,
+  std::string WriteManifestList(int8_t format_version, int64_t snapshot_id,
                                 int64_t sequence_number,
                                 const std::vector<ManifestFile>& manifests) {
     const std::string manifest_list_path = MakeManifestListPath();
@@ -367,7 +367,7 @@ TEST_P(TableScanTest, DataTableScanPlanFilesEmpty) {
 }
 
 TEST_P(TableScanTest, PlanFilesWithDataManifests) {
-  int version = GetParam();
+  auto version = GetParam();
 
   constexpr int64_t kSnapshotId = 1000L;
   const auto part_value = PartitionValues({Literal::Int(0)});
@@ -427,7 +427,7 @@ TEST_P(TableScanTest, PlanFilesWithDataManifests) {
 }
 
 TEST_P(TableScanTest, PlanFilesWithMultipleManifests) {
-  int version = GetParam();
+  auto version = GetParam();
 
   const auto partition_a = PartitionValues({Literal::Int(0)});
   const auto partition_b = PartitionValues({Literal::Int(1)});
@@ -494,7 +494,7 @@ TEST_P(TableScanTest, PlanFilesWithMultipleManifests) {
 }
 
 TEST_P(TableScanTest, PlanFilesWithFilter) {
-  int version = GetParam();
+  auto version = GetParam();
 
   constexpr int64_t kSnapshotId = 1000L;
   const auto part_value = PartitionValues({Literal::Int(0)});
@@ -587,7 +587,7 @@ TEST_P(TableScanTest, PlanFilesWithFilter) {
 }
 
 TEST_P(TableScanTest, PlanFilesWithDeleteFiles) {
-  int version = GetParam();
+  auto version = GetParam();
   if (version < 2) {
     GTEST_SKIP() << "Delete files only supported in V2+";
   }
diff --git a/src/iceberg/update/update_partition_spec.cc 
b/src/iceberg/update/update_partition_spec.cc
index 54c3dc60..812540f2 100644
--- a/src/iceberg/update/update_partition_spec.cc
+++ b/src/iceberg/update/update_partition_spec.cc
@@ -32,7 +32,6 @@
 #include "iceberg/table_metadata.h"
 #include "iceberg/transaction.h"
 #include "iceberg/transform.h"
-#include "iceberg/util/checked_cast.h"
 #include "iceberg/util/macros.h"
 
 namespace iceberg {

Reply via email to