Details
-
Bug
-
Status: Closed
-
Major
-
Resolution: Fixed
-
1.21.0
Description
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 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)); } } } } }
Attachments
Issue Links
- is related to
-
CALCITE-4964 Reduce recursion when push predicate into CASE
- Open
- links to