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;