Check yours intermediate RelNode plan, which is going to be improved by this rule. The operands and their ordering are important in matching of the rules. https://github.com/apache/calcite/blob/master/core/src/main/java/org/apache/calcite/rel/rules/JoinPushThroughJoinRule.java#L87
>From your case the rule should match. Could you share please the plan? Kind regards Vitalii On Tue, May 8, 2018 at 4:24 PM aishwaryaa...@gmail.com < aishwaryaa...@gmail.com> wrote: > Okay let me rephrase my question. > > I am executing a query having inner and left join. The plan generated by > calcite for that query is like > > inner > / \ > left C > / \ > A B > > But it would be better if it proceeds inner join first, as the row count > will be reduced further to proceed left join. So the plan needed is, > > left > / \ > inner B > / \ > A C > > So I read through the documentation and found JoinPushThroughJoinRule will > do so. So I tried applying them (Till now, I am giving only row count to > statistics). But no change in the plan. > > Then I found onMatch() in JoinPushThroughJoinRule.java has > not been called at all. > > How can this be resolved? > > > On 2018/05/04 14:23:00, Michael Mior <mm...@uwaterloo.ca> wrote: > > I have no immediate answers, but it would be helpful if you could > provide a > > complete working example of code that exhibits the problem. > > > > -- > > Michael Mior > > mm...@uwaterloo.ca > > > > > > Le ven. 4 mai 2018 à 03:58, Valli Annamalai <aishwaryaa...@gmail.com> a > > écrit : > > > > > I wanted to apply JoinPushThroughJoinRule.LEFT and > > > JoinPushThroughJoinRule.RIGHT to the plan for optimization. So I added > > > those 2 rules to Program and ran it as a sequence of programs. > > > > > > But I am not getting plan applied with these rules > > > > > > I did read [here > > > < > > > > https://issues.apache.org/jira/browse/CALCITE-457?focusedCommentId=14205221&page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel#comment-14205221 > > > >] > > > that adding rules does not mean that the plan will be better. So sanity > > > checks may fail. In my case, during onMatch() checks (in matchRecurse() > > > from ValcanoRuleCall.java), it fails because of no parents for the > subsets > > > (getParentRels() returns empty list) . > > > > > > Thus there are no successors and the recursion has not been trigerred. > So > > > the rules has not been fired (onMatch() in > JoinPushThroughJoinRule.java has > > > not been called at all). What can be done for that? > > > > > > Any other flags need to be enabled or rules to be added?? > > > > > > > > > Thanks in advance > > > > > >