Fokko commented on code in PR #1770:
URL: https://github.com/apache/iceberg-python/pull/1770#discussion_r1989938216
##########
pyiceberg/table/update/schema.py:
##########
@@ -212,13 +215,34 @@ def add_column(
# assign new IDs in order
new_id = self.assign_new_column_id()
+ new_type = assign_fresh_schema_ids(field_type,
self.assign_new_column_id)
+
+ if default_value is not None:
+ try:
+ # To make sure that the value is valid for the type
+ initial_default = literal(default_value).to(new_type).value
+ except ValueError as e:
+ raise ValueError(f"Invalid default value: {e}") from e
+ else:
+ initial_default = default_value
+
+ if (required and initial_default is None) and not
self._allow_incompatible_changes:
+ # Table format version 1 and 2 cannot add required column because
there is no initial value
+ raise ValueError(f"Incompatible change: cannot add required
column: {'.'.join(path)}")
# update tracking for moves
self._added_name_to_id[full_name] = new_id
self._id_to_parent[new_id] = parent_full_path
- new_type = assign_fresh_schema_ids(field_type,
self.assign_new_column_id)
- field = NestedField(field_id=new_id, name=name, field_type=new_type,
required=required, doc=doc)
+ field = NestedField(
+ field_id=new_id,
+ name=name,
+ field_type=new_type,
+ required=required,
+ doc=doc,
+ initial_default=initial_default,
+ write_default=initial_default,
Review Comment:
This follows [this part of the
spec](https://iceberg.apache.org/spec/#default-values):
<img width="762" alt="image"
src="https://github.com/user-attachments/assets/191f0505-05a9-4cba-a944-ef79035c1fb5"
/>
##########
pyiceberg/table/update/schema.py:
##########
@@ -330,6 +354,7 @@ def _set_column_requirement(self, path: Union[str,
Tuple[str, ...]], required: b
field_type=updated.field_type,
doc=updated.doc,
required=required,
+ initial_default=updated.initial_default,
Review Comment:
Yes, you're right :)
--
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.
To unsubscribe, e-mail: [email protected]
For queries about this service, please contact Infrastructure at:
[email protected]
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]