LorrensP-2158466 opened a new issue, #10808:
URL: https://github.com/apache/datafusion/issues/10808
### Is your feature request related to a problem or challenge?
Currently, the only way to get the inputs of a LogicalPlan is to call
`inputs()`, which returns a `Vec<&LogicalPlan>`. But I have noticed that there
can be unnecessary calls to `into_iter()` or `iter()` on this vector.
Furthermore, the function returns a lot of Vectors of size 1, which can
create unnecessary allocations.
This also applies to UserDefinedLogicalNode(Core), since I don't think the
compiler can see through the use of `inputs()` and convert the Vec to an
iterator.
### Describe the solution you'd like
To change the API to return an Iterator instead of a vector requires a lot
of rewriting, so I think it's maybe nicer to create a new function that returns
an iterator over the inputs like this:
```rust
fn inputs_iter(&self) -> impl Iterator<Item = &LogicalPlan> {}
```.
We also have to extend the API of UserDefinedLogicalNode(Core) to have the
same function so extension node's have this ability as well.
So instead of all the `vec![ input ]` calls, we can use `std::iter::once`,
empty vec's can be empty iterators and in the case of an extension node we can
just call `node.inputs_iter()`.
### Describe alternatives you've considered
_No response_
### Additional context
This issue is purely for changing the API, so I'm willing to do it if this
is accepted. To use this function in the source code is a bit more work, so I
think it will be better to open another issue for changing the calls to
`inputs()` into `inputs_iter()`.
I may be entirely wrong since I'm fairly new to DataFusion, so any feedback
is greatly appreciated.
--
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]
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]