[
https://issues.apache.org/jira/browse/CALCITE-6614?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
]
Mihai Budiu resolved CALCITE-6614.
----------------------------------
Fix Version/s: 1.39.0
Resolution: Fixed
Fixed in
https://github.com/apache/calcite/commit/f14e944477674d987b91a4edacadb58c759eb74d
Thank you for the contribution, [~suibianwanwan33]
> 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
> Priority: Major
> Fix For: 1.39.0
>
>
> 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)