TINKERPOP-1878 sparql() step works over remoting At this point it is only tested to work with Gryo 3.0. Fixed a bug with how dynamic gryo registrations work - they failed if you didn't have a specific serializer specified. Introduced a bit of a hack to make SparqlTraversalSource behave like a GraphTraversalSource and thus more cleanly follow the DSL pattern. Not sure if that's a great approach yet or not, but it seems harmless at this point.
Project: http://git-wip-us.apache.org/repos/asf/tinkerpop/repo Commit: http://git-wip-us.apache.org/repos/asf/tinkerpop/commit/ef6cfedd Tree: http://git-wip-us.apache.org/repos/asf/tinkerpop/tree/ef6cfedd Diff: http://git-wip-us.apache.org/repos/asf/tinkerpop/diff/ef6cfedd Branch: refs/heads/TINKERPOP-1878 Commit: ef6cfedd5e8c6e0bfd8e2b282e1c6b6fe9271702 Parents: bb4653c Author: Stephen Mallette <sp...@genoprime.com> Authored: Thu Jan 25 17:00:54 2018 -0500 Committer: Stephen Mallette <sp...@genoprime.com> Committed: Thu Aug 2 06:49:16 2018 -0400 ---------------------------------------------------------------------- .../apache/tinkerpop/gremlin/structure/io/gryo/GryoVersion.java | 5 ++++- sparql-gremlin/pom.xml | 4 ---- .../process/traversal/dsl/sparql/SparqlTraversalSource.java | 3 +++ .../sparql/process/traversal/strategy/SparqlStrategy.java | 5 +++-- 4 files changed, 10 insertions(+), 7 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/ef6cfedd/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/io/gryo/GryoVersion.java ---------------------------------------------------------------------- diff --git a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/io/gryo/GryoVersion.java b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/io/gryo/GryoVersion.java index e7dfd93..45d2970 100644 --- a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/io/gryo/GryoVersion.java +++ b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/io/gryo/GryoVersion.java @@ -403,6 +403,9 @@ public enum GryoVersion { "org.apache.tinkerpop.gremlin.driver.ser.RequestMessageGryoSerializer", 167); tryAddDynamicType(this, "org.apache.tinkerpop.gremlin.driver.message.ResponseMessage", "org.apache.tinkerpop.gremlin.driver.ser.ResponseMessageGryoSerializer", 169); + + tryAddDynamicType(this, "org.apache.tinkerpop.gremlin.sparql.process.traversal.strategy.SparqlStrategy", + null, 1690); }}; } @@ -591,7 +594,7 @@ public enum GryoVersion { final String serializer, final int registrationId) { try { final Class typeClass = Class.forName(type); - final Optional<SerializerShim<?>> serializerInstance = Optional.of(serializer) + final Optional<SerializerShim<?>> serializerInstance = Optional.ofNullable(serializer) .map(FunctionUtils.wrapFunction(Class::forName)) .map(FunctionUtils.wrapFunction(c -> (SerializerShim<?>) c.getConstructor().newInstance())); if (serializerInstance.isPresent()) { http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/ef6cfedd/sparql-gremlin/pom.xml ---------------------------------------------------------------------- diff --git a/sparql-gremlin/pom.xml b/sparql-gremlin/pom.xml index 0dceb85..0e3da38 100644 --- a/sparql-gremlin/pom.xml +++ b/sparql-gremlin/pom.xml @@ -11,10 +11,6 @@ <artifactId>sparql-gremlin</artifactId> <name>Apache TinkerPop :: SPARQL Gremlin</name> - <properties> - <query.dir>src/test/resources/sparql/queries</query.dir> - </properties> - <dependencies> <dependency> <groupId>org.apache.jena</groupId> http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/ef6cfedd/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 b156ed1..3889d95 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 @@ -27,6 +27,7 @@ import org.apache.tinkerpop.gremlin.process.traversal.TraversalStrategies; import org.apache.tinkerpop.gremlin.process.traversal.TraversalStrategy; import org.apache.tinkerpop.gremlin.process.traversal.dsl.graph.GraphTraversal; 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.structure.Graph; import org.apache.tinkerpop.gremlin.structure.Transaction; import org.apache.tinkerpop.gremlin.structure.util.StringFactory; @@ -123,8 +124,10 @@ public class SparqlTraversalSource implements TraversalSource { */ public <S> SparqlTraversal<S,String> sparql(final String query) { final SparqlTraversalSource clone = this.clone(); + clone.bytecode.addStep(GraphTraversal.Symbols.inject); clone.bytecode.addStep(GraphTraversal.Symbols.constant, 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)); } http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/ef6cfedd/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 bb0b326..d74ac3e 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 @@ -19,6 +19,7 @@ package org.apache.tinkerpop.gremlin.sparql.process.traversal.strategy; import org.apache.tinkerpop.gremlin.process.computer.traversal.strategy.decoration.VertexProgramStrategy; +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.step.map.ConstantStep; @@ -44,7 +45,7 @@ public class SparqlStrategy extends AbstractTraversalStrategy<TraversalStrategy. implements TraversalStrategy.DecorationStrategy { private static final SparqlStrategy INSTANCE = new SparqlStrategy(); - private static final Set<Class<? extends DecorationStrategy>> POSTS = Collections.singleton(VertexProgramStrategy.class); + private static final Set<Class<? extends DecorationStrategy>> POSTS = Collections.singleton(RemoteStrategy.class); private SparqlStrategy() {} @@ -63,7 +64,7 @@ public class SparqlStrategy extends AbstractTraversalStrategy<TraversalStrategy. if (!(traversal.getParent() instanceof EmptyStep)) return; - if (traversal.getSteps().size() == 1 && traversal.getEndStep() instanceof ConstantStep) { + if (traversal.getSteps().size() == 2 && traversal.getEndStep() instanceof ConstantStep) { final ConstantStep stepWithSparql = (ConstantStep) traversal.getEndStep(); final Object constant = stepWithSparql.getConstant(); if (constant instanceof String) {