Repository: tinkerpop Updated Branches: refs/heads/master 4030a7156 -> 20d2cbd48
fixed a bug in until(predicate) which was actually calling emit(predicate). Added a test case to verify bug and demonstrate that fix fixes bug. Project: http://git-wip-us.apache.org/repos/asf/tinkerpop/repo Commit: http://git-wip-us.apache.org/repos/asf/tinkerpop/commit/8695b15c Tree: http://git-wip-us.apache.org/repos/asf/tinkerpop/tree/8695b15c Diff: http://git-wip-us.apache.org/repos/asf/tinkerpop/diff/8695b15c Branch: refs/heads/master Commit: 8695b15c1c91411465b8416fec20b628b7fba045 Parents: 8812f85 Author: Marko A. Rodriguez <okramma...@gmail.com> Authored: Fri May 26 08:27:00 2017 -0600 Committer: Marko A. Rodriguez <okramma...@gmail.com> Committed: Fri May 26 08:27:00 2017 -0600 ---------------------------------------------------------------------- CHANGELOG.asciidoc | 1 + .../traversal/dsl/graph/GraphTraversal.java | 2 +- .../step/branch/GroovyRepeatTest.groovy | 7 +++++++ .../traversal/step/branch/RepeatTest.java | 22 ++++++++++++++++++++ 4 files changed, 31 insertions(+), 1 deletion(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/8695b15c/CHANGELOG.asciidoc ---------------------------------------------------------------------- diff --git a/CHANGELOG.asciidoc b/CHANGELOG.asciidoc index 31a4064..3380dad 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 a bug in `until(predicate)` where it was actually calling `emit(predicate)`. * Improved error messaging on the `g.addV(Object...)` when passing an invalid arguments. * Reduced memory usage for TinkerGraph deserialization in GraphSON by streaming vertices and edges. * Now using Groovy `[...]` map notation in `GroovyTranslator` instead of `new LinkedHashMap(){{ }}`. http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/8695b15c/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/dsl/graph/GraphTraversal.java ---------------------------------------------------------------------- diff --git a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/dsl/graph/GraphTraversal.java b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/dsl/graph/GraphTraversal.java index afa23d7..29412b8 100644 --- a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/dsl/graph/GraphTraversal.java +++ b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/dsl/graph/GraphTraversal.java @@ -2335,7 +2335,7 @@ public interface GraphTraversal<S, E> extends Traversal<S, E> { */ public default GraphTraversal<S, E> until(final Predicate<Traverser<E>> untilPredicate) { this.asAdmin().getBytecode().addStep(Symbols.until, untilPredicate); - return RepeatStep.addEmitToTraversal(this, (Traversal.Admin<E, ?>) __.filter(untilPredicate)); + return RepeatStep.addUntilToTraversal(this, (Traversal.Admin<E, ?>) __.filter(untilPredicate)); } /** http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/8695b15c/gremlin-groovy-test/src/main/groovy/org/apache/tinkerpop/gremlin/process/traversal/step/branch/GroovyRepeatTest.groovy ---------------------------------------------------------------------- diff --git a/gremlin-groovy-test/src/main/groovy/org/apache/tinkerpop/gremlin/process/traversal/step/branch/GroovyRepeatTest.groovy b/gremlin-groovy-test/src/main/groovy/org/apache/tinkerpop/gremlin/process/traversal/step/branch/GroovyRepeatTest.groovy index 88dce37..b45c191 100644 --- a/gremlin-groovy-test/src/main/groovy/org/apache/tinkerpop/gremlin/process/traversal/step/branch/GroovyRepeatTest.groovy +++ b/gremlin-groovy-test/src/main/groovy/org/apache/tinkerpop/gremlin/process/traversal/step/branch/GroovyRepeatTest.groovy @@ -23,6 +23,8 @@ import org.apache.tinkerpop.gremlin.process.traversal.Traversal import org.apache.tinkerpop.gremlin.process.traversal.util.ScriptTraversal import org.apache.tinkerpop.gremlin.structure.Vertex +import static org.apache.tinkerpop.gremlin.process.traversal.dsl.graph.__.both + /** * @author Marko A. Rodriguez (http://markorodriguez.com) */ @@ -90,5 +92,10 @@ public abstract class GroovyRepeatTest { final Object v1Id) { new ScriptTraversal<>(g, "gremlin-groovy", "g.V(v1Id).repeat(groupCount('m').by(loops()).out()).times(3).cap('m')", "v1Id", v1Id) } + + @Override + public Traversal<Vertex, Map<String, Long>> get_g_V_repeatXbothX_untilXname_eq_marko_or_loops_gt_1X_groupCount_byXnameX() { + new ScriptTraversal<>(g, "gremlin-groovy", "g.V.repeat(both()).until{it.get().value('name').equals('lop') || it.loops() > 1}.groupCount.by('name')") + } } } http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/8695b15c/gremlin-test/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/branch/RepeatTest.java ---------------------------------------------------------------------- diff --git a/gremlin-test/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/branch/RepeatTest.java b/gremlin-test/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/branch/RepeatTest.java index 56acd2b..90d7d07 100644 --- a/gremlin-test/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/branch/RepeatTest.java +++ b/gremlin-test/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/branch/RepeatTest.java @@ -87,6 +87,8 @@ public abstract class RepeatTest extends AbstractGremlinProcessTest { public abstract Traversal<Vertex, String> get_g_VX1X_repeatXoutX_untilXoutE_count_isX0XX_name(final Object v1Id); + public abstract Traversal<Vertex, Map<String, Long>> get_g_V_repeatXbothX_untilXname_eq_marko_or_loops_gt_1X_groupCount_byXnameX(); + @Test @LoadGraphWith(MODERN) public void g_V_repeatXoutX_timesX2X_emit_path() { @@ -259,6 +261,21 @@ public abstract class RepeatTest extends AbstractGremlinProcessTest { assertEquals(2L, map.get(2).longValue()); } + @Test + @LoadGraphWith(MODERN) + public void g_V_repeatXbothX_untilXname_eq_marko_or_loops_gt_1X_groupCount_byXnameX() { + final Traversal<Vertex, Map<String, Long>> traversal = get_g_V_repeatXbothX_untilXname_eq_marko_or_loops_gt_1X_groupCount_byXnameX(); + printTraversalForm(traversal); + final Map<String, Long> map = traversal.next(); + assertFalse(traversal.hasNext()); + assertEquals(5, map.size()); + assertEquals(3L, map.get("ripple").longValue()); + assertEquals(3L, map.get("vadas").longValue()); + assertEquals(4L, map.get("josh").longValue()); + assertEquals(10L, map.get("lop").longValue()); + assertEquals(4L, map.get("marko").longValue()); + } + public static class Traversals extends RepeatTest { @Override @@ -320,5 +337,10 @@ public abstract class RepeatTest extends AbstractGremlinProcessTest { public Traversal<Vertex, Map<Integer, Long>> get_g_VX1X_repeatXgroupCountXmX_byXloopsX_outX_timesX3X_capXmX(final Object v1Id) { return g.V(v1Id).repeat(groupCount("m").by(loops()).out()).times(3).cap("m"); } + + @Override + public Traversal<Vertex, Map<String, Long>> get_g_V_repeatXbothX_untilXname_eq_marko_or_loops_gt_1X_groupCount_byXnameX() { + return g.V().repeat(both()).until(t -> t.get().value("name").equals("lop") || t.loops() > 1).<String>groupCount().by("name"); + } } } \ No newline at end of file