Skip to content

Conversation

@wkalt
Copy link
Contributor

@wkalt wkalt commented Dec 29, 2025

Prior to this commit, FixedSizeList was only supported with primitive element types (e.g., FSL for vectors). This adds structural encoding support for FSL, enabling use cases like fixed-size arrays of bounding boxes, coordinate tuples, or other structured data.

Key changes:

  • New FixedSizeListStructuralEncoder that encodes FSL validity to rep/def and delegates child encoding to the struct encoder
  • New StructuralFixedSizeListScheduler that scales row ranges by the FSL dimension when scheduling reads
  • New StructuralFixedSizeListDecoder that reconstructs FSL arrays from child data and rep/def validity

A key challenge is "garbage filtering": unlike variable-length lists which can omit children under null entries, FSL children always exist. When an FSL row is null, any nested list-like types within its children contain undefined "garbage" data. The encoder normalizes these to empty null lists before encoding.

Prior to this commit, FixedSizeList was only supported with primitive
element types (e.g., FSL<Float32> for vectors). This adds structural
encoding support for FSL<Struct>, enabling use cases like fixed-size
arrays of bounding boxes, coordinate tuples, or other structured data.

Key changes:
- New `FixedSizeListStructuralEncoder` that encodes FSL validity to
  rep/def and delegates child encoding to the struct encoder
- New `StructuralFixedSizeListScheduler` that scales row ranges by the
  FSL dimension when scheduling reads
- New `StructuralFixedSizeListDecoder` that reconstructs FSL arrays from
  child data and rep/def validity

A key challenge is "garbage filtering": unlike variable-length lists
which can omit children under null entries, FSL children always exist.
When an FSL row is null, any nested list-like types within its children
contain undefined "garbage" data. The encoder normalizes these to empty
null lists before encoding.
@github-actions github-actions bot added enhancement New feature or request breaking-change labels Dec 29, 2025
@wkalt wkalt changed the title feat!: support FixedSizeList<Struct> feat: support FixedSizeList<Struct> Dec 29, 2025
@wkalt
Copy link
Contributor Author

wkalt commented Dec 29, 2025

sorry, mislabeled this breaking. Should not be breaking.

@wkalt
Copy link
Contributor Author

wkalt commented Dec 31, 2025

I will update this patch once #5591 is merged - there are some related tests I want to add here that currently fail.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

breaking-change enhancement New feature or request

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant