TruncateTransform.satisfies_order_of raises AttributeError for different widths

Open Beginner friendly
#3,680 0 comments 0 reactions 0 assignees View on GitHub

Nobody has claimed this yet.

Assessment

Difficulty
2/5
Estimated time
1-3 hours
Newbie friendliness
82/100
Issue type
Bug
Clarity
Clearly specified
Activity status
Quiet
Tech stack
python

Research direction

Start in pyiceberg/transforms.py at TruncateTransform.satisfies_order_of and review the related constructor and source_type property. Run the focused cases in tests/test_transforms.py around lines 501-512, then add coverage for different widths. Done means comparisons return the expected booleans without accessing an uninitialized attribute.

Written by the indexing model from the issue text.

Description

Apache Iceberg version

0.11.0 (latest release)

Please describe the bug 🐞
Description

Calling TruncateTransform.satisfies_order_of with two valid truncate transforms that have different widths raises an AttributeError instead of returning a boolean.

Same-width comparisons work because the method returns early when the transforms are equal.

Reproduction
from pyiceberg.transforms import TruncateTransform

TruncateTransform(5).satisfies_order_of(TruncateTransform(3))

On main at commit 48e710d20ceeeaa637d5aeae7746b787410859f8, this raises:

AttributeError: 'TruncateTransform' object has no attribute '_source_type'

The failure reproduces consistently. The same code is also present in the 0.11.1 release.

Expected behavior

The method should compare the truncate widths and return a boolean:

assert TruncateTransform(5).satisfies_order_of(TruncateTransform(3))
assert not TruncateTransform(3).satisfies_order_of(TruncateTransform(5))

This matches the current Apache Iceberg Java implementation:

https://github.com/apache/iceberg/blob/25654ab4b29c8b5b5c20fc427da01cb70d94ed14/api/src/main/java/org/apache/iceberg/transforms/Truncate.java#L130-L141

Cause

TruncateTransform.__init__ initializes _width but not _source_type. However, satisfies_order_of still accesses the source_type property backed by _source_type:

https://github.com/apache/iceberg-python/blob/48e710d20ceeeaa637d5aeae7746b787410859f8/pyiceberg/transforms.py#L783-L905

The existing unit test only compares a transform with itself, so it returns before reaching the failing branch:

https://github.com/apache/iceberg-python/blob/48e710d20ceeeaa637d5aeae7746b787410859f8/tests/test_transforms.py#L501-L512

A focused fix could compare TruncateTransform widths directly, consistent with the Java implementation, and add regression cases for different widths.

I would be happy to contribute the fix and regression tests.

Willingness to contribute
  • I can contribute a fix for this bug independently
  • I would be willing to contribute a fix for this bug with guidance from the Iceberg community
  • I cannot contribute a fix for this bug at this time
Dominant language
Python
Stars
1.1k
Forks
589
Avg merge
2d 4h
Merged PRs (30d)
72

Contributor guide

No contributing guide indexed for this repository

First steps

  1. Read the whole issue, then the project's contributing guide.
  2. Comment on the issue to say you are picking it up — it saves two people doing the same work.
  3. Fork the repository and make your change on a branch.
  4. Open a pull request that references the issue number.

More from apache/iceberg-python

All issues in apache/iceberg-python

Similar issues

More Python issues

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.