@@ -35,16 +35,18 @@ use crate::{Error, ErrorKind, Result};
3535#[ derive( Clone ) ]
3636pub struct EqualityDeleteFileWriterBuilder < B : FileWriterBuilder > {
3737 inner : B ,
38+ config : EqualityDeleteWriterConfig ,
3839}
3940
4041impl < 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 ) ]
4850pub 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]
109111impl < 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}
@@ -386,20 +387,19 @@ mod test {
386387 EqualityDeleteWriterConfig :: new ( equality_ids, Arc :: new ( schema) , None ) . unwrap ( ) ;
387388 let delete_schema =
388389 arrow_schema_to_schema ( equality_config. projected_arrow_schema_ref ( ) ) . unwrap ( ) ;
389- let projector = equality_config. projector . clone ( ) ;
390390
391391 // prepare writer
392392 let pb = ParquetWriterBuilder :: new (
393393 WriterProperties :: builder ( ) . build ( ) ,
394- Arc :: new ( delete_schema) ,
395394 file_io. clone ( ) ,
396395 location_gen,
397396 file_name_gen,
397+ Arc :: new ( delete_schema) ,
398398 ) ;
399-
400- let mut equality_delete_writer = EqualityDeleteFileWriterBuilder :: new ( pb)
401- . build ( equality_config)
399+ let mut equality_delete_writer = EqualityDeleteFileWriterBuilder :: new ( pb, equality_config)
400+ . build ( )
402401 . await ?;
402+ let projector = equality_delete_writer. projector . clone ( ) ;
403403
404404 // write
405405 equality_delete_writer. write ( to_write. clone ( ) ) . await ?;
@@ -556,13 +556,13 @@ mod test {
556556
557557 let pb = ParquetWriterBuilder :: new (
558558 WriterProperties :: builder ( ) . build ( ) ,
559- Arc :: new ( delete_schema) ,
560559 file_io. clone ( ) ,
561560 location_gen,
562561 file_name_gen,
562+ Arc :: new ( delete_schema) ,
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
@@ -640,10 +640,12 @@ mod test {
640640 Some ( b"" ) ,
641641 Some ( b"zzzz" ) ,
642642 ] ) ) as ArrayRef ;
643- let to_write = RecordBatch :: try_new ( delete_arrow_schema. clone ( ) , vec ! [
644- col0, col1, col2, col3, col4, col5, col6, col7, col8, col9, col10, col11, col12, col13,
645- ] )
646- . unwrap ( ) ;
643+ let to_write =
644+ RecordBatch :: try_new ( Arc :: new ( schema_to_arrow_schema ( & schema) . unwrap ( ) ) , vec ! [
645+ col0, col1, col2, col3, col4, col5, col6, col7, col8, col9, col10, col11, col12,
646+ col13,
647+ ] )
648+ . unwrap ( ) ;
647649 equality_delete_writer. write ( to_write. clone ( ) ) . await ?;
648650 let res = equality_delete_writer. close ( ) . await ?;
649651 assert_eq ! ( res. len( ) , 1 ) ;
0 commit comments