Part of #23494.
aggregates/mod.rs. Single child + PhysicalGroupBy + aggregate exprs. UDAFs go through ctx.encode_udaf / ctx.decode_udaf (store the returned Option<Vec<u8>> in fun_definition); AggregateMode by-name; orderings inline like SortExec. No raw codec.
Follow the pattern in #23494 (reference impl: #23495 / ProjectionExec; full end-state draft: #23496). Add try_to_proto inside impl ExecutionPlan for X, add the inherent X::try_from_proto, repoint the decode arm, and delete the old central arm in the same PR (that is the proof the hook is reached). Keep the wire format byte-for-byte identical.
Part of #23494.
aggregates/mod.rs. Single child +PhysicalGroupBy+ aggregate exprs. UDAFs go throughctx.encode_udaf/ctx.decode_udaf(store the returnedOption<Vec<u8>>infun_definition);AggregateModeby-name; orderings inline like SortExec. No raw codec.Follow the pattern in #23494 (reference impl: #23495 /
ProjectionExec; full end-state draft: #23496). Addtry_to_protoinsideimpl ExecutionPlan for X, add the inherentX::try_from_proto, repoint the decode arm, and delete the old central arm in the same PR (that is the proof the hook is reached). Keep the wire format byte-for-byte identical.