You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
{{ message }}
Repository navigation
HashJoinExec / NestedLoopJoinExec projection Some(vec![]) becomes None after ser/de #23083
HashJoinExec.projection: Option<Vec<usize>> (and the same field on NestedLoopJoinExec) is serialized as a bare repeated uint32. Proto3 cannot tell None from Some(vec![]), and the decoder treats empty as None:
let projection = if !hashjoin.projection.is_empty(){Some(hashjoin.projection.iter().map(|i| *i asusize).collect())}else{None// Some(vec![]) folded in here};
Some(vec![]) means "emit zero columns"; None means "emit the full join schema". The round-trip silently changes the output schema. FilterExec already has a workaround for the same proto3 limitation — these two execs were missed.
Activity
haohuaijin commentedon Jun 22, 2026
take
fix: preserve empty projection when ser/de `HashJoinExec` and `Nested…
fix: preserve empty projection when ser/de `HashJoinExec` and `Nested…
fix: preserve empty projection when ser/de `HashJoinExec` and `Nested…