@@ -48,6 +48,8 @@ pub struct AddColumn {
4848 #[ builder( default = false ) ]
4949 required : bool ,
5050 field_type : Type ,
51+ #[ builder( default = None ) ]
52+ id : Option < i32 > ,
5153 #[ builder( default = None , setter( strip_option, into) ) ]
5254 doc : Option < String > ,
5355 #[ builder( default = None , setter( strip_option) ) ]
@@ -91,7 +93,7 @@ impl AddColumn {
9193
9294 fn to_nested_field ( & self ) -> NestedFieldRef {
9395 let mut field = NestedField :: new (
94- DEFAULT_ID ,
96+ self . id . unwrap_or ( DEFAULT_ID ) ,
9597 self . name . clone ( ) ,
9698 self . field_type . clone ( ) ,
9799 self . required ,
@@ -457,7 +459,7 @@ impl TransactionAction for UpdateSchemaAction {
457459 } ;
458460
459461 // Assign fresh IDs immediately, preserving insertion order.
460- let field = if self . auto_assign_ids {
462+ let field = if self . auto_assign_ids && pending_field . id == DEFAULT_ID {
461463 assign_fresh_ids ( & pending_field, & mut last_column_id)
462464 } else {
463465 pending_field
@@ -503,6 +505,7 @@ mod tests {
503505
504506 use as_any:: Downcast ;
505507
508+ use crate :: io:: FileIOBuilder ;
506509 use crate :: spec:: { Literal , NestedField , PrimitiveType , StructType , TableMetadata , Type } ;
507510 use crate :: table:: Table ;
508511 use crate :: transaction:: Transaction ;
@@ -608,7 +611,7 @@ mod tests {
608611 . metadata ( metadata)
609612 . metadata_location ( "s3://bucket/test/location/metadata/v1.json" . to_string ( ) )
610613 . identifier ( TableIdent :: from_strs ( [ "ns1" , "test1" ] ) . unwrap ( ) )
611- . file_io ( crate :: io :: FileIO :: new_with_memory ( ) )
614+ . file_io ( FileIOBuilder :: new ( "memory" ) . build ( ) . unwrap ( ) )
612615 . build ( )
613616 . unwrap ( )
614617 }
@@ -657,9 +660,12 @@ mod tests {
657660
658661 // Verify requirement.
659662 assert_eq ! ( requirements. len( ) , 1 ) ;
660- assert_eq ! ( requirements[ 0 ] , TableRequirement :: CurrentSchemaIdMatch {
661- current_schema_id: table. metadata( ) . current_schema( ) . schema_id( )
662- } ) ;
663+ assert_eq ! (
664+ requirements[ 0 ] ,
665+ TableRequirement :: CurrentSchemaIdMatch {
666+ current_schema_id: table. metadata( ) . current_schema( ) . schema_id( )
667+ }
668+ ) ;
663669 }
664670
665671 #[ tokio:: test]
0 commit comments