[
https://issues.apache.org/jira/browse/CALCITE-4094?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=17153541#comment-17153541
]
Ruben Q L edited comment on CALCITE-4094 at 7/8/20, 12:09 PM:
--------------------------------------------------------------
Unfortunately, it is not that simple, since {{SqlOperatorBaseTest}} checks
SqlOperator, and not RexNode / RelNode, so we would need to include a
SqlToRelConverter to carry out the check. I guess it would be theoretically
possible, but I have the impression that it would fall out of the scope of the
test.
However, the impacted test ({{SqlOperatorBaseTest#testArgumentBounds}}) is
currently disabled ("Too slow and not really a unit test"), so maybe we could
just remove the (now) deprecated part.
was (Author: rubenql):
Unfortunately, it is not that simple, since {{{{SqlOperatorBaseTest}}}} checks
SqlOperator, and not RexNode / RelNode, so we would need to include a
SqlToRelConverter to carry out the check. I guess it would be theoretically
possible, but I have the impression that it would fall out of the scope of the
test.
However, the impacted test ({{SqlOperatorBaseTest#testArgumentBounds}}) is
currently disabled ("Too slow and not really a unit test"), so maybe we could
just remove the (now) deprecated part.
> 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
>
> Time Spent: 0.5h
> Remaining Estimate: 0h
>
> {{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)