in pyiceberg/table/update/schema.py [0:0]
def struct(self, struct: StructType, field_results: List[Optional[IcebergType]]) -> Optional[IcebergType]:
has_changes = False
new_fields = []
for idx, result_type in enumerate(field_results):
result_type = field_results[idx]
# Has been deleted
if result_type is None:
has_changes = True
continue
field = struct.fields[idx]
name = field.name
doc = field.doc
required = field.required
write_default = field.write_default
# There is an update
if update := self._updates.get(field.field_id):
name = update.name
doc = update.doc
required = update.required
write_default = update.write_default
if (
field.name == name
and field.field_type == result_type
and field.required == required
and field.doc == doc
and field.write_default == write_default
):
new_fields.append(field)
else:
has_changes = True
new_fields.append(
NestedField(
field_id=field.field_id,
name=name,
field_type=result_type,
required=required,
doc=doc,
initial_default=field.initial_default,
write_default=write_default,
)
)
if has_changes:
return StructType(*new_fields)
return struct