Skip to content

Commit b9de23c

Browse files
committed
fix: preserve write_default when applying a name mapping
NameMappingProjectionVisitor.field rebuilt each NestedField with an initial_write= keyword, but NestedField.__init__ has no such parameter (the write-default keyword is write_default). Being a Pydantic model, the unknown key was swallowed by **data and silently ignored, so apply_name_mapping dropped every field's write_default to None. Pass write_default= to match the NestedField constructor and add a regression test asserting both initial_default and write_default survive a name mapping.
1 parent 9d36e23 commit b9de23c

2 files changed

Lines changed: 20 additions & 1 deletion

File tree

pyiceberg/table/name_mapping.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -341,7 +341,7 @@ def field(self, field: NestedField, field_partner: MappedField | None, field_res
341341
required=field.required,
342342
doc=field.doc,
343343
initial_default=field.initial_default,
344-
initial_write=field.write_default,
344+
write_default=field.write_default,
345345
)
346346

347347
def list(self, list_type: ListType, list_partner: MappedField | None, element_result: IcebergType) -> IcebergType:

tests/table/test_name_mapping.py

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -403,3 +403,22 @@ def test_mapping_using_by_visitor(table_schema_nested: Schema, table_name_mappin
403403
),
404404
)
405405
assert apply_name_mapping(schema_without_ids, table_name_mapping_nested).fields == table_schema_nested.fields
406+
407+
408+
def test_mapping_preserves_field_defaults() -> None:
409+
schema_without_ids = Schema(
410+
NestedField(
411+
field_id=0,
412+
name="foo",
413+
field_type=StringType(),
414+
required=False,
415+
initial_default="init",
416+
write_default="write",
417+
),
418+
)
419+
name_mapping = NameMapping([MappedField(field_id=1, names=["foo"])])
420+
421+
mapped_field = apply_name_mapping(schema_without_ids, name_mapping).fields[0]
422+
423+
assert mapped_field.initial_default == "init"
424+
assert mapped_field.write_default == "write"

0 commit comments

Comments
 (0)