TINKERPOP-1878 Test for FILTER Also fixed how the SparqlStrategy was being added to the TraversalStrategies in SparqlTraversalSource...it was adding it globally and all spawned TraversalSource instances were getting that strategy.
Project: http://git-wip-us.apache.org/repos/asf/tinkerpop/repo Commit: http://git-wip-us.apache.org/repos/asf/tinkerpop/commit/e8e4245f Tree: http://git-wip-us.apache.org/repos/asf/tinkerpop/tree/e8e4245f Diff: http://git-wip-us.apache.org/repos/asf/tinkerpop/diff/e8e4245f Branch: refs/heads/TINKERPOP-1878 Commit: e8e4245f857b3f6f2d9fbe1d713c95f83b9aa17d Parents: 1d1faea Author: Stephen Mallette <sp...@genoprime.com> Authored: Fri Jan 26 16:29:55 2018 -0500 Committer: Stephen Mallette <sp...@genoprime.com> Committed: Thu Aug 2 06:49:16 2018 -0400 ---------------------------------------------------------------------- .../dsl/sparql/SparqlTraversalSource.java | 2 +- .../dsl/sparql/SparqlTraversalSourceTest.java | 23 ++++++++++++++++++++ 2 files changed, 24 insertions(+), 1 deletion(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/e8e4245f/sparql-gremlin/src/main/java/org/apache/tinkerpop/gremlin/sparql/process/traversal/dsl/sparql/SparqlTraversalSource.java ---------------------------------------------------------------------- diff --git a/sparql-gremlin/src/main/java/org/apache/tinkerpop/gremlin/sparql/process/traversal/dsl/sparql/SparqlTraversalSource.java b/sparql-gremlin/src/main/java/org/apache/tinkerpop/gremlin/sparql/process/traversal/dsl/sparql/SparqlTraversalSource.java index cc54aa5..f78708b 100644 --- a/sparql-gremlin/src/main/java/org/apache/tinkerpop/gremlin/sparql/process/traversal/dsl/sparql/SparqlTraversalSource.java +++ b/sparql-gremlin/src/main/java/org/apache/tinkerpop/gremlin/sparql/process/traversal/dsl/sparql/SparqlTraversalSource.java @@ -47,7 +47,6 @@ public class SparqlTraversalSource implements TraversalSource { public SparqlTraversalSource(final Graph graph, final TraversalStrategies traversalStrategies) { this.graph = graph; this.strategies = traversalStrategies; - this.strategies.addStrategies(SparqlStrategy.instance()); } public SparqlTraversalSource(final Graph graph) { @@ -126,6 +125,7 @@ public class SparqlTraversalSource implements TraversalSource { */ public <S> SparqlTraversal<S,?> sparql(final String query) { final SparqlTraversalSource clone = this.clone(); + clone.getStrategies().addStrategies(SparqlStrategy.instance()); // this is a bit of a hack to get remote traversals to work cleanly. on the remote side, we'd expect a // GraphTraversalSource not a SparqlTraversalSource (given that sparql-gremlin is to be implemented in the http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/e8e4245f/sparql-gremlin/src/test/java/org/apache/tinkerpop/gremlin/sparql/process/traversal/dsl/sparql/SparqlTraversalSourceTest.java ---------------------------------------------------------------------- diff --git a/sparql-gremlin/src/test/java/org/apache/tinkerpop/gremlin/sparql/process/traversal/dsl/sparql/SparqlTraversalSourceTest.java b/sparql-gremlin/src/test/java/org/apache/tinkerpop/gremlin/sparql/process/traversal/dsl/sparql/SparqlTraversalSourceTest.java index 1b39813..4092e58 100644 --- a/sparql-gremlin/src/test/java/org/apache/tinkerpop/gremlin/sparql/process/traversal/dsl/sparql/SparqlTraversalSourceTest.java +++ b/sparql-gremlin/src/test/java/org/apache/tinkerpop/gremlin/sparql/process/traversal/dsl/sparql/SparqlTraversalSourceTest.java @@ -18,16 +18,21 @@ */ package org.apache.tinkerpop.gremlin.sparql.process.traversal.dsl.sparql; +import org.apache.tinkerpop.gremlin.process.traversal.dsl.graph.GraphTraversalSource; +import org.apache.tinkerpop.gremlin.sparql.process.traversal.strategy.SparqlStrategy; import org.apache.tinkerpop.gremlin.structure.Graph; +import org.apache.tinkerpop.gremlin.structure.Vertex; import org.apache.tinkerpop.gremlin.tinkergraph.structure.TinkerFactory; import org.junit.Test; import java.util.HashMap; import java.util.List; +import java.util.Map; import static org.hamcrest.MatcherAssert.assertThat; import static org.hamcrest.collection.IsIterableContainingInAnyOrder.containsInAnyOrder; import static org.hamcrest.collection.IsIterableContainingInOrder.contains; +import static org.junit.Assert.assertEquals; /** * @author Stephen Mallette (http://stephen.genoprime.com) @@ -36,6 +41,7 @@ public class SparqlTraversalSourceTest { private static final Graph graph = TinkerFactory.createModern(); private static final SparqlTraversalSource g = graph.traversal(SparqlTraversalSource.class); + private static final GraphTraversalSource _g = graph.traversal(); @Test public void shouldFindAllPersonsNamesAndAges() { @@ -88,4 +94,21 @@ public class SparqlTraversalSourceTest { final List<?> x = g.sparql("SELECT ?name WHERE { ?person v:name ?name } ORDER BY DESC(?name)").toList(); assertThat(x, contains("vadas", "ripple", "peter", "marko", "lop", "josh")); } + + @Test + public void shouldFilter() { + final Map<String,Vertex> x = (Map) g.sparql( "SELECT ?a ?b ?c\n" + + "WHERE {\n" + + " ?a v:label \"person\" .\n" + + " ?a e:knows ?b .\n" + + " ?a e:created ?c .\n" + + " ?b e:created ?c .\n" + + " ?a v:age ?d .\n" + + " FILTER (?d < 30)\n" + + "}").next(); + + assertEquals(x.get("a"), _g.V(1).next()); + assertEquals(x.get("b"), _g.V(4).next()); + assertEquals(x.get("c"), _g.V(3).next()); + } }