[
https://issues.apache.org/jira/browse/CALCITE-3630?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=17003436#comment-17003436
]
Chunwei Lei commented on CALCITE-3630:
--------------------------------------
Though we might recommend users not to use {{setImportance(0)}}, IMO, if we
already do it in this rule[1], it makes sense to do it to be consistent.
[1]
[https://github.com/apache/calcite/blob/master/core/src/main/java/org/apache/calcite/rel/rules/ReduceExpressionsRule.java#L216]
> Improve ReduceExpressionsRule
> -----------------------------
>
> Key: CALCITE-3630
> URL: https://issues.apache.org/jira/browse/CALCITE-3630
> Project: Calcite
> Issue Type: Bug
> Components: core
> Affects Versions: 1.21.0
> Reporter: Chunwei Lei
> Assignee: Chunwei Lei
> Priority: Major
> Labels: pull-request-available
> Time Spent: 0.5h
> Remaining Estimate: 0h
>
> In {{FilterReduceExpressionsRule}}, if the expression is a IS [NOT] NULL on a
> non-nullable column, then we can either remove the filter or replace it with
> an Empty(namely {{reduceNotNullableFilter}}). In such a case, we can set
> importance to 0 to reduce search space.
>
> {code:java}
> // code placeholder
> private void reduceNotNullableFilter(
> RelOptRuleCall call,
> Filter filter,
> RexNode rexNode,
> boolean reverse) {
> // If the expression is a IS [NOT] NULL on a non-nullable
> // column, then we can either remove the filter or replace
> // it with an Empty.
> boolean alwaysTrue;
> switch (rexNode.getKind()) {
> case IS_NULL:
> case IS_UNKNOWN:
> alwaysTrue = false;
> break;
> case IS_NOT_NULL:
> alwaysTrue = true;
> break;
> default:
> return;
> }
> if (reverse) {
> alwaysTrue = !alwaysTrue;
> }
> RexNode operand = ((RexCall) rexNode).getOperands().get(0);
> if (operand instanceof RexInputRef) {
> RexInputRef inputRef = (RexInputRef) operand;
> if (!inputRef.getType().isNullable()) {
> if (alwaysTrue) {
> call.transformTo(filter.getInput());
> } else {
> call.transformTo(createEmptyRelOrEquivalent(call, filter));
> }
> }
> }
> }
> }
> {code}
>
--
This message was sent by Atlassian Jira
(v8.3.4#803005)