public void transform(OperatorPlan matched) throws IOException {
subPlan = new OperatorSubPlan(currentPlan);
// split one LOFilter into 2 by "AND"
LOFilter filter = (LOFilter)matched.getSources().get(0);
LogicalExpressionPlan cond = filter.getFilterPlan();
LogicalExpression root = (LogicalExpression) cond.getSources().get(0);
if (!(root instanceof AndExpression)) {
return;
}
LogicalExpressionPlan op1 = new LogicalExpressionPlan();
op1.add((LogicalExpression)cond.getSuccessors(root).get(0));
fillSubPlan(cond, op1, (LogicalExpression)cond.getSuccessors(root).get(0));
LogicalExpressionPlan op2 = new LogicalExpressionPlan();
op2.add((LogicalExpression)cond.getSuccessors(root).get(1));
fillSubPlan(cond, op2, (LogicalExpression)cond.getSuccessors(root).get(1));
filter.setFilterPlan(op1);
LOFilter filter2 = new LOFilter((LogicalPlan)currentPlan, op2);
currentPlan.add(filter2);