You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@arrow.apache.org by "Florian R. Hölzlwimmer" <gi...@frhoelzlwimmer.de> on 2026/10/04 13:00:15 UTC
[VOTE][Format] Fixed and variable closedness range canonical extension types
Dear all,
Following the discussion in [1], I would like to propose a vote on
adding two range types to the Arrow canonical extension types [2].
A range is a bounded set (a mathematical interval) over an orderable
value type T. In both types, only a null bound means an unbounded side.
* arrow.fixed_closedness_range: The storage type is
Struct<lower: T, upper: T>. The metadata
{"closed": "left" | "right" | "both" | "neither"} sets one closedness
for all values.
pandas' IntervalArray and IntervalIndex map onto this type one to one.
* arrow.variable_closedness_range: The storage type is
Struct<lower: T, upper: T, lower_inc: bool, upper_inc: bool>. The
non-nullable fields lower_inc and upper_inc store per value whether
each bound is inclusive. The metadata is an empty JSON object {}.
Continuous ranges such as PostgreSQL's numrange need this type,
because one column can hold both [1, 5] and (1, 5).
The spec text is in [3].
The pull request [4] also contains a C++ and a Python implementation.
An independent Rust implementation for arrow-rs is in [5].
Each canonical extension type needs its own vote, so this thread has
two ballots, and each type gets its own result. Please vote on each
type. A plain +1, +0 or -1 without a type counts for both.
If anyone prefers two separate threads, I will split it.
The vote will be open until Friday 2026-10-09.
If there are not enough votes by then, I will keep it open longer.
arrow.fixed_closedness_range:
[ ] +1 Accept this proposal
[ ] +0
[ ] -1 Do not accept this proposal because...
arrow.variable_closedness_range:
[ ] +1 Accept this proposal
[ ] +0
[ ] -1 Do not accept this proposal because...
Best,
Florian
[1] https://lists.apache.org/thread/tcv35l8o8d33n176kb3qv4y45obcgjbn
[2] https://arrow.apache.org/docs/format/CanonicalExtensions.html
[3] https://github.com/Hoeze/arrow/blob/133c4c6d52e8b0dc90197b167967ab814fb359d2/docs/source/format/CanonicalExtensions.rst#fixed-closedness-range
[4] https://github.com/apache/arrow/pull/50028
[5] https://github.com/apache/arrow-rs/pull/11371
Re: [VOTE][Format] Fixed and variable closedness range canonical extension types
Posted by gi...@frhoelzlwimmer.de.
Dear all,
As the vote only covers the format change, I moved the spec text into its own pull request:
https://github.com/apache/arrow/pull/53239
The text is unchanged from the version linked in the vote mail.
There have been no votes so far, so I would like to keep this vote open.
Best,
Florian
PS: Thanks for your advice, Rok :)
On 04.10.26 15:00, Florian R. Hölzlwimmer wrote:
> Dear all,
>
> Following the discussion in [1], I would like to propose a vote on
> adding two range types to the Arrow canonical extension types [2].
>
> A range is a bounded set (a mathematical interval) over an orderable
> value type T. In both types, only a null bound means an unbounded side.
>
> * arrow.fixed_closedness_range: The storage type is
> Struct<lower: T, upper: T>. The metadata
> {"closed": "left" | "right" | "both" | "neither"} sets one closedness
> for all values.
> pandas' IntervalArray and IntervalIndex map onto this type one to one.
>
> * arrow.variable_closedness_range: The storage type is
> Struct<lower: T, upper: T, lower_inc: bool, upper_inc: bool>. The
> non-nullable fields lower_inc and upper_inc store per value whether
> each bound is inclusive. The metadata is an empty JSON object {}.
> Continuous ranges such as PostgreSQL's numrange need this type,
> because one column can hold both [1, 5] and (1, 5).
>
> The spec text is in [3].
> The pull request [4] also contains a C++ and a Python implementation.
> An independent Rust implementation for arrow-rs is in [5].
>
> Each canonical extension type needs its own vote, so this thread has
> two ballots, and each type gets its own result. Please vote on each
> type. A plain +1, +0 or -1 without a type counts for both.
> If anyone prefers two separate threads, I will split it.
>
> The vote will be open until Friday 2026-10-09.
> If there are not enough votes by then, I will keep it open longer.
>
> arrow.fixed_closedness_range:
> [ ] +1 Accept this proposal
> [ ] +0
> [ ] -1 Do not accept this proposal because...
>
> arrow.variable_closedness_range:
> [ ] +1 Accept this proposal
> [ ] +0
> [ ] -1 Do not accept this proposal because...
>
> Best,
> Florian
>
> [1] https://lists.apache.org/thread/tcv35l8o8d33n176kb3qv4y45obcgjbn
> [2] https://arrow.apache.org/docs/format/CanonicalExtensions.html
> [3] https://github.com/Hoeze/arrow/blob/133c4c6d52e8b0dc90197b167967ab814fb359d2/docs/source/format/CanonicalExtensions.rst#fixed-closedness-range
> [4] https://github.com/apache/arrow/pull/50028
> [5] https://github.com/apache/arrow-rs/pull/11371