Part of #23494.
joins/hash_join/exec.rs. The join template: two children, on-columns (decoded against each child schema), JoinType/NullEquality/PartitionMode/JoinSide by-name matches, JoinFilter (own intermediate schema + column indices), the [u32::MAX] projection sentinel, and the optional dynamic filter.
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.
joins/hash_join/exec.rs. The join template: two children, on-columns (decoded against each child schema),JoinType/NullEquality/PartitionMode/JoinSideby-name matches,JoinFilter(own intermediate schema + column indices), the[u32::MAX]projection sentinel, and the optional dynamic filter.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.