The Volcano planner works in a top-down fashion. It starts by transforming the root and move towards the leafs of the plan. Due to this when transforming a logical join its inputs are still in the logical convention so in principle they should not have any physical properties.
Normally when the physical join algorithm is chosen the respective rule should be responsible for demanding the inputs of the join to have certain properties. Long story short, I think in your use case you should not make the rule match based on the properties of the child nodes but it should match unconditionally and if necessary demand some properties in its inputs. If I remember well the EnumerableMergeJoinRule follows this approach so you can have a look there. Best, Stamatis On Tue, Aug 20, 2019, 5:07 PM Michael Mior <mm...@apache.org> wrote: > If you just want to control whether the rule gets applied, you can > override RelOptRule#matches which canreturns a boolean indicating > whether the rule should be applied. > -- > Michael Mior > mm...@apache.org > > Le ven. 9 août 2019 à 08:48, rahul patwari > <rahulpatwari8...@gmail.com> a écrit : > > > > Hi, > > > > We want to create a ConverterRule which converts the default calling > > Convention to external storage-specific calling convention depending on > the > > Children nodes, like RelOptRule. > > > > For example, depending on the properties of the child nodes, we want to > > convert LogicalJoin to external system's specific Join implementation. > > > > Currently, ConverterRule > > < > https://github.com/apache/calcite/blob/5212d6c47e36995943f4d955a1714bf03eb08e7e/core/src/main/java/org/apache/calcite/rel/convert/ConverterRule.java#L75 > > > > cannot take Children and Child Policy is > RelOptRuleOperandChildPolicy.ANY. > > > > What is the preferred way to achieve this task? > > > > Thanks, > > Rahul >