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