[ https://issues.apache.org/jira/browse/CALCITE-4681?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=17377558#comment-17377558 ]
Haisheng Yuan commented on CALCITE-4681: ---------------------------------------- [~chenz...@mail2.sysu.edu.com] Use RelSubset with the predicate of Convention == NONE, so that it matches logical operator. In case the child is a logical sort, you are fine, it won't increase the rule match a lot. > Rule operand match specific shape with or without > RelSubset.class/RelNode.class > ------------------------------------------------------------------------------- > > Key: CALCITE-4681 > URL: https://issues.apache.org/jira/browse/CALCITE-4681 > Project: Calcite > Issue Type: Improvement > Components: core > Reporter: ZiLin Chen > Priority: Major > > If we want to match such a pattern, LogicalJoin1 with left Input XXX(original > LogicalJoin1 left input) and with right input (LogicalJoin.class). we wound > find that XXX we should use RelNode.class or RelSubset.class. However both > RelNode.class and RelSubset.class will match all kind of traitSet which is > inefficient(rule may fires multi time just because of some kind of XXX with > different trait), especially when this is a JoinReorder Rule. > The XXX operand we want to match is exact what LogicalJoin1.getLeft() return. > LogicalJoin1 > - XXX(original LogicalJoin1 left input) > - LogicalJoin2 > > Is that any way we can provide to solve this problem? > One way maybe changing what RelSubset.class operand match meaning? (Now, > there is no rule in calcite with RelSubset.class as match operand. Before > JoinAssociateRule is the only one match RelSubset.class, but change later ) > -- This message was sent by Atlassian Jira (v8.3.4#803005)