@@ -445,8 +445,46 @@ impl TableUpdate {
445
445
/// Applies the update to the table metadata builder.
446
446
pub fn apply ( self , builder : TableMetadataBuilder ) -> Result < TableMetadataBuilder > {
447
447
match self {
448
- TableUpdate :: AssignUuid { uuid } => builder. assign_uuid ( uuid) ,
449
- _ => unimplemented ! ( ) ,
448
+ TableUpdate :: AssignUuid { uuid } => Ok ( builder. assign_uuid ( uuid) ) ,
449
+ TableUpdate :: AddSchema {
450
+ schema,
451
+ last_column_id,
452
+ } => {
453
+ if let Some ( last_column_id) = last_column_id {
454
+ if builder. last_column_id ( ) < last_column_id {
455
+ return Err ( Error :: new (
456
+ ErrorKind :: DataInvalid ,
457
+ format ! (
458
+ "Invalid last column ID: {last_column_id} < {} (previous last column ID)" ,
459
+ builder. last_column_id( )
460
+ ) ,
461
+ ) ) ;
462
+ }
463
+ } ;
464
+ Ok ( builder. add_schema ( schema) )
465
+ }
466
+ TableUpdate :: SetCurrentSchema { schema_id } => builder. set_current_schema ( schema_id) ,
467
+ TableUpdate :: AddSpec { spec } => builder. add_partition_spec ( spec) ,
468
+ TableUpdate :: SetDefaultSpec { spec_id } => builder. set_default_partition_spec ( spec_id) ,
469
+ TableUpdate :: AddSortOrder { sort_order } => builder. add_sort_order ( sort_order) ,
470
+ TableUpdate :: SetDefaultSortOrder { sort_order_id } => {
471
+ builder. set_default_sort_order ( sort_order_id)
472
+ }
473
+ TableUpdate :: AddSnapshot { snapshot } => builder. add_snapshot ( snapshot) ,
474
+ TableUpdate :: SetSnapshotRef {
475
+ ref_name,
476
+ reference,
477
+ } => builder. set_ref ( & ref_name, reference) ,
478
+ TableUpdate :: RemoveSnapshots { snapshot_ids } => {
479
+ Ok ( builder. remove_snapshots ( & snapshot_ids) )
480
+ }
481
+ TableUpdate :: RemoveSnapshotRef { ref_name } => Ok ( builder. remove_ref ( & ref_name) ) ,
482
+ TableUpdate :: SetLocation { location } => Ok ( builder. set_location ( location) ) ,
483
+ TableUpdate :: SetProperties { updates } => builder. set_properties ( updates) ,
484
+ TableUpdate :: RemoveProperties { removals } => Ok ( builder. remove_properties ( & removals) ) ,
485
+ TableUpdate :: UpgradeFormatVersion { format_version } => {
486
+ builder. upgrade_format_version ( format_version)
487
+ }
450
488
}
451
489
}
452
490
}
@@ -1183,16 +1221,21 @@ mod tests {
1183
1221
let table_metadata = TableMetadataBuilder :: from_table_creation ( table_creation)
1184
1222
. unwrap ( )
1185
1223
. build ( )
1186
- . unwrap ( ) ;
1187
- let table_metadata_builder = TableMetadataBuilder :: new ( table_metadata) ;
1224
+ . unwrap ( )
1225
+ . metadata ;
1226
+ let table_metadata_builder = TableMetadataBuilder :: new_from_metadata (
1227
+ table_metadata,
1228
+ "s3://db/table/metadata/metadata1.gz.json" ,
1229
+ ) ;
1188
1230
1189
1231
let uuid = uuid:: Uuid :: new_v4 ( ) ;
1190
1232
let update = TableUpdate :: AssignUuid { uuid } ;
1191
1233
let updated_metadata = update
1192
1234
. apply ( table_metadata_builder)
1193
1235
. unwrap ( )
1194
1236
. build ( )
1195
- . unwrap ( ) ;
1237
+ . unwrap ( )
1238
+ . metadata ;
1196
1239
assert_eq ! ( updated_metadata. uuid( ) , uuid) ;
1197
1240
}
1198
1241
}
0 commit comments