[ https://issues.apache.org/jira/browse/CALCITE-4094?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=17149195#comment-17149195 ]
Ruben Q L edited comment on CALCITE-4094 at 7/1/20, 8:31 AM: ------------------------------------------------------------- Thanks for the feedback [~zabetak]. To be honest, this is something that crossed my mind when I started to look into this issue. However, I think going in this direction would require a big amount of work in refactoring and adapting the code, and I do not have the time to carry it out right now, that is why I worked in a "quick fix" solution for this issue. But I definitely agree with you, what you propose is a solution worth exploring, so I will create a new Jira to study and address the {{Strong.Policy}} - {{NullPolicy}} unification. UDPATE: created CALCITE-4099 was (Author: rubenql): Thanks for the feedback [~zabetak]. To be honest, this is something that crossed my mind when I started to look into this issue. However, I think going in this direction would require a big amount of work in refactoring and adapting the code, and I do not have the time to carry it out right now, that is why I worked in a "quick fix" solution for this issue. But I definitely agree with you, what you propose is a solution worth exploring, so I will create a new Jira to study and address the {{Strong.Policy}} - {{NullPolicy}} unification. > Allow SqlOperator of SqlKind#OTHER_FUNCTION to define a Strong.Policy > --------------------------------------------------------------------- > > Key: CALCITE-4094 > URL: https://issues.apache.org/jira/browse/CALCITE-4094 > Project: Calcite > Issue Type: Improvement > Components: core > Reporter: Ruben Q L > Assignee: Ruben Q L > Priority: Major > Labels: pull-request-available > Fix For: 1.24.0 > > > {{FilterJoinRule}} performs some optimizations based on > {{RelOptUtil#simplifyJoin}}. Specifically, this part of the code: > {code} > if (joinType.generatesNullsOnRight() > && Strong.isNotTrue(filter, rightBitmap)) { > joinType = joinType.cancelNullsOnRight(); > } > {code} > allows e.g. a LEFT join with a condition on its RHS to be transformed into an > INNER join, with the condition pushed on its right input. > In order to achieve this, the utility class {{Strong}} defines a certain > {{Policy}} map, depending on the {{SqlKind}} of a {{RexNode}} (i.e. depending > on the filter condition). In case of operators such as {{EQUALS}}, > {{NOT_EQUALS}}, {{LESS_THAN}}, etc, it defines {{Policy.ANY}} (i.e. > expression is null if and only if at least one of its arguments is null). In > case of a left join with conditions with this policy on the right-hand-side, > the join gets simplified by this module because of the nullability of the > right columns. However, in the case of {{SqlUserDefinedFunction}} the policy > is the default {{Policy.AS_IS}}, which prevents the simplification from > happening. > It is proposed to enrich {{SqlUserDefinedFunction}} with an optional > {{Strong.Policy}}, and adapt {{Strong}} code so that these functions can also > benefit from this simplification. -- This message was sent by Atlassian Jira (v8.3.4#803005)