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 aefa099b0c91afbda29b83a91b28362d3c009b00
Author: Andy Seaborne <[email protected]>
AuthorDate: Thu May 22 13:05:18 2025 +0100

    Add BufferingCtl.reset
---
 .../apache/jena/system/buffering/BufferingCtl.java  |  8 ++++++++
 .../system/buffering/BufferingDatasetGraph.java     | 19 +++++++++++++++----
 .../jena/system/buffering/BufferingGraph.java       | 21 ++++++++++++++++-----
 .../jena/system/buffering/BufferingPrefixMap.java   |  5 ++++-
 .../system/buffering/BufferingPrefixMapping.java    |  4 ++++
 .../system/buffering/TestBufferingDatasetGraph.java |  9 ++++++++-
 .../jena/system/buffering/TestBufferingGraph.java   | 10 ++++++++++
 7 files changed, 65 insertions(+), 11 deletions(-)

diff --git 
a/jena-arq/src/main/java/org/apache/jena/system/buffering/BufferingCtl.java 
b/jena-arq/src/main/java/org/apache/jena/system/buffering/BufferingCtl.java
index c217475dde..8c61ea154b 100644
--- a/jena-arq/src/main/java/org/apache/jena/system/buffering/BufferingCtl.java
+++ b/jena-arq/src/main/java/org/apache/jena/system/buffering/BufferingCtl.java
@@ -19,5 +19,13 @@
 package org.apache.jena.system.buffering;
 
 public interface BufferingCtl {
+    /**
+     * Push the buffered changes into the base object
+     */
     public void flush() ;
+
+    /**
+     * Remove any changes that are buffered.
+     */
+    public void reset() ;
 }
diff --git 
a/jena-arq/src/main/java/org/apache/jena/system/buffering/BufferingDatasetGraph.java
 
b/jena-arq/src/main/java/org/apache/jena/system/buffering/BufferingDatasetGraph.java
index 5c75d32456..d6d4c870de 100644
--- 
a/jena-arq/src/main/java/org/apache/jena/system/buffering/BufferingDatasetGraph.java
+++ 
b/jena-arq/src/main/java/org/apache/jena/system/buffering/BufferingDatasetGraph.java
@@ -165,6 +165,19 @@ public class BufferingDatasetGraph extends 
DatasetGraphTriplesQuads implements D
         accessState = AccessState.NONE;
     }
 
+    @Override
+    public void reset() {
+        resetBuffered();
+        prefixes.reset();
+    }
+
+    private void resetBuffered() {
+        addedTriples.clear();
+        deletedTriples.clear();
+        addedQuads.clear();
+        deletedQuads.clear();
+    }
+
     /**
      * Send the changes to the underlying store, drop the buffered changes 
that have
      * been flushed, but do not end the buffering session.
@@ -178,10 +191,8 @@ public class BufferingDatasetGraph extends 
DatasetGraphTriplesQuads implements D
             addedQuads.forEach(baseDSG::add);
             deletedQuads.forEach(baseDSG::delete);
 
-            addedTriples.clear();
-            deletedTriples.clear();
-            addedQuads.clear();
-            deletedQuads.clear();
+            resetBuffered();
+
             prefixes.flush();
             writeTxnCount = 0;
         });
diff --git 
a/jena-arq/src/main/java/org/apache/jena/system/buffering/BufferingGraph.java 
b/jena-arq/src/main/java/org/apache/jena/system/buffering/BufferingGraph.java
index b5d35979c1..96731d16e5 100644
--- 
a/jena-arq/src/main/java/org/apache/jena/system/buffering/BufferingGraph.java
+++ 
b/jena-arq/src/main/java/org/apache/jena/system/buffering/BufferingGraph.java
@@ -84,17 +84,28 @@ public class BufferingGraph extends GraphWrapper implements 
BufferingCtl {
     private void flushDirect(Graph base) {
         deletedTriples.forEach(base::delete);
         addedGraph.find().forEachRemaining(base::add);
-        deletedTriples.clear();
-        addedGraph.clear();
-        prefixMapping.flush();
+        prefixMapping.flush();  // Does a reset().
+        resetBufferedTriples();
     }
 
-    private void updateOperation() {
+    /**
+     *  Remove all recorded added and deleted triples and also reset the 
buffering prefixes.
+     */
+    @Override
+    public void reset() {
+        resetBufferedTriples();
+        prefixMapping.reset();
     }
 
-    private void readOperation() {
+    private void resetBufferedTriples() {
+        deletedTriples.clear();
+        addedGraph.clear();
     }
 
+    protected void updateOperation() {}
+
+    protected void readOperation() {}
+
 
     @Override
     public void add(Triple t) {
diff --git 
a/jena-arq/src/main/java/org/apache/jena/system/buffering/BufferingPrefixMap.java
 
b/jena-arq/src/main/java/org/apache/jena/system/buffering/BufferingPrefixMap.java
index 56af5a862b..234ee14e72 100644
--- 
a/jena-arq/src/main/java/org/apache/jena/system/buffering/BufferingPrefixMap.java
+++ 
b/jena-arq/src/main/java/org/apache/jena/system/buffering/BufferingPrefixMap.java
@@ -126,9 +126,12 @@ public class BufferingPrefixMap extends PrefixMapBase {
     public void flush() {
         addedMappings.forEach(base::add);
         deletedMappings.forEach(base::delete);
+        reset();
+    }
+
+    public void reset() {
         addedMappings.clear();
         deletedMappings.clear();
-
     }
 
     public String state() {
diff --git 
a/jena-arq/src/main/java/org/apache/jena/system/buffering/BufferingPrefixMapping.java
 
b/jena-arq/src/main/java/org/apache/jena/system/buffering/BufferingPrefixMapping.java
index 7f29bb13e9..31f3976689 100644
--- 
a/jena-arq/src/main/java/org/apache/jena/system/buffering/BufferingPrefixMapping.java
+++ 
b/jena-arq/src/main/java/org/apache/jena/system/buffering/BufferingPrefixMapping.java
@@ -49,7 +49,11 @@ public class BufferingPrefixMapping extends 
PrefixMappingBase implements Bufferi
     public void flush() {
         deleted.forEach(prefix->other.removeNsPrefix(prefix));
         other.setNsPrefixes(added);
+        reset();
+    }
 
+    @Override
+    public void reset() {
         deleted.clear();
         added.clearNsPrefixMap();
     }
diff --git 
a/jena-arq/src/test/java/org/apache/jena/system/buffering/TestBufferingDatasetGraph.java
 
b/jena-arq/src/test/java/org/apache/jena/system/buffering/TestBufferingDatasetGraph.java
index 37c7ab31a0..17253f6750 100644
--- 
a/jena-arq/src/test/java/org/apache/jena/system/buffering/TestBufferingDatasetGraph.java
+++ 
b/jena-arq/src/test/java/org/apache/jena/system/buffering/TestBufferingDatasetGraph.java
@@ -181,5 +181,12 @@ public class TestBufferingDatasetGraph {
         });
     }
 
-
+    @Test
+    public void buffered_5() {
+        Quad quad = SSE.parseQuad("(:g :s :p 1)");
+        buffered.add(quad);
+        assertFalse(buffered.isEmpty());
+        buffered.reset();
+        assertTrue(buffered.isEmpty());
+    }
 }
diff --git 
a/jena-arq/src/test/java/org/apache/jena/system/buffering/TestBufferingGraph.java
 
b/jena-arq/src/test/java/org/apache/jena/system/buffering/TestBufferingGraph.java
index 502544ccf8..61e0311b69 100644
--- 
a/jena-arq/src/test/java/org/apache/jena/system/buffering/TestBufferingGraph.java
+++ 
b/jena-arq/src/test/java/org/apache/jena/system/buffering/TestBufferingGraph.java
@@ -124,4 +124,14 @@ public class TestBufferingGraph {
             assertTrue(graph.isEmpty());
         });
     }
+
+    @Test public void basic_6() {
+        BufferingGraph graph = buffered;
+        // New object, same triple.
+        Triple t = SSE.parseTriple("(:s :p 1)");
+        buffered.add(t);
+        assertFalse(buffered.isEmpty());
+        buffered.reset();
+        assertTrue(buffered.isEmpty());
+    }
 }

Reply via email to