Skip to content

Commit d0a2897

Browse files
committed
remove config param in writer builder
1 parent 4fba3f4 commit d0a2897

File tree

5 files changed

+27
-50
lines changed

5 files changed

+27
-50
lines changed

crates/iceberg/src/writer/base_writer/data_file_writer.rs

Lines changed: 8 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -29,38 +29,27 @@ use crate::Result;
2929
#[derive(Clone)]
3030
pub struct DataFileWriterBuilder<B: FileWriterBuilder> {
3131
inner: B,
32+
partition_value: Option<Struct>,
3233
}
3334

3435
impl<B: FileWriterBuilder> DataFileWriterBuilder<B> {
3536
/// Create a new `DataFileWriterBuilder` using a `FileWriterBuilder`.
36-
pub fn new(inner: B) -> Self {
37-
Self { inner }
38-
}
39-
}
40-
41-
/// Config for `DataFileWriter`.
42-
pub struct DataFileWriterConfig {
43-
partition_value: Struct,
44-
}
45-
46-
impl DataFileWriterConfig {
47-
/// Create a new `DataFileWriterConfig` with partition value.
48-
pub fn new(partition_value: Option<Struct>) -> Self {
37+
pub fn new(inner: B, partition_value: Option<Struct>) -> Self {
4938
Self {
50-
partition_value: partition_value.unwrap_or(Struct::empty()),
39+
inner,
40+
partition_value,
5141
}
5242
}
5343
}
5444

5545
#[async_trait::async_trait]
5646
impl<B: FileWriterBuilder> IcebergWriterBuilder for DataFileWriterBuilder<B> {
5747
type R = DataFileWriter<B>;
58-
type C = DataFileWriterConfig;
5948

60-
async fn build(self, config: Self::C) -> Result<Self::R> {
49+
async fn build(self) -> Result<Self::R> {
6150
Ok(DataFileWriter {
6251
inner_writer: Some(self.inner.clone().build().await?),
63-
partition_value: config.partition_value,
52+
partition_value: self.partition_value.unwrap_or(Struct::empty()),
6453
})
6554
}
6655
}
@@ -115,9 +104,7 @@ mod test {
115104

116105
use crate::io::FileIOBuilder;
117106
use crate::spec::{DataContentType, DataFileFormat, Schema, Struct};
118-
use crate::writer::base_writer::data_file_writer::{
119-
DataFileWriterBuilder, DataFileWriterConfig,
120-
};
107+
use crate::writer::base_writer::data_file_writer::DataFileWriterBuilder;
121108
use crate::writer::file_writer::location_generator::test::MockLocationGenerator;
122109
use crate::writer::file_writer::location_generator::DefaultFileNameGenerator;
123110
use crate::writer::file_writer::ParquetWriterBuilder;
@@ -140,9 +127,7 @@ mod test {
140127
location_gen,
141128
file_name_gen,
142129
);
143-
let mut data_file_writer = DataFileWriterBuilder::new(pw)
144-
.build(DataFileWriterConfig::new(None))
145-
.await?;
130+
let mut data_file_writer = DataFileWriterBuilder::new(pw, None).build().await?;
146131

147132
let data_file = data_file_writer.close().await.unwrap();
148133
assert_eq!(data_file.len(), 1);

crates/iceberg/src/writer/base_writer/equality_delete_writer.rs

Lines changed: 12 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -35,16 +35,18 @@ use crate::{Error, ErrorKind, Result};
3535
#[derive(Clone)]
3636
pub struct EqualityDeleteFileWriterBuilder<B: FileWriterBuilder> {
3737
inner: B,
38+
config: EqualityDeleteWriterConfig,
3839
}
3940

4041
impl<B: FileWriterBuilder> EqualityDeleteFileWriterBuilder<B> {
4142
/// Create a new `EqualityDeleteFileWriterBuilder` using a `FileWriterBuilder`.
42-
pub fn new(inner: B) -> Self {
43-
Self { inner }
43+
pub fn new(inner: B, config: EqualityDeleteWriterConfig) -> Self {
44+
Self { inner, config }
4445
}
4546
}
4647

4748
/// Config for `EqualityDeleteWriter`.
49+
#[derive(Clone)]
4850
pub struct EqualityDeleteWriterConfig {
4951
// Field ids used to determine row equality in equality delete files.
5052
equality_ids: Vec<i32>,
@@ -108,14 +110,13 @@ impl EqualityDeleteWriterConfig {
108110
#[async_trait::async_trait]
109111
impl<B: FileWriterBuilder> IcebergWriterBuilder for EqualityDeleteFileWriterBuilder<B> {
110112
type R = EqualityDeleteFileWriter<B>;
111-
type C = EqualityDeleteWriterConfig;
112113

113-
async fn build(self, config: Self::C) -> Result<Self::R> {
114+
async fn build(self) -> Result<Self::R> {
114115
Ok(EqualityDeleteFileWriter {
115116
inner_writer: Some(self.inner.clone().build().await?),
116-
projector: config.projector,
117-
equality_ids: config.equality_ids,
118-
partition_value: config.partition_value,
117+
projector: self.config.projector,
118+
equality_ids: self.config.equality_ids,
119+
partition_value: self.config.partition_value,
119120
})
120121
}
121122
}
@@ -396,9 +397,8 @@ mod test {
396397
location_gen,
397398
file_name_gen,
398399
);
399-
400-
let mut equality_delete_writer = EqualityDeleteFileWriterBuilder::new(pb)
401-
.build(equality_config)
400+
let mut equality_delete_writer = EqualityDeleteFileWriterBuilder::new(pb, equality_config)
401+
.build()
402402
.await?;
403403

404404
// write
@@ -561,8 +561,8 @@ mod test {
561561
location_gen,
562562
file_name_gen,
563563
);
564-
let mut equality_delete_writer = EqualityDeleteFileWriterBuilder::new(pb)
565-
.build(config)
564+
let mut equality_delete_writer = EqualityDeleteFileWriterBuilder::new(pb, config)
565+
.build()
566566
.await?;
567567

568568
// prepare data

crates/iceberg/src/writer/mod.rs

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -63,10 +63,8 @@ pub trait IcebergWriterBuilder<I = DefaultInput, O = DefaultOutput>:
6363
{
6464
/// The associated writer type.
6565
type R: IcebergWriter<I, O>;
66-
/// The associated writer config type used to build the writer.
67-
type C;
6866
/// Build the iceberg writer.
69-
async fn build(self, config: Self::C) -> Result<Self::R>;
67+
async fn build(self) -> Result<Self::R>;
7068
}
7169

7270
/// The iceberg writer used to write data to iceberg table.

crates/integration_tests/tests/append_data_file_test.rs

Lines changed: 3 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,7 @@ use arrow_array::{ArrayRef, BooleanArray, Int32Array, RecordBatch, StringArray};
2424
use futures::TryStreamExt;
2525
use iceberg::spec::{NestedField, PrimitiveType, Schema, Type};
2626
use iceberg::transaction::Transaction;
27-
use iceberg::writer::base_writer::data_file_writer::{DataFileWriterBuilder, DataFileWriterConfig};
27+
use iceberg::writer::base_writer::data_file_writer::DataFileWriterBuilder;
2828
use iceberg::writer::file_writer::location_generator::{
2929
DefaultFileNameGenerator, DefaultLocationGenerator,
3030
};
@@ -97,11 +97,8 @@ async fn test_append_data_file() {
9797
location_generator.clone(),
9898
file_name_generator.clone(),
9999
);
100-
let data_file_writer_builder = DataFileWriterBuilder::new(parquet_writer_builder);
101-
let mut data_file_writer = data_file_writer_builder
102-
.build(DataFileWriterConfig::new(None))
103-
.await
104-
.unwrap();
100+
let data_file_writer_builder = DataFileWriterBuilder::new(parquet_writer_builder, None);
101+
let mut data_file_writer = data_file_writer_builder.build().await.unwrap();
105102
let col1 = StringArray::from(vec![Some("foo"), Some("bar"), None, Some("baz")]);
106103
let col2 = Int32Array::from(vec![Some(1), Some(2), Some(3), Some(4)]);
107104
let col3 = BooleanArray::from(vec![Some(true), Some(false), None, Some(false)]);

crates/integration_tests/tests/conflict_commit_test.rs

Lines changed: 3 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,7 @@ use arrow_array::{ArrayRef, BooleanArray, Int32Array, RecordBatch, StringArray};
2424
use futures::TryStreamExt;
2525
use iceberg::spec::{NestedField, PrimitiveType, Schema, Type};
2626
use iceberg::transaction::Transaction;
27-
use iceberg::writer::base_writer::data_file_writer::{DataFileWriterBuilder, DataFileWriterConfig};
27+
use iceberg::writer::base_writer::data_file_writer::DataFileWriterBuilder;
2828
use iceberg::writer::file_writer::location_generator::{
2929
DefaultFileNameGenerator, DefaultLocationGenerator,
3030
};
@@ -96,11 +96,8 @@ async fn test_append_data_file_conflict() {
9696
location_generator.clone(),
9797
file_name_generator.clone(),
9898
);
99-
let data_file_writer_builder = DataFileWriterBuilder::new(parquet_writer_builder);
100-
let mut data_file_writer = data_file_writer_builder
101-
.build(DataFileWriterConfig::new(None))
102-
.await
103-
.unwrap();
99+
let data_file_writer_builder = DataFileWriterBuilder::new(parquet_writer_builder, None);
100+
let mut data_file_writer = data_file_writer_builder.build().await.unwrap();
104101
let col1 = StringArray::from(vec![Some("foo"), Some("bar"), None, Some("baz")]);
105102
let col2 = Int32Array::from(vec![Some(1), Some(2), Some(3), Some(4)]);
106103
let col3 = BooleanArray::from(vec![Some(true), Some(false), None, Some(false)]);

0 commit comments

Comments
 (0)