[ https://issues.apache.org/jira/browse/CALCITE-3544?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]
Stamatis Zampetakis updated CALCITE-3544: ----------------------------------------- Summary: RexSimplify does not exploit all known predicates (was: RexSimplify does not simpilfy RexNode completely) > RexSimplify does not exploit all known predicates > ------------------------------------------------- > > Key: CALCITE-3544 > URL: https://issues.apache.org/jira/browse/CALCITE-3544 > Project: Calcite > Issue Type: Improvement > Components: core > Affects Versions: 1.21.0 > Reporter: Chunwei Lei > Assignee: Chunwei Lei > Priority: Major > > When there are multiple predicates in RexSimplify, only the first predicates > will be used to simplify the RexNode. The following test can reproduce. > {code:java} > // code placeholder > @Test public void testSimplifyRangeWithMultiPredicates() { > RelDataType type = typeFactory.createSqlType(SqlTypeName.INTEGER); > final RexLiteral c1 = rexBuilder.makeExactLiteral(BigDecimal.ONE); > final RexLiteral c5 = rexBuilder.makeExactLiteral(BigDecimal.valueOf(5L)); > final RexLiteral c9 = rexBuilder.makeExactLiteral(BigDecimal.valueOf(9L)); > final RexNode ref = rexBuilder.makeInputRef(type, 1); > final RexNode pred1 = rexBuilder.makeCall(SqlStdOperatorTable.GREATER_THAN, > ref, c1); > final RexNode pred2 = rexBuilder.makeCall(SqlStdOperatorTable.LESS_THAN, > ref, c5); > List<RexNode> predicates = new ArrayList<>(); > predicates.add(pred1); > predicates.add(pred2); > RelOptPredicateList relOptPredicateList = > RelOptPredicateList.of(rexBuilder, predicates); > RexNode node = rexBuilder.makeCall(SqlStdOperatorTable.GREATER_THAN, ref, > c9); > final RexSimplify simplify = > new RexSimplify(rexBuilder, relOptPredicateList, RexUtil.EXECUTOR) > .withParanoid(true); > node = simplify.simplify(node); > assertThat(node, is(falseLiteral)); > } > {code} -- This message was sent by Atlassian Jira (v8.3.4#803005)