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/06/11 22:11:12 UTC
[1/3] incubator-tinkerpop git commit: better constructor arguments
for SelectXXXStep.
Repository: incubator-tinkerpop
Updated Branches:
refs/heads/xmatch 9d1978dc7 -> 15e3f77c9
better constructor arguments for SelectXXXStep.
Project: http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/commit/635a0388
Tree: http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/tree/635a0388
Diff: http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/diff/635a0388
Branch: refs/heads/xmatch
Commit: 635a03886ffc1f98b063a5889647bbd1cd66a713
Parents: 93b5553
Author: Marko A. Rodriguez <ok...@gmail.com>
Authored: Thu Jun 11 13:05:19 2015 -0600
Committer: Marko A. Rodriguez <ok...@gmail.com>
Committed: Thu Jun 11 13:05:19 2015 -0600
----------------------------------------------------------------------
.../process/traversal/dsl/graph/GraphTraversal.java | 12 ++++++------
.../process/traversal/step/filter/WhereStep.java | 2 +-
.../process/traversal/step/map/SelectOneStep.java | 8 ++++++--
.../gremlin/process/traversal/step/map/SelectStep.java | 8 ++++++--
4 files changed, 19 insertions(+), 11 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/blob/635a0388/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 09f5602..308fd89 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
@@ -469,11 +469,11 @@ public interface GraphTraversal<S, E> extends Traversal<S, E> {
}
public default <E2> GraphTraversal<S, Map<String, E2>> select(final Scope scope, final Pop pop, final String... stepLabels) {
- return this.asAdmin().addStep(new SelectStep<>(this.asAdmin(), scope, Optional.ofNullable(pop), stepLabels));
+ return this.asAdmin().addStep(new SelectStep<>(this.asAdmin(), scope, pop, stepLabels));
}
public default <E2> GraphTraversal<S, Map<String, E2>> select(final Scope scope, final String... stepLabels) {
- return this.select(scope, null, stepLabels);
+ return this.asAdmin().addStep(new SelectStep<>(this.asAdmin(), scope, stepLabels));
}
public default <E2> GraphTraversal<S, Map<String, E2>> select(final Pop pop, final String... stepLabels) {
@@ -481,15 +481,15 @@ public interface GraphTraversal<S, E> extends Traversal<S, E> {
}
public default <E2> GraphTraversal<S, Map<String, E2>> select(final String... stepLabels) {
- return this.select(Scope.global, null, stepLabels);
+ return this.select(Scope.global, stepLabels);
}
public default <E2> GraphTraversal<S, E2> select(final Scope scope, final Pop pop, final String stepLabel) {
- return this.asAdmin().addStep(new SelectOneStep(this.asAdmin(), scope, Optional.ofNullable(pop), stepLabel));
+ return this.asAdmin().addStep(new SelectOneStep(this.asAdmin(), scope, pop, stepLabel));
}
public default <E2> GraphTraversal<S, E2> select(final Scope scope, final String stepLabel) {
- return this.select(scope, null, stepLabel);
+ return this.asAdmin().addStep(new SelectOneStep(this.asAdmin(), scope, stepLabel));
}
public default <E2> GraphTraversal<S, E2> select(final Pop pop, final String stepLabel) {
@@ -497,7 +497,7 @@ public interface GraphTraversal<S, E> extends Traversal<S, E> {
}
public default <E2> GraphTraversal<S, E2> select(final String stepLabel) {
- return this.select(Scope.global, null, stepLabel);
+ return this.select(Scope.global, stepLabel);
}
public default <E2> GraphTraversal<S, E2> unfold() {
http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/blob/635a0388/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/filter/WhereStep.java
----------------------------------------------------------------------
diff --git a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/filter/WhereStep.java b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/filter/WhereStep.java
index 4cb7086..76f3bd4 100644
--- a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/filter/WhereStep.java
+++ b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/filter/WhereStep.java
@@ -60,7 +60,7 @@ public final class WhereStep<S> extends FilterStep<S> implements TraversalParent
if (startStep instanceof StartStep && !startStep.getLabels().isEmpty()) {
if (startStep.getLabels().size() > 1)
throw new IllegalArgumentException("The start step of a where()-traversal predicate can only have one label: " + startStep);
- TraversalHelper.replaceStep(whereTraversal.getStartStep(), new SelectOneStep<>(whereTraversal, scope, Optional.empty(), startStep.getLabels().iterator().next()), whereTraversal); // TODO: pop head or allow multi-results?
+ TraversalHelper.replaceStep(whereTraversal.getStartStep(), new SelectOneStep<>(whereTraversal, scope, startStep.getLabels().iterator().next()), whereTraversal); // TODO: pop head or allow multi-results?
}
//// END STEP
final Step<?, ?> endStep = whereTraversal.getEndStep();
http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/blob/635a0388/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/map/SelectOneStep.java
----------------------------------------------------------------------
diff --git a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/map/SelectOneStep.java b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/map/SelectOneStep.java
index 7a2193e..8d0ecd9 100644
--- a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/map/SelectOneStep.java
+++ b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/map/SelectOneStep.java
@@ -45,13 +45,17 @@ public final class SelectOneStep<S, E> extends MapStep<S, E> implements Traversa
private final String selectLabel;
private Traversal.Admin<S, E> selectTraversal = new IdentityTraversal<>();
- public SelectOneStep(final Traversal.Admin traversal, final Scope scope, final Optional<Pop> pop, final String selectLabel) {
+ public SelectOneStep(final Traversal.Admin traversal, final Scope scope, Pop pop, final String selectLabel) {
super(traversal);
this.scope = scope;
- this.pop = pop.orElse(null);
+ this.pop = pop;
this.selectLabel = selectLabel;
}
+ public SelectOneStep(final Traversal.Admin traversal, final Scope scope, final String selectLabel) {
+ this(traversal, scope, null, selectLabel);
+ }
+
@Override
protected E map(final Traverser.Admin<S> traverser) {
final Optional<S> optional = this.getOptionalScopeValueByKey(this.pop, this.selectLabel, traverser);
http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/blob/635a0388/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/map/SelectStep.java
----------------------------------------------------------------------
diff --git a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/map/SelectStep.java b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/map/SelectStep.java
index 0c9bf8b..d9cc631 100644
--- a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/map/SelectStep.java
+++ b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/map/SelectStep.java
@@ -49,13 +49,17 @@ public final class SelectStep<S, E> extends MapStep<S, Map<String, E>> implement
private Scope scope;
private final List<String> selectLabels;
- public SelectStep(final Traversal.Admin traversal, final Scope scope, final Optional<Pop> pop, final String... selectLabels) {
+ public SelectStep(final Traversal.Admin traversal, final Scope scope, final Pop pop, final String... selectLabels) {
super(traversal);
this.scope = scope;
- this.pop = pop.orElse(null);
+ this.pop = pop;
this.selectLabels = Arrays.asList(selectLabels);
}
+ public SelectStep(final Traversal.Admin traversal, final Scope scope, final String... selectLabels) {
+ this(traversal, scope, null, selectLabels);
+ }
+
@Override
protected Map<String, E> map(final Traverser.Admin<S> traverser) {
final S start = traverser.get();
[2/3] incubator-tinkerpop git commit: Merge branch 'master' into
xmatch
Posted by ok...@apache.org.
Merge branch 'master' into xmatch
Project: http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/commit/5e753ff4
Tree: http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/tree/5e753ff4
Diff: http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/diff/5e753ff4
Branch: refs/heads/xmatch
Commit: 5e753ff4f1dafe75b2a9d3e7f39cc2c1945f9a40
Parents: 9d1978d 635a038
Author: Marko A. Rodriguez <ok...@gmail.com>
Authored: Thu Jun 11 13:05:44 2015 -0600
Committer: Marko A. Rodriguez <ok...@gmail.com>
Committed: Thu Jun 11 13:05:44 2015 -0600
----------------------------------------------------------------------
.../process/traversal/dsl/graph/GraphTraversal.java | 12 ++++++------
.../process/traversal/step/filter/WhereStep.java | 2 +-
.../process/traversal/step/map/SelectOneStep.java | 8 ++++++--
.../gremlin/process/traversal/step/map/SelectStep.java | 8 ++++++--
4 files changed, 19 insertions(+), 11 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/blob/5e753ff4/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/dsl/graph/GraphTraversal.java
----------------------------------------------------------------------
[3/3] incubator-tinkerpop git commit: XMatchStep works both in OLTP
and OLAP. Bam. Added a handy ComputerAwareStep.EndStep boolean -- return home
or go to next.
Posted by ok...@apache.org.
XMatchStep works both in OLTP and OLAP. Bam. Added a handy ComputerAwareStep.EndStep boolean -- return home or go to next.
Project: http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/commit/15e3f77c
Tree: http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/tree/15e3f77c
Diff: http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/diff/15e3f77c
Branch: refs/heads/xmatch
Commit: 15e3f77c96c38bbceadd1b977e1afc58913d076b
Parents: 5e753ff
Author: Marko A. Rodriguez <ok...@gmail.com>
Authored: Thu Jun 11 14:11:07 2015 -0600
Committer: Marko A. Rodriguez <ok...@gmail.com>
Committed: Thu Jun 11 14:11:07 2015 -0600
----------------------------------------------------------------------
.../gremlin/process/traversal/dsl/graph/__.java | 4 +
.../traversal/step/branch/BranchStep.java | 2 +-
.../step/filter/exp/IsOrAllowStep.java | 7 +-
.../traversal/step/filter/exp/XMatchStep.java | 103 ++++++++++++-------
.../traversal/step/util/ComputerAwareStep.java | 8 +-
.../tinkergraph/structure/TinkerGraphTest.java | 5 +-
6 files changed, 87 insertions(+), 42 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/blob/15e3f77c/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/dsl/graph/__.java
----------------------------------------------------------------------
diff --git a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/dsl/graph/__.java b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/dsl/graph/__.java
index 76a4303..de061c9 100644
--- a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/dsl/graph/__.java
+++ b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/dsl/graph/__.java
@@ -767,4 +767,8 @@ public class __ {
return __.<A>start().barrier(maxBarrierSize);
}
+ public static <A> GraphTraversal<A, A> xmatch(final Traversal<?, ?>... andTraversals) {
+ return __.<A>start().xmatch(andTraversals);
+ }
+
}
http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/blob/15e3f77c/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/branch/BranchStep.java
----------------------------------------------------------------------
diff --git a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/branch/BranchStep.java b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/branch/BranchStep.java
index eee95e7..2f3c7f1 100644
--- a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/branch/BranchStep.java
+++ b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/branch/BranchStep.java
@@ -52,7 +52,7 @@ public class BranchStep<S, E, M> extends ComputerAwareStep<S, E> implements Trav
this.traversalOptions.get(pickToken).add(traversalOption);
else
this.traversalOptions.put(pickToken, new ArrayList<>(Collections.singletonList(traversalOption)));
- traversalOption.addStep(new EndStep(traversalOption));
+ traversalOption.addStep(new EndStep(traversalOption, false));
this.integrateChild(traversalOption);
}
http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/blob/15e3f77c/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/filter/exp/IsOrAllowStep.java
----------------------------------------------------------------------
diff --git a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/filter/exp/IsOrAllowStep.java b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/filter/exp/IsOrAllowStep.java
index 081f747..9202f86 100644
--- a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/filter/exp/IsOrAllowStep.java
+++ b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/filter/exp/IsOrAllowStep.java
@@ -21,6 +21,7 @@
package org.apache.tinkerpop.gremlin.process.traversal.step.filter.exp;
+import org.apache.tinkerpop.gremlin.process.traversal.Path;
import org.apache.tinkerpop.gremlin.process.traversal.Pop;
import org.apache.tinkerpop.gremlin.process.traversal.Traversal;
import org.apache.tinkerpop.gremlin.process.traversal.Traverser;
@@ -45,8 +46,10 @@ public final class IsOrAllowStep<S> extends FilterStep<S> {
final Optional<S> optional = traverser.getSideEffects().get(this.key);
if (optional.isPresent())
return traverser.get().equals(optional.get());
- else
- return !traverser.path().hasLabel(this.key) || traverser.get().equals(traverser.path().getSingle(Pop.head, this.key));
+ else {
+ final Path path = traverser.path();
+ return !path.hasLabel(this.key) || traverser.get().equals(path.getSingle(Pop.head, this.key));
+ }
}
}
http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/blob/15e3f77c/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/filter/exp/XMatchStep.java
----------------------------------------------------------------------
diff --git a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/filter/exp/XMatchStep.java b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/filter/exp/XMatchStep.java
index 29ee69d..a67928b 100644
--- a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/filter/exp/XMatchStep.java
+++ b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/filter/exp/XMatchStep.java
@@ -21,21 +21,24 @@
package org.apache.tinkerpop.gremlin.process.traversal.step.filter.exp;
+import org.apache.tinkerpop.gremlin.process.traversal.Path;
+import org.apache.tinkerpop.gremlin.process.traversal.Pop;
import org.apache.tinkerpop.gremlin.process.traversal.Scope;
import org.apache.tinkerpop.gremlin.process.traversal.Step;
import org.apache.tinkerpop.gremlin.process.traversal.Traversal;
import org.apache.tinkerpop.gremlin.process.traversal.Traverser;
import org.apache.tinkerpop.gremlin.process.traversal.step.TraversalParent;
import org.apache.tinkerpop.gremlin.process.traversal.step.map.SelectOneStep;
-import org.apache.tinkerpop.gremlin.process.traversal.step.map.TailLocalStep;
import org.apache.tinkerpop.gremlin.process.traversal.step.sideEffect.StartStep;
-import org.apache.tinkerpop.gremlin.process.traversal.step.util.AbstractStep;
+import org.apache.tinkerpop.gremlin.process.traversal.step.util.ComputerAwareStep;
import org.apache.tinkerpop.gremlin.process.traversal.traverser.TraverserRequirement;
import org.apache.tinkerpop.gremlin.process.traversal.util.TraversalHelper;
import org.apache.tinkerpop.gremlin.structure.util.StringFactory;
+import org.apache.tinkerpop.gremlin.util.iterator.IteratorUtils;
import java.util.ArrayList;
import java.util.Collections;
+import java.util.Iterator;
import java.util.List;
import java.util.NoSuchElementException;
import java.util.Set;
@@ -43,11 +46,13 @@ import java.util.Set;
/**
* @author Marko A. Rodriguez (http://markorodriguez.com)
*/
-public final class XMatchStep<S> extends AbstractStep<S, S> implements TraversalParent {
+public final class XMatchStep<S> extends ComputerAwareStep<S, S> implements TraversalParent {
- private final List<Traversal.Admin<?, ?>> andTraversals = new ArrayList<>();
+ private List<Traversal.Admin<Object, Object>> andTraversals = new ArrayList<>();
private final List<String> traversalLabels = new ArrayList<>();
private final List<String> startLabels = new ArrayList<>();
+ private boolean first = true;
+
public XMatchStep(final Traversal.Admin traversal, final Traversal... andTraversals) {
super(traversal);
@@ -59,54 +64,31 @@ public final class XMatchStep<S> extends AbstractStep<S, S> implements Traversal
final Step<?, ?> startStep = andTraversal.asAdmin().getStartStep();
if (startStep instanceof StartStep && !startStep.getLabels().isEmpty()) {
if (startStep.getLabels().size() > 1)
- throw new IllegalArgumentException("The start step of a where()-traversal predicate can only have one label: " + startStep);
+ throw new IllegalArgumentException("The start step of a match()-traversal can only have one label: " + startStep);
final String startLabel = startStep.getLabels().iterator().next();
- final Step<?, ?> selectOneStep = new SelectOneStep<>(andTraversal.asAdmin(), Scope.global, startLabel);
+ final Step<?, ?> selectOneStep = new SelectOneStep<>(andTraversal.asAdmin(), Scope.global, Pop.head, startLabel);
selectOneStep.addLabel(traversalLabel);
this.startLabels.add(startLabel);
TraversalHelper.replaceStep(andTraversal.asAdmin().getStartStep(), selectOneStep, andTraversal.asAdmin());
- TraversalHelper.insertAfterStep(new TailLocalStep<>(andTraversal.asAdmin(), 1), selectOneStep, andTraversal.asAdmin());
}
//// END STEP
final Step<?, ?> endStep = andTraversal.asAdmin().getEndStep();
if (!endStep.getLabels().isEmpty()) {
if (endStep.getLabels().size() > 1)
- throw new IllegalArgumentException("The end step of a where()-traversal predicate can only have one label: " + endStep);
+ throw new IllegalArgumentException("The end step of a match()-traversal can only have one label: " + endStep);
final String label = endStep.getLabels().iterator().next();
endStep.removeLabel(label);
final Step<?, ?> isOrAllowStep = new IsOrAllowStep<>(andTraversal.asAdmin(), label);
isOrAllowStep.addLabel(label);
andTraversal.asAdmin().addStep(isOrAllowStep);
+ andTraversal.asAdmin().addStep(new EndStep(andTraversal.asAdmin(), true));
}
this.andTraversals.add(this.integrateChild(andTraversal.asAdmin()));
}
}
- @Override
- protected Traverser<S> processNextStart() throws NoSuchElementException {
- while (true) {
- for (final Traversal.Admin<?, ?> andTraversal : this.andTraversals) {
- if (andTraversal.hasNext()) {
- this.starts.add((Traverser.Admin) andTraversal.getEndStep().next().asAdmin());
- }
- }
- final Traverser<S> traverser = this.starts.next();
- boolean repeated = false;
- for (int i = 0; i < this.andTraversals.size(); i++) {
- if (traverser.path().hasLabel(this.startLabels.get(i)) && !traverser.path().hasLabel(this.traversalLabels.get(i))) {
- repeated = true;
- this.andTraversals.get(i).addStart((Traverser) traverser);
- break;
- }
- }
- if (!repeated)
- return traverser;
- }
- }
-
- @Override
- public List<Traversal.Admin<?, ?>> getLocalChildren() {
+ public List<Traversal.Admin<Object, Object>> getGlobalChildren() {
return Collections.unmodifiableList(this.andTraversals);
}
@@ -115,20 +97,71 @@ public final class XMatchStep<S> extends AbstractStep<S, S> implements Traversal
return StringFactory.stepString(this, this.andTraversals);
}
+ @Override
+ public void reset() {
+ super.reset();
+ this.first = true;
+ }
@Override
public XMatchStep<S> clone() {
final XMatchStep<S> clone = (XMatchStep<S>) super.clone();
- clone.andTraversals.clear();
- for (final Traversal.Admin<?, ?> traversal : this.andTraversals) {
+ clone.andTraversals = new ArrayList<>();
+ for (final Traversal.Admin<Object,Object> traversal : this.andTraversals) {
clone.andTraversals.add(clone.integrateChild(traversal.clone()));
}
return clone;
}
@Override
+ protected Iterator<Traverser<S>> standardAlgorithm() throws NoSuchElementException {
+ while (true) {
+ if (!this.first) {
+ for (final Traversal.Admin<?, ?> andTraversal : this.andTraversals) {
+ if (andTraversal.hasNext())
+ this.starts.add((Traverser.Admin) andTraversal.getEndStep().next().asAdmin());
+ }
+ }
+ this.first = false;
+ final Traverser<S> traverser = this.starts.next();
+ final Path path = traverser.path();
+ boolean traverserPassed = true;
+ for (int i = 0; i < this.andTraversals.size(); i++) {
+ if (path.hasLabel(this.startLabels.get(i)) && !path.hasLabel(this.traversalLabels.get(i))) {
+ traverserPassed = false;
+ this.andTraversals.get(i).addStart((Traverser) traverser);
+ break;
+ }
+ }
+ if (traverserPassed) {
+ // TODO: trim off internal traversal labels from path
+ return IteratorUtils.of(traverser);
+ }
+ }
+ }
+
+ @Override
+ protected Iterator<Traverser<S>> computerAlgorithm() throws NoSuchElementException {
+ final Traverser<S> traverser = this.starts.next();
+ final Path path = traverser.path();
+ for (int i = 0; i < this.andTraversals.size(); i++) {
+ if (path.hasLabel(this.startLabels.get(i)) && !path.hasLabel(this.traversalLabels.get(i))) {
+ traverser.asAdmin().setStepId(this.andTraversals.get(i).getStartStep().getId());
+ return IteratorUtils.of(traverser);
+ }
+ }
+ // TODO: trim off internal traversal labels from path
+ traverser.asAdmin().setStepId(this.getNextStep().getId());
+ return IteratorUtils.of(traverser);
+ }
+
+ @Override
public int hashCode() {
- return super.hashCode() ^ this.andTraversals.hashCode();
+ int result = super.hashCode();
+ for(final Traversal.Admin<Object,Object> andTraversal : this.andTraversals) {
+ result ^= andTraversal.hashCode();
+ }
+ return result;
}
@Override
http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/blob/15e3f77c/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/util/ComputerAwareStep.java
----------------------------------------------------------------------
diff --git a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/util/ComputerAwareStep.java b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/util/ComputerAwareStep.java
index 4b79d4c..a4bb6d5 100644
--- a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/util/ComputerAwareStep.java
+++ b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/util/ComputerAwareStep.java
@@ -68,14 +68,18 @@ public abstract class ComputerAwareStep<S, E> extends AbstractStep<S, E> impleme
public class EndStep extends AbstractStep<S, S> implements EngineDependent {
- public EndStep(final Traversal.Admin traversal) {
+ private final boolean returnHome;
+
+ public EndStep(final Traversal.Admin traversal, final boolean returnHome) {
super(traversal);
+ this.returnHome = returnHome;
}
@Override
protected Traverser<S> processNextStart() throws NoSuchElementException {
final Traverser.Admin<S> start = this.starts.next();
- if (this.traverserStepIdSetByChild) start.setStepId(ComputerAwareStep.this.getNextStep().getId());
+ if (this.traverserStepIdSetByChild)
+ start.setStepId(this.returnHome ? ComputerAwareStep.this.getId() : ComputerAwareStep.this.getNextStep().getId());
return start;
}
http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/blob/15e3f77c/tinkergraph-gremlin/src/test/java/org/apache/tinkerpop/gremlin/tinkergraph/structure/TinkerGraphTest.java
----------------------------------------------------------------------
diff --git a/tinkergraph-gremlin/src/test/java/org/apache/tinkerpop/gremlin/tinkergraph/structure/TinkerGraphTest.java b/tinkergraph-gremlin/src/test/java/org/apache/tinkerpop/gremlin/tinkergraph/structure/TinkerGraphTest.java
index 54a66a3..0871251 100644
--- a/tinkergraph-gremlin/src/test/java/org/apache/tinkerpop/gremlin/tinkergraph/structure/TinkerGraphTest.java
+++ b/tinkergraph-gremlin/src/test/java/org/apache/tinkerpop/gremlin/tinkergraph/structure/TinkerGraphTest.java
@@ -20,6 +20,7 @@ package org.apache.tinkerpop.gremlin.tinkergraph.structure;
import org.apache.tinkerpop.gremlin.process.traversal.Operator;
import org.apache.tinkerpop.gremlin.process.traversal.P;
+import org.apache.tinkerpop.gremlin.process.traversal.Pop;
import org.apache.tinkerpop.gremlin.process.traversal.Traversal;
import org.apache.tinkerpop.gremlin.process.traversal.dsl.graph.GraphTraversalSource;
import org.apache.tinkerpop.gremlin.structure.*;
@@ -154,11 +155,11 @@ public class TinkerGraphTest {
@Test
@Ignore
public void testPlay5() throws Exception {
- GraphTraversalSource g = TinkerFactory.createModern().traversal();
+ GraphTraversalSource g = TinkerFactory.createModern().traversal(GraphTraversalSource.computer());
g.V().as("a").xmatch(
as("a").out("knows").as("b"),
as("a").out("created").as("c"),
- as("b").out("created").as("c")).select("a","b","c").forEachRemaining(System.out::println);
+ as("b").out("created").as("c")).select(Pop.head,"a","b","c").forEachRemaining(System.out::println);
}
@Test