suibianwanwan created CALCITE-6614:
--------------------------------------

             Summary: InnodbFilterRule incorrectly constructs condition when 
creating InnodbFilter 
                 Key: CALCITE-6614
                 URL: https://issues.apache.org/jira/browse/CALCITE-6614
             Project: Calcite
          Issue Type: Bug
            Reporter: suibianwanwan


InnodbFilter only use the pushDownCondition when it executes.
{code:java}
@Override public void implement(Implementor implementor) {
  implementor.visitChild(0, getInput());
  implementor.setIndexCondition(indexCondition);
} {code}
However, in InnodbFilterRule, the filter condition is constructed using the 
entire condition, which may cause some rules to be incorrectly optimised
{code:java}
 RelNode convert(LogicalFilter filter, InnodbTableScan scan) {

      final IndexCondition indexCondition =
          translator.translateMatch(filter.getCondition());

      InnodbFilter innodbFilter =
          InnodbFilter.create(cluster, traitSet,
              convert(filter.getInput(), InnodbRel.CONVENTION),
              // wrong setting
              filter.getCondition(), indexCondition, tableDef,
              scan.getForceIndexName());

      if (innodbFilter.indexCondition.canPushDown()) {
        return LogicalFilter.create(innodbFilter,
            RexUtil.composeConjunction(cluster.getRexBuilder(),
                indexCondition.getRemainderConditions()));
      }
      return filter;
    }
{code}



--
This message was sent by Atlassian Jira
(v8.20.10#820010)

Reply via email to