Repository: tinkerpop Updated Branches: refs/heads/TINKERPOP-1681 [created] 1856f79ba
Fixed folding of multiple `hasId()` into `GraphStep`. Project: http://git-wip-us.apache.org/repos/asf/tinkerpop/repo Commit: http://git-wip-us.apache.org/repos/asf/tinkerpop/commit/1856f79b Tree: http://git-wip-us.apache.org/repos/asf/tinkerpop/tree/1856f79b Diff: http://git-wip-us.apache.org/repos/asf/tinkerpop/diff/1856f79b Branch: refs/heads/TINKERPOP-1681 Commit: 1856f79ba2558a30d56c8d08f26138dbd29cc370 Parents: 4f7b859 Author: Daniel Kuppitz <[email protected]> Authored: Sun May 28 15:41:34 2017 +0200 Committer: Daniel Kuppitz <[email protected]> Committed: Sun May 28 22:40:21 2017 +0200 ---------------------------------------------------------------------- .../process/traversal/step/map/GraphStep.java | 3 +- .../traversal/step/filter/GroovyHasTest.groovy | 10 +++++++ .../process/traversal/step/filter/HasTest.java | 31 ++++++++++++++++++++ 3 files changed, 43 insertions(+), 1 deletion(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/1856f79b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/map/GraphStep.java ---------------------------------------------------------------------- diff --git a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/map/GraphStep.java b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/map/GraphStep.java index 03a0bc4..7ab7d13 100644 --- a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/map/GraphStep.java +++ b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/map/GraphStep.java @@ -181,7 +181,8 @@ public class GraphStep<S, E extends Element> extends AbstractStep<S, E> implemen * @return true if the {@link HasContainer} updated ids and thus, was processed. */ public static boolean processHasContainerIds(final GraphStep<?, ?> graphStep, final HasContainer hasContainer) { - if (hasContainer.getKey().equals(T.id.getAccessor()) && (hasContainer.getBiPredicate() == Compare.eq || hasContainer.getBiPredicate() == Contains.within)) { + if (hasContainer.getKey().equals(T.id.getAccessor()) && graphStep.ids.length == 0 && + (hasContainer.getBiPredicate() == Compare.eq || hasContainer.getBiPredicate() == Contains.within)) { graphStep.addIds(hasContainer.getValue()); return true; } http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/1856f79b/gremlin-groovy-test/src/main/groovy/org/apache/tinkerpop/gremlin/process/traversal/step/filter/GroovyHasTest.groovy ---------------------------------------------------------------------- diff --git a/gremlin-groovy-test/src/main/groovy/org/apache/tinkerpop/gremlin/process/traversal/step/filter/GroovyHasTest.groovy b/gremlin-groovy-test/src/main/groovy/org/apache/tinkerpop/gremlin/process/traversal/step/filter/GroovyHasTest.groovy index 0a7729c..abaabf9 100644 --- a/gremlin-groovy-test/src/main/groovy/org/apache/tinkerpop/gremlin/process/traversal/step/filter/GroovyHasTest.groovy +++ b/gremlin-groovy-test/src/main/groovy/org/apache/tinkerpop/gremlin/process/traversal/step/filter/GroovyHasTest.groovy @@ -159,5 +159,15 @@ public abstract class GroovyHasTest { public Traversal<Vertex, String> get_g_V_hasNotXageX_name() { new ScriptTraversal<>(g, "gremlin-groovy", "g.V.hasNot('age').name"); } + + @Override + public Traversal<Vertex, Vertex> get_g_V_hasIdX1X_hasIdX2X(final Object v1Id, final Object v2Id) { + new ScriptTraversal<>(g, "gremlin-groovy", "g.V.hasId(v1Id).hasId(v2Id)", "v1Id", v1Id, "v2Id", v2Id) + } + + @Override + public Traversal<Vertex, Vertex> get_g_V_hasLabelXpersonX_hasLabelXsoftwareX() { + new ScriptTraversal<>(g, "gremlin-groovy", "g.V.hasLabel('person').hasId('software')") + } } } http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/1856f79b/gremlin-test/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/filter/HasTest.java ---------------------------------------------------------------------- diff --git a/gremlin-test/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/filter/HasTest.java b/gremlin-test/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/filter/HasTest.java index d132eb1..01f20a7 100644 --- a/gremlin-test/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/filter/HasTest.java +++ b/gremlin-test/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/filter/HasTest.java @@ -104,6 +104,10 @@ public abstract class HasTest extends AbstractGremlinProcessTest { public abstract Traversal<Vertex, String> get_g_V_hasNotXageX_name(); + public abstract Traversal<Vertex, Vertex> get_g_V_hasIdX1X_hasIdX2X(final Object v1Id, final Object v2Id); + + public abstract Traversal<Vertex, Vertex> get_g_V_hasLabelXpersonX_hasLabelXsoftwareX(); + @Test @LoadGraphWith(MODERN) public void g_V_outXcreatedX_hasXname__mapXlengthX_isXgtX3XXX_name() { @@ -427,6 +431,23 @@ public abstract class HasTest extends AbstractGremlinProcessTest { checkResults(Arrays.asList("lop", "ripple"), traversal); } + @Test + @LoadGraphWith(MODERN) + public void g_V_hasIdX1X_hasIdX2X() { + final Traversal<Vertex, Vertex> traversal = get_g_V_hasIdX1X_hasIdX2X( + convertToVertexId("marko"), convertToVertexId("vadas") + ); + printTraversalForm(traversal); + assertFalse(traversal.hasNext()); + } + + @Test + @LoadGraphWith(MODERN) + public void g_V_hasLabelXpersonX_hasLabelXsoftwareX() { + final Traversal<Vertex, Vertex> traversal = get_g_V_hasLabelXpersonX_hasLabelXsoftwareX(); + printTraversalForm(traversal); + assertFalse(traversal.hasNext()); + } public static class Traversals extends HasTest { @Override @@ -558,5 +579,15 @@ public abstract class HasTest extends AbstractGremlinProcessTest { public Traversal<Vertex, String> get_g_V_hasNotXageX_name() { return g.V().hasNot("age").values("name"); } + + @Override + public Traversal<Vertex, Vertex> get_g_V_hasIdX1X_hasIdX2X(final Object v1Id, final Object v2Id) { + return g.V().hasId(v1Id).hasId(v2Id); + } + + @Override + public Traversal<Vertex, Vertex> get_g_V_hasLabelXpersonX_hasLabelXsoftwareX() { + return g.V().hasLabel("person").hasId("software"); + } } }
