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 2013/08/18 22:58:09 UTC
svn commit: r1515213 - in /jena/trunk/jena-arq/src:
main/java/com/hp/hpl/jena/sparql/core/DatasetGraphBase.java
test/java/com/hp/hpl/jena/sparql/core/AbstractDatasetGraphTests.java
Author: andy
Date: Sun Aug 18 20:58:08 2013
New Revision: 1515213
URL: http://svn.apache.org/r1515213
Log:
JENA-513 , JENA-514 : DatasetGraphBase.deleteAny rewritten to work in slices.
Instead of copying the whole iterator, the code takes slices, and repeats until
the "deleteAny" pattern no longer causes .find to return anything.
Modified:
jena/trunk/jena-arq/src/main/java/com/hp/hpl/jena/sparql/core/DatasetGraphBase.java
jena/trunk/jena-arq/src/test/java/com/hp/hpl/jena/sparql/core/AbstractDatasetGraphTests.java
Modified: jena/trunk/jena-arq/src/main/java/com/hp/hpl/jena/sparql/core/DatasetGraphBase.java
URL: http://svn.apache.org/viewvc/jena/trunk/jena-arq/src/main/java/com/hp/hpl/jena/sparql/core/DatasetGraphBase.java?rev=1515213&r1=1515212&r2=1515213&view=diff
==============================================================================
--- jena/trunk/jena-arq/src/main/java/com/hp/hpl/jena/sparql/core/DatasetGraphBase.java (original)
+++ jena/trunk/jena-arq/src/main/java/com/hp/hpl/jena/sparql/core/DatasetGraphBase.java Sun Aug 18 20:58:08 2013
@@ -18,9 +18,7 @@
package com.hp.hpl.jena.sparql.core;
-
import java.util.Iterator ;
-import java.util.List ;
import org.apache.jena.atlas.io.IndentedLineBuffer ;
import org.apache.jena.atlas.iterator.Iter ;
@@ -85,14 +83,32 @@ abstract public class DatasetGraphBase i
@Override
public void delete(Node g, Node s, Node p, Node o) { delete(new Quad(g,s,p,o)) ; }
+ private static final int DeleteBufferSize = 1000 ;
@Override
- /** Simple implementation */
+ /** Simple implementation but done without assuming iterator.remove() */
public void deleteAny(Node g, Node s, Node p, Node o)
- {
- Iterator<Quad> iter = find(g, s, p, o) ;
- List<Quad> list = Iter.toList(iter) ;
- for ( Quad q : list )
- delete(q) ;
+ {
+ // Delete in slices rather than assume .remove() on the iterator is implemented.
+ // We keep executing find(g, s, p, o) until we don't get a full slice.
+ Quad[] buffer = new Quad[DeleteBufferSize] ;
+ while(true) {
+ Iterator<Quad> iter = find(g, s, p, o) ;
+ // Get a slice
+ int len = 0 ;
+ for (; len < DeleteBufferSize; len++) {
+ if ( !iter.hasNext() )
+ break ;
+ buffer[len] = iter.next() ;
+ }
+ // Delete them.
+ for (int i = 0; i < len; i++) {
+ delete(buffer[i]) ;
+ buffer[i] = null ;
+ }
+ // Finished?
+ if ( len < DeleteBufferSize )
+ break ;
+ }
}
@Override
Modified: jena/trunk/jena-arq/src/test/java/com/hp/hpl/jena/sparql/core/AbstractDatasetGraphTests.java
URL: http://svn.apache.org/viewvc/jena/trunk/jena-arq/src/test/java/com/hp/hpl/jena/sparql/core/AbstractDatasetGraphTests.java?rev=1515213&r1=1515212&r2=1515213&view=diff
==============================================================================
--- jena/trunk/jena-arq/src/test/java/com/hp/hpl/jena/sparql/core/AbstractDatasetGraphTests.java (original)
+++ jena/trunk/jena-arq/src/test/java/com/hp/hpl/jena/sparql/core/AbstractDatasetGraphTests.java Sun Aug 18 20:58:08 2013
@@ -237,4 +237,24 @@ public abstract class AbstractDatasetGra
dsg.deleteAny(Node.ANY, subject, null, null);
}
+ @Test public void deleteAny_02()
+ {
+ DatasetGraph dsg = emptyDataset() ;
+ Node subject = NodeFactory.createURI("http://example/s");
+ Node predicate = NodeFactory.createURI("http://example/p");
+ Node object1 = NodeFactory.createAnon();
+ Node object2 = NodeFactory.createAnon();
+ Node graph = NodeFactory.createURI("http://example/g") ;
+
+ dsg.add(graph, subject, predicate, object1);
+ dsg.add(graph, subject, predicate, object2);
+
+ dsg.deleteAny(Quad.defaultGraphIRI, null, null, null);
+ List<Quad> quads = Iter.toList(dsg.find(graph, null, null, null)) ;
+ assertEquals(2, quads.size()) ;
+
+ dsg.deleteAny(graph, null, null, null);
+ quads = Iter.toList(dsg.find(graph, null, null, null)) ;
+ assertEquals(0, quads.size()) ;
+ }
}