You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@tinkerpop.apache.org by ok...@apache.org on 2015/05/01 00:07:35 UTC

incubator-tinkerpop git commit: fixed a bug in SelectStep around multi-label traversals.

Repository: incubator-tinkerpop
Updated Branches:
  refs/heads/master 96e1219e0 -> 4588b73df


fixed a bug in SelectStep around multi-label traversals.


Project: http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/commit/4588b73d
Tree: http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/tree/4588b73d
Diff: http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/diff/4588b73d

Branch: refs/heads/master
Commit: 4588b73df67c703ffc6db39bafd70c3502a6830f
Parents: 96e1219
Author: Marko A. Rodriguez <ok...@gmail.com>
Authored: Thu Apr 30 16:07:27 2015 -0600
Committer: Marko A. Rodriguez <ok...@gmail.com>
Committed: Thu Apr 30 16:07:27 2015 -0600

----------------------------------------------------------------------
 .../process/traversal/step/map/SelectStep.java  |  7 +---
 .../apache/tinkerpop/gremlin/structure/P.java   |  4 +--
 .../traversal/step/map/GroovySelectTest.groovy  | 19 ++++++++---
 .../process/traversal/step/map/SelectTest.java  | 35 ++++++++++++++++++--
 4 files changed, 49 insertions(+), 16 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/blob/4588b73d/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/map/SelectStep.java
----------------------------------------------------------------------
diff --git a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/map/SelectStep.java b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/map/SelectStep.java
index 60c4450..0bbf54f 100644
--- a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/map/SelectStep.java
+++ b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/map/SelectStep.java
@@ -62,12 +62,7 @@ public final class SelectStep<S, E> extends MapStep<S, Map<String, E>> implement
         } else {
             final Path path = traverser.path();
             if (this.selectLabels.isEmpty()) {
-                path.forEach((object, labels) -> {
-                    if (!labels.isEmpty()) {
-                        final E e = (E) TraversalUtil.apply(object, this.traversalRing.next());
-                        labels.forEach(label -> bindings.put(label, e));
-                    }
-                });
+                path.labels().stream().flatMap(labels -> labels.stream()).distinct().forEach(label -> bindings.put(label, (E) TraversalUtil.apply(path.<Object>get(label), this.traversalRing.next())));
             } else {
                 this.selectLabels.forEach(label -> {
                     if (path.hasLabel(label))

http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/blob/4588b73d/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/P.java
----------------------------------------------------------------------
diff --git a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/P.java b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/P.java
index 93b64fe..a745cbd 100644
--- a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/P.java
+++ b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/P.java
@@ -60,8 +60,8 @@ public class P<V> implements Predicate<V>, Serializable {
 
     @Override
     public boolean equals(final Object other) {
-        return other instanceof P && (
-                (P) other).getBiPredicate().equals(this.biPredicate) &&
+        return other instanceof P &&
+                ((P) other).getBiPredicate().equals(this.biPredicate) &&
                 ((((P) other).getValue() == null && this.getValue() == null) || ((P) other).getValue().equals(this.getValue()));
     }
 

http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/blob/4588b73d/gremlin-groovy-test/src/main/groovy/org/apache/tinkerpop/gremlin/process/traversal/step/map/GroovySelectTest.groovy
----------------------------------------------------------------------
diff --git a/gremlin-groovy-test/src/main/groovy/org/apache/tinkerpop/gremlin/process/traversal/step/map/GroovySelectTest.groovy b/gremlin-groovy-test/src/main/groovy/org/apache/tinkerpop/gremlin/process/traversal/step/map/GroovySelectTest.groovy
index ee6cda1..ee5e65c 100644
--- a/gremlin-groovy-test/src/main/groovy/org/apache/tinkerpop/gremlin/process/traversal/step/map/GroovySelectTest.groovy
+++ b/gremlin-groovy-test/src/main/groovy/org/apache/tinkerpop/gremlin/process/traversal/step/map/GroovySelectTest.groovy
@@ -82,25 +82,29 @@ public abstract class GroovySelectTest {
 
         @Override
         public Traversal<Vertex, Map<String, Object>> get_g_V_hasXname_isXmarkoXX_asXaX_select() {
-            return g.V.has(values('name').is('marko')).as('a').select
+            g.V.has(values('name').is('marko')).as('a').select
         }
 
         @Override
         public Traversal<Vertex, Map<String, Object>> get_g_V_label_groupCount_asXxX_select() {
-            return g.V().label().groupCount().as('x').select()
+            g.V().label().groupCount().as('x').select()
         }
 
         @Override
         public Traversal<Vertex, Map<String, Object>> get_g_V_hasLabelXpersonX_asXpersonX_localXbothE_label_groupCountX_asXrelationsX_select_byXnameX_by() {
-            return g.V().hasLabel('person').as('person').local(__.bothE().label().groupCount()).as('relations').select().by('name').by()
+            g.V().hasLabel('person').as('person').local(__.bothE().label().groupCount()).as('relations').select().by('name').by()
         }
 
         @Override
         public Traversal<Vertex, Map<String, Vertex>> get_g_V_chooseXoutE_count_isX0X__asXaX__asXbXX_select() {
-            return g.V().choose(__.outE().count().is(0L), __.as('a'), __.as('b')).select();
+            g.V().choose(__.outE().count().is(0L), __.as('a'), __.as('b')).select();
         }
 
-        //
+        @Override
+        Traversal<Vertex, Map<String, List<Vertex>>> get_g_V_asXaX_outXcreatedX_asXaX_select() {
+            g.V.as('a').out('created').as('a').select
+        }
+//
 
         @Override
         public Traversal<Vertex, Vertex> get_g_VX1X_asXhereX_out_selectXhereX(final Object v1Id) {
@@ -268,6 +272,11 @@ public abstract class GroovySelectTest {
             ComputerTestHelper.compute("g.V.choose(__.outE.count.is(0L), __.as('a'), __.as('b')).select()", g)
         }
 
+        @Override
+        public Traversal<Vertex, Map<String, List<Vertex>>> get_g_V_asXaX_outXcreatedX_asXaX_select() {
+            ComputerTestHelper.compute("g.V.as('a').out('created').as('a').select", g);
+        }
+
         //
 
         @Override

http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/blob/4588b73d/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 ac3f9ee..31ac82d 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
@@ -74,6 +74,8 @@ public abstract class SelectTest extends AbstractGremlinProcessTest {
 
     public abstract Traversal<Vertex, Map<String, Vertex>> get_g_V_chooseXoutE_count_isX0X__asXaX__asXbXX_select();
 
+    public abstract Traversal<Vertex, Map<String, List<Vertex>>> get_g_V_asXaX_outXcreatedX_asXaX_select();
+
     // below we original back()-tests
 
     public abstract Traversal<Vertex, Vertex> get_g_VX1X_asXhereX_out_selectXhereX(final Object v1Id);
@@ -237,8 +239,7 @@ public abstract class SelectTest extends AbstractGremlinProcessTest {
 
     @Test
     @LoadGraphWith(MODERN)
-    @Ignore("There is a HashMap to Element cast problem happening here for some reason in both OLTP and OLAP")
-    // TODO: dkuppitz this has been ignored for some time now -- don't know if the test is bad or the code is bad.
+    @Ignore("There is a HashMap to Element cast problem happening here for some reason in both OLTP and OLAP -- has to do with local barriers! -- thus, bad test.")
     @IgnoreEngine(TraversalEngine.Type.COMPUTER)
     public void g_V_hasLabelXpersonX_asXpersonX_localXbothE_label_groupCountX_asXrelationsX_select_byXnameX_by() {
         final Traversal<Vertex, Map<String, Object>> traversal = get_g_V_hasLabelXpersonX_asXpersonX_localXbothE_label_groupCountX_asXrelationsX_select_byXnameX_by();
@@ -307,6 +308,30 @@ public abstract class SelectTest extends AbstractGremlinProcessTest {
         assertEquals(3, xCounter);
     }
 
+    @Test
+    @LoadGraphWith(MODERN)
+    public void g_V_asXaX_outXcreatedX_asXaX_select() {
+        final Traversal<Vertex, Map<String, List<Vertex>>> traversal = get_g_V_asXaX_outXcreatedX_asXaX_select();
+        printTraversalForm(traversal);
+        int counter = 0;
+        while (traversal.hasNext()) {
+            counter++;
+            final Map<String, List<Vertex>> map = traversal.next();
+            assertEquals(1, map.size());
+            final List<Vertex> list = map.get("a");
+            assertEquals(2, list.size());
+            if (list.get(0).equals(convertToVertex(graph, "marko")))
+                assertEquals(convertToVertex(graph, "lop"), list.get(1));
+            else if (list.get(0).equals(convertToVertex(graph, "peter")))
+                assertEquals(convertToVertex(graph, "lop"), list.get(1));
+            else {
+                assertEquals(convertToVertex(graph, "josh"), list.get(0));
+                assertTrue(convertToVertex(graph, "lop").equals(list.get(1)) || convertToVertex(graph, "ripple").equals(list.get(1)));
+            }
+        }
+        assertEquals(4, counter);
+    }
+
     //
 
     @Test
@@ -401,7 +426,6 @@ public abstract class SelectTest extends AbstractGremlinProcessTest {
 
     @Test
     @LoadGraphWith(MODERN)
-    @IgnoreEngine(TraversalEngine.Type.STANDARD)  // TODO: dkuppitz this fails on OLTP, but passes on OLAP
     public void g_V_outXcreatedX_unionXasXprojectX_inXcreatedX_hasXname_markoX_selectXprojectX__asXprojectX_inXcreatedX_inXknowsX_hasXname_markoX_selectXprojectXX_groupCount_byXnameX() {
         final List<Traversal<Vertex, Map<String, Long>>> traversals = Arrays.asList(get_g_V_outXcreatedX_unionXasXprojectX_inXcreatedX_hasXname_markoX_selectXprojectX__asXprojectX_inXcreatedX_inXknowsX_hasXname_markoX_selectXprojectXX_groupCount_byXnameX());
         traversals.forEach(traversal -> {
@@ -478,6 +502,11 @@ public abstract class SelectTest extends AbstractGremlinProcessTest {
             return g.V().choose(__.outE().count().is(0L), __.as("a"), __.as("b")).select();
         }
 
+        @Override
+        public Traversal<Vertex, Map<String, List<Vertex>>> get_g_V_asXaX_outXcreatedX_asXaX_select() {
+            return g.V().as("a").out("created").as("a").select();
+        }
+
         //
 
         @Override