public IndexConditionInfo indexConditionRelatedToFields(List<LogicalExpression> relevantPaths, RexNode condition) {
RewriteCombineBinaryOperators reverseVisitor =
new RewriteCombineBinaryOperators(true, builder);
condition = condition.accept(reverseVisitor);
RexSeparator separator = new RexSeparator(relevantPaths, scan, builder);
RexNode indexCondition = separator.getSeparatedCondition(condition);
if (indexCondition == null) {
return new IndexConditionInfo(null, null, false);
}
List<RexNode> conjuncts = RelOptUtil.conjunctions(condition);
List<RexNode> indexConjuncts = RelOptUtil.conjunctions(indexCondition);
for (RexNode indexConjunction: indexConjuncts) {
RexUtil.removeAll(conjuncts, indexConjunction);
}
RexNode remainderCondition = RexUtil.composeConjunction(builder, conjuncts, false);
indexCondition = indexCondition.accept(reverseVisitor);
return new IndexConditionInfo(indexCondition, remainderCondition, true);
}