foo
Project: http://git-wip-us.apache.org/repos/asf/tinkerpop/repo Commit: http://git-wip-us.apache.org/repos/asf/tinkerpop/commit/16c0172a Tree: http://git-wip-us.apache.org/repos/asf/tinkerpop/tree/16c0172a Diff: http://git-wip-us.apache.org/repos/asf/tinkerpop/diff/16c0172a Branch: refs/heads/TRAVIS-TEST Commit: 16c0172a00c2c39ee67bc1f30968582cb75cb864 Parents: 6e0ccd8 Author: Daniel Kuppitz <daniel_kupp...@hotmail.com> Authored: Tue Mar 13 11:33:06 2018 -0700 Committer: Daniel Kuppitz <daniel_kupp...@hotmail.com> Committed: Tue Mar 13 11:33:06 2018 -0700 ---------------------------------------------------------------------- .../traversal/strategy/decoration/SubgraphStrategy.java | 12 +++++++++++- .../traversal/util/DefaultTraversalStrategies.java | 4 ++-- 2 files changed, 13 insertions(+), 3 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/16c0172a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/strategy/decoration/SubgraphStrategy.java ---------------------------------------------------------------------- diff --git a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/strategy/decoration/SubgraphStrategy.java b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/strategy/decoration/SubgraphStrategy.java index e0d260f..f19e83b 100644 --- a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/strategy/decoration/SubgraphStrategy.java +++ b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/strategy/decoration/SubgraphStrategy.java @@ -43,6 +43,7 @@ import org.apache.tinkerpop.gremlin.process.traversal.step.map.VertexStep; import org.apache.tinkerpop.gremlin.process.traversal.step.sideEffect.SideEffectStep; 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.traverser.TraverserRequirement; import org.apache.tinkerpop.gremlin.process.traversal.util.DefaultTraversal; import org.apache.tinkerpop.gremlin.process.traversal.util.TraversalHelper; import org.apache.tinkerpop.gremlin.structure.Direction; @@ -170,6 +171,7 @@ public final class SubgraphStrategy extends AbstractTraversalStrategy<TraversalS } // turn g.V().out() to g.V().outE().inV() only if there is an edge predicate otherwise + boolean addPathRequirement = false; for (final VertexStep<?> step : vertexSteps) { if (step.returnsEdge()) continue; @@ -177,7 +179,8 @@ public final class SubgraphStrategy extends AbstractTraversalStrategy<TraversalS TraversalHelper.insertAfterStep(new TraversalFilterStep<>(traversal, (Traversal) this.vertexCriterion.clone()), step, traversal); } else { final VertexStep<Edge> someEStep = new VertexStep<>(traversal, Edge.class, step.getDirection(), step.getEdgeLabels()); - final Step<Edge, Vertex> someVStep = step.getDirection() == Direction.BOTH ? + final boolean requiresPathRequirement; + final Step<Edge, Vertex> someVStep = (requiresPathRequirement = step.getDirection() == Direction.BOTH) ? new EdgeOtherVertexStep(traversal) : new EdgeVertexStep(traversal, step.getDirection().opposite()); @@ -189,9 +192,16 @@ public final class SubgraphStrategy extends AbstractTraversalStrategy<TraversalS TraversalHelper.insertAfterStep(new TraversalFilterStep<>(traversal, this.edgeCriterion.clone()), someEStep, traversal); if (null != this.vertexCriterion) TraversalHelper.insertAfterStep(new TraversalFilterStep<>(traversal, this.vertexCriterion.clone()), someVStep, traversal); + + addPathRequirement |= requiresPathRequirement; } } + if (addPathRequirement) { + final Traversal.Admin rootTraversal = TraversalHelper.getRootTraversal(traversal); + RequirementsStrategy.addRequirements(rootTraversal.getStrategies(), TraverserRequirement.PATH); + } + // turn g.V().properties() to g.V().properties().xxx // turn g.V().values() to g.V().properties().xxx.value() if (null != this.vertexPropertyCriterion) { http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/16c0172a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/util/DefaultTraversalStrategies.java ---------------------------------------------------------------------- diff --git a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/util/DefaultTraversalStrategies.java b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/util/DefaultTraversalStrategies.java index 74e84e2..91a49e2 100644 --- a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/util/DefaultTraversalStrategies.java +++ b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/util/DefaultTraversalStrategies.java @@ -82,8 +82,8 @@ public class DefaultTraversalStrategies implements TraversalStrategies { @Override public void applyStrategies(final Traversal.Admin<?, ?> traversal) { - for (final TraversalStrategy<?> traversalStrategy : this.traversalStrategies) { - traversalStrategy.apply(traversal); + for (int i = 0; i < this.traversalStrategies.size(); i++) { + this.traversalStrategies.get(i).apply(traversal); } }