CircArgs commented on code in PR #4619:
URL: https://github.com/apache/iceberg/pull/4619#discussion_r857154589
##########
python/src/iceberg/expressions/base.py:
##########
@@ -147,3 +148,61 @@ def get(self, container: StructProtocol) -> Any:
Any: The value at position `self.position` in the container
"""
return container.get(self.position)
+
+
+class BoundReference:
+ """A reference bound to a field with an accessor for acquiring the field's
value
+
+ Args:
+ field (NestedField): A referenced field in an Iceberg schema
+ accessor (Accessor): An Accessor object to access the value at the
field's position
+ """
+
+ def __init__(self, field: NestedField, accessor: Accessor):
+ self._field = field
+ self._accessor = accessor
+
+ def __str__(self):
+ return f"ref(id={self.field_id})"
+
+ def __repr__(self):
+ return f"BoundReference(field={repr(self.field)},
accessor={repr(self.accessor)})"
+
+ @property
+ def field(self) -> NestedField:
+ """The referenced field"""
+ return self._field
+
+ @property
+ def field_id(self) -> int:
+ """The ID referenced field"""
+ return self._field.field_id
+
+ @property
+ def field_type(self) -> IcebergType:
+ """The type of the referenced field"""
+ return self._field.type
+
+ @property
+ def accessor(self) -> Accessor:
+ """The accessor for retrieving the value at the referenced field's
position"""
+ return self._accessor
+
+ def __eq__(self, other) -> bool:
+ if id(self) == id(other):
+ return True
+ elif other is None or not isinstance(other, BoundReference):
+ return False
Review Comment:
If you try to compare to another BoundReference here with a different `id`
then doesn't this return `None`?: Misses the first branch, it's not None but is
BoundReference -> No more branches, function returns None.
not sure if this is desired to just boil down to `self is other` (I think
equivalent to the first branch) e.g. the default `__eq__` if I'm not mistaken,
in which case we don't even need to implement this
--
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]