From 93dbbfb0f30d90debf88d4cbc9e612b6434a460a Mon Sep 17 00:00:00 2001 From: Xander Date: Sat, 30 May 2026 12:12:41 +0100 Subject: [PATCH 01/15] chore(refactor): add manifest list reader --- crates/iceberg/src/catalog/utils.rs | 6 ++- crates/iceberg/src/inspect/manifests.rs | 4 +- crates/iceberg/src/io/object_cache.rs | 11 +++--- crates/iceberg/src/spec/manifest_list.rs | 37 ++++++++++++++++++- crates/iceberg/src/spec/snapshot.rs | 1 + crates/iceberg/src/table.rs | 7 +++- crates/iceberg/src/transaction/append.rs | 14 +++---- crates/iceberg/src/transaction/mod.rs | 13 +++---- crates/iceberg/src/transaction/snapshot.rs | 6 ++- .../datafusion/src/physical_plan/commit.rs | 5 ++- 10 files changed, 73 insertions(+), 31 deletions(-) diff --git a/crates/iceberg/src/catalog/utils.rs b/crates/iceberg/src/catalog/utils.rs index d450f9df80..aa66f0f86f 100644 --- a/crates/iceberg/src/catalog/utils.rs +++ b/crates/iceberg/src/catalog/utils.rs @@ -23,7 +23,7 @@ use futures::{TryStreamExt, stream}; use crate::Result; use crate::io::FileIO; -use crate::spec::TableMetadata; +use crate::spec::{ManifestListReader, TableMetadata}; const DELETE_CONCURRENCY: usize = 10; @@ -47,7 +47,9 @@ pub async fn drop_table_data( // Load all manifest lists concurrently let results: Vec<_> = futures::future::try_join_all(metadata.snapshots().map(|snapshot| async { - let manifest_list = snapshot.load_manifest_list(io, metadata).await?; + let manifest_list = ManifestListReader::new(snapshot, io, metadata) + .load() + .await?; Ok::<_, crate::Error>((snapshot.manifest_list().to_string(), manifest_list)) })) .await?; diff --git a/crates/iceberg/src/inspect/manifests.rs b/crates/iceberg/src/inspect/manifests.rs index 4c30ca2ec5..a985786460 100644 --- a/crates/iceberg/src/inspect/manifests.rs +++ b/crates/iceberg/src/inspect/manifests.rs @@ -161,9 +161,7 @@ impl<'a> ManifestsTable<'a> { let mut partition_summaries = self.partition_summary_builder()?; if let Some(snapshot) = self.table.metadata().current_snapshot() { - let manifest_list = snapshot - .load_manifest_list(self.table.file_io(), &self.table.metadata_ref()) - .await?; + let manifest_list = self.table.manifest_list_reader(snapshot).load().await?; for manifest in manifest_list.entries() { content.append_value(manifest.content as i32); path.append_value(manifest.manifest_path.clone()); diff --git a/crates/iceberg/src/io/object_cache.rs b/crates/iceberg/src/io/object_cache.rs index 5de45e2acc..7e0e96f46d 100644 --- a/crates/iceberg/src/io/object_cache.rs +++ b/crates/iceberg/src/io/object_cache.rs @@ -20,7 +20,8 @@ use std::sync::Arc; use crate::io::FileIO; use crate::spec::{ - FormatVersion, Manifest, ManifestFile, ManifestList, SchemaId, SnapshotRef, TableMetadataRef, + FormatVersion, Manifest, ManifestFile, ManifestList, ManifestListReader, SchemaId, SnapshotRef, + TableMetadataRef, }; use crate::{Error, ErrorKind, Result}; @@ -126,8 +127,8 @@ impl ObjectCache { table_metadata: &TableMetadataRef, ) -> Result> { if self.cache_disabled { - return snapshot - .load_manifest_list(&self.file_io, table_metadata) + return ManifestListReader::new(snapshot, &self.file_io, table_metadata) + .load() .await .map(Arc::new); } @@ -173,8 +174,8 @@ impl ObjectCache { snapshot: &SnapshotRef, table_metadata: &TableMetadataRef, ) -> Result { - let manifest_list = snapshot - .load_manifest_list(&self.file_io, table_metadata) + let manifest_list = ManifestListReader::new(snapshot, &self.file_io, table_metadata) + .load() .await?; Ok(CachedItem::ManifestList(Arc::new(manifest_list))) diff --git a/crates/iceberg/src/spec/manifest_list.rs b/crates/iceberg/src/spec/manifest_list.rs index baaab1f590..73d0ee607f 100644 --- a/crates/iceberg/src/spec/manifest_list.rs +++ b/crates/iceberg/src/spec/manifest_list.rs @@ -28,7 +28,7 @@ use serde_derive::{Deserialize, Serialize}; use self::_const_schema::{MANIFEST_LIST_AVRO_SCHEMA_V1, MANIFEST_LIST_AVRO_SCHEMA_V2}; use self::_serde::{ManifestFileV1, ManifestFileV2}; -use super::{FormatVersion, Manifest}; +use super::{FormatVersion, Manifest, Snapshot, TableMetadata}; use crate::error::Result; use crate::io::{FileIO, OutputFile}; use crate::spec::manifest_list::_const_schema::MANIFEST_LIST_AVRO_SCHEMA_V3; @@ -90,6 +90,41 @@ impl ManifestList { } } +/// A manifest list reader that encapsulates the logic for loading and parsing a [`ManifestList`] +/// from a snapshot. +pub struct ManifestListReader<'a> { + snapshot: &'a Snapshot, + file_io: &'a FileIO, + table_metadata: &'a TableMetadata, +} + +impl<'a> ManifestListReader<'a> { + pub(crate) fn new( + snapshot: &'a Snapshot, + file_io: &'a FileIO, + table_metadata: &'a TableMetadata, + ) -> Self { + Self { + snapshot, + file_io, + table_metadata, + } + } + + /// Loads and returns the [`ManifestList`] for this snapshot. + pub async fn load(&self) -> Result { + let manifest_list_content = self + .file_io + .new_input(self.snapshot.manifest_list())? + .read() + .await?; + ManifestList::parse_with_version( + &manifest_list_content, + self.table_metadata.format_version(), + ) + } +} + /// A manifest list writer. pub struct ManifestListWriter { format_version: FormatVersion, diff --git a/crates/iceberg/src/spec/snapshot.rs b/crates/iceberg/src/spec/snapshot.rs index 3b8a3c934e..3894e3c329 100644 --- a/crates/iceberg/src/spec/snapshot.rs +++ b/crates/iceberg/src/spec/snapshot.rs @@ -195,6 +195,7 @@ impl Snapshot { } /// Load manifest list. + #[deprecated(since = "0.9.0", note = "Use `Table::manifest_list_reader()` instead")] pub async fn load_manifest_list( &self, file_io: &FileIO, diff --git a/crates/iceberg/src/table.rs b/crates/iceberg/src/table.rs index d2ba93f854..47234db33b 100644 --- a/crates/iceberg/src/table.rs +++ b/crates/iceberg/src/table.rs @@ -25,7 +25,7 @@ use crate::io::FileIO; use crate::io::object_cache::ObjectCache; use crate::runtime::Runtime; use crate::scan::TableScanBuilder; -use crate::spec::{SchemaRef, TableMetadata, TableMetadataRef}; +use crate::spec::{ManifestListReader, SchemaRef, Snapshot, TableMetadata, TableMetadataRef}; use crate::{Error, ErrorKind, Result, TableIdent}; /// Builder to create table scan. @@ -264,6 +264,11 @@ impl Table { self.metadata.current_schema().clone() } + /// Creates a [`ManifestListReader`] for the given snapshot. + pub fn manifest_list_reader<'a>(&'a self, snapshot: &'a Snapshot) -> ManifestListReader<'a> { + ManifestListReader::new(snapshot, &self.file_io, &self.metadata) + } + /// Create a reader for the table. pub fn reader_builder(&self) -> ArrowReaderBuilder { ArrowReaderBuilder::new(self.file_io.clone(), self.runtime().clone()) diff --git a/crates/iceberg/src/transaction/append.rs b/crates/iceberg/src/transaction/append.rs index 299973742e..49105fd3dd 100644 --- a/crates/iceberg/src/transaction/append.rs +++ b/crates/iceberg/src/transaction/append.rs @@ -128,11 +128,10 @@ impl SnapshotProduceOperation for FastAppendOperation { return Ok(vec![]); }; - let manifest_list = snapshot - .load_manifest_list( - snapshot_produce.table.file_io(), - &snapshot_produce.table.metadata_ref(), - ) + let manifest_list = snapshot_produce + .table + .manifest_list_reader(snapshot) + .load() .await?; Ok(manifest_list @@ -507,8 +506,9 @@ mod tests { } else { unreachable!() }; - let manifest_list = new_snapshot - .load_manifest_list(table.file_io(), table.metadata()) + let manifest_list = table + .manifest_list_reader(new_snapshot) + .load() .await .unwrap(); assert_eq!(1, manifest_list.entries().len()); diff --git a/crates/iceberg/src/transaction/mod.rs b/crates/iceberg/src/transaction/mod.rs index 04ee1997d0..5460919671 100644 --- a/crates/iceberg/src/transaction/mod.rs +++ b/crates/iceberg/src/transaction/mod.rs @@ -605,11 +605,10 @@ mod test_row_lineage { assert_eq!(table.metadata().next_row_id(), 30); // Check written manifest for first_row_id + let snapshot = table.metadata().current_snapshot().unwrap(); let manifest_list = table - .metadata() - .current_snapshot() - .unwrap() - .load_manifest_list(table.file_io(), table.metadata()) + .manifest_list_reader(snapshot) + .load() .await .unwrap(); @@ -634,10 +633,8 @@ mod test_row_lineage { // Check written manifest for first_row_id let manifest_list = table - .metadata() - .current_snapshot() - .unwrap() - .load_manifest_list(table.file_io(), table.metadata()) + .manifest_list_reader(snapshot) + .load() .await .unwrap(); assert_eq!(manifest_list.entries().len(), 2); diff --git a/crates/iceberg/src/transaction/snapshot.rs b/crates/iceberg/src/transaction/snapshot.rs index 8f643a7d1e..497467b37c 100644 --- a/crates/iceberg/src/transaction/snapshot.rs +++ b/crates/iceberg/src/transaction/snapshot.rs @@ -172,8 +172,10 @@ impl<'a> SnapshotProducer<'a> { let mut referenced_files = Vec::new(); if let Some(current_snapshot) = self.table.metadata().current_snapshot() { - let manifest_list = current_snapshot - .load_manifest_list(self.table.file_io(), &self.table.metadata_ref()) + let manifest_list = self + .table + .manifest_list_reader(current_snapshot) + .load() .await?; for manifest_list_entry in manifest_list.entries() { let manifest = manifest_list_entry diff --git a/crates/integrations/datafusion/src/physical_plan/commit.rs b/crates/integrations/datafusion/src/physical_plan/commit.rs index 3b3ff3d6b3..835c804908 100644 --- a/crates/integrations/datafusion/src/physical_plan/commit.rs +++ b/crates/integrations/datafusion/src/physical_plan/commit.rs @@ -504,8 +504,9 @@ mod tests { let current_snapshot = updated_table.metadata().current_snapshot().unwrap(); // Load the manifest list to verify the data files were added - let manifest_list = current_snapshot - .load_manifest_list(updated_table.file_io(), updated_table.metadata()) + let manifest_list = updated_table + .manifest_list_reader(current_snapshot) + .load() .await?; // There should be at least one manifest From a673c06b53b8f448f216aaf93b69defd7efd2b89 Mon Sep 17 00:00:00 2001 From: Xander Date: Sat, 30 May 2026 12:19:59 +0100 Subject: [PATCH 02/15] fmt --- crates/iceberg/src/transaction/mod.rs | 12 ++---------- 1 file changed, 2 insertions(+), 10 deletions(-) diff --git a/crates/iceberg/src/transaction/mod.rs b/crates/iceberg/src/transaction/mod.rs index 5460919671..b68a53e5e3 100644 --- a/crates/iceberg/src/transaction/mod.rs +++ b/crates/iceberg/src/transaction/mod.rs @@ -606,11 +606,7 @@ mod test_row_lineage { // Check written manifest for first_row_id let snapshot = table.metadata().current_snapshot().unwrap(); - let manifest_list = table - .manifest_list_reader(snapshot) - .load() - .await - .unwrap(); + let manifest_list = table.manifest_list_reader(snapshot).load().await.unwrap(); assert_eq!(manifest_list.entries().len(), 1); let manifest_file = &manifest_list.entries()[0]; @@ -632,11 +628,7 @@ mod test_row_lineage { assert_eq!(table.metadata().next_row_id(), 30 + 17 + 11); // Check written manifest for first_row_id - let manifest_list = table - .manifest_list_reader(snapshot) - .load() - .await - .unwrap(); + let manifest_list = table.manifest_list_reader(snapshot).load().await.unwrap(); assert_eq!(manifest_list.entries().len(), 2); let manifest_file = &manifest_list.entries()[1]; assert_eq!(manifest_file.first_row_id, Some(30)); From 816ed5fcc871f86cf25b5a28840078a05ba919be Mon Sep 17 00:00:00 2001 From: Xander Date: Sat, 30 May 2026 12:25:34 +0100 Subject: [PATCH 03/15] public-api-lock --- crates/iceberg/public-api.txt | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/crates/iceberg/public-api.txt b/crates/iceberg/public-api.txt index a88c91d625..5c1f7f52e1 100644 --- a/crates/iceberg/public-api.txt +++ b/crates/iceberg/public-api.txt @@ -2025,6 +2025,9 @@ pub fn iceberg::spec::ManifestList::eq(&self, other: &iceberg::spec::ManifestLis impl core::fmt::Debug for iceberg::spec::ManifestList pub fn iceberg::spec::ManifestList::fmt(&self, f: &mut core::fmt::Formatter<'_>) -> core::fmt::Result impl core::marker::StructuralPartialEq for iceberg::spec::ManifestList +pub struct iceberg::spec::ManifestListReader<'a> +impl<'a> iceberg::spec::ManifestListReader<'a> +pub async fn iceberg::spec::ManifestListReader<'a>::load(&self) -> iceberg::Result pub struct iceberg::spec::ManifestListWriter impl iceberg::spec::ManifestListWriter pub fn iceberg::spec::ManifestListWriter::add_manifests(&mut self, manifests: impl core::iter::traits::iterator::Iterator) -> iceberg::Result<()> @@ -3014,6 +3017,7 @@ pub fn iceberg::table::Table::current_schema_ref(&self) -> iceberg::spec::Schema pub fn iceberg::table::Table::file_io(&self) -> &iceberg::io::FileIO pub fn iceberg::table::Table::identifier(&self) -> &iceberg::TableIdent pub fn iceberg::table::Table::inspect(&self) -> iceberg::inspect::MetadataTable<'_> +pub fn iceberg::table::Table::manifest_list_reader<'a>(&'a self, snapshot: &'a iceberg::spec::Snapshot) -> iceberg::spec::ManifestListReader<'a> pub fn iceberg::table::Table::metadata(&self) -> &iceberg::spec::TableMetadata pub fn iceberg::table::Table::metadata_location(&self) -> core::option::Option<&str> pub fn iceberg::table::Table::metadata_location_result(&self) -> iceberg::Result<&str> From b3cac4b3ddd64fe8147bad988e462850628f70fe Mon Sep 17 00:00:00 2001 From: Xander Date: Mon, 1 Jun 2026 09:13:52 +0100 Subject: [PATCH 04/15] remove deprecated --- crates/iceberg/src/spec/snapshot.rs | 19 +------------------ 1 file changed, 1 insertion(+), 18 deletions(-) diff --git a/crates/iceberg/src/spec/snapshot.rs b/crates/iceberg/src/spec/snapshot.rs index 3894e3c329..7db8f5890f 100644 --- a/crates/iceberg/src/spec/snapshot.rs +++ b/crates/iceberg/src/spec/snapshot.rs @@ -27,8 +27,7 @@ use typed_builder::TypedBuilder; use super::table_metadata::SnapshotLog; use crate::error::{Result, timestamp_ms_to_utc}; -use crate::io::FileIO; -use crate::spec::{ManifestList, SchemaId, SchemaRef, TableMetadata}; +use crate::spec::{SchemaId, SchemaRef, TableMetadata}; use crate::{Error, ErrorKind}; /// The ref name of the main branch of the table. @@ -194,22 +193,6 @@ impl Snapshot { } } - /// Load manifest list. - #[deprecated(since = "0.9.0", note = "Use `Table::manifest_list_reader()` instead")] - pub async fn load_manifest_list( - &self, - file_io: &FileIO, - table_metadata: &TableMetadata, - ) -> Result { - let manifest_list_content = file_io.new_input(&self.manifest_list)?.read().await?; - ManifestList::parse_with_version( - &manifest_list_content, - // TODO: You don't really need the version since you could just project any Avro in - // the version that you'd like to get (probably always the latest) - table_metadata.format_version(), - ) - } - #[allow(dead_code)] pub(crate) fn log(&self) -> SnapshotLog { SnapshotLog { From fcab97d795c6ed892f9f902d4ea6e9206176450a Mon Sep 17 00:00:00 2001 From: Xander Date: Mon, 1 Jun 2026 09:14:43 +0100 Subject: [PATCH 05/15] use clone --- crates/iceberg/src/catalog/utils.rs | 10 ++++++---- crates/iceberg/src/io/object_cache.rs | 22 +++++++++++++++------- crates/iceberg/src/spec/manifest_list.rs | 18 +++++++++--------- crates/iceberg/src/table.rs | 12 +++++++++--- crates/iceberg/src/transaction/append.rs | 2 +- 5 files changed, 40 insertions(+), 24 deletions(-) diff --git a/crates/iceberg/src/catalog/utils.rs b/crates/iceberg/src/catalog/utils.rs index aa66f0f86f..b803280136 100644 --- a/crates/iceberg/src/catalog/utils.rs +++ b/crates/iceberg/src/catalog/utils.rs @@ -23,7 +23,7 @@ use futures::{TryStreamExt, stream}; use crate::Result; use crate::io::FileIO; -use crate::spec::{ManifestListReader, TableMetadata}; +use crate::spec::{ManifestListReader, TableMetadata, TableMetadataRef}; const DELETE_CONCURRENCY: usize = 10; @@ -44,12 +44,14 @@ pub async fn drop_table_data( let mut manifest_lists_to_delete: HashSet = HashSet::new(); let mut manifests_to_delete: HashSet = HashSet::new(); + let metadata_ref = TableMetadataRef::new(metadata.clone()); // Load all manifest lists concurrently let results: Vec<_> = futures::future::try_join_all(metadata.snapshots().map(|snapshot| async { - let manifest_list = ManifestListReader::new(snapshot, io, metadata) - .load() - .await?; + let manifest_list = + ManifestListReader::new(snapshot.clone(), io.clone(), metadata_ref.clone()) + .load() + .await?; Ok::<_, crate::Error>((snapshot.manifest_list().to_string(), manifest_list)) })) .await?; diff --git a/crates/iceberg/src/io/object_cache.rs b/crates/iceberg/src/io/object_cache.rs index 7e0e96f46d..d26adf86f6 100644 --- a/crates/iceberg/src/io/object_cache.rs +++ b/crates/iceberg/src/io/object_cache.rs @@ -127,10 +127,14 @@ impl ObjectCache { table_metadata: &TableMetadataRef, ) -> Result> { if self.cache_disabled { - return ManifestListReader::new(snapshot, &self.file_io, table_metadata) - .load() - .await - .map(Arc::new); + return ManifestListReader::new( + snapshot.clone(), + self.file_io.clone(), + table_metadata.clone(), + ) + .load() + .await + .map(Arc::new); } let key = CachedObjectKey::ManifestList(( @@ -174,9 +178,13 @@ impl ObjectCache { snapshot: &SnapshotRef, table_metadata: &TableMetadataRef, ) -> Result { - let manifest_list = ManifestListReader::new(snapshot, &self.file_io, table_metadata) - .load() - .await?; + let manifest_list = ManifestListReader::new( + snapshot.clone(), + self.file_io.clone(), + table_metadata.clone(), + ) + .load() + .await?; Ok(CachedItem::ManifestList(Arc::new(manifest_list))) } diff --git a/crates/iceberg/src/spec/manifest_list.rs b/crates/iceberg/src/spec/manifest_list.rs index 73d0ee607f..5f5fa3c148 100644 --- a/crates/iceberg/src/spec/manifest_list.rs +++ b/crates/iceberg/src/spec/manifest_list.rs @@ -28,7 +28,7 @@ use serde_derive::{Deserialize, Serialize}; use self::_const_schema::{MANIFEST_LIST_AVRO_SCHEMA_V1, MANIFEST_LIST_AVRO_SCHEMA_V2}; use self::_serde::{ManifestFileV1, ManifestFileV2}; -use super::{FormatVersion, Manifest, Snapshot, TableMetadata}; +use super::{FormatVersion, Manifest, SnapshotRef, TableMetadataRef}; use crate::error::Result; use crate::io::{FileIO, OutputFile}; use crate::spec::manifest_list::_const_schema::MANIFEST_LIST_AVRO_SCHEMA_V3; @@ -92,17 +92,17 @@ impl ManifestList { /// A manifest list reader that encapsulates the logic for loading and parsing a [`ManifestList`] /// from a snapshot. -pub struct ManifestListReader<'a> { - snapshot: &'a Snapshot, - file_io: &'a FileIO, - table_metadata: &'a TableMetadata, +pub struct ManifestListReader { + snapshot: SnapshotRef, + file_io: FileIO, + table_metadata: TableMetadataRef, } -impl<'a> ManifestListReader<'a> { +impl ManifestListReader { pub(crate) fn new( - snapshot: &'a Snapshot, - file_io: &'a FileIO, - table_metadata: &'a TableMetadata, + snapshot: SnapshotRef, + file_io: FileIO, + table_metadata: TableMetadataRef, ) -> Self { Self { snapshot, diff --git a/crates/iceberg/src/table.rs b/crates/iceberg/src/table.rs index 47234db33b..3d9682aba9 100644 --- a/crates/iceberg/src/table.rs +++ b/crates/iceberg/src/table.rs @@ -25,7 +25,9 @@ use crate::io::FileIO; use crate::io::object_cache::ObjectCache; use crate::runtime::Runtime; use crate::scan::TableScanBuilder; -use crate::spec::{ManifestListReader, SchemaRef, Snapshot, TableMetadata, TableMetadataRef}; +use crate::spec::{ + ManifestListReader, SchemaRef, SnapshotRef, TableMetadata, TableMetadataRef, +}; use crate::{Error, ErrorKind, Result, TableIdent}; /// Builder to create table scan. @@ -265,8 +267,12 @@ impl Table { } /// Creates a [`ManifestListReader`] for the given snapshot. - pub fn manifest_list_reader<'a>(&'a self, snapshot: &'a Snapshot) -> ManifestListReader<'a> { - ManifestListReader::new(snapshot, &self.file_io, &self.metadata) + pub fn manifest_list_reader(&self, snapshot: &SnapshotRef) -> ManifestListReader { + ManifestListReader::new( + snapshot.clone(), + self.file_io.clone(), + self.metadata.clone(), + ) } /// Create a reader for the table. diff --git a/crates/iceberg/src/transaction/append.rs b/crates/iceberg/src/transaction/append.rs index 49105fd3dd..baeb13b2a0 100644 --- a/crates/iceberg/src/transaction/append.rs +++ b/crates/iceberg/src/transaction/append.rs @@ -507,7 +507,7 @@ mod tests { unreachable!() }; let manifest_list = table - .manifest_list_reader(new_snapshot) + .manifest_list_reader(&SnapshotRef::new(new_snapshot.clone())) .load() .await .unwrap(); From 0c2691f0e36a89f47c61254d3601b98fab2a3859 Mon Sep 17 00:00:00 2001 From: Xander Date: Mon, 1 Jun 2026 09:24:08 +0100 Subject: [PATCH 06/15] update pub api --- crates/iceberg/public-api.txt | 9 ++++----- 1 file changed, 4 insertions(+), 5 deletions(-) diff --git a/crates/iceberg/public-api.txt b/crates/iceberg/public-api.txt index 5c1f7f52e1..3021a83483 100644 --- a/crates/iceberg/public-api.txt +++ b/crates/iceberg/public-api.txt @@ -2025,9 +2025,9 @@ pub fn iceberg::spec::ManifestList::eq(&self, other: &iceberg::spec::ManifestLis impl core::fmt::Debug for iceberg::spec::ManifestList pub fn iceberg::spec::ManifestList::fmt(&self, f: &mut core::fmt::Formatter<'_>) -> core::fmt::Result impl core::marker::StructuralPartialEq for iceberg::spec::ManifestList -pub struct iceberg::spec::ManifestListReader<'a> -impl<'a> iceberg::spec::ManifestListReader<'a> -pub async fn iceberg::spec::ManifestListReader<'a>::load(&self) -> iceberg::Result +pub struct iceberg::spec::ManifestListReader +impl iceberg::spec::ManifestListReader +pub async fn iceberg::spec::ManifestListReader::load(&self) -> iceberg::Result pub struct iceberg::spec::ManifestListWriter impl iceberg::spec::ManifestListWriter pub fn iceberg::spec::ManifestListWriter::add_manifests(&mut self, manifests: impl core::iter::traits::iterator::Iterator) -> iceberg::Result<()> @@ -2343,7 +2343,6 @@ impl iceberg::spec::Snapshot pub fn iceberg::spec::Snapshot::added_rows_count(&self) -> core::option::Option pub fn iceberg::spec::Snapshot::encryption_key_id(&self) -> core::option::Option<&str> pub fn iceberg::spec::Snapshot::first_row_id(&self) -> core::option::Option -pub async fn iceberg::spec::Snapshot::load_manifest_list(&self, file_io: &iceberg::io::FileIO, table_metadata: &iceberg::spec::TableMetadata) -> iceberg::Result pub fn iceberg::spec::Snapshot::manifest_list(&self) -> &str pub fn iceberg::spec::Snapshot::parent_snapshot_id(&self) -> core::option::Option pub fn iceberg::spec::Snapshot::row_range(&self) -> core::option::Option<(u64, u64)> @@ -3017,7 +3016,7 @@ pub fn iceberg::table::Table::current_schema_ref(&self) -> iceberg::spec::Schema pub fn iceberg::table::Table::file_io(&self) -> &iceberg::io::FileIO pub fn iceberg::table::Table::identifier(&self) -> &iceberg::TableIdent pub fn iceberg::table::Table::inspect(&self) -> iceberg::inspect::MetadataTable<'_> -pub fn iceberg::table::Table::manifest_list_reader<'a>(&'a self, snapshot: &'a iceberg::spec::Snapshot) -> iceberg::spec::ManifestListReader<'a> +pub fn iceberg::table::Table::manifest_list_reader(&self, snapshot: &iceberg::spec::SnapshotRef) -> iceberg::spec::ManifestListReader pub fn iceberg::table::Table::metadata(&self) -> &iceberg::spec::TableMetadata pub fn iceberg::table::Table::metadata_location(&self) -> core::option::Option<&str> pub fn iceberg::table::Table::metadata_location_result(&self) -> iceberg::Result<&str> From 0b43a5aa9a3e5bf60303febf001900480ed13906 Mon Sep 17 00:00:00 2001 From: Xander Date: Mon, 1 Jun 2026 09:30:00 +0100 Subject: [PATCH 07/15] fmt --- crates/iceberg/src/table.rs | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/crates/iceberg/src/table.rs b/crates/iceberg/src/table.rs index 3d9682aba9..f4880509b3 100644 --- a/crates/iceberg/src/table.rs +++ b/crates/iceberg/src/table.rs @@ -25,9 +25,7 @@ use crate::io::FileIO; use crate::io::object_cache::ObjectCache; use crate::runtime::Runtime; use crate::scan::TableScanBuilder; -use crate::spec::{ - ManifestListReader, SchemaRef, SnapshotRef, TableMetadata, TableMetadataRef, -}; +use crate::spec::{ManifestListReader, SchemaRef, SnapshotRef, TableMetadata, TableMetadataRef}; use crate::{Error, ErrorKind, Result, TableIdent}; /// Builder to create table scan. From 0fcf81448992581cdcebec71cd94bbdae400d72b Mon Sep 17 00:00:00 2001 From: Xander Date: Mon, 1 Jun 2026 09:33:39 +0100 Subject: [PATCH 08/15] refactor test --- crates/iceberg/src/transaction/append.rs | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/crates/iceberg/src/transaction/append.rs b/crates/iceberg/src/transaction/append.rs index baeb13b2a0..e464770aca 100644 --- a/crates/iceberg/src/transaction/append.rs +++ b/crates/iceberg/src/transaction/append.rs @@ -501,13 +501,13 @@ mod tests { ); // check manifest list - let new_snapshot = if let TableUpdate::AddSnapshot { snapshot } = &updates[0] { - snapshot + let new_snapshot: SnapshotRef = if let TableUpdate::AddSnapshot { snapshot } = &updates[0] { + SnapshotRef::new(snapshot.clone()) } else { unreachable!() }; let manifest_list = table - .manifest_list_reader(&SnapshotRef::new(new_snapshot.clone())) + .manifest_list_reader(&new_snapshot) .load() .await .unwrap(); From 9f007b5fa32ac484b73c8dada4f606eff8770b9a Mon Sep 17 00:00:00 2001 From: Xander Date: Mon, 1 Jun 2026 13:27:39 +0100 Subject: [PATCH 09/15] refactor drop method --- crates/catalog/glue/src/catalog.rs | 7 +------ crates/catalog/hms/src/catalog.rs | 7 +------ crates/catalog/sql/src/catalog.rs | 7 +------ crates/iceberg/src/catalog/memory/catalog.rs | 7 +------ crates/iceberg/src/catalog/utils.rs | 18 ++++++------------ crates/iceberg/src/spec/manifest_list.rs | 2 +- crates/iceberg/src/table.rs | 2 +- 7 files changed, 12 insertions(+), 38 deletions(-) diff --git a/crates/catalog/glue/src/catalog.rs b/crates/catalog/glue/src/catalog.rs index c51f6a6a89..e2c70ef587 100644 --- a/crates/catalog/glue/src/catalog.rs +++ b/crates/catalog/glue/src/catalog.rs @@ -677,12 +677,7 @@ impl Catalog for GlueCatalog { async fn purge_table(&self, table: &TableIdent) -> Result<()> { let table_info = self.load_table(table).await?; self.drop_table(table).await?; - iceberg::drop_table_data( - table_info.file_io(), - table_info.metadata(), - table_info.metadata_location(), - ) - .await + iceberg::drop_table_data(table_info).await } /// Asynchronously checks the existence of a specified table diff --git a/crates/catalog/hms/src/catalog.rs b/crates/catalog/hms/src/catalog.rs index d778a3d5fc..74ce69347e 100644 --- a/crates/catalog/hms/src/catalog.rs +++ b/crates/catalog/hms/src/catalog.rs @@ -624,12 +624,7 @@ impl Catalog for HmsCatalog { async fn purge_table(&self, table: &TableIdent) -> Result<()> { let table_info = self.load_table(table).await?; self.drop_table(table).await?; - iceberg::drop_table_data( - table_info.file_io(), - table_info.metadata(), - table_info.metadata_location(), - ) - .await + iceberg::drop_table_data(table_info).await } /// Asynchronously checks the existence of a specified table diff --git a/crates/catalog/sql/src/catalog.rs b/crates/catalog/sql/src/catalog.rs index c7bf9d0cfd..5ca4ec59e7 100644 --- a/crates/catalog/sql/src/catalog.rs +++ b/crates/catalog/sql/src/catalog.rs @@ -774,12 +774,7 @@ impl Catalog for SqlCatalog { async fn purge_table(&self, table: &TableIdent) -> Result<()> { let table_info = self.load_table(table).await?; self.drop_table(table).await?; - iceberg::drop_table_data( - table_info.file_io(), - table_info.metadata(), - table_info.metadata_location(), - ) - .await + iceberg::drop_table_data(table_info).await } async fn load_table(&self, identifier: &TableIdent) -> Result { diff --git a/crates/iceberg/src/catalog/memory/catalog.rs b/crates/iceberg/src/catalog/memory/catalog.rs index 3ae01a23df..fde1c13d51 100644 --- a/crates/iceberg/src/catalog/memory/catalog.rs +++ b/crates/iceberg/src/catalog/memory/catalog.rs @@ -343,12 +343,7 @@ impl Catalog for MemoryCatalog { async fn purge_table(&self, table_ident: &TableIdent) -> Result<()> { let table_info = self.load_table(table_ident).await?; self.drop_table(table_ident).await?; - crate::catalog::utils::drop_table_data( - table_info.file_io(), - table_info.metadata(), - table_info.metadata_location(), - ) - .await + crate::catalog::utils::drop_table_data(table_info).await } /// Check if a table exists in the catalog. diff --git a/crates/iceberg/src/catalog/utils.rs b/crates/iceberg/src/catalog/utils.rs index b803280136..44f0763c05 100644 --- a/crates/iceberg/src/catalog/utils.rs +++ b/crates/iceberg/src/catalog/utils.rs @@ -23,7 +23,7 @@ use futures::{TryStreamExt, stream}; use crate::Result; use crate::io::FileIO; -use crate::spec::{ManifestListReader, TableMetadata, TableMetadataRef}; +use crate::table::Table; const DELETE_CONCURRENCY: usize = 10; @@ -36,22 +36,16 @@ const DELETE_CONCURRENCY: usize = 10; /// Data files within manifests are only deleted if the `gc.enabled` table /// property is `true` (the default), to avoid corrupting other tables that /// may share the same data files. -pub async fn drop_table_data( - io: &FileIO, - metadata: &TableMetadata, - metadata_location: Option<&str>, -) -> Result<()> { +pub async fn drop_table_data(table_info: Table) -> Result<()> { let mut manifest_lists_to_delete: HashSet = HashSet::new(); let mut manifests_to_delete: HashSet = HashSet::new(); - let metadata_ref = TableMetadataRef::new(metadata.clone()); + let metadata = table_info.metadata_ref(); + let io = table_info.file_io(); // Load all manifest lists concurrently let results: Vec<_> = futures::future::try_join_all(metadata.snapshots().map(|snapshot| async { - let manifest_list = - ManifestListReader::new(snapshot.clone(), io.clone(), metadata_ref.clone()) - .load() - .await?; + let manifest_list = table_info.manifest_list_reader(snapshot).load().await?; Ok::<_, crate::Error>((snapshot.manifest_list().to_string(), manifest_list)) })) .await?; @@ -101,7 +95,7 @@ pub async fn drop_table_data( .await?; // Delete the current metadata file - if let Some(location) = metadata_location { + if let Some(location) = table_info.metadata_location() { io.delete(location).await?; } diff --git a/crates/iceberg/src/spec/manifest_list.rs b/crates/iceberg/src/spec/manifest_list.rs index 5f5fa3c148..025fc4e535 100644 --- a/crates/iceberg/src/spec/manifest_list.rs +++ b/crates/iceberg/src/spec/manifest_list.rs @@ -92,7 +92,7 @@ impl ManifestList { /// A manifest list reader that encapsulates the logic for loading and parsing a [`ManifestList`] /// from a snapshot. -pub struct ManifestListReader { +pub(crate) struct ManifestListReader { snapshot: SnapshotRef, file_io: FileIO, table_metadata: TableMetadataRef, diff --git a/crates/iceberg/src/table.rs b/crates/iceberg/src/table.rs index f4880509b3..545e0ffb8a 100644 --- a/crates/iceberg/src/table.rs +++ b/crates/iceberg/src/table.rs @@ -265,7 +265,7 @@ impl Table { } /// Creates a [`ManifestListReader`] for the given snapshot. - pub fn manifest_list_reader(&self, snapshot: &SnapshotRef) -> ManifestListReader { + pub(crate) fn manifest_list_reader(&self, snapshot: &SnapshotRef) -> ManifestListReader { ManifestListReader::new( snapshot.clone(), self.file_io.clone(), From bf2a76b75615b0b7bbdc7ebc855bf5ed34bfb253 Mon Sep 17 00:00:00 2001 From: Xander Date: Mon, 1 Jun 2026 13:48:16 +0100 Subject: [PATCH 10/15] new lock --- crates/iceberg/public-api.txt | 6 +----- 1 file changed, 1 insertion(+), 5 deletions(-) diff --git a/crates/iceberg/public-api.txt b/crates/iceberg/public-api.txt index 3021a83483..beb8ecbbd0 100644 --- a/crates/iceberg/public-api.txt +++ b/crates/iceberg/public-api.txt @@ -2025,9 +2025,6 @@ pub fn iceberg::spec::ManifestList::eq(&self, other: &iceberg::spec::ManifestLis impl core::fmt::Debug for iceberg::spec::ManifestList pub fn iceberg::spec::ManifestList::fmt(&self, f: &mut core::fmt::Formatter<'_>) -> core::fmt::Result impl core::marker::StructuralPartialEq for iceberg::spec::ManifestList -pub struct iceberg::spec::ManifestListReader -impl iceberg::spec::ManifestListReader -pub async fn iceberg::spec::ManifestListReader::load(&self) -> iceberg::Result pub struct iceberg::spec::ManifestListWriter impl iceberg::spec::ManifestListWriter pub fn iceberg::spec::ManifestListWriter::add_manifests(&mut self, manifests: impl core::iter::traits::iterator::Iterator) -> iceberg::Result<()> @@ -3016,7 +3013,6 @@ pub fn iceberg::table::Table::current_schema_ref(&self) -> iceberg::spec::Schema pub fn iceberg::table::Table::file_io(&self) -> &iceberg::io::FileIO pub fn iceberg::table::Table::identifier(&self) -> &iceberg::TableIdent pub fn iceberg::table::Table::inspect(&self) -> iceberg::inspect::MetadataTable<'_> -pub fn iceberg::table::Table::manifest_list_reader(&self, snapshot: &iceberg::spec::SnapshotRef) -> iceberg::spec::ManifestListReader pub fn iceberg::table::Table::metadata(&self) -> &iceberg::spec::TableMetadata pub fn iceberg::table::Table::metadata_location(&self) -> core::option::Option<&str> pub fn iceberg::table::Table::metadata_location_result(&self) -> iceberg::Result<&str> @@ -3668,5 +3664,5 @@ pub type iceberg::memory::MemoryCatalogBuilder::C = iceberg::memory::MemoryCatal pub fn iceberg::memory::MemoryCatalogBuilder::load(self, name: impl core::convert::Into, props: std::collections::hash::map::HashMap) -> impl core::future::future::Future> + core::marker::Send pub fn iceberg::memory::MemoryCatalogBuilder::with_runtime(self, runtime: iceberg::Runtime) -> Self pub fn iceberg::memory::MemoryCatalogBuilder::with_storage_factory(self, storage_factory: alloc::sync::Arc) -> Self -pub async fn iceberg::drop_table_data(io: &iceberg::io::FileIO, metadata: &iceberg::spec::TableMetadata, metadata_location: core::option::Option<&str>) -> iceberg::Result<()> +pub async fn iceberg::drop_table_data(table_info: iceberg::table::Table) -> iceberg::Result<()> pub type iceberg::Result = core::result::Result From a9af1b9768d9d51e401e99fd43d3d9d581927bb9 Mon Sep 17 00:00:00 2001 From: Xander Date: Mon, 1 Jun 2026 13:55:49 +0100 Subject: [PATCH 11/15] fix private --- crates/iceberg/public-api.txt | 4 ++++ crates/iceberg/src/spec/manifest_list.rs | 2 +- crates/iceberg/src/table.rs | 2 +- 3 files changed, 6 insertions(+), 2 deletions(-) diff --git a/crates/iceberg/public-api.txt b/crates/iceberg/public-api.txt index beb8ecbbd0..51548e0fef 100644 --- a/crates/iceberg/public-api.txt +++ b/crates/iceberg/public-api.txt @@ -2025,6 +2025,9 @@ pub fn iceberg::spec::ManifestList::eq(&self, other: &iceberg::spec::ManifestLis impl core::fmt::Debug for iceberg::spec::ManifestList pub fn iceberg::spec::ManifestList::fmt(&self, f: &mut core::fmt::Formatter<'_>) -> core::fmt::Result impl core::marker::StructuralPartialEq for iceberg::spec::ManifestList +pub struct iceberg::spec::ManifestListReader +impl iceberg::spec::ManifestListReader +pub async fn iceberg::spec::ManifestListReader::load(&self) -> iceberg::Result pub struct iceberg::spec::ManifestListWriter impl iceberg::spec::ManifestListWriter pub fn iceberg::spec::ManifestListWriter::add_manifests(&mut self, manifests: impl core::iter::traits::iterator::Iterator) -> iceberg::Result<()> @@ -3013,6 +3016,7 @@ pub fn iceberg::table::Table::current_schema_ref(&self) -> iceberg::spec::Schema pub fn iceberg::table::Table::file_io(&self) -> &iceberg::io::FileIO pub fn iceberg::table::Table::identifier(&self) -> &iceberg::TableIdent pub fn iceberg::table::Table::inspect(&self) -> iceberg::inspect::MetadataTable<'_> +pub fn iceberg::table::Table::manifest_list_reader(&self, snapshot: &iceberg::spec::SnapshotRef) -> iceberg::spec::ManifestListReader pub fn iceberg::table::Table::metadata(&self) -> &iceberg::spec::TableMetadata pub fn iceberg::table::Table::metadata_location(&self) -> core::option::Option<&str> pub fn iceberg::table::Table::metadata_location_result(&self) -> iceberg::Result<&str> diff --git a/crates/iceberg/src/spec/manifest_list.rs b/crates/iceberg/src/spec/manifest_list.rs index 025fc4e535..5f5fa3c148 100644 --- a/crates/iceberg/src/spec/manifest_list.rs +++ b/crates/iceberg/src/spec/manifest_list.rs @@ -92,7 +92,7 @@ impl ManifestList { /// A manifest list reader that encapsulates the logic for loading and parsing a [`ManifestList`] /// from a snapshot. -pub(crate) struct ManifestListReader { +pub struct ManifestListReader { snapshot: SnapshotRef, file_io: FileIO, table_metadata: TableMetadataRef, diff --git a/crates/iceberg/src/table.rs b/crates/iceberg/src/table.rs index 545e0ffb8a..f4880509b3 100644 --- a/crates/iceberg/src/table.rs +++ b/crates/iceberg/src/table.rs @@ -265,7 +265,7 @@ impl Table { } /// Creates a [`ManifestListReader`] for the given snapshot. - pub(crate) fn manifest_list_reader(&self, snapshot: &SnapshotRef) -> ManifestListReader { + pub fn manifest_list_reader(&self, snapshot: &SnapshotRef) -> ManifestListReader { ManifestListReader::new( snapshot.clone(), self.file_io.clone(), From e7998965b1394f088cca998df9edf65ae4025ed1 Mon Sep 17 00:00:00 2001 From: Xander Date: Tue, 2 Jun 2026 13:00:56 +0100 Subject: [PATCH 12/15] fix confict --- crates/iceberg/src/transaction/append.rs | 12 +++++++----- 1 file changed, 7 insertions(+), 5 deletions(-) diff --git a/crates/iceberg/src/transaction/append.rs b/crates/iceberg/src/transaction/append.rs index e464770aca..2c3037283a 100644 --- a/crates/iceberg/src/transaction/append.rs +++ b/crates/iceberg/src/transaction/append.rs @@ -161,7 +161,8 @@ mod tests { use crate::io::FileIO; use crate::spec::{ DataContentType, DataFileBuilder, DataFileFormat, Literal, MAIN_BRANCH, ManifestEntry, - ManifestListWriter, ManifestStatus, ManifestWriterBuilder, Struct, TableMetadata, + ManifestListReader, ManifestListWriter, ManifestStatus, ManifestWriterBuilder, SnapshotRef, + Struct, TableMetadata, }; use crate::table::Table; use crate::test_utils::test_runtime; @@ -337,14 +338,15 @@ mod tests { let mut action_commit = Arc::new(action).commit(&table).await.unwrap(); let updates = action_commit.take_updates(); - let new_snapshot = if let TableUpdate::AddSnapshot { snapshot } = &updates[0] { - snapshot + let new_snapshot: SnapshotRef = if let TableUpdate::AddSnapshot { snapshot } = &updates[0] { + SnapshotRef::new(snapshot.clone()) } else { unreachable!("first update of a fast append should be AddSnapshot") }; - let manifest_list = new_snapshot - .load_manifest_list(table.file_io(), table.metadata()) + let manifest_list = table + .manifest_list_reader(&new_snapshot) + .load() .await .unwrap(); From 09c1092d548dc37853d65101f1fe767d05c8bb85 Mon Sep 17 00:00:00 2001 From: Xander Date: Tue, 2 Jun 2026 13:09:30 +0100 Subject: [PATCH 13/15] ref --- crates/catalog/glue/src/catalog.rs | 2 +- crates/catalog/hms/src/catalog.rs | 2 +- crates/catalog/sql/src/catalog.rs | 2 +- crates/iceberg/src/catalog/memory/catalog.rs | 2 +- crates/iceberg/src/catalog/utils.rs | 2 +- 5 files changed, 5 insertions(+), 5 deletions(-) diff --git a/crates/catalog/glue/src/catalog.rs b/crates/catalog/glue/src/catalog.rs index e2c70ef587..86a3894255 100644 --- a/crates/catalog/glue/src/catalog.rs +++ b/crates/catalog/glue/src/catalog.rs @@ -677,7 +677,7 @@ impl Catalog for GlueCatalog { async fn purge_table(&self, table: &TableIdent) -> Result<()> { let table_info = self.load_table(table).await?; self.drop_table(table).await?; - iceberg::drop_table_data(table_info).await + iceberg::drop_table_data(&table_info).await } /// Asynchronously checks the existence of a specified table diff --git a/crates/catalog/hms/src/catalog.rs b/crates/catalog/hms/src/catalog.rs index 74ce69347e..0f15890c77 100644 --- a/crates/catalog/hms/src/catalog.rs +++ b/crates/catalog/hms/src/catalog.rs @@ -624,7 +624,7 @@ impl Catalog for HmsCatalog { async fn purge_table(&self, table: &TableIdent) -> Result<()> { let table_info = self.load_table(table).await?; self.drop_table(table).await?; - iceberg::drop_table_data(table_info).await + iceberg::drop_table_data(&table_info).await } /// Asynchronously checks the existence of a specified table diff --git a/crates/catalog/sql/src/catalog.rs b/crates/catalog/sql/src/catalog.rs index 5ca4ec59e7..81d6cde591 100644 --- a/crates/catalog/sql/src/catalog.rs +++ b/crates/catalog/sql/src/catalog.rs @@ -774,7 +774,7 @@ impl Catalog for SqlCatalog { async fn purge_table(&self, table: &TableIdent) -> Result<()> { let table_info = self.load_table(table).await?; self.drop_table(table).await?; - iceberg::drop_table_data(table_info).await + iceberg::drop_table_data(&table_info).await } async fn load_table(&self, identifier: &TableIdent) -> Result
{ diff --git a/crates/iceberg/src/catalog/memory/catalog.rs b/crates/iceberg/src/catalog/memory/catalog.rs index fde1c13d51..67f8ab8dd1 100644 --- a/crates/iceberg/src/catalog/memory/catalog.rs +++ b/crates/iceberg/src/catalog/memory/catalog.rs @@ -343,7 +343,7 @@ impl Catalog for MemoryCatalog { async fn purge_table(&self, table_ident: &TableIdent) -> Result<()> { let table_info = self.load_table(table_ident).await?; self.drop_table(table_ident).await?; - crate::catalog::utils::drop_table_data(table_info).await + crate::catalog::utils::drop_table_data(&table_info).await } /// Check if a table exists in the catalog. diff --git a/crates/iceberg/src/catalog/utils.rs b/crates/iceberg/src/catalog/utils.rs index 44f0763c05..853fc8d09a 100644 --- a/crates/iceberg/src/catalog/utils.rs +++ b/crates/iceberg/src/catalog/utils.rs @@ -36,7 +36,7 @@ const DELETE_CONCURRENCY: usize = 10; /// Data files within manifests are only deleted if the `gc.enabled` table /// property is `true` (the default), to avoid corrupting other tables that /// may share the same data files. -pub async fn drop_table_data(table_info: Table) -> Result<()> { +pub async fn drop_table_data(table_info: &Table) -> Result<()> { let mut manifest_lists_to_delete: HashSet = HashSet::new(); let mut manifests_to_delete: HashSet = HashSet::new(); From 0df26ed732e560c94fd370b08a7e6189b4b09cd0 Mon Sep 17 00:00:00 2001 From: Xander Date: Tue, 2 Jun 2026 13:10:22 +0100 Subject: [PATCH 14/15] pub api --- crates/iceberg/public-api.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/crates/iceberg/public-api.txt b/crates/iceberg/public-api.txt index 51548e0fef..0008ab8c74 100644 --- a/crates/iceberg/public-api.txt +++ b/crates/iceberg/public-api.txt @@ -3668,5 +3668,5 @@ pub type iceberg::memory::MemoryCatalogBuilder::C = iceberg::memory::MemoryCatal pub fn iceberg::memory::MemoryCatalogBuilder::load(self, name: impl core::convert::Into, props: std::collections::hash::map::HashMap) -> impl core::future::future::Future> + core::marker::Send pub fn iceberg::memory::MemoryCatalogBuilder::with_runtime(self, runtime: iceberg::Runtime) -> Self pub fn iceberg::memory::MemoryCatalogBuilder::with_storage_factory(self, storage_factory: alloc::sync::Arc) -> Self -pub async fn iceberg::drop_table_data(table_info: iceberg::table::Table) -> iceberg::Result<()> +pub async fn iceberg::drop_table_data(table_info: &iceberg::table::Table) -> iceberg::Result<()> pub type iceberg::Result = core::result::Result From d85c3d151f5af85dd18c59d5d5e1d08fb8b4b7e8 Mon Sep 17 00:00:00 2001 From: Xander Date: Tue, 2 Jun 2026 13:40:20 +0100 Subject: [PATCH 15/15] formatting --- crates/iceberg/src/transaction/append.rs | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/crates/iceberg/src/transaction/append.rs b/crates/iceberg/src/transaction/append.rs index 2c3037283a..2c2df1f644 100644 --- a/crates/iceberg/src/transaction/append.rs +++ b/crates/iceberg/src/transaction/append.rs @@ -161,8 +161,8 @@ mod tests { use crate::io::FileIO; use crate::spec::{ DataContentType, DataFileBuilder, DataFileFormat, Literal, MAIN_BRANCH, ManifestEntry, - ManifestListReader, ManifestListWriter, ManifestStatus, ManifestWriterBuilder, SnapshotRef, - Struct, TableMetadata, + ManifestListWriter, ManifestStatus, ManifestWriterBuilder, SnapshotRef, Struct, + TableMetadata, }; use crate::table::Table; use crate::test_utils::test_runtime;