in crates/iceberg/src/spec/table_metadata_builder.rs [1402:1488]
fn test_reassigns_ids() {
let schema = Schema::builder()
.with_schema_id(10)
.with_fields(vec![
NestedField::required(11, "a", Type::Primitive(PrimitiveType::Long)).into(),
NestedField::required(12, "b", Type::Primitive(PrimitiveType::Long)).into(),
NestedField::required(
13,
"struct",
Type::Struct(StructType::new(vec![NestedField::required(
14,
"nested",
Type::Primitive(PrimitiveType::Long),
)
.into()])),
)
.into(),
NestedField::required(15, "c", Type::Primitive(PrimitiveType::Long)).into(),
])
.build()
.unwrap();
let spec = PartitionSpec::builder(schema.clone())
.with_spec_id(20)
.add_partition_field("a", "a", Transform::Identity)
.unwrap()
.add_partition_field("struct.nested", "nested_partition", Transform::Identity)
.unwrap()
.build()
.unwrap();
let sort_order = SortOrder::builder()
.with_fields(vec![SortField {
source_id: 11,
transform: Transform::Identity,
direction: SortDirection::Ascending,
null_order: NullOrder::First,
}])
.with_order_id(10)
.build(&schema)
.unwrap();
let (fresh_schema, fresh_spec, fresh_sort_order) =
TableMetadataBuilder::reassign_ids(schema, spec.into_unbound(), sort_order).unwrap();
let expected_schema = Schema::builder()
.with_fields(vec![
NestedField::required(1, "a", Type::Primitive(PrimitiveType::Long)).into(),
NestedField::required(2, "b", Type::Primitive(PrimitiveType::Long)).into(),
NestedField::required(
3,
"struct",
Type::Struct(StructType::new(vec![NestedField::required(
5,
"nested",
Type::Primitive(PrimitiveType::Long),
)
.into()])),
)
.into(),
NestedField::required(4, "c", Type::Primitive(PrimitiveType::Long)).into(),
])
.build()
.unwrap();
let expected_spec = PartitionSpec::builder(expected_schema.clone())
.with_spec_id(0)
.add_partition_field("a", "a", Transform::Identity)
.unwrap()
.add_partition_field("struct.nested", "nested_partition", Transform::Identity)
.unwrap()
.build()
.unwrap();
let expected_sort_order = SortOrder::builder()
.with_fields(vec![SortField {
source_id: 1,
transform: Transform::Identity,
direction: SortDirection::Ascending,
null_order: NullOrder::First,
}])
.with_order_id(1)
.build(&expected_schema)
.unwrap();
assert_eq!(fresh_schema, expected_schema);
assert_eq!(fresh_spec, expected_spec);
assert_eq!(fresh_sort_order, expected_sort_order);
}