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(-)
----------------------------------------------------------------------