public void onMatch(RelOptRuleCall call, SqlDialect dialect) {
LOGGER.debug("MySplitFilter.onMatch has been called");
final HiveFilter filter = call.rel(0);
RexCall callExpression = (RexCall) filter.getCondition();
FilterSupportedFunctionsVisitor visitor = new FilterSupportedFunctionsVisitor(dialect);
callExpression.accept(visitor);
ArrayList<RexCall> validJdbcNode = visitor.getValidJdbcNode();
ArrayList<RexCall> invalidJdbcNode = visitor.getInvalidJdbcNode();
assert validJdbcNode.size() != 0 && invalidJdbcNode.size() != 0;
final RexBuilder rexBuilder = filter.getCluster().getRexBuilder();
RexNode validCondition;
if (validJdbcNode.size() == 1) {
validCondition = validJdbcNode.get(0);
} else {
validCondition = rexBuilder.makeCall(SqlStdOperatorTable.AND, validJdbcNode);
}
HiveFilter newJdbcValidFilter = new HiveFilter(filter.getCluster(), filter.getTraitSet(), filter.getInput(),
validCondition);
RexNode invalidCondition;
if (invalidJdbcNode.size() == 1) {
invalidCondition = invalidJdbcNode.get(0);
} else {
invalidCondition = rexBuilder.makeCall(SqlStdOperatorTable.AND, invalidJdbcNode);
}
HiveFilter newJdbcInvalidFilter = new HiveFilter(filter.getCluster(), filter.getTraitSet(),
newJdbcValidFilter, invalidCondition);
call.transformTo(newJdbcInvalidFilter);
}