You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@tinkerpop.apache.org by dk...@apache.org on 2015/05/05 20:57:41 UTC
[3/9] incubator-tinkerpop git commit: optimized
HalfStepTraversalStrategy
optimized HalfStepTraversalStrategy
Project: http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/commit/3db58510
Tree: http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/tree/3db58510
Diff: http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/diff/3db58510
Branch: refs/heads/master
Commit: 3db58510f4279c5fe1e5ffa953c94717b2cb7785
Parents: f16fa5f
Author: Daniel Kuppitz <da...@hotmail.com>
Authored: Tue May 5 14:13:20 2015 +0200
Committer: Daniel Kuppitz <da...@hotmail.com>
Committed: Tue May 5 14:13:20 2015 +0200
----------------------------------------------------------------------
.../optimization/HalfStepTraversalStrategy.java | 26 ++++++++++++++------
1 file changed, 19 insertions(+), 7 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/blob/3db58510/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/strategy/optimization/HalfStepTraversalStrategy.java
----------------------------------------------------------------------
diff --git a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/strategy/optimization/HalfStepTraversalStrategy.java b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/strategy/optimization/HalfStepTraversalStrategy.java
index dd4aa0b..42c5dc8 100644
--- a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/strategy/optimization/HalfStepTraversalStrategy.java
+++ b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/strategy/optimization/HalfStepTraversalStrategy.java
@@ -25,10 +25,12 @@ import org.apache.tinkerpop.gremlin.process.traversal.step.TraversalParent;
import org.apache.tinkerpop.gremlin.process.traversal.step.filter.HasTraversalStep;
import org.apache.tinkerpop.gremlin.process.traversal.step.filter.RangeGlobalStep;
import org.apache.tinkerpop.gremlin.process.traversal.step.map.CountGlobalStep;
+import org.apache.tinkerpop.gremlin.process.traversal.step.map.PropertiesStep;
import org.apache.tinkerpop.gremlin.process.traversal.step.map.VertexStep;
import org.apache.tinkerpop.gremlin.process.traversal.strategy.AbstractTraversalStrategy;
import org.apache.tinkerpop.gremlin.process.traversal.util.TraversalHelper;
import org.apache.tinkerpop.gremlin.structure.Edge;
+import org.apache.tinkerpop.gremlin.structure.PropertyType;
import org.apache.tinkerpop.gremlin.structure.Vertex;
/**
@@ -47,20 +49,30 @@ public class HalfStepTraversalStrategy extends AbstractTraversalStrategy impleme
Step prev = null;
for (int i = 0; i <= size; i++) {
final Step curr = traversal.getSteps().get(i);
- VertexStep stepToReplace = null;
- if (i == size && curr instanceof VertexStep && Vertex.class.equals(((VertexStep) curr).getReturnClass())) {
+ Step stepToReplace = null;
+ if (i == size && ((curr instanceof VertexStep && Vertex.class.equals(((VertexStep) curr).getReturnClass())) ||
+ (curr instanceof PropertiesStep && PropertyType.VALUE.equals(((PropertiesStep) curr).getReturnType())))) {
final TraversalParent parent = curr.getTraversal().getParent();
if (parent instanceof HasTraversalStep) {
- stepToReplace = (VertexStep) curr;
+ stepToReplace = curr;
}
} else if (prev instanceof VertexStep && Vertex.class.equals(((VertexStep) prev).getReturnClass())) {
if (curr instanceof CountGlobalStep) {
- stepToReplace = (VertexStep) prev;
+ stepToReplace = prev;
+ }
+ } else if (curr instanceof CountGlobalStep) {
+ if (prev instanceof VertexStep && Vertex.class.equals(((VertexStep) prev).getReturnClass()) ||
+ prev instanceof PropertiesStep && PropertyType.VALUE.equals(((PropertiesStep) prev).getReturnType())) {
+ stepToReplace = prev;
}
}
- if (stepToReplace != null) {
- TraversalHelper.replaceStep(stepToReplace, new VertexStep(traversal, Edge.class, stepToReplace.getDirection(),
- stepToReplace.getEdgeLabels()), traversal);
+ if (stepToReplace instanceof VertexStep) {
+ final VertexStep vs = (VertexStep) stepToReplace;
+ TraversalHelper.replaceStep(stepToReplace, new VertexStep(traversal, Edge.class, vs.getDirection(),
+ vs.getEdgeLabels()), traversal);
+ } else if (stepToReplace instanceof PropertiesStep) {
+ final PropertiesStep ps = (PropertiesStep) stepToReplace;
+ TraversalHelper.replaceStep(stepToReplace, new PropertiesStep(traversal, PropertyType.PROPERTY, ps.getPropertyKeys()), traversal);
}
if (!(curr instanceof RangeGlobalStep)) {
prev = curr;