Repository navigation
Conversation
BoundedMax and BoundedMin partials now record whether any value was truncated to fit the byte bound. An untruncated partial can satisfy the exact Max/Min aggregate via the new `AggregateFnVTable::partial_can_satisfy` hook, exposed on accumulators as `DynAccumulator::can_satisfy`. This lets file writers record untruncated string/binary extrema as exact, matching what the legacy statistics truncation flag provides today. Signed-off-by: Thor <thor.hansen@dash0.com>
Merging this PR will degrade performance by 11.31%3 warnings, 1 note
Warning Please fix the performance issues or acknowledge them on CodSpeed. Performance Changes
Tip Investigate this regression by commenting Comparing Footnotes
|
Split out of #9775.
Summary
BoundedMax/BoundedMinpartial states now carryExact/Inexactvariants. A partial isExactwhen no accumulated value had to be truncated to fit the byte bound.AggregateFnVTable::partial_can_satisfyhook. It defaults tocan_satisfy, so an aggregate can say whether one particular partial state satisfies another aggregate. An untruncated bounded partial can satisfy exactMax/Min.DynAccumulator::can_satisfyexposes the hook on accumulators.Why
#9775 records file statistics from aggregate partials. Today the legacy
StatsSetpath records untruncated string/binary min/max as exact through its truncation flag. DuckDB, the DuckLakeCOPYreturn stats and DataFusion all rely on that. Without this change those values would become inexact, and those consumers would drop them.Checks
cargo clippy -p vortex-array --all-targets --all-features -- -D warningscargo +nightly-2026-09-10 fmt -p vortex-array --checkcargo nextest run -p vortex-array: 4481 passedtypos