@@ -53,6 +53,7 @@ pub struct EqualityDeleteWriterConfig {
5353 // Projector used to project the data chunk into specific fields.
5454 projector : RecordBatchProjector ,
5555 partition_value : Struct ,
56+ partition_spec_id : i32 ,
5657}
5758
5859impl EqualityDeleteWriterConfig {
@@ -61,6 +62,7 @@ impl EqualityDeleteWriterConfig {
6162 equality_ids : Vec < i32 > ,
6263 original_schema : SchemaRef ,
6364 partition_value : Option < Struct > ,
65+ partition_spec_id : Option < i32 > ,
6466 ) -> Result < Self > {
6567 let original_arrow_schema = Arc :: new ( schema_to_arrow_schema ( & original_schema) ?) ;
6668 let projector = RecordBatchProjector :: new (
@@ -97,6 +99,7 @@ impl EqualityDeleteWriterConfig {
9799 equality_ids,
98100 projector,
99101 partition_value : partition_value. unwrap_or ( Struct :: empty ( ) ) ,
102+ partition_spec_id : partition_spec_id. unwrap_or ( 0 ) ,
100103 } )
101104 }
102105
@@ -116,6 +119,7 @@ impl<B: FileWriterBuilder> IcebergWriterBuilder for EqualityDeleteFileWriterBuil
116119 projector : self . config . projector ,
117120 equality_ids : self . config . equality_ids ,
118121 partition_value : self . config . partition_value ,
122+ partition_spec_id : self . config . partition_spec_id ,
119123 } )
120124 }
121125}
@@ -127,6 +131,7 @@ pub struct EqualityDeleteFileWriter<B: FileWriterBuilder> {
127131 projector : RecordBatchProjector ,
128132 equality_ids : Vec < i32 > ,
129133 partition_value : Struct ,
134+ partition_spec_id : i32 ,
130135}
131136
132137#[ async_trait:: async_trait]
@@ -153,6 +158,7 @@ impl<B: FileWriterBuilder> IcebergWriter for EqualityDeleteFileWriter<B> {
153158 res. content ( crate :: spec:: DataContentType :: EqualityDeletes ) ;
154159 res. equality_ids ( self . equality_ids . iter ( ) . copied ( ) . collect_vec ( ) ) ;
155160 res. partition ( self . partition_value . clone ( ) ) ;
161+ res. partition_spec_id ( self . partition_spec_id ) ;
156162 res. build ( ) . expect ( "msg" )
157163 } )
158164 . collect_vec ( ) )
@@ -387,7 +393,7 @@ mod test {
387393
388394 let equality_ids = vec ! [ 0_i32 , 8 ] ;
389395 let equality_config =
390- EqualityDeleteWriterConfig :: new ( equality_ids, Arc :: new ( schema) , None ) . unwrap ( ) ;
396+ EqualityDeleteWriterConfig :: new ( equality_ids, Arc :: new ( schema) , None , None ) . unwrap ( ) ;
391397 let delete_schema =
392398 arrow_schema_to_schema ( equality_config. projected_arrow_schema_ref ( ) ) . unwrap ( ) ;
393399 let projector = equality_config. projector . clone ( ) ;
@@ -484,19 +490,19 @@ mod test {
484490 . unwrap ( ) ,
485491 ) ;
486492 // Float and Double are not allowed to be used for equality delete
487- assert ! ( EqualityDeleteWriterConfig :: new( vec![ 0 ] , schema. clone( ) , None ) . is_err( ) ) ;
488- assert ! ( EqualityDeleteWriterConfig :: new( vec![ 1 ] , schema. clone( ) , None ) . is_err( ) ) ;
493+ assert ! ( EqualityDeleteWriterConfig :: new( vec![ 0 ] , schema. clone( ) , None , None ) . is_err( ) ) ;
494+ assert ! ( EqualityDeleteWriterConfig :: new( vec![ 1 ] , schema. clone( ) , None , None ) . is_err( ) ) ;
489495 // Struct is not allowed to be used for equality delete
490- assert ! ( EqualityDeleteWriterConfig :: new( vec![ 3 ] , schema. clone( ) , None ) . is_err( ) ) ;
496+ assert ! ( EqualityDeleteWriterConfig :: new( vec![ 3 ] , schema. clone( ) , None , None ) . is_err( ) ) ;
491497 // Nested field of struct is allowed to be used for equality delete
492- assert ! ( EqualityDeleteWriterConfig :: new( vec![ 4 ] , schema. clone( ) , None ) . is_ok( ) ) ;
498+ assert ! ( EqualityDeleteWriterConfig :: new( vec![ 4 ] , schema. clone( ) , None , None ) . is_ok( ) ) ;
493499 // Nested field of map is not allowed to be used for equality delete
494- assert ! ( EqualityDeleteWriterConfig :: new( vec![ 7 ] , schema. clone( ) , None ) . is_err( ) ) ;
495- assert ! ( EqualityDeleteWriterConfig :: new( vec![ 8 ] , schema. clone( ) , None ) . is_err( ) ) ;
496- assert ! ( EqualityDeleteWriterConfig :: new( vec![ 9 ] , schema. clone( ) , None ) . is_err( ) ) ;
500+ assert ! ( EqualityDeleteWriterConfig :: new( vec![ 7 ] , schema. clone( ) , None , None ) . is_err( ) ) ;
501+ assert ! ( EqualityDeleteWriterConfig :: new( vec![ 8 ] , schema. clone( ) , None , None ) . is_err( ) ) ;
502+ assert ! ( EqualityDeleteWriterConfig :: new( vec![ 9 ] , schema. clone( ) , None , None ) . is_err( ) ) ;
497503 // Nested field of list is not allowed to be used for equality delete
498- assert ! ( EqualityDeleteWriterConfig :: new( vec![ 10 ] , schema. clone( ) , None ) . is_err( ) ) ;
499- assert ! ( EqualityDeleteWriterConfig :: new( vec![ 11 ] , schema. clone( ) , None ) . is_err( ) ) ;
504+ assert ! ( EqualityDeleteWriterConfig :: new( vec![ 10 ] , schema. clone( ) , None , None ) . is_err( ) ) ;
505+ assert ! ( EqualityDeleteWriterConfig :: new( vec![ 11 ] , schema. clone( ) , None , None ) . is_err( ) ) ;
500506
501507 Ok ( ( ) )
502508 }
@@ -549,7 +555,8 @@ mod test {
549555 . unwrap ( ) ,
550556 ) ;
551557 let equality_ids = vec ! [ 0 , 1 , 2 , 3 , 4 , 5 , 6 , 7 , 8 , 9 , 10 , 11 , 12 , 13 ] ;
552- let config = EqualityDeleteWriterConfig :: new ( equality_ids, schema. clone ( ) , None ) . unwrap ( ) ;
558+ let config =
559+ EqualityDeleteWriterConfig :: new ( equality_ids, schema. clone ( ) , None , None ) . unwrap ( ) ;
553560 let delete_arrow_schema = config. projected_arrow_schema_ref ( ) . clone ( ) ;
554561 let delete_schema = arrow_schema_to_schema ( & delete_arrow_schema) . unwrap ( ) ;
555562
@@ -740,7 +747,7 @@ mod test {
740747 let to_write = RecordBatch :: try_new ( arrow_schema. clone ( ) , columns) . unwrap ( ) ;
741748 let equality_ids = vec ! [ 0_i32 , 2 , 5 ] ;
742749 let equality_config =
743- EqualityDeleteWriterConfig :: new ( equality_ids, Arc :: new ( schema) , None ) . unwrap ( ) ;
750+ EqualityDeleteWriterConfig :: new ( equality_ids, Arc :: new ( schema) , None , None ) . unwrap ( ) ;
744751 let projector = equality_config. projector . clone ( ) ;
745752
746753 // check
0 commit comments