Part of #276 (Stretch / Phase 3+). Only pursue if profiling justifies it.
Goal
Promote broadcast into first-class physical operators to unlock optimizer-level wins.
Design
NdScanExec emits ND-struct columns (Struct{ values: List<T>, dim_names, dim_sizes }), keeps coordinate pushdown.
BroadcastExec: ND-struct schema in → encoded tabular schema out; broadcasts + REE/Dict-encodes; advertises EquivalenceProperties ordering for monotonic coordinates (→ sort elimination, streaming group-by).
TableProvider::scan() wires BroadcastExec(NdScanExec(..)) and advertises the flat logical schema. Not inserted by an analyzer rule.
- Optional follow-up: optimizer rule rewriting aggregate-over-dimension into an ND-form reduction (no flatten).
Acceptance
- Plans show ordering propagated from broadcast; downstream sorts eliminated where valid.
- Results identical to the in-place path; bench shows benefit for ordering-sensitive queries.
Part of #276 (Stretch / Phase 3+). Only pursue if profiling justifies it.
Goal
Promote broadcast into first-class physical operators to unlock optimizer-level wins.
Design
NdScanExecemits ND-struct columns (Struct{ values: List<T>, dim_names, dim_sizes }), keeps coordinate pushdown.BroadcastExec: ND-struct schema in → encoded tabular schema out; broadcasts + REE/Dict-encodes; advertisesEquivalencePropertiesordering for monotonic coordinates (→ sort elimination, streaming group-by).TableProvider::scan()wiresBroadcastExec(NdScanExec(..))and advertises the flat logical schema. Not inserted by an analyzer rule.Acceptance