Hey Logan,

Many parts of Calcite such as rules and metadata providers rely on the
assumption that the RelNode tree does not contain subqueries. This is
achieved by using the SubQueryRemoveRule [1] early on during the
optimization process. Another pretty common preprocessing step is
query decorrelation [2].

Best,
Stamatis

[1] 
https://github.com/apache/calcite/blob/f854ef5ee480e0ff893b18d27ec67dc381ee2244/core/src/main/java/org/apache/calcite/rel/rules/SubQueryRemoveRule.java
[2] 
https://github.com/apache/calcite/blob/f854ef5ee480e0ff893b18d27ec67dc381ee2244/core/src/main/java/org/apache/calcite/sql2rel/RelDecorrelator.java#L147

On Fri, May 10, 2024 at 5:14 AM JinxTheKid <logansmith...@gmail.com> wrote:
>
> Hi all, I am new to Calcite so apologies for what might be a basic question.
>
> I'm working with the RelTree, and trying to understand the standard way to
> collect column origins for a RelNode. My current strategy to collect column
> origins for some arbitrary node is to use the node's metadataQuery field,
> in conjunction with some list of indices (maybe its projection indices,
> join indices, something of the like).
>
> This strategy works for simple queries, but fails when dealing with
> subqueries (in particular, I'm concerned with subqueries inside of
> projections). I have a variant of my strategy that uses RexVisitor to visit
> all RexSubqueries I find inside of projections, but this strategy feels a
> bit verbose. Is there a builtin (or better) way to "deeply" collect column
> origins besides performing this aforementioned strategy?
>
> Thanks,
> Logan

Reply via email to