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 2016/02/17 04:45:25 UTC
incubator-tinkerpop git commit: TraversalVertexProgram now uses the
GraphStep instead of reasoning on its internal state. This simplifies the
code and stages us for mid-traversal V()/E(). Added a new GraphTest. Fixed an
old problem with TraversalVertexPr
Repository: incubator-tinkerpop
Updated Branches:
refs/heads/TINKERPOP-1154 01b4a539b -> 86284f2c8
TraversalVertexProgram now uses the GraphStep instead of reasoning on its internal state. This simplifies the code and stages us for mid-traversal V()/E(). Added a new GraphTest. Fixed an old problem with TraversalVertexProgram and headless-traversals. I just changed and old GraphComputerTest and it worked. Sweet.
Project: http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/commit/86284f2c
Tree: http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/tree/86284f2c
Diff: http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/diff/86284f2c
Branch: refs/heads/TINKERPOP-1154
Commit: 86284f2c8f6c13782e5165c37e35c7a56a66192a
Parents: 01b4a53
Author: Marko A. Rodriguez <ok...@gmail.com>
Authored: Tue Feb 16 20:45:15 2016 -0700
Committer: Marko A. Rodriguez <ok...@gmail.com>
Committed: Tue Feb 16 20:45:15 2016 -0700
----------------------------------------------------------------------
.../ranking/pagerank/PageRankVertexProgram.java | 25 ++++---
.../traversal/TraversalVertexProgram.java | 78 +++++++-------------
.../step/map/PageRankVertexProgramStep.java | 2 +-
.../process/traversal/step/map/GraphStep.java | 1 +
.../decoration/VertexProgramStrategy.java | 2 +-
.../traversal/step/map/GroovyGraphTest.groovy | 5 ++
.../process/computer/GraphComputerTest.java | 3 +-
.../process/traversal/step/map/GraphTest.java | 15 ++++
.../structure/TinkerGraphPlayTest.java | 7 +-
9 files changed, 70 insertions(+), 68 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/blob/86284f2c/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/computer/ranking/pagerank/PageRankVertexProgram.java
----------------------------------------------------------------------
diff --git a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/computer/ranking/pagerank/PageRankVertexProgram.java b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/computer/ranking/pagerank/PageRankVertexProgram.java
index b0b4a93..d6d2e9b 100644
--- a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/computer/ranking/pagerank/PageRankVertexProgram.java
+++ b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/computer/ranking/pagerank/PageRankVertexProgram.java
@@ -53,7 +53,7 @@ public class PageRankVertexProgram extends StaticVertexProgram<Double> {
public static final String PAGE_RANK = "gremlin.pageRankVertexProgram.pageRank";
public static final String EDGE_COUNT = "gremlin.pageRankVertexProgram.edgeCount";
- public static final String PAGE_RANK_PROPERTY = "gremlin.pageRankVertexProgram.pageRankProperty";
+ public static final String PROPERTY = "gremlin.pageRankVertexProgram.property";
private static final String VERTEX_COUNT = "gremlin.pageRankVertexProgram.vertexCount";
private static final String ALPHA = "gremlin.pageRankVertexProgram.alpha";
private static final String TOTAL_ITERATIONS = "gremlin.pageRankVertexProgram.totalIterations";
@@ -67,7 +67,7 @@ public class PageRankVertexProgram extends StaticVertexProgram<Double> {
private double vertexCountAsDouble = 1.0d;
private double alpha = 0.85d;
private int totalIterations = 30;
- private String pageRankProperty = PAGE_RANK;
+ private String property = PAGE_RANK;
private Set<String> computeKeys;
private PageRankVertexProgram() {
@@ -86,9 +86,8 @@ public class PageRankVertexProgram extends StaticVertexProgram<Double> {
this.vertexCountAsDouble = configuration.getDouble(VERTEX_COUNT, 1.0d);
this.alpha = configuration.getDouble(ALPHA, 0.85d);
this.totalIterations = configuration.getInt(TOTAL_ITERATIONS, 30);
- this.pageRankProperty = configuration.getString(PAGE_RANK_PROPERTY, PAGE_RANK);
- this.computeKeys = new HashSet<>(Arrays.asList(this.pageRankProperty, EDGE_COUNT));
-
+ this.property = configuration.getString(PROPERTY, PAGE_RANK);
+ this.computeKeys = new HashSet<>(Arrays.asList(this.property, EDGE_COUNT));
}
@Override
@@ -97,7 +96,7 @@ public class PageRankVertexProgram extends StaticVertexProgram<Double> {
configuration.setProperty(VERTEX_COUNT, this.vertexCountAsDouble);
configuration.setProperty(ALPHA, this.alpha);
configuration.setProperty(TOTAL_ITERATIONS, this.totalIterations);
- configuration.setProperty(PAGE_RANK_PROPERTY, this.pageRankProperty);
+ configuration.setProperty(PROPERTY, this.property);
if (null != this.edgeTraversal)
this.edgeTraversal.storeState(configuration, EDGE_TRAVERSAL);
if (null != this.vertexTraversal)
@@ -143,7 +142,7 @@ public class PageRankVertexProgram extends StaticVertexProgram<Double> {
} else if (1 == memory.getIteration()) {
double initialPageRank = 1.0d / this.vertexCountAsDouble;
double edgeCount = IteratorUtils.reduce(messenger.receiveMessages(), 0.0d, (a, b) -> a + b);
- vertex.property(VertexProperty.Cardinality.single, this.pageRankProperty, initialPageRank);
+ vertex.property(VertexProperty.Cardinality.single, this.property, initialPageRank);
vertex.property(VertexProperty.Cardinality.single, EDGE_COUNT, edgeCount);
messenger.sendMessage(this.incidentMessageScope, initialPageRank / edgeCount);
} else {
@@ -151,7 +150,7 @@ public class PageRankVertexProgram extends StaticVertexProgram<Double> {
return;
double newPageRank = IteratorUtils.reduce(messenger.receiveMessages(), 0.0d, (a, b) -> a + b);
newPageRank = (this.alpha * newPageRank) + ((1.0d - this.alpha) / this.vertexCountAsDouble);
- vertex.property(VertexProperty.Cardinality.single, this.pageRankProperty, newPageRank);
+ vertex.property(VertexProperty.Cardinality.single, this.property, newPageRank);
messenger.sendMessage(this.incidentMessageScope, newPageRank / vertex.<Double>value(EDGE_COUNT));
}
}
@@ -188,8 +187,8 @@ public class PageRankVertexProgram extends StaticVertexProgram<Double> {
return this;
}
- public Builder pageRankProperty(final String key) {
- this.configuration.setProperty(PAGE_RANK_PROPERTY, key);
+ public Builder property(final String key) {
+ this.configuration.setProperty(PROPERTY, key);
return this;
}
@@ -208,11 +207,17 @@ public class PageRankVertexProgram extends StaticVertexProgram<Double> {
return this;
}
+ /**
+ * @deprecated As of release 3.2.0, replaced by {@link org.apache.tinkerpop.gremlin.process.computer.ranking.pagerank.PageRankVertexProgram.Builder#edges(Traversal.Admin)}
+ */
@Deprecated
public Builder traversal(final TraversalSource traversalSource, final String scriptEngine, final String traversalScript, final Object... bindings) {
return this.edges(new ScriptTraversal<>(traversalSource, scriptEngine, traversalScript, bindings));
}
+ /**
+ * @deprecated As of release 3.2.0, replaced by {@link org.apache.tinkerpop.gremlin.process.computer.ranking.pagerank.PageRankVertexProgram.Builder#edges(Traversal.Admin)}
+ */
@Deprecated
public Builder traversal(final Traversal.Admin<Vertex, Edge> traversal) {
return this.edges(traversal);
http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/blob/86284f2c/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/computer/traversal/TraversalVertexProgram.java
----------------------------------------------------------------------
diff --git a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/computer/traversal/TraversalVertexProgram.java b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/computer/traversal/TraversalVertexProgram.java
index 4ceeb48..fa9054e 100644
--- a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/computer/traversal/TraversalVertexProgram.java
+++ b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/computer/traversal/TraversalVertexProgram.java
@@ -32,7 +32,6 @@ import org.apache.tinkerpop.gremlin.process.traversal.Traversal;
import org.apache.tinkerpop.gremlin.process.traversal.TraversalSideEffects;
import org.apache.tinkerpop.gremlin.process.traversal.TraversalSource;
import org.apache.tinkerpop.gremlin.process.traversal.Traverser;
-import org.apache.tinkerpop.gremlin.process.traversal.TraverserGenerator;
import org.apache.tinkerpop.gremlin.process.traversal.step.MapReducer;
import org.apache.tinkerpop.gremlin.process.traversal.step.map.GraphStep;
import org.apache.tinkerpop.gremlin.process.traversal.step.sideEffect.SideEffectCapStep;
@@ -43,13 +42,14 @@ import org.apache.tinkerpop.gremlin.process.traversal.util.ScriptTraversal;
import org.apache.tinkerpop.gremlin.process.traversal.util.TraversalHelper;
import org.apache.tinkerpop.gremlin.process.traversal.util.TraversalMatrix;
import org.apache.tinkerpop.gremlin.structure.Direction;
-import org.apache.tinkerpop.gremlin.structure.Edge;
import org.apache.tinkerpop.gremlin.structure.Element;
import org.apache.tinkerpop.gremlin.structure.Graph;
import org.apache.tinkerpop.gremlin.structure.Vertex;
import org.apache.tinkerpop.gremlin.structure.VertexProperty;
import org.apache.tinkerpop.gremlin.structure.util.ElementHelper;
import org.apache.tinkerpop.gremlin.structure.util.StringFactory;
+import org.apache.tinkerpop.gremlin.util.iterator.EmptyIterator;
+import org.apache.tinkerpop.gremlin.util.iterator.IteratorUtils;
import java.util.Arrays;
import java.util.Collections;
@@ -135,56 +135,32 @@ public final class TraversalVertexProgram implements VertexProgram<TraverserSet<
public void execute(final Vertex vertex, final Messenger<TraverserSet<?>> messenger, final Memory memory) {
this.traversal.getSideEffects().setLocalVertex(vertex);
if (memory.isInitialIteration()) { // ITERATION 1
- if (!(this.traversal.getStartStep() instanceof GraphStep)) { // NOT A GRAPH-STEP TRAVERSAL
- final TraverserSet<Object> haltedTraversers = vertex.<TraverserSet<Object>>property(HALTED_TRAVERSERS).orElse(new TraverserSet<>());
- vertex.property(VertexProperty.Cardinality.single, HALTED_TRAVERSERS, haltedTraversers);
- if (haltedTraversers.isEmpty()) {
- memory.and(VOTE_TO_HALT, true);
- } else {
- final TraverserSet<Object> aliveTraverses = new TraverserSet<>();
- haltedTraversers.forEach(traverser -> {
- traverser.setStepId(this.traversal.getStartStep().getId());
- aliveTraverses.add(traverser);
- });
- haltedTraversers.clear();
- memory.and(VOTE_TO_HALT, TraverserExecutor.execute(vertex, new SingleMessenger<>(messenger, aliveTraverses), this.traversalMatrix));
- }
- } else { // A GRAPH-STEP TRAVERSAL
- final TraverserSet<Object> haltedTraversers = new TraverserSet<>();
- vertex.property(VertexProperty.Cardinality.single, HALTED_TRAVERSERS, haltedTraversers);
- final GraphStep<Element, Element> graphStep = (GraphStep<Element, Element>) this.traversal.getStartStep();
- final String future = (this.traversal.getStartStep() instanceof GraphStep) ? graphStep.getNextStep().getId() : this.traversal.getStartStep().getId();
- final TraverserGenerator traverserGenerator = this.traversal.getTraverserGenerator();
- if (graphStep.returnsVertex()) { // VERTICES (process the first step locally)
- if (ElementHelper.idExists(vertex.id(), graphStep.getIds())) {
- final Traverser.Admin<Element> traverser = traverserGenerator.generate(vertex, graphStep, 1l);
- traverser.setStepId(future);
- traverser.detach(); // TODO: bad?
- if (traverser.isHalted())
- haltedTraversers.add((Traverser.Admin) traverser);
- else
- memory.and(VOTE_TO_HALT, TraverserExecutor.execute(vertex, new SingleMessenger<>(messenger, new TraverserSet<>(traverser)), this.traversalMatrix));
- }
- } else { // EDGES (process the first step via a message pass)
- boolean voteToHalt = true;
- final Iterator<Edge> starts = vertex.edges(Direction.OUT);
- while (starts.hasNext()) {
- final Edge start = starts.next();
- if (ElementHelper.idExists(start.id(), graphStep.getIds())) {
- final Traverser.Admin<Element> traverser = traverserGenerator.generate(start, graphStep, 1l);
- traverser.setStepId(future);
- traverser.detach(); // TODO: bad?
- if (traverser.isHalted())
- haltedTraversers.add((Traverser.Admin) traverser);
- else {
- voteToHalt = false;
- messenger.sendMessage(MessageScope.Global.of(vertex), new TraverserSet<>(traverser));
- }
- }
- }
- memory.and(VOTE_TO_HALT, voteToHalt);
- }
+ final TraverserSet<Object> haltedTraversers = vertex.<TraverserSet<Object>>property(HALTED_TRAVERSERS).orElse(new TraverserSet<>());
+ vertex.property(VertexProperty.Cardinality.single, HALTED_TRAVERSERS, haltedTraversers);
+ final TraverserSet<Object> aliveTraverses = new TraverserSet<>();
+ IteratorUtils.removeOnNext(haltedTraversers.iterator()).forEachRemaining(traverser -> {
+ traverser.setStepId(this.traversal.getStartStep().getId());
+ aliveTraverses.add((Traverser.Admin) traverser);
+ });
+ assert haltedTraversers.isEmpty();
+ if (this.traversal.getStartStep() instanceof GraphStep) {
+ final GraphStep<?, ?> graphStep = (GraphStep<Element, Element>) this.traversal.getStartStep();
+ graphStep.reset();
+ aliveTraverses.forEach(traverser -> graphStep.addStart((Traverser.Admin) traverser));
+ aliveTraverses.clear();
+ if (graphStep.returnsVertex())
+ graphStep.setIteratorSupplier(() -> ElementHelper.idExists(vertex.id(), graphStep.getIds()) ? (Iterator) IteratorUtils.of(vertex) : EmptyIterator.instance());
+ else
+ graphStep.setIteratorSupplier(() -> (Iterator) IteratorUtils.filter(vertex.edges(Direction.OUT), edge -> ElementHelper.idExists(edge.id(), graphStep.getIds())));
+ graphStep.forEachRemaining(traverser -> {
+ if (traverser.asAdmin().isHalted()) {
+ traverser.asAdmin().detach();
+ haltedTraversers.add((Traverser.Admin) traverser);
+ } else
+ aliveTraverses.add((Traverser.Admin) traverser);
+ });
}
+ memory.and(VOTE_TO_HALT, aliveTraverses.isEmpty() || TraverserExecutor.execute(vertex, new SingleMessenger<>(messenger, aliveTraverses), this.traversalMatrix));
} else { // ITERATION 1+
memory.and(VOTE_TO_HALT, TraverserExecutor.execute(vertex, messenger, this.traversalMatrix));
}
http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/blob/86284f2c/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/computer/traversal/step/map/PageRankVertexProgramStep.java
----------------------------------------------------------------------
diff --git a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/computer/traversal/step/map/PageRankVertexProgramStep.java b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/computer/traversal/step/map/PageRankVertexProgramStep.java
index 59b31ad..7cc543a 100644
--- a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/computer/traversal/step/map/PageRankVertexProgramStep.java
+++ b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/computer/traversal/step/map/PageRankVertexProgramStep.java
@@ -107,7 +107,7 @@ public final class PageRankVertexProgramStep extends AbstractStep<ComputerResult
private PageRankVertexProgram generateProgram(final Graph graph) {
return PageRankVertexProgram.build()
- .pageRankProperty(this.pageRankProperty)
+ .property(this.pageRankProperty)
.edges(this.compileTraversal(graph))
.create(graph);
}
http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/blob/86284f2c/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/map/GraphStep.java
----------------------------------------------------------------------
diff --git a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/map/GraphStep.java b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/map/GraphStep.java
index ca332bc..4131b83 100644
--- a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/map/GraphStep.java
+++ b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/map/GraphStep.java
@@ -131,6 +131,7 @@ public class GraphStep<S, E extends Element> extends AbstractStep<S, E> implemen
public void reset() {
super.reset();
this.head = null;
+ this.done = false;
this.iterator = EmptyIterator.instance();
}
http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/blob/86284f2c/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/strategy/decoration/VertexProgramStrategy.java
----------------------------------------------------------------------
diff --git a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/strategy/decoration/VertexProgramStrategy.java b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/strategy/decoration/VertexProgramStrategy.java
index ba9dec3..354e5a5 100644
--- a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/strategy/decoration/VertexProgramStrategy.java
+++ b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/strategy/decoration/VertexProgramStrategy.java
@@ -96,7 +96,7 @@ public final class VertexProgramStrategy extends AbstractTraversalStrategy<Trave
TraversalHelper.insertAfterStep(computerResultStep, (Step) step, traversal);
}
});
- if (traversal.getEndStep() instanceof PageRankVertexProgramStep) {
+ if (traversal.getEndStep() instanceof PageRankVertexProgramStep) { // TODO: VertexComputing but not TraversalVertexProgramStep
final TraversalVertexProgramStep traversalVertexProgramStep = new TraversalVertexProgramStep(traversal, __.identity().asAdmin());
traversal.addStep(traversalVertexProgramStep);
traversal.addStep(new ComputerResultStep<>(traversal, true));
http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/blob/86284f2c/gremlin-groovy-test/src/main/groovy/org/apache/tinkerpop/gremlin/process/traversal/step/map/GroovyGraphTest.groovy
----------------------------------------------------------------------
diff --git a/gremlin-groovy-test/src/main/groovy/org/apache/tinkerpop/gremlin/process/traversal/step/map/GroovyGraphTest.groovy b/gremlin-groovy-test/src/main/groovy/org/apache/tinkerpop/gremlin/process/traversal/step/map/GroovyGraphTest.groovy
index bad69aa..cff3e65 100644
--- a/gremlin-groovy-test/src/main/groovy/org/apache/tinkerpop/gremlin/process/traversal/step/map/GroovyGraphTest.groovy
+++ b/gremlin-groovy-test/src/main/groovy/org/apache/tinkerpop/gremlin/process/traversal/step/map/GroovyGraphTest.groovy
@@ -37,6 +37,11 @@ public abstract class GroovyGraphTest {
}
@Override
+ public Traversal<Vertex, String> get_g_V_outXknowsX_V_name() {
+ new ScriptTraversal<>(g, "gremlin-groovy", "g.V.out('knows').V.name")
+ }
+
+ @Override
public Traversal<Vertex, String> get_g_V_hasXname_GarciaX_inXsungByX_asXsongX_V_hasXname_Willie_DixonX_inXwrittenByX_whereXeqXsongXX_name() {
new ScriptTraversal<>(g, "gremlin-groovy", "g.V.has('name','Garcia').in('sungBy').as('song').V.has('name','Willie_Dixon').in('writtenBy').where(eq('song')).name")
}
http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/blob/86284f2c/gremlin-test/src/main/java/org/apache/tinkerpop/gremlin/process/computer/GraphComputerTest.java
----------------------------------------------------------------------
diff --git a/gremlin-test/src/main/java/org/apache/tinkerpop/gremlin/process/computer/GraphComputerTest.java b/gremlin-test/src/main/java/org/apache/tinkerpop/gremlin/process/computer/GraphComputerTest.java
index 6dc8015..254ac31 100644
--- a/gremlin-test/src/main/java/org/apache/tinkerpop/gremlin/process/computer/GraphComputerTest.java
+++ b/gremlin-test/src/main/java/org/apache/tinkerpop/gremlin/process/computer/GraphComputerTest.java
@@ -1859,9 +1859,8 @@ public class GraphComputerTest extends AbstractGremlinProcessTest {
assertEquals(6, graph2.traversal().V().values(PageRankVertexProgram.PAGE_RANK).count().next().intValue());
assertEquals(6, graph2.traversal().V().values(PageRankVertexProgram.EDGE_COUNT).count().next().intValue());
//
- // TODO: Need to solve the chicken and the egg problem with how TraversalVertexPrograms and strategies play on each other.
final ComputerResult result3 = graph2.compute(graphProvider.getGraphComputer(graph2).getClass())
- .program(TraversalVertexProgram.build().traversal(__.V().groupCount("m").by(__.values(PageRankVertexProgram.PAGE_RANK).count()).label().asAdmin()).create(graph2)).persist(GraphComputer.Persist.EDGES).result(GraphComputer.ResultGraph.NEW).submit().get();
+ .program(TraversalVertexProgram.build().traversal(g.V().groupCount("m").by(__.values(PageRankVertexProgram.PAGE_RANK).count()).label().asAdmin()).create(graph2)).persist(GraphComputer.Persist.EDGES).result(GraphComputer.ResultGraph.NEW).submit().get();
final Graph graph3 = result3.graph();
final Memory memory3 = result3.memory();
assertTrue(memory3.keys().contains("m"));
http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/blob/86284f2c/gremlin-test/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/map/GraphTest.java
----------------------------------------------------------------------
diff --git a/gremlin-test/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/map/GraphTest.java b/gremlin-test/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/map/GraphTest.java
index 4153125..97c1f9b 100644
--- a/gremlin-test/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/map/GraphTest.java
+++ b/gremlin-test/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/map/GraphTest.java
@@ -52,6 +52,8 @@ public abstract class GraphTest extends AbstractGremlinProcessTest {
public abstract Traversal<Vertex, Edge> get_g_V_hasLabelXpersonX_asXpX_VXsoftwareX_addInEXuses_pX();
+ public abstract Traversal<Vertex, String> get_g_V_outXknowsX_V_name();
+
@Test
@LoadGraphWith(MODERN)
public void g_VX1X_V_valuesXnameX() {
@@ -87,6 +89,14 @@ public abstract class GraphTest extends AbstractGremlinProcessTest {
assertEquals(8, counter);
}
+ @Test
+ @LoadGraphWith(MODERN)
+ public void g_V_outXknowsX_V_name() {
+ final Traversal<Vertex, String> traversal = get_g_V_outXknowsX_V_name();
+ printTraversalForm(traversal);
+ checkResults(Arrays.asList("marko", "marko", "josh", "josh", "vadas", "vadas", "peter", "peter", "lop", "lop", "ripple", "ripple"), traversal);
+ }
+
public static class Traversals extends GraphTest {
@Override
@@ -95,6 +105,11 @@ public abstract class GraphTest extends AbstractGremlinProcessTest {
}
@Override
+ public Traversal<Vertex, String> get_g_V_outXknowsX_V_name() {
+ return g.V().out("knows").V().values("name");
+ }
+
+ @Override
public Traversal<Vertex, String> get_g_V_hasXname_GarciaX_inXsungByX_asXsongX_V_hasXname_Willie_DixonX_inXwrittenByX_whereXeqXsongXX_name() {
return g.V().has("artist", "name", "Garcia").in("sungBy").as("song")
.V().has("artist", "name", "Willie_Dixon").in("writtenBy").where(P.eq("song")).values("name");
http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/blob/86284f2c/tinkergraph-gremlin/src/test/java/org/apache/tinkerpop/gremlin/tinkergraph/structure/TinkerGraphPlayTest.java
----------------------------------------------------------------------
diff --git a/tinkergraph-gremlin/src/test/java/org/apache/tinkerpop/gremlin/tinkergraph/structure/TinkerGraphPlayTest.java b/tinkergraph-gremlin/src/test/java/org/apache/tinkerpop/gremlin/tinkergraph/structure/TinkerGraphPlayTest.java
index 5def976..921c4d5 100644
--- a/tinkergraph-gremlin/src/test/java/org/apache/tinkerpop/gremlin/tinkergraph/structure/TinkerGraphPlayTest.java
+++ b/tinkergraph-gremlin/src/test/java/org/apache/tinkerpop/gremlin/tinkergraph/structure/TinkerGraphPlayTest.java
@@ -74,11 +74,12 @@ public class TinkerGraphPlayTest {
@Ignore
public void testPlay8() throws Exception {
Graph graph = TinkerFactory.createModern();
- GraphTraversalSource g = graph.traversal().withComputer(); //GraphTraversalSource.computer());
+ GraphTraversalSource g = graph.traversal(); //GraphTraversalSource.computer());
//System.out.println(g.V().outE("knows").identity().inV().count().is(P.eq(5)).explain());
//System.out.println(g.V().hasLabel("person").fold().order(Scope.local).by("age").toList());
- System.out.println(g.V().hasLabel("person").pageRank().by("pageRank").order().by("pageRank").valueMap("name", "pageRank").iterate().toString());
- System.out.println(g.V().hasLabel("person").pageRank().by("pageRank").order().by("pageRank").valueMap("name", "pageRank").toList());
+ System.out.println(g.V().out("knows").V().values("name").toString());
+ System.out.println(g.V().out("knows").V().values("name").iterate().toString());
+ System.out.println(g.V().out("knows").V().values("name").toList());
//System.out.println(g.V().pageRank().order().by(PageRankVertexProgram.PAGE_RANK).valueMap().toList());
}