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)