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/09 20:16:01 UTC

incubator-tinkerpop git commit: WhereStep simplified by making use of SelectOneStep in as('a').out... patterns. Removed the multi-label capabilities of WhereStep as it is not well tested, documented, and just needs more thought.

Repository: incubator-tinkerpop
Updated Branches:
  refs/heads/master 1c2efeeae -> 4cd492af7


WhereStep simplified by making use of SelectOneStep in as('a').out... patterns. Removed the multi-label capabilities of WhereStep as it is not well tested, documented, and just needs more thought.


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

Branch: refs/heads/master
Commit: 4cd492af736dc17f6db0bd4f34d678542ac27e57
Parents: 1c2efee
Author: Marko A. Rodriguez <ok...@gmail.com>
Authored: Tue Jun 9 12:15:34 2015 -0600
Committer: Marko A. Rodriguez <ok...@gmail.com>
Committed: Tue Jun 9 12:15:43 2015 -0600

----------------------------------------------------------------------
 CHANGELOG.asciidoc                              |   1 +
 .../traversal/step/filter/WhereStep.java        | 113 +++++++------------
 .../optimization/MatchWhereStrategy.java        |  15 +++
 .../process/traversal/util/TraversalP.java      |   2 -
 .../process/traversal/util/TraversalUtil.java   |  37 ------
 .../traversal/step/filter/WhereStepTest.java    |  18 +--
 .../step/filter/GroovyWhereTest.groovy          |   4 +-
 .../traversal/step/filter/WhereTest.java        |  10 +-
 .../tinkergraph/structure/TinkerGraphTest.java  |   5 +-
 9 files changed, 71 insertions(+), 134 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/blob/4cd492af/CHANGELOG.asciidoc
----------------------------------------------------------------------
diff --git a/CHANGELOG.asciidoc b/CHANGELOG.asciidoc
index 5ca461c..4e61785 100644
--- a/CHANGELOG.asciidoc
+++ b/CHANGELOG.asciidoc
@@ -25,6 +25,7 @@ image::http://www.tinkerpop.com/docs/current/images/gremlin-hindu.png[width=225]
 TinkerPop 3.0.0.GA (NOT OFFICIALLY RELEASED YET)
 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
 
+* `WhereStep` now uses a `SelectOneStep` for `as('a').out()...` forms as this ensures `Traverser` (and metadata) propagation.
 * Renamed `KeyStep` to `PropertyKeyStep` to be consistent with `PropertyValueStep`.
 * Added `Gremlin-Lib-Paths` to modify paths in plugin `lib` directory.
 * Modified the capabilities of `Gremlin-Plugin-Paths` to delete paths that have no value on the right-hand-side of the equals sign.

http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/blob/4cd492af/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 51c9647..6823e58 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
@@ -20,16 +20,18 @@ package org.apache.tinkerpop.gremlin.process.traversal.step.filter;
 
 import org.apache.tinkerpop.gremlin.process.traversal.P;
 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.Scoping;
 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.sideEffect.StartStep;
 import org.apache.tinkerpop.gremlin.process.traversal.traverser.TraverserRequirement;
+import org.apache.tinkerpop.gremlin.process.traversal.util.TraversalHelper;
 import org.apache.tinkerpop.gremlin.process.traversal.util.TraversalP;
-import org.apache.tinkerpop.gremlin.process.traversal.util.TraversalUtil;
 import org.apache.tinkerpop.gremlin.structure.util.StringFactory;
 
-import java.util.ArrayList;
 import java.util.Collection;
 import java.util.HashSet;
 import java.util.List;
@@ -42,13 +44,9 @@ import java.util.Set;
 public final class WhereStep<S> extends FilterStep<S> implements TraversalParent, Scoping {
 
     protected P<Object> predicate;
-    protected final Set<String> startKeys = new HashSet<>();
-    protected final Set<String> endKeys = new HashSet<>();
     protected String startKey;
     protected String endKey;
     protected Scope scope;
-    protected boolean multiKeyedTraversal;
-
 
     public WhereStep(final Traversal.Admin traversal, final Scope scope, final Optional<String> startKey, final P<?> predicate) {
         super(traversal);
@@ -56,18 +54,22 @@ public final class WhereStep<S> extends FilterStep<S> implements TraversalParent
         this.predicate = (P) predicate;
         if (!this.predicate.getTraversals().isEmpty()) {
             final Traversal.Admin<?, ?> whereTraversal = predicate.getTraversals().get(0);
-            if (whereTraversal.getStartStep().getLabels().size() > 1 || whereTraversal.getEndStep().getLabels().size() > 1) {
-                this.multiKeyedTraversal = true;
-                this.startKeys.addAll(whereTraversal.getStartStep().getLabels());
-                this.endKeys.addAll(whereTraversal.getEndStep().getLabels());
-            } else {
-                this.multiKeyedTraversal = false;
-                this.startKey = whereTraversal.getStartStep().getLabels().isEmpty() ? null : whereTraversal.getStartStep().getLabels().iterator().next();
-                this.endKey = whereTraversal.getEndStep().getLabels().isEmpty() ? null : whereTraversal.getEndStep().getLabels().iterator().next();
+            //// START STEP
+            final Step<?, ?> startStep = whereTraversal.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);
+                TraversalHelper.replaceStep(whereTraversal.getStartStep(), new SelectOneStep<>(whereTraversal, scope, this.startKey = startStep.getLabels().iterator().next()), whereTraversal);
+            }
+            //// END STEP
+            final Step<?, ?> endStep = whereTraversal.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);
+                this.endKey = endStep.getLabels().iterator().next();
             }
             this.predicate.getTraversals().forEach(this::integrateChild);
         } else {
-            this.multiKeyedTraversal = false;
             this.startKey = startKey.orElse(null);
             this.endKey = (String) (this.predicate.getValue() instanceof Collection ? ((Collection) this.predicate.getValue()).iterator().next() : this.predicate.getValue());
         }
@@ -79,7 +81,20 @@ public final class WhereStep<S> extends FilterStep<S> implements TraversalParent
 
     @Override
     protected boolean filter(final Traverser.Admin<S> traverser) {
-        return this.multiKeyedTraversal ? this.doMultiKeyFilter(traverser) : this.doSingleKeyFilter(traverser);
+        if (this.predicate instanceof TraversalP) {
+            return this.predicate.getBiPredicate().test(traverser, this.getOptionalScopeValueByKey(this.endKey, traverser).orElse(null));
+        } else {
+            final Object startObject = null == this.startKey ? traverser.get() : this.getOptionalScopeValueByKey(this.startKey, traverser).orElse(null);
+            if (null == startObject) return false;
+            final Object endObject;
+            if (null == this.endKey) {
+                endObject = null;
+            } else {
+                endObject = this.getOptionalScopeValueByKey(this.endKey, traverser).orElse(null);
+                if (null == endObject) return false;
+            }
+            return this.predicate.getBiPredicate().test(startObject, endObject);
+        }
     }
 
     @Override
@@ -89,21 +104,16 @@ public final class WhereStep<S> extends FilterStep<S> implements TraversalParent
 
     @Override
     public String toString() {
-        return StringFactory.stepString(this, this.scope, this.multiKeyedTraversal ? this.startKeys : this.startKey, this.predicate);
+        return StringFactory.stepString(this, this.scope, this.startKey, this.predicate);
     }
 
     @Override
     public Set<String> getScopeKeys() {
         final Set<String> keys = new HashSet<>();
-        if(this.multiKeyedTraversal) {
-            keys.addAll(this.startKeys);
-            keys.addAll(this.endKeys);
-        } else {
-            if (null != this.startKey)
-                keys.add(this.startKey);
-            if (null != this.endKey)
-                keys.add(this.endKey);
-        }
+        if (null != this.startKey)
+            keys.add(this.startKey);
+        if (null != this.endKey)
+            keys.add(this.endKey);
         return keys;
 
     }
@@ -125,7 +135,7 @@ public final class WhereStep<S> extends FilterStep<S> implements TraversalParent
 
     @Override
     public Set<TraverserRequirement> getRequirements() {
-        return this.getSelfAndChildRequirements(Scope.local == this.scope || this.noStartAndEndKeys() ?
+        return this.getSelfAndChildRequirements(Scope.local == this.scope || (this.endKey == null && this.startKey == null) ?
                 new TraverserRequirement[]{TraverserRequirement.OBJECT, TraverserRequirement.SIDE_EFFECTS} :
                 new TraverserRequirement[]{TraverserRequirement.OBJECT, TraverserRequirement.PATH, TraverserRequirement.SIDE_EFFECTS});
     }
@@ -133,6 +143,11 @@ public final class WhereStep<S> extends FilterStep<S> implements TraversalParent
     @Override
     public void setScope(final Scope scope) {
         this.scope = scope;
+        if (this.predicate instanceof TraversalP) {
+            final Step startStep = this.predicate.getTraversals().get(0).getStartStep();
+            if (startStep instanceof Scoping)
+                ((Scoping) startStep).setScope(scope);
+        }
     }
 
     @Override
@@ -144,48 +159,4 @@ public final class WhereStep<S> extends FilterStep<S> implements TraversalParent
     public Scope recommendNextScope() {
         return this.scope;
     }
-
-    private boolean noStartAndEndKeys() {
-        return this.multiKeyedTraversal ? this.endKeys.isEmpty() && this.startKeys.isEmpty() : this.endKey == null && this.startKey == null;
-    }
-
-    private Object getStartObject(final Traverser.Admin<S> traverser) {
-        return this.predicate instanceof TraversalP ? traverser : traverser.get();
-    }
-
-    private boolean doSingleKeyFilter(final Traverser.Admin<S> traverser) {
-        if (this.noStartAndEndKeys()) {
-            return this.predicate.getBiPredicate().test(getStartObject(traverser), null);
-        } else {
-            final Object startObject = null == this.startKey ? getStartObject(traverser) : this.getOptionalScopeValueByKey(this.startKey, traverser).orElse(null);
-            if (null == startObject) return false;
-            final Object endObject;
-            if (null == this.endKey) {
-                endObject = null;
-            } else {
-                endObject = this.getOptionalScopeValueByKey(this.endKey, traverser).orElse(null);
-                if (null == endObject) return false;
-            }
-            return this.predicate.getBiPredicate().test(startObject, endObject);
-        }
-    }
-
-    private boolean doMultiKeyFilter(final Traverser.Admin<S> traverser) {
-        // TODO: getOptionalScopeValueByKey()
-        final List<Object> startObjects = new ArrayList<>();
-        final List<Object> endObjects = new ArrayList<>();
-
-        if (this.startKeys.isEmpty())
-            startObjects.add(traverser.get());
-        else {
-            for (final String startKey : this.startKeys) {
-                startObjects.add(this.getScopeValueByKey(startKey, traverser));
-            }
-        }
-        for (final String endKey : this.endKeys) {
-            endObjects.add(this.getScopeValueByKey(endKey, traverser));
-        }
-
-        return this.predicate.getBiPredicate().test(new TraversalUtil.Multiple<>(startObjects), endObjects.isEmpty() ? null : new TraversalUtil.Multiple<>(endObjects));
-    }
 }

http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/blob/4cd492af/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/strategy/optimization/MatchWhereStrategy.java
----------------------------------------------------------------------
diff --git a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/strategy/optimization/MatchWhereStrategy.java b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/strategy/optimization/MatchWhereStrategy.java
index c4d7ce2..071afab 100644
--- a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/strategy/optimization/MatchWhereStrategy.java
+++ b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/strategy/optimization/MatchWhereStrategy.java
@@ -25,6 +25,7 @@ import org.apache.tinkerpop.gremlin.process.traversal.step.filter.WhereStep;
 import org.apache.tinkerpop.gremlin.process.traversal.step.map.SelectOneStep;
 import org.apache.tinkerpop.gremlin.process.traversal.step.map.SelectStep;
 import org.apache.tinkerpop.gremlin.process.traversal.step.map.match.MatchStep;
+import org.apache.tinkerpop.gremlin.process.traversal.step.sideEffect.StartStep;
 import org.apache.tinkerpop.gremlin.process.traversal.strategy.AbstractTraversalStrategy;
 import org.apache.tinkerpop.gremlin.process.traversal.util.TraversalHelper;
 
@@ -68,6 +69,7 @@ public final class MatchWhereStrategy extends AbstractTraversalStrategy<Traversa
             while (currentStep instanceof WhereStep || currentStep instanceof SelectStep || currentStep instanceof SelectOneStep) {
                 if (currentStep instanceof WhereStep) {
                     if (!((WhereStep) currentStep).getLocalChildren().isEmpty()) {
+                        MatchWhereStrategy.convertWhereSelectOneStepToStartStep((WhereStep<?>) currentStep);
                         matchStep.addTraversal(((WhereStep<?>) currentStep).getLocalChildren().get(0));
                         traversal.removeStep(currentStep);
                     } else {
@@ -95,4 +97,17 @@ public final class MatchWhereStrategy extends AbstractTraversalStrategy<Traversa
         return PRIORS;
     }
 
+    // HACK: until MatchStep gets some work done on it.
+    private static void convertWhereSelectOneStepToStartStep(final WhereStep<?> whereStep) {
+        if (!whereStep.getLocalChildren().isEmpty()) {
+            final Traversal.Admin<?, ?> traversal = whereStep.getLocalChildren().get(0);
+            if (traversal.getStartStep() instanceof SelectOneStep) {
+                final SelectOneStep<?, ?> selectOneStep = (SelectOneStep) traversal.getStartStep();
+                final StartStep startStep = new StartStep(traversal);
+                startStep.addLabel(selectOneStep.getScopeKeys().iterator().next());
+                TraversalHelper.replaceStep(selectOneStep, startStep, traversal);
+            }
+        }
+    }
+
 }

http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/blob/4cd492af/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/util/TraversalP.java
----------------------------------------------------------------------
diff --git a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/util/TraversalP.java b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/util/TraversalP.java
index 002f550..3422ca9 100644
--- a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/util/TraversalP.java
+++ b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/util/TraversalP.java
@@ -112,8 +112,6 @@ public final class TraversalP<S, E> extends P<E> {
             final boolean result;
             if (start instanceof Traverser)
                 result = TraversalUtil.test(((Traverser<S>) start).asAdmin(), traversalP.traversal, end);
-            else if (start instanceof TraversalUtil.Multiple)
-                result = TraversalUtil.test((TraversalUtil.Multiple<S>) start, traversalP.traversal, (TraversalUtil.Multiple<E>) end);
             else
                 result = TraversalUtil.test(start, traversalP.traversal, end);
             return traversalP.negate ? !result : result;

http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/blob/4cd492af/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 8459524..82c567b 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
@@ -22,8 +22,6 @@ 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 java.util.Collection;
-import java.util.Iterator;
 import java.util.NoSuchElementException;
 
 /**
@@ -101,25 +99,6 @@ public final class TraversalUtil {
         return false;
     }
 
-    public static final <S, E> boolean test(final Multiple<S> start, final Traversal.Admin<S, E> traversal, final Multiple<E> end) {
-        if (null == end) return TraversalUtil.test(start, traversal);
-
-        traversal.reset();
-        traversal.addStarts(traversal.getTraverserGenerator().generateIterator(start.iterator(), (Step) traversal.getStartStep(), 1l));
-        final Step<?, E> endStep = traversal.getEndStep();
-        while (traversal.hasNext()) {
-            if (end.contains(endStep.next().get()))
-                return true;
-        }
-        return false;
-    }
-
-    public static final <S, E> boolean test(final Multiple<S> start, final Traversal.Admin<S, E> traversal) {
-        traversal.reset();
-        traversal.addStarts(traversal.getTraverserGenerator().generateIterator(start.iterator(), (Step) traversal.getStartStep(), 1l));
-        return traversal.hasNext();
-    }
-
     public static final <S, E> E applyNullable(final S start, final Traversal.Admin<S, E> traversal) {
         return null == traversal ? (E) start : TraversalUtil.apply(start, traversal);
     }
@@ -129,20 +108,4 @@ public final class TraversalUtil {
         traversal.addStart(traversal.getTraverserGenerator().generate(start, traversal.getStartStep(), 1l));
         return traversal.hasNext(); // filter
     }
-
-    public static class Multiple<S> implements Iterable<S> {
-        private Collection<S> multiple;
-
-        public Multiple(final Collection<S> multiple) {
-            this.multiple = multiple;
-        }
-
-        public Iterator<S> iterator() {
-            return this.multiple.iterator();
-        }
-
-        public boolean contains(final S object) {
-            return this.multiple.contains(object);
-        }
-    }
 }

http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/blob/4cd492af/gremlin-core/src/test/java/org/apache/tinkerpop/gremlin/process/traversal/step/filter/WhereStepTest.java
----------------------------------------------------------------------
diff --git a/gremlin-core/src/test/java/org/apache/tinkerpop/gremlin/process/traversal/step/filter/WhereStepTest.java b/gremlin-core/src/test/java/org/apache/tinkerpop/gremlin/process/traversal/step/filter/WhereStepTest.java
index f1737fa..c30430b 100644
--- a/gremlin-core/src/test/java/org/apache/tinkerpop/gremlin/process/traversal/step/filter/WhereStepTest.java
+++ b/gremlin-core/src/test/java/org/apache/tinkerpop/gremlin/process/traversal/step/filter/WhereStepTest.java
@@ -22,7 +22,6 @@
 package org.apache.tinkerpop.gremlin.process.traversal.step.filter;
 
 import org.apache.tinkerpop.gremlin.process.traversal.Traversal;
-import org.apache.tinkerpop.gremlin.process.traversal.Traversal;
 import org.apache.tinkerpop.gremlin.process.traversal.step.StepTest;
 import org.apache.tinkerpop.gremlin.process.traversal.util.TraversalP;
 import org.junit.Test;
@@ -31,7 +30,8 @@ import java.util.Arrays;
 import java.util.List;
 
 import static org.apache.tinkerpop.gremlin.process.traversal.dsl.graph.__.as;
-import static org.junit.Assert.*;
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertNull;
 
 /**
  * @author Marko A. Rodriguez (http://markorodriguez.com)
@@ -43,28 +43,16 @@ public class WhereStepTest extends StepTest {
     public void shouldHaveProperKeysAndState() {
         Traversal<?, ?> traversal = as("a").out().as("b").where(as("a").out());
         WhereStep<?> whereStep = (WhereStep) traversal.asAdmin().getEndStep();
-        assertFalse(whereStep.multiKeyedTraversal);
-        assertTrue(whereStep.startKeys.isEmpty());
-        assertTrue(whereStep.endKeys.isEmpty());
         assertNull(whereStep.endKey);
         assertEquals("a", whereStep.startKey);
         assertEquals(TraversalP.class, whereStep.predicate.getClass());
-
-        traversal = as("a").out().as("b").where(as("a", "b").out());
-        whereStep = (WhereStep) traversal.asAdmin().getEndStep();
-        assertTrue(whereStep.multiKeyedTraversal);
-        assertTrue(whereStep.startKeys.contains("a") && whereStep.startKeys.contains("b") && whereStep.startKeys.size() == 2);
-        assertTrue(whereStep.endKeys.isEmpty());
-        assertNull(whereStep.endKey);
-        assertNull(whereStep.startKey);
-        assertEquals(TraversalP.class, whereStep.predicate.getClass());
     }
 
     @Override
     public List<Traversal> getTraversals() {
         return Arrays.asList(
                 as("a").out().as("b").where(as("a").out()),
-                as("a").out().as("b").where(as("a", "b").out())
+                as("a").out().as("b").where(as("a").out().as("b"))
         );
     }
 }

http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/blob/4cd492af/gremlin-groovy-test/src/main/groovy/org/apache/tinkerpop/gremlin/process/traversal/step/filter/GroovyWhereTest.groovy
----------------------------------------------------------------------
diff --git a/gremlin-groovy-test/src/main/groovy/org/apache/tinkerpop/gremlin/process/traversal/step/filter/GroovyWhereTest.groovy b/gremlin-groovy-test/src/main/groovy/org/apache/tinkerpop/gremlin/process/traversal/step/filter/GroovyWhereTest.groovy
index e9a6e72..0eefc3e 100644
--- a/gremlin-groovy-test/src/main/groovy/org/apache/tinkerpop/gremlin/process/traversal/step/filter/GroovyWhereTest.groovy
+++ b/gremlin-groovy-test/src/main/groovy/org/apache/tinkerpop/gremlin/process/traversal/step/filter/GroovyWhereTest.groovy
@@ -104,9 +104,9 @@ public abstract class GroovyWhereTest {
             TraversalScriptHelper.compute("g.V.where(not(out('created'))).name", g);
         }
 
-        @Override
+        /*@Override
         public Traversal<Vertex, String> get_g_V_asXaX_outXknowsX_asXbX_whereXasXa__bX_outXcreatedX_hasXname__rippleX_name() {
             TraversalScriptHelper.compute("g.V.as('a').out('knows').as('b').where(__.as('a', 'b').out('created').has('name', 'ripple')).name", g)
-        }
+        }*/
     }
 }

http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/blob/4cd492af/gremlin-test/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/filter/WhereTest.java
----------------------------------------------------------------------
diff --git a/gremlin-test/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/filter/WhereTest.java b/gremlin-test/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/filter/WhereTest.java
index d7c4ad1..f674315 100644
--- a/gremlin-test/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/filter/WhereTest.java
+++ b/gremlin-test/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/filter/WhereTest.java
@@ -81,7 +81,7 @@ public abstract class WhereTest extends AbstractGremlinProcessTest {
 
     // multi-labels
 
-    public abstract Traversal<Vertex, String> get_g_V_asXaX_outXknowsX_asXbX_whereXasXa__bX_outXcreatedX_hasXname__rippleX_name();
+    //public abstract Traversal<Vertex, String> get_g_V_asXaX_outXknowsX_asXbX_whereXasXa__bX_outXcreatedX_hasXname__rippleX_name();
 
     @Test
     @LoadGraphWith(MODERN)
@@ -257,12 +257,12 @@ public abstract class WhereTest extends AbstractGremlinProcessTest {
     }
 
     // multi-labels
-    @Test
+   /* @Test
     @LoadGraphWith(MODERN)
     public void g_V_asXaX_outXknowsX_asXbX_whereXasXa__bX_outXcreatedX_hasXname__rippleX_name() {
         final Traversal<Vertex, String> traversal = get_g_V_asXaX_outXknowsX_asXbX_whereXasXa__bX_outXcreatedX_hasXname__rippleX_name();
         checkResults(Arrays.asList("josh"), traversal);
-    }
+    } */
 
 
     public static class Traversals extends WhereTest {
@@ -337,9 +337,9 @@ public abstract class WhereTest extends AbstractGremlinProcessTest {
 
         // multi-labels
 
-        @Override
+       /* @Override
         public Traversal<Vertex, String> get_g_V_asXaX_outXknowsX_asXbX_whereXasXa__bX_outXcreatedX_hasXname__rippleX_name() {
             return g.V().as("a").out("knows").as("b").where(as("a", "b").out("created").has("name", "ripple")).values("name");
-        }
+        }*/
     }
 }
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/blob/4cd492af/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 0f4c965..5adb115 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
@@ -160,8 +160,9 @@ public class TinkerGraphTest {
         //g.V().label().groupCount().as("x").select().forEachRemaining(System.out::println);
         //g.V().choose(__.outE().count().is(0L), __.as("x"), __.as("y")).select("x", "y").forEachRemaining(System.out::println);
         // g.V().hasLabel("person").values("age").is(P.lt(27).or(P.gt(29))).forEachRemaining(System.out::println);
-        System.out.println(g.V().as("a").out("knows").as("b").where(as("a","b").out("created")).select().by("name"));
-        g.V().as("a").out("knows").as("b").where(as("b").out("created").in("created").as("a","b")).select().by("name").forEachRemaining(System.out::println);
+        //System.out.println(g.V().as("a").out("knows").as("b").where(as("a","b").out("created")).select().by("name"));
+        System.out.println(g.V().as("a").out().as("b").select().where(as("a").out("knows").as("b")).select().by("name").iterate());
+        g.V().as("a").out().as("b").select().where(as("a").out("knows").where(eq("b"))).select().by("name").forEachRemaining(System.out::println);
     }
 
     @Test