Fixed folding of multiple `hasId()`'s into `GraphStep`.
Project: http://git-wip-us.apache.org/repos/asf/tinkerpop/repo Commit: http://git-wip-us.apache.org/repos/asf/tinkerpop/commit/12aa2d2f Tree: http://git-wip-us.apache.org/repos/asf/tinkerpop/tree/12aa2d2f Diff: http://git-wip-us.apache.org/repos/asf/tinkerpop/diff/12aa2d2f Branch: refs/heads/TINKERPOP-1681 Commit: 12aa2d2fe534fbd9540c9328725ab844e4bb1010 Parents: 3f909cb Author: Daniel Kuppitz <daniel_kupp...@hotmail.com> Authored: Sun May 28 15:41:34 2017 +0200 Committer: Daniel Kuppitz <daniel_kupp...@hotmail.com> Committed: Thu Jun 1 11:43:10 2017 +0200 ---------------------------------------------------------------------- CHANGELOG.asciidoc | 1 + .../process/traversal/step/map/GraphStep.java | 3 +- .../traversal/step/filter/GroovyHasTest.groovy | 10 +++++++ .../process/traversal/step/filter/HasTest.java | 31 ++++++++++++++++++++ 4 files changed, 44 insertions(+), 1 deletion(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/12aa2d2f/CHANGELOG.asciidoc ---------------------------------------------------------------------- diff --git a/CHANGELOG.asciidoc b/CHANGELOG.asciidoc index 2d77671..3ec765c 100644 --- a/CHANGELOG.asciidoc +++ b/CHANGELOG.asciidoc @@ -26,6 +26,7 @@ image::https://raw.githubusercontent.com/apache/tinkerpop/master/docs/static/ima TinkerPop 3.2.5 (Release Date: NOT OFFICIALLY RELEASED YET) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +* Fixed folding of multiple `hasId()`'s into `GraphStep`. * Added string performance options to `StarGraph`. * Fixed a bug in `until(predicate)` where it was actually calling `emit(predicate)`. * Fixed inconsistency in GraphSON serialization of `Path` where properties of graph elements were being included when serialized. http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/12aa2d2f/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/12aa2d2f/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..76e79a4 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').hasLabel('software')") + } } } http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/12aa2d2f/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..9bd3e23 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").hasLabel("software"); + } } }