metesynnada commented on PR #4439:
URL:
https://github.com/apache/arrow-datafusion/pull/4439#issuecomment-1333481206
Let's consider more general use cases of `output_ordering()`. In
`DefaultPhysicalPlanner.create_initial_plan()`, we should be able to depend on
`output_ordering()` and `output_partitioning()` regardless of the optimization
step. Let’s think we have `AExec` and `BExec`.
```
AExec
⬇️
BExec
```
where
```rust
impl ExecutionPlan for AExec {
fn output_ordering(&self) -> Option<&[PhysicalSortExpr]> {
self.input.output_ordering()
}
}
```
If I call `AExec.output_ordering()` in `DefaultPhysicalPlanner`, it will
gives `BExec`’s output order. I can make decisions depending on it in planner
phase. To make this plan “runnable”, we should not add new operators to the
between `AExec` and `BExec` outside of the planner. If `AExec` requires an
input ordering, this should be decided inside the planner and add to the
operator chain to make `output_ordering()` API work. Currently, these API’s are
broken since we did not add a `SortExec` inside the planner.
--
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: [email protected]
For queries about this service, please contact Infrastructure at:
[email protected]