Repository: tinkerpop Updated Branches: refs/heads/TINKERPOP-1878 91382dfa8 -> 268cae0c5
TINKERPOP-1878 Used just inject() step to hold sparql Project: http://git-wip-us.apache.org/repos/asf/tinkerpop/repo Commit: http://git-wip-us.apache.org/repos/asf/tinkerpop/commit/268cae0c Tree: http://git-wip-us.apache.org/repos/asf/tinkerpop/tree/268cae0c Diff: http://git-wip-us.apache.org/repos/asf/tinkerpop/diff/268cae0c Branch: refs/heads/TINKERPOP-1878 Commit: 268cae0c5903af6e35313421dcfeca89883b6e18 Parents: 91382df Author: Stephen Mallette <[email protected]> Authored: Mon Aug 13 13:07:34 2018 -0400 Committer: Stephen Mallette <[email protected]> Committed: Mon Aug 13 13:07:34 2018 -0400 ---------------------------------------------------------------------- .../traversal/dsl/sparql/SparqlTraversalSource.java | 12 +++--------- .../process/traversal/strategy/SparqlStrategy.java | 15 ++++++++------- ...bstractTinkerGraphGraphSONTranslatorProvider.java | 4 ---- 3 files changed, 11 insertions(+), 20 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/268cae0c/sparql-gremlin/src/main/java/org/apache/tinkerpop/gremlin/sparql/process/traversal/dsl/sparql/SparqlTraversalSource.java ---------------------------------------------------------------------- diff --git a/sparql-gremlin/src/main/java/org/apache/tinkerpop/gremlin/sparql/process/traversal/dsl/sparql/SparqlTraversalSource.java b/sparql-gremlin/src/main/java/org/apache/tinkerpop/gremlin/sparql/process/traversal/dsl/sparql/SparqlTraversalSource.java index f78708b..d96f427 100644 --- a/sparql-gremlin/src/main/java/org/apache/tinkerpop/gremlin/sparql/process/traversal/dsl/sparql/SparqlTraversalSource.java +++ b/sparql-gremlin/src/main/java/org/apache/tinkerpop/gremlin/sparql/process/traversal/dsl/sparql/SparqlTraversalSource.java @@ -127,16 +127,10 @@ public class SparqlTraversalSource implements TraversalSource { final SparqlTraversalSource clone = this.clone(); clone.getStrategies().addStrategies(SparqlStrategy.instance()); - // this is a bit of a hack to get remote traversals to work cleanly. on the remote side, we'd expect a - // GraphTraversalSource not a SparqlTraversalSource (given that sparql-gremlin is to be implemented in the - // DSL pattern). Instead of just sending the constant() step with the sparql query we also include an - // inject() step which will be recognized by a GraphTraversalSource on the remote side. Since SparqlStrategy - // wholly replaces both of these steps, the traversal bytecode can be read properly. - clone.bytecode.addStep(GraphTraversal.Symbols.inject); - clone.bytecode.addStep(GraphTraversal.Symbols.constant, query); + // the inject() holds the sparql which the SparqlStrategy then detects and converts to a traversal + clone.bytecode.addStep(GraphTraversal.Symbols.inject, query); final SparqlTraversal.Admin<S, S> traversal = new DefaultSparqlTraversal<>(clone); - traversal.addStep(new InjectStep<S>(traversal)); - return traversal.addStep(new ConstantStep<S,String>(traversal, query)); + return traversal.addStep(new InjectStep<>(traversal, query)); } public Transaction tx() { http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/268cae0c/sparql-gremlin/src/main/java/org/apache/tinkerpop/gremlin/sparql/process/traversal/strategy/SparqlStrategy.java ---------------------------------------------------------------------- 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 b21c348..38956f8 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 @@ -22,6 +22,7 @@ import org.apache.tinkerpop.gremlin.process.remote.traversal.strategy.decoration import org.apache.tinkerpop.gremlin.process.traversal.Traversal; import org.apache.tinkerpop.gremlin.process.traversal.TraversalStrategy; import org.apache.tinkerpop.gremlin.process.traversal.step.map.ConstantStep; +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; @@ -63,22 +64,22 @@ public class SparqlStrategy extends AbstractTraversalStrategy<TraversalStrategy. if (!(traversal.getParent() instanceof EmptyStep)) return; - if (traversal.getSteps().size() == 2 && traversal.getEndStep() instanceof ConstantStep) { - final ConstantStep stepWithSparql = (ConstantStep) traversal.getEndStep(); - final Object constant = stepWithSparql.getConstant(); - if (constant instanceof String) { - final String sparql = (String) constant; + if (traversal.getSteps().size() == 1 && traversal.getEndStep() instanceof InjectStep) { + final InjectStep stepWithSparql = (InjectStep) traversal.getEndStep(); + final Object[] injections = stepWithSparql.getInjections(); + if (injections.length == 1 && injections[0] instanceof String) { + final String sparql = (String) injections[0]; final Traversal<Vertex, ?> sparqlTraversal = SparqlToGremlinCompiler.transpile( traversal.getGraph().get(), sparql); TraversalHelper.removeAllSteps(traversal); sparqlTraversal.asAdmin().getSteps().forEach(s -> traversal.addStep(s)); } else { // The ConstantStep expects a string value - throw new IllegalStateException("SparqlStrategy cannot be applied to a traversal that does not consist of a single ConstantStep<?,String>"); + throw new IllegalStateException("SparqlStrategy cannot be applied to a traversal that does not consist of a single InjectStep<String> with one injection"); } } else { // SparqlStrategy requires that there be one step and it be a ConstantStep that contains some SPARQL - throw new IllegalStateException("SparqlStrategy cannot be applied to a traversal that does not consist of a single ConstantStep<?,String>"); + throw new IllegalStateException("SparqlStrategy cannot be applied to a traversal that does not consist of a single InjectStep<String> with one injection"); } } } http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/268cae0c/tinkergraph-gremlin/src/test/java/org/apache/tinkerpop/gremlin/tinkergraph/structure/io/graphson/AbstractTinkerGraphGraphSONTranslatorProvider.java ---------------------------------------------------------------------- diff --git a/tinkergraph-gremlin/src/test/java/org/apache/tinkerpop/gremlin/tinkergraph/structure/io/graphson/AbstractTinkerGraphGraphSONTranslatorProvider.java b/tinkergraph-gremlin/src/test/java/org/apache/tinkerpop/gremlin/tinkergraph/structure/io/graphson/AbstractTinkerGraphGraphSONTranslatorProvider.java index 8462781..223f4d2 100644 --- a/tinkergraph-gremlin/src/test/java/org/apache/tinkerpop/gremlin/tinkergraph/structure/io/graphson/AbstractTinkerGraphGraphSONTranslatorProvider.java +++ b/tinkergraph-gremlin/src/test/java/org/apache/tinkerpop/gremlin/tinkergraph/structure/io/graphson/AbstractTinkerGraphGraphSONTranslatorProvider.java @@ -22,18 +22,14 @@ package org.apache.tinkerpop.gremlin.tinkergraph.structure.io.graphson; import org.apache.tinkerpop.gremlin.GraphProvider; import org.apache.tinkerpop.gremlin.LoadGraphWith; import org.apache.tinkerpop.gremlin.jsr223.JavaTranslator; -import org.apache.tinkerpop.gremlin.process.traversal.CoreTraversalTest; import org.apache.tinkerpop.gremlin.process.traversal.TraversalInterruptionComputerTest; import org.apache.tinkerpop.gremlin.process.traversal.TraversalInterruptionTest; import org.apache.tinkerpop.gremlin.process.traversal.dsl.graph.GraphTraversalSource; -import org.apache.tinkerpop.gremlin.process.traversal.dsl.graph.__; -import org.apache.tinkerpop.gremlin.process.traversal.step.map.PageRankTest; import org.apache.tinkerpop.gremlin.process.traversal.step.map.ProgramTest; import org.apache.tinkerpop.gremlin.process.traversal.step.map.ReadTest; import org.apache.tinkerpop.gremlin.process.traversal.step.map.WriteTest; import org.apache.tinkerpop.gremlin.process.traversal.strategy.decoration.ElementIdStrategyProcessTest; import org.apache.tinkerpop.gremlin.process.traversal.strategy.decoration.EventStrategyProcessTest; -import org.apache.tinkerpop.gremlin.process.traversal.strategy.decoration.PartitionStrategyProcessTest; import org.apache.tinkerpop.gremlin.process.traversal.strategy.decoration.TranslationStrategy; import org.apache.tinkerpop.gremlin.structure.Graph; import org.apache.tinkerpop.gremlin.structure.io.graphson.GraphSONVersion;
