You are viewing a plain text version of this content. The canonical link for it is here.
Posted to issues@calcite.apache.org by "Ruben Q L (Jira)" <ji...@apache.org> on 2020/06/30 15:37:00 UTC

[jira] [Commented] (CALCITE-4094) Allow SqlOperator of SqlKind#OTHER_FUNCTION to define a Strong.Policy

    [ https://issues.apache.org/jira/browse/CALCITE-4094?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=17148780#comment-17148780 ] 

Ruben Q L commented on CALCITE-4094:
------------------------------------

[~danny0405], I have started to work on a patch (https://github.com/apache/calcite/pull/2049), please take a look if you have some time.

> 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)