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()); + } }
