Skip to content

[Go][Parquet] Fix FixedSizeList nullable elements read as NULL - #585

Merged
zeroshade merged 1 commit into
apache:mainfrom
rmorgans:fix-fixedsizelist-nullable
Nov 30, 2025
Merged

[Go][Parquet] Fix FixedSizeList nullable elements read as NULL#585
zeroshade merged 1 commit into
apache:mainfrom
rmorgans:fix-fixedsizelist-nullable

Conversation

@rmorgans

Copy link
Copy Markdown
Contributor

Fixes #584

The FIXED_SIZE_LIST case in pathBuilder.Visit was missing the nullableInParent assignment that the LIST case has, causing non-null values to be read back as NULL.

Fix: Add one line to set nullableInParent before visiting child values.

Test: Added TestFixedSizeListNullableElements roundtrip test.

The FIXED_SIZE_LIST case in pathBuilder.Visit was missing the
nullableInParent assignment that the LIST case has. This caused
child values to be encoded with incorrect definition levels,
resulting in non-null values being read back as NULL.

Fixes: apache#584

@zeroshade zeroshade left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Thanks for this! And for the test!

@zeroshade
zeroshade merged commit 5ac5d69 into apache:main Nov 30, 2025
16 checks passed
zeroshade pushed a commit that referenced this pull request Dec 1, 2025
…pes (#586)

## Summary
- Extracts common logic for LIST, MAP, and FIXED_SIZE_LIST into a shared
`visitListLike` helper function
- Ensures `nullableInParent` is always set correctly before visiting
child values, making it impossible to forget this step when adding new
list-like type handling
- Uses `defLevelOffset` parameter to calculate `defLevelIfEmpty` after
all increments

## Rationale

This refactoring follows the principle of "making invalid states
unrepresentable". The original bug in #584 (fixed in #585) was caused by
the FIXED_SIZE_LIST case forgetting to set `nullableInParent`. By
extracting the common pattern into a helper function, future additions
of list-like types cannot omit this critical step.

## Test plan
- [x] All existing tests pass
- [x] Regression test from #585 (`TestFixedSizeListNullableElements`)
continues to pass

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-authored-by: Claude <noreply@anthropic.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

2 participants