You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@tinkerpop.apache.org by ok...@apache.org on 2015/05/18 18:17:37 UTC
incubator-tinkerpop git commit: WhereStep is smart to use the
traverser object and not the get() form.
Repository: incubator-tinkerpop
Updated Branches:
refs/heads/master 3918972c5 -> 0170a369b
WhereStep is smart to use the traverser object and not the get() form.
Project: http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/commit/0170a369
Tree: http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/tree/0170a369
Diff: http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/diff/0170a369
Branch: refs/heads/master
Commit: 0170a369b820003d24e90437836c5680808a26fc
Parents: 3918972
Author: Marko A. Rodriguez <ok...@gmail.com>
Authored: Mon May 18 10:17:30 2015 -0600
Committer: Marko A. Rodriguez <ok...@gmail.com>
Committed: Mon May 18 10:17:38 2015 -0600
----------------------------------------------------------------------
.../gremlin/process/traversal/step/filter/WhereStep.java | 10 +++++++---
.../traversal/step/util/TraversalBiPredicate.java | 11 ++++++++++-
.../gremlin/process/traversal/util/TraversalUtil.java | 7 +++++--
3 files changed, 22 insertions(+), 6 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/blob/0170a369/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 ea3528b..01b8c33 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
@@ -72,16 +72,16 @@ public final class WhereStep<S> extends FilterStep<S> implements TraversalParent
final Object endObject;
if (this.noStartAndEndKeys()) {
- startObject = traverser.get();
+ startObject = getStartObject(traverser);
endObject = null;
} else {
if (Scope.local == this.scope) {
final Map<String, Object> map = (Map<String, Object>) traverser.get();
- startObject = null == this.startKey ? traverser.get() : map.get(this.startKey);
+ startObject = null == this.startKey ? getStartObject(traverser) : map.get(this.startKey);
endObject = null == this.endKey ? null : map.get(this.endKey);
} else {
final Path path = traverser.path();
- startObject = null == this.startKey ? traverser.get() : path.hasLabel(this.startKey) ? path.get(this.startKey) : traverser.sideEffects(this.startKey);
+ startObject = null == this.startKey ? getStartObject(traverser) : path.hasLabel(this.startKey) ? path.get(this.startKey) : traverser.sideEffects(this.startKey);
endObject = null == this.endKey ? null : path.hasLabel(this.endKey) ? path.get(this.endKey) : traverser.sideEffects(this.endKey);
}
}
@@ -126,4 +126,8 @@ public final class WhereStep<S> extends FilterStep<S> implements TraversalParent
private boolean noStartAndEndKeys() {
return null == this.endKey && null == this.startKey;
}
+
+ private Object getStartObject(final Traverser<S> traverser) {
+ return this.predicate.getBiPredicate() instanceof TraversalBiPredicate ? traverser : traverser.get();
+ }
}
http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/blob/0170a369/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/util/TraversalBiPredicate.java
----------------------------------------------------------------------
diff --git a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/util/TraversalBiPredicate.java b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/util/TraversalBiPredicate.java
index bfa8071..6218576 100644
--- a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/util/TraversalBiPredicate.java
+++ b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/util/TraversalBiPredicate.java
@@ -22,6 +22,7 @@
package org.apache.tinkerpop.gremlin.process.traversal.step.util;
import org.apache.tinkerpop.gremlin.process.traversal.Traversal;
+import org.apache.tinkerpop.gremlin.process.traversal.Traverser;
import org.apache.tinkerpop.gremlin.process.traversal.util.TraversalUtil;
import java.util.function.BiPredicate;
@@ -43,7 +44,15 @@ public final class TraversalBiPredicate<S, E> implements BiPredicate<S, E>, Clon
public boolean test(final S start, final E end) {
if (null == start)
throw new IllegalArgumentException("The traversal must be provided a start: " + this.traversal);
- final boolean result = null == end ? TraversalUtil.test(start, this.traversal) : TraversalUtil.test(start, this.traversal, end);
+ final boolean result;
+ if (start instanceof Traverser)
+ result = null == end ?
+ TraversalUtil.test(((Traverser<S>) start).asAdmin(), this.traversal) :
+ TraversalUtil.test(((Traverser<S>) start).asAdmin(), this.traversal, end);
+ else
+ result = null == end ?
+ TraversalUtil.test(start, this.traversal) :
+ TraversalUtil.test(start, this.traversal, end);
return this.negate ? !result : result;
}
http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/blob/0170a369/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/util/TraversalUtil.java
----------------------------------------------------------------------
diff --git a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/util/TraversalUtil.java b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/util/TraversalUtil.java
index 625ea7f..6928459 100644
--- a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/util/TraversalUtil.java
+++ b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/util/TraversalUtil.java
@@ -18,6 +18,7 @@
*/
package org.apache.tinkerpop.gremlin.process.traversal.util;
+import org.apache.tinkerpop.gremlin.process.traversal.Step;
import org.apache.tinkerpop.gremlin.process.traversal.Traversal;
import org.apache.tinkerpop.gremlin.process.traversal.Traverser;
@@ -50,8 +51,9 @@ public final class TraversalUtil {
split.setBulk(1l);
traversal.reset();
traversal.addStart(split);
+ final Step<?, E> endStep = traversal.getEndStep();
while (traversal.hasNext()) {
- if (traversal.next().equals(end))
+ if (endStep.next().get().equals(end))
return true;
}
return false;
@@ -85,8 +87,9 @@ public final class TraversalUtil {
public static final <S, E> boolean test(final S start, final Traversal.Admin<S, E> traversal, final E end) {
traversal.reset();
traversal.addStart(traversal.getTraverserGenerator().generate(start, traversal.getStartStep(), 1l));
+ final Step<?, E> endStep = traversal.getEndStep();
while (traversal.hasNext()) {
- if (traversal.next().equals(end))
+ if (endStep.next().get().equals(end))
return true;
}
return false;