Skip to content

Commit 2782d71

Browse files
authored
Merge pull request JanKaul#241 from JanKaul/fix-set-current-schema
Fix set current schema
2 parents 5cfe002 + bcca79a commit 2782d71

File tree

1 file changed

+47
-6
lines changed

1 file changed

+47
-6
lines changed

iceberg-rust/src/catalog/commit.rs

Lines changed: 47 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -417,6 +417,9 @@ pub fn apply_table_updates(
417417
metadata: &mut TableMetadata,
418418
updates: Vec<TableUpdate>,
419419
) -> Result<(), Error> {
420+
let mut added_schema_id = None;
421+
let mut added_spec_id = None;
422+
let mut added_sort_order_id = None;
420423
for update in updates {
421424
match update {
422425
TableUpdate::UpgradeFormatVersion { format_version } => {
@@ -431,25 +434,63 @@ pub fn apply_table_updates(
431434
schema,
432435
last_column_id,
433436
} => {
434-
metadata.schemas.insert(*schema.schema_id(), schema);
437+
let schema_id = *schema.schema_id();
438+
metadata.schemas.insert(schema_id, schema);
439+
added_schema_id = Some(schema_id);
435440
if let Some(last_column_id) = last_column_id {
436441
metadata.last_column_id = last_column_id;
437442
}
438443
}
439444
TableUpdate::SetCurrentSchema { schema_id } => {
440-
metadata.current_schema_id = schema_id;
445+
if schema_id == -1 {
446+
if let Some(added_schema_id) = added_schema_id {
447+
metadata.current_schema_id = added_schema_id;
448+
} else {
449+
return Err(Error::InvalidFormat(
450+
"Cannot set current schema to -1 without adding a schema first"
451+
.to_string(),
452+
));
453+
}
454+
} else {
455+
metadata.current_schema_id = schema_id;
456+
}
441457
}
442458
TableUpdate::AddSpec { spec } => {
443-
metadata.partition_specs.insert(*spec.spec_id(), spec);
459+
let spec_id = *spec.spec_id();
460+
metadata.partition_specs.insert(spec_id, spec);
461+
added_spec_id = Some(spec_id);
444462
}
445463
TableUpdate::SetDefaultSpec { spec_id } => {
446-
metadata.default_spec_id = spec_id;
464+
if spec_id == -1 {
465+
if let Some(added_spec_id) = added_spec_id {
466+
metadata.default_spec_id = added_spec_id;
467+
} else {
468+
return Err(Error::InvalidFormat(
469+
"Cannot set default spec to -1 without adding a spec first".to_string(),
470+
));
471+
}
472+
} else {
473+
metadata.default_spec_id = spec_id;
474+
}
447475
}
448476
TableUpdate::AddSortOrder { sort_order } => {
449-
metadata.sort_orders.insert(sort_order.order_id, sort_order);
477+
let sort_order_id = sort_order.order_id;
478+
metadata.sort_orders.insert(sort_order_id, sort_order);
479+
added_sort_order_id = Some(sort_order_id);
450480
}
451481
TableUpdate::SetDefaultSortOrder { sort_order_id } => {
452-
metadata.default_sort_order_id = sort_order_id;
482+
if sort_order_id == -1 {
483+
if let Some(added_sort_order_id) = added_sort_order_id {
484+
metadata.default_sort_order_id = added_sort_order_id;
485+
} else {
486+
return Err(Error::InvalidFormat(
487+
"Cannot set default sort order to -1 without adding a sort order first"
488+
.to_string(),
489+
));
490+
}
491+
} else {
492+
metadata.default_sort_order_id = sort_order_id;
493+
}
453494
}
454495
TableUpdate::AddSnapshot { snapshot } => {
455496
metadata.snapshot_log.push(SnapshotLog {

0 commit comments

Comments
 (0)