Skip to content

Commit 99e9d4b

Browse files
committed
Add id field to the builder
1 parent 791810d commit 99e9d4b

1 file changed

Lines changed: 12 additions & 6 deletions

File tree

crates/iceberg/src/transaction/update_schema.rs

Lines changed: 12 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -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

Comments
 (0)