Adressed comments made by @spmallette
Project: http://git-wip-us.apache.org/repos/asf/tinkerpop/repo Commit: http://git-wip-us.apache.org/repos/asf/tinkerpop/commit/20948e32 Tree: http://git-wip-us.apache.org/repos/asf/tinkerpop/tree/20948e32 Diff: http://git-wip-us.apache.org/repos/asf/tinkerpop/diff/20948e32 Branch: refs/heads/TINKERPOP-1628 Commit: 20948e328292ea6b8f3c448a5d453f3f6d218258 Parents: 57e2c00 Author: Daniel Kuppitz <[email protected]> Authored: Tue Apr 24 06:29:16 2018 -0700 Committer: Daniel Kuppitz <[email protected]> Committed: Tue Apr 24 06:30:29 2018 -0700 ---------------------------------------------------------------------- CHANGELOG.asciidoc | 2 +- docs/src/reference/the-traversal.asciidoc | 2 ++ gremlin-test/features/map/Select.feature | 28 +++++++++++++++++ .../process/AbstractGremlinProcessTest.java | 14 +++++++++ .../process/traversal/step/map/SelectTest.java | 33 ++++++++++++++++++++ 5 files changed, 78 insertions(+), 1 deletion(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/20948e32/CHANGELOG.asciidoc ---------------------------------------------------------------------- diff --git a/CHANGELOG.asciidoc b/CHANGELOG.asciidoc index 812d44a..ab20fff 100644 --- a/CHANGELOG.asciidoc +++ b/CHANGELOG.asciidoc @@ -25,6 +25,7 @@ image::https://raw.githubusercontent.com/apache/tinkerpop/master/docs/static/ima This release also includes changes from <<release-3-2-9, 3.2.9>>. +* Implemented `TraversalSelectStep` which allows to `select()` runtime-generated keys. * Coerced `BulkSet` to `g:List` in GraphSON 3.0. * Deprecated `CredentialsGraph` DSL in favor of `CredentialsTraversalDsl` which uses the recommended method for Gremlin DSL development. @@ -74,7 +75,6 @@ This release also includes changes from <<release-3-2-8, 3.2.8>>. * TINKERPOP-1357 Centrality Recipes should mention pageRank and OLAP. * TINKERPOP-1489 Provide a Javascript Gremlin Language Variant * TINKERPOP-1586 SubgraphStrategy in OLAP -* TINKERPOP-1628 Implement TraversalSelectStep. * TINKERPOP-1726 Support WebSockets ping/pong keep-alive in Gremlin server * TINKERPOP-1842 iterate() missing in terminal steps documentation * TINKERPOP-1844 Python GLV test should run for GraphSON 3.0 *(breaking)* http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/20948e32/docs/src/reference/the-traversal.asciidoc ---------------------------------------------------------------------- diff --git a/docs/src/reference/the-traversal.asciidoc b/docs/src/reference/the-traversal.asciidoc index 27a97fd..11f24e4 100644 --- a/docs/src/reference/the-traversal.asciidoc +++ b/docs/src/reference/the-traversal.asciidoc @@ -2385,6 +2385,8 @@ link:++http://tinkerpop.apache.org/javadocs/x.y.z/core/org/apache/tinkerpop/grem link:++http://tinkerpop.apache.org/javadocs/x.y.z/core/org/apache/tinkerpop/gremlin/process/traversal/dsl/graph/GraphTraversal.html#select-org.apache.tinkerpop.gremlin.process.traversal.Pop-java.lang.String-++[`select(Pop,String)`], link:++http://tinkerpop.apache.org/javadocs/x.y.z/core/org/apache/tinkerpop/gremlin/process/traversal/dsl/graph/GraphTraversal.html#select-java.lang.String-++[`select(String)`], link:++http://tinkerpop.apache.org/javadocs/x.y.z/core/org/apache/tinkerpop/gremlin/process/traversal/dsl/graph/GraphTraversal.html#select-java.lang.String-java.lang.String-java.lang.String...-++[`select(String,String,String...)`], +link:++http://tinkerpop.apache.org/javadocs/x.y.z/core/org/apache/tinkerpop/gremlin/process/traversal/dsl/graph/GraphTraversal.html#select-org.apache.tinkerpop.gremlin.process.traversal.Traversal-++[`select(Traversal)`], +link:++http://tinkerpop.apache.org/javadocs/x.y.z/core/org/apache/tinkerpop/gremlin/process/traversal/dsl/graph/GraphTraversal.html#select-org.apache.tinkerpop.gremlin.process.traversal.Pop-org.apache.tinkerpop.gremlin.process.traversal.Traversal-++[`select(Pop,Traversal)`], link:++http://tinkerpop.apache.org/javadocs/x.y.z/core/org/apache/tinkerpop/gremlin/structure/Column.html++[`Column`], link:++http://tinkerpop.apache.org/javadocs/x.y.z/core/org/apache/tinkerpop/gremlin/process/traversal/Pop.html++[`Pop`] http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/20948e32/gremlin-test/features/map/Select.feature ---------------------------------------------------------------------- diff --git a/gremlin-test/features/map/Select.feature b/gremlin-test/features/map/Select.feature index 54c15cc..713dd81 100644 --- a/gremlin-test/features/map/Select.feature +++ b/gremlin-test/features/map/Select.feature @@ -531,3 +531,31 @@ Feature: Step - select() | d[3].l | | d[1].l | | d[1].l | + + Scenario: g_V_asXaX_groupXmX_by_byXbothE_countX_barrier_selectXmX_selectXselectXaXX_byXmathX_plus_XX + Given the modern graph + And the traversal of + """ + g.V().as("a").group("m").by().by(__.bothE().count()).barrier().select("m").select(__.select("a")).by(__.math("_+_")) + """ + When iterated to list + Then the result should be unordered + | result | + | d[6].d | + | d[2].d | + | d[6].d | + | d[6].d | + | d[2].d | + | d[2].d | + + Scenario: g_V_asXaX_outXknowsX_asXaX_selectXall_constantXaXX + Given the modern graph + And the traversal of + """ + g.V().as("a").out("knows").as("a").select(Pop.all, __.constant("a")) + """ + When iterated to list + Then the result should be unordered + | result | + | l[v[marko],v[vadas]] | + | l[v[marko],v[josh]] | http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/20948e32/gremlin-test/src/main/java/org/apache/tinkerpop/gremlin/process/AbstractGremlinProcessTest.java ---------------------------------------------------------------------- diff --git a/gremlin-test/src/main/java/org/apache/tinkerpop/gremlin/process/AbstractGremlinProcessTest.java b/gremlin-test/src/main/java/org/apache/tinkerpop/gremlin/process/AbstractGremlinProcessTest.java index 9dbf261..2861724 100644 --- a/gremlin-test/src/main/java/org/apache/tinkerpop/gremlin/process/AbstractGremlinProcessTest.java +++ b/gremlin-test/src/main/java/org/apache/tinkerpop/gremlin/process/AbstractGremlinProcessTest.java @@ -129,6 +129,8 @@ public abstract class AbstractGremlinProcessTest extends AbstractGremlinTest { for (T t : results) { if (t instanceof Map) { assertThat("Checking map result existence: " + t, expectedResults.stream().filter(e -> e instanceof Map).filter(e -> internalCheckMap((Map) e, (Map) t)).findAny().isPresent(), is(true)); + } else if (t instanceof List) { + assertThat("Checking list result existence: " + t, expectedResults.stream().filter(e -> e instanceof List).filter(e -> internalCheckList((List) e, (List) t)).findAny().isPresent(), is(true)); } else { assertThat("Checking result existence: " + t, expectedResults.contains(t), is(true)); } @@ -162,6 +164,18 @@ public abstract class AbstractGremlinProcessTest extends AbstractGremlinTest { } } + private static <A> boolean internalCheckList(final List<A> expectedList, final List<A> actualList) { + if (expectedList.size() != actualList.size()) { + return false; + } + for (int i = 0; i < actualList.size(); i++) { + if (!actualList.get(i).equals(expectedList.get(i))) { + return false; + } + } + return true; + } + private static <A, B> boolean internalCheckMap(final Map<A, B> expectedMap, final Map<A, B> actualMap) { final List<Map.Entry<A, B>> actualList = actualMap.entrySet().stream().sorted((a, b) -> a.getKey().toString().compareTo(b.getKey().toString())).collect(Collectors.toList()); final List<Map.Entry<A, B>> expectedList = expectedMap.entrySet().stream().sorted((a, b) -> a.getKey().toString().compareTo(b.getKey().toString())).collect(Collectors.toList()); http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/20948e32/gremlin-test/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/map/SelectTest.java ---------------------------------------------------------------------- diff --git a/gremlin-test/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/map/SelectTest.java b/gremlin-test/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/map/SelectTest.java index 9376e13..3140004 100644 --- a/gremlin-test/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/map/SelectTest.java +++ b/gremlin-test/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/map/SelectTest.java @@ -85,6 +85,10 @@ public abstract class SelectTest extends AbstractGremlinProcessTest { public abstract Traversal<Vertex, Long> get_g_V_asXaX_groupXmX_by_byXbothE_countX_barrier_selectXmX_selectXselectXaXX(); + public abstract Traversal<Vertex, Double> get_g_V_asXaX_groupXmX_by_byXbothE_countX_barrier_selectXmX_selectXselectXaXX_byXmathX_plus_XX(); + + public abstract Traversal<Vertex, List<Vertex>> get_g_V_asXaX_outXknowsX_asXaX_selectXall_constantXaXX(); + // below are original back()-tests public abstract Traversal<Vertex, Vertex> get_g_VX1X_asXhereX_out_selectXhereX(final Object v1Id); @@ -351,6 +355,25 @@ public abstract class SelectTest extends AbstractGremlinProcessTest { checkResults(Arrays.asList(3L, 1L, 3L, 3L, 1L, 1L), traversal); } + @Test + @LoadGraphWith(MODERN) + public void g_V_asXaX_groupXmX_by_byXbothE_countX_barrier_selectXmX_selectXselectXaXX_byXmathX_plus_XX() { + final Traversal<Vertex, Double> traversal = get_g_V_asXaX_groupXmX_by_byXbothE_countX_barrier_selectXmX_selectXselectXaXX_byXmathX_plus_XX(); + printTraversalForm(traversal); + checkResults(Arrays.asList(6D, 2D, 6D, 6D, 2D, 2D), traversal); + } + + @Test + @LoadGraphWith(MODERN) + public void g_V_asXaX_outXknowsX_asXaX_selectXall_constantXaXX() { + final Vertex marko = convertToVertex(graph, "marko"); + final Vertex vadas = convertToVertex(graph, "vadas"); + final Vertex josh = convertToVertex(graph, "josh"); + final Traversal<Vertex, List<Vertex>> traversal = get_g_V_asXaX_outXknowsX_asXaX_selectXall_constantXaXX(); + printTraversalForm(traversal); + checkResults(Arrays.asList(Arrays.asList(marko, vadas), Arrays.asList(marko, josh)), traversal); + } + // below are original back()-tests @Test @@ -737,6 +760,16 @@ public abstract class SelectTest extends AbstractGremlinProcessTest { return g.V().as("a").group("m").by().by(__.bothE().count()).barrier().select("m").select(__.select("a")); } + @Override + public Traversal<Vertex, Double> get_g_V_asXaX_groupXmX_by_byXbothE_countX_barrier_selectXmX_selectXselectXaXX_byXmathX_plus_XX() { + return g.V().as("a").group("m").by().by(__.bothE().count()).barrier().select("m").<Double>select(__.select("a")).by(__.math("_+_")); + } + + @Override + public Traversal<Vertex, List<Vertex>> get_g_V_asXaX_outXknowsX_asXaX_selectXall_constantXaXX() { + return g.V().as("a").out("knows").as("a").select(Pop.all, (Traversal) __.constant("a")); + } + // below are original back()-tests @Override
