gruuya opened a new issue, #17052: URL: https://github.com/apache/datafusion/issues/17052
### Is your feature request related to a problem or challenge? When physical plans are directly constructed (i.e. skipping over logical plans/dataframes) in a dynamical manner, `UnionExec`s `inputs` can end up being an empty vector. In turn, this causes a panic such as ```rust thread '...' panicked at datafusion/physical-plan/src/union.rs:542:24: index out of bounds: the len is 0 but the index is 0 ``` ### Describe the solution you'd like Along the lines of the existing validation for the logical union plan maybe this should be an error instead https://github.com/apache/datafusion/blob/79c4c057e67623e86a7cbe2abb1210fc71fa94e3/datafusion/expr/src/logical_plan/plan.rs#L2733-L2735 Otherwise (since that would entail changing the signature of `UnionExec::new`), at least the panic can be made to have a clearer message, e.g. ```diff --- a/datafusion/physical-plan/src/union.rs +++ b/datafusion/physical-plan/src/union.rs @@ -538,8 +538,11 @@ pub fn can_interleave<T: Borrow<Arc<dyn ExecutionPlan>>>( .all(|partition| partition == *reference) } -fn union_schema(inputs: &[Arc<dyn ExecutionPlan>]) -> SchemaRef { - let first_schema = inputs[0].schema(); +fn union_schema(inputs: &[Arc<dyn ExecutionPlan>]) -> Result<SchemaRef> { + let first_schema = inputs + .get(0) + .expect("No union input plans provided") + .schema(); ``` ### Describe alternatives you've considered _No response_ ### Additional context _No response_ -- This is an automated message from the Apache Git Service. To respond to the message, please log on to GitHub and use the URL above to go to the specific comment. To unsubscribe, e-mail: github-unsubscr...@datafusion.apache.org.apache.org For queries about this service, please contact Infrastructure at: us...@infra.apache.org --------------------------------------------------------------------- To unsubscribe, e-mail: github-unsubscr...@datafusion.apache.org For additional commands, e-mail: github-h...@datafusion.apache.org