You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@tinkerpop.apache.org by sp...@apache.org on 2019/04/06 01:10:25 UTC

[tinkerpop] branch TINKERPOP-2193 created (now 2ca135c)

This is an automated email from the ASF dual-hosted git repository.

spmallette pushed a change to branch TINKERPOP-2193
in repository https://gitbox.apache.org/repos/asf/tinkerpop.git.


      at 2ca135c  TINKERPOP-2193 Allow a Traversal to know what TraversalSource it spawned from

This branch includes the following new commits:

     new 2ca135c  TINKERPOP-2193 Allow a Traversal to know what TraversalSource it spawned from

The 1 revisions listed above as "new" are entirely new to this
repository and will be described in separate emails.  The revisions
listed as "add" were already present in the repository and have only
been added to this reference.



[tinkerpop] 01/01: TINKERPOP-2193 Allow a Traversal to know what TraversalSource it spawned from

Posted by sp...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

spmallette pushed a commit to branch TINKERPOP-2193
in repository https://gitbox.apache.org/repos/asf/tinkerpop.git

commit 2ca135ccd116e2dcc054febbebc8f88b2cc01dd0
Author: Stephen Mallette <sp...@genoprime.com>
AuthorDate: Fri Apr 5 21:10:01 2019 -0400

    TINKERPOP-2193 Allow a Traversal to know what TraversalSource it spawned from
---
 CHANGELOG.asciidoc                                           |  1 +
 .../tinkerpop/gremlin/process/traversal/Traversal.java       | 12 ++++++++++++
 .../gremlin/process/traversal/util/DefaultTraversal.java     |  9 +++++++++
 .../tinkerpop/gremlin/sparql/SparqlToGremlinCompiler.java    | 12 ++++--------
 .../sparql/process/traversal/strategy/SparqlStrategy.java    |  7 ++++++-
 5 files changed, 32 insertions(+), 9 deletions(-)

diff --git a/CHANGELOG.asciidoc b/CHANGELOG.asciidoc
index 4aa71a5..517fb34 100644
--- a/CHANGELOG.asciidoc
+++ b/CHANGELOG.asciidoc
@@ -25,6 +25,7 @@ image::https://raw.githubusercontent.com/apache/tinkerpop/master/docs/static/ima
 
 This release also includes changes from <<release-3-3-7, 3.3.7>>.
 
+* Allow a `Traversal` to know what `TraversalSource` it spawned from.
 
 [[release-3-4-1]]
 === TinkerPop 3.4.1 (Release Date: March 18, 2019)
diff --git a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/Traversal.java b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/Traversal.java
index 30435ab..a325547 100644
--- a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/Traversal.java
+++ b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/Traversal.java
@@ -491,8 +491,20 @@ public interface Traversal<S, E> extends Iterator<E>, Serializable, Cloneable, A
          */
         public boolean isLocked();
 
+        /**
+         * Gets the {@link Graph} instance associated to this {@link Traversal}.
+         */
         public Optional<Graph> getGraph();
 
+        /**
+         * Gets the {@link TraversalSource} that spawned the {@link Traversal} instance initially if present. This
+         * {@link TraversalSource} should have spawned from the associated {@link Graph} returned from
+         * {@link #getGraph()}.
+         */
+        public default Optional<TraversalSource> getTraversalSource() {
+            return Optional.empty();
+        }
+
         public void setGraph(final Graph graph);
 
         public default boolean equals(final Traversal.Admin<S, E> other) {
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 6e805bc..b869064 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
@@ -53,6 +53,7 @@ public class DefaultTraversal<S, E> implements Traversal.Admin<S, E> {
     private Step<?, E> finalEndStep = EmptyStep.instance();
     private final StepPosition stepPosition = new StepPosition();
     protected transient Graph graph;
+    protected transient TraversalSource g;
     protected List<Step> steps = new ArrayList<>();
     // steps will be repeatedly retrieved from this traversal so wrap them once in an immutable list that can be reused
     protected List<Step> unmodifiableSteps = Collections.unmodifiableList(steps);
@@ -69,6 +70,7 @@ public class DefaultTraversal<S, E> implements Traversal.Admin<S, E> {
         this.graph = graph;
         this.strategies = traversalStrategies;
         this.bytecode = bytecode;
+        this.g = null;
     }
 
     public DefaultTraversal(final Graph graph) {
@@ -77,10 +79,12 @@ public class DefaultTraversal<S, E> implements Traversal.Admin<S, E> {
 
     public DefaultTraversal(final TraversalSource traversalSource) {
         this(traversalSource.getGraph(), traversalSource.getStrategies(), traversalSource.getBytecode());
+        this.g = traversalSource;
     }
 
     public DefaultTraversal(final TraversalSource traversalSource, final DefaultTraversal.Admin<S,E> traversal) {
         this(traversalSource.getGraph(), traversalSource.getStrategies(), traversal.getBytecode());
+        this.g = traversalSource;
         steps.addAll(traversal.getSteps());
     }
 
@@ -332,6 +336,11 @@ public class DefaultTraversal<S, E> implements Traversal.Admin<S, E> {
     }
 
     @Override
+    public Optional<TraversalSource> getTraversalSource() {
+        return Optional.ofNullable(this.g);
+    }
+
+    @Override
     public void setGraph(final Graph graph) {
         this.graph = graph;
     }
diff --git a/sparql-gremlin/src/main/java/org/apache/tinkerpop/gremlin/sparql/SparqlToGremlinCompiler.java b/sparql-gremlin/src/main/java/org/apache/tinkerpop/gremlin/sparql/SparqlToGremlinCompiler.java
index 8a454f6..1dbb173 100644
--- a/sparql-gremlin/src/main/java/org/apache/tinkerpop/gremlin/sparql/SparqlToGremlinCompiler.java
+++ b/sparql-gremlin/src/main/java/org/apache/tinkerpop/gremlin/sparql/SparqlToGremlinCompiler.java
@@ -98,15 +98,11 @@ public class SparqlToGremlinCompiler {
         int traversalIndex = 0;
         final int numberOfTraversal = traversalList.size();
         final int numberOfOptionalTraversal = optionalTraversals.size();
-        Traversal arrayOfAllTraversals[] = null;
+        final Traversal[] arrayOfAllTraversals = (numberOfOptionalTraversal > 0) ?
+            new Traversal[numberOfTraversal - numberOfOptionalTraversal + 1] :
+            new Traversal[numberOfTraversal - numberOfOptionalTraversal];
 
-        if (numberOfOptionalTraversal > 0) {
-            arrayOfAllTraversals = new Traversal[numberOfTraversal - numberOfOptionalTraversal +1];
-        } else {
-            arrayOfAllTraversals = new Traversal[numberOfTraversal - numberOfOptionalTraversal];
-        }
-        
-        Traversal arrayOfOptionalTraversals[] = new Traversal[numberOfOptionalTraversal];
+        final Traversal[] arrayOfOptionalTraversals = new Traversal[numberOfOptionalTraversal];
 
         for (Traversal tempTrav : traversalList) {
             arrayOfAllTraversals[traversalIndex++] = tempTrav;
diff --git a/sparql-gremlin/src/main/java/org/apache/tinkerpop/gremlin/sparql/process/traversal/strategy/SparqlStrategy.java b/sparql-gremlin/src/main/java/org/apache/tinkerpop/gremlin/sparql/process/traversal/strategy/SparqlStrategy.java
index 65a042c..7a62e31 100644
--- a/sparql-gremlin/src/main/java/org/apache/tinkerpop/gremlin/sparql/process/traversal/strategy/SparqlStrategy.java
+++ b/sparql-gremlin/src/main/java/org/apache/tinkerpop/gremlin/sparql/process/traversal/strategy/SparqlStrategy.java
@@ -21,12 +21,14 @@ package org.apache.tinkerpop.gremlin.sparql.process.traversal.strategy;
 import org.apache.tinkerpop.gremlin.process.remote.traversal.strategy.decoration.RemoteStrategy;
 import org.apache.tinkerpop.gremlin.process.traversal.Traversal;
 import org.apache.tinkerpop.gremlin.process.traversal.TraversalStrategy;
+import org.apache.tinkerpop.gremlin.process.traversal.dsl.graph.GraphTraversalSource;
 import org.apache.tinkerpop.gremlin.process.traversal.step.sideEffect.InjectStep;
 import org.apache.tinkerpop.gremlin.process.traversal.step.util.EmptyStep;
 import org.apache.tinkerpop.gremlin.process.traversal.strategy.AbstractTraversalStrategy;
 import org.apache.tinkerpop.gremlin.process.traversal.util.TraversalHelper;
 import org.apache.tinkerpop.gremlin.sparql.SparqlToGremlinCompiler;
 import org.apache.tinkerpop.gremlin.sparql.process.traversal.dsl.sparql.SparqlTraversalSource;
+import org.apache.tinkerpop.gremlin.structure.Graph;
 import org.apache.tinkerpop.gremlin.structure.Vertex;
 
 import java.util.Collections;
@@ -74,8 +76,11 @@ public class SparqlStrategy extends AbstractTraversalStrategy<TraversalStrategy.
             // further assumes that there is just one argument to that injection which is a string (i.e. sparql query)
             if (injections.length == 1 && injections[0] instanceof String) {
                 final String sparql = (String) injections[0];
+
+                // try to grab the TraversalSource from the Traversal, but if it's not there then try to the Graph
+                // instance and spawn one off from there.
                 final Traversal<Vertex, ?> sparqlTraversal = SparqlToGremlinCompiler.compile(
-                        traversal.getGraph().get(), sparql);
+                        (GraphTraversalSource) traversal.getTraversalSource().orElseGet(() -> traversal.getGraph().map(Graph::traversal).get()), sparql);
                 TraversalHelper.insertTraversal(stepWithSparql, sparqlTraversal.asAdmin(), traversal);
                 traversal.removeStep(stepWithSparql);
             }