You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@tinkerpop.apache.org by ok...@apache.org on 2015/05/15 20:17:46 UTC

incubator-tinkerpop git commit: add P.not(P...) and P.not(traversal) which nots a P[]. hasNot(traversal) is now simply where(not(traversal)).

Repository: incubator-tinkerpop
Updated Branches:
  refs/heads/master e57634f2b -> b039963a8


add P.not(P...) and P.not(traversal) which nots a P[]. hasNot(traversal) is now simply where(not(traversal)).


Project: http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/commit/b039963a
Tree: http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/tree/b039963a
Diff: http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/diff/b039963a

Branch: refs/heads/master
Commit: b039963a8a986a8e96ab75640aa4258c2538aebb
Parents: e57634f
Author: Marko A. Rodriguez <ok...@gmail.com>
Authored: Fri May 15 12:17:41 2015 -0600
Committer: Marko A. Rodriguez <ok...@gmail.com>
Committed: Fri May 15 12:17:41 2015 -0600

----------------------------------------------------------------------
 .../traversal/dsl/graph/GraphTraversal.java     |  2 +-
 .../traversal/step/filter/WhereStep.java        | 20 +++++++++++---------
 .../strategy/decoration/SubgraphStrategy.java   | 11 ++++++-----
 .../apache/tinkerpop/gremlin/structure/P.java   |  4 ++++
 .../step/filter/GroovyHasNotTest.groovy         |  5 -----
 .../step/filter/GroovyWhereTest.groovy          |  7 +++++++
 .../traversal/step/filter/HasNotTest.java       | 16 ----------------
 .../traversal/step/filter/WhereTest.java        | 18 ++++++++++++++++++
 8 files changed, 47 insertions(+), 36 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/blob/b039963a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/dsl/graph/GraphTraversal.java
----------------------------------------------------------------------
diff --git a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/dsl/graph/GraphTraversal.java b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/dsl/graph/GraphTraversal.java
index d4cff86..6414e7f 100644
--- a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/dsl/graph/GraphTraversal.java
+++ b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/dsl/graph/GraphTraversal.java
@@ -451,7 +451,7 @@ public interface GraphTraversal<S, E> extends Traversal<S, E> {
     }
 
     public default GraphTraversal<S, E> where(final Scope scope, final Traversal whereTraversal) {
-        return this.asAdmin().addStep(new WhereStep<>(this.asAdmin(), scope, whereTraversal));
+        return this.where(scope, P.traversal(whereTraversal));
     }
 
     public default GraphTraversal<S, E> where(final String startKey, final P<?> predicate) {

http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/blob/b039963a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/filter/WhereStep.java
----------------------------------------------------------------------
diff --git a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/filter/WhereStep.java b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/filter/WhereStep.java
index 9ab81b1..532050a 100644
--- a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/filter/WhereStep.java
+++ b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/filter/WhereStep.java
@@ -51,17 +51,19 @@ public final class WhereStep<S> extends FilterStep<S> implements TraversalParent
         super(traversal);
         this.scope = scope;
         this.predicate = predicate;
-        this.startKey = startKey.orElse(null);
-        this.endKey = this.predicate.getValue() instanceof Collection ? ((Collection<String>) this.predicate.getValue()).iterator().next() : (String) this.predicate.getValue();
+        if (this.predicate.getBiPredicate() instanceof TraversalBiPredicate) {
+            final Traversal<?, ?> whereTraversal = ((TraversalBiPredicate) this.predicate.getBiPredicate()).getTraversal();
+            this.startKey = whereTraversal.asAdmin().getStartStep().getLabels().isEmpty() ? null : whereTraversal.asAdmin().getStartStep().getLabels().iterator().next();
+            this.endKey = whereTraversal.asAdmin().getEndStep().getLabels().isEmpty() ? null : whereTraversal.asAdmin().getEndStep().getLabels().iterator().next();
+            this.integrateChild(whereTraversal.asAdmin());
+        } else {
+            this.startKey = startKey.orElse(null);
+            this.endKey = this.predicate.getValue() instanceof Collection ? ((Collection<String>) this.predicate.getValue()).iterator().next() : (String) this.predicate.getValue();
+        }
     }
 
-    public WhereStep(final Traversal.Admin traversal, final Scope scope, final Traversal<?, ?> whereTraversal) {
-        super(traversal);
-        this.scope = scope;
-        this.predicate = P.traversal(whereTraversal);
-        this.startKey = whereTraversal.asAdmin().getStartStep().getLabels().isEmpty() ? null : whereTraversal.asAdmin().getStartStep().getLabels().iterator().next();
-        this.endKey = whereTraversal.asAdmin().getEndStep().getLabels().isEmpty() ? null : whereTraversal.asAdmin().getEndStep().getLabels().iterator().next();
-        this.integrateChild(whereTraversal.asAdmin());
+    public WhereStep(final Traversal.Admin traversal, final Scope scope, final P<?> predicate) {
+        this(traversal, scope, Optional.empty(), predicate);
     }
 
     @Override

http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/blob/b039963a/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 21c14ce..0c65ca3 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
@@ -37,6 +37,7 @@ import org.apache.tinkerpop.gremlin.process.traversal.strategy.AbstractTraversal
 import org.apache.tinkerpop.gremlin.process.traversal.util.TraversalHelper;
 import org.apache.tinkerpop.gremlin.structure.Direction;
 import org.apache.tinkerpop.gremlin.structure.Edge;
+import org.apache.tinkerpop.gremlin.structure.P;
 import org.apache.tinkerpop.gremlin.structure.Vertex;
 
 import java.util.ArrayList;
@@ -89,7 +90,7 @@ public final class SubgraphStrategy extends AbstractTraversalStrategy<TraversalS
             vertexStepsToInsertFilterAfter.addAll(TraversalHelper.getStepsOfAssignableClass(AddVertexStartStep.class, traversal));
             vertexStepsToInsertFilterAfter.addAll(graphSteps.stream().filter(GraphStep::returnsVertex).collect(Collectors.toList()));
 
-            vertexStepsToInsertFilterAfter.forEach(s -> TraversalHelper.insertAfterStep(new WhereStep<>(traversal, Scope.local, vertexPredicate.asAdmin().clone()), s, traversal));
+            vertexStepsToInsertFilterAfter.forEach(s -> TraversalHelper.insertAfterStep(new WhereStep<>(traversal, Scope.local, P.traversal(vertexPredicate.asAdmin().clone())), s, traversal));
         }
 
         if (edgePredicate != null) {
@@ -99,13 +100,13 @@ public final class SubgraphStrategy extends AbstractTraversalStrategy<TraversalS
             edgeStepsToInsertFilterAfter.addAll(graphSteps.stream().filter(GraphStep::returnsEdge).collect(Collectors.toList()));
             edgeStepsToInsertFilterAfter.addAll(vertexSteps.stream().filter(VertexStep::returnsEdge).collect(Collectors.toList()));
 
-            edgeStepsToInsertFilterAfter.forEach(s -> TraversalHelper.insertAfterStep(new WhereStep<>(traversal, Scope.local, edgePredicate.asAdmin().clone()), s, traversal));
+            edgeStepsToInsertFilterAfter.forEach(s -> TraversalHelper.insertAfterStep(new WhereStep<>(traversal, Scope.local, P.traversal(edgePredicate.asAdmin().clone())), s, traversal));
         }
 
         // explode g.V().out() to g.V().outE().inV() only if there is an edge predicate otherwise
         vertexSteps.stream().filter(VertexStep::returnsVertex).forEach(s -> {
             if (null == edgePredicate)
-                TraversalHelper.insertAfterStep(new WhereStep<>(traversal, Scope.local, vertexPredicate.asAdmin().clone()), s, traversal);
+                TraversalHelper.insertAfterStep(new WhereStep<>(traversal, Scope.local, P.traversal(vertexPredicate.asAdmin().clone())), s, traversal);
             else {
                 final VertexStep replacementVertexStep = new VertexStep(traversal, Edge.class, s.getDirection(), s.getEdgeLabels());
                 Step intermediateFilterStep = null;
@@ -116,10 +117,10 @@ public final class SubgraphStrategy extends AbstractTraversalStrategy<TraversalS
 
                 TraversalHelper.replaceStep(s, replacementVertexStep, traversal);
                 TraversalHelper.insertAfterStep(intermediateFilterStep, replacementVertexStep, traversal);
-                TraversalHelper.insertAfterStep(new WhereStep<>(traversal, Scope.local, edgePredicate.asAdmin().clone()), replacementVertexStep, traversal);
+                TraversalHelper.insertAfterStep(new WhereStep<>(traversal, Scope.local, P.traversal(edgePredicate.asAdmin().clone())), replacementVertexStep, traversal);
 
                 if (vertexPredicate != null)
-                    TraversalHelper.insertAfterStep(new WhereStep<>(traversal, Scope.local, vertexPredicate.asAdmin().clone()), intermediateFilterStep, traversal);
+                    TraversalHelper.insertAfterStep(new WhereStep<>(traversal, Scope.local, P.traversal(vertexPredicate.asAdmin().clone())), intermediateFilterStep, traversal);
             }
         });
     }

http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/blob/b039963a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/P.java
----------------------------------------------------------------------
diff --git a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/P.java b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/P.java
index 880deff..6dd3fc9 100644
--- a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/P.java
+++ b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/P.java
@@ -137,6 +137,10 @@ public class P<V> implements Predicate<V>, Serializable {
         return new P(new TraversalBiPredicate<>(traversal.asAdmin(), false), null);
     }
 
+    public static <S, E> P<S> not(final Traversal<S, E> traversal) {
+        return new P(new TraversalBiPredicate<>(traversal.asAdmin(), true), null);
+    }
+
     public static P test(final BiPredicate biPredicate, final Object value) {
         return new P(biPredicate, value);
     }

http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/blob/b039963a/gremlin-groovy-test/src/main/groovy/org/apache/tinkerpop/gremlin/process/traversal/step/filter/GroovyHasNotTest.groovy
----------------------------------------------------------------------
diff --git a/gremlin-groovy-test/src/main/groovy/org/apache/tinkerpop/gremlin/process/traversal/step/filter/GroovyHasNotTest.groovy b/gremlin-groovy-test/src/main/groovy/org/apache/tinkerpop/gremlin/process/traversal/step/filter/GroovyHasNotTest.groovy
index aea92b1..345a2df 100644
--- a/gremlin-groovy-test/src/main/groovy/org/apache/tinkerpop/gremlin/process/traversal/step/filter/GroovyHasNotTest.groovy
+++ b/gremlin-groovy-test/src/main/groovy/org/apache/tinkerpop/gremlin/process/traversal/step/filter/GroovyHasNotTest.groovy
@@ -37,10 +37,5 @@ public abstract class GroovyHasNotTest {
         public Traversal<Vertex, Vertex> get_g_V_hasNotXprop(final String propertyKey) {
             TraversalScriptHelper.compute("g.V.hasNot('${propertyKey}')", g);
         }
-
-        /*@Override
-        public Traversal<Vertex, String> get_g_V_hasNotXoutXcreatedXX() {
-            TraversalScriptHelper.compute("g.V.hasNot(out('created')).name", g);
-        }*/
     }
 }

http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/blob/b039963a/gremlin-groovy-test/src/main/groovy/org/apache/tinkerpop/gremlin/process/traversal/step/filter/GroovyWhereTest.groovy
----------------------------------------------------------------------
diff --git a/gremlin-groovy-test/src/main/groovy/org/apache/tinkerpop/gremlin/process/traversal/step/filter/GroovyWhereTest.groovy b/gremlin-groovy-test/src/main/groovy/org/apache/tinkerpop/gremlin/process/traversal/step/filter/GroovyWhereTest.groovy
index 7055fbc..76d350b 100644
--- a/gremlin-groovy-test/src/main/groovy/org/apache/tinkerpop/gremlin/process/traversal/step/filter/GroovyWhereTest.groovy
+++ b/gremlin-groovy-test/src/main/groovy/org/apache/tinkerpop/gremlin/process/traversal/step/filter/GroovyWhereTest.groovy
@@ -96,5 +96,12 @@ public abstract class GroovyWhereTest {
                 final Object v1Id) {
             TraversalScriptHelper.compute("g.V(v1Id).repeat(__.bothE('created').where(without('e')).aggregate('e').otherV).emit.path", g, "v1Id", v1Id)
         }
+
+        // hasNot functionality
+
+        @Override
+        public Traversal<Vertex, String> get_g_V_whereXnotXoutXcreatedXXX_name() {
+            TraversalScriptHelper.compute("g.V.where(not(out('created'))).name", g);
+        }
     }
 }

http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/blob/b039963a/gremlin-test/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/filter/HasNotTest.java
----------------------------------------------------------------------
diff --git a/gremlin-test/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/filter/HasNotTest.java b/gremlin-test/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/filter/HasNotTest.java
index 49f518a..ff87ce4 100644
--- a/gremlin-test/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/filter/HasNotTest.java
+++ b/gremlin-test/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/filter/HasNotTest.java
@@ -22,13 +22,10 @@ import org.apache.tinkerpop.gremlin.LoadGraphWith;
 import org.apache.tinkerpop.gremlin.process.AbstractGremlinProcessTest;
 import org.apache.tinkerpop.gremlin.process.GremlinProcessRunner;
 import org.apache.tinkerpop.gremlin.process.traversal.Traversal;
-import org.apache.tinkerpop.gremlin.process.traversal.TraversalEngine;
-import org.apache.tinkerpop.gremlin.process.traversal.dsl.graph.__;
 import org.apache.tinkerpop.gremlin.structure.Vertex;
 import org.junit.Test;
 import org.junit.runner.RunWith;
 
-import java.util.Arrays;
 import java.util.List;
 
 import static org.apache.tinkerpop.gremlin.LoadGraphWith.GraphData.MODERN;
@@ -45,8 +42,6 @@ public abstract class HasNotTest extends AbstractGremlinProcessTest {
 
     public abstract Traversal<Vertex, Vertex> get_g_V_hasNotXprop(final String propertyKey);
 
-    //public abstract Traversal<Vertex, String> get_g_V_hasNotXoutXcreatedXX();
-
     @Test
     @LoadGraphWith(MODERN)
     public void g_VX1X_hasNotXprop() {
@@ -68,12 +63,6 @@ public abstract class HasNotTest extends AbstractGremlinProcessTest {
         assertEquals(6, list.size());
     }
 
-    /*@Test
-    @LoadGraphWith(MODERN)
-    public void g_V_hasNotXoutXcreatedXX() {
-        final Traversal<Vertex, String> traversal = get_g_V_hasNotXoutXcreatedXX();
-        checkResults(Arrays.asList("vadas", "lop", "ripple"), traversal);
-    }*/
 
     public static class Traversals extends HasNotTest {
 
@@ -86,10 +75,5 @@ public abstract class HasNotTest extends AbstractGremlinProcessTest {
         public Traversal<Vertex, Vertex> get_g_V_hasNotXprop(final String propertyKey) {
             return g.V().hasNot(propertyKey);
         }
-
-        /*@Override
-        public Traversal<Vertex, String> get_g_V_hasNotXoutXcreatedXX() {
-            return g.V().where(__.out("created").cou).values("name");
-        }*/
     }
 }
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/blob/b039963a/gremlin-test/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/filter/WhereTest.java
----------------------------------------------------------------------
diff --git a/gremlin-test/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/filter/WhereTest.java b/gremlin-test/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/filter/WhereTest.java
index fface54..7e4cd9d 100644
--- a/gremlin-test/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/filter/WhereTest.java
+++ b/gremlin-test/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/filter/WhereTest.java
@@ -71,6 +71,10 @@ public abstract class WhereTest extends AbstractGremlinProcessTest {
 
     public abstract Traversal<Vertex, Path> get_g_VX1X_repeatXbothEXcreatedX_whereXwithoutXeXX_aggregateXeX_otherVX_emit_path(final Object v1Id);
 
+    // hasNot functionality
+
+    public abstract Traversal<Vertex, String> get_g_V_whereXnotXoutXcreatedXXX_name();
+
     @Test
     @LoadGraphWith(MODERN)
     public void g_V_hasXageX_asXaX_out_in_hasXageX_asXbX_select_whereXa_eqXbXX() {
@@ -235,6 +239,13 @@ public abstract class WhereTest extends AbstractGremlinProcessTest {
         assertFalse(traversal.hasNext());
     }
 
+        @Test
+    @LoadGraphWith(MODERN)
+    public void g_V_hasNotXoutXcreatedXX() {
+        final Traversal<Vertex, String> traversal = get_g_V_whereXnotXoutXcreatedXXX_name();
+        checkResults(Arrays.asList("vadas", "lop", "ripple"), traversal);
+    }
+
 
     public static class Traversals extends WhereTest {
 
@@ -298,5 +309,12 @@ public abstract class WhereTest extends AbstractGremlinProcessTest {
         public Traversal<Vertex, Path> get_g_VX1X_repeatXbothEXcreatedX_whereXwithoutXeXX_aggregateXeX_otherVX_emit_path(final Object v1Id) {
             return g.V(v1Id).repeat(__.bothE("created").where(without("e")).aggregate("e").otherV()).emit().path();
         }
+
+        // hasNot functionality
+
+        @Override
+        public Traversal<Vertex, String> get_g_V_whereXnotXoutXcreatedXXX_name() {
+            return g.V().where(not(__.out("created"))).values("name");
+        }
     }
 }
\ No newline at end of file