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());