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/08/26 18:49:13 UTC
incubator-tinkerpop git commit: fixed a bug with meta-properties and
property(). Added more test cases. Updated the docs with the new model. Some
cool examples added.
Repository: incubator-tinkerpop
Updated Branches:
refs/heads/mutating_traverser 0d0ba7b5c -> 7beb36981
fixed a bug with meta-properties and property(). Added more test cases. Updated the docs with the new model. Some cool examples added.
Project: http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/commit/7beb3698
Tree: http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/tree/7beb3698
Diff: http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/diff/7beb3698
Branch: refs/heads/mutating_traverser
Commit: 7beb369811a979e61e967050e632e7f7da8648b5
Parents: 0d0ba7b
Author: Marko A. Rodriguez <ok...@gmail.com>
Authored: Wed Aug 26 10:49:02 2015 -0600
Committer: Marko A. Rodriguez <ok...@gmail.com>
Committed: Wed Aug 26 10:49:02 2015 -0600
----------------------------------------------------------------------
docs/src/the-traversal.asciidoc | 46 ++++++++++++++------
.../traversal/dsl/graph/GraphTraversal.java | 5 ---
.../process/traversal/step/map/AddEdgeStep.java | 19 ++++----
.../step/sideEffect/AddPropertyStep.java | 30 ++++++-------
.../tinkerpop/gremlin/structure/Graph.java | 2 +-
.../traversal/dsl/graph/GraphTraversalTest.java | 2 +-
.../traversal/step/map/GroovyAddEdgeTest.groovy | 8 ++--
.../step/map/GroovyAddVertexTest.groovy | 5 +++
.../process/traversal/step/map/AddEdgeTest.java | 33 ++++++++++++--
.../traversal/step/map/AddVertexTest.java | 29 ++++++++++++
10 files changed, 127 insertions(+), 52 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/blob/7beb3698/docs/src/the-traversal.asciidoc
----------------------------------------------------------------------
diff --git a/docs/src/the-traversal.asciidoc b/docs/src/the-traversal.asciidoc
index adf65d3..784a852 100644
--- a/docs/src/the-traversal.asciidoc
+++ b/docs/src/the-traversal.asciidoc
@@ -123,16 +123,27 @@ image::addedge-step.png[width=450]
[gremlin-groovy,modern]
----
-g.V(1).as('a').out('created').in('created').where(neq('a')).addOutE('co-developer','a','year',2009) <1>
-g.withSideEffect('a',g.V(3,5).toList()).V(4).addInE('createdBy','a') <2>
-g.V().as('a').out('created').as('b').select('a','b').addOutE('b','createdBy','a','acl','public') <3>
-g.V(1).as('a').out('knows').addInE('livesNear','a','year',2009).inV().inE('livesNear').values('year') <4>
+g.V(1).as('a').out('created').in('created').where(neq('a')).
+ addE('co-developer').from('a').property('year',2009) <1>
+g.V(3,4,5).aggregate('x').has('name','josh').as('a').select('x').unfold().hasLabel('software').addE('createdBy').to('a') <2>
+g.V().as('a').out('created').addE('createdBy').to('a').property('acl','public') <3>
+g.V(1).as('a').out('knows').
+ addE('livesNear').from('a').property('year',2009).
+ inV().inE('livesNear').values('year') <4>
+g.V().match(
+ __.as('a').out('knows').as('b'),
+ __.as('a').out('created').as('c'),
+ __.as('b').out('created').as('c')).
+ addE('friendlyCollaborator').from('a').to('b').
+ property(id,13).property('project',select('c').values('name')) <5>
+g.E(13).valueMap()
----
<1> Add a co-developer edge with a year-property between marko and his collaborators.
<2> Add incoming createdBy edges from the josh-vertex to the lop- and ripple-vertices.
-<3> It is possible to pull the vertices from a select-projection.
+<3> Add an inverse createdBy edge for all created edges.
<4> The newly created edge is a traversable object.
+<5> Two arbitrary bindings in a traversal can be joined `from()`->`to()`, where `id` can be provided for graphs that supports user provided ids.
[[addvertex-step]]
AddVertex Step
@@ -142,9 +153,9 @@ The `addV()`-step is used to add vertices to the graph (*map*/*sideEffect*). For
[gremlin-groovy,modern]
----
-g.addV(label,'person','name','stephen')
+g.addV('person').property('name','stephen')
g.V().values('name')
-g.V().outE('knows').addV('name','nothing')
+g.V().outE('knows').addV().property('name','nothing')
g.V().has('name','nothing')
g.V().has('name','nothing').bothE()
----
@@ -153,16 +164,23 @@ g.V().has('name','nothing').bothE()
AddProperty Step
~~~~~~~~~~~~~~~~
-The `property()`-step is used to add properties to the elements of the graph (*sideEffect*). Unlike `addV()` and `addE()`, `property()` is a full sideEffect step in that it does not return the property it created, but the element that streamed into it.
+The `property()`-step is used to add properties to the elements of the graph (*sideEffect*). Unlike `addV()` and `addE()`, `property()` is a full sideEffect step in that it does not return the property it created, but the element that streamed into it. Moreover, if `property()` follows an `addV()` or `addE()`, then it is "folded" into the previous step to enable vertex and edge creation with all its properties in one creation operation.
[gremlin-groovy,modern]
----
g.V(1).property('country','usa')
g.V(1).property('city','santa fe').property('state','new mexico').valueMap()
-g.V(1).property(list,'age',35)
+g.V(1).property(list,'age',35) <1>
g.V(1).valueMap()
+g.V(1).property('friendWeight',outE('knows').values('weight').sum(),'acl','private') <2>
+g.V(1).properties('friendWeight').valueMap() <3>
----
+<1> For vertices, a cardinality can be provided for <<vertex properties,vertex-properties>>.
+<2> It is possible to select the property value (as well as key) via a traversal.
+<3> For vertices, the `property()`-step can add meta-properties.
+
+
[[aggregate-step]]
Aggregate Step
~~~~~~~~~~~~~~
@@ -804,7 +822,7 @@ g.V().match(
__.as('a').out('created').has('name','lop').as('b'), <1>
__.as('b').in('created').has('age', 29).as('c'),
__.as('c').repeat(out()).times(2)). <2>
- select('c').out('knows').dedup().values('name') <3>
+ select('c').out('knows').dedup().values('name') <3>
----
<1> *Patterns of arbitrary complexity*: `match()` is not restricted to triple patterns or property paths.
@@ -819,10 +837,10 @@ g.V().match(
__.as('a').out('knows').as('b'),
__.as('b').out('created').has('name','lop')).
select('b').out('created').
- match(
- __.as('x').in('created').as('y'),
- __.as('y').out('knows').as('z')).
- select('z').values('name')
+ match(
+ __.as('x').in('created').as('y'),
+ __.as('y').out('knows').as('z')).
+ select('z').values('name')
----
IMPORTANT: The `match()`-step is stateless. The variable bindings of the traversal patterns are stored in the path history of the traverser. As such, the variables used over all `match()`-steps within a traversal are globally unique. A benefit of this is that subsequent `where()`, `select()`, `match()`, etc. steps can leverage the same variables in their analysis.
http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/blob/7beb3698/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 2fad998..f4a0374 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
@@ -677,11 +677,6 @@ public interface GraphTraversal<S, E> extends Traversal<S, E> {
return this;
}
- public default GraphTraversal<S, E> id(final Object elementId) {
- ((Mutating) this.asAdmin().getEndStep()).addPropertyMutations(T.id, elementId);
- return this;
- }
-
/**
* @deprecated As of release 3.1.0, replaced by {@link #addE(String)}
*/
http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/blob/7beb3698/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/map/AddEdgeStep.java
----------------------------------------------------------------------
diff --git a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/map/AddEdgeStep.java b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/map/AddEdgeStep.java
index 6a83a59..91f3c05 100644
--- a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/map/AddEdgeStep.java
+++ b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/map/AddEdgeStep.java
@@ -34,7 +34,9 @@ import org.apache.tinkerpop.gremlin.structure.T;
import org.apache.tinkerpop.gremlin.structure.Vertex;
import org.apache.tinkerpop.gremlin.structure.util.StringFactory;
import org.apache.tinkerpop.gremlin.structure.util.detached.DetachedFactory;
+import org.apache.tinkerpop.gremlin.util.iterator.IteratorUtils;
+import java.util.Iterator;
import java.util.List;
import java.util.Set;
@@ -83,14 +85,15 @@ public final class AddEdgeStep<S> extends MapStep<S, Edge> implements Mutating<E
@Override
protected Edge map(final Traverser.Admin<S> traverser) {
- final Edge edge =
- this.parameters.get(traverser, FROM, () -> (Vertex) traverser.get()).
- addEdge(this.parameters.get(traverser, T.label, () -> Edge.DEFAULT_LABEL),
- this.parameters.get(traverser, TO, () -> (Vertex) traverser.get()), this.parameters.getKeyValues(traverser, TO, FROM, T.label));
- if (callbackRegistry != null) {
- final Event.EdgeAddedEvent vae = new Event.EdgeAddedEvent(DetachedFactory.detach(edge, true));
- callbackRegistry.getCallbacks().forEach(c -> c.accept(vae));
- }
+ final Vertex toVertex = this.parameters.get(traverser, TO, () -> (Vertex) traverser.get());
+ final Vertex fromVertex = this.parameters.get(traverser, FROM, () -> (Vertex) traverser.get());
+ final String edgeLabel = this.parameters.get(traverser, T.label, () -> Edge.DEFAULT_LABEL);
+
+ final Edge edge = fromVertex.addEdge(edgeLabel, toVertex, this.parameters.getKeyValues(traverser, TO, FROM, T.label));
+ if (callbackRegistry != null) {
+ final Event.EdgeAddedEvent vae = new Event.EdgeAddedEvent(DetachedFactory.detach(edge, true));
+ callbackRegistry.getCallbacks().forEach(c -> c.accept(vae));
+ }
return edge;
}
http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/blob/7beb3698/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/sideEffect/AddPropertyStep.java
----------------------------------------------------------------------
diff --git a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/sideEffect/AddPropertyStep.java b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/sideEffect/AddPropertyStep.java
index ccae521..3405ce9 100644
--- a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/sideEffect/AddPropertyStep.java
+++ b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/sideEffect/AddPropertyStep.java
@@ -83,31 +83,31 @@ public final class AddPropertyStep<S extends Element> extends SideEffectStep<S>
});
final Object[] vertexPropertyKeyValues = this.parameters.getKeyValues(traverser, T.key, T.value);
+ final Element element = traverser.get();
+ final boolean runtimeAsVertex = element instanceof Vertex;
+
if (this.callbackRegistry != null) {
- final Element currentElement = traverser.get();
final Property currentProperty = traverser.get().property(key);
-
- // todo: have to do a runtime check until TINKERPOP3-783 is done - asVertex is not reliable
- final boolean runtimeAsVertex = currentElement instanceof Vertex;
final boolean newProperty = runtimeAsVertex ? currentProperty == VertexProperty.empty() : currentProperty == Property.empty();
-
- Event.ElementPropertyChangedEvent evt;
- if (currentElement instanceof Vertex)
- evt = new Event.VertexPropertyChangedEvent(DetachedFactory.detach((Vertex) currentElement, true), newProperty ? null : DetachedFactory.detach((VertexProperty) currentProperty, true), value, vertexPropertyKeyValues);
- else if (currentElement instanceof Edge)
- evt = new Event.EdgePropertyChangedEvent(DetachedFactory.detach((Edge) currentElement, true), newProperty ? null : DetachedFactory.detach(currentProperty), value);
- else if (currentElement instanceof VertexProperty)
- evt = new Event.VertexPropertyPropertyChangedEvent(DetachedFactory.detach((VertexProperty) currentElement, true), newProperty ? null : DetachedFactory.detach(currentProperty), value);
+ final Event.ElementPropertyChangedEvent evt;
+ if (element instanceof Vertex)
+ evt = new Event.VertexPropertyChangedEvent(DetachedFactory.detach((Vertex) element, true), newProperty ? null : DetachedFactory.detach((VertexProperty) currentProperty, true), value, vertexPropertyKeyValues);
+ else if (element instanceof Edge)
+ evt = new Event.EdgePropertyChangedEvent(DetachedFactory.detach((Edge) element, true), newProperty ? null : DetachedFactory.detach(currentProperty), value);
+ else if (element instanceof VertexProperty)
+ evt = new Event.VertexPropertyPropertyChangedEvent(DetachedFactory.detach((VertexProperty) element, true), newProperty ? null : DetachedFactory.detach(currentProperty), value);
else
- throw new IllegalStateException(String.format("The incoming object cannot be processed by change eventing in %s: %s", AddPropertyStep.class.getName(), currentElement));
+ throw new IllegalStateException(String.format("The incoming object cannot be processed by change eventing in %s: %s", AddPropertyStep.class.getName(), element));
this.callbackRegistry.getCallbacks().forEach(c -> c.accept(evt));
}
if (null != this.cardinality)
- ((Vertex) traverser.get()).property(this.cardinality, key, value, vertexPropertyKeyValues);
+ ((Vertex) element).property(this.cardinality, key, value, vertexPropertyKeyValues);
+ else if(runtimeAsVertex)
+ ((Vertex)element).property(key,value,vertexPropertyKeyValues);
else
- traverser.get().property(key, value);
+ element.property(key, value);
}
@Override
http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/blob/7beb3698/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/Graph.java
----------------------------------------------------------------------
diff --git a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/Graph.java b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/Graph.java
index 432197d..a9b3dc2 100644
--- a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/Graph.java
+++ b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/Graph.java
@@ -175,7 +175,7 @@ public interface Graph extends AutoCloseable, Host {
* <ul>
* <li>g.vertices(v.id())</li>
* </ul>
- * <p/>
+ * <p/>
* If the graph return {@code true} for {@link Features.VertexFeatures#supportsStringIds()} ()} then it should support
* filters as with:
* <ul>
http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/blob/7beb3698/gremlin-core/src/test/java/org/apache/tinkerpop/gremlin/process/traversal/dsl/graph/GraphTraversalTest.java
----------------------------------------------------------------------
diff --git a/gremlin-core/src/test/java/org/apache/tinkerpop/gremlin/process/traversal/dsl/graph/GraphTraversalTest.java b/gremlin-core/src/test/java/org/apache/tinkerpop/gremlin/process/traversal/dsl/graph/GraphTraversalTest.java
index 174a97e..e0e224f 100644
--- a/gremlin-core/src/test/java/org/apache/tinkerpop/gremlin/process/traversal/dsl/graph/GraphTraversalTest.java
+++ b/gremlin-core/src/test/java/org/apache/tinkerpop/gremlin/process/traversal/dsl/graph/GraphTraversalTest.java
@@ -34,7 +34,7 @@ import java.util.Set;
*/
public class GraphTraversalTest {
- private static Set<String> NO_GRAPH = new HashSet<>(Arrays.asList("asAdmin", "by", "option", "iterate", "to", "from", "id"));
+ private static Set<String> NO_GRAPH = new HashSet<>(Arrays.asList("asAdmin", "by", "option", "iterate", "to", "from"));
private static Set<String> NO_ANONYMOUS = new HashSet<>(Arrays.asList("start", "__"));
@Test
http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/blob/7beb3698/gremlin-groovy-test/src/main/groovy/org/apache/tinkerpop/gremlin/process/traversal/step/map/GroovyAddEdgeTest.groovy
----------------------------------------------------------------------
diff --git a/gremlin-groovy-test/src/main/groovy/org/apache/tinkerpop/gremlin/process/traversal/step/map/GroovyAddEdgeTest.groovy b/gremlin-groovy-test/src/main/groovy/org/apache/tinkerpop/gremlin/process/traversal/step/map/GroovyAddEdgeTest.groovy
index 91b61fb..15c5286 100644
--- a/gremlin-groovy-test/src/main/groovy/org/apache/tinkerpop/gremlin/process/traversal/step/map/GroovyAddEdgeTest.groovy
+++ b/gremlin-groovy-test/src/main/groovy/org/apache/tinkerpop/gremlin/process/traversal/step/map/GroovyAddEdgeTest.groovy
@@ -41,10 +41,10 @@ public abstract class GroovyAddEdgeTest {
TraversalScriptHelper.compute("g.V(${v1Id}).as('a').out('created').addE('createdBy').to('a').property('weight', 2)", g, "v1Id", v1Id)
}
- /*@Override
- public Traversal<Vertex, Edge> get_g_withSideEffectXx__g_V_toListX_addOutEXexistsWith_x_time_nowX() {
- return g.withSideEffect("x", g.V().toList()).V().addE("existsWith").to(__.select("x")).property("time", "now");
- }*/
+ @Override
+ public Traversal<Vertex, Edge> get_g_V_aggregateXxX_asXaX_selectXxX_unfold_addEXexistsWithX_toXaX_propertyXtime_nowX() {
+ TraversalScriptHelper.compute("g.V.aggregate('x').as('a').select('x').unfold.addE('existsWith').to('a').property('time', 'now')", g)
+ }
@Override
public Traversal<Vertex, Edge> get_g_V_asXaX_outXcreatedX_inXcreatedX_whereXneqXaXX_asXbX_addEXcodeveloperX_fromXaX_toXbX_propertyXyear_2009X() {
http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/blob/7beb3698/gremlin-groovy-test/src/main/groovy/org/apache/tinkerpop/gremlin/process/traversal/step/map/GroovyAddVertexTest.groovy
----------------------------------------------------------------------
diff --git a/gremlin-groovy-test/src/main/groovy/org/apache/tinkerpop/gremlin/process/traversal/step/map/GroovyAddVertexTest.groovy b/gremlin-groovy-test/src/main/groovy/org/apache/tinkerpop/gremlin/process/traversal/step/map/GroovyAddVertexTest.groovy
index cffaaff..7ec2866 100644
--- a/gremlin-groovy-test/src/main/groovy/org/apache/tinkerpop/gremlin/process/traversal/step/map/GroovyAddVertexTest.groovy
+++ b/gremlin-groovy-test/src/main/groovy/org/apache/tinkerpop/gremlin/process/traversal/step/map/GroovyAddVertexTest.groovy
@@ -46,6 +46,11 @@ public abstract class GroovyAddVertexTest {
TraversalScriptHelper.compute("g.addV(label, 'person', 'name', 'stephen')", g)
}
+ @Override
+ public Traversal<Vertex, Vertex> get_g_V_hasXname_markoX_propertyXfriendWeight_outEXknowsX_weight_sum__acl_privateX() {
+ TraversalScriptHelper.compute("g.V.has('name', 'marko').property('friendWeight', outE('knows').weight.sum(), 'acl', 'private')", g)
+ }
+
///////// DEPRECATED BELOW
@Override
http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/blob/7beb3698/gremlin-test/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/map/AddEdgeTest.java
----------------------------------------------------------------------
diff --git a/gremlin-test/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/map/AddEdgeTest.java b/gremlin-test/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/map/AddEdgeTest.java
index 15eab91..37e59fd 100644
--- a/gremlin-test/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/map/AddEdgeTest.java
+++ b/gremlin-test/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/map/AddEdgeTest.java
@@ -48,6 +48,8 @@ public abstract class AddEdgeTest extends AbstractGremlinProcessTest {
public abstract Traversal<Vertex, Edge> get_g_VX1X_asXaX_outXcreatedX_addEXcreatedByX_toXaX_propertyXweight_2X(final Object v1Id);
+ public abstract Traversal<Vertex, Edge> get_g_V_aggregateXxX_asXaX_selectXxX_unfold_addEXexistsWithX_toXaX_propertyXtime_nowX();
+
public abstract Traversal<Vertex, Edge> get_g_V_asXaX_outXcreatedX_inXcreatedX_whereXneqXaXX_asXbX_addEXcodeveloperX_fromXaX_toXbX_propertyXyear_2009X();
public abstract Traversal<Vertex, Edge> get_g_V_asXaX_inXcreatedX_addEXcreatedByX_fromXaX_propertyXyear_2009X_propertyXacl_publicX();
@@ -177,6 +179,29 @@ public abstract class AddEdgeTest extends AbstractGremlinProcessTest {
@Test
@LoadGraphWith(MODERN)
+ @FeatureRequirement(featureClass = Graph.Features.EdgeFeatures.class, feature = Graph.Features.EdgeFeatures.FEATURE_ADD_EDGES)
+ public void g_V_aggregateXxX_asXaX_selectXxX_unfold_addEXexistsWithX_toXaX_propertyXtime_nowX() {
+ final Traversal<Vertex, Edge> traversal = get_g_V_aggregateXxX_asXaX_selectXxX_unfold_addEXexistsWithX_toXaX_propertyXtime_nowX();
+ printTraversalForm(traversal);
+ int count = 0;
+ while (traversal.hasNext()) {
+ final Edge edge = traversal.next();
+ assertEquals("existsWith", edge.label());
+ assertEquals("now", edge.value("time"));
+ assertEquals(1, IteratorUtils.count(edge.properties()));
+ count++;
+ }
+ assertEquals(36, count);
+ assertEquals(42, IteratorUtils.count(graph.edges()));
+ for (final Vertex vertex : IteratorUtils.list(graph.vertices())) {
+ assertEquals(6, IteratorUtils.count(vertex.edges(Direction.OUT, "existsWith")));
+ assertEquals(6, IteratorUtils.count(vertex.edges(Direction.IN, "existsWith")));
+ }
+ assertEquals(6, IteratorUtils.count(graph.vertices()));
+ }
+
+ @Test
+ @LoadGraphWith(MODERN)
@Deprecated
@FeatureRequirement(featureClass = Graph.Features.EdgeFeatures.class, feature = Graph.Features.EdgeFeatures.FEATURE_ADD_EDGES)
public void g_V_asXaX_outXcreatedX_inXcreatedX_whereXneqXaXX_asXbX_selectXa_bX_addInEXa_codeveloper_b_year_2009X() {
@@ -289,10 +314,10 @@ public abstract class AddEdgeTest extends AbstractGremlinProcessTest {
return g.V(v1Id).as("a").out("created").addE("createdBy").to("a").property("weight", 2);
}
- /*@Override
- public Traversal<Vertex, Edge> get_g_withSideEffectXx__g_V_toListX_addOutEXexistsWith_x_time_nowX() {
- return g.withSideEffect("x", g.V().toList()).V().addE("existsWith").to(__.select("x")).property("time", "now");
- }*/
+ @Override
+ public Traversal<Vertex, Edge> get_g_V_aggregateXxX_asXaX_selectXxX_unfold_addEXexistsWithX_toXaX_propertyXtime_nowX() {
+ return g.V().aggregate("x").as("a").select("x").unfold().addE("existsWith").to("a").property("time", "now");
+ }
@Override
public Traversal<Vertex, Edge> get_g_V_asXaX_outXcreatedX_inXcreatedX_whereXneqXaXX_asXbX_addEXcodeveloperX_fromXaX_toXbX_propertyXyear_2009X() {
http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/blob/7beb3698/gremlin-test/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/map/AddVertexTest.java
----------------------------------------------------------------------
diff --git a/gremlin-test/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/map/AddVertexTest.java b/gremlin-test/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/map/AddVertexTest.java
index fad1519..4019995 100644
--- a/gremlin-test/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/map/AddVertexTest.java
+++ b/gremlin-test/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/map/AddVertexTest.java
@@ -47,6 +47,8 @@ public abstract class AddVertexTest extends AbstractGremlinTest {
public abstract Traversal<Vertex, Vertex> get_g_addVXpersonX_propertyXname_stephenX();
+ public abstract Traversal<Vertex, Vertex> get_g_V_hasXname_markoX_propertyXfriendWeight_outEXknowsX_weight_sum__acl_privateX();
+
// 3.0.0 DEPRECATIONS
@Deprecated
public abstract Traversal<Vertex, Vertex> get_g_V_addVXlabel_animal_age_0X();
@@ -57,6 +59,7 @@ public abstract class AddVertexTest extends AbstractGremlinTest {
@Test
@LoadGraphWith(MODERN)
@FeatureRequirement(featureClass = Graph.Features.VertexFeatures.class, feature = Graph.Features.VertexFeatures.FEATURE_ADD_VERTICES)
+ @FeatureRequirement(featureClass = Graph.Features.VertexFeatures.class, feature = Graph.Features.VertexFeatures.FEATURE_ADD_PROPERTY)
public void g_V_addVXanimalX_propertyXage_selectXaX_byXageXX_propertyXname_puppyX() {
final Traversal<Vertex, Vertex> traversal = get_g_VX1X_addVXanimalX_propertyXage_selectXaX_byXageXX_propertyXname_puppyX(convertToVertexId(graph, "marko"));
printTraversalForm(traversal);
@@ -72,6 +75,7 @@ public abstract class AddVertexTest extends AbstractGremlinTest {
@Test
@LoadGraphWith(MODERN)
@FeatureRequirement(featureClass = Graph.Features.VertexFeatures.class, feature = Graph.Features.VertexFeatures.FEATURE_ADD_VERTICES)
+ @FeatureRequirement(featureClass = Graph.Features.VertexFeatures.class, feature = Graph.Features.VertexFeatures.FEATURE_ADD_PROPERTY)
public void g_V_addVXanimalX_propertyXage_0X() {
final Traversal<Vertex, Vertex> traversal = get_g_V_addVXanimalX_propertyXage_0X();
printTraversalForm(traversal);
@@ -90,6 +94,7 @@ public abstract class AddVertexTest extends AbstractGremlinTest {
@Test
@LoadGraphWith(MODERN)
@FeatureRequirement(featureClass = Graph.Features.VertexFeatures.class, feature = Graph.Features.VertexFeatures.FEATURE_ADD_VERTICES)
+ @FeatureRequirement(featureClass = Graph.Features.VertexFeatures.class, feature = Graph.Features.VertexFeatures.FEATURE_ADD_PROPERTY)
public void g_addVXpersonX_propertyXname_stephenX() {
final Traversal<Vertex, Vertex> traversal = get_g_addVXpersonX_propertyXname_stephenX();
printTraversalForm(traversal);
@@ -101,11 +106,29 @@ public abstract class AddVertexTest extends AbstractGremlinTest {
assertEquals(7, IteratorUtils.count(graph.vertices()));
}
+ @Test
+ @LoadGraphWith(MODERN)
+ @FeatureRequirement(featureClass = Graph.Features.VertexFeatures.class, feature = Graph.Features.VertexFeatures.FEATURE_ADD_VERTICES)
+ @FeatureRequirement(featureClass = Graph.Features.VertexFeatures.class, feature = Graph.Features.VertexFeatures.FEATURE_ADD_PROPERTY)
+ public void g_V_hasXname_markoX_addVXmetaPersonX_propertyXname_nameX_propertyXfriendWeight_outEXknowsX_weight_sum__acl_privateX() {
+ final Traversal<Vertex, Vertex> traversal = get_g_V_hasXname_markoX_propertyXfriendWeight_outEXknowsX_weight_sum__acl_privateX();
+ printTraversalForm(traversal);
+ final Vertex marko = traversal.next();
+ assertFalse(traversal.hasNext());
+ assertEquals("person", marko.label());
+ assertEquals("marko", marko.value("name"));
+ assertEquals(1.5, marko.value("friendWeight"), 0.01);
+ assertEquals("private", marko.property("friendWeight").value("acl"));
+ assertEquals(3, IteratorUtils.count(marko.properties()));
+ assertEquals(1, IteratorUtils.count(marko.property("friendWeight").properties()));
+ }
+
/////
@Test
@LoadGraphWith(MODERN)
@FeatureRequirement(featureClass = Graph.Features.VertexFeatures.class, feature = Graph.Features.VertexFeatures.FEATURE_ADD_VERTICES)
+ @FeatureRequirement(featureClass = Graph.Features.VertexFeatures.class, feature = Graph.Features.VertexFeatures.FEATURE_ADD_PROPERTY)
public void g_V_addVXlabel_animal_age_0X() {
final Traversal<Vertex, Vertex> traversal = get_g_V_addVXlabel_animal_age_0X();
printTraversalForm(traversal);
@@ -124,6 +147,7 @@ public abstract class AddVertexTest extends AbstractGremlinTest {
@Test
@LoadGraphWith(MODERN)
@FeatureRequirement(featureClass = Graph.Features.VertexFeatures.class, feature = Graph.Features.VertexFeatures.FEATURE_ADD_VERTICES)
+ @FeatureRequirement(featureClass = Graph.Features.VertexFeatures.class, feature = Graph.Features.VertexFeatures.FEATURE_ADD_PROPERTY)
public void g_addVXlabel_person_name_stephenX() {
final Traversal<Vertex, Vertex> traversal = get_g_addVXlabel_person_name_stephenX();
printTraversalForm(traversal);
@@ -154,6 +178,11 @@ public abstract class AddVertexTest extends AbstractGremlinTest {
}
@Override
+ public Traversal<Vertex, Vertex> get_g_V_hasXname_markoX_propertyXfriendWeight_outEXknowsX_weight_sum__acl_privateX() {
+ return g.V().has("name", "marko").property("friendWeight", __.outE("knows").values("weight").sum(), "acl", "private");
+ }
+
+ @Override
public Traversal<Vertex, Vertex> get_g_V_addVXlabel_animal_age_0X() {
return g.V().addV(T.label, "animal", "age", 0);
}