Skip to content

Commit 01bc075

Browse files
committed
GH-5121: code simplifications in bind join implementation
- use for-each loop for iterating bindingset - use IntHashSet - use Literal#intValue instead of Integer#parseInt
1 parent 2a7075a commit 01bc075

3 files changed

Lines changed: 8 additions & 17 deletions

File tree

tools/federation/src/main/java/org/eclipse/rdf4j/federated/evaluation/iterator/BindLeftJoinIteration.java

Lines changed: 5 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -10,14 +10,13 @@
1010
*******************************************************************************/
1111
package org.eclipse.rdf4j.federated.evaluation.iterator;
1212

13-
import java.util.HashSet;
14-
import java.util.Iterator;
1513
import java.util.List;
1614
import java.util.ListIterator;
17-
import java.util.Set;
1815

16+
import org.eclipse.collections.impl.set.mutable.primitive.IntHashSet;
1917
import org.eclipse.rdf4j.common.iteration.CloseableIteration;
2018
import org.eclipse.rdf4j.common.iteration.LookAheadIteration;
19+
import org.eclipse.rdf4j.model.Literal;
2120
import org.eclipse.rdf4j.query.Binding;
2221
import org.eclipse.rdf4j.query.BindingSet;
2322
import org.eclipse.rdf4j.query.QueryEvaluationException;
@@ -42,7 +41,7 @@ public class BindLeftJoinIteration extends LookAheadIteration<BindingSet> {
4241
protected final CloseableIteration<BindingSet> iter;
4342
protected final List<BindingSet> bindings;
4443

45-
protected Set<Integer> seenBindingIndexes = new HashSet<>();
44+
protected IntHashSet seenBindingIndexes = new IntHashSet();
4645
protected final ListIterator<BindingSet> bindingsIterator;
4746

4847
public BindLeftJoinIteration(CloseableIteration<BindingSet> iter,
@@ -57,8 +56,7 @@ protected BindingSet getNextElement() {
5756

5857
if (iter.hasNext()) {
5958
var bIn = iter.next();
60-
int bIndex = Integer.parseInt(
61-
bIn.getBinding(BoundJoinVALUESConversionIteration.INDEX_BINDING_NAME).getValue().stringValue());
59+
int bIndex = ((Literal) bIn.getValue(BoundJoinVALUESConversionIteration.INDEX_BINDING_NAME)).intValue();
6260
seenBindingIndexes.add(bIndex);
6361
return convert(bIn, bIndex);
6462
}
@@ -82,9 +80,7 @@ protected void handleClose() {
8280

8381
protected BindingSet convert(BindingSet bIn, int bIndex) throws QueryEvaluationException {
8482
QueryBindingSet res = new QueryBindingSet();
85-
Iterator<Binding> bIter = bIn.iterator();
86-
while (bIter.hasNext()) {
87-
Binding b = bIter.next();
83+
for (Binding b : bIn) {
8884
if (b.getName().equals(BoundJoinVALUESConversionIteration.INDEX_BINDING_NAME)) {
8985
continue;
9086
}

tools/federation/src/main/java/org/eclipse/rdf4j/federated/evaluation/iterator/BoundJoinVALUESConversionIteration.java

Lines changed: 3 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -10,13 +10,13 @@
1010
*******************************************************************************/
1111
package org.eclipse.rdf4j.federated.evaluation.iterator;
1212

13-
import java.util.Iterator;
1413
import java.util.List;
1514

1615
import org.eclipse.rdf4j.common.iteration.CloseableIteration;
1716
import org.eclipse.rdf4j.common.iteration.ConvertingIteration;
1817
import org.eclipse.rdf4j.federated.evaluation.SparqlFederationEvalStrategy;
1918
import org.eclipse.rdf4j.federated.util.QueryStringUtil;
19+
import org.eclipse.rdf4j.model.Literal;
2020
import org.eclipse.rdf4j.query.Binding;
2121
import org.eclipse.rdf4j.query.BindingSet;
2222
import org.eclipse.rdf4j.query.QueryEvaluationException;
@@ -53,10 +53,8 @@ public BoundJoinVALUESConversionIteration(CloseableIteration<BindingSet> iter,
5353
@Override
5454
protected BindingSet convert(BindingSet bIn) throws QueryEvaluationException {
5555
QueryBindingSet res = new QueryBindingSet();
56-
int bIndex = Integer.parseInt(bIn.getBinding(INDEX_BINDING_NAME).getValue().stringValue());
57-
Iterator<Binding> bIter = bIn.iterator();
58-
while (bIter.hasNext()) {
59-
Binding b = bIter.next();
56+
int bIndex = ((Literal) bIn.getValue(BoundJoinVALUESConversionIteration.INDEX_BINDING_NAME)).intValue();
57+
for (Binding b : bIn) {
6058
if (b.getName().equals(INDEX_BINDING_NAME)) {
6159
continue;
6260
}

tools/federation/src/test/java/org/eclipse/rdf4j/federated/BindLeftJoinTests.java

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,6 @@
1414
import java.util.Set;
1515

1616
import org.eclipse.rdf4j.common.iteration.Iterations;
17-
import org.eclipse.rdf4j.federated.monitoring.MonitoringUtil;
1817
import org.eclipse.rdf4j.model.util.Values;
1918
import org.eclipse.rdf4j.model.vocabulary.FOAF;
2019
import org.eclipse.rdf4j.model.vocabulary.OWL;
@@ -213,8 +212,6 @@ public void testBoundLeftJoin_stmt_nonExclusive_boundCheck(boolean bindLeftJoinO
213212

214213
Assertions.assertEquals(30, bindings.size());
215214

216-
MonitoringUtil.printMonitoringInformation(federationContext());
217-
218215
for (int i = 1; i <= 30; i++) {
219216
var p = Values.iri("http://ex.com/p" + i);
220217
var otherP = Values.iri("http://other.com/p" + i);

0 commit comments

Comments
 (0)