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 2017/07/14 17:07:53 UTC
[1/2] jena git commit: JENA-1370: Provide term-only GraphPlain. Use
GraphPlain for Delta graph
Repository: jena
Updated Branches:
refs/heads/master c5fbfdc1b -> e80f6fa4e
JENA-1370: Provide term-only GraphPlain. Use GraphPlain for Delta graph
Project: http://git-wip-us.apache.org/repos/asf/jena/repo
Commit: http://git-wip-us.apache.org/repos/asf/jena/commit/54d74a72
Tree: http://git-wip-us.apache.org/repos/asf/jena/tree/54d74a72
Diff: http://git-wip-us.apache.org/repos/asf/jena/diff/54d74a72
Branch: refs/heads/master
Commit: 54d74a723d5371d740c623aef52933d785b2492b
Parents: b6d83d7
Author: Andy Seaborne <an...@apache.org>
Authored: Thu Jul 13 15:43:42 2017 +0100
Committer: Andy Seaborne <an...@apache.org>
Committed: Thu Jul 13 16:04:00 2017 +0100
----------------------------------------------------------------------
.../apache/jena/sparql/graph/GraphFactory.java | 5 +-
.../apache/jena/sparql/graph/GraphMemPlain.java | 164 +------------------
.../iterator/TestSortedDataBagCancellation.java | 9 +-
.../org/apache/jena/graph/compose/Delta.java | 20 ++-
.../org/apache/jena/graph/impl/GraphPlain.java | 153 +++++++++++++++++
.../jena/graph/impl/WrappedCapabilities.java | 77 +++++++++
.../jena/graph/compose/test/TestDelta.java | 65 ++++++++
.../apache/jena/graph/test/GraphTestBase.java | 4 +-
.../apache/jena/graph/test/TestGraphPlain.java | 113 +++++++++++++
.../org/apache/jena/graph/test/TestPackage.java | 2 +
10 files changed, 442 insertions(+), 170 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/jena/blob/54d74a72/jena-arq/src/main/java/org/apache/jena/sparql/graph/GraphFactory.java
----------------------------------------------------------------------
diff --git a/jena-arq/src/main/java/org/apache/jena/sparql/graph/GraphFactory.java b/jena-arq/src/main/java/org/apache/jena/sparql/graph/GraphFactory.java
index c9683bb..f07996c 100644
--- a/jena-arq/src/main/java/org/apache/jena/sparql/graph/GraphFactory.java
+++ b/jena-arq/src/main/java/org/apache/jena/sparql/graph/GraphFactory.java
@@ -22,6 +22,7 @@ import org.apache.jena.atlas.data.ThresholdPolicy ;
import org.apache.jena.graph.Factory ;
import org.apache.jena.graph.Graph ;
import org.apache.jena.graph.Triple ;
+import org.apache.jena.graph.impl.GraphPlain ;
import org.apache.jena.rdf.model.Model ;
import org.apache.jena.rdf.model.ModelFactory ;
import org.apache.jena.sparql.SystemARQ ;
@@ -54,10 +55,10 @@ public class GraphFactory
return Factory.createDefaultGraph() ;
}
- /** Very simple graph that uses same-term for find() (small-scale use only) */
+ /** Graph that uses same-term for find() and contains(). */
public static Graph createPlainGraph()
{
- return new GraphMemPlain() ;
+ return GraphPlain.plain() ;
}
public static Graph sinkGraph()
http://git-wip-us.apache.org/repos/asf/jena/blob/54d74a72/jena-arq/src/main/java/org/apache/jena/sparql/graph/GraphMemPlain.java
----------------------------------------------------------------------
diff --git a/jena-arq/src/main/java/org/apache/jena/sparql/graph/GraphMemPlain.java b/jena-arq/src/main/java/org/apache/jena/sparql/graph/GraphMemPlain.java
index 8630b8b..9b053fd 100644
--- a/jena-arq/src/main/java/org/apache/jena/sparql/graph/GraphMemPlain.java
+++ b/jena-arq/src/main/java/org/apache/jena/sparql/graph/GraphMemPlain.java
@@ -18,164 +18,18 @@
package org.apache.jena.sparql.graph;
-import java.util.HashSet ;
-import java.util.Iterator ;
-import java.util.Locale ;
-import java.util.Set ;
-import java.util.function.Predicate;
-
-import org.apache.jena.graph.Capabilities ;
-import org.apache.jena.graph.Node ;
-import org.apache.jena.graph.NodeFactory ;
-import org.apache.jena.graph.Triple ;
-import org.apache.jena.graph.impl.GraphBase ;
-import org.apache.jena.graph.impl.SimpleEventManager ;
-import org.apache.jena.util.iterator.ClosableIterator ;
-import org.apache.jena.util.iterator.ExtendedIterator ;
+import org.apache.jena.graph.impl.GraphPlain ;
+import org.apache.jena.mem.GraphMem ;
/**
- * A version of Graph that does term equality only
+ * A version of Graph that does term equality only
+ * @deprecated Do not use - see GraphPlain.
+ * @see GraphPlain
*/
-public class GraphMemPlain extends GraphBase
+@Deprecated
+public class GraphMemPlain extends GraphPlain
{
- private Set<Triple> triples = new HashSet<>() ;
-
- public GraphMemPlain() {}
-
- @Override
- public Capabilities getCapabilities() {
- return gmpCapabilities;
- }
-
- @Override
- public void performAdd( Triple t )
- { triples.add(t) ; }
-
- @Override
- public void performDelete( Triple t )
- { triples.remove(t) ; }
-
- @Override
- public boolean graphBaseContains( Triple t )
- {
- if ( t.isConcrete() )
- return triples.contains( t ) ;
-
- ClosableIterator<Triple> it = find( t );
- try {
- for ( ; it.hasNext() ; )
- {
- Triple t2 = it.next() ;
- if ( tripleContained(t, t2) )
- return true ;
- }
- } finally { it.close(); }
- return false ;
- }
-
- @Override
- protected ExtendedIterator<Triple> graphBaseFind(Triple m)
- {
- Iterator<Triple> iter = triples.iterator() ;
- return
- SimpleEventManager.notifyingRemove( this, iter )
- .filterKeep ( new TripleMatchFilterEquality( m ) );
- }
-
- static boolean tripleContained(Triple patternTriple, Triple dataTriple)
- {
- return
- equalNode(patternTriple.getSubject(), dataTriple.getSubject()) &&
- equalNode(patternTriple.getPredicate(), dataTriple.getPredicate()) &&
- equalNode(patternTriple.getObject(), dataTriple.getObject()) ;
- }
-
- private static boolean equalNode(Node m, Node n)
- {
- // m should not be null unless .getMatchXXXX used to get the node.
- // Language tag canonicalization
- n = fixupNode(n) ;
- m = fixupNode(m) ;
- return (m==null) || (m == Node.ANY) || m.equals(n) ;
+ public GraphMemPlain() {
+ super(new GraphMem()) ;
}
-
- private static Node fixupNode(Node node)
- {
- if ( node == null || node == Node.ANY )
- return node ;
-
- // RDF says ... language tags should be canonicalized to lower case.
- if ( node.isLiteral() )
- {
- String lang = node.getLiteralLanguage() ;
- if ( lang != null && ! lang.equals("") )
- node = NodeFactory.createLiteral(node.getLiteralLexicalForm(), lang.toLowerCase(Locale.ROOT)) ;
- }
- return node ;
- }
-
- static class TripleMatchFilterEquality implements Predicate<Triple>
- {
- final protected Triple tMatch;
-
- /** Creates new TripleMatchFilter */
- public TripleMatchFilterEquality(Triple tMatch)
- { this.tMatch = tMatch; }
-
- @Override
- public boolean test(Triple t)
- {
- return tripleContained(tMatch, t) ;
- }
-
- }
-
- private static Capabilities gmpCapabilities = new Capabilities() {
-
- @Override
- public boolean sizeAccurate() {
- return true;
- }
-
- @Override
- public boolean addAllowed() {
- return true;
- }
-
- @Override
- public boolean addAllowed(boolean everyTriple) {
- return true;
- }
-
- @Override
- public boolean deleteAllowed() {
- return true;
- }
-
- @Override
- public boolean deleteAllowed(boolean everyTriple) {
- return true;
- }
-
- @Override
- public boolean iteratorRemoveAllowed() {
- return true;
- }
-
- @Override
- public boolean canBeEmpty() {
- return true;
- }
-
- @Override
- public boolean findContractSafe() {
- return true;
- }
-
- @Override
- public boolean handlesLiteralTyping() {
- return false;
- }
-
- };
}
http://git-wip-us.apache.org/repos/asf/jena/blob/54d74a72/jena-arq/src/test/java/org/apache/jena/sparql/engine/iterator/TestSortedDataBagCancellation.java
----------------------------------------------------------------------
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 2d77ccf..8227e89 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
@@ -22,9 +22,11 @@ import java.util.HashSet;
import java.util.List;
import java.util.Set;
+import junit.framework.TestCase;
import org.apache.jena.atlas.io.IndentedWriter;
import org.apache.jena.graph.Graph;
import org.apache.jena.graph.NodeFactory;
+import org.apache.jena.graph.impl.GraphPlain ;
import org.apache.jena.query.QueryCancelledException;
import org.apache.jena.query.SortCondition;
import org.apache.jena.sparql.core.DatasetGraph;
@@ -35,17 +37,12 @@ import org.apache.jena.sparql.engine.binding.Binding;
import org.apache.jena.sparql.engine.binding.BindingComparator;
import org.apache.jena.sparql.engine.binding.BindingFactory;
import org.apache.jena.sparql.engine.binding.BindingMap;
-import org.apache.jena.sparql.engine.iterator.QueryIterSort;
-import org.apache.jena.sparql.engine.iterator.QueryIteratorBase;
import org.apache.jena.sparql.engine.main.OpExecutor;
import org.apache.jena.sparql.engine.main.OpExecutorFactory;
-import org.apache.jena.sparql.graph.GraphMemPlain;
import org.apache.jena.sparql.serializer.SerializationContext;
import org.apache.jena.sparql.util.Context;
import org.junit.Test;
-import junit.framework.TestCase;
-
/*
Test that a SortedDataBag used inside a QueryIterSort
does indeed cut off when cancelled.
@@ -79,7 +76,7 @@ public class TestSortedDataBagCancellation extends TestCase {
}
};
- final Graph activeGraph = new GraphMemPlain();
+ final Graph activeGraph = GraphPlain.plain();
final DatasetGraph dataset = DatasetGraphFactory.create();
http://git-wip-us.apache.org/repos/asf/jena/blob/54d74a72/jena-core/src/main/java/org/apache/jena/graph/compose/Delta.java
----------------------------------------------------------------------
diff --git a/jena-core/src/main/java/org/apache/jena/graph/compose/Delta.java b/jena-core/src/main/java/org/apache/jena/graph/compose/Delta.java
index b35ff68..62c1795 100644
--- a/jena-core/src/main/java/org/apache/jena/graph/compose/Delta.java
+++ b/jena-core/src/main/java/org/apache/jena/graph/compose/Delta.java
@@ -18,9 +18,13 @@
package org.apache.jena.graph.compose ;
-import org.apache.jena.graph.* ;
+import org.apache.jena.graph.Capabilities ;
+import org.apache.jena.graph.Graph ;
+import org.apache.jena.graph.GraphUtil ;
+import org.apache.jena.graph.Triple ;
+import org.apache.jena.graph.impl.GraphPlain ;
import org.apache.jena.graph.impl.SimpleEventManager ;
-import org.apache.jena.util.iterator.* ;
+import org.apache.jena.util.iterator.ExtendedIterator ;
/**
* Graph operation for wrapping a base graph and leaving it unchanged while
@@ -40,9 +44,15 @@ public class Delta extends CompositionBase implements Graph
public Delta(Graph base)
{
super() ;
- this.base = base ;
- this.additions = Factory.createGraphMem();
- this.deletions = Factory.createGraphMem();
+ this.base = GraphPlain.plain(base);
+ this.additions = GraphPlain.plain();
+ this.deletions = GraphPlain.plain();
+ }
+
+ @Override
+ public Capabilities getCapabilities() {
+ // Not stricly accurate.
+ return base.getCapabilities();
}
/**
http://git-wip-us.apache.org/repos/asf/jena/blob/54d74a72/jena-core/src/main/java/org/apache/jena/graph/impl/GraphPlain.java
----------------------------------------------------------------------
diff --git a/jena-core/src/main/java/org/apache/jena/graph/impl/GraphPlain.java b/jena-core/src/main/java/org/apache/jena/graph/impl/GraphPlain.java
new file mode 100644
index 0000000..4ec8a26
--- /dev/null
+++ b/jena-core/src/main/java/org/apache/jena/graph/impl/GraphPlain.java
@@ -0,0 +1,153 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.apache.jena.graph.impl;
+
+import java.util.function.Predicate;
+
+import org.apache.jena.graph.* ;
+import org.apache.jena.rdf.model.impl.Util ;
+import org.apache.jena.util.iterator.ExtendedIterator ;
+
+/**
+ * A version of Graph that enforces term equality even if the base graph uses value-indexing.
+ * With value-indexing, one value may have several object terms that represent it when the graph store
+ * RDF terms, and but matches by value.
+ *
+ * This only affects the object field of a triple in RDF but in
+ * <a href="https://www.w3.org/TR/rdf11-concepts/#section-generalized-rdf">"generalized RDF"</a>
+ * literals can appear in any triple slot.
+ * <p>
+ */
+public class GraphPlain extends WrappedGraph
+{
+ /** Return a graph that only has term-equality
+ * and storage in the {@code base} graph.
+ * Update affects the base graph.
+ */
+ public static Graph plain(Graph base) {
+ if ( ! base.getCapabilities().handlesLiteralTyping() )
+ return base;
+ return new GraphPlain(base);
+ }
+
+ /** Return a graph that only has term-equality. */
+ public static Graph plain() {
+ return plain(Factory.createDefaultGraph());
+ }
+
+ private final Capabilities capabilities;
+
+ protected GraphPlain(Graph other) {
+ super(other);
+ capabilities = new WrappedCapabilities(base.getCapabilities()) {
+ @Override public boolean handlesLiteralTyping() { return false; }
+ };
+ }
+
+ @Override
+ public Capabilities getCapabilities() {
+ return capabilities;
+ }
+
+ @Override
+ public void remove( Node s, Node p, Node o ) {
+ GraphUtil.remove(this, s, p, o) ;
+ }
+
+// @Override
+// public void clear() {
+// GraphUtil.remove(this, Node.ANY, Node.ANY, Node.ANY);
+// }
+
+ @Override
+ public boolean contains( Triple t ) {
+ return contains(t.getSubject(), t.getPredicate(), t.getObject());
+ }
+
+ @Override
+ public boolean contains(Node s, Node p, Node o) {
+ // Do direct for efficiency.
+ if ( ! base.contains(s,p,o) )
+ return false;
+ // May have matched by value. Do a term test find to restrict to RDF terms.
+ ExtendedIterator<Triple> iter = find(s, p, o);
+ boolean b = iter.hasNext();
+ iter.close();
+ return b;
+ }
+
+ @Override
+ public ExtendedIterator<Triple> find(Triple m) {
+ return find(m.getSubject(), m.getPredicate(), m.getObject());
+ }
+
+ @Override
+ public ExtendedIterator<Triple> find(Node subj, Node pred, Node obj) {
+ // Use the base graph and it's indexing (which presumably is efficient)
+ // then filter for term match. If two terms match they must be same-value
+ // so retrieve-by-value will find matches, and maybe some more.
+ ExtendedIterator<Triple> iter = base.find(subj, pred, obj) ;
+
+ // Add a term filter.
+ // Whole triple.
+ Predicate<Triple> predicate = (dataTriple) -> sameTermMatch(subj, pred, obj, dataTriple);
+ iter = iter.filterKeep(predicate) ;
+// // For reference - just object
+// if ( !obj.isConcrete() || obj.isLiteral() ) {
+// Predicate<Triple> predicate = (t) -> sameTermMatch(obj, t.getObject()) ;
+// iter = iter.filterKeep(predicate) ;
+// }
+ return iter;
+ }
+
+ @Override
+ public String toString() {
+ return this.getClass().getSimpleName()+" "+base.toString();
+ }
+
+ /**
+ * Match a ground triple (even ANY and variablesare considered ground terms in the
+ * data triple) with S/P/O which can be wildcards (ANY or null).
+ */
+ private static boolean sameTermMatch(Node matchSubj, Node matchPred, Node matchObj, Triple dataTriple) {
+ return
+ sameTermMatch(matchSubj, dataTriple.getSubject()) &&
+ sameTermMatch(matchPred, dataTriple.getPredicate()) &&
+ sameTermMatch(matchObj, dataTriple.getObject());
+ }
+
+ /**
+ * Match a ground RDF Term (ANY and variables are considered ground terms in the
+ * data term) with a node which can be a wildcard (ANY or null).
+ * Language tags compare case-insensitively.
+ */
+ private static boolean sameTermMatch(Node match, Node data) {
+ if ( ! Util.isLangString(data) || ! Util.isLangString(match) )
+ // No lang tag
+ return (match==null) || (match == Node.ANY) || match.equals(data) ;
+
+ // Concrete match, which is a lang tag literal.
+ // Language tags compare case insensitively.
+ String lex1 = data.getLiteralLexicalForm();
+ String lex2 = data.getLiteralLexicalForm();
+ String lang1 = data.getLiteralLanguage();
+ String lang2 = data.getLiteralLanguage();
+ return lex1.equals(lex2) && lang1.equalsIgnoreCase(lang2);
+ }
+}
http://git-wip-us.apache.org/repos/asf/jena/blob/54d74a72/jena-core/src/main/java/org/apache/jena/graph/impl/WrappedCapabilities.java
----------------------------------------------------------------------
diff --git a/jena-core/src/main/java/org/apache/jena/graph/impl/WrappedCapabilities.java b/jena-core/src/main/java/org/apache/jena/graph/impl/WrappedCapabilities.java
new file mode 100644
index 0000000..f0a217f
--- /dev/null
+++ b/jena-core/src/main/java/org/apache/jena/graph/impl/WrappedCapabilities.java
@@ -0,0 +1,77 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.apache.jena.graph.impl;
+
+import org.apache.jena.graph.Capabilities ;
+
+@SuppressWarnings("deprecation")
+public class WrappedCapabilities implements Capabilities {
+
+ protected final Capabilities other ;
+
+ public WrappedCapabilities(Capabilities other) {
+ this.other = other;
+ }
+
+ @Override
+ public boolean sizeAccurate() {
+ return other.sizeAccurate() ;
+ }
+
+ @Override
+ public boolean addAllowed() {
+ return other.addAllowed() ;
+ }
+
+ @Override
+ public boolean deleteAllowed() {
+ return other.deleteAllowed() ;
+ }
+
+ @Override
+ public boolean addAllowed(boolean everyTriple) {
+ return other.addAllowed(everyTriple) ;
+ }
+
+ @Override
+ public boolean deleteAllowed(boolean everyTriple) {
+ return other.deleteAllowed(everyTriple) ;
+ }
+
+ @Override
+ public boolean iteratorRemoveAllowed() {
+ return other.iteratorRemoveAllowed() ;
+ }
+
+ @Override
+ public boolean canBeEmpty() {
+ return other.canBeEmpty() ;
+ }
+
+ @Override
+ public boolean findContractSafe() {
+ return other.findContractSafe() ;
+ }
+
+ @Override
+ public boolean handlesLiteralTyping() {
+ return other.handlesLiteralTyping() ;
+ }
+
+}
http://git-wip-us.apache.org/repos/asf/jena/blob/54d74a72/jena-core/src/test/java/org/apache/jena/graph/compose/test/TestDelta.java
----------------------------------------------------------------------
diff --git a/jena-core/src/test/java/org/apache/jena/graph/compose/test/TestDelta.java b/jena-core/src/test/java/org/apache/jena/graph/compose/test/TestDelta.java
index 44a9d03..0ab76a7 100755
--- a/jena-core/src/test/java/org/apache/jena/graph/compose/test/TestDelta.java
+++ b/jena-core/src/test/java/org/apache/jena/graph/compose/test/TestDelta.java
@@ -20,6 +20,7 @@ package org.apache.jena.graph.compose.test;
import junit.framework.TestSuite ;
import org.apache.jena.graph.Graph ;
+import org.apache.jena.graph.Triple ;
import org.apache.jena.graph.compose.Delta ;
import org.apache.jena.graph.test.AbstractTestGraph ;
@@ -132,5 +133,69 @@ public class TestDelta extends AbstractTestGraph
assertIsomorphic(graphWith( "p S q" ), delta.getDeletions());
assertIsomorphic(graphWith( "x R y ; x R z; a T b" ), delta);
}
+
+ public void testTerms1()
+ {
+ Triple t1 = triple("s p 1");
+ Triple t01 = triple("s p 01");
+ Graph base = newGraph();
+ base.add(t1);
+ Delta delta = new Delta( base ) ;
+
+ delta.add(t01);
+ assertTrue(delta.getAdditions().contains(triple("s p 01")));
+ assertFalse(delta.getAdditions().contains(triple("s p 1")));
+ assertTrue(delta.contains(t1));
+ assertTrue(delta.contains(t01));
+ }
+
+ public void testTerms2()
+ {
+ Triple t1 = triple("s p 1");
+ Triple t01 = triple("s p 01");
+ Graph base = newGraph();
+ base.add(t1);
+ Delta delta = new Delta( base ) ;
+
+ delta.delete(t01);
+
+ assertFalse(delta.getDeletions().contains(triple("s p 01")));
+ assertFalse(delta.getAdditions().contains(triple("s p 1")));
+ }
+
+ public void testTerms3()
+ {
+ Triple t1 = triple("s p 1");
+ Triple t01 = triple("s p 01");
+ Graph base = newGraph();
+ base.add(t1);
+ Delta delta = new Delta( base ) ;
+
+ delta.add(t01);
+ delta.delete(t01);
+ delta.delete(t1);
+
+ assertFalse(delta.getDeletions().contains(t01));
+ assertTrue(delta.getDeletions().contains(t1));
+ assertFalse(delta.getDeletions().contains(t01));
+ assertFalse(delta.getAdditions().contains(t01));
+ }
+
+ public void testTerms4()
+ {
+ Triple t1 = triple("s p 1");
+ Triple t01 = triple("s p 01");
+ Graph base = newGraph();
+ Delta delta = new Delta( base ) ;
+
+ delta.add(t1);
+ delta.delete(t01);
+
+ assertFalse(delta.getDeletions().contains(triple("s p 01")));
+ assertTrue(delta.getDeletions().isEmpty());
+
+ assertTrue(delta.getAdditions().contains(triple("s p 1")));
+ assertFalse(delta.getAdditions().isEmpty());
+ }
}
http://git-wip-us.apache.org/repos/asf/jena/blob/54d74a72/jena-core/src/test/java/org/apache/jena/graph/test/GraphTestBase.java
----------------------------------------------------------------------
diff --git a/jena-core/src/test/java/org/apache/jena/graph/test/GraphTestBase.java b/jena-core/src/test/java/org/apache/jena/graph/test/GraphTestBase.java
index caa1f74..7904e4f 100644
--- a/jena-core/src/test/java/org/apache/jena/graph/test/GraphTestBase.java
+++ b/jena-core/src/test/java/org/apache/jena/graph/test/GraphTestBase.java
@@ -64,7 +64,7 @@ public class GraphTestBase extends JenaTestBase
/**
Answer a Node as described by <code>x</code>; a shorthand for
- <code>Node.create(x)</code>, which see.
+ <code>NodeCreateUtils.create(x)</code>, which see.
*/
public static Node node( String x )
{ return NodeCreateUtils.create( x ); }
@@ -105,7 +105,7 @@ public class GraphTestBase extends JenaTestBase
/**
Answer a triple described by the three space-separated node descriptions
- in <code>fact</code>; a shorthand for <code>Triple.create(fact)</code>,
+ in <code>fact</code>; a shorthand for <code>NodeCreateUtils.createTriple(fact)</code>,
which see.
*/
public static Triple triple( String fact )
http://git-wip-us.apache.org/repos/asf/jena/blob/54d74a72/jena-core/src/test/java/org/apache/jena/graph/test/TestGraphPlain.java
----------------------------------------------------------------------
diff --git a/jena-core/src/test/java/org/apache/jena/graph/test/TestGraphPlain.java b/jena-core/src/test/java/org/apache/jena/graph/test/TestGraphPlain.java
new file mode 100644
index 0000000..daaf984
--- /dev/null
+++ b/jena-core/src/test/java/org/apache/jena/graph/test/TestGraphPlain.java
@@ -0,0 +1,113 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.apache.jena.graph.test;
+
+import static org.apache.jena.graph.test.GraphTestBase.graphAdd ;
+import static org.apache.jena.graph.test.GraphTestBase.node ;
+import static org.apache.jena.graph.test.GraphTestBase.triple ;
+import static org.junit.Assert.assertEquals ;
+import static org.junit.Assert.assertFalse ;
+import static org.junit.Assert.assertTrue ;
+
+import java.util.List ;
+
+import org.apache.jena.graph.Graph ;
+import org.apache.jena.graph.Node ;
+import org.apache.jena.graph.Triple ;
+import org.apache.jena.graph.impl.GraphPlain ;
+import org.apache.jena.mem.GraphMem ;
+import org.apache.jena.util.iterator.ExtendedIterator ;
+import org.junit.BeforeClass ;
+import org.junit.Test ;
+
+public class TestGraphPlain {
+
+ private static Graph graph;
+
+ @BeforeClass public static void setUp() {
+ graph = new GraphMem();
+
+ if ( ! graph.getCapabilities().handlesLiteralTyping() )
+ throw new IllegalArgumentException("Test graph does not do the value thing");
+ graphAdd(graph, "s p o ; s p 1 ; s p 01");
+ }
+
+ @Test public void contains1() {
+ Triple triple = triple("s p 001");
+ assertTrue(graph.contains(triple));
+ Graph plain = GraphPlain.plain(graph);
+ assertFalse(plain.contains(triple));
+ }
+
+ @Test public void contains2() {
+ Triple triple = triple("s p 1");
+ assertTrue(graph.contains(triple));
+ Graph plain = GraphPlain.plain(graph);
+ assertTrue(plain.contains(triple));
+ }
+
+ @Test public void contains3() {
+ Triple triple = triple("s1 p 1");
+ assertFalse(graph.contains(triple));
+ Graph plain = GraphPlain.plain(graph);
+ assertFalse(plain.contains(triple));
+ }
+
+ @Test public void contains4() {
+ Node s = node("s");
+ Node p = node("p");
+ Node x = node("001");
+
+ assertTrue(graph.contains(s,p,x));
+ Graph plain = GraphPlain.plain(graph);
+ assertFalse(plain.contains(s,p,x));
+ }
+
+ @Test public void find1() {
+ find_test(graph, 2);
+ Graph plain = GraphPlain.plain(graph);
+ find_test(plain, 1);
+ }
+
+ @Test public void find2() {
+ Graph plain = GraphPlain.plain(graph);
+ Node s = node("s");
+ Node p = node("p");
+ Node x = node("001");
+ List<Triple> list = plain.find(s,p,x).toList();
+ assertEquals(0, list.size());
+ }
+
+ @Test public void find3() {
+ Graph plain = GraphPlain.plain(graph);
+ Node s = node("s");
+ Node p = node("p");
+ Node x = node("??");
+ List<Triple> list = plain.find(s,p,x).toList();
+ assertEquals(3, list.size());
+ }
+
+ private static void find_test(Graph testGraph, int n) {
+ Triple triple = triple("?? p 1");
+ ExtendedIterator<Triple> iter = testGraph.find(triple);
+ //assertTrue(iter.hasNext());
+ List<Triple> list = iter.toList();
+ assertEquals(n, list.size());
+ }
+}
http://git-wip-us.apache.org/repos/asf/jena/blob/54d74a72/jena-core/src/test/java/org/apache/jena/graph/test/TestPackage.java
----------------------------------------------------------------------
diff --git a/jena-core/src/test/java/org/apache/jena/graph/test/TestPackage.java b/jena-core/src/test/java/org/apache/jena/graph/test/TestPackage.java
index c070ca6..08aeda1 100644
--- a/jena-core/src/test/java/org/apache/jena/graph/test/TestPackage.java
+++ b/jena-core/src/test/java/org/apache/jena/graph/test/TestPackage.java
@@ -18,6 +18,7 @@
package org.apache.jena.graph.test;
+import junit.framework.JUnit4TestAdapter ;
import junit.framework.TestSuite ;
/**
@@ -45,6 +46,7 @@ public class TestPackage extends TestSuite {
addTest( TestDateTime.suite() );
addTest( TestFactory.suite() );
addTest( TestGraph.suite() );
+ addTest( new JUnit4TestAdapter(TestGraphPlain.class ) );
addTest( TestSimpleGraphMaker.suite() );
addTest( TestGraphExtract.suite() );
addTest( TestCapabilities.suite() );
[2/2] jena git commit: JENA-1370: Merge commit 'refs/pull/270/head'
of github.com:apache/jena
Posted by an...@apache.org.
JENA-1370: Merge commit 'refs/pull/270/head' of github.com:apache/jena
This closes #270.
Project: http://git-wip-us.apache.org/repos/asf/jena/repo
Commit: http://git-wip-us.apache.org/repos/asf/jena/commit/e80f6fa4
Tree: http://git-wip-us.apache.org/repos/asf/jena/tree/e80f6fa4
Diff: http://git-wip-us.apache.org/repos/asf/jena/diff/e80f6fa4
Branch: refs/heads/master
Commit: e80f6fa4e3a1d3c9bc8ebc4a4710e6402024b0ee
Parents: c5fbfdc 54d74a7
Author: Andy Seaborne <an...@apache.org>
Authored: Fri Jul 14 18:07:06 2017 +0100
Committer: Andy Seaborne <an...@apache.org>
Committed: Fri Jul 14 18:07:37 2017 +0100
----------------------------------------------------------------------
.../apache/jena/sparql/graph/GraphFactory.java | 5 +-
.../apache/jena/sparql/graph/GraphMemPlain.java | 164 +------------------
.../iterator/TestSortedDataBagCancellation.java | 9 +-
.../org/apache/jena/graph/compose/Delta.java | 20 ++-
.../org/apache/jena/graph/impl/GraphPlain.java | 153 +++++++++++++++++
.../jena/graph/impl/WrappedCapabilities.java | 77 +++++++++
.../jena/graph/compose/test/TestDelta.java | 65 ++++++++
.../apache/jena/graph/test/GraphTestBase.java | 4 +-
.../apache/jena/graph/test/TestGraphPlain.java | 113 +++++++++++++
.../org/apache/jena/graph/test/TestPackage.java | 2 +
10 files changed, 442 insertions(+), 170 deletions(-)
----------------------------------------------------------------------