Thx Ruben, the issue really answer my questions, I encounter this when dong CALCITE-2969, when I refactor SemiJoinRule, I think not only RexFieldAccess, any RexCall should fit into this case, only if the RexCall function is deterministic, what do you think ?
Best, Danny Chan 在 2019年4月15日 +0800 PM7:48,Ruben Q L <rube...@gmail.com>,写道: > Danny, > In the context of https://issues.apache.org/jira/browse/CALCITE-2898, a > discussion about this topic was started. In that ticket I pointed out that > Calcite does not recognize "RexFieldAccess = RexInputRef" as an EquiJoin > condition (even though the RexFieldAccess itself is referencing a > RexInputRef); which is somewhat similar to the situation that you propose > "RexCall = RexInputRef". According to Julian Hyde's comment on that > ticket: *'For > our purposes, an equi-join is "field = field", not "expression = field". > Even if that expression is a reference to sub-field'. *However, I agree > with you and maybe this definition should be reviewed (I believe your > example and my example should be valid cases of EquiJoin), but possibly > this will break some pieces of the current code, so the modification might > not be straightforward. > > Best, > Ruben > > > Le lun. 15 avr. 2019 à 13:25, Xiening Dai <xndai....@live.com> a écrit : > > > I think Calcite always pushes down equal join conditions. In > > SqlToRelConverter.createJoin(), before ruction returns, it calls > > RelOptUtil.pushDownJoinConditions(). So in your example, the cast > > expression will be pushed down and it will still be an equal join. > > > > > On Apr 15, 2019, at 5:40 PM, Yuzhao Chen <yuzhao....@gmail.com> wrote: > > > > > > If we checkout the java doc for Calcite EuqiJoin, there is definition > > for it: > > > > for any join whose condition is based on column equality > > > > > > But what about if there are function calls in the equi condition > > operands ? For example: > > > Should we consider > > > > > > Select A.a, B.b from A join B on cast(A.a as int) = B.b > > > > > > as an equi join ? > > > > > > Now Calcite think it is not, which I think will lost some possibilities > > for sql plan promotion, e.g. join condition push down. > > > > > > Best, > > > Danny Chan > > > >