Skip to content

Commit 5d62d54

Browse files
committed
implement table_metadata.sort_order() and better validation error message
1 parent 3e10f44 commit 5d62d54

File tree

3 files changed

+8
-4
lines changed

3 files changed

+8
-4
lines changed

pyiceberg/table/metadata.py

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -318,6 +318,10 @@ def current_snapshot(self) -> Snapshot | None:
318318
def next_sequence_number(self) -> int:
319319
return self.last_sequence_number + 1 if self.format_version > 1 else INITIAL_SEQUENCE_NUMBER
320320

321+
def sort_order(self) -> SortOrder:
322+
"""Get the current sort order for this table, or UNSORTED_SORT_ORDER if there is no sort order."""
323+
return self.sort_order_by_id(self.default_sort_order_id) or UNSORTED_SORT_ORDER
324+
321325
def sort_order_by_id(self, sort_order_id: int) -> SortOrder | None:
322326
"""Get the sort order by sort_order_id."""
323327
return next((sort_order for sort_order in self.sort_orders if sort_order.order_id == sort_order_id), None)

pyiceberg/table/sorting.py

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -178,7 +178,9 @@ def check_compatible(self, schema: Schema) -> None:
178178
if not source_field.field_type.is_primitive:
179179
raise ValidationError(f"Cannot sort by non-primitive source field: {source_field}")
180180
if not field.transform.can_transform(source_field.field_type):
181-
raise ValidationError(f"Invalid source type {source_field.field_type} for transform: {field.transform}")
181+
raise ValidationError(
182+
f"Invalid source type {source_field.field_type} for transform: {field.transform} on source field {source_field}"
183+
)
182184

183185

184186
UNSORTED_SORT_ORDER_ID = 0

pyiceberg/table/update/__init__.py

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -708,9 +708,7 @@ def update_table_metadata(
708708

709709
# Check correctness of partition spec, and sort order
710710
new_metadata.spec().check_compatible(new_metadata.schema())
711-
712-
if sort_order := new_metadata.sort_order_by_id(new_metadata.default_sort_order_id):
713-
sort_order.check_compatible(new_metadata.schema())
711+
new_metadata.sort_order().check_compatible(new_metadata.schema())
714712

715713
if enforce_validation:
716714
return TableMetadataUtil.parse_obj(new_metadata.model_dump())

0 commit comments

Comments
 (0)