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() {
-        }
     }
 
     /**

Reply via email to