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/06 19:55:46 UTC
incubator-tinkerpop git commit: anonymous traversals no longer have
EmptyGraph as their graph given that Traverasl.getGraph() is Optional.
This was confusing and caused problems for vendors.
Repository: incubator-tinkerpop
Updated Branches:
refs/heads/master f2d036754 -> 8fbaf5b71
anonymous traversals no longer have EmptyGraph as their graph given that Traverasl.getGraph() is Optional<Graph>. This was confusing and caused problems for vendors.
Project: http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/commit/8fbaf5b7
Tree: http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/tree/8fbaf5b7
Diff: http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/diff/8fbaf5b7
Branch: refs/heads/master
Commit: 8fbaf5b712a7e2f30d2915e742f4856c5e02b955
Parents: f2d0367
Author: Marko A. Rodriguez <ok...@gmail.com>
Authored: Wed May 6 11:54:58 2015 -0600
Committer: Marko A. Rodriguez <ok...@gmail.com>
Committed: Wed May 6 11:55:13 2015 -0600
----------------------------------------------------------------------
CHANGELOG.asciidoc | 1 +
.../dsl/graph/DefaultGraphTraversal.java | 4 +++
.../gremlin/process/traversal/dsl/graph/__.java | 2 +-
.../lambda/AbstractLambdaTraversal.java | 5 +--
.../traversal/util/DefaultTraversal.java | 21 ++++++-----
.../strategy/decoration/EventStrategyTest.java | 37 ++++++++++----------
.../verification/ReadOnlyStrategyTest.java | 30 ++++++++--------
.../traversal/util/DefaultTraversalTest.java | 2 +-
8 files changed, 57 insertions(+), 45 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/blob/8fbaf5b7/CHANGELOG.asciidoc
----------------------------------------------------------------------
diff --git a/CHANGELOG.asciidoc b/CHANGELOG.asciidoc
index f1e142b..12d255d 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.M9 (NOT OFFICIALLY RELEASED YET)
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+* Anonymous traversal no longer have `EmptyGraph` as their graph, but instead use `Optional<Graph>.isPresent() == false`.
* Added `Traversal.Admin.setGraph(Graph)` as strategies that need reference to the graph, need it across all nested traversals.
* `AbstractLambdaTraversal` is now smart about `TraversalParent` and `TraversalStrategies`.
* Fixed bug in `GraphML` reader that was not allowing `<edge>` elements to come before `<node>` elements as allowable by the GraphML specification.
http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/blob/8fbaf5b7/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/dsl/graph/DefaultGraphTraversal.java
----------------------------------------------------------------------
diff --git a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/dsl/graph/DefaultGraphTraversal.java b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/dsl/graph/DefaultGraphTraversal.java
index 8895edc..fd498ba 100644
--- a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/dsl/graph/DefaultGraphTraversal.java
+++ b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/dsl/graph/DefaultGraphTraversal.java
@@ -26,6 +26,10 @@ import org.apache.tinkerpop.gremlin.structure.Graph;
*/
public class DefaultGraphTraversal<S, E> extends DefaultTraversal<S, E> implements GraphTraversal.Admin<S, E> {
+ public DefaultGraphTraversal() {
+ super();
+ }
+
public DefaultGraphTraversal(final Graph graph) {
super(graph);
}
http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/blob/8fbaf5b7/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/dsl/graph/__.java
----------------------------------------------------------------------
diff --git a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/dsl/graph/__.java b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/dsl/graph/__.java
index 74e6e65..2bf1a67 100644
--- a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/dsl/graph/__.java
+++ b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/dsl/graph/__.java
@@ -53,7 +53,7 @@ public class __ {
//////////////////////////////////////////////////////////////////////
public static <A> GraphTraversal<A, A> start() {
- return new DefaultGraphTraversal<>(EmptyGraph.instance());
+ return new DefaultGraphTraversal<>();
}
public static <A> GraphTraversal<A, A> __(final Object... starts) {
http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/blob/8fbaf5b7/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/lambda/AbstractLambdaTraversal.java
----------------------------------------------------------------------
diff --git a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/lambda/AbstractLambdaTraversal.java b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/lambda/AbstractLambdaTraversal.java
index 4d4d6f2..4effad7 100644
--- a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/lambda/AbstractLambdaTraversal.java
+++ b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/lambda/AbstractLambdaTraversal.java
@@ -44,6 +44,7 @@ public abstract class AbstractLambdaTraversal<S, E> implements Traversal.Admin<S
private TraversalStrategies traversalStrategies = EmptyTraversalStrategies.instance();
private TraversalParent traversalParent = (TraversalParent) EmptyStep.instance();
+ private transient Graph graph = null;
public List<Step> getSteps() {
return Collections.emptyList();
@@ -144,12 +145,12 @@ public abstract class AbstractLambdaTraversal<S, E> implements Traversal.Admin<S
@Override
public Optional<Graph> getGraph() {
- return Optional.empty();
+ return Optional.ofNullable(this.graph);
}
@Override
public void setGraph(final Graph graph) {
-
+ this.graph = graph;
}
}
http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/blob/8fbaf5b7/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/util/DefaultTraversal.java
----------------------------------------------------------------------
diff --git a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/util/DefaultTraversal.java b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/util/DefaultTraversal.java
index 3917622..03ea46f 100644
--- a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/util/DefaultTraversal.java
+++ b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/util/DefaultTraversal.java
@@ -28,6 +28,7 @@ import org.apache.tinkerpop.gremlin.process.traversal.engine.StandardTraversalEn
import org.apache.tinkerpop.gremlin.process.traversal.step.TraversalParent;
import org.apache.tinkerpop.gremlin.process.traversal.step.util.EmptyStep;
import org.apache.tinkerpop.gremlin.structure.Graph;
+import org.apache.tinkerpop.gremlin.structure.util.empty.EmptyGraph;
import java.util.ArrayList;
import java.util.Collections;
@@ -44,23 +45,24 @@ public class DefaultTraversal<S, E> implements Traversal.Admin<S, E> {
private long lastEndCount = 0l;
private Step<?, E> finalEndStep = EmptyStep.instance();
private final StepPosition stepPosition = new StepPosition();
-
protected transient Graph graph;
-
protected List<Step> steps = new ArrayList<>();
+ protected TraversalParent traversalParent = (TraversalParent) EmptyStep.instance();
protected TraversalSideEffects sideEffects = new DefaultTraversalSideEffects();
protected TraversalStrategies strategies;
protected TraversalEngine traversalEngine;
-
protected boolean locked = false;
- protected TraversalParent traversalParent = (TraversalParent) EmptyStep.instance();
+ public DefaultTraversal() {
+ this.graph = null;
+ // necessary for anonymous traversals without a graph start (rethink how this works in the future)
+ this.setStrategies(TraversalStrategies.GlobalCache.getStrategies(TraversalStrategies.GlobalCache.getGraphClass(EmptyGraph.instance())));
+ this.traversalEngine = StandardTraversalEngine.instance();
+ }
+
public DefaultTraversal(final Graph graph) {
this.graph = graph;
- // necessary for anonymous traversals without a source (rethink how this works in the future)
- this.setStrategies(TraversalStrategies.GlobalCache.getStrategies(TraversalStrategies.GlobalCache.getGraphClass(this.graph)));
- this.traversalEngine = StandardTraversalEngine.instance();
}
@Override
@@ -73,18 +75,19 @@ public class DefaultTraversal<S, E> implements Traversal.Admin<S, E> {
if (this.locked) throw Traversal.Exceptions.traversalIsLocked();
TraversalHelper.reIdSteps(this.stepPosition, this);
this.strategies.applyStrategies(this);
+ boolean hasGraph = null != this.graph;
for (final Step<?, ?> step : this.getSteps()) {
if (step instanceof TraversalParent) {
for (final Traversal.Admin<?, ?> globalChild : ((TraversalParent) step).getGlobalChildren()) {
globalChild.setStrategies(this.strategies);
globalChild.setEngine(this.traversalEngine);
- globalChild.setGraph(this.graph);
+ if (hasGraph) globalChild.setGraph(this.graph);
globalChild.applyStrategies();
}
for (final Traversal.Admin<?, ?> localChild : ((TraversalParent) step).getLocalChildren()) {
localChild.setStrategies(this.strategies);
localChild.setEngine(StandardTraversalEngine.instance());
- localChild.setGraph(this.graph);
+ if (hasGraph) localChild.setGraph(this.graph);
localChild.applyStrategies();
}
}
http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/blob/8fbaf5b7/gremlin-core/src/test/java/org/apache/tinkerpop/gremlin/process/traversal/strategy/decoration/EventStrategyTest.java
----------------------------------------------------------------------
diff --git a/gremlin-core/src/test/java/org/apache/tinkerpop/gremlin/process/traversal/strategy/decoration/EventStrategyTest.java b/gremlin-core/src/test/java/org/apache/tinkerpop/gremlin/process/traversal/strategy/decoration/EventStrategyTest.java
index 9ab7251..5b61146 100644
--- a/gremlin-core/src/test/java/org/apache/tinkerpop/gremlin/process/traversal/strategy/decoration/EventStrategyTest.java
+++ b/gremlin-core/src/test/java/org/apache/tinkerpop/gremlin/process/traversal/strategy/decoration/EventStrategyTest.java
@@ -19,6 +19,7 @@
package org.apache.tinkerpop.gremlin.process.traversal.strategy.decoration;
import org.apache.tinkerpop.gremlin.process.traversal.Traversal;
+import org.apache.tinkerpop.gremlin.process.traversal.dsl.graph.DefaultGraphTraversal;
import org.apache.tinkerpop.gremlin.process.traversal.dsl.graph.__;
import org.apache.tinkerpop.gremlin.process.traversal.step.Mutating;
import org.apache.tinkerpop.gremlin.process.traversal.step.util.event.ConsoleMutationListener;
@@ -42,24 +43,24 @@ public class EventStrategyTest {
@Parameterized.Parameters(name = "{0}")
public static Iterable<Object[]> data() {
return Arrays.asList(new Object[][]{
- {"addInE()", __.addInE("test", "x"), 1},
- {"addInE(args)", __.addInE("test", "x", "this", "that"), 1},
- {"addOutE()", __.addOutE("test", "x"), 1},
- {"addOutE(args)", __.addOutE("test", "x", "this", "that"), 1},
- {"addE(IN)", __.addE(Direction.IN, "test", "test"), 1},
- {"addE(IN,args)", __.addE(Direction.IN, "test", "test", "this", "that"), 1},
- {"addE(OUT)", __.addE(Direction.OUT, "test", "test"), 1},
- {"addE(OUT,args)", __.addE(Direction.OUT, "test", "test", "this", "that"), 1},
- {"addV()", __.addV(), 1},
- {"addV(args)", __.addV("test", "this"), 1},
- {"addV().property(k,v)", __.addV().property("test", "that"), 2},
- {"properties().drop()", __.properties().drop(), 1},
- {"properties(k).drop()", __.properties("test").drop(), 1},
- {"out().drop()", __.out().drop(), 1},
- {"out(args).drop()", __.out("test").drop(), 1},
- {"outE().drop()", __.outE().drop(), 1},
- {"outE().properties().drop()", __.outE().properties().drop(), 1},
- {"outE(args).drop()", __.outE("test").drop(), 1}});
+ {"addInE()", new DefaultGraphTraversal<>(EmptyGraph.instance()).addInE("test", "x"), 1},
+ {"addInE(args)", new DefaultGraphTraversal<>(EmptyGraph.instance()).addInE("test", "x", "this", "that"), 1},
+ {"addOutE()", new DefaultGraphTraversal<>(EmptyGraph.instance()).addOutE("test", "x"), 1},
+ {"addOutE(args)", new DefaultGraphTraversal<>(EmptyGraph.instance()).addOutE("test", "x", "this", "that"), 1},
+ {"addE(IN)", new DefaultGraphTraversal<>(EmptyGraph.instance()).addE(Direction.IN, "test", "test"), 1},
+ {"addE(IN,args)", new DefaultGraphTraversal<>(EmptyGraph.instance()).addE(Direction.IN, "test", "test", "this", "that"), 1},
+ {"addE(OUT)", new DefaultGraphTraversal<>(EmptyGraph.instance()).addE(Direction.OUT, "test", "test"), 1},
+ {"addE(OUT,args)", new DefaultGraphTraversal<>(EmptyGraph.instance()).addE(Direction.OUT, "test", "test", "this", "that"), 1},
+ {"addV()", new DefaultGraphTraversal<>(EmptyGraph.instance()).addV(), 1},
+ {"addV(args)", new DefaultGraphTraversal<>(EmptyGraph.instance()).addV("test", "this"), 1},
+ {"addV().property(k,v)", new DefaultGraphTraversal<>(EmptyGraph.instance()).addV().property("test", "that"), 2},
+ {"properties().drop()", new DefaultGraphTraversal<>(EmptyGraph.instance()).properties().drop(), 1},
+ {"properties(k).drop()", new DefaultGraphTraversal<>(EmptyGraph.instance()).properties("test").drop(), 1},
+ {"out().drop()", new DefaultGraphTraversal<>(EmptyGraph.instance()).out().drop(), 1},
+ {"out(args).drop()", new DefaultGraphTraversal<>(EmptyGraph.instance()).out("test").drop(), 1},
+ {"outE().drop()", new DefaultGraphTraversal<>(EmptyGraph.instance()).outE().drop(), 1},
+ {"outE().properties().drop()", new DefaultGraphTraversal<>(EmptyGraph.instance()).outE().properties().drop(), 1},
+ {"outE(args).drop()", new DefaultGraphTraversal<>(EmptyGraph.instance()).outE("test").drop(), 1}});
}
@Parameterized.Parameter(value = 0)
http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/blob/8fbaf5b7/gremlin-core/src/test/java/org/apache/tinkerpop/gremlin/process/traversal/strategy/verification/ReadOnlyStrategyTest.java
----------------------------------------------------------------------
diff --git a/gremlin-core/src/test/java/org/apache/tinkerpop/gremlin/process/traversal/strategy/verification/ReadOnlyStrategyTest.java b/gremlin-core/src/test/java/org/apache/tinkerpop/gremlin/process/traversal/strategy/verification/ReadOnlyStrategyTest.java
index 584f0e2..41ffb2a 100644
--- a/gremlin-core/src/test/java/org/apache/tinkerpop/gremlin/process/traversal/strategy/verification/ReadOnlyStrategyTest.java
+++ b/gremlin-core/src/test/java/org/apache/tinkerpop/gremlin/process/traversal/strategy/verification/ReadOnlyStrategyTest.java
@@ -19,10 +19,12 @@
package org.apache.tinkerpop.gremlin.process.traversal.strategy.verification;
import org.apache.tinkerpop.gremlin.process.traversal.Traversal;
+import org.apache.tinkerpop.gremlin.process.traversal.dsl.graph.DefaultGraphTraversal;
import org.apache.tinkerpop.gremlin.process.traversal.dsl.graph.__;
import org.apache.tinkerpop.gremlin.process.traversal.strategy.verification.ReadOnlyStrategy;
import org.apache.tinkerpop.gremlin.structure.Direction;
import org.apache.tinkerpop.gremlin.structure.VertexProperty;
+import org.apache.tinkerpop.gremlin.structure.util.empty.EmptyGraph;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.junit.runners.Parameterized;
@@ -40,20 +42,20 @@ public class ReadOnlyStrategyTest {
@Parameterized.Parameters(name = "{0}")
public static Iterable<Object[]> data() {
return Arrays.asList(new Object[][]{
- {"addInE()", __.addInE("test", "x")},
- {"addInE(args)", __.addInE("test", "x", "this", "that")},
- {"addOutE()", __.addOutE("test", "x")},
- {"addOutE(args)", __.addOutE("test", "x", "this", "that")},
- {"addE(IN)", __.addE(Direction.IN, "test", "test")},
- {"addE(IN,args)", __.addE(Direction.IN, "test", "test", "this", "that")},
- {"addE(OUT)", __.addE(Direction.OUT, "test", "test")},
- {"addE(OUT,args)", __.addE(Direction.OUT, "test", "test", "this", "that")},
- {"outE().property(k,v)", __.outE().property("test", "test")},
- {"out().properties(k).property(k,v)", __.out().properties("test").property("test", "that")},
- {"out().property(k,v)", __.out().property("test", "test")},
- {"out().property(Cardinality,k,v)", __.out().property(VertexProperty.Cardinality.list, "test", "test")},
- {"addV(args)", __.addV("test", "test", "this", "that")},
- {"addV()", __.addV()}});
+ {"addInE()", new DefaultGraphTraversal<>(EmptyGraph.instance()).addInE("test", "x")},
+ {"addInE(args)", new DefaultGraphTraversal<>(EmptyGraph.instance()).addInE("test", "x", "this", "that")},
+ {"addOutE()", new DefaultGraphTraversal<>(EmptyGraph.instance()).addOutE("test", "x")},
+ {"addOutE(args)", new DefaultGraphTraversal<>(EmptyGraph.instance()).addOutE("test", "x", "this", "that")},
+ {"addE(IN)", new DefaultGraphTraversal<>(EmptyGraph.instance()).addE(Direction.IN, "test", "test")},
+ {"addE(IN,args)", new DefaultGraphTraversal<>(EmptyGraph.instance()).addE(Direction.IN, "test", "test", "this", "that")},
+ {"addE(OUT)", new DefaultGraphTraversal<>(EmptyGraph.instance()).addE(Direction.OUT, "test", "test")},
+ {"addE(OUT,args)", new DefaultGraphTraversal<>(EmptyGraph.instance()).addE(Direction.OUT, "test", "test", "this", "that")},
+ {"outE().property(k,v)", new DefaultGraphTraversal<>(EmptyGraph.instance()).outE().property("test", "test")},
+ {"out().properties(k).property(k,v)", new DefaultGraphTraversal<>(EmptyGraph.instance()).out().properties("test").property("test", "that")},
+ {"out().property(k,v)", new DefaultGraphTraversal<>(EmptyGraph.instance()).out().property("test", "test")},
+ {"out().property(Cardinality,k,v)", new DefaultGraphTraversal<>(EmptyGraph.instance()).out().property(VertexProperty.Cardinality.list, "test", "test")},
+ {"addV(args)", new DefaultGraphTraversal<>(EmptyGraph.instance()).addV("test", "test", "this", "that")},
+ {"addV()", new DefaultGraphTraversal<>(EmptyGraph.instance()).addV()}});
}
@Parameterized.Parameter(value = 0)
http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/blob/8fbaf5b7/gremlin-test/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/util/DefaultTraversalTest.java
----------------------------------------------------------------------
diff --git a/gremlin-test/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/util/DefaultTraversalTest.java b/gremlin-test/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/util/DefaultTraversalTest.java
index 5827b8f..4068c71 100644
--- a/gremlin-test/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/util/DefaultTraversalTest.java
+++ b/gremlin-test/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/util/DefaultTraversalTest.java
@@ -33,7 +33,7 @@ public class DefaultTraversalTest {
@Test
public void shouldCloneTraversalCorrectly() throws CloneNotSupportedException {
- final DefaultGraphTraversal<?, ?> original = new DefaultGraphTraversal<>(EmptyGraph.instance());
+ final DefaultGraphTraversal<?, ?> original = new DefaultGraphTraversal<>();
original.out().groupCount("m").values("name").count();
final DefaultTraversal<?, ?> clone = (DefaultTraversal) original.clone();
assertNotEquals(original.hashCode(), clone.hashCode());