Ruben Q L created CALCITE-4094: ---------------------------------- Summary: Allow SqlUserDefinedFunction to define an optional 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
FilterJoinRule performs some optimizations based on RelOptUitl#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 conditions pushed on its right input. In order to achieve this, the utility class {{Strong}} defines a certain {{Policy}} map, depending on the {{SqlKind}} of the {{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 for these ones 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#isNull}} so that these functions can also benefit from this optimization. -- This message was sent by Atlassian Jira (v8.3.4#803005)