Re: How to match root node in a HEP Rule?
Hi Ian, Is there any specific reason or use case that you have to match the root node and find the parent node in your customized rule? Thanks, Haisheng Yuan On 2021/05/03 20:20:22, Julian Hyde wrote: > > Is there a way to identify a node as being a root node during RelRule.match? > > Not currently. One workaround would be to create 'class MyRoot extends > SingleRel', add it as the root of the tree, and write your rules to > match on it. > > > Or more generally, is there a way to collect the parents of an arbitrary > > RelNode? > > By design, the only way to find the parents of a RelNode are to write > a rule that matches those parents. This ensures that rules will work > in the Volcano planner, where a RelNode can have many parents. > > Julian > > On Mon, May 3, 2021 at 12:52 PM Ian Bertolacci > wrote: > > > > Hello, > > I am trying to write a rule that matches (among other things) the root of a > > RelNode tree. > > > > Unfortunately, it seems that HepRuleCall.parents is only initialized and > > populated if the rule extends CommonRelSubExpr, which doesn’t really apply > > in my case. > > (see: > > https://github.com/apache/calcite/blob/master/core/src/main/java/org/apache/calcite/plan/hep/HepPlanner.java#L526) > > > > Is there a way to identify a node as being a root node during > > RelRule.match? Or more generally, is there a way to collect the parents of > > an arbitrary RelNode? > > > > Thanks. >
Re: How to match root node in a HEP Rule?
> Is there a way to identify a node as being a root node during RelRule.match? Not currently. One workaround would be to create 'class MyRoot extends SingleRel', add it as the root of the tree, and write your rules to match on it. > Or more generally, is there a way to collect the parents of an arbitrary > RelNode? By design, the only way to find the parents of a RelNode are to write a rule that matches those parents. This ensures that rules will work in the Volcano planner, where a RelNode can have many parents. Julian On Mon, May 3, 2021 at 12:52 PM Ian Bertolacci wrote: > > Hello, > I am trying to write a rule that matches (among other things) the root of a > RelNode tree. > > Unfortunately, it seems that HepRuleCall.parents is only initialized and > populated if the rule extends CommonRelSubExpr, which doesn’t really apply in > my case. > (see: > https://github.com/apache/calcite/blob/master/core/src/main/java/org/apache/calcite/plan/hep/HepPlanner.java#L526) > > Is there a way to identify a node as being a root node during RelRule.match? > Or more generally, is there a way to collect the parents of an arbitrary > RelNode? > > Thanks.
How to match root node in a HEP Rule?
Hello, I am trying to write a rule that matches (among other things) the root of a RelNode tree. Unfortunately, it seems that HepRuleCall.parents is only initialized and populated if the rule extends CommonRelSubExpr, which doesn’t really apply in my case. (see: https://github.com/apache/calcite/blob/master/core/src/main/java/org/apache/calcite/plan/hep/HepPlanner.java#L526) Is there a way to identify a node as being a root node during RelRule.match? Or more generally, is there a way to collect the parents of an arbitrary RelNode? Thanks.