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/02/19 21:02:29 UTC
[2/2] incubator-tinkerpop git commit: GroupStep (group()) and
GroupSideEffectStep (group(key)) now exist.
GroupStep (group()) and GroupSideEffectStep (group(key)) now exist.
Project: http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/commit/0d4f1d93
Tree: http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/tree/0d4f1d93
Diff: http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/diff/0d4f1d93
Branch: refs/heads/master
Commit: 0d4f1d9364a680a63a014c0d9bcff95028c603df
Parents: 1d3a8af
Author: Marko A. Rodriguez <ok...@gmail.com>
Authored: Thu Feb 19 13:02:14 2015 -0700
Committer: Marko A. Rodriguez <ok...@gmail.com>
Committed: Thu Feb 19 13:02:24 2015 -0700
----------------------------------------------------------------------
.../graph/traversal/ElementTraversal.java | 45 ++--
.../process/graph/traversal/GraphTraversal.java | 29 +--
.../gremlin/process/graph/traversal/__.java | 24 +-
.../traversal/step/map/GroupCountStep.java | 2 +-
.../graph/traversal/step/map/GroupStep.java | 243 ++++++++++++++++++
.../step/sideEffect/AggregateStep.java | 8 +-
.../step/sideEffect/GroupSideEffectStep.java | 244 +++++++++++++++++++
.../traversal/step/sideEffect/GroupStep.java | 156 ------------
.../traversal/step/sideEffect/StoreStep.java | 10 +-
.../sideEffect/mapreduce/GroupMapReduce.java | 126 ----------
.../step/filter/GroovyDedupTest.groovy | 17 +-
.../step/filter/GroovySampleTest.groovy | 8 +-
.../traversal/step/map/GroovyMaxTest.groovy | 4 +-
.../traversal/step/map/GroovyMeanTest.groovy | 4 +-
.../traversal/step/map/GroovyMinTest.groovy | 4 +-
.../traversal/step/map/GroovySelectTest.groovy | 6 +-
.../traversal/step/map/GroovySumTest.groovy | 4 +-
.../step/sideEffect/GroovyAggregateTest.groovy | 16 +-
.../graph/traversal/step/filter/DedupTest.java | 8 +-
.../graph/traversal/step/filter/SampleTest.java | 4 +-
.../graph/traversal/step/map/MaxTest.java | 2 +-
.../graph/traversal/step/map/MeanTest.java | 2 +-
.../graph/traversal/step/map/MinTest.java | 2 +-
.../graph/traversal/step/map/SelectTest.java | 8 +-
.../graph/traversal/step/map/SumTest.java | 2 +-
.../step/sideEffect/AggregateTest.java | 20 +-
.../tinkergraph/structure/TinkerGraphTest.java | 5 +-
27 files changed, 591 insertions(+), 412 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/blob/0d4f1d93/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/graph/traversal/ElementTraversal.java
----------------------------------------------------------------------
diff --git a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/graph/traversal/ElementTraversal.java b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/graph/traversal/ElementTraversal.java
index a45b101..d7f2b7d 100644
--- a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/graph/traversal/ElementTraversal.java
+++ b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/graph/traversal/ElementTraversal.java
@@ -18,14 +18,29 @@
*/
package org.apache.tinkerpop.gremlin.process.graph.traversal;
-import org.apache.tinkerpop.gremlin.process.*;
-import org.apache.tinkerpop.gremlin.structure.*;
+import org.apache.tinkerpop.gremlin.process.Path;
+import org.apache.tinkerpop.gremlin.process.Scope;
+import org.apache.tinkerpop.gremlin.process.T;
+import org.apache.tinkerpop.gremlin.process.Traversal;
+import org.apache.tinkerpop.gremlin.process.Traverser;
+import org.apache.tinkerpop.gremlin.structure.Direction;
+import org.apache.tinkerpop.gremlin.structure.Edge;
+import org.apache.tinkerpop.gremlin.structure.Element;
+import org.apache.tinkerpop.gremlin.structure.Property;
+import org.apache.tinkerpop.gremlin.structure.Vertex;
import java.util.Collection;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
-import java.util.function.*;
+import java.util.function.BiFunction;
+import java.util.function.BiPredicate;
+import java.util.function.BinaryOperator;
+import java.util.function.Consumer;
+import java.util.function.Function;
+import java.util.function.Predicate;
+import java.util.function.Supplier;
+import java.util.function.UnaryOperator;
/**
* @author Marko A. Rodriguez (http://markorodriguez.com)
@@ -196,6 +211,14 @@ public abstract interface ElementTraversal<A extends Element> {
return this.start().mean(scope);
}
+ public default <K, R> GraphTraversal<A, Map<K, R>> group() {
+ return this.start().group();
+ }
+
+ public default <B> GraphTraversal<A, Map<B, Long>> groupCount() {
+ return this.start().<B>groupCount();
+ }
+
///////////////////// FILTER STEPS /////////////////////
public default GraphTraversal<A, A> filter(final Predicate<Traverser<A>> predicate) {
@@ -380,26 +403,14 @@ public abstract interface ElementTraversal<A extends Element> {
return this.start().aggregate(sideEffectKey);
}
- public default GraphTraversal<A, A> aggregate() {
- return this.start().aggregate();
- }
-
public default GraphTraversal<A, A> group(final String sideEffectKey) {
return this.start().group(sideEffectKey);
}
- public default GraphTraversal<A, A> group() {
- return this.start().group();
- }
-
public default GraphTraversal<A, A> groupCount(final String sideEffectKey) {
return this.start().groupCount(sideEffectKey);
}
- public default <B> GraphTraversal<A, Map<B,Long>> groupCount() {
- return this.start().<B>groupCount();
- }
-
public default GraphTraversal<A, Vertex> addE(final Direction direction, final String edgeLabel, final String stepLabel, final Object... propertyKeyValues) {
return this.start().addE(direction, edgeLabel, stepLabel, propertyKeyValues);
}
@@ -440,10 +451,6 @@ public abstract interface ElementTraversal<A extends Element> {
return this.start().store(sideEffectKey);
}
- public default GraphTraversal<A, A> store() {
- return this.start().store();
- }
-
///////////////////// BRANCH STEPS /////////////////////
public default <M, E2> GraphTraversal<A, E2> branch(final Function<Traverser<A>, M> function) {
http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/blob/0d4f1d93/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/graph/traversal/GraphTraversal.java
----------------------------------------------------------------------
diff --git a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/graph/traversal/GraphTraversal.java b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/graph/traversal/GraphTraversal.java
index a0a8526..8faec59 100644
--- a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/graph/traversal/GraphTraversal.java
+++ b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/graph/traversal/GraphTraversal.java
@@ -57,6 +57,7 @@ import org.apache.tinkerpop.gremlin.process.graph.traversal.step.map.EdgeOtherVe
import org.apache.tinkerpop.gremlin.process.graph.traversal.step.map.EdgeVertexStep;
import org.apache.tinkerpop.gremlin.process.graph.traversal.step.map.FoldStep;
import org.apache.tinkerpop.gremlin.process.graph.traversal.step.map.GroupCountStep;
+import org.apache.tinkerpop.gremlin.process.graph.traversal.step.map.GroupStep;
import org.apache.tinkerpop.gremlin.process.graph.traversal.step.map.IdStep;
import org.apache.tinkerpop.gremlin.process.graph.traversal.step.map.KeyStep;
import org.apache.tinkerpop.gremlin.process.graph.traversal.step.map.LabelStep;
@@ -87,7 +88,7 @@ import org.apache.tinkerpop.gremlin.process.graph.traversal.step.map.match.Match
import org.apache.tinkerpop.gremlin.process.graph.traversal.step.sideEffect.AddEdgeStep;
import org.apache.tinkerpop.gremlin.process.graph.traversal.step.sideEffect.AggregateStep;
import org.apache.tinkerpop.gremlin.process.graph.traversal.step.sideEffect.GroupCountSideEffectStep;
-import org.apache.tinkerpop.gremlin.process.graph.traversal.step.sideEffect.GroupStep;
+import org.apache.tinkerpop.gremlin.process.graph.traversal.step.sideEffect.GroupSideEffectStep;
import org.apache.tinkerpop.gremlin.process.graph.traversal.step.sideEffect.IdentityStep;
import org.apache.tinkerpop.gremlin.process.graph.traversal.step.sideEffect.InjectStep;
import org.apache.tinkerpop.gremlin.process.graph.traversal.step.sideEffect.LambdaSideEffectStep;
@@ -355,6 +356,14 @@ public interface GraphTraversal<S, E> extends Traversal<S, E> {
return this.asAdmin().addStep(scope.equals(Scope.global) ? new MeanGlobalStep<>(this.asAdmin()) : new MeanLocalStep<>(this.asAdmin()));
}
+ public default <K, R> GraphTraversal<S, Map<K, R>> group() {
+ return this.asAdmin().addStep(new GroupStep<>(this.asAdmin()));
+ }
+
+ public default <E2> GraphTraversal<S, Map<E2, Long>> groupCount() {
+ return this.asAdmin().addStep(new GroupCountStep<>(this.asAdmin()));
+ }
+
///////////////////// FILTER STEPS /////////////////////
public default GraphTraversal<S, E> filter(final Predicate<Traverser<E>> predicate) {
@@ -547,26 +556,14 @@ public interface GraphTraversal<S, E> extends Traversal<S, E> {
return this.asAdmin().addStep(new AggregateStep<>(this.asAdmin(), sideEffectKey));
}
- public default GraphTraversal<S, E> aggregate() {
- return this.aggregate(null);
- }
-
public default GraphTraversal<S, E> group(final String sideEffectKey) {
- return this.asAdmin().addStep(new GroupStep<>(this.asAdmin(), sideEffectKey));
- }
-
- public default GraphTraversal<S, E> group() {
- return this.group(null);
+ return this.asAdmin().addStep(new GroupSideEffectStep<>(this.asAdmin(), sideEffectKey));
}
public default GraphTraversal<S, E> groupCount(final String sideEffectKey) {
return this.asAdmin().addStep(new GroupCountSideEffectStep<>(this.asAdmin(), sideEffectKey));
}
- public default <E2> GraphTraversal<S, Map<E2, Long>> groupCount() {
- return this.asAdmin().addStep(new GroupCountStep<>(this.asAdmin()));
- }
-
public default GraphTraversal<S, Vertex> addE(final Direction direction, final String edgeLabel, final String stepLabel, final Object... propertyKeyValues) {
return this.asAdmin().addStep(new AddEdgeStep(this.asAdmin(), direction, edgeLabel, stepLabel, propertyKeyValues));
}
@@ -607,10 +604,6 @@ public interface GraphTraversal<S, E> extends Traversal<S, E> {
return this.asAdmin().addStep(new StoreStep<>(this.asAdmin(), sideEffectKey));
}
- public default GraphTraversal<S, E> store() {
- return this.store(null);
- }
-
public default GraphTraversal<S, E> profile() {
return this.asAdmin().addStep(new ProfileStep<>(this.asAdmin()));
}
http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/blob/0d4f1d93/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/graph/traversal/__.java
----------------------------------------------------------------------
diff --git a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/graph/traversal/__.java b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/graph/traversal/__.java
index ed9156a..18e0009 100644
--- a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/graph/traversal/__.java
+++ b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/graph/traversal/__.java
@@ -246,6 +246,14 @@ public class __ {
return __.<A>start().mean(scope);
}
+ public static <A, K, R> GraphTraversal<A, Map<K, R>> group() {
+ return __.<A>start().group();
+ }
+
+ public static <A, B> GraphTraversal<A, Map<B, Long>> groupCount() {
+ return __.<A>start().<B>groupCount();
+ }
+
///////////////////// FILTER STEPS /////////////////////
public static <A> GraphTraversal<A, A> filter(final Predicate<Traverser<A>> predicate) {
@@ -430,26 +438,14 @@ public class __ {
return __.<A>start().aggregate(sideEffectKey);
}
- public static <A> GraphTraversal<A, A> aggregate() {
- return __.<A>start().aggregate();
- }
-
public static <A> GraphTraversal<A, A> group(final String sideEffectKey) {
return __.<A>start().group(sideEffectKey);
}
- public static <A> GraphTraversal<A, A> group() {
- return __.<A>start().group();
- }
-
public static <A> GraphTraversal<A, A> groupCount(final String sideEffectKey) {
return __.<A>start().groupCount(sideEffectKey);
}
- public static <A,B> GraphTraversal<A, Map<B, Long>> groupCount() {
- return __.<A>start().<B>groupCount();
- }
-
public static <A> GraphTraversal<A, Vertex> addE(final Direction direction, final String edgeLabel, final String stepLabel, final Object... propertyKeyValues) {
return __.<A>start().addE(direction, edgeLabel, stepLabel, propertyKeyValues);
}
@@ -490,10 +486,6 @@ public class __ {
return __.<A>start().store(sideEffectKey);
}
- public static <A> GraphTraversal<A, A> store() {
- return __.<A>start().store();
- }
-
///////////////////// BRANCH STEPS /////////////////////
public static <A, M, E2> GraphTraversal<A, E2> branch(final Function<Traverser<A>, M> function) {
http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/blob/0d4f1d93/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/graph/traversal/step/map/GroupCountStep.java
----------------------------------------------------------------------
diff --git a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/graph/traversal/step/map/GroupCountStep.java b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/graph/traversal/step/map/GroupCountStep.java
index 8696191..c289b44 100644
--- a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/graph/traversal/step/map/GroupCountStep.java
+++ b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/graph/traversal/step/map/GroupCountStep.java
@@ -47,7 +47,7 @@ import java.util.function.BiFunction;
/**
* @author Marko A. Rodriguez (http://markorodriguez.com)
*/
-public class GroupCountStep<S, E> extends ReducingBarrierStep<S, Map<E, Long>> implements MapReducer, TraversalParent {
+public final class GroupCountStep<S, E> extends ReducingBarrierStep<S, Map<E, Long>> implements MapReducer, TraversalParent {
private Traversal.Admin<S, E> groupTraversal = new IdentityTraversal<>();
http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/blob/0d4f1d93/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/graph/traversal/step/map/GroupStep.java
----------------------------------------------------------------------
diff --git a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/graph/traversal/step/map/GroupStep.java b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/graph/traversal/step/map/GroupStep.java
new file mode 100644
index 0000000..6df4828
--- /dev/null
+++ b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/graph/traversal/step/map/GroupStep.java
@@ -0,0 +1,243 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.tinkerpop.gremlin.process.graph.traversal.step.map;
+
+import org.apache.commons.configuration.Configuration;
+import org.apache.tinkerpop.gremlin.process.Step;
+import org.apache.tinkerpop.gremlin.process.Traversal;
+import org.apache.tinkerpop.gremlin.process.Traverser;
+import org.apache.tinkerpop.gremlin.process.computer.KeyValue;
+import org.apache.tinkerpop.gremlin.process.computer.MapReduce;
+import org.apache.tinkerpop.gremlin.process.computer.traversal.TraversalVertexProgram;
+import org.apache.tinkerpop.gremlin.process.graph.traversal.step.sideEffect.GroupSideEffectStep;
+import org.apache.tinkerpop.gremlin.process.graph.traversal.step.util.ReducingBarrierStep;
+import org.apache.tinkerpop.gremlin.process.traversal.TraversalMatrix;
+import org.apache.tinkerpop.gremlin.process.traversal.lambda.IdentityTraversal;
+import org.apache.tinkerpop.gremlin.process.traversal.step.MapReducer;
+import org.apache.tinkerpop.gremlin.process.traversal.step.TraversalParent;
+import org.apache.tinkerpop.gremlin.process.traversal.util.TraversalHelper;
+import org.apache.tinkerpop.gremlin.process.traversal.util.TraversalUtil;
+import org.apache.tinkerpop.gremlin.process.traverser.TraverserRequirement;
+import org.apache.tinkerpop.gremlin.process.util.BulkSet;
+import org.apache.tinkerpop.gremlin.process.util.TraverserSet;
+import org.apache.tinkerpop.gremlin.structure.Vertex;
+import org.apache.tinkerpop.gremlin.structure.util.StringFactory;
+
+import java.io.Serializable;
+import java.util.Arrays;
+import java.util.Collection;
+import java.util.HashMap;
+import java.util.Iterator;
+import java.util.List;
+import java.util.Map;
+import java.util.Set;
+import java.util.function.BiFunction;
+
+/**
+ * @author Marko A. Rodriguez (http://markorodriguez.com)
+ */
+public final class GroupStep<S, K, V, R> extends ReducingBarrierStep<S, Map<K, R>> implements MapReducer, TraversalParent {
+
+ private char state = 'k';
+
+ private Traversal.Admin<S, K> keyTraversal = new IdentityTraversal<>();
+ private Traversal.Admin<S, V> valueTraversal = new IdentityTraversal<>();
+ private Traversal.Admin<Collection<V>, R> reduceTraversal = new IdentityTraversal<>();
+
+ public GroupStep(final Traversal.Admin traversal) {
+ super(traversal);
+ this.setSeedSupplier(() -> (Map) new GroupMap());
+ this.setBiFunction((BiFunction) new GroupReducingBiFunction());
+ }
+
+ @Override
+ public <A, B> List<Traversal.Admin<A, B>> getLocalChildren() {
+ return null == this.reduceTraversal ? (List) Arrays.asList(this.keyTraversal, this.valueTraversal) : (List) Arrays.asList(this.keyTraversal, this.valueTraversal, this.reduceTraversal);
+ }
+
+ public Traversal.Admin<Collection<V>, R> getReduceTraversal() {
+ return this.reduceTraversal;
+ }
+
+ @Override
+ public void addLocalChild(final Traversal.Admin<?, ?> kvrTraversal) {
+ if ('k' == this.state) {
+ this.keyTraversal = this.integrateChild(kvrTraversal);
+ this.state = 'v';
+ } else if ('v' == this.state) {
+ this.valueTraversal = this.integrateChild(kvrTraversal);
+ this.state = 'r';
+ } else if ('r' == this.state) {
+ this.reduceTraversal = this.integrateChild(kvrTraversal);
+ this.state = 'x';
+ } else {
+ throw new IllegalStateException("The key, value, and reduce functions for group()-step have already been set");
+ }
+ }
+
+ @Override
+ public Set<TraverserRequirement> getRequirements() {
+ return this.getSelfAndChildRequirements(TraverserRequirement.SIDE_EFFECTS, TraverserRequirement.BULK);
+ }
+
+ @Override
+ public GroupStep<S, K, V, R> clone() throws CloneNotSupportedException {
+ final GroupStep<S, K, V, R> clone = (GroupStep<S, K, V, R>) super.clone();
+ clone.keyTraversal = clone.integrateChild(this.keyTraversal.clone());
+ clone.valueTraversal = clone.integrateChild(this.valueTraversal.clone());
+ if (null != this.reduceTraversal)
+ clone.reduceTraversal = clone.integrateChild(this.reduceTraversal.clone());
+ return clone;
+ }
+
+ @Override
+ public MapReduce<K, Collection<V>, K, R, Map<K, R>> getMapReduce() {
+ return new GroupReducingMapReduce<>(this);
+ }
+
+ @Override
+ public Traverser<Map<K, R>> processNextStart() {
+ if (this.byPass) {
+ final Traverser.Admin<S> traverser = this.starts.next();
+ final Object[] kvPair = new Object[]{TraversalUtil.apply(traverser, (Traversal.Admin<S, Map>) this.keyTraversal), TraversalUtil.apply(traverser, (Traversal.Admin<S, Map>) this.valueTraversal)};
+ return traverser.asAdmin().split(kvPair, (Step) this);
+ } else {
+ return super.processNextStart();
+ }
+ }
+
+ ///////////
+
+ private class GroupReducingBiFunction implements BiFunction<Map<K, Collection<V>>, Traverser.Admin<S>, Map<K, Collection<V>>>, Serializable {
+
+ private GroupReducingBiFunction() {
+
+ }
+
+ @Override
+ public Map<K, Collection<V>> apply(final Map<K, Collection<V>> mutatingSeed, final Traverser.Admin<S> traverser) {
+ this.doGroup(traverser, mutatingSeed, keyTraversal, valueTraversal);
+ return mutatingSeed;
+ }
+
+ private void doGroup(final Traverser.Admin<S> traverser, final Map<K, Collection<V>> groupMap, final Traversal.Admin<S, K> keyTraversal, final Traversal.Admin<S, V> valueTraversal) {
+ final K key = TraversalUtil.apply(traverser, keyTraversal);
+ final V value = TraversalUtil.apply(traverser, valueTraversal);
+ Collection<V> values = groupMap.get(key);
+ if (null == values) {
+ values = new BulkSet<>();
+ groupMap.put(key, values);
+ }
+ TraversalHelper.addToCollectionUnrollIterator(values, value, traverser.bulk());
+ }
+ }
+
+ //////////
+
+ private class GroupMap extends HashMap<K, Collection<V>> implements FinalGet<Map<K, R>> {
+
+ @Override
+ public Map<K, R> getFinal() {
+ final Map<K, R> reduceMap = new HashMap<>();
+ this.forEach((k, vv) -> reduceMap.put(k, TraversalUtil.apply(vv, reduceTraversal)));
+ return reduceMap;
+ }
+ }
+
+ ///////////
+
+ public static final class GroupReducingMapReduce<K, V, R> implements MapReduce<K, Collection<V>, K, R, Map<K, R>> {
+
+ public static final String GROUP_BY_STEP_STEP_ID = "gremlin.groupStep.stepId";
+
+ private String groupStepId;
+ private Traversal.Admin<Collection<V>, R> reduceTraversal;
+
+ private GroupReducingMapReduce() {
+
+ }
+
+ public GroupReducingMapReduce(final GroupStep step) {
+ this.groupStepId = step.getId();
+ this.reduceTraversal = step.getReduceTraversal();
+ }
+
+ @Override
+ public void storeState(final Configuration configuration) {
+ MapReduce.super.storeState(configuration);
+ configuration.setProperty(GROUP_BY_STEP_STEP_ID, this.groupStepId);
+ }
+
+ @Override
+ public void loadState(final Configuration configuration) {
+ this.groupStepId = configuration.getString(GROUP_BY_STEP_STEP_ID);
+ final Traversal.Admin<?, ?> traversal = TraversalVertexProgram.getTraversalSupplier(configuration).get();
+ if (!traversal.isLocked())
+ traversal.applyStrategies(); // TODO: this is a scary error prone requirement, but only a problem for GroupStep
+ final GroupSideEffectStep groupSideEffectStep = new TraversalMatrix<>(traversal).getStepById(this.groupStepId);
+ this.reduceTraversal = groupSideEffectStep.getReduceTraversal();
+ }
+
+ @Override
+ public boolean doStage(final Stage stage) {
+ return !stage.equals(Stage.COMBINE);
+ }
+
+ @Override
+ public void map(final Vertex vertex, final MapEmitter<K, Collection<V>> emitter) {
+ vertex.<TraverserSet<Object[]>>property(TraversalVertexProgram.HALTED_TRAVERSERS).ifPresent(traverserSet -> traverserSet.forEach(traverser -> {
+ final Object[] objects = traverser.get();
+ emitter.emit((K) objects[0], objects[1] instanceof Collection ? (Collection<V>) objects[1] : Arrays.asList((V) objects[1]));
+ }));
+ }
+
+ @Override
+ public void reduce(final K key, final Iterator<Collection<V>> values, final ReduceEmitter<K, R> emitter) {
+ final Set<V> set = new BulkSet<>();
+ values.forEachRemaining(set::addAll);
+ emitter.emit(key, null == this.reduceTraversal ? (R) set : TraversalUtil.apply(set, this.reduceTraversal));
+ }
+
+ @Override
+ public Map<K, R> generateFinalResult(final Iterator<KeyValue<K, R>> keyValues) {
+ final Map<K, R> map = new HashMap<>();
+ keyValues.forEachRemaining(keyValue -> map.put(keyValue.getKey(), keyValue.getValue()));
+ return map;
+ }
+
+ @Override
+ public String getMemoryKey() {
+ return REDUCING;
+ }
+
+ @Override
+ public GroupReducingMapReduce<K, V, R> clone() throws CloneNotSupportedException {
+ final GroupReducingMapReduce<K, V, R> clone = (GroupReducingMapReduce<K, V, R>) super.clone();
+ if (null != clone.reduceTraversal)
+ clone.reduceTraversal = this.reduceTraversal.clone();
+ return clone;
+ }
+
+ @Override
+ public String toString() {
+ return StringFactory.mapReduceString(this, this.getMemoryKey());
+ }
+ }
+
+}
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/blob/0d4f1d93/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/graph/traversal/step/sideEffect/AggregateStep.java
----------------------------------------------------------------------
diff --git a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/graph/traversal/step/sideEffect/AggregateStep.java b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/graph/traversal/step/sideEffect/AggregateStep.java
index 51bc77c..5d7bc80 100644
--- a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/graph/traversal/step/sideEffect/AggregateStep.java
+++ b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/graph/traversal/step/sideEffect/AggregateStep.java
@@ -26,7 +26,6 @@ import org.apache.tinkerpop.gremlin.process.graph.traversal.step.util.Collecting
import org.apache.tinkerpop.gremlin.process.traversal.lambda.IdentityTraversal;
import org.apache.tinkerpop.gremlin.process.traversal.step.MapReducer;
import org.apache.tinkerpop.gremlin.process.traversal.step.Reversible;
-import org.apache.tinkerpop.gremlin.process.traversal.step.SideEffectRegistrar;
import org.apache.tinkerpop.gremlin.process.traversal.step.TraversalParent;
import org.apache.tinkerpop.gremlin.process.traversal.util.TraversalHelper;
import org.apache.tinkerpop.gremlin.process.traversal.util.TraversalUtil;
@@ -42,7 +41,7 @@ import java.util.Set;
/**
* @author Marko A. Rodriguez (http://markorodriguez.com)
*/
-public final class AggregateStep<S> extends CollectingBarrierStep<S> implements SideEffectRegistrar, SideEffectCapable, Reversible, TraversalParent, MapReducer<MapReduce.NullObject, Object, MapReduce.NullObject, Object, Collection> {
+public final class AggregateStep<S> extends CollectingBarrierStep<S> implements SideEffectCapable, Reversible, TraversalParent, MapReducer<MapReduce.NullObject, Object, MapReduce.NullObject, Object, Collection> {
private Traversal.Admin<S, Object> aggregateTraversal = new IdentityTraversal<>();
private String sideEffectKey;
@@ -50,11 +49,6 @@ public final class AggregateStep<S> extends CollectingBarrierStep<S> implements
public AggregateStep(final Traversal.Admin traversal, final String sideEffectKey) {
super(traversal);
this.sideEffectKey = sideEffectKey;
- }
-
- @Override
- public void registerSideEffects() {
- if (null == this.sideEffectKey) this.sideEffectKey = this.getId();
this.getTraversal().asAdmin().getSideEffects().registerSupplierIfAbsent(this.sideEffectKey, BulkSetSupplier.instance());
}
http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/blob/0d4f1d93/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/graph/traversal/step/sideEffect/GroupSideEffectStep.java
----------------------------------------------------------------------
diff --git a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/graph/traversal/step/sideEffect/GroupSideEffectStep.java b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/graph/traversal/step/sideEffect/GroupSideEffectStep.java
new file mode 100644
index 0000000..d9b9a26
--- /dev/null
+++ b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/graph/traversal/step/sideEffect/GroupSideEffectStep.java
@@ -0,0 +1,244 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.tinkerpop.gremlin.process.graph.traversal.step.sideEffect;
+
+import org.apache.commons.configuration.Configuration;
+import org.apache.tinkerpop.gremlin.process.Traversal;
+import org.apache.tinkerpop.gremlin.process.TraversalEngine;
+import org.apache.tinkerpop.gremlin.process.Traverser;
+import org.apache.tinkerpop.gremlin.process.computer.KeyValue;
+import org.apache.tinkerpop.gremlin.process.computer.MapReduce;
+import org.apache.tinkerpop.gremlin.process.computer.traversal.TraversalVertexProgram;
+import org.apache.tinkerpop.gremlin.process.computer.traversal.VertexTraversalSideEffects;
+import org.apache.tinkerpop.gremlin.process.graph.traversal.step.SideEffectCapable;
+import org.apache.tinkerpop.gremlin.process.traversal.TraversalMatrix;
+import org.apache.tinkerpop.gremlin.process.traversal.lambda.IdentityTraversal;
+import org.apache.tinkerpop.gremlin.process.traversal.step.EngineDependent;
+import org.apache.tinkerpop.gremlin.process.traversal.step.MapReducer;
+import org.apache.tinkerpop.gremlin.process.traversal.step.Reversible;
+import org.apache.tinkerpop.gremlin.process.traversal.step.TraversalParent;
+import org.apache.tinkerpop.gremlin.process.traversal.util.TraversalHelper;
+import org.apache.tinkerpop.gremlin.process.traversal.util.TraversalUtil;
+import org.apache.tinkerpop.gremlin.process.traverser.TraverserRequirement;
+import org.apache.tinkerpop.gremlin.process.util.BulkSet;
+import org.apache.tinkerpop.gremlin.structure.Vertex;
+import org.apache.tinkerpop.gremlin.structure.util.StringFactory;
+import org.apache.tinkerpop.gremlin.util.function.HashMapSupplier;
+
+import java.util.Arrays;
+import java.util.Collection;
+import java.util.Collections;
+import java.util.HashMap;
+import java.util.Iterator;
+import java.util.List;
+import java.util.Map;
+import java.util.Set;
+import java.util.function.Supplier;
+
+/**
+ * @author Marko A. Rodriguez (http://markorodriguez.com)
+ */
+public final class GroupSideEffectStep<S, K, V, R> extends SideEffectStep<S> implements SideEffectCapable, TraversalParent, Reversible, EngineDependent, MapReducer<K, Collection<V>, K, R, Map<K, R>> {
+
+ private char state = 'k';
+ private Traversal.Admin<S, K> keyTraversal = new IdentityTraversal<>();
+ private Traversal.Admin<S, V> valueTraversal = new IdentityTraversal<>();
+ private Traversal.Admin<Collection<V>, R> reduceTraversal = null;
+ private String sideEffectKey;
+ private boolean onGraphComputer = false;
+ private Map<K, Collection<V>> tempGroupByMap;
+
+ public GroupSideEffectStep(final Traversal.Admin traversal, final String sideEffectKey) {
+ super(traversal);
+ this.sideEffectKey = sideEffectKey;
+ this.traversal.asAdmin().getSideEffects().registerSupplierIfAbsent(this.sideEffectKey, HashMapSupplier.instance());
+ }
+
+ @Override
+ protected void sideEffect(final Traverser.Admin<S> traverser) {
+ final Map<K, Collection<V>> groupByMap = null == this.tempGroupByMap ? traverser.sideEffects(this.sideEffectKey) : this.tempGroupByMap; // for nested traversals and not !starts.hasNext()
+ doGroup(traverser.asAdmin(), groupByMap, this.keyTraversal, this.valueTraversal);
+ if (!this.onGraphComputer && null != this.reduceTraversal && !this.starts.hasNext()) {
+ this.tempGroupByMap = groupByMap;
+ final Map<K, R> reduceMap = new HashMap<>();
+ doReduce(groupByMap, reduceMap, this.reduceTraversal);
+ traverser.sideEffects(this.sideEffectKey, reduceMap);
+ }
+ }
+
+ @Override
+ public String getSideEffectKey() {
+ return this.sideEffectKey;
+ }
+
+ private static <S, K, V> void doGroup(final Traverser.Admin<S> traverser, final Map<K, Collection<V>> groupMap, final Traversal.Admin<S, K> keyTraversal, final Traversal.Admin<S, V> valueTraversal) {
+ final K key = TraversalUtil.apply(traverser, keyTraversal);
+ final V value = TraversalUtil.apply(traverser, valueTraversal);
+ Collection<V> values = groupMap.get(key);
+ if (null == values) {
+ values = new BulkSet<>();
+ groupMap.put(key, values);
+ }
+ TraversalHelper.addToCollectionUnrollIterator(values, value, traverser.bulk());
+ }
+
+ private static <K, V, R> void doReduce(final Map<K, Collection<V>> groupMap, final Map<K, R> reduceMap, final Traversal.Admin<Collection<V>, R> reduceTraversal) {
+ groupMap.forEach((k, vv) -> reduceMap.put(k, TraversalUtil.apply(vv, reduceTraversal)));
+ }
+
+ @Override
+ public void onEngine(final TraversalEngine traversalEngine) {
+ this.onGraphComputer = traversalEngine.isComputer();
+ }
+
+ @Override
+ public MapReduce<K, Collection<V>, K, R, Map<K, R>> getMapReduce() {
+ return new GroupSideEffectMapReduce<>(this);
+ }
+
+ @Override
+ public String toString() {
+ return TraversalHelper.makeStepString(this, this.sideEffectKey, this.keyTraversal, this.valueTraversal, this.reduceTraversal);
+ }
+
+ @Override
+ public <A, B> List<Traversal.Admin<A, B>> getLocalChildren() {
+ return null == this.reduceTraversal ? (List) Arrays.asList(this.keyTraversal, this.valueTraversal) : (List) Arrays.asList(this.keyTraversal, this.valueTraversal, this.reduceTraversal);
+ }
+
+ public Traversal.Admin<Collection<V>, R> getReduceTraversal() {
+ return this.reduceTraversal;
+ }
+
+ @Override
+ public void addLocalChild(final Traversal.Admin<?, ?> kvrTraversal) {
+ if ('k' == this.state) {
+ this.keyTraversal = this.integrateChild(kvrTraversal);
+ this.state = 'v';
+ } else if ('v' == this.state) {
+ this.valueTraversal = this.integrateChild(kvrTraversal);
+ this.state = 'r';
+ } else if ('r' == this.state) {
+ this.reduceTraversal = this.integrateChild(kvrTraversal);
+ this.state = 'x';
+ } else {
+ throw new IllegalStateException("The key, value, and reduce functions for group()-step have already been set");
+ }
+ }
+
+ @Override
+ public Set<TraverserRequirement> getRequirements() {
+ return this.getSelfAndChildRequirements(TraverserRequirement.SIDE_EFFECTS, TraverserRequirement.BULK);
+ }
+
+ @Override
+ public GroupSideEffectStep<S, K, V, R> clone() throws CloneNotSupportedException {
+ final GroupSideEffectStep<S, K, V, R> clone = (GroupSideEffectStep<S, K, V, R>) super.clone();
+ clone.keyTraversal = clone.integrateChild(this.keyTraversal.clone());
+ clone.valueTraversal = clone.integrateChild(this.valueTraversal.clone());
+ if (null != this.reduceTraversal)
+ clone.reduceTraversal = clone.integrateChild(this.reduceTraversal.clone());
+ return clone;
+ }
+
+ ///////////
+
+ public static final class GroupSideEffectMapReduce<K, V, R> implements MapReduce<K, Collection<V>, K, R, Map<K, R>> {
+
+ public static final String GROUP_BY_STEP_SIDE_EFFECT_KEY = "gremlin.groupStep.sideEffectKey";
+ public static final String GROUP_BY_STEP_STEP_ID = "gremlin.groupStep.stepId";
+
+ private String sideEffectKey;
+ private String groupStepId;
+ private Traversal.Admin<Collection<V>, R> reduceTraversal;
+ private Supplier<Map<K, R>> mapSupplier;
+
+ private GroupSideEffectMapReduce() {
+
+ }
+
+ public GroupSideEffectMapReduce(final GroupSideEffectStep step) {
+ this.groupStepId = step.getId();
+ this.sideEffectKey = step.getSideEffectKey();
+ this.reduceTraversal = step.getReduceTraversal();
+ this.mapSupplier = step.getTraversal().asAdmin().getSideEffects().<Map<K, R>>getRegisteredSupplier(this.sideEffectKey).orElse(HashMap::new);
+ }
+
+ @Override
+ public void storeState(final Configuration configuration) {
+ MapReduce.super.storeState(configuration);
+ configuration.setProperty(GROUP_BY_STEP_SIDE_EFFECT_KEY, this.sideEffectKey);
+ configuration.setProperty(GROUP_BY_STEP_STEP_ID, this.groupStepId);
+ }
+
+ @Override
+ public void loadState(final Configuration configuration) {
+ this.sideEffectKey = configuration.getString(GROUP_BY_STEP_SIDE_EFFECT_KEY);
+ this.groupStepId = configuration.getString(GROUP_BY_STEP_STEP_ID);
+ final Traversal.Admin<?, ?> traversal = TraversalVertexProgram.getTraversalSupplier(configuration).get();
+ if (!traversal.isLocked())
+ traversal.applyStrategies(); // TODO: this is a scary error prone requirement, but only a problem for GroupStep
+ final GroupSideEffectStep groupSideEffectStep = new TraversalMatrix<>(traversal).getStepById(this.groupStepId);
+ this.reduceTraversal = groupSideEffectStep.getReduceTraversal();
+ this.mapSupplier = traversal.getSideEffects().<Map<K, R>>getRegisteredSupplier(this.sideEffectKey).orElse(HashMap::new);
+ }
+
+ @Override
+ public boolean doStage(final Stage stage) {
+ return !stage.equals(Stage.COMBINE);
+ }
+
+ @Override
+ public void map(final Vertex vertex, final MapEmitter<K, Collection<V>> emitter) {
+ VertexTraversalSideEffects.of(vertex).<Map<K, Collection<V>>>orElse(this.sideEffectKey, Collections.emptyMap()).forEach(emitter::emit);
+ }
+
+ @Override
+ public void reduce(final K key, final Iterator<Collection<V>> values, final ReduceEmitter<K, R> emitter) {
+ final Set<V> set = new BulkSet<>();
+ values.forEachRemaining(set::addAll);
+ emitter.emit(key, (null == this.reduceTraversal) ? (R) set : TraversalUtil.apply(set, this.reduceTraversal));
+ }
+
+ @Override
+ public Map<K, R> generateFinalResult(final Iterator<KeyValue<K, R>> keyValues) {
+ final Map<K, R> map = this.mapSupplier.get();
+ keyValues.forEachRemaining(keyValue -> map.put(keyValue.getKey(), keyValue.getValue()));
+ return map;
+ }
+
+ @Override
+ public String getMemoryKey() {
+ return this.sideEffectKey;
+ }
+
+ @Override
+ public GroupSideEffectMapReduce<K, V, R> clone() throws CloneNotSupportedException {
+ final GroupSideEffectMapReduce<K, V, R> clone = (GroupSideEffectMapReduce<K, V, R>) super.clone();
+ if (null != clone.reduceTraversal)
+ clone.reduceTraversal = this.reduceTraversal.clone();
+ return clone;
+ }
+
+ @Override
+ public String toString() {
+ return StringFactory.mapReduceString(this, this.getMemoryKey());
+ }
+ }
+}
http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/blob/0d4f1d93/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/graph/traversal/step/sideEffect/GroupStep.java
----------------------------------------------------------------------
diff --git a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/graph/traversal/step/sideEffect/GroupStep.java b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/graph/traversal/step/sideEffect/GroupStep.java
deleted file mode 100644
index 95c67c7..0000000
--- a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/graph/traversal/step/sideEffect/GroupStep.java
+++ /dev/null
@@ -1,156 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.tinkerpop.gremlin.process.graph.traversal.step.sideEffect;
-
-import org.apache.tinkerpop.gremlin.process.Traversal;
-import org.apache.tinkerpop.gremlin.process.TraversalEngine;
-import org.apache.tinkerpop.gremlin.process.Traverser;
-import org.apache.tinkerpop.gremlin.process.computer.MapReduce;
-import org.apache.tinkerpop.gremlin.process.graph.traversal.step.SideEffectCapable;
-import org.apache.tinkerpop.gremlin.process.graph.traversal.step.sideEffect.mapreduce.GroupMapReduce;
-import org.apache.tinkerpop.gremlin.process.traversal.lambda.IdentityTraversal;
-import org.apache.tinkerpop.gremlin.process.traversal.step.EngineDependent;
-import org.apache.tinkerpop.gremlin.process.traversal.step.MapReducer;
-import org.apache.tinkerpop.gremlin.process.traversal.step.Reversible;
-import org.apache.tinkerpop.gremlin.process.traversal.step.SideEffectRegistrar;
-import org.apache.tinkerpop.gremlin.process.traversal.step.TraversalParent;
-import org.apache.tinkerpop.gremlin.process.traversal.util.TraversalHelper;
-import org.apache.tinkerpop.gremlin.process.traversal.util.TraversalUtil;
-import org.apache.tinkerpop.gremlin.process.traverser.TraverserRequirement;
-import org.apache.tinkerpop.gremlin.process.util.BulkSet;
-import org.apache.tinkerpop.gremlin.util.function.HashMapSupplier;
-
-import java.util.Arrays;
-import java.util.Collection;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
-import java.util.Set;
-
-/**
- * @author Marko A. Rodriguez (http://markorodriguez.com)
- */
-public final class GroupStep<S, K, V, R> extends SideEffectStep<S> implements SideEffectCapable, SideEffectRegistrar, TraversalParent, Reversible, EngineDependent, MapReducer<Object, Collection, Object, Object, Map> {
-
- private char state = 'k';
- private Traversal.Admin<S, K> keyTraversal = new IdentityTraversal<>();
- private Traversal.Admin<S, V> valueTraversal = new IdentityTraversal<>();
- private Traversal.Admin<Collection<V>, R> reduceTraversal = null;
- private String sideEffectKey;
- private boolean onGraphComputer = false;
- private Map<K, Collection<V>> tempGroupByMap;
-
- public GroupStep(final Traversal.Admin traversal, final String sideEffectKey) {
- super(traversal);
- this.sideEffectKey = sideEffectKey;
- }
-
- @Override
- protected void sideEffect(final Traverser.Admin<S> traverser) {
- final Map<K, Collection<V>> groupByMap = null == this.tempGroupByMap ? traverser.sideEffects(this.sideEffectKey) : this.tempGroupByMap; // for nested traversals and not !starts.hasNext()
- doGroup(traverser.asAdmin(), groupByMap, this.keyTraversal, this.valueTraversal);
- if (!this.onGraphComputer && null != this.reduceTraversal && !this.starts.hasNext()) {
- this.tempGroupByMap = groupByMap;
- final Map<K, R> reduceMap = new HashMap<>();
- doReduce(groupByMap, reduceMap, this.reduceTraversal);
- traverser.sideEffects(this.sideEffectKey, reduceMap);
- }
- }
-
- @Override
- public String getSideEffectKey() {
- return this.sideEffectKey;
- }
-
- @Override
- public void registerSideEffects() {
- if (this.sideEffectKey == null) this.sideEffectKey = this.getId();
- this.traversal.asAdmin().getSideEffects().registerSupplierIfAbsent(this.sideEffectKey, HashMapSupplier.instance());
- }
-
- private static <S, K, V> void doGroup(final Traverser.Admin<S> traverser, final Map<K, Collection<V>> groupMap, final Traversal.Admin<S, K> keyTraversal, final Traversal.Admin<S, V> valueTraversal) {
- final K key = TraversalUtil.apply(traverser, keyTraversal);
- final V value = TraversalUtil.apply(traverser, valueTraversal);
- Collection<V> values = groupMap.get(key);
- if (null == values) {
- values = new BulkSet<>();
- groupMap.put(key, values);
- }
- TraversalHelper.addToCollectionUnrollIterator(values, value, traverser.bulk());
- }
-
- private static <K, V, R> void doReduce(final Map<K, Collection<V>> groupMap, final Map<K, R> reduceMap, final Traversal.Admin<Collection<V>, R> reduceTraversal) {
- groupMap.forEach((k, vv) -> reduceMap.put(k, TraversalUtil.apply(vv, reduceTraversal)));
- }
-
- @Override
- public void onEngine(final TraversalEngine traversalEngine) {
- this.onGraphComputer = traversalEngine.isComputer();
- }
-
- @Override
- public MapReduce<Object, Collection, Object, Object, Map> getMapReduce() {
- return new GroupMapReduce(this);
- }
-
- @Override
- public String toString() {
- return TraversalHelper.makeStepString(this, this.sideEffectKey, this.keyTraversal, this.valueTraversal, this.reduceTraversal);
- }
-
- @Override
- public <A, B> List<Traversal.Admin<A, B>> getLocalChildren() {
- return null == this.reduceTraversal ? (List) Arrays.asList(this.keyTraversal, this.valueTraversal) : (List) Arrays.asList(this.keyTraversal, this.valueTraversal, this.reduceTraversal);
- }
-
- public Traversal.Admin<Collection<V>, R> getReduceTraversal() {
- return this.reduceTraversal;
- }
-
- @Override
- public void addLocalChild(final Traversal.Admin<?, ?> kvrTraversal) {
- if ('k' == this.state) {
- this.keyTraversal = this.integrateChild(kvrTraversal);
- this.state = 'v';
- } else if ('v' == this.state) {
- this.valueTraversal = this.integrateChild(kvrTraversal);
- this.state = 'r';
- } else if ('r' == this.state) {
- this.reduceTraversal = this.integrateChild(kvrTraversal);
- this.state = 'x';
- } else {
- throw new IllegalStateException("The key, value, and reduce functions for group()-step have already been set");
- }
- }
-
- @Override
- public Set<TraverserRequirement> getRequirements() {
- return this.getSelfAndChildRequirements(TraverserRequirement.SIDE_EFFECTS, TraverserRequirement.BULK);
- }
-
- @Override
- public GroupStep<S, K, V, R> clone() throws CloneNotSupportedException {
- final GroupStep<S, K, V, R> clone = (GroupStep<S, K, V, R>) super.clone();
- clone.keyTraversal = clone.integrateChild(this.keyTraversal.clone());
- clone.valueTraversal = clone.integrateChild(this.valueTraversal.clone());
- if (null != this.reduceTraversal)
- clone.reduceTraversal = clone.integrateChild(this.reduceTraversal.clone());
- return clone;
- }
-}
http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/blob/0d4f1d93/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/graph/traversal/step/sideEffect/StoreStep.java
----------------------------------------------------------------------
diff --git a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/graph/traversal/step/sideEffect/StoreStep.java b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/graph/traversal/step/sideEffect/StoreStep.java
index d97186f..c89df07 100644
--- a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/graph/traversal/step/sideEffect/StoreStep.java
+++ b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/graph/traversal/step/sideEffect/StoreStep.java
@@ -26,7 +26,6 @@ import org.apache.tinkerpop.gremlin.process.graph.traversal.step.sideEffect.mapr
import org.apache.tinkerpop.gremlin.process.traversal.lambda.IdentityTraversal;
import org.apache.tinkerpop.gremlin.process.traversal.step.MapReducer;
import org.apache.tinkerpop.gremlin.process.traversal.step.Reversible;
-import org.apache.tinkerpop.gremlin.process.traversal.step.SideEffectRegistrar;
import org.apache.tinkerpop.gremlin.process.traversal.step.TraversalParent;
import org.apache.tinkerpop.gremlin.process.traversal.util.TraversalHelper;
import org.apache.tinkerpop.gremlin.process.traversal.util.TraversalUtil;
@@ -41,7 +40,7 @@ import java.util.Set;
/**
* @author Marko A. Rodriguez (http://markorodriguez.com)
*/
-public final class StoreStep<S> extends SideEffectStep<S> implements SideEffectCapable, SideEffectRegistrar, Reversible, TraversalParent, MapReducer<MapReduce.NullObject, Object, MapReduce.NullObject, Object, Collection> {
+public final class StoreStep<S> extends SideEffectStep<S> implements SideEffectCapable, Reversible, TraversalParent, MapReducer<MapReduce.NullObject, Object, MapReduce.NullObject, Object, Collection> {
private Traversal.Admin<S, Object> storeTraversal = new IdentityTraversal<>();
private String sideEffectKey;
@@ -49,6 +48,7 @@ public final class StoreStep<S> extends SideEffectStep<S> implements SideEffectC
public StoreStep(final Traversal.Admin traversal, final String sideEffectKey) {
super(traversal);
this.sideEffectKey = sideEffectKey;
+ this.traversal.asAdmin().getSideEffects().registerSupplierIfAbsent(this.sideEffectKey, BulkSetSupplier.instance());
}
@Override
@@ -60,12 +60,6 @@ public final class StoreStep<S> extends SideEffectStep<S> implements SideEffectC
}
@Override
- public void registerSideEffects() {
- if (null == this.sideEffectKey) this.sideEffectKey = this.getId();
- this.traversal.asAdmin().getSideEffects().registerSupplierIfAbsent(this.sideEffectKey, BulkSetSupplier.instance());
- }
-
- @Override
public String getSideEffectKey() {
return this.sideEffectKey;
}
http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/blob/0d4f1d93/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/graph/traversal/step/sideEffect/mapreduce/GroupMapReduce.java
----------------------------------------------------------------------
diff --git a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/graph/traversal/step/sideEffect/mapreduce/GroupMapReduce.java b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/graph/traversal/step/sideEffect/mapreduce/GroupMapReduce.java
deleted file mode 100644
index a431d02..0000000
--- a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/graph/traversal/step/sideEffect/mapreduce/GroupMapReduce.java
+++ /dev/null
@@ -1,126 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.tinkerpop.gremlin.process.graph.traversal.step.sideEffect.mapreduce;
-
-import org.apache.commons.configuration.Configuration;
-import org.apache.tinkerpop.gremlin.process.Traversal;
-import org.apache.tinkerpop.gremlin.process.computer.KeyValue;
-import org.apache.tinkerpop.gremlin.process.computer.MapReduce;
-import org.apache.tinkerpop.gremlin.process.computer.traversal.TraversalVertexProgram;
-import org.apache.tinkerpop.gremlin.process.computer.traversal.VertexTraversalSideEffects;
-import org.apache.tinkerpop.gremlin.process.graph.traversal.step.sideEffect.GroupStep;
-import org.apache.tinkerpop.gremlin.process.traversal.TraversalMatrix;
-import org.apache.tinkerpop.gremlin.process.traversal.util.TraversalUtil;
-import org.apache.tinkerpop.gremlin.process.util.BulkSet;
-import org.apache.tinkerpop.gremlin.structure.Vertex;
-import org.apache.tinkerpop.gremlin.structure.util.StringFactory;
-
-import java.util.Collection;
-import java.util.Collections;
-import java.util.HashMap;
-import java.util.Iterator;
-import java.util.Map;
-import java.util.Set;
-import java.util.function.Supplier;
-
-/**
- * @author Marko A. Rodriguez (http://markorodriguez.com)
- */
-public final class GroupMapReduce implements MapReduce<Object, Collection, Object, Object, Map> {
-
- public static final String GROUP_BY_STEP_SIDE_EFFECT_KEY = "gremlin.groupStep.sideEffectKey";
- public static final String GROUP_BY_STEP_STEP_ID = "gremlin.groupStep.stepId";
-
- private String sideEffectKey;
- private String groupStepId;
- private Traversal.Admin reduceFunction;
- private Supplier<Map> mapSupplier;
-
- private GroupMapReduce() {
-
- }
-
- public GroupMapReduce(final GroupStep step) {
- this.groupStepId = step.getId();
- this.sideEffectKey = step.getSideEffectKey();
- this.reduceFunction = step.getReduceTraversal();
- this.mapSupplier = step.getTraversal().asAdmin().getSideEffects().<Map>getRegisteredSupplier(this.sideEffectKey).orElse(HashMap::new);
- }
-
- @Override
- public void storeState(final Configuration configuration) {
- MapReduce.super.storeState(configuration);
- configuration.setProperty(GROUP_BY_STEP_SIDE_EFFECT_KEY, this.sideEffectKey);
- configuration.setProperty(GROUP_BY_STEP_STEP_ID, this.groupStepId);
- }
-
- @Override
- public void loadState(final Configuration configuration) {
- this.sideEffectKey = configuration.getString(GROUP_BY_STEP_SIDE_EFFECT_KEY);
- this.groupStepId = configuration.getString(GROUP_BY_STEP_STEP_ID);
- final Traversal.Admin<?, ?> traversal = TraversalVertexProgram.getTraversalSupplier(configuration).get();
- if (!traversal.isLocked())
- traversal.applyStrategies(); // TODO: this is a scary error prone requirement, but only a problem for GroupStep
- final GroupStep groupStep = new TraversalMatrix<>(traversal).getStepById(this.groupStepId);
- this.reduceFunction = groupStep.getReduceTraversal();
- this.mapSupplier = traversal.getSideEffects().<Map>getRegisteredSupplier(this.sideEffectKey).orElse(HashMap::new);
- }
-
- @Override
- public boolean doStage(final Stage stage) {
- return !stage.equals(Stage.COMBINE);
- }
-
- @Override
- public void map(final Vertex vertex, final MapEmitter<Object, Collection> emitter) {
- VertexTraversalSideEffects.of(vertex).<Map<Object, Collection>>orElse(this.sideEffectKey, Collections.emptyMap()).forEach(emitter::emit);
- }
-
- @Override
- public void reduce(final Object key, final Iterator<Collection> values, final ReduceEmitter<Object, Object> emitter) {
- final Set set = new BulkSet<>();
- values.forEachRemaining(set::addAll);
- emitter.emit(key, (null == this.reduceFunction) ? set : TraversalUtil.apply(set, this.reduceFunction));
- }
-
- @Override
- public Map generateFinalResult(final Iterator<KeyValue<Object, Object>> keyValues) {
- final Map map = this.mapSupplier.get();
- keyValues.forEachRemaining(keyValue -> map.put(keyValue.getKey(), keyValue.getValue()));
- return map;
- }
-
- @Override
- public String getMemoryKey() {
- return this.sideEffectKey;
- }
-
- @Override
- public GroupMapReduce clone() throws CloneNotSupportedException {
- final GroupMapReduce clone = (GroupMapReduce) super.clone();
- if (null != clone.reduceFunction)
- clone.reduceFunction = this.reduceFunction.clone();
- return clone;
- }
-
- @Override
- public String toString() {
- return StringFactory.mapReduceString(this, this.getMemoryKey());
- }
-}
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/blob/0d4f1d93/gremlin-groovy-test/src/main/groovy/org/apache/tinkerpop/gremlin/process/graph/traversal/step/filter/GroovyDedupTest.groovy
----------------------------------------------------------------------
diff --git a/gremlin-groovy-test/src/main/groovy/org/apache/tinkerpop/gremlin/process/graph/traversal/step/filter/GroovyDedupTest.groovy b/gremlin-groovy-test/src/main/groovy/org/apache/tinkerpop/gremlin/process/graph/traversal/step/filter/GroovyDedupTest.groovy
index 33a1f41..51c1c27 100644
--- a/gremlin-groovy-test/src/main/groovy/org/apache/tinkerpop/gremlin/process/graph/traversal/step/filter/GroovyDedupTest.groovy
+++ b/gremlin-groovy-test/src/main/groovy/org/apache/tinkerpop/gremlin/process/graph/traversal/step/filter/GroovyDedupTest.groovy
@@ -18,14 +18,7 @@
*/
package org.apache.tinkerpop.gremlin.process.graph.traversal.step.filter
-import org.apache.tinkerpop.gremlin.process.AbstractGremlinProcessTest
-import org.apache.tinkerpop.gremlin.process.ComputerTestHelper
-import org.apache.tinkerpop.gremlin.process.Scope
-import org.apache.tinkerpop.gremlin.process.T
-import org.apache.tinkerpop.gremlin.process.Traversal
-import org.apache.tinkerpop.gremlin.process.TraversalEngine
-import org.apache.tinkerpop.gremlin.process.UseEngine
-import org.apache.tinkerpop.gremlin.process.traversal.engine.StandardTraversalEngine
+import org.apache.tinkerpop.gremlin.process.*
import org.apache.tinkerpop.gremlin.structure.Vertex
import org.junit.Test
@@ -56,8 +49,8 @@ public abstract class GroovyDedupTest {
}
@Override
- Traversal<Vertex, Map<String, Set<Double>>> get_g_V_group_byXlabelX_byXbothE_valuesXweightX_foldX_byXdedupXlocalXX_cap() {
- g.V().group().by(T.label).by(bothE().values('weight').fold()).by(dedup(Scope.local)).cap()
+ Traversal<Vertex, Map<String, Set<Double>>> get_g_V_group_byXlabelX_byXbothE_valuesXweightX_foldX_byXdedupXlocalXX() {
+ g.V().group().by(T.label).by(bothE().values('weight').fold()).by(dedup(Scope.local))
}
}
@@ -82,8 +75,8 @@ public abstract class GroovyDedupTest {
}
@Override
- public Traversal<Vertex, Map<String, Set<Double>>> get_g_V_group_byXlabelX_byXbothE_valuesXweightX_foldX_byXdedupXlocalXX_cap() {
- ComputerTestHelper.compute("g.V().group().by(T.label).by(bothE().values('weight').fold()).by(dedup(Scope.local)).cap()", g);
+ public Traversal<Vertex, Map<String, Set<Double>>> get_g_V_group_byXlabelX_byXbothE_valuesXweightX_foldX_byXdedupXlocalXX() {
+ ComputerTestHelper.compute("g.V().group().by(T.label).by(bothE().values('weight').fold()).by(dedup(Scope.local))", g);
}
@Override
http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/blob/0d4f1d93/gremlin-groovy-test/src/main/groovy/org/apache/tinkerpop/gremlin/process/graph/traversal/step/filter/GroovySampleTest.groovy
----------------------------------------------------------------------
diff --git a/gremlin-groovy-test/src/main/groovy/org/apache/tinkerpop/gremlin/process/graph/traversal/step/filter/GroovySampleTest.groovy b/gremlin-groovy-test/src/main/groovy/org/apache/tinkerpop/gremlin/process/graph/traversal/step/filter/GroovySampleTest.groovy
index 21da6f2..dbbc4ae 100644
--- a/gremlin-groovy-test/src/main/groovy/org/apache/tinkerpop/gremlin/process/graph/traversal/step/filter/GroovySampleTest.groovy
+++ b/gremlin-groovy-test/src/main/groovy/org/apache/tinkerpop/gremlin/process/graph/traversal/step/filter/GroovySampleTest.groovy
@@ -59,12 +59,12 @@ public abstract class GroovySampleTest {
@Override
Traversal<Vertex, Map<String, Collection<Double>>> get_g_V_group_byXlabelX_byXbothE_valuesXweightX_foldX_byXsampleXlocal_2XX() {
- g.V().group().by(T.label).by(bothE().values('weight').fold()).by(sample(Scope.local, 2)).cap()
+ g.V().group().by(T.label).by(bothE().values('weight').fold()).by(sample(Scope.local, 2))
}
@Override
Traversal<Vertex, Map<String, Collection<Double>>> get_g_V_group_byXlabelX_byXbothE_valuesXweightX_foldX_byXsampleXlocal_5XX() {
- g.V().group().by(T.label).by(bothE().values('weight').fold()).by(sample(Scope.local, 5)).cap()
+ g.V().group().by(T.label).by(bothE().values('weight').fold()).by(sample(Scope.local, 5))
}
}
@@ -92,12 +92,12 @@ public abstract class GroovySampleTest {
@Override
Traversal<Vertex, Map<String, Collection<Double>>> get_g_V_group_byXlabelX_byXbothE_valuesXweightX_foldX_byXsampleXlocal_2XX() {
- ComputerTestHelper.compute("g.V().group().by(T.label).by(bothE().values('weight').fold()).by(sample(Scope.local, 2)).cap()", g)
+ ComputerTestHelper.compute("g.V().group().by(T.label).by(bothE().values('weight').fold()).by(sample(Scope.local, 2))", g)
}
@Override
Traversal<Vertex, Map<String, Collection<Double>>> get_g_V_group_byXlabelX_byXbothE_valuesXweightX_foldX_byXsampleXlocal_5XX() {
- ComputerTestHelper.compute("g.V().group().by(T.label).by(bothE().values('weight').fold()).by(sample(Scope.local, 5)).cap()", g)
+ ComputerTestHelper.compute("g.V().group().by(T.label).by(bothE().values('weight').fold()).by(sample(Scope.local, 5))", g)
}
@Override
http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/blob/0d4f1d93/gremlin-groovy-test/src/main/groovy/org/apache/tinkerpop/gremlin/process/graph/traversal/step/map/GroovyMaxTest.groovy
----------------------------------------------------------------------
diff --git a/gremlin-groovy-test/src/main/groovy/org/apache/tinkerpop/gremlin/process/graph/traversal/step/map/GroovyMaxTest.groovy b/gremlin-groovy-test/src/main/groovy/org/apache/tinkerpop/gremlin/process/graph/traversal/step/map/GroovyMaxTest.groovy
index e5beac1..b66c2f6 100644
--- a/gremlin-groovy-test/src/main/groovy/org/apache/tinkerpop/gremlin/process/graph/traversal/step/map/GroovyMaxTest.groovy
+++ b/gremlin-groovy-test/src/main/groovy/org/apache/tinkerpop/gremlin/process/graph/traversal/step/map/GroovyMaxTest.groovy
@@ -49,7 +49,7 @@ public abstract class GroovyMaxTest {
@Override
public Traversal<Vertex, Map<String, Number>> get_g_V_hasLabelXsoftwareX_group_byXnameX_byXbothE_valuesXweightX_foldX_byXmaxXlocalXX() {
- g.V().hasLabel('software').group().by('name').by(bothE().values('weight').fold()).by(max(Scope.local)).cap()
+ g.V().hasLabel('software').group().by('name').by(bothE().values('weight').fold()).by(max(Scope.local))
}
}
@@ -68,7 +68,7 @@ public abstract class GroovyMaxTest {
@Override
public Traversal<Vertex, Map<String, Number>> get_g_V_hasLabelXsoftwareX_group_byXnameX_byXbothE_valuesXweightX_foldX_byXmaxXlocalXX() {
- ComputerTestHelper.compute("g.V().hasLabel('software').group().by('name').by(bothE().values('weight').fold()).by(max(Scope.local)).cap()", g)
+ ComputerTestHelper.compute("g.V().hasLabel('software').group().by('name').by(bothE().values('weight').fold()).by(max(Scope.local))", g)
}
}
}
http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/blob/0d4f1d93/gremlin-groovy-test/src/main/groovy/org/apache/tinkerpop/gremlin/process/graph/traversal/step/map/GroovyMeanTest.groovy
----------------------------------------------------------------------
diff --git a/gremlin-groovy-test/src/main/groovy/org/apache/tinkerpop/gremlin/process/graph/traversal/step/map/GroovyMeanTest.groovy b/gremlin-groovy-test/src/main/groovy/org/apache/tinkerpop/gremlin/process/graph/traversal/step/map/GroovyMeanTest.groovy
index 0cd0539..d291d1a 100644
--- a/gremlin-groovy-test/src/main/groovy/org/apache/tinkerpop/gremlin/process/graph/traversal/step/map/GroovyMeanTest.groovy
+++ b/gremlin-groovy-test/src/main/groovy/org/apache/tinkerpop/gremlin/process/graph/traversal/step/map/GroovyMeanTest.groovy
@@ -43,7 +43,7 @@ public abstract class GroovyMeanTest {
@Override
public Traversal<Vertex, Map<String, Number>> get_g_V_hasLabelXsoftwareX_group_byXnameX_byXbothE_valuesXweightX_foldX_byXmeanXlocalXX() {
- g.V().hasLabel('software').group().by('name').by(bothE().values('weight').fold()).by(mean(Scope.local)).cap()
+ g.V().hasLabel('software').group().by('name').by(bothE().values('weight').fold()).by(mean(Scope.local))
}
}
@@ -57,7 +57,7 @@ public abstract class GroovyMeanTest {
@Override
public Traversal<Vertex, Map<String, Number>> get_g_V_hasLabelXsoftwareX_group_byXnameX_byXbothE_valuesXweightX_foldX_byXmeanXlocalXX() {
- ComputerTestHelper.compute("g.V().hasLabel('software').group().by('name').by(bothE().values('weight').fold()).by(mean(Scope.local)).cap()", g)
+ ComputerTestHelper.compute("g.V().hasLabel('software').group().by('name').by(bothE().values('weight').fold()).by(mean(Scope.local))", g)
}
}
}
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/blob/0d4f1d93/gremlin-groovy-test/src/main/groovy/org/apache/tinkerpop/gremlin/process/graph/traversal/step/map/GroovyMinTest.groovy
----------------------------------------------------------------------
diff --git a/gremlin-groovy-test/src/main/groovy/org/apache/tinkerpop/gremlin/process/graph/traversal/step/map/GroovyMinTest.groovy b/gremlin-groovy-test/src/main/groovy/org/apache/tinkerpop/gremlin/process/graph/traversal/step/map/GroovyMinTest.groovy
index bceb3eb..4f6f871 100644
--- a/gremlin-groovy-test/src/main/groovy/org/apache/tinkerpop/gremlin/process/graph/traversal/step/map/GroovyMinTest.groovy
+++ b/gremlin-groovy-test/src/main/groovy/org/apache/tinkerpop/gremlin/process/graph/traversal/step/map/GroovyMinTest.groovy
@@ -49,7 +49,7 @@ public abstract class GroovyMinTest {
@Override
public Traversal<Vertex, Map<String, Number>> get_g_V_hasLabelXsoftwareX_group_byXnameX_byXbothE_valuesXweightX_foldX_byXminXlocalXX() {
- g.V().hasLabel('software').group().by('name').by(bothE().values('weight').fold()).by(min(Scope.local)).cap()
+ g.V().hasLabel('software').group().by('name').by(bothE().values('weight').fold()).by(min(Scope.local))
}
}
@@ -68,7 +68,7 @@ public abstract class GroovyMinTest {
@Override
public Traversal<Vertex, Map<String, Number>> get_g_V_hasLabelXsoftwareX_group_byXnameX_byXbothE_valuesXweightX_foldX_byXminXlocalXX() {
- ComputerTestHelper.compute("g.V().hasLabel('software').group().by('name').by(bothE().values('weight').fold()).by(min(Scope.local)).cap()", g)
+ ComputerTestHelper.compute("g.V().hasLabel('software').group().by('name').by(bothE().values('weight').fold()).by(min(Scope.local))", g)
}
}
}
http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/blob/0d4f1d93/gremlin-groovy-test/src/main/groovy/org/apache/tinkerpop/gremlin/process/graph/traversal/step/map/GroovySelectTest.groovy
----------------------------------------------------------------------
diff --git a/gremlin-groovy-test/src/main/groovy/org/apache/tinkerpop/gremlin/process/graph/traversal/step/map/GroovySelectTest.groovy b/gremlin-groovy-test/src/main/groovy/org/apache/tinkerpop/gremlin/process/graph/traversal/step/map/GroovySelectTest.groovy
index 16d030d..d953e72 100644
--- a/gremlin-groovy-test/src/main/groovy/org/apache/tinkerpop/gremlin/process/graph/traversal/step/map/GroovySelectTest.groovy
+++ b/gremlin-groovy-test/src/main/groovy/org/apache/tinkerpop/gremlin/process/graph/traversal/step/map/GroovySelectTest.groovy
@@ -67,8 +67,8 @@ public abstract class GroovySelectTest {
}
@Override
- public Traversal<Vertex, Map<String, String>> get_g_V_asXaX_out_aggregate_asXbX_select_byXnameX() {
- g.V.as('a').out.aggregate.as('b').select.by('name')
+ public Traversal<Vertex, Map<String, String>> get_g_V_asXaX_out_aggregateXxX_asXbX_select_byXnameX() {
+ g.V.as('a').out.aggregate('x').as('b').select.by('name')
}
@Override
@@ -176,7 +176,7 @@ public abstract class GroovySelectTest {
}
@Override
- Traversal<Vertex, Map<String, String>> get_g_V_asXaX_out_aggregate_asXbX_select_byXnameX() {
+ Traversal<Vertex, Map<String, String>> get_g_V_asXaX_out_aggregateXxX_asXbX_select_byXnameX() {
// override with nothing until the test itself is supported
return null
}
http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/blob/0d4f1d93/gremlin-groovy-test/src/main/groovy/org/apache/tinkerpop/gremlin/process/graph/traversal/step/map/GroovySumTest.groovy
----------------------------------------------------------------------
diff --git a/gremlin-groovy-test/src/main/groovy/org/apache/tinkerpop/gremlin/process/graph/traversal/step/map/GroovySumTest.groovy b/gremlin-groovy-test/src/main/groovy/org/apache/tinkerpop/gremlin/process/graph/traversal/step/map/GroovySumTest.groovy
index 04aeeb1..03545a5 100644
--- a/gremlin-groovy-test/src/main/groovy/org/apache/tinkerpop/gremlin/process/graph/traversal/step/map/GroovySumTest.groovy
+++ b/gremlin-groovy-test/src/main/groovy/org/apache/tinkerpop/gremlin/process/graph/traversal/step/map/GroovySumTest.groovy
@@ -43,7 +43,7 @@ public abstract class GroovySumTest {
@Override
public Traversal<Vertex, Map<String, Number>> get_g_V_hasLabelXsoftwareX_group_byXnameX_byXbothE_valuesXweightX_foldX_byXsumXlocalXX() {
- g.V().hasLabel('software').group().by('name').by(bothE().values('weight').fold()).by(sum(Scope.local)).cap()
+ g.V().hasLabel('software').group().by('name').by(bothE().values('weight').fold()).by(sum(Scope.local))
}
}
@@ -57,7 +57,7 @@ public abstract class GroovySumTest {
@Override
public Traversal<Vertex, Map<String, Number>> get_g_V_hasLabelXsoftwareX_group_byXnameX_byXbothE_valuesXweightX_foldX_byXsumXlocalXX() {
- ComputerTestHelper.compute("g.V().hasLabel('software').group().by('name').by(bothE().values('weight').fold()).by(sum(Scope.local)).cap()", g)
+ ComputerTestHelper.compute("g.V().hasLabel('software').group().by('name').by(bothE().values('weight').fold()).by(sum(Scope.local))", g)
}
}
}
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/blob/0d4f1d93/gremlin-groovy-test/src/main/groovy/org/apache/tinkerpop/gremlin/process/graph/traversal/step/sideEffect/GroovyAggregateTest.groovy
----------------------------------------------------------------------
diff --git a/gremlin-groovy-test/src/main/groovy/org/apache/tinkerpop/gremlin/process/graph/traversal/step/sideEffect/GroovyAggregateTest.groovy b/gremlin-groovy-test/src/main/groovy/org/apache/tinkerpop/gremlin/process/graph/traversal/step/sideEffect/GroovyAggregateTest.groovy
index 140fbb4..3edd991 100644
--- a/gremlin-groovy-test/src/main/groovy/org/apache/tinkerpop/gremlin/process/graph/traversal/step/sideEffect/GroovyAggregateTest.groovy
+++ b/gremlin-groovy-test/src/main/groovy/org/apache/tinkerpop/gremlin/process/graph/traversal/step/sideEffect/GroovyAggregateTest.groovy
@@ -35,13 +35,13 @@ public abstract class GroovyAggregateTest {
public static class StandardTraversals extends AggregateTest {
@Override
- public Traversal<Vertex, List<String>> get_g_V_name_aggregate() {
- g.V.name.aggregate
+ public Traversal<Vertex, List<String>> get_g_V_name_aggregateXxX_capXxX() {
+ g.V.name.aggregate('x').cap('x')
}
@Override
- public Traversal<Vertex, List<String>> get_g_V_aggregate_byXnameX() {
- g.V.aggregate.by('name')
+ public Traversal<Vertex, List<String>> get_g_V_aggregateXxX_byXnameX_capXxX() {
+ g.V.aggregate('x').by('name').cap('x')
}
@Override
@@ -54,13 +54,13 @@ public abstract class GroovyAggregateTest {
public static class ComputerTraversals extends AggregateTest {
@Override
- public Traversal<Vertex, List<String>> get_g_V_name_aggregate() {
- ComputerTestHelper.compute("g.V.name.aggregate", g)
+ public Traversal<Vertex, List<String>> get_g_V_name_aggregateXxX_capXxX() {
+ ComputerTestHelper.compute("g.V.name.aggregate('x').cap('x')", g)
}
@Override
- public Traversal<Vertex, List<String>> get_g_V_aggregate_byXnameX() {
- ComputerTestHelper.compute("g.V.aggregate.by('name')", g)
+ public Traversal<Vertex, List<String>> get_g_V_aggregateXxX_byXnameX_capXxX() {
+ ComputerTestHelper.compute("g.V.aggregate('x').by('name').cap('x')", g)
}
@Override
http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/blob/0d4f1d93/gremlin-test/src/main/java/org/apache/tinkerpop/gremlin/process/graph/traversal/step/filter/DedupTest.java
----------------------------------------------------------------------
diff --git a/gremlin-test/src/main/java/org/apache/tinkerpop/gremlin/process/graph/traversal/step/filter/DedupTest.java b/gremlin-test/src/main/java/org/apache/tinkerpop/gremlin/process/graph/traversal/step/filter/DedupTest.java
index e50a171..2477c31 100644
--- a/gremlin-test/src/main/java/org/apache/tinkerpop/gremlin/process/graph/traversal/step/filter/DedupTest.java
+++ b/gremlin-test/src/main/java/org/apache/tinkerpop/gremlin/process/graph/traversal/step/filter/DedupTest.java
@@ -51,7 +51,7 @@ public abstract class DedupTest extends AbstractGremlinProcessTest {
public abstract Traversal<Vertex, String> get_g_V_both_name_orderXa_bX_dedup();
- public abstract Traversal<Vertex, Map<String, Set<Double>>> get_g_V_group_byXlabelX_byXbothE_valuesXweightX_foldX_byXdedupXlocalXX_cap();
+ public abstract Traversal<Vertex, Map<String, Set<Double>>> get_g_V_group_byXlabelX_byXbothE_valuesXweightX_foldX_byXdedupXlocalXX();
@Test
@LoadGraphWith(MODERN)
@@ -103,7 +103,7 @@ public abstract class DedupTest extends AbstractGremlinProcessTest {
@LoadGraphWith(MODERN)
public void g_V_group_byXlabelX_byXbothE_valuesXweightX_foldX_byXdedupXlocalXX_cap() {
final Traversal<Vertex, Map<String, Set<Double>>> traversal =
- get_g_V_group_byXlabelX_byXbothE_valuesXweightX_foldX_byXdedupXlocalXX_cap();
+ get_g_V_group_byXlabelX_byXbothE_valuesXweightX_foldX_byXdedupXlocalXX();
printTraversalForm(traversal);
assertTrue(traversal.hasNext());
final Map<String, Set<Double>> map = traversal.next();
@@ -135,8 +135,8 @@ public abstract class DedupTest extends AbstractGremlinProcessTest {
}
@Override
- public Traversal<Vertex, Map<String, Set<Double>>> get_g_V_group_byXlabelX_byXbothE_valuesXweightX_foldX_byXdedupXlocalXX_cap() {
- return g.V().group().by(T.label).by(bothE().values("weight").fold()).by(dedup(Scope.local)).cap();
+ public Traversal<Vertex, Map<String, Set<Double>>> get_g_V_group_byXlabelX_byXbothE_valuesXweightX_foldX_byXdedupXlocalXX() {
+ return g.V().<String,Set<Double>>group().by(T.label).by(bothE().values("weight").fold()).by(dedup(Scope.local));
}
}
}
http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/blob/0d4f1d93/gremlin-test/src/main/java/org/apache/tinkerpop/gremlin/process/graph/traversal/step/filter/SampleTest.java
----------------------------------------------------------------------
diff --git a/gremlin-test/src/main/java/org/apache/tinkerpop/gremlin/process/graph/traversal/step/filter/SampleTest.java b/gremlin-test/src/main/java/org/apache/tinkerpop/gremlin/process/graph/traversal/step/filter/SampleTest.java
index bceefad..df65486 100644
--- a/gremlin-test/src/main/java/org/apache/tinkerpop/gremlin/process/graph/traversal/step/filter/SampleTest.java
+++ b/gremlin-test/src/main/java/org/apache/tinkerpop/gremlin/process/graph/traversal/step/filter/SampleTest.java
@@ -137,12 +137,12 @@ public abstract class SampleTest extends AbstractGremlinProcessTest {
@Override
public Traversal<Vertex, Map<String, Collection<Double>>> get_g_V_group_byXlabelX_byXbothE_valuesXweightX_foldX_byXsampleXlocal_2XX() {
- return g.V().group().by(T.label).by(bothE().values("weight").fold()).by(sample(Scope.local, 2)).cap();
+ return g.V().<String,Collection<Double>>group().by(T.label).by(bothE().values("weight").fold()).by(sample(Scope.local, 2));
}
@Override
public Traversal<Vertex, Map<String, Collection<Double>>> get_g_V_group_byXlabelX_byXbothE_valuesXweightX_foldX_byXsampleXlocal_5XX() {
- return g.V().group().by(T.label).by(bothE().values("weight").fold()).by(sample(Scope.local, 5)).cap();
+ return g.V().<String,Collection<Double>>group().by(T.label).by(bothE().values("weight").fold()).by(sample(Scope.local, 5));
}
}
}
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/blob/0d4f1d93/gremlin-test/src/main/java/org/apache/tinkerpop/gremlin/process/graph/traversal/step/map/MaxTest.java
----------------------------------------------------------------------
diff --git a/gremlin-test/src/main/java/org/apache/tinkerpop/gremlin/process/graph/traversal/step/map/MaxTest.java b/gremlin-test/src/main/java/org/apache/tinkerpop/gremlin/process/graph/traversal/step/map/MaxTest.java
index 07b8aad..6db12d2 100644
--- a/gremlin-test/src/main/java/org/apache/tinkerpop/gremlin/process/graph/traversal/step/map/MaxTest.java
+++ b/gremlin-test/src/main/java/org/apache/tinkerpop/gremlin/process/graph/traversal/step/map/MaxTest.java
@@ -87,7 +87,7 @@ public abstract class MaxTest extends AbstractGremlinProcessTest {
@Override
public Traversal<Vertex, Map<String, Number>> get_g_V_hasLabelXsoftwareX_group_byXnameX_byXbothE_valuesXweightX_foldX_byXmaxXlocalXX() {
- return g.V().hasLabel("software").group().by("name").by(bothE().values("weight").fold()).by(max(Scope.local)).cap();
+ return g.V().hasLabel("software").<String, Number>group().by("name").by(bothE().values("weight").fold()).by(max(Scope.local));
}
}
}
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/blob/0d4f1d93/gremlin-test/src/main/java/org/apache/tinkerpop/gremlin/process/graph/traversal/step/map/MeanTest.java
----------------------------------------------------------------------
diff --git a/gremlin-test/src/main/java/org/apache/tinkerpop/gremlin/process/graph/traversal/step/map/MeanTest.java b/gremlin-test/src/main/java/org/apache/tinkerpop/gremlin/process/graph/traversal/step/map/MeanTest.java
index 527510e..6cfb94f 100644
--- a/gremlin-test/src/main/java/org/apache/tinkerpop/gremlin/process/graph/traversal/step/map/MeanTest.java
+++ b/gremlin-test/src/main/java/org/apache/tinkerpop/gremlin/process/graph/traversal/step/map/MeanTest.java
@@ -82,7 +82,7 @@ public abstract class MeanTest extends AbstractGremlinProcessTest {
@Override
public Traversal<Vertex, Map<String, Number>> get_g_V_hasLabelXsoftwareX_group_byXnameX_byXbothE_valuesXweightX_foldX_byXmeanXlocalXX() {
- return g.V().hasLabel("software").group().by("name").by(bothE().values("weight").fold()).by(mean(Scope.local)).cap();
+ return g.V().hasLabel("software").<String, Number>group().by("name").by(bothE().values("weight").fold()).by(mean(Scope.local));
}
}
}
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/blob/0d4f1d93/gremlin-test/src/main/java/org/apache/tinkerpop/gremlin/process/graph/traversal/step/map/MinTest.java
----------------------------------------------------------------------
diff --git a/gremlin-test/src/main/java/org/apache/tinkerpop/gremlin/process/graph/traversal/step/map/MinTest.java b/gremlin-test/src/main/java/org/apache/tinkerpop/gremlin/process/graph/traversal/step/map/MinTest.java
index 62964bf..7dae819 100644
--- a/gremlin-test/src/main/java/org/apache/tinkerpop/gremlin/process/graph/traversal/step/map/MinTest.java
+++ b/gremlin-test/src/main/java/org/apache/tinkerpop/gremlin/process/graph/traversal/step/map/MinTest.java
@@ -87,7 +87,7 @@ public abstract class MinTest extends AbstractGremlinProcessTest {
@Override
public Traversal<Vertex, Map<String, Number>> get_g_V_hasLabelXsoftwareX_group_byXnameX_byXbothE_valuesXweightX_foldX_byXminXlocalXX() {
- return g.V().hasLabel("software").group().by("name").by(bothE().values("weight").fold()).by(min(Scope.local)).cap();
+ return g.V().hasLabel("software").<String, Number>group().by("name").by(bothE().values("weight").fold()).by(min(Scope.local));
}
}
}
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/blob/0d4f1d93/gremlin-test/src/main/java/org/apache/tinkerpop/gremlin/process/graph/traversal/step/map/SelectTest.java
----------------------------------------------------------------------
diff --git a/gremlin-test/src/main/java/org/apache/tinkerpop/gremlin/process/graph/traversal/step/map/SelectTest.java b/gremlin-test/src/main/java/org/apache/tinkerpop/gremlin/process/graph/traversal/step/map/SelectTest.java
index 5acf947..a537ae3 100644
--- a/gremlin-test/src/main/java/org/apache/tinkerpop/gremlin/process/graph/traversal/step/map/SelectTest.java
+++ b/gremlin-test/src/main/java/org/apache/tinkerpop/gremlin/process/graph/traversal/step/map/SelectTest.java
@@ -53,7 +53,7 @@ public abstract class SelectTest extends AbstractGremlinProcessTest {
public abstract Traversal<Vertex, Map<String, String>> get_g_V_asXaX_out_asXbX_select_byXnameX();
- public abstract Traversal<Vertex, Map<String, String>> get_g_V_asXaX_out_aggregate_asXbX_select_byXnameX();
+ public abstract Traversal<Vertex, Map<String, String>> get_g_V_asXaX_out_aggregateXxX_asXbX_select_byXnameX();
public abstract Traversal<Vertex, Map<String, String>> get_g_V_asXaX_name_order_asXbX_select_byXnameX_by_XitX();
@@ -132,7 +132,7 @@ public abstract class SelectTest extends AbstractGremlinProcessTest {
public void g_V_asXaX_out_asXbX_select_byXnameX() {
Arrays.asList(
get_g_V_asXaX_out_asXbX_select_byXnameX(),
- get_g_V_asXaX_out_aggregate_asXbX_select_byXnameX()).forEach(traversal -> {
+ get_g_V_asXaX_out_aggregateXxX_asXbX_select_byXnameX()).forEach(traversal -> {
printTraversalForm(traversal);
final List<Map<String, String>> expected = makeMapList(2,
"a", "marko", "b", "lop",
@@ -278,8 +278,8 @@ public abstract class SelectTest extends AbstractGremlinProcessTest {
}
@Override
- public Traversal<Vertex, Map<String, String>> get_g_V_asXaX_out_aggregate_asXbX_select_byXnameX() {
- return g.V().as("a").out().aggregate().as("b").<String>select().by("name");
+ public Traversal<Vertex, Map<String, String>> get_g_V_asXaX_out_aggregateXxX_asXbX_select_byXnameX() {
+ return g.V().as("a").out().aggregate("x").as("b").<String>select().by("name");
}
@Override
http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/blob/0d4f1d93/gremlin-test/src/main/java/org/apache/tinkerpop/gremlin/process/graph/traversal/step/map/SumTest.java
----------------------------------------------------------------------
diff --git a/gremlin-test/src/main/java/org/apache/tinkerpop/gremlin/process/graph/traversal/step/map/SumTest.java b/gremlin-test/src/main/java/org/apache/tinkerpop/gremlin/process/graph/traversal/step/map/SumTest.java
index 2dd2797..9a08519 100644
--- a/gremlin-test/src/main/java/org/apache/tinkerpop/gremlin/process/graph/traversal/step/map/SumTest.java
+++ b/gremlin-test/src/main/java/org/apache/tinkerpop/gremlin/process/graph/traversal/step/map/SumTest.java
@@ -77,7 +77,7 @@ public abstract class SumTest extends AbstractGremlinProcessTest {
@Override
public Traversal<Vertex, Map<String, Number>> get_g_V_hasLabelXsoftwareX_group_byXnameX_byXbothE_valuesXweightX_foldX_byXsumXlocalXX() {
- return g.V().hasLabel("software").group().by("name").by(bothE().values("weight").fold()).by(sum(Scope.local)).cap();
+ return g.V().hasLabel("software").<String, Number>group().by("name").by(bothE().values("weight").fold()).by(sum(Scope.local));
}
}
}
\ No newline at end of file