Igor Guzenko created CALCITE-3525:
-------------------------------------

             Summary: RexSimplify: eliminate redundant rex calls in OR
                 Key: CALCITE-3525
                 URL: https://issues.apache.org/jira/browse/CALCITE-3525
             Project: Calcite
          Issue Type: Improvement
            Reporter: Igor Guzenko
            Assignee: Igor Guzenko


Sample case to reproduce in {code}RexProgramTest.simplifyOrTerms{code}: 

{code:java}
    // (a=1 or a=2 or (arr[1]>4 and arr[1]<3 and a=3)) => a=1 or a=2
    final RelDataType intArrayType = typeFactory.createArrayType(intType, -1);
    final RexInputRef ref0 = rexBuilder.makeInputRef(intType, 0);
    final RexInputRef ref3 = rexBuilder.makeInputRef(intArrayType, 3);
    final RexCall itm1 = (RexCall) rexBuilder.makeCall(intType, 
SqlStdOperatorTable.ITEM,
        ImmutableList.of(ref3, literal1));
    simplify = this.simplify.withParanoid(false);
    checkSimplifyFilter(
        or(
            eq(ref0, literal1),
            eq(ref0, literal2),
            and(
                gt(itm1, literal4),
                lt(itm1, literal3),
                eq(ref0, literal3)
            )
        ),
        "OR(=($0, 1), =($0, 2))"
    );
    simplify = simplify.withParanoid(true);
{code}




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

Reply via email to