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 <[email protected]> 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() { - } } /**
