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