Made sure that the barrier step and the reducing operator are reevaluated when 
the value traversal is being replaced.


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

Branch: refs/heads/TINKERPOP-1682
Commit: b7c6304cd0563a24cf892a613adb907e527c1643
Parents: 84df874
Author: Daniel Kuppitz <daniel_kupp...@hotmail.com>
Authored: Fri Jun 23 23:43:13 2017 +0200
Committer: Daniel Kuppitz <daniel_kupp...@hotmail.com>
Committed: Mon Mar 19 12:28:38 2018 -0700

----------------------------------------------------------------------
 .../process/traversal/step/map/GroupStep.java     | 12 ++++++++----
 .../step/sideEffect/GroupSideEffectStep.java      | 18 +++++++++++-------
 2 files changed, 19 insertions(+), 11 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/b7c6304c/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/map/GroupStep.java
----------------------------------------------------------------------
diff --git 
a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/map/GroupStep.java
 
b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/map/GroupStep.java
index 521debc..4d795f9 100644
--- 
a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/map/GroupStep.java
+++ 
b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/map/GroupStep.java
@@ -63,15 +63,19 @@ public final class GroupStep<S, K, V> extends 
ReducingBarrierStep<S, Map<K, V>>
         this.setSeedSupplier(HashMapSupplier.instance());
     }
 
+    private void setValueTraversal(final Traversal.Admin<?, ?> kvTraversal) {
+        this.valueTraversal = 
this.integrateChild(convertValueTraversal(kvTraversal));
+        this.barrierStep = 
TraversalHelper.getFirstStepOfAssignableClass(Barrier.class, 
this.valueTraversal).orElse(null);
+        this.setReducingBiOperator(new GroupBiOperator<>(null == 
this.barrierStep ? Operator.assign : 
this.barrierStep.getMemoryComputeKey().getReducer()));
+    }
+
     @Override
     public void modulateBy(final Traversal.Admin<?, ?> kvTraversal) {
         if ('k' == this.state) {
             this.keyTraversal = this.integrateChild(kvTraversal);
             this.state = 'v';
         } else if ('v' == this.state) {
-            this.valueTraversal = 
this.integrateChild(convertValueTraversal(kvTraversal));
-            this.barrierStep = 
TraversalHelper.getFirstStepOfAssignableClass(Barrier.class, 
this.valueTraversal).orElse(null);
-            this.setReducingBiOperator(new GroupBiOperator<>(null == 
this.barrierStep ? Operator.assign : 
this.barrierStep.getMemoryComputeKey().getReducer()));
+            this.setValueTraversal(kvTraversal);
             this.state = 'x';
         } else {
             throw new IllegalStateException("The key and value traversals for 
group()-step have already been set: " + this);
@@ -83,7 +87,7 @@ public final class GroupStep<S, K, V> extends 
ReducingBarrierStep<S, Map<K, V>>
         if (null != this.keyTraversal && 
this.keyTraversal.equals(oldTraversal))
             this.keyTraversal = this.integrateChild(newTraversal);
         else if (null != this.valueTraversal && 
this.valueTraversal.equals(oldTraversal))
-            this.valueTraversal = this.integrateChild(newTraversal);
+            this.setValueTraversal(newTraversal);
     }
 
     @Override

http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/b7c6304c/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/sideEffect/GroupSideEffectStep.java
----------------------------------------------------------------------
diff --git 
a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/sideEffect/GroupSideEffectStep.java
 
b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/sideEffect/GroupSideEffectStep.java
index 35f3cd7..ee73fec 100644
--- 
a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/sideEffect/GroupSideEffectStep.java
+++ 
b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/sideEffect/GroupSideEffectStep.java
@@ -62,18 +62,22 @@ public final class GroupSideEffectStep<S, K, V> extends 
SideEffectStep<S> implem
                         this.barrierStep.getMemoryComputeKey().getReducer()));
     }
 
+    private void setValueTraversal(final Traversal.Admin<?, ?> valueTraversal) 
{
+        this.valueTraversal = 
this.integrateChild(GroupStep.convertValueTraversal(valueTraversal));
+        this.barrierStep = 
TraversalHelper.getFirstStepOfAssignableClass(Barrier.class, 
this.valueTraversal).orElse(null);
+        this.getTraversal().getSideEffects().register(this.sideEffectKey, null,
+                new GroupStep.GroupBiOperator<>(null == this.barrierStep ?
+                        Operator.assign :
+                        this.barrierStep.getMemoryComputeKey().getReducer()));
+    }
+
     @Override
     public void modulateBy(final Traversal.Admin<?, ?> kvTraversal) {
         if ('k' == this.state) {
             this.keyTraversal = this.integrateChild(kvTraversal);
             this.state = 'v';
         } else if ('v' == this.state) {
-            this.valueTraversal = 
this.integrateChild(GroupStep.convertValueTraversal(kvTraversal));
-            this.barrierStep = 
TraversalHelper.getFirstStepOfAssignableClass(Barrier.class, 
this.valueTraversal).orElse(null);
-            this.getTraversal().getSideEffects().register(this.sideEffectKey, 
null,
-                    new GroupStep.GroupBiOperator<>(null == this.barrierStep ?
-                            Operator.assign :
-                            
this.barrierStep.getMemoryComputeKey().getReducer()));
+            this.setValueTraversal(kvTraversal);
             this.state = 'x';
         } else {
             throw new IllegalStateException("The key and value traversals for 
group()-step have already been set: " + this);
@@ -85,7 +89,7 @@ public final class GroupSideEffectStep<S, K, V> extends 
SideEffectStep<S> implem
         if (null != this.keyTraversal && 
this.keyTraversal.equals(oldTraversal))
             this.keyTraversal = this.integrateChild(newTraversal);
         else if (null != this.valueTraversal && 
this.valueTraversal.equals(oldTraversal))
-            this.valueTraversal = this.integrateChild(newTraversal);
+            this.setValueTraversal(newTraversal);
     }
 
     @Override

Reply via email to