[ 
https://issues.apache.org/jira/browse/CALCITE-4094?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
 ]

Ruben Q L updated CALCITE-4094:
-------------------------------
    Description: 
{{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 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 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 simplification.

  was:
{{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 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 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.


> 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
>            Priority: Major
>
> {{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 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 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 simplification.



--
This message was sent by Atlassian Jira
(v8.3.4#803005)

Reply via email to