You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@jena.apache.org by an...@apache.org on 2026/02/21 09:10:30 UTC
(jena) 05/05: GH-3755: Make QueryIteratorBase.requestCancel() optional
This is an automated email from the ASF dual-hosted git repository.
andy pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/jena.git
commit 504143fbd23a19383a0e9ca889f3dea099bd397e
Author: Andy Seaborne <an...@apache.org>
AuthorDate: Wed Feb 18 17:00:52 2026 +0000
GH-3755: Make QueryIteratorBase.requestCancel() optional
---
.../jena/sparql/engine/iterator/QueryIter.java | 2 +-
.../engine/iterator/QueryIterExtendByVar.java | 3 ---
.../engine/iterator/QueryIterNullIterator.java | 3 ---
.../engine/iterator/QueryIterPlainWrapper.java | 3 ---
.../sparql/engine/iterator/QueryIterUnfold.java | 3 ---
.../sparql/engine/iterator/QueryIterYieldN.java | 3 ---
.../sparql/engine/iterator/QueryIteratorBase.java | 4 ++--
.../engine/iterator/QueryIteratorResultSet.java | 2 --
.../sparql/engine/iterator/TestCancelDistinct.java | 5 -----
.../sparql/engine/iterator/TestQueryIterSort.java | 25 +++++++++-------------
.../iterator/TestSortedDataBagCancellation.java | 4 ----
11 files changed, 13 insertions(+), 44 deletions(-)
diff --git a/jena-arq/src/main/java/org/apache/jena/sparql/engine/iterator/QueryIter.java b/jena-arq/src/main/java/org/apache/jena/sparql/engine/iterator/QueryIter.java
index 51b4e8bb88..b206e8522a 100644
--- a/jena-arq/src/main/java/org/apache/jena/sparql/engine/iterator/QueryIter.java
+++ b/jena-arq/src/main/java/org/apache/jena/sparql/engine/iterator/QueryIter.java
@@ -37,7 +37,7 @@ import org.apache.jena.sparql.serializer.SerializationContext ;
*/
public abstract class QueryIter extends QueryIteratorBase
{
- // Volatile just to make it safe to concurrent updates
+ // Volatile to make it safe against concurrent updates
// It does not matter too much if it is wrong - it's used as a label.
private volatile static int iteratorCounter = 0 ;
private int iteratorNumber = (iteratorCounter++) ;
diff --git a/jena-arq/src/main/java/org/apache/jena/sparql/engine/iterator/QueryIterExtendByVar.java b/jena-arq/src/main/java/org/apache/jena/sparql/engine/iterator/QueryIterExtendByVar.java
index 52a211abd8..8bea908801 100644
--- a/jena-arq/src/main/java/org/apache/jena/sparql/engine/iterator/QueryIterExtendByVar.java
+++ b/jena-arq/src/main/java/org/apache/jena/sparql/engine/iterator/QueryIterExtendByVar.java
@@ -68,7 +68,4 @@ public class QueryIterExtendByVar extends QueryIter
protected void closeIterator() {
Iter.close(members);
}
-
- @Override
- protected void requestCancel() {}
}
diff --git a/jena-arq/src/main/java/org/apache/jena/sparql/engine/iterator/QueryIterNullIterator.java b/jena-arq/src/main/java/org/apache/jena/sparql/engine/iterator/QueryIterNullIterator.java
index 11e8faa445..e64019055b 100644
--- a/jena-arq/src/main/java/org/apache/jena/sparql/engine/iterator/QueryIterNullIterator.java
+++ b/jena-arq/src/main/java/org/apache/jena/sparql/engine/iterator/QueryIterNullIterator.java
@@ -50,9 +50,6 @@ public class QueryIterNullIterator extends QueryIter
@Override
protected void closeIterator() {}
- @Override
- protected void requestCancel() {}
-
@Override
public void output(IndentedWriter out, SerializationContext sCxt) {
out.println(Lib.className(this));
diff --git a/jena-arq/src/main/java/org/apache/jena/sparql/engine/iterator/QueryIterPlainWrapper.java b/jena-arq/src/main/java/org/apache/jena/sparql/engine/iterator/QueryIterPlainWrapper.java
index 62c235e0e2..14f4f85b82 100644
--- a/jena-arq/src/main/java/org/apache/jena/sparql/engine/iterator/QueryIterPlainWrapper.java
+++ b/jena-arq/src/main/java/org/apache/jena/sparql/engine/iterator/QueryIterPlainWrapper.java
@@ -86,9 +86,6 @@ public class QueryIterPlainWrapper extends QueryIter
}
}
- @Override
- protected void requestCancel() {}
-
@Override
public void output(IndentedWriter out, SerializationContext sCxt)
{ out.println(Lib.className(this)); }
diff --git a/jena-arq/src/main/java/org/apache/jena/sparql/engine/iterator/QueryIterUnfold.java b/jena-arq/src/main/java/org/apache/jena/sparql/engine/iterator/QueryIterUnfold.java
index 324bd60fa0..c233515307 100644
--- a/jena-arq/src/main/java/org/apache/jena/sparql/engine/iterator/QueryIterUnfold.java
+++ b/jena-arq/src/main/java/org/apache/jena/sparql/engine/iterator/QueryIterUnfold.java
@@ -109,9 +109,6 @@ public class QueryIterUnfold extends QueryIterRepeatApply
@Override
protected boolean hasNextBinding() { return itElmts.hasNext(); }
- @Override
- protected void requestCancel() { } // nothing to do really
-
@Override
protected void closeIterator() { } // nothing to do really
}
diff --git a/jena-arq/src/main/java/org/apache/jena/sparql/engine/iterator/QueryIterYieldN.java b/jena-arq/src/main/java/org/apache/jena/sparql/engine/iterator/QueryIterYieldN.java
index 526e2c5257..b9c3b1a5d6 100644
--- a/jena-arq/src/main/java/org/apache/jena/sparql/engine/iterator/QueryIterYieldN.java
+++ b/jena-arq/src/main/java/org/apache/jena/sparql/engine/iterator/QueryIterYieldN.java
@@ -69,9 +69,6 @@ public class QueryIterYieldN extends QueryIter {
// binding = null ;
}
- @Override
- protected void requestCancel() {}
-
@Override
public void output(IndentedWriter out, SerializationContext sCxt) {
out.print("QueryIterYieldN: " + limitYielded + " of " + binding);
diff --git a/jena-arq/src/main/java/org/apache/jena/sparql/engine/iterator/QueryIteratorBase.java b/jena-arq/src/main/java/org/apache/jena/sparql/engine/iterator/QueryIteratorBase.java
index 1955fee4eb..d5fdddd74a 100644
--- a/jena-arq/src/main/java/org/apache/jena/sparql/engine/iterator/QueryIteratorBase.java
+++ b/jena-arq/src/main/java/org/apache/jena/sparql/engine/iterator/QueryIteratorBase.java
@@ -98,12 +98,12 @@ public abstract class QueryIteratorBase
/**
* Propagates the cancellation request - called asynchronously with the iterator itself.
+ * <p>
* Implementations of {@code requestCancel()} must be aware that
* the iterator maybe concurrently in-progress on the iteration thread,
* that is, it may be inside {@link #hasNextBinding} or {@link #nextBinding}.
- *
*/
- protected abstract void requestCancel();
+ protected void requestCancel() {}
/* package */ boolean getRequestingCancel() {
// Testing only.
diff --git a/jena-arq/src/main/java/org/apache/jena/sparql/engine/iterator/QueryIteratorResultSet.java b/jena-arq/src/main/java/org/apache/jena/sparql/engine/iterator/QueryIteratorResultSet.java
index 3a5e1d206b..04dc9b77f7 100644
--- a/jena-arq/src/main/java/org/apache/jena/sparql/engine/iterator/QueryIteratorResultSet.java
+++ b/jena-arq/src/main/java/org/apache/jena/sparql/engine/iterator/QueryIteratorResultSet.java
@@ -35,8 +35,6 @@ public class QueryIteratorResultSet extends QueryIteratorBase
@Override
protected void closeIterator() { resultSet = null; }
@Override
- protected void requestCancel() { }
- @Override
protected boolean hasNextBinding() { return resultSet.hasNext(); }
@Override
protected Binding moveToNextBinding() { return resultSet.nextBinding(); }
diff --git a/jena-arq/src/test/java/org/apache/jena/sparql/engine/iterator/TestCancelDistinct.java b/jena-arq/src/test/java/org/apache/jena/sparql/engine/iterator/TestCancelDistinct.java
index f03878c78d..552f619cdb 100644
--- a/jena-arq/src/test/java/org/apache/jena/sparql/engine/iterator/TestCancelDistinct.java
+++ b/jena-arq/src/test/java/org/apache/jena/sparql/engine/iterator/TestCancelDistinct.java
@@ -78,11 +78,6 @@ public class TestCancelDistinct {
protected void closeIterator() {
}
-
- @Override
- protected void requestCancel() {
-
- }
}
/**
diff --git a/jena-arq/src/test/java/org/apache/jena/sparql/engine/iterator/TestQueryIterSort.java b/jena-arq/src/test/java/org/apache/jena/sparql/engine/iterator/TestQueryIterSort.java
index b2a7b974fa..7b5e4d49b7 100644
--- a/jena-arq/src/test/java/org/apache/jena/sparql/engine/iterator/TestQueryIterSort.java
+++ b/jena-arq/src/test/java/org/apache/jena/sparql/engine/iterator/TestQueryIterSort.java
@@ -57,7 +57,7 @@ public class TestQueryIterSort {
private Random random;
private List<Binding> unsorted;
private BindingComparator comparator;
- private CallbackIterator iterator;
+ private QueryIteratorCallback iterator;
@BeforeEach
public void setup() {
@@ -78,7 +78,7 @@ public class TestQueryIterSort {
List<SortCondition> conditions = new ArrayList<>();
conditions.add(new SortCondition(new ExprVar("8"), Query.ORDER_ASCENDING));
comparator = new BindingComparator(conditions);
- iterator = new CallbackIterator(unsorted.iterator(), 25, null);
+ iterator = new QueryIteratorCallback(unsorted.iterator(), 25, null);
iterator.setCallback(() -> {
throw new QueryCancelledException();
});
@@ -244,7 +244,7 @@ public class TestQueryIterSort {
@Test
public void testCancelInterruptsExternalSortAtStartOfIteration() {
- iterator = new CallbackIterator(unsorted.iterator(), 25, null);
+ iterator = new QueryIteratorCallback(unsorted.iterator(), 25, null);
iterator.setCallback(() -> {});
assertEquals(0, iterator.getReturnedElementCount());
Context context = new Context();
@@ -321,21 +321,22 @@ public class TestQueryIterSort {
return builder.toString();
}
- private static class CallbackIterator implements QueryIterator {
+ // Call a Runnable after a trigger number of operations have been called.
+ private static class QueryIteratorCallback implements QueryIterator {
int elementsReturned = 0;
- Callback callback;
+ Runnable callback;
int trigger;
Iterator<Binding> delegate;
boolean canceled = false;
boolean closed = false;
- public CallbackIterator(Iterator<Binding> delegate, int trigger, Callback callback) {
+ public QueryIteratorCallback(Iterator<Binding> delegate, int trigger, Runnable callback) {
this.delegate = delegate;
this.callback = callback;
this.trigger = trigger;
}
- public void setCallback(Callback callback) {
+ public void setCallback(Runnable callback) {
this.callback = callback;
}
@@ -351,7 +352,7 @@ public class TestQueryIterSort {
@Override
public Binding next() {
if ( elementsReturned++ >= trigger ) {
- callback.call();
+ callback.run();
}
return delegate.next();
}
@@ -376,7 +377,7 @@ public class TestQueryIterSort {
@Override
public Binding nextBinding() {
if ( elementsReturned++ >= trigger )
- callback.call();
+ callback.run();
return delegate.next();
}
@@ -404,11 +405,5 @@ public class TestQueryIterSort {
public void output(IndentedWriter out) {
throw new ARQNotImplemented();
}
-
- }
-
- public interface Callback {
- public void call();
}
-
}
diff --git a/jena-arq/src/test/java/org/apache/jena/sparql/engine/iterator/TestSortedDataBagCancellation.java b/jena-arq/src/test/java/org/apache/jena/sparql/engine/iterator/TestSortedDataBagCancellation.java
index 75964dc431..94877ebbe7 100644
--- a/jena-arq/src/test/java/org/apache/jena/sparql/engine/iterator/TestSortedDataBagCancellation.java
+++ b/jena-arq/src/test/java/org/apache/jena/sparql/engine/iterator/TestSortedDataBagCancellation.java
@@ -179,10 +179,6 @@ public class TestSortedDataBagCancellation {
@Override
protected void closeIterator() {
}
-
- @Override
- protected void requestCancel() {
- }
}
/**