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 2016/02/19 17:26:40 UTC

[09/27] incubator-tinkerpop git commit: added ColumnTraversal for Order-based column selection. Added more test cases to LambdaRestrictionStrategyTest. Split the test suite into 'allowed' and 'not allowed' traversals so its easier to test the scope of wh

added ColumnTraversal for Order-based column selection. Added more test cases to LambdaRestrictionStrategyTest. Split the test suite into 'allowed' and 'not allowed' traversals so its easier to test the scope of what is considered 'lambda'.


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

Branch: refs/heads/master
Commit: d06329eef60bf01da072f107b411d8554ec79203
Parents: c3eb653
Author: Marko A. Rodriguez <ok...@gmail.com>
Authored: Tue Feb 16 09:42:57 2016 -0700
Committer: Marko A. Rodriguez <ok...@gmail.com>
Committed: Tue Feb 16 09:42:57 2016 -0700

----------------------------------------------------------------------
 .../traversal/dsl/graph/GraphTraversal.java     | 10 ++++
 .../traversal/lambda/ColumnTraversal.java       | 60 ++++++++++++++++++++
 .../process/traversal/step/ByModulating.java    |  8 +++
 .../LambdaRestrictionStrategyTest.java          | 42 +++++++++-----
 4 files changed, 106 insertions(+), 14 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/blob/d06329ee/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 5b93182..ca903e6 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
@@ -1223,6 +1223,16 @@ public interface GraphTraversal<S, E> extends Traversal<S, E> {
         return this;
     }
 
+    /*public default <V> GraphTraversal<S, E> by(final Column column, final Comparator<V> comparator) {
+        ((ByModulating) this.asAdmin().getEndStep()).modulateBy(column, comparator);
+        return this;
+    }
+
+    public default <V> GraphTraversal<S, E> by(final T token, final Comparator<V> comparator) {
+        ((ByModulating) this.asAdmin().getEndStep()).modulateBy(token, comparator);
+        return this;
+    }*/
+
     public default <U> GraphTraversal<S, E> by(final Function<U, Object> function, final Comparator comparator) {
         ((ByModulating) this.asAdmin().getEndStep()).modulateBy(function, comparator);
         return this;

http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/blob/d06329ee/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/lambda/ColumnTraversal.java
----------------------------------------------------------------------
diff --git a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/lambda/ColumnTraversal.java b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/lambda/ColumnTraversal.java
new file mode 100644
index 0000000..5913011
--- /dev/null
+++ b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/lambda/ColumnTraversal.java
@@ -0,0 +1,60 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+package org.apache.tinkerpop.gremlin.process.traversal.lambda;
+
+import org.apache.tinkerpop.gremlin.process.traversal.Traverser;
+import org.apache.tinkerpop.gremlin.structure.Column;
+
+/**
+ * @author Marko A. Rodriguez (http://markorodriguez.com)
+ */
+public final class ColumnTraversal extends AbstractLambdaTraversal {
+
+    private Object selection;
+    private final Column column;
+
+    public ColumnTraversal(final Column column) {
+        this.column = column;
+    }
+
+    @Override
+    public Object next() {
+        return this.selection;
+    }
+
+    @Override
+    public void addStart(final Traverser start) {
+        this.selection = this.column.apply(start.get());
+    }
+
+    @Override
+    public String toString() {
+        return this.column.toString();
+    }
+
+    public Column getColumn() {
+        return this.column;
+    }
+
+    @Override
+    public int hashCode() {
+        return this.getClass().hashCode() ^ this.column.hashCode();
+    }
+}

http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/blob/d06329ee/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/ByModulating.java
----------------------------------------------------------------------
diff --git a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/ByModulating.java b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/ByModulating.java
index 6b8b344..f1eccd9 100644
--- a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/ByModulating.java
+++ b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/ByModulating.java
@@ -22,10 +22,12 @@ package org.apache.tinkerpop.gremlin.process.traversal.step;
 import org.apache.tinkerpop.gremlin.process.traversal.Order;
 import org.apache.tinkerpop.gremlin.process.traversal.Traversal;
 import org.apache.tinkerpop.gremlin.process.traversal.dsl.graph.__;
+import org.apache.tinkerpop.gremlin.process.traversal.lambda.ColumnTraversal;
 import org.apache.tinkerpop.gremlin.process.traversal.lambda.ElementValueTraversal;
 import org.apache.tinkerpop.gremlin.process.traversal.lambda.FunctionTraverser;
 import org.apache.tinkerpop.gremlin.process.traversal.lambda.IdentityTraversal;
 import org.apache.tinkerpop.gremlin.process.traversal.lambda.TokenTraversal;
+import org.apache.tinkerpop.gremlin.structure.Column;
 import org.apache.tinkerpop.gremlin.structure.T;
 
 import java.util.Comparator;
@@ -81,9 +83,15 @@ public interface ByModulating {
         this.modulateBy(new TokenTraversal<>(t), comparator);
     }
 
+    public default void modulateBy(final Column column, final Comparator comparator) {
+        this.modulateBy(new ColumnTraversal(column), comparator);
+    }
+
     public default void modulateBy(final Function function, final Comparator comparator) {
         if (function instanceof T)
             this.modulateBy((T) function, comparator);
+        else if (function instanceof Column)
+            this.modulateBy((Column) function, comparator);
         else
             this.modulateBy(__.map(new FunctionTraverser<>(function)).asAdmin(), comparator);
     }

http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/blob/d06329ee/gremlin-core/src/test/java/org/apache/tinkerpop/gremlin/process/traversal/strategy/verification/LambdaRestrictionStrategyTest.java
----------------------------------------------------------------------
diff --git a/gremlin-core/src/test/java/org/apache/tinkerpop/gremlin/process/traversal/strategy/verification/LambdaRestrictionStrategyTest.java b/gremlin-core/src/test/java/org/apache/tinkerpop/gremlin/process/traversal/strategy/verification/LambdaRestrictionStrategyTest.java
index 857d06b..53693c2 100644
--- a/gremlin-core/src/test/java/org/apache/tinkerpop/gremlin/process/traversal/strategy/verification/LambdaRestrictionStrategyTest.java
+++ b/gremlin-core/src/test/java/org/apache/tinkerpop/gremlin/process/traversal/strategy/verification/LambdaRestrictionStrategyTest.java
@@ -18,12 +18,15 @@
  */
 package org.apache.tinkerpop.gremlin.process.traversal.strategy.verification;
 
+import org.apache.tinkerpop.gremlin.process.traversal.Order;
 import org.apache.tinkerpop.gremlin.process.traversal.Scope;
 import org.apache.tinkerpop.gremlin.process.traversal.Traversal;
 import org.apache.tinkerpop.gremlin.process.traversal.TraversalStrategies;
 import org.apache.tinkerpop.gremlin.process.traversal.Traverser;
 import org.apache.tinkerpop.gremlin.process.traversal.dsl.graph.__;
 import org.apache.tinkerpop.gremlin.process.traversal.util.DefaultTraversalStrategies;
+import org.apache.tinkerpop.gremlin.structure.Column;
+import org.apache.tinkerpop.gremlin.structure.T;
 import org.junit.Test;
 import org.junit.runner.RunWith;
 import org.junit.runners.Parameterized;
@@ -42,15 +45,19 @@ public class LambdaRestrictionStrategyTest {
     @Parameterized.Parameters(name = "{0}")
     public static Iterable<Object[]> data() {
         return Arrays.asList(new Object[][]{
-                {"filter(x->true)", __.filter(x -> true)},
-                {"map(Traverser::get)", __.map(Traverser::get)},
+                {"filter(x->true)", __.filter(x -> true), false},
+                {"map(Traverser::get)", __.map(Traverser::get), false},
                 {"sideEffect(x -> {int i = 1+1;})", __.sideEffect(x -> {
                     int i = 1 + 1;
-                })},
-                {"select('a','b').by(Object::toString)", __.select("a", "b").by(Object::toString)},
-                {"order().by((a,b)->a.compareTo(b))", __.order().by((a, b) -> ((Integer) a).compareTo((Integer) b))},
-                {"order(local).by((a,b)->a.compareTo(b))", __.order(Scope.local).by((a, b) -> ((Integer) a).compareTo((Integer) b))},
-                {"__.choose(v->v.toString().equals(\"marko\"),__.out(),__.in())", __.choose(v -> v.toString().equals("marko"), __.out(), __.in())},
+                }), false},
+                {"select('a','b').by(Object::toString)", __.select("a", "b").by(Object::toString), false},
+                {"order().by((a,b)->a.compareTo(b))", __.order().by((a, b) -> ((Integer) a).compareTo((Integer) b)), false},
+                {"order(local).by((a,b)->a.compareTo(b))", __.order(Scope.local).by((a, b) -> ((Integer) a).compareTo((Integer) b)), false},
+                {"__.choose(v->v.toString().equals(\"marko\"),__.out(),__.in())", __.choose(v -> v.toString().equals("marko"), __.out(), __.in()), false},
+                //
+                {"order(local).by(values,decr)", __.order(Scope.local).by(Column.values, Order.decr), true},
+                {"order().by(label,decr)", __.order().by(T.label, Order.decr), true},
+                {"groupCount().by(label)", __.groupCount().by(T.label), true},
         });
     }
 
@@ -60,16 +67,23 @@ public class LambdaRestrictionStrategyTest {
     @Parameterized.Parameter(value = 1)
     public Traversal traversal;
 
+    @Parameterized.Parameter(value = 2)
+    public boolean allow;
+
     @Test
     public void shouldBeVerifiedIllegal() {
-        try {
-            final TraversalStrategies strategies = new DefaultTraversalStrategies();
-            strategies.addStrategies(LambdaRestrictionStrategy.instance());
-            traversal.asAdmin().setStrategies(strategies);
+        final TraversalStrategies strategies = new DefaultTraversalStrategies();
+        strategies.addStrategies(LambdaRestrictionStrategy.instance());
+        traversal.asAdmin().setStrategies(strategies);
+        if (allow) {
             traversal.asAdmin().applyStrategies();
-            fail("The strategy should not allow lambdas: " + this.traversal);
-        } catch (VerificationException ise) {
-            assertTrue(ise.getMessage().contains("lambda"));
+        } else {
+            try {
+                traversal.asAdmin().applyStrategies();
+                fail("The strategy should not allow lambdas: " + this.traversal);
+            } catch (VerificationException ise) {
+                assertTrue(ise.getMessage().contains("lambda"));
+            }
         }
     }
 }