}
@Override
public QueryResult join(final Indices indices, final Bindings bindings) {
// a fetch as needed distributed join strategy is implemented
final QueryClientIndices queryClientIndices = (QueryClientIndices) indices;
QueryResult result = QueryResult.createInstance();
result.add(bindings);
for (final TriplePattern pattern : this.triplePatterns) {
final QueryResult iResult = result;
result = QueryResult.createInstance();
for(final Bindings b: iResult){
final TriplePattern tpWithReplacedVariables = this.determineTriplePatternToEvaluate(pattern, b);
final QueryResult resultOfTP = queryClientIndices.evaluateTriplePattern(tpWithReplacedVariables);
if(resultOfTP!=null){
result.addAll(this.addBindings(b, resultOfTP));
}
}
}