Hi, all.
I am trying to rewrite the query plan by removing some nodes but faced with
issues related to manipulating column ref indexes.
Let's consider the following calcite plan:
LogicalProject([...])
LogicalJoin(condition=[=($0, $4)], joinType=[inner])
LogicalTableScan(table=[[DB, R]])
LogicalAggregate(group=[{0}], agg#0=[MIN($1)])
LogicalProject(a=[$3], $f0=[true])
LogicalTableScan(table=[[DB, S]])
In the join condition =($0, $4), the RHS column ref $4 is actually coming
from the $3 of table S.
To know this, we track down few nodes in the tree starting from the RHS
child of the join node.
But it becomes tricky when we use a more complex situation.
1) So, I wonder is there a utility class or method to support this purpose?
Furthermore, when we remove LogicalProject(a=[$3], $f0=[true]), we have to
manipulate all related column ref index starting from a parent of that
project node to the root node but manually tracking and shifting column ref
index is really a matter due to its complexity.
2) So I wonder the current Calcite impl has a utility class or methods to
help this situation.
3) Also, would you give me some general guidelines for implementing this
kind of stuff in Calcite?
Thanks,
James