Further test coverage
Project: http://git-wip-us.apache.org/repos/asf/jena/repo Commit: http://git-wip-us.apache.org/repos/asf/jena/commit/82acf1bc Tree: http://git-wip-us.apache.org/repos/asf/jena/tree/82acf1bc Diff: http://git-wip-us.apache.org/repos/asf/jena/diff/82acf1bc Branch: refs/heads/master Commit: 82acf1bcb1ded958deb93dda07b094fdb815193f Parents: 4ec88f3 Author: ajs6f <[email protected]> Authored: Fri Dec 29 09:03:02 2017 -0500 Committer: ajs6f <[email protected]> Committed: Fri Jan 5 09:26:07 2018 -0500 ---------------------------------------------------------------------- .../sparql/util/IntersectionDatasetGraph.java | 96 +++++++++++++------- .../jena/sparql/util/ViewDatasetGraph.java | 8 +- .../util/TestIntersectionDatasetGraph.java | 24 ++++- .../jena/sparql/util/TestUnionDatasetGraph.java | 1 - 4 files changed, 85 insertions(+), 44 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/jena/blob/82acf1bc/jena-arq/src/main/java/org/apache/jena/sparql/util/IntersectionDatasetGraph.java ---------------------------------------------------------------------- diff --git a/jena-arq/src/main/java/org/apache/jena/sparql/util/IntersectionDatasetGraph.java b/jena-arq/src/main/java/org/apache/jena/sparql/util/IntersectionDatasetGraph.java index d590d50..20a0e3b 100644 --- a/jena-arq/src/main/java/org/apache/jena/sparql/util/IntersectionDatasetGraph.java +++ b/jena-arq/src/main/java/org/apache/jena/sparql/util/IntersectionDatasetGraph.java @@ -1,47 +1,73 @@ package org.apache.jena.sparql.util; -import static org.apache.jena.atlas.iterator.Iter.filter; +import static org.apache.jena.atlas.iterator.Iter.iter; import java.util.Iterator; import java.util.function.Function; -import org.apache.jena.graph.Graph; -import org.apache.jena.graph.Node; +import org.apache.jena.graph.*; import org.apache.jena.graph.compose.Intersection; import org.apache.jena.sparql.core.DatasetGraph; +import org.apache.jena.util.iterator.ExtendedIterator; +import org.apache.jena.util.iterator.NullIterator; public class IntersectionDatasetGraph extends ViewDatasetGraph { + + public IntersectionDatasetGraph(DatasetGraph left, DatasetGraph right, Context c) { + super(left, right, c); + } - public IntersectionDatasetGraph(DatasetGraph left, DatasetGraph right, Context c) { - super(left, right, c); - } - - Graph intersect(Function<DatasetGraph, Graph> op) { - return join(Intersection::new, op); - } - - @Override - public Graph getDefaultGraph() { - return intersect(DatasetGraph::getDefaultGraph); - } - - @Override - public Graph getGraph(Node graphNode) { - return intersect(dsg -> dsg.getGraph(graphNode)); - } - - @Override - public boolean containsGraph(Node graphNode) { - return both(dsg -> dsg.containsGraph(graphNode)); - } - - @Override - public Iterator<Node> listGraphNodes() { - return filter(getLeft().listGraphNodes(), getRight()::containsGraph); - } - - @Override - public boolean contains(Node g, Node s, Node p, Node o) { - return both(dsg -> dsg.contains(g, s, p, o)); - } + Graph intersect(Function<DatasetGraph, Graph> op) { + return join(IntersectionView::new, op); + } + + @Override + public Graph getDefaultGraph() { + return intersect(DatasetGraph::getDefaultGraph); + } + + @Override + public Graph getGraph(Node graphNode) { + return intersect(dsg -> dsg.getGraph(graphNode)); + } + + @Override + public boolean containsGraph(Node graphNode) { + return both(dsg -> dsg.containsGraph(graphNode) && !dsg.getGraph(graphNode).isEmpty()); + } + + @Override + public Iterator<Node> listGraphNodes() { + return iter(getLeft().listGraphNodes()) + .filter(graphName -> !getGraph(graphName).isEmpty()) + .filter(getRight()::containsGraph) + .filter(graphName -> !getRight().getGraph(graphName).isEmpty()); + } + + @Override + public boolean contains(Node g, Node s, Node p, Node o) { + return both(dsg -> dsg.contains(g, s, p, o)); + } + + static class IntersectionView extends Intersection { + + public IntersectionView(Graph L, Graph R) { + super(L, R); + } + + @Override + public void performAdd(Triple t) { + IntersectionDatasetGraph.throwNoMutationAllowed(); + } + + @Override + public void performDelete(Triple t) { + IntersectionDatasetGraph.throwNoMutationAllowed(); + } + + @Override + protected ExtendedIterator<Triple> _graphBaseFind(Triple s) { + return L.isEmpty() || R.isEmpty() ? NullIterator.instance() : super._graphBaseFind(s); + } + } } http://git-wip-us.apache.org/repos/asf/jena/blob/82acf1bc/jena-arq/src/main/java/org/apache/jena/sparql/util/ViewDatasetGraph.java ---------------------------------------------------------------------- diff --git a/jena-arq/src/main/java/org/apache/jena/sparql/util/ViewDatasetGraph.java b/jena-arq/src/main/java/org/apache/jena/sparql/util/ViewDatasetGraph.java index c1c6542..6d12292 100644 --- a/jena-arq/src/main/java/org/apache/jena/sparql/util/ViewDatasetGraph.java +++ b/jena-arq/src/main/java/org/apache/jena/sparql/util/ViewDatasetGraph.java @@ -32,7 +32,7 @@ public abstract class ViewDatasetGraph extends Pair.OfSameType<DatasetGraph> imp this.lock = new PairLock(left.getLock(), right.getLock()); } - private static void throwNoMutationAllowed() { + protected static void throwNoMutationAllowed() { throw new UnsupportedOperationException("This view does not allow mutation!"); } @@ -47,13 +47,9 @@ public abstract class ViewDatasetGraph extends Pair.OfSameType<DatasetGraph> imp case WRITE: throwNoMutationAllowed(); case READ: - forEach(ViewDatasetGraph::beginRead); + forEach(dsg -> dsg.begin(READ)); } } - - private static void beginRead(DatasetGraph dsg) { - dsg.begin(READ); - } @Override public void abort() { http://git-wip-us.apache.org/repos/asf/jena/blob/82acf1bc/jena-arq/src/test/java/org/apache/jena/sparql/util/TestIntersectionDatasetGraph.java ---------------------------------------------------------------------- diff --git a/jena-arq/src/test/java/org/apache/jena/sparql/util/TestIntersectionDatasetGraph.java b/jena-arq/src/test/java/org/apache/jena/sparql/util/TestIntersectionDatasetGraph.java index 59eaf0e..4c04baf 100644 --- a/jena-arq/src/test/java/org/apache/jena/sparql/util/TestIntersectionDatasetGraph.java +++ b/jena-arq/src/test/java/org/apache/jena/sparql/util/TestIntersectionDatasetGraph.java @@ -1,17 +1,37 @@ package org.apache.jena.sparql.util; +import static org.apache.jena.sparql.sse.SSE.parseGraph; + +import org.apache.jena.graph.*; import org.apache.jena.sparql.core.DatasetGraph; +import org.apache.jena.sparql.core.DatasetGraphFactory; import org.junit.Test; public class TestIntersectionDatasetGraph extends TestViewDatasetGraph<IntersectionDatasetGraph> { @Override public IntersectionDatasetGraph testInstance(DatasetGraph left, DatasetGraph right, Context c) { - return new IntersectionDatasetGraph(right, right, c); + return new IntersectionDatasetGraph(left, right, c); } @Test public void testIntersection() { - + final Graph g1 = parseGraph("(graph (triple <s1> <p1> <o1> ))"); + final DatasetGraph dsg1 = DatasetGraphFactory.create(g1); + final Node graphName1 = NodeFactory.createBlankNode(); + dsg1.addGraph(graphName1, g1); + final Graph g2 = parseGraph("(graph (triple <s2> <p2> <o2> ))"); + final DatasetGraph dsg2 = DatasetGraphFactory.create(g2); + final Node graphName2 = NodeFactory.createBlankNode(); + dsg2.addGraph(graphName2, g2); + final Node graphName3 = NodeFactory.createBlankNode(); + dsg1.addGraph(graphName3, g1); + dsg2.addGraph(graphName3, g1); + DatasetGraph dsg = testInstance(dsg1, dsg2, Context.emptyContext); + assertEquals(1, dsg.size()); + assertTrue(dsg.getDefaultGraph().isEmpty()); + assertTrue(dsg.getGraph(graphName1).isEmpty()); + assertTrue(dsg.getGraph(graphName2).isEmpty()); + assertTrue(g1.isIsomorphicWith(dsg.getGraph(graphName3))); } } http://git-wip-us.apache.org/repos/asf/jena/blob/82acf1bc/jena-arq/src/test/java/org/apache/jena/sparql/util/TestUnionDatasetGraph.java ---------------------------------------------------------------------- diff --git a/jena-arq/src/test/java/org/apache/jena/sparql/util/TestUnionDatasetGraph.java b/jena-arq/src/test/java/org/apache/jena/sparql/util/TestUnionDatasetGraph.java index a131846..463e1ff 100644 --- a/jena-arq/src/test/java/org/apache/jena/sparql/util/TestUnionDatasetGraph.java +++ b/jena-arq/src/test/java/org/apache/jena/sparql/util/TestUnionDatasetGraph.java @@ -17,7 +17,6 @@ public class TestUnionDatasetGraph extends TestViewDatasetGraph<UnionDatasetGrap @Test public void testUnion() { - final Graph g1 = parseGraph("(graph (triple <s1> <p1> <o1> ))"); final DatasetGraph dsg1 = DatasetGraphFactory.create(g1); final Node graphName1 = NodeFactory.createBlankNode();
