Re: How to match root node in a HEP Rule?

2021-05-03 Thread Haisheng Yuan
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?

2021-05-03 Thread Julian Hyde
> 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?

2021-05-03 Thread Ian Bertolacci
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.