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/06/25 01:51:55 UTC
incubator-tinkerpop git commit: AbstractStep now is the gatekeeper
for determing whether a traverser is propagated to the next step -- it is NOT
if its bulk == 0 or its value == null. Added two test cases to
CoreTraversalTest that verify this behavior.
Repository: incubator-tinkerpop
Updated Branches:
refs/heads/master 7b27da5ac -> 39cc7a6b3
AbstractStep now is the gatekeeper for determing whether a traverser is propagated to the next step -- it is NOT if its bulk == 0 or its value == null. Added two test cases to CoreTraversalTest that verify this behavior.
Project: http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/commit/39cc7a6b
Tree: http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/tree/39cc7a6b
Diff: http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/diff/39cc7a6b
Branch: refs/heads/master
Commit: 39cc7a6b31044a66ea15c113521caaf2ed63ae03
Parents: 7b27da5
Author: Marko A. Rodriguez <ok...@gmail.com>
Authored: Wed Jun 24 17:51:51 2015 -0600
Committer: Marko A. Rodriguez <ok...@gmail.com>
Committed: Wed Jun 24 17:51:51 2015 -0600
----------------------------------------------------------------------
CHANGELOG.asciidoc | 1 +
.../traversal/step/filter/FilterStep.java | 3 +-
.../process/traversal/step/map/MapStep.java | 8 ++---
.../traversal/step/util/AbstractStep.java | 5 ++-
.../process/traversal/CoreTraversalTest.java | 33 +++++++++++++++++---
5 files changed, 34 insertions(+), 16 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/blob/39cc7a6b/CHANGELOG.asciidoc
----------------------------------------------------------------------
diff --git a/CHANGELOG.asciidoc b/CHANGELOG.asciidoc
index a8ba61b..b63f6c1 100644
--- a/CHANGELOG.asciidoc
+++ b/CHANGELOG.asciidoc
@@ -25,6 +25,7 @@ image::http://www.tinkerpop.com/docs/current/images/gremlin-hindu.png[width=225]
TinkerPop 3.0.0.GA (NOT OFFICIALLY RELEASED YET)
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+* `AbstractStep` now guarantees that bulk-less and null-valued traversers are never propagated.
* Added `dedup(string...)` which allows for the deduplication of a stream based on unique scope values.
* Fixed multiple bugs in the Gephi Plugin related to refactoring of traversal side-effects.
* Split `WhereStep` into `WherePredicateStep` and `WhereTraversalStep` to simplify internals.
http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/blob/39cc7a6b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/filter/FilterStep.java
----------------------------------------------------------------------
diff --git a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/filter/FilterStep.java b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/filter/FilterStep.java
index ab364d8..f5f0597 100644
--- a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/filter/FilterStep.java
+++ b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/filter/FilterStep.java
@@ -35,9 +35,8 @@ public abstract class FilterStep<S> extends AbstractStep<S, S> {
protected Traverser<S> processNextStart() {
while (true) {
final Traverser.Admin<S> traverser = this.starts.next();
- if (this.filter(traverser)) {
+ if (this.filter(traverser))
return traverser;
- }
}
}
http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/blob/39cc7a6b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/map/MapStep.java
----------------------------------------------------------------------
diff --git a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/map/MapStep.java b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/map/MapStep.java
index edf3501..a0890c1 100644
--- a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/map/MapStep.java
+++ b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/map/MapStep.java
@@ -33,12 +33,8 @@ public abstract class MapStep<S, E> extends AbstractStep<S, E> {
@Override
protected Traverser<E> processNextStart() {
- while (true) {
- final Traverser.Admin<S> traverser = this.starts.next();
- final E e = this.map(traverser);
- if (null != e)
- return traverser.split(e, this);
- }
+ final Traverser.Admin<S> traverser = this.starts.next();
+ return traverser.split(this.map(traverser), this);
}
protected abstract E map(final Traverser.Admin<S> traverser);
http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/blob/39cc7a6b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/util/AbstractStep.java
----------------------------------------------------------------------
diff --git a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/util/AbstractStep.java b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/util/AbstractStep.java
index 4802e37..399c902 100644
--- a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/util/AbstractStep.java
+++ b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/util/AbstractStep.java
@@ -124,9 +124,8 @@ public abstract class AbstractStep<S, E> implements Step<S, E> {
} else {
while (true) {
final Traverser<E> traverser = this.processNextStart();
- if (0 != traverser.bulk()) {
+ if (0 != traverser.bulk() && null != traverser.get())
return this.prepareTraversalForNextStep(traverser);
- }
}
}
}
@@ -139,7 +138,7 @@ public abstract class AbstractStep<S, E> implements Step<S, E> {
try {
while (true) {
this.nextEnd = this.processNextStart();
- if (0 != this.nextEnd.bulk())
+ if (0 != this.nextEnd.bulk() && null != this.nextEnd.get())
return true;
else
this.nextEnd = null;
http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/blob/39cc7a6b/gremlin-test/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/CoreTraversalTest.java
----------------------------------------------------------------------
diff --git a/gremlin-test/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/CoreTraversalTest.java b/gremlin-test/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/CoreTraversalTest.java
index 5fd4825..930030e 100644
--- a/gremlin-test/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/CoreTraversalTest.java
+++ b/gremlin-test/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/CoreTraversalTest.java
@@ -24,11 +24,18 @@ import org.apache.tinkerpop.gremlin.LoadGraphWith;
import org.apache.tinkerpop.gremlin.process.AbstractGremlinProcessTest;
import org.apache.tinkerpop.gremlin.process.traversal.dsl.graph.GraphTraversal;
import org.apache.tinkerpop.gremlin.process.traversal.step.util.BulkSet;
-import org.apache.tinkerpop.gremlin.structure.*;
+import org.apache.tinkerpop.gremlin.structure.Edge;
+import org.apache.tinkerpop.gremlin.structure.Graph;
+import org.apache.tinkerpop.gremlin.structure.Transaction;
+import org.apache.tinkerpop.gremlin.structure.Vertex;
import org.apache.tinkerpop.gremlin.util.iterator.IteratorUtils;
import org.junit.Test;
-import java.util.*;
+import java.util.HashSet;
+import java.util.List;
+import java.util.Map;
+import java.util.Random;
+import java.util.Set;
import java.util.stream.Collectors;
import static org.apache.tinkerpop.gremlin.LoadGraphWith.GraphData.MODERN;
@@ -49,10 +56,26 @@ import static org.junit.Assert.*;
public class CoreTraversalTest extends AbstractGremlinProcessTest {
@Test
+ @LoadGraphWith
+ public void shouldNeverPropagateANoBulkTraverser() {
+ assertFalse(g.V().dedup().sideEffect(t -> t.asAdmin().setBulk(0)).hasNext());
+ assertEquals(0, g.V().dedup().sideEffect(t -> t.asAdmin().setBulk(0)).toList().size());
+ g.V().dedup().sideEffect(t -> t.asAdmin().setBulk(0)).sideEffect(t -> fail("this should not have happened")).iterate();
+ }
+
+ @Test
+ @LoadGraphWith
+ public void shouldNeverPropagateANullValuedTraverser() {
+ assertFalse(g.V().map(t -> null).hasNext());
+ assertEquals(0, g.V().map(t -> null).toList().size());
+ g.V().map(t -> null).sideEffect(t -> fail("this should not have happened")).iterate();
+ }
+
+ @Test
@LoadGraphWith(MODERN)
public void shouldLoadVerticesViaIds() {
final List<Vertex> vertices = g.V().toList();
- final List<Object> ids = vertices.stream().map(v->v.id()).collect(Collectors.toList());
+ final List<Object> ids = vertices.stream().map(Vertex::id).collect(Collectors.toList());
final List<Vertex> verticesReloaded = g.V(ids.toArray()).toList();
assertEquals(vertices.size(), verticesReloaded.size());
assertEquals(new HashSet<>(vertices), new HashSet<>(verticesReloaded));
@@ -62,7 +85,7 @@ public class CoreTraversalTest extends AbstractGremlinProcessTest {
@LoadGraphWith(MODERN)
public void shouldLoadEdgesViaIds() {
final List<Edge> edges = g.E().toList();
- final List<Object> ids = edges.stream().map(e->e.id()).collect(Collectors.toList());
+ final List<Object> ids = edges.stream().map(Edge::id).collect(Collectors.toList());
final List<Edge> edgesReloaded = g.E(ids.toArray()).toList();
assertEquals(edges.size(), edgesReloaded.size());
assertEquals(new HashSet<>(edges), new HashSet<>(edgesReloaded));
@@ -153,7 +176,7 @@ public class CoreTraversalTest extends AbstractGremlinProcessTest {
@Test
@LoadGraphWith(MODERN)
public void shouldHavePropertyForEachRemainingBehaviorEvenWithStrategyRewrite() {
- final GraphTraversal<Vertex, Map<Object,Long>> traversal = g.V().out().groupCount();
+ final GraphTraversal<Vertex, Map<Object, Long>> traversal = g.V().out().groupCount();
traversal.forEachRemaining(Map.class, map -> assertTrue(map instanceof Map));
}