mihaibudiu commented on code in PR #4354:
URL: https://github.com/apache/calcite/pull/4354#discussion_r2069719827
##########
core/src/main/java/org/apache/calcite/sql2rel/SqlToRelConverter.java:
##########
@@ -1227,6 +1227,16 @@ private void substituteSubQuery(Blackboard bb, SubQuery
subQuery) {
// Otherwise, let convertExists translate
// values list into an inline table for the
// reference to Q below.
+ } else if (query instanceof SqlSelect) {
+ // During JOIN ON condition processing, bb.root is
+ // initially null but subquery expansion requires
+ // a non-null bb.root. For IN/NOT IN subqueries
+ // processed via convertExists, we use the join's
+ // left input as bb.root. Exception: in UPDATE queries,
+ // bb.inputs remains null and subquery rewriting is skipped.
+ if (bb.inputs != null && bb.inputs.size() == 2) {
Review Comment:
Yes, but the docs say that the root cannot be a join.
I am wondering about the case when the left input of the join is a join.
Maybe you can at least `assert !(root instanceof Join)` after the assignment?
Moreover, directly assigning to root is strange, I have never seen this
pattern in Calcite.
I would have expected a use of setRoot.
It is true that there is another example in this file, and that code was
written by @julianhyde.
--
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]