problemVars.retainAll(optionalVars);
problemVars.removeAll(leftVars);
if (problemVars.isEmpty()) {
// left join is "well designed"
return new LeftJoinIterator(this, leftJoin, bindings);
}
else {
QueryBindingSet filteredBindings = new QueryBindingSet(bindings);
filteredBindings.removeAll(problemVars);
CloseableIteration<BindingSet, QueryEvaluationException> iter;
iter = new LeftJoinIterator(this, leftJoin, filteredBindings);
iter = new CompatibleBindingSetFilter(iter, bindings);
return iter;
}
}