andygrove commented on code in PR #3732:
URL: https://github.com/apache/arrow-datafusion/pull/3732#discussion_r989530437
##########
datafusion/optimizer/src/decorrelate_where_exists.rs:
##########
@@ -137,8 +137,14 @@ fn optimize_exists(
let subqry_inputs = query_info.query.subquery.inputs();
let subqry_input = only_or_err(subqry_inputs.as_slice())
.map_err(|e| context!("single expression projection required", e))?;
- let subqry_filter = Filter::try_from_plan(subqry_input)
- .map_err(|e| context!("cannot optimize non-correlated subquery", e))?;
+ let subqry_filter = match subqry_input {
Review Comment:
I understand what is happening now and have some suggestions for improving
this rule.
This line of code looks at inputs of the subquery and does not care what
type of operator the subquery is. Previously this was assumed to be a
`Projection` but now it could be a `Projection` or a `Distinct`, or something
else ... I think we should add some pattern matching here.
```rust
let subqry_inputs = query_info.query.subquery.inputs();
```
We are then matching on this input and previously expected a `Filter` buit
now could be a `Projection` containing a `Filter` because everything is shifted
down by one because of the root `Distinct`.
--
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]