You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@tinkerpop.apache.org by dk...@apache.org on 2015/05/05 20:57:39 UTC

[1/9] incubator-tinkerpop git commit: implemented HalfStepTraversalStrategy

Repository: incubator-tinkerpop
Updated Branches:
  refs/heads/master 32140a132 -> 3ef39624d


implemented HalfStepTraversalStrategy


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

Branch: refs/heads/master
Commit: a98b2dbaabbdd0f98da4551fb6b5e3411d1abcec
Parents: 3a3f4d3
Author: Daniel Kuppitz <da...@hotmail.com>
Authored: Mon May 4 18:14:26 2015 +0200
Committer: Daniel Kuppitz <da...@hotmail.com>
Committed: Mon May 4 18:14:26 2015 +0200

----------------------------------------------------------------------
 .../process/traversal/TraversalStrategies.java  | 17 +----
 .../optimization/HalfStepTraversalStrategy.java | 77 ++++++++++++++++++++
 .../tinkergraph/structure/TinkerGraphTest.java  | 21 +-----
 3 files changed, 84 insertions(+), 31 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/blob/a98b2dba/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/TraversalStrategies.java
----------------------------------------------------------------------
diff --git a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/TraversalStrategies.java b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/TraversalStrategies.java
index 077cc9c..1a8fec1 100644
--- a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/TraversalStrategies.java
+++ b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/TraversalStrategies.java
@@ -19,12 +19,7 @@
 package org.apache.tinkerpop.gremlin.process.traversal;
 
 import org.apache.tinkerpop.gremlin.process.computer.util.ShellGraph;
-import org.apache.tinkerpop.gremlin.process.traversal.strategy.optimization.ConjunctionStrategy;
-import org.apache.tinkerpop.gremlin.process.traversal.strategy.optimization.DedupOptimizerStrategy;
-import org.apache.tinkerpop.gremlin.process.traversal.strategy.optimization.IdentityRemovalStrategy;
-import org.apache.tinkerpop.gremlin.process.traversal.strategy.optimization.MatchWhereStrategy;
-import org.apache.tinkerpop.gremlin.process.traversal.strategy.optimization.ProfileStrategy;
-import org.apache.tinkerpop.gremlin.process.traversal.strategy.optimization.RangeByIsCountStrategy;
+import org.apache.tinkerpop.gremlin.process.traversal.strategy.optimization.*;
 import org.apache.tinkerpop.gremlin.process.traversal.strategy.verification.ComparatorHolderRemovalStrategy;
 import org.apache.tinkerpop.gremlin.process.traversal.strategy.verification.EngineDependentStrategy;
 import org.apache.tinkerpop.gremlin.process.traversal.strategy.verification.LabeledEndStepStrategy;
@@ -36,14 +31,7 @@ import org.apache.tinkerpop.gremlin.structure.util.empty.EmptyGraph;
 import org.apache.tinkerpop.gremlin.util.tools.MultiMap;
 
 import java.io.Serializable;
-import java.util.ArrayList;
-import java.util.Collections;
-import java.util.Comparator;
-import java.util.HashMap;
-import java.util.HashSet;
-import java.util.List;
-import java.util.Map;
-import java.util.Set;
+import java.util.*;
 
 /**
  * @author Marko A. Rodriguez (http://markorodriguez.com)
@@ -161,6 +149,7 @@ public interface TraversalStrategies extends Serializable, Cloneable {
             coreStrategies.addStrategies(
                     DedupOptimizerStrategy.instance(),
                     RangeByIsCountStrategy.instance(),
+                    HalfStepTraversalStrategy.instance(),
                     IdentityRemovalStrategy.instance(),
                     MatchWhereStrategy.instance(),
                     ComparatorHolderRemovalStrategy.instance(),

http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/blob/a98b2dba/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/strategy/optimization/HalfStepTraversalStrategy.java
----------------------------------------------------------------------
diff --git a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/strategy/optimization/HalfStepTraversalStrategy.java b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/strategy/optimization/HalfStepTraversalStrategy.java
new file mode 100644
index 0000000..13aa824
--- /dev/null
+++ b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/strategy/optimization/HalfStepTraversalStrategy.java
@@ -0,0 +1,77 @@
+/*
+ * 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.strategy.optimization;
+
+import org.apache.tinkerpop.gremlin.process.traversal.Step;
+import org.apache.tinkerpop.gremlin.process.traversal.Traversal;
+import org.apache.tinkerpop.gremlin.process.traversal.TraversalStrategy;
+import org.apache.tinkerpop.gremlin.process.traversal.step.TraversalParent;
+import org.apache.tinkerpop.gremlin.process.traversal.step.filter.HasTraversalStep;
+import org.apache.tinkerpop.gremlin.process.traversal.step.filter.RangeGlobalStep;
+import org.apache.tinkerpop.gremlin.process.traversal.step.map.CountGlobalStep;
+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.VertexStep;
+import org.apache.tinkerpop.gremlin.process.traversal.strategy.AbstractTraversalStrategy;
+import org.apache.tinkerpop.gremlin.process.traversal.util.TraversalHelper;
+import org.apache.tinkerpop.gremlin.structure.Edge;
+import org.apache.tinkerpop.gremlin.structure.Vertex;
+
+/**
+ * @author Daniel Kuppitz (http://gremlin.guru)
+ */
+public class HalfStepTraversalStrategy extends AbstractTraversalStrategy implements TraversalStrategy {
+
+    private static final HalfStepTraversalStrategy INSTANCE = new HalfStepTraversalStrategy();
+
+    private HalfStepTraversalStrategy() {
+    }
+
+    @Override
+    public void apply(Traversal.Admin<?, ?> traversal) {
+        final int size = traversal.getSteps().size() - 1;
+        Step prev = null;
+        for (int i = 0; i <= size; i++) {
+            final Step curr = traversal.getSteps().get(i);
+            VertexStep stepToReplace = null;
+            if (i == size && curr instanceof VertexStep && Vertex.class.equals(((VertexStep) curr).getReturnClass())) {
+                final TraversalParent parent = curr.getTraversal().getParent();
+                if (parent instanceof HasTraversalStep) {
+                    stepToReplace = (VertexStep) curr;
+                }
+            } else if (prev instanceof VertexStep && Vertex.class.equals(((VertexStep) prev).getReturnClass())) {
+                if (curr instanceof CountGlobalStep ||
+                        ((curr instanceof SelectStep || curr instanceof SelectOneStep) && prev.getLabels().isEmpty())) {
+                    stepToReplace = (VertexStep) prev;
+                }
+            }
+            if (stepToReplace != null) {
+                TraversalHelper.replaceStep(stepToReplace, new VertexStep(traversal, Edge.class, stepToReplace.getDirection(),
+                        stepToReplace.getEdgeLabels()), traversal);
+            }
+            if (!(curr instanceof RangeGlobalStep)) {
+                prev = curr;
+            }
+        }
+    }
+
+    public static HalfStepTraversalStrategy instance() {
+        return INSTANCE;
+    }
+}

http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/blob/a98b2dba/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 599c70f..c9670cc 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
@@ -28,13 +28,12 @@ import org.junit.Test;
 
 import java.util.Arrays;
 import java.util.List;
-import java.util.Map;
 import java.util.Set;
 import java.util.function.Supplier;
 
-import static org.apache.tinkerpop.gremlin.process.traversal.Scope.local;
 import static org.apache.tinkerpop.gremlin.process.traversal.dsl.graph.__.*;
-import static org.junit.Assert.*;
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertTrue;
 
 /**
  * @author Marko A. Rodriguez (http://markorodriguez.com)
@@ -143,21 +142,9 @@ public class TinkerGraphTest {
     public void testPlayDK() throws Exception {
         final Graph graph = TinkerFactory.createModern();
         final GraphTraversalSource g = graph.traversal();
-        final Traversal<Vertex, Map<String, Object>> traversal = g.V().hasLabel("software").as("name").as("language").as("creators").
-                select().by("name").by("lang").by(__.in("created").values("name").fold().order(local));
+        final Traversal traversal = g.V().hasNot(out());
+        traversal.iterate();
         System.out.println(traversal.toString());
-        for (int i = 0; i < 2; i++) {
-            assertTrue(traversal.hasNext());
-            final Map<String, Object> map = traversal.next();
-            assertEquals(3, map.size());
-            final List<String> creators = (List<String>) map.get("creators");
-            final boolean isLop = "lop".equals(map.get("name")) && "java".equals(map.get("language")) &&
-                    creators.size() == 3 && creators.get(0).equals("josh") && creators.get(1).equals("marko") && creators.get(2).equals("peter");
-            final boolean isRipple = "ripple".equals(map.get("name")) && "java".equals(map.get("language")) &&
-                    creators.size() == 1 && creators.get(0).equals("josh");
-            assertTrue(isLop ^ isRipple);
-        }
-        assertFalse(traversal.hasNext());
     }
 
     @Test


[8/9] incubator-tinkerpop git commit: Merge branch 'master' into TINKERPOP3-654

Posted by dk...@apache.org.
Merge branch 'master' into TINKERPOP3-654


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

Branch: refs/heads/master
Commit: f37724c78d5d1c31a3e2da065b5912aae2ba73c6
Parents: dbd927f 7a1a3aa
Author: Daniel Kuppitz <da...@hotmail.com>
Authored: Tue May 5 20:48:30 2015 +0200
Committer: Daniel Kuppitz <da...@hotmail.com>
Committed: Tue May 5 20:48:30 2015 +0200

----------------------------------------------------------------------
 .../process/traversal/TraversalStrategy.java    | 22 +++++++++++++++++++-
 1 file changed, 21 insertions(+), 1 deletion(-)
----------------------------------------------------------------------



[4/9] incubator-tinkerpop git commit: added HalfStepTraversalStrategy tests

Posted by dk...@apache.org.
added HalfStepTraversalStrategy tests


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

Branch: refs/heads/master
Commit: d20151fb5bcfaca171a4d9626096b69e9656ca28
Parents: 3db5851
Author: Daniel Kuppitz <da...@hotmail.com>
Authored: Tue May 5 14:14:03 2015 +0200
Committer: Daniel Kuppitz <da...@hotmail.com>
Committed: Tue May 5 14:14:03 2015 +0200

----------------------------------------------------------------------
 .../HalfStepTraversalStrategyTest.java          | 130 +++++++++++++++++++
 1 file changed, 130 insertions(+)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/blob/d20151fb/gremlin-core/src/test/java/org/apache/tinkerpop/gremlin/process/traversal/strategy/optimization/HalfStepTraversalStrategyTest.java
----------------------------------------------------------------------
diff --git a/gremlin-core/src/test/java/org/apache/tinkerpop/gremlin/process/traversal/strategy/optimization/HalfStepTraversalStrategyTest.java b/gremlin-core/src/test/java/org/apache/tinkerpop/gremlin/process/traversal/strategy/optimization/HalfStepTraversalStrategyTest.java
new file mode 100644
index 0000000..67c62d3
--- /dev/null
+++ b/gremlin-core/src/test/java/org/apache/tinkerpop/gremlin/process/traversal/strategy/optimization/HalfStepTraversalStrategyTest.java
@@ -0,0 +1,130 @@
+/*
+ * 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.strategy.optimization;
+
+import org.apache.tinkerpop.gremlin.process.traversal.Traversal;
+import org.apache.tinkerpop.gremlin.process.traversal.TraversalEngine;
+import org.apache.tinkerpop.gremlin.process.traversal.TraversalStrategies;
+import org.apache.tinkerpop.gremlin.process.traversal.dsl.graph.__;
+import org.apache.tinkerpop.gremlin.process.traversal.util.DefaultTraversalStrategies;
+import org.junit.Before;
+import org.junit.Test;
+import org.junit.experimental.runners.Enclosed;
+import org.junit.runner.RunWith;
+import org.junit.runners.Parameterized;
+
+import java.util.Arrays;
+
+import static org.junit.Assert.assertEquals;
+import static org.mockito.Mockito.mock;
+import static org.mockito.Mockito.when;
+
+/**
+ * @author Daniel Kuppitz (http://gremlin.guru)
+ */
+@RunWith(Enclosed.class)
+public class HalfStepTraversalStrategyTest {
+
+    @RunWith(Parameterized.class)
+    public static class StandardTest extends AbstractHalfStepTraversalStrategyTest {
+
+        @Parameterized.Parameters(name = "{0}")
+        public static Iterable<Object[]> data() {
+            return generateTestParameters();
+        }
+
+        @Parameterized.Parameter(value = 0)
+        public Traversal original;
+
+        @Parameterized.Parameter(value = 1)
+        public Traversal optimized;
+
+        @Before
+        public void setup() {
+            this.traversalEngine = mock(TraversalEngine.class);
+            when(this.traversalEngine.getType()).thenReturn(TraversalEngine.Type.STANDARD);
+        }
+
+        @Test
+        public void shouldApplyStrategy() {
+            doTest(original, optimized);
+        }
+    }
+
+    @RunWith(Parameterized.class)
+    public static class ComputerTest extends AbstractHalfStepTraversalStrategyTest {
+
+        @Parameterized.Parameters(name = "{0}")
+        public static Iterable<Object[]> data() {
+            return generateTestParameters();
+        }
+
+        @Parameterized.Parameter(value = 0)
+        public Traversal original;
+
+        @Parameterized.Parameter(value = 1)
+        public Traversal optimized;
+
+        @Before
+        public void setup() {
+            this.traversalEngine = mock(TraversalEngine.class);
+            when(this.traversalEngine.getType()).thenReturn(TraversalEngine.Type.COMPUTER);
+        }
+
+        @Test
+        public void shouldApplyStrategy() {
+            doTest(original, optimized);
+        }
+    }
+
+    private static abstract class AbstractHalfStepTraversalStrategyTest {
+
+        protected TraversalEngine traversalEngine;
+
+        void applyHalfStepTraversalStrategy(final Traversal traversal) {
+            final TraversalStrategies strategies = new DefaultTraversalStrategies();
+            strategies.addStrategies(HalfStepTraversalStrategy.instance());
+
+            traversal.asAdmin().setStrategies(strategies);
+            traversal.asAdmin().applyStrategies();
+            traversal.asAdmin().setEngine(traversalEngine);
+        }
+
+        public void doTest(final Traversal traversal, final Traversal optimized) {
+            applyHalfStepTraversalStrategy(traversal);
+            assertEquals(optimized.toString(), traversal.toString());
+        }
+
+        static Iterable<Object[]> generateTestParameters() {
+
+            return Arrays.asList(new Traversal[][]{
+                    {__.out().count(), __.outE().count()},
+                    {__.in().count(), __.inE().count()},
+                    {__.both().count(), __.bothE().count()},
+                    {__.out("knows").count(), __.outE("knows").count()},
+                    {__.out("knows", "likes").count(), __.outE("knows", "likes").count()},
+                    {__.has(__.out()), __.has(__.outE())},
+                    {__.hasNot(__.out()), __.hasNot(__.outE())},
+                    {__.has(__.out("knows")), __.has(__.outE("knows"))},
+                    {__.values().count(), __.properties().count()},
+                    {__.values("name").count(), __.properties("name").count()},
+                    {__.has(__.values()), __.has(__.properties())}});
+        }
+    }
+}


[2/9] incubator-tinkerpop git commit: don't optimize .select() in HalfStepTraversalStrategy

Posted by dk...@apache.org.
don't optimize .select() in HalfStepTraversalStrategy


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

Branch: refs/heads/master
Commit: f16fa5f154a483867ce9b867a678506cfb99e5fc
Parents: a98b2db
Author: Daniel Kuppitz <da...@hotmail.com>
Authored: Mon May 4 19:10:43 2015 +0200
Committer: Daniel Kuppitz <da...@hotmail.com>
Committed: Mon May 4 19:10:43 2015 +0200

----------------------------------------------------------------------
 .../strategy/optimization/HalfStepTraversalStrategy.java        | 5 +----
 1 file changed, 1 insertion(+), 4 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/blob/f16fa5f1/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/strategy/optimization/HalfStepTraversalStrategy.java
----------------------------------------------------------------------
diff --git a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/strategy/optimization/HalfStepTraversalStrategy.java b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/strategy/optimization/HalfStepTraversalStrategy.java
index 13aa824..dd4aa0b 100644
--- a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/strategy/optimization/HalfStepTraversalStrategy.java
+++ b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/strategy/optimization/HalfStepTraversalStrategy.java
@@ -25,8 +25,6 @@ import org.apache.tinkerpop.gremlin.process.traversal.step.TraversalParent;
 import org.apache.tinkerpop.gremlin.process.traversal.step.filter.HasTraversalStep;
 import org.apache.tinkerpop.gremlin.process.traversal.step.filter.RangeGlobalStep;
 import org.apache.tinkerpop.gremlin.process.traversal.step.map.CountGlobalStep;
-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.VertexStep;
 import org.apache.tinkerpop.gremlin.process.traversal.strategy.AbstractTraversalStrategy;
 import org.apache.tinkerpop.gremlin.process.traversal.util.TraversalHelper;
@@ -56,8 +54,7 @@ public class HalfStepTraversalStrategy extends AbstractTraversalStrategy impleme
                     stepToReplace = (VertexStep) curr;
                 }
             } else if (prev instanceof VertexStep && Vertex.class.equals(((VertexStep) prev).getReturnClass())) {
-                if (curr instanceof CountGlobalStep ||
-                        ((curr instanceof SelectStep || curr instanceof SelectOneStep) && prev.getLabels().isEmpty())) {
+                if (curr instanceof CountGlobalStep) {
                     stepToReplace = (VertexStep) prev;
                 }
             }


[5/9] incubator-tinkerpop git commit: Merge branch 'master' into TINKERPOP3-654

Posted by dk...@apache.org.
Merge branch 'master' into TINKERPOP3-654

Resolved Conflicts:
	gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/TraversalStrategies.java


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

Branch: refs/heads/master
Commit: 5602f7a546fa27ea1fba3aecf96d325145894455
Parents: d20151f dda3936
Author: Daniel Kuppitz <da...@hotmail.com>
Authored: Tue May 5 19:34:24 2015 +0200
Committer: Daniel Kuppitz <da...@hotmail.com>
Committed: Tue May 5 19:34:24 2015 +0200

----------------------------------------------------------------------
 CHANGELOG.asciidoc                              |   4 +
 README.asciidoc                                 |   2 +-
 docs/src/gremlin-applications.asciidoc          |  30 ++--
 docs/src/the-traversal.asciidoc                 |  77 ++++++----
 .../process/traversal/TraversalEngine.java      |  54 ++++++-
 .../process/traversal/TraversalStrategies.java  |  56 +++----
 .../process/traversal/TraversalStrategy.java    | 105 ++++++++++++-
 .../dsl/graph/GraphTraversalSource.java         |  26 ++--
 .../engine/ComputerTraversalEngine.java         |  44 +++++-
 .../engine/StandardTraversalEngine.java         |   5 -
 .../traversal/lambda/HasNextTraversal.java      |   9 +-
 .../traversal/step/branch/BranchStep.java       |   2 +-
 .../traversal/step/map/OrderGlobalStep.java     |  25 +++-
 .../traversal/step/map/OrderLocalStep.java      |   2 +
 .../step/util/TraversalComparator.java          |   4 +
 .../strategy/AbstractTraversalStrategy.java     |   2 +-
 .../decoration/ConjunctionStrategy.java         |  83 +++++++++++
 .../strategy/decoration/ElementIdStrategy.java  |  28 +++-
 .../strategy/decoration/EventStrategy.java      |   3 +-
 .../decoration/LabeledEndStepStrategy.java      |  51 +++++++
 .../strategy/decoration/PartitionStrategy.java  |   3 +-
 .../strategy/decoration/SubgraphStrategy.java   |   3 +-
 .../finalization/EngineDependentStrategy.java   |  46 ++++++
 .../strategy/finalization/ProfileStrategy.java  |  91 ++++++++++++
 .../ComparatorHolderRemovalStrategy.java        |  55 +++++++
 .../optimization/ConjunctionStrategy.java       |  83 -----------
 .../optimization/DedupBijectionStrategy.java    |  76 ++++++++++
 .../optimization/DedupOptimizerStrategy.java    |  75 ----------
 .../optimization/IdentityRemovalStrategy.java   |   3 +-
 .../optimization/MatchWhereStrategy.java        |   6 +-
 .../strategy/optimization/ProfileStrategy.java  | 115 ---------------
 .../optimization/RangeByIsCountStrategy.java    |   4 +-
 .../ComparatorHolderRemovalStrategy.java        |  54 -------
 .../ComputerVerificationStrategy.java           |  75 ++++++++++
 .../verification/EngineDependentStrategy.java   |  46 ------
 .../verification/LabeledEndStepStrategy.java    |  50 -------
 .../verification/LambdaRestrictionStrategy.java |   3 +-
 .../strategy/verification/ReadOnlyStrategy.java |   3 +-
 .../TraversalVerificationStrategy.java          |  72 ---------
 .../traversal/util/DefaultTraversal.java        |   6 +-
 .../util/DefaultTraversalStrategies.java        |  12 +-
 .../util/EmptyTraversalStrategies.java          |   4 +-
 .../tinkerpop/gremlin/structure/Graph.java      |   4 +
 .../gremlin/structure/io/gryo/GryoPool.java     |  63 +++++++-
 .../gremlin/structure/util/GraphFactory.java    |   2 +-
 .../gremlin/structure/util/star/StarGraph.java  |   2 +
 .../process/TraversalStrategiesTest.java        | 111 +++++++++++---
 .../gremlin/structure/io/gryo/GryoPoolTest.java | 147 +++++++++++++++++++
 .../tinkerpop/gremlin/driver/Handler.java       |  12 +-
 .../driver/message/ResponseStatusCode.java      |  23 +--
 .../gremlin/server/handler/IteratorHandler.java |   6 +-
 .../handler/NioGremlinResponseEncoder.java      |  29 +---
 .../handler/WsGremlinResponseEncoder.java       |  25 +---
 .../server/op/AbstractEvalOpProcessor.java      |  18 ++-
 .../server/GremlinServerIntegrateTest.java      |  42 ++----
 .../hadoop/structure/io/VertexWritable.java     |  10 +-
 .../io/graphson/GraphSONRecordReader.java       |  13 +-
 .../structure/io/gryo/GryoRecordReader.java     |  15 +-
 .../gremlin/hadoop/HadoopGraphProvider.java     |  10 +-
 .../optimization/TinkerGraphStepStrategy.java   |  20 ++-
 60 files changed, 1263 insertions(+), 786 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/blob/5602f7a5/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/TraversalStrategies.java
----------------------------------------------------------------------
diff --cc gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/TraversalStrategies.java
index 1a8fec1,2e59d72..2cad898
--- a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/TraversalStrategies.java
+++ b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/TraversalStrategies.java
@@@ -19,11 -19,16 +19,12 @@@
  package org.apache.tinkerpop.gremlin.process.traversal;
  
  import org.apache.tinkerpop.gremlin.process.computer.util.ShellGraph;
+ import org.apache.tinkerpop.gremlin.process.traversal.strategy.decoration.ConjunctionStrategy;
+ import org.apache.tinkerpop.gremlin.process.traversal.strategy.decoration.LabeledEndStepStrategy;
+ import org.apache.tinkerpop.gremlin.process.traversal.strategy.finalization.EngineDependentStrategy;
+ import org.apache.tinkerpop.gremlin.process.traversal.strategy.finalization.ProfileStrategy;
 -import org.apache.tinkerpop.gremlin.process.traversal.strategy.optimization.ComparatorHolderRemovalStrategy;
 -import org.apache.tinkerpop.gremlin.process.traversal.strategy.optimization.DedupBijectionStrategy;
 -import org.apache.tinkerpop.gremlin.process.traversal.strategy.optimization.IdentityRemovalStrategy;
 -import org.apache.tinkerpop.gremlin.process.traversal.strategy.optimization.MatchWhereStrategy;
 -import org.apache.tinkerpop.gremlin.process.traversal.strategy.optimization.RangeByIsCountStrategy;
 +import org.apache.tinkerpop.gremlin.process.traversal.strategy.optimization.*;
- import org.apache.tinkerpop.gremlin.process.traversal.strategy.verification.ComparatorHolderRemovalStrategy;
- import org.apache.tinkerpop.gremlin.process.traversal.strategy.verification.EngineDependentStrategy;
- import org.apache.tinkerpop.gremlin.process.traversal.strategy.verification.LabeledEndStepStrategy;
- import org.apache.tinkerpop.gremlin.process.traversal.strategy.verification.TraversalVerificationStrategy;
+ import org.apache.tinkerpop.gremlin.process.traversal.strategy.verification.ComputerVerificationStrategy;
  import org.apache.tinkerpop.gremlin.process.traversal.traverser.TraverserGeneratorFactory;
  import org.apache.tinkerpop.gremlin.process.traversal.util.DefaultTraversalStrategies;
  import org.apache.tinkerpop.gremlin.structure.Graph;
@@@ -147,18 -158,18 +148,19 @@@ public interface TraversalStrategies ex
          static {
              final TraversalStrategies coreStrategies = new DefaultTraversalStrategies();
              coreStrategies.addStrategies(
-                     DedupOptimizerStrategy.instance(),
-                     RangeByIsCountStrategy.instance(),
+                     ConjunctionStrategy.instance(),
 +                    HalfStepTraversalStrategy.instance(),
-                     IdentityRemovalStrategy.instance(),
-                     MatchWhereStrategy.instance(),
-                     ComparatorHolderRemovalStrategy.instance(),
                      LabeledEndStepStrategy.instance(),
-                     //LambdaRestrictionStrategy.instance(),
                      EngineDependentStrategy.instance(),
                      ProfileStrategy.instance(),
-                     TraversalVerificationStrategy.instance(),
-                     ConjunctionStrategy.instance());
+                     ComparatorHolderRemovalStrategy.instance(),
+                     DedupBijectionStrategy.instance(),
+                     IdentityRemovalStrategy.instance(),
+                     MatchWhereStrategy.instance(),
+                     RangeByIsCountStrategy.instance(),
+                     ComputerVerificationStrategy.instance());
+             //LambdaRestrictionStrategy.instance(),
+ 
              CACHE.put(Graph.class, coreStrategies.clone());
              CACHE.put(EmptyGraph.class, new DefaultTraversalStrategies());
          }


[7/9] incubator-tinkerpop git commit: removed optimization from HalfStepTraversalStrategy that broke SubgraphStrategy in some cases

Posted by dk...@apache.org.
removed optimization from HalfStepTraversalStrategy that broke SubgraphStrategy in some cases


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

Branch: refs/heads/master
Commit: dbd927f58c17f6160fb6a9b83fbbbbf2a89778d3
Parents: 70300e4
Author: Daniel Kuppitz <da...@hotmail.com>
Authored: Tue May 5 20:39:10 2015 +0200
Committer: Daniel Kuppitz <da...@hotmail.com>
Committed: Tue May 5 20:39:10 2015 +0200

----------------------------------------------------------------------
 .../strategy/optimization/HalfStepTraversalStrategy.java     | 8 ++------
 .../strategy/optimization/HalfStepTraversalStrategyTest.java | 4 +---
 2 files changed, 3 insertions(+), 9 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/blob/dbd927f5/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/strategy/optimization/HalfStepTraversalStrategy.java
----------------------------------------------------------------------
diff --git a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/strategy/optimization/HalfStepTraversalStrategy.java b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/strategy/optimization/HalfStepTraversalStrategy.java
index dc3ac20..ed37344 100644
--- a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/strategy/optimization/HalfStepTraversalStrategy.java
+++ b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/strategy/optimization/HalfStepTraversalStrategy.java
@@ -56,15 +56,11 @@ public class HalfStepTraversalStrategy extends AbstractTraversalStrategy<Travers
                 if (parent instanceof HasTraversalStep) {
                     stepToReplace = curr;
                 }
-            } else if (prev instanceof VertexStep && Vertex.class.equals(((VertexStep) prev).getReturnClass())) {
+            } else if (prev instanceof VertexStep && Vertex.class.equals(((VertexStep) prev).getReturnClass()) ||
+                    prev instanceof PropertiesStep && PropertyType.VALUE.equals(((PropertiesStep) prev).getReturnType())) {
                 if (curr instanceof CountGlobalStep) {
                     stepToReplace = prev;
                 }
-            } else if (curr instanceof CountGlobalStep) {
-                if (prev instanceof VertexStep && Vertex.class.equals(((VertexStep) prev).getReturnClass()) ||
-                        prev instanceof PropertiesStep && PropertyType.VALUE.equals(((PropertiesStep) prev).getReturnType())) {
-                    stepToReplace = prev;
-                }
             }
             if (stepToReplace instanceof VertexStep) {
                 final VertexStep vs = (VertexStep) stepToReplace;

http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/blob/dbd927f5/gremlin-core/src/test/java/org/apache/tinkerpop/gremlin/process/traversal/strategy/optimization/HalfStepTraversalStrategyTest.java
----------------------------------------------------------------------
diff --git a/gremlin-core/src/test/java/org/apache/tinkerpop/gremlin/process/traversal/strategy/optimization/HalfStepTraversalStrategyTest.java b/gremlin-core/src/test/java/org/apache/tinkerpop/gremlin/process/traversal/strategy/optimization/HalfStepTraversalStrategyTest.java
index ad3a861..67c62d3 100644
--- a/gremlin-core/src/test/java/org/apache/tinkerpop/gremlin/process/traversal/strategy/optimization/HalfStepTraversalStrategyTest.java
+++ b/gremlin-core/src/test/java/org/apache/tinkerpop/gremlin/process/traversal/strategy/optimization/HalfStepTraversalStrategyTest.java
@@ -124,9 +124,7 @@ public class HalfStepTraversalStrategyTest {
                     {__.has(__.out("knows")), __.has(__.outE("knows"))},
                     {__.values().count(), __.properties().count()},
                     {__.values("name").count(), __.properties("name").count()},
-                    {__.has(__.values()), __.has(__.properties())}/*,
-                    {__.outE().inV().count(), __.outE().count()},
-                    {__.has(__.outE().inV()), __.has(__.outE())}*/});
+                    {__.has(__.values()), __.has(__.properties())}});
         }
     }
 }


[6/9] incubator-tinkerpop git commit: use new TraversalStrategy model

Posted by dk...@apache.org.
use new TraversalStrategy model


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

Branch: refs/heads/master
Commit: 70300e41eca9c59af15f36682c1f29f2993ca632
Parents: 5602f7a
Author: Daniel Kuppitz <da...@hotmail.com>
Authored: Tue May 5 19:44:29 2015 +0200
Committer: Daniel Kuppitz <da...@hotmail.com>
Committed: Tue May 5 19:44:29 2015 +0200

----------------------------------------------------------------------
 .../strategy/optimization/HalfStepTraversalStrategy.java         | 2 +-
 .../strategy/optimization/HalfStepTraversalStrategyTest.java     | 4 +++-
 2 files changed, 4 insertions(+), 2 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/blob/70300e41/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/strategy/optimization/HalfStepTraversalStrategy.java
----------------------------------------------------------------------
diff --git a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/strategy/optimization/HalfStepTraversalStrategy.java b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/strategy/optimization/HalfStepTraversalStrategy.java
index 42c5dc8..dc3ac20 100644
--- a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/strategy/optimization/HalfStepTraversalStrategy.java
+++ b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/strategy/optimization/HalfStepTraversalStrategy.java
@@ -36,7 +36,7 @@ import org.apache.tinkerpop.gremlin.structure.Vertex;
 /**
  * @author Daniel Kuppitz (http://gremlin.guru)
  */
-public class HalfStepTraversalStrategy extends AbstractTraversalStrategy implements TraversalStrategy {
+public class HalfStepTraversalStrategy extends AbstractTraversalStrategy<TraversalStrategy.OptimizationStrategy> implements TraversalStrategy.OptimizationStrategy {
 
     private static final HalfStepTraversalStrategy INSTANCE = new HalfStepTraversalStrategy();
 

http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/blob/70300e41/gremlin-core/src/test/java/org/apache/tinkerpop/gremlin/process/traversal/strategy/optimization/HalfStepTraversalStrategyTest.java
----------------------------------------------------------------------
diff --git a/gremlin-core/src/test/java/org/apache/tinkerpop/gremlin/process/traversal/strategy/optimization/HalfStepTraversalStrategyTest.java b/gremlin-core/src/test/java/org/apache/tinkerpop/gremlin/process/traversal/strategy/optimization/HalfStepTraversalStrategyTest.java
index 67c62d3..ad3a861 100644
--- a/gremlin-core/src/test/java/org/apache/tinkerpop/gremlin/process/traversal/strategy/optimization/HalfStepTraversalStrategyTest.java
+++ b/gremlin-core/src/test/java/org/apache/tinkerpop/gremlin/process/traversal/strategy/optimization/HalfStepTraversalStrategyTest.java
@@ -124,7 +124,9 @@ public class HalfStepTraversalStrategyTest {
                     {__.has(__.out("knows")), __.has(__.outE("knows"))},
                     {__.values().count(), __.properties().count()},
                     {__.values("name").count(), __.properties("name").count()},
-                    {__.has(__.values()), __.has(__.properties())}});
+                    {__.has(__.values()), __.has(__.properties())}/*,
+                    {__.outE().inV().count(), __.outE().count()},
+                    {__.has(__.outE().inV()), __.has(__.outE())}*/});
         }
     }
 }


[3/9] incubator-tinkerpop git commit: optimized HalfStepTraversalStrategy

Posted by dk...@apache.org.
optimized HalfStepTraversalStrategy


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

Branch: refs/heads/master
Commit: 3db58510f4279c5fe1e5ffa953c94717b2cb7785
Parents: f16fa5f
Author: Daniel Kuppitz <da...@hotmail.com>
Authored: Tue May 5 14:13:20 2015 +0200
Committer: Daniel Kuppitz <da...@hotmail.com>
Committed: Tue May 5 14:13:20 2015 +0200

----------------------------------------------------------------------
 .../optimization/HalfStepTraversalStrategy.java | 26 ++++++++++++++------
 1 file changed, 19 insertions(+), 7 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/blob/3db58510/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/strategy/optimization/HalfStepTraversalStrategy.java
----------------------------------------------------------------------
diff --git a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/strategy/optimization/HalfStepTraversalStrategy.java b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/strategy/optimization/HalfStepTraversalStrategy.java
index dd4aa0b..42c5dc8 100644
--- a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/strategy/optimization/HalfStepTraversalStrategy.java
+++ b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/strategy/optimization/HalfStepTraversalStrategy.java
@@ -25,10 +25,12 @@ import org.apache.tinkerpop.gremlin.process.traversal.step.TraversalParent;
 import org.apache.tinkerpop.gremlin.process.traversal.step.filter.HasTraversalStep;
 import org.apache.tinkerpop.gremlin.process.traversal.step.filter.RangeGlobalStep;
 import org.apache.tinkerpop.gremlin.process.traversal.step.map.CountGlobalStep;
+import org.apache.tinkerpop.gremlin.process.traversal.step.map.PropertiesStep;
 import org.apache.tinkerpop.gremlin.process.traversal.step.map.VertexStep;
 import org.apache.tinkerpop.gremlin.process.traversal.strategy.AbstractTraversalStrategy;
 import org.apache.tinkerpop.gremlin.process.traversal.util.TraversalHelper;
 import org.apache.tinkerpop.gremlin.structure.Edge;
+import org.apache.tinkerpop.gremlin.structure.PropertyType;
 import org.apache.tinkerpop.gremlin.structure.Vertex;
 
 /**
@@ -47,20 +49,30 @@ public class HalfStepTraversalStrategy extends AbstractTraversalStrategy impleme
         Step prev = null;
         for (int i = 0; i <= size; i++) {
             final Step curr = traversal.getSteps().get(i);
-            VertexStep stepToReplace = null;
-            if (i == size && curr instanceof VertexStep && Vertex.class.equals(((VertexStep) curr).getReturnClass())) {
+            Step stepToReplace = null;
+            if (i == size && ((curr instanceof VertexStep && Vertex.class.equals(((VertexStep) curr).getReturnClass())) ||
+                    (curr instanceof PropertiesStep && PropertyType.VALUE.equals(((PropertiesStep) curr).getReturnType())))) {
                 final TraversalParent parent = curr.getTraversal().getParent();
                 if (parent instanceof HasTraversalStep) {
-                    stepToReplace = (VertexStep) curr;
+                    stepToReplace = curr;
                 }
             } else if (prev instanceof VertexStep && Vertex.class.equals(((VertexStep) prev).getReturnClass())) {
                 if (curr instanceof CountGlobalStep) {
-                    stepToReplace = (VertexStep) prev;
+                    stepToReplace = prev;
+                }
+            } else if (curr instanceof CountGlobalStep) {
+                if (prev instanceof VertexStep && Vertex.class.equals(((VertexStep) prev).getReturnClass()) ||
+                        prev instanceof PropertiesStep && PropertyType.VALUE.equals(((PropertiesStep) prev).getReturnType())) {
+                    stepToReplace = prev;
                 }
             }
-            if (stepToReplace != null) {
-                TraversalHelper.replaceStep(stepToReplace, new VertexStep(traversal, Edge.class, stepToReplace.getDirection(),
-                        stepToReplace.getEdgeLabels()), traversal);
+            if (stepToReplace instanceof VertexStep) {
+                final VertexStep vs = (VertexStep) stepToReplace;
+                TraversalHelper.replaceStep(stepToReplace, new VertexStep(traversal, Edge.class, vs.getDirection(),
+                        vs.getEdgeLabels()), traversal);
+            } else if (stepToReplace instanceof PropertiesStep) {
+                final PropertiesStep ps = (PropertiesStep) stepToReplace;
+                TraversalHelper.replaceStep(stepToReplace, new PropertiesStep(traversal, PropertyType.PROPERTY, ps.getPropertyKeys()), traversal);
             }
             if (!(curr instanceof RangeGlobalStep)) {
                 prev = curr;


[9/9] incubator-tinkerpop git commit: Merge branch 'master' of https://git-wip-us.apache.org/repos/asf/incubator-tinkerpop

Posted by dk...@apache.org.
Merge branch 'master' of https://git-wip-us.apache.org/repos/asf/incubator-tinkerpop


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

Branch: refs/heads/master
Commit: 3ef39624de4a78f9b1da2abea3449e41deef54eb
Parents: f37724c 32140a1
Author: Daniel Kuppitz <da...@hotmail.com>
Authored: Tue May 5 20:57:10 2015 +0200
Committer: Daniel Kuppitz <da...@hotmail.com>
Committed: Tue May 5 20:57:10 2015 +0200

----------------------------------------------------------------------
 docs/src/implementations.asciidoc              | 129 ++++----------------
 hadoop-gremlin/conf/hadoop-graphson.properties |   2 +-
 hadoop-gremlin/conf/hadoop-gryo.properties     |   2 +-
 3 files changed, 26 insertions(+), 107 deletions(-)
----------------------------------------------------------------------