@Override
public boolean check(OperatorPlan matched) throws FrontendException {
loLoad = (LOLoad)matched.getSources().get(0);
// Match filter.
List<Operator> succeds = currentPlan.getSuccessors( loLoad );
if( succeds == null || succeds.size() == 0 || !( succeds.get(0) instanceof LOFilter ) )
return false;
loFilter = (LOFilter) succeds.get(0);
// Filter has dependency other than load, skip optimization
if (currentPlan.getSoftLinkPredecessors(loFilter) != null)
return false;
// we have to check more only if LoadFunc implements LoadPredicatePushdown
loadFunc = loLoad.getLoadFunc();
if (!(loadFunc instanceof LoadPredicatePushdown)) {
return false;
}
loadPredPushdown = (LoadPredicatePushdown) loadFunc;
try {
predicateFields = loadPredPushdown.getPredicateFields(loLoad.getFileSpec()
.getFileName(), new Job(loLoad.getConfiguration()));
} catch (IOException e) {
throw new FrontendException(e);
}
if (predicateFields == null || predicateFields.size() == 0) {
return false;
}
return true;
}