Merge branch 'TINKERPOP-1764' into tp32
Project: http://git-wip-us.apache.org/repos/asf/tinkerpop/repo Commit: http://git-wip-us.apache.org/repos/asf/tinkerpop/commit/bef6b3fe Tree: http://git-wip-us.apache.org/repos/asf/tinkerpop/tree/bef6b3fe Diff: http://git-wip-us.apache.org/repos/asf/tinkerpop/diff/bef6b3fe Branch: refs/heads/tp32 Commit: bef6b3fea4303fe8204c4556a9bf1ee0615a6826 Parents: 99554b9 a822ee2 Author: Marko A. Rodriguez <okramma...@gmail.com> Authored: Tue Sep 5 16:46:14 2017 -0600 Committer: Marko A. Rodriguez <okramma...@gmail.com> Committed: Tue Sep 5 16:46:14 2017 -0600 ---------------------------------------------------------------------- CHANGELOG.asciidoc | 1 + .../upgrade/release-3.2.x-incubating.asciidoc | 39 ++++++++++++++++++++ .../process/traversal/step/map/MatchStep.java | 6 ++- .../traversal/step/map/GroovyMatchTest.groovy | 10 +++++ .../process/traversal/step/map/MatchTest.java | 22 +++++++++++ 5 files changed, 76 insertions(+), 2 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/bef6b3fe/CHANGELOG.asciidoc ---------------------------------------------------------------------- diff --cc CHANGELOG.asciidoc index e227a9e,102f74d..3ec3802 --- a/CHANGELOG.asciidoc +++ b/CHANGELOG.asciidoc @@@ -26,8 -26,7 +26,9 @@@ image::https://raw.githubusercontent.co TinkerPop 3.2.7 (Release Date: NOT OFFICIALLY RELEASED YET) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +* The Console's `plugin.txt` file is only updated if there were manually uninstalled plugins. +* Fixed a bug in `MatchStep` where mid-traversal `where()` variables were not being considered in start-scope. + * Generalized `MatchStep` to locally compute all clauses with barriers (not just reducing barriers). * Ensured that plugins were applied in the order they were configured. * Fixed a bug in `Neo4jGremlinPlugin` that prevented it from loading properly in the `GremlinPythonScriptEngine`. * Fixed a bug in `ComputerVerificationStrategy` where child traversals were being analyzed prior to compilation. http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/bef6b3fe/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/map/MatchStep.java ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/bef6b3fe/gremlin-groovy-test/src/main/groovy/org/apache/tinkerpop/gremlin/process/traversal/step/map/GroovyMatchTest.groovy ---------------------------------------------------------------------- diff --cc gremlin-groovy-test/src/main/groovy/org/apache/tinkerpop/gremlin/process/traversal/step/map/GroovyMatchTest.groovy index 45408ac,a93ae36..4c0fbaa --- a/gremlin-groovy-test/src/main/groovy/org/apache/tinkerpop/gremlin/process/traversal/step/map/GroovyMatchTest.groovy +++ b/gremlin-groovy-test/src/main/groovy/org/apache/tinkerpop/gremlin/process/traversal/step/map/GroovyMatchTest.groovy @@@ -379,14 -381,12 +379,24 @@@ public abstract class GroovyMatchTest } @Override + public Traversal<Vertex, String> get_g_V_matchXa_hasXsong_name_sunshineX__a_mapX0followedBy_weight_meanX_b__a_0followedBy_c__c_filterXweight_whereXgteXbXXX_outV_dX_selectXdX_byXnameX() { + new ScriptTraversal<>(g, "gremlin-groovy", """ + g.V().match( + __.as("a").has("song", "name", "HERE COMES SUNSHINE"), + __.as("a").map(inE("followedBy").weight.mean()).as("b"), + __.as("a").inE("followedBy").as("c"), + __.as("c").filter(values("weight").where(gte("b"))).outV.as("d")). + select("d").by("name"); ++ """) ++ } ++ ++ @Override + public Traversal<Vertex, Map<String, String>> get_g_V_matchXa_outEXcreatedX_order_byXweight_decrX_limitX1X_inV_b__b_hasXlang_javaXX_selectXa_bX_byXnameX() { + new ScriptTraversal<>(g, "gremlin-groovy", """ + g.V.match( + __.as("a").outE("created").order.by("weight", decr).limit(1).inV.as("b"), + __.as("b").has("lang", "java")). + select("a", "b").by("name") """) } } http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/bef6b3fe/gremlin-test/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/map/MatchTest.java ---------------------------------------------------------------------- diff --cc gremlin-test/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/map/MatchTest.java index f4bee28,5283637..cab3cbf --- a/gremlin-test/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/map/MatchTest.java +++ b/gremlin-test/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/map/MatchTest.java @@@ -161,10 -160,9 +162,13 @@@ public abstract class MatchTest extend // test inline counts public abstract Traversal<Vertex, Long> get_g_V_matchXa_followedBy_count_isXgtX10XX_b__a_0followedBy_count_isXgtX10XX_bX_count(); + // test mid-clause variables + public abstract Traversal<Vertex, String> get_g_V_matchXa_hasXsong_name_sunshineX__a_mapX0followedBy_weight_meanX_b__a_0followedBy_c__c_filterXweight_whereXgteXbXXX_outV_dX_selectXdX_byXnameX(); + + // test order barriers + public abstract Traversal<Vertex, Map<String, String>> get_g_V_matchXa_outEXcreatedX_order_byXweight_decrX_limitX1X_inV_b__b_hasXlang_javaXX_selectXa_bX_byXnameX(); + + @Test @LoadGraphWith(MODERN) public void g_V_valueMap_matchXa_selectXnameX_bX() { @@@ -573,14 -571,15 +577,24 @@@ } @Test + @LoadGraphWith(GRATEFUL) + public void g_V_matchXa_hasXsong_name_sunshineX__a_mapX0followedBy_weight_meanX_b__a_0followedBy_c__c_filterXweight_whereXgteXbXXX_outV_dX_selectXdX_byXnameX() { + final Traversal<Vertex, String> traversal = get_g_V_matchXa_hasXsong_name_sunshineX__a_mapX0followedBy_weight_meanX_b__a_0followedBy_c__c_filterXweight_whereXgteXbXXX_outV_dX_selectXdX_byXnameX(); + printTraversalForm(traversal); + checkResults(Arrays.asList("THE MUSIC NEVER STOPPED", "PROMISED LAND", "PLAYING IN THE BAND", + "CASEY JONES", "BIG RIVER", "EL PASO", "LIBERTY", "LOOKS LIKE RAIN"), traversal); + } + ++ @Test + @LoadGraphWith(MODERN) + public void g_V_matchXa_outEXcreatedX_order_byXweight_decrX_limitX1X_inV_b__b_hasXlang_javaXX_selectXa_bX_byXnameX() { + final Traversal<Vertex, Map<String, String>> traversal = get_g_V_matchXa_outEXcreatedX_order_byXweight_decrX_limitX1X_inV_b__b_hasXlang_javaXX_selectXa_bX_byXnameX(); + printTraversalForm(traversal); + checkResults(makeMapList(2, + "a", "marko", "b", "lop", + "a", "peter", "b", "lop", + "a", "josh", "b", "ripple"), traversal); + } public static class GreedyMatchTraversals extends Traversals { @Before @@@ -868,13 -867,11 +882,21 @@@ } @Override + public Traversal<Vertex, String> get_g_V_matchXa_hasXsong_name_sunshineX__a_mapX0followedBy_weight_meanX_b__a_0followedBy_c__c_filterXweight_whereXgteXbXXX_outV_dX_selectXdX_byXnameX() { + return g.V().match( + as("a").has("song", "name", "HERE COMES SUNSHINE"), + as("a").map(inE("followedBy").values("weight").mean()).as("b"), + as("a").inE("followedBy").as("c"), + as("c").filter(values("weight").where(P.gte("b"))).outV().as("d")). + <String>select("d").by("name"); + } ++ ++ @Override + public Traversal<Vertex, Map<String, String>> get_g_V_matchXa_outEXcreatedX_order_byXweight_decrX_limitX1X_inV_b__b_hasXlang_javaXX_selectXa_bX_byXnameX() { + return g.V().match( + as("a").outE("created").order().by("weight", decr).limit(1).inV().as("b"), + as("b").has("lang", "java")). + <String>select("a", "b").by("name"); + } } }