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;