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/12 04:47:34 UTC
[05/17] incubator-tinkerpop git commit: Consider HasContainers
accessing non-existent properties and deeply nested traversals in
TraversalHelper.isLocalStarGraph().
Consider HasContainers accessing non-existent properties and deeply nested traversals in TraversalHelper.isLocalStarGraph().
Project: http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/commit/bbb6345a
Tree: http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/tree/bbb6345a
Diff: http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/diff/bbb6345a
Branch: refs/heads/master
Commit: bbb6345a78874a6218257b7581c54d42ae0a2ec5
Parents: 0903238
Author: Daniel Kuppitz <da...@hotmail.com>
Authored: Fri May 8 21:55:38 2015 +0200
Committer: Daniel Kuppitz <da...@hotmail.com>
Committed: Fri May 8 21:55:38 2015 +0200
----------------------------------------------------------------------
.../process/traversal/util/TraversalHelper.java | 16 +++++++++++++++-
1 file changed, 15 insertions(+), 1 deletion(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/blob/bbb6345a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/util/TraversalHelper.java
----------------------------------------------------------------------
diff --git a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/util/TraversalHelper.java b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/util/TraversalHelper.java
index f78e911..69ad48e 100644
--- a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/util/TraversalHelper.java
+++ b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/util/TraversalHelper.java
@@ -20,12 +20,14 @@ package org.apache.tinkerpop.gremlin.process.traversal.util;
import org.apache.tinkerpop.gremlin.process.traversal.Step;
import org.apache.tinkerpop.gremlin.process.traversal.Traversal;
+import org.apache.tinkerpop.gremlin.process.traversal.step.HasContainerHolder;
import org.apache.tinkerpop.gremlin.process.traversal.step.TraversalParent;
import org.apache.tinkerpop.gremlin.process.traversal.step.map.EdgeVertexStep;
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.step.util.BulkSet;
import org.apache.tinkerpop.gremlin.process.traversal.step.util.EmptyStep;
+import org.apache.tinkerpop.gremlin.structure.T;
import org.apache.tinkerpop.gremlin.structure.Vertex;
import org.apache.tinkerpop.gremlin.util.iterator.IteratorUtils;
@@ -80,7 +82,10 @@ public final class TraversalHelper {
}*/
public static boolean isLocalStarGraph(final Traversal.Admin<?, ?> traversal) {
- char state = 'v';
+ return isLocalStarGraph(traversal, 'v');
+ }
+
+ private static boolean isLocalStarGraph(final Traversal.Admin<?, ?> traversal, char state) {
for (final Step step : traversal.getSteps()) {
if (step instanceof PropertiesStep && state == 'u')
return false;
@@ -93,6 +98,15 @@ public final class TraversalHelper {
}
} else if (step instanceof EdgeVertexStep) {
if (state == 'e') state = 'u';
+ } else if (step instanceof TraversalParent) {
+ final char currState = state;
+ if (((TraversalParent) step).getLocalChildren().stream()
+ .filter(t -> !isLocalStarGraph(t.asAdmin(), currState))
+ .findAny().isPresent()) return false;
+ } else if (step instanceof HasContainerHolder && state == 'u') {
+ if (((HasContainerHolder) step).getHasContainers().stream()
+ .filter(c -> !c.key.equals(T.id.getAccessor())) // TODO: are labels available?
+ .findAny().isPresent()) return false;
}
}
return true;