You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@tinkerpop.apache.org by ok...@apache.org on 2015/02/11 03:50:08 UTC
[1/5] incubator-tinkerpop git commit: added
FilterByCountOptimizerStrategy
Repository: incubator-tinkerpop
Updated Branches:
refs/heads/master a348e6b51 -> c2553ebea
added FilterByCountOptimizerStrategy
Project: http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/commit/0adb140f
Tree: http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/tree/0adb140f
Diff: http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/diff/0adb140f
Branch: refs/heads/master
Commit: 0adb140fb98134534995f839ff31538de14cb878
Parents: 712b114
Author: Daniel Kuppitz <da...@hotmail.com>
Authored: Tue Feb 10 18:00:44 2015 +0100
Committer: Daniel Kuppitz <da...@hotmail.com>
Committed: Tue Feb 10 18:00:44 2015 +0100
----------------------------------------------------------------------
CHANGELOG.asciidoc | 1 +
.../gremlin/process/TraversalStrategies.java | 14 +--
.../graph/traversal/step/filter/IsStep.java | 8 ++
.../FilterByCountOptimizerStrategy.java | 101 +++++++++++++++++++
4 files changed, 112 insertions(+), 12 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/blob/0adb140f/CHANGELOG.asciidoc
----------------------------------------------------------------------
diff --git a/CHANGELOG.asciidoc b/CHANGELOG.asciidoc
index 1c5eb33..5a64125 100644
--- a/CHANGELOG.asciidoc
+++ b/CHANGELOG.asciidoc
@@ -9,6 +9,7 @@ image::http://www.tinkerpop.com/docs/current/images/gremlin-hindu.png[width=225]
TinkerPop 3.0.0.M8 (Release Date: NOT OFFICIALLY RELEASED YET)
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+* Added `FilterByCountOptimizerStrategy` that adds a `RangeStep` in front of `.count().is(<predicate>, <value>)` to minimize the amount of fetched elements.
* Added `CoalesceStep` / `.coalesce()` that emits the first traversal which emits at least one element.
* Added more syntactic sugar tricks to the Gremlin sugar plugin -- `&`, `|`, `select from`, `gt`, etc.
* `Traversal.Admin` is consistent internal to steps, traversals, strategies, etc. For the user, `Traversal` is all they see.
http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/blob/0adb140f/gremlin-core/src/main/java/com/tinkerpop/gremlin/process/TraversalStrategies.java
----------------------------------------------------------------------
diff --git a/gremlin-core/src/main/java/com/tinkerpop/gremlin/process/TraversalStrategies.java b/gremlin-core/src/main/java/com/tinkerpop/gremlin/process/TraversalStrategies.java
index 7984c26..18c9eb9 100644
--- a/gremlin-core/src/main/java/com/tinkerpop/gremlin/process/TraversalStrategies.java
+++ b/gremlin-core/src/main/java/com/tinkerpop/gremlin/process/TraversalStrategies.java
@@ -19,18 +19,7 @@
package com.tinkerpop.gremlin.process;
import com.tinkerpop.gremlin.process.graph.traversal.__;
-import com.tinkerpop.gremlin.process.graph.traversal.strategy.ComparatorHolderRemovalStrategy;
-import com.tinkerpop.gremlin.process.graph.traversal.strategy.ConjunctionStrategy;
-import com.tinkerpop.gremlin.process.graph.traversal.strategy.DedupOptimizerStrategy;
-import com.tinkerpop.gremlin.process.graph.traversal.strategy.EngineDependentStrategy;
-import com.tinkerpop.gremlin.process.graph.traversal.strategy.IdentityRemovalStrategy;
-import com.tinkerpop.gremlin.process.graph.traversal.strategy.LabeledEndStepStrategy;
-import com.tinkerpop.gremlin.process.graph.traversal.strategy.MatchWhereStrategy;
-import com.tinkerpop.gremlin.process.graph.traversal.strategy.ProfileStrategy;
-import com.tinkerpop.gremlin.process.graph.traversal.strategy.ReducingStrategy;
-import com.tinkerpop.gremlin.process.graph.traversal.strategy.SideEffectCapStrategy;
-import com.tinkerpop.gremlin.process.graph.traversal.strategy.SideEffectRegistrationStrategy;
-import com.tinkerpop.gremlin.process.graph.traversal.strategy.TraversalVerificationStrategy;
+import com.tinkerpop.gremlin.process.graph.traversal.strategy.*;
import com.tinkerpop.gremlin.process.traversal.DefaultTraversalStrategies;
import com.tinkerpop.gremlin.process.traverser.TraverserGeneratorFactory;
import com.tinkerpop.gremlin.structure.Edge;
@@ -166,6 +155,7 @@ public interface TraversalStrategies extends Cloneable {
final TraversalStrategies coreStrategies = new DefaultTraversalStrategies();
coreStrategies.addStrategies(
DedupOptimizerStrategy.instance(),
+ FilterByCountOptimizerStrategy.instance(),
IdentityRemovalStrategy.instance(),
SideEffectCapStrategy.instance(),
MatchWhereStrategy.instance(),
http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/blob/0adb140f/gremlin-core/src/main/java/com/tinkerpop/gremlin/process/graph/traversal/step/filter/IsStep.java
----------------------------------------------------------------------
diff --git a/gremlin-core/src/main/java/com/tinkerpop/gremlin/process/graph/traversal/step/filter/IsStep.java b/gremlin-core/src/main/java/com/tinkerpop/gremlin/process/graph/traversal/step/filter/IsStep.java
index 463e591..991037a 100644
--- a/gremlin-core/src/main/java/com/tinkerpop/gremlin/process/graph/traversal/step/filter/IsStep.java
+++ b/gremlin-core/src/main/java/com/tinkerpop/gremlin/process/graph/traversal/step/filter/IsStep.java
@@ -51,4 +51,12 @@ public final class IsStep<S> extends FilterStep<S> implements Reversible {
public Set<TraverserRequirement> getRequirements() {
return Collections.singleton(TraverserRequirement.OBJECT);
}
+
+ public Object getValue() {
+ return value;
+ }
+
+ public BiPredicate<S, Object> getPredicate() {
+ return predicate;
+ }
}
http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/blob/0adb140f/gremlin-core/src/main/java/com/tinkerpop/gremlin/process/graph/traversal/strategy/FilterByCountOptimizerStrategy.java
----------------------------------------------------------------------
diff --git a/gremlin-core/src/main/java/com/tinkerpop/gremlin/process/graph/traversal/strategy/FilterByCountOptimizerStrategy.java b/gremlin-core/src/main/java/com/tinkerpop/gremlin/process/graph/traversal/strategy/FilterByCountOptimizerStrategy.java
new file mode 100644
index 0000000..293c6cc
--- /dev/null
+++ b/gremlin-core/src/main/java/com/tinkerpop/gremlin/process/graph/traversal/strategy/FilterByCountOptimizerStrategy.java
@@ -0,0 +1,101 @@
+/*
+ * 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 com.tinkerpop.gremlin.process.graph.traversal.strategy;
+
+import com.tinkerpop.gremlin.process.Step;
+import com.tinkerpop.gremlin.process.Traversal;
+import com.tinkerpop.gremlin.process.TraversalEngine;
+import com.tinkerpop.gremlin.process.graph.traversal.step.filter.IsStep;
+import com.tinkerpop.gremlin.process.graph.traversal.step.filter.RangeStep;
+import com.tinkerpop.gremlin.process.graph.traversal.step.map.CountStep;
+import com.tinkerpop.gremlin.process.traversal.util.TraversalHelper;
+import com.tinkerpop.gremlin.structure.Compare;
+
+import java.util.Collection;
+import java.util.Iterator;
+import java.util.function.BiPredicate;
+
+/**
+ * @author Daniel Kuppitz (http://gremlin.guru)
+ */
+public class FilterByCountOptimizerStrategy extends AbstractTraversalStrategy {
+
+ private static final FilterByCountOptimizerStrategy INSTANCE = new FilterByCountOptimizerStrategy();
+
+ private FilterByCountOptimizerStrategy() {
+ }
+
+ @Override
+ public void apply(final Traversal.Admin<?, ?> traversal, final TraversalEngine engine) {
+ final int size = traversal.getSteps().size();
+ Step prev = null;
+ for (int i = 0; i < size; i++) {
+ final Step curr = traversal.getSteps().get(i);
+ if (curr instanceof CountStep && i < size - 1) {
+ final Step next = traversal.getSteps().get(i + 1);
+ if (next instanceof IsStep && !(prev instanceof RangeStep)) { // if a RangeStep was provided, assume that the user knows what he's doing
+ final IsStep isStep = (IsStep) next;
+ final Object value = isStep.getValue();
+ final BiPredicate predicate = isStep.getPredicate();
+ if (value instanceof Number) {
+ final long highRangeOffset;
+ final boolean replaceIsStep;
+ if (predicate.equals(Compare.eq) || predicate.equals(Compare.lte) || predicate.equals(Compare.neq)) {
+ highRangeOffset = 1L;
+ replaceIsStep = false;
+ } else if (predicate.equals(Compare.lt)) {
+ highRangeOffset = 0L;
+ replaceIsStep = false;
+ } else if (predicate.equals(Compare.gt)) {
+ highRangeOffset = 1L;
+ replaceIsStep = true;
+ } else if (predicate.equals(Compare.gte)) {
+ highRangeOffset = 0L;
+ replaceIsStep = true;
+ } else continue;
+
+ final long highRange = ((Number) value).longValue() + highRangeOffset;
+ TraversalHelper.insertBeforeStep(new RangeStep<>(traversal, 0L, highRange), curr, traversal);
+ if (replaceIsStep) {
+ TraversalHelper.replaceStep(isStep, new IsStep<>(traversal, Compare.eq, highRange), traversal);
+ }
+ }
+ if (value instanceof Collection && (predicate.equals(Compare.inside) || predicate.equals(Compare.outside))) {
+ final Iterator iterator = ((Collection) value).iterator();
+ if (iterator.hasNext()) iterator.next();
+ else continue;
+ if (iterator.hasNext()) {
+ final Object high = iterator.next();
+ if (high instanceof Number && !iterator.hasNext()) {
+ final long highRangeOffset = predicate.equals(Compare.inside) ? 0L : 1L;
+ final long highRange = ((Number) high).longValue() + highRangeOffset;
+ TraversalHelper.insertBeforeStep(new RangeStep<>(traversal, 0L, highRange), curr, traversal);
+ }
+ }
+ }
+ }
+ }
+ prev = curr;
+ }
+ }
+
+ public static FilterByCountOptimizerStrategy instance() {
+ return INSTANCE;
+ }
+}
[4/5] incubator-tinkerpop git commit: Merge branch 'master' into
optimize-count-filter
Posted by ok...@apache.org.
Merge branch 'master' into optimize-count-filter
Resolved Conflicts:
CHANGELOG.asciidoc
gremlin-core/src/main/java/com/tinkerpop/gremlin/process/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/6086a596
Tree: http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/tree/6086a596
Diff: http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/diff/6086a596
Branch: refs/heads/master
Commit: 6086a5968d458ed0a27845b306cd497b6ce4d581
Parents: f8bfafc a348e6b
Author: Daniel Kuppitz <da...@hotmail.com>
Authored: Wed Feb 11 03:40:35 2015 +0100
Committer: Daniel Kuppitz <da...@hotmail.com>
Committed: Wed Feb 11 03:40:35 2015 +0100
----------------------------------------------------------------------
CHANGELOG.asciidoc | 1 +
CLA.txt | 138 -------------------
CONTRIBUTING.asciidoc | 5 +-
.../tinkerpop/gremlin/process/Traversal.java | 2 +-
.../process/computer/ComputerResult.java | 32 ++---
.../gremlin/process/computer/GraphComputer.java | 2 +-
.../gremlin/process/computer/MapReduce.java | 2 +-
.../peerpressure/PeerPressureVertexProgram.java | 18 ++-
.../ranking/pagerank/PageRankVertexProgram.java | 7 +-
.../traversal/step/map/ComputerResultStep.java | 2 +-
.../computer/util/DefaultComputerResult.java | 60 ++++++++
.../computer/util/GraphComputerHelper.java | 5 +-
.../process/computer/util/MemoryHelper.java | 5 +-
.../computer/util/VertexProgramHelper.java | 7 +-
.../traversal/step/filter/ConjunctionStep.java | 84 +++++++++++
.../FilterByCountOptimizerStrategy.java | 101 ++++++++++++++
.../process/traversal/DefaultTraversal.java | 7 +-
.../com/tinkerpop/gremlin/structure/Vertex.java | 22 ++-
.../gremlin/structure/VertexProperty.java | 4 +
.../gremlin/structure/util/ElementHelper.java | 7 +-
.../gremlin/structure/util/StringFactory.java | 10 +-
.../structure/util/batch/BatchGraph.java | 5 -
.../groovy/loaders/SugarLoaderTest.groovy | 2 +-
.../computer/GroovyGraphComputerTest.groovy | 10 +-
.../jsr223/GremlinGroovyScriptEngineTest.java | 4 +-
.../gremlin/groovy/loaders/SugarLoader.groovy | 2 +-
.../AbstractImportCustomizerProvider.java | 4 +-
.../groovy/engine/GroovyTraversalScript.java | 2 +-
.../process/computer/GraphComputerTest.java | 5 +-
.../ranking/PageRankVertexProgramTest.java | 1 +
.../structure/StructureStandardSuite.java | 4 +-
.../gremlin/structure/TransactionTest.java | 8 +-
.../gremlin/structure/VertexPropertyTest.java | 72 +++++++++-
.../tinkerpop/gremlin/structure/VertexTest.java | 4 +-
.../process/graph/step/util/TreeTest.java | 97 -------------
.../step/filter/ConjunctionStepTest.java | 68 +++++++++
.../gremlin/process/graph/util/TreeTest.java | 96 +++++++++++++
.../groovy/plugin/HadoopRemoteAcceptor.java | 2 +-
.../computer/giraph/GiraphComputeVertex.java | 3 +-
.../computer/giraph/GiraphGraphComputer.java | 3 +-
.../process/computer/util/MapReduceHelper.java | 5 +-
.../hadoop/structure/util/HadoopHelper.java | 5 +-
.../gremlin/neo4j/structure/Neo4jGraph.java | 27 ++--
.../gremlin/neo4j/structure/Neo4jHelper.java | 5 +-
.../gremlin/neo4j/structure/Neo4jVertex.java | 32 -----
.../gremlin/neo4j/structure/Neo4jGraphTest.java | 8 +-
.../process/computer/TinkerComputerResult.java | 39 ++++++
.../process/computer/TinkerGraphComputer.java | 2 +-
.../tinkergraph/structure/TinkerGraph.java | 21 ++-
.../tinkergraph/structure/TinkerHelper.java | 9 +-
.../tinkergraph/structure/TinkerGraphTest.java | 2 +-
51 files changed, 686 insertions(+), 382 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/blob/6086a596/CHANGELOG.asciidoc
----------------------------------------------------------------------
diff --cc CHANGELOG.asciidoc
index 5ef1b4b,fd2138d..4c7fccd
--- a/CHANGELOG.asciidoc
+++ b/CHANGELOG.asciidoc
@@@ -9,7 -9,8 +9,8 @@@ image::http://www.tinkerpop.com/docs/cu
TinkerPop 3.0.0.M8 (Release Date: NOT OFFICIALLY RELEASED YET)
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ * Added `VertexProperty.Cardinality` with `list`, `set`, and `single`. No more `Vertex.singleProperty()` method.
-* Added `FilterByCountOptimizerStrategy` that adds a `RangeStep` in front of `.count().is(<predicate>, <value>)` to minimize the amount of fetched elements.
+* Added `RangeByIsCountStrategy` that adds a `RangeStep` in front of `.count().is(<predicate>, <value>)` to minimize the amount of fetched elements.
* Added `CoalesceStep` / `.coalesce()` that emits the first traversal which emits at least one element.
* Added more syntactic sugar tricks to the Gremlin sugar plugin -- `&`, `|`, `select from`, `gt`, etc.
* `Traversal.Admin` is consistent internal to steps, traversals, strategies, etc. For the user, `Traversal` is all they see.
http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/blob/6086a596/gremlin-core/src/main/java/com/tinkerpop/gremlin/process/computer/traversal/step/map/ComputerResultStep.java
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/blob/6086a596/tinkergraph-gremlin/src/test/java/com/tinkerpop/gremlin/tinkergraph/structure/TinkerGraphTest.java
----------------------------------------------------------------------
[3/5] incubator-tinkerpop git commit: fixed ComputerTest for
RangeByIsCountStrategy
Posted by ok...@apache.org.
fixed ComputerTest for RangeByIsCountStrategy
Project: http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/commit/f8bfafc5
Tree: http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/tree/f8bfafc5
Diff: http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/diff/f8bfafc5
Branch: refs/heads/master
Commit: f8bfafc569fb147bcb6b711469743774f1e172c0
Parents: a71fdbd
Author: Daniel Kuppitz <da...@hotmail.com>
Authored: Wed Feb 11 02:56:20 2015 +0100
Committer: Daniel Kuppitz <da...@hotmail.com>
Committed: Wed Feb 11 02:56:20 2015 +0100
----------------------------------------------------------------------
.../traversal/step/map/ComputerResultStep.java | 4 +++
.../strategy/RangeByIsCountStrategyTest.java | 29 +++++++++++++-------
2 files changed, 23 insertions(+), 10 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/blob/f8bfafc5/gremlin-core/src/main/java/com/tinkerpop/gremlin/process/computer/traversal/step/map/ComputerResultStep.java
----------------------------------------------------------------------
diff --git a/gremlin-core/src/main/java/com/tinkerpop/gremlin/process/computer/traversal/step/map/ComputerResultStep.java b/gremlin-core/src/main/java/com/tinkerpop/gremlin/process/computer/traversal/step/map/ComputerResultStep.java
index 54b119e..39e3de4 100644
--- a/gremlin-core/src/main/java/com/tinkerpop/gremlin/process/computer/traversal/step/map/ComputerResultStep.java
+++ b/gremlin-core/src/main/java/com/tinkerpop/gremlin/process/computer/traversal/step/map/ComputerResultStep.java
@@ -92,4 +92,8 @@ public final class ComputerResultStep<S> extends AbstractStep<S, S> {
public Set<TraverserRequirement> getRequirements() {
return this.computerTraversal.getTraverserRequirements();
}
+
+ public Traversal.Admin<?, ?> getComputerTraversal() {
+ return this.computerTraversal;
+ }
}
http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/blob/f8bfafc5/gremlin-test/src/main/java/com/tinkerpop/gremlin/process/graph/traversal/strategy/RangeByIsCountStrategyTest.java
----------------------------------------------------------------------
diff --git a/gremlin-test/src/main/java/com/tinkerpop/gremlin/process/graph/traversal/strategy/RangeByIsCountStrategyTest.java b/gremlin-test/src/main/java/com/tinkerpop/gremlin/process/graph/traversal/strategy/RangeByIsCountStrategyTest.java
index ea1662d..d840fa7 100644
--- a/gremlin-test/src/main/java/com/tinkerpop/gremlin/process/graph/traversal/strategy/RangeByIsCountStrategyTest.java
+++ b/gremlin-test/src/main/java/com/tinkerpop/gremlin/process/graph/traversal/strategy/RangeByIsCountStrategyTest.java
@@ -22,15 +22,18 @@ package com.tinkerpop.gremlin.process.graph.traversal.strategy;
import com.tinkerpop.gremlin.LoadGraphWith;
import com.tinkerpop.gremlin.process.AbstractGremlinProcessTest;
import com.tinkerpop.gremlin.process.Traversal;
+import com.tinkerpop.gremlin.process.computer.traversal.step.map.ComputerResultStep;
+import com.tinkerpop.gremlin.process.graph.traversal.__;
+import com.tinkerpop.gremlin.process.graph.traversal.step.filter.HasTraversalStep;
import com.tinkerpop.gremlin.process.graph.traversal.step.filter.RangeStep;
import com.tinkerpop.gremlin.process.traversal.util.TraversalHelper;
import com.tinkerpop.gremlin.structure.Compare;
+import org.junit.Ignore;
import org.junit.Test;
import java.util.Arrays;
import java.util.concurrent.atomic.AtomicInteger;
import java.util.function.BiPredicate;
-import java.util.stream.Stream;
import static com.tinkerpop.gremlin.LoadGraphWith.GraphData.MODERN;
import static org.junit.Assert.assertEquals;
@@ -40,15 +43,11 @@ import static org.junit.Assert.assertEquals;
*/
public abstract class RangeByIsCountStrategyTest extends AbstractGremlinProcessTest {
- final Traversal generateTraversal(final BiPredicate predicate, final Object value) {
- return g.V().count().is(predicate, value);
- }
-
public static class StandardTest extends RangeByIsCountStrategyTest {
private void runTest(final BiPredicate predicate, final Object value, final long expectedHighRange) {
final AtomicInteger counter = new AtomicInteger(0);
- Traversal traversal = generateTraversal(predicate, value);
+ Traversal traversal = g.V().count().is(predicate, value);
traversal.iterate();
TraversalHelper.getStepsOfClass(RangeStep.class, traversal.asAdmin()).stream().forEach(step -> {
assertEquals(0, step.getLowRange());
@@ -109,11 +108,21 @@ public abstract class RangeByIsCountStrategyTest extends AbstractGremlinProcessT
public static class ComputerTest extends RangeByIsCountStrategyTest {
@Test
+ @Ignore // TODO: include when #558 is solved
@LoadGraphWith(MODERN)
- public void shouldNotModifyTheTraversal() {
- final Traversal traversal = generateTraversal(Compare.eq, 0l).submit(g.compute()).iterate();
- final Stream<RangeStep> rangeSteps = TraversalHelper.getStepsOfClass(RangeStep.class, traversal.asAdmin()).stream();
- assertEquals(0, rangeSteps.count());
+ public void nestedCountEqualsNullShouldLimitToOne() {
+ final AtomicInteger counter = new AtomicInteger(0);
+ final Traversal traversal = g.V().has(__.outE("created").count().is(0)).submit(g.compute()).iterate();
+ final ComputerResultStep crs = (ComputerResultStep) traversal.asAdmin().getSteps().iterator().next();
+ final Traversal ct = crs.getComputerTraversal();
+ final HasTraversalStep hasStep = TraversalHelper.getStepsOfClass(HasTraversalStep.class, ct.asAdmin()).stream().findFirst().get();
+ final Traversal nestedTraversal = (Traversal) hasStep.getLocalChildren().get(0);
+ TraversalHelper.getStepsOfClass(RangeStep.class, nestedTraversal.asAdmin()).stream().forEach(step -> {
+ assertEquals(0, step.getLowRange());
+ assertEquals(1, step.getHighRange());
+ counter.incrementAndGet();
+ });
+ assertEquals(1, counter.get());
}
}
}
[2/5] incubator-tinkerpop git commit: Worked on RangeByIsCountStrategy
Posted by ok...@apache.org.
Worked on RangeByIsCountStrategy
* renamed FilterByCountOptimizerStrategy to RangeByIsCountStrategy as proposed by @okram
* optimized the strategy code (no need to modify the comparators in IsStep)
* added unit tests for all 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/a71fdbd1
Tree: http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/tree/a71fdbd1
Diff: http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/diff/a71fdbd1
Branch: refs/heads/master
Commit: a71fdbd15ebd9554f8bf13fff22b2e2b4ab771e5
Parents: 0adb140
Author: Daniel Kuppitz <da...@hotmail.com>
Authored: Wed Feb 11 01:05:53 2015 +0100
Committer: Daniel Kuppitz <da...@hotmail.com>
Committed: Wed Feb 11 01:05:53 2015 +0100
----------------------------------------------------------------------
CHANGELOG.asciidoc | 2 +-
.../gremlin/process/TraversalStrategies.java | 2 +-
.../FilterByCountOptimizerStrategy.java | 101 ----------------
.../strategy/RangeByIsCountStrategy.java | 89 ++++++++++++++
.../gremlin/process/ProcessComputerSuite.java | 7 +-
.../gremlin/process/ProcessStandardSuite.java | 11 +-
.../strategy/RangeByIsCountStrategyTest.java | 119 +++++++++++++++++++
.../tinkergraph/structure/TinkerGraphTest.java | 38 ++++++
8 files changed, 260 insertions(+), 109 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/blob/a71fdbd1/CHANGELOG.asciidoc
----------------------------------------------------------------------
diff --git a/CHANGELOG.asciidoc b/CHANGELOG.asciidoc
index 5a64125..5ef1b4b 100644
--- a/CHANGELOG.asciidoc
+++ b/CHANGELOG.asciidoc
@@ -9,7 +9,7 @@ image::http://www.tinkerpop.com/docs/current/images/gremlin-hindu.png[width=225]
TinkerPop 3.0.0.M8 (Release Date: NOT OFFICIALLY RELEASED YET)
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-* Added `FilterByCountOptimizerStrategy` that adds a `RangeStep` in front of `.count().is(<predicate>, <value>)` to minimize the amount of fetched elements.
+* Added `RangeByIsCountStrategy` that adds a `RangeStep` in front of `.count().is(<predicate>, <value>)` to minimize the amount of fetched elements.
* Added `CoalesceStep` / `.coalesce()` that emits the first traversal which emits at least one element.
* Added more syntactic sugar tricks to the Gremlin sugar plugin -- `&`, `|`, `select from`, `gt`, etc.
* `Traversal.Admin` is consistent internal to steps, traversals, strategies, etc. For the user, `Traversal` is all they see.
http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/blob/a71fdbd1/gremlin-core/src/main/java/com/tinkerpop/gremlin/process/TraversalStrategies.java
----------------------------------------------------------------------
diff --git a/gremlin-core/src/main/java/com/tinkerpop/gremlin/process/TraversalStrategies.java b/gremlin-core/src/main/java/com/tinkerpop/gremlin/process/TraversalStrategies.java
index 18c9eb9..a9c7381 100644
--- a/gremlin-core/src/main/java/com/tinkerpop/gremlin/process/TraversalStrategies.java
+++ b/gremlin-core/src/main/java/com/tinkerpop/gremlin/process/TraversalStrategies.java
@@ -155,7 +155,7 @@ public interface TraversalStrategies extends Cloneable {
final TraversalStrategies coreStrategies = new DefaultTraversalStrategies();
coreStrategies.addStrategies(
DedupOptimizerStrategy.instance(),
- FilterByCountOptimizerStrategy.instance(),
+ RangeByIsCountStrategy.instance(),
IdentityRemovalStrategy.instance(),
SideEffectCapStrategy.instance(),
MatchWhereStrategy.instance(),
http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/blob/a71fdbd1/gremlin-core/src/main/java/com/tinkerpop/gremlin/process/graph/traversal/strategy/FilterByCountOptimizerStrategy.java
----------------------------------------------------------------------
diff --git a/gremlin-core/src/main/java/com/tinkerpop/gremlin/process/graph/traversal/strategy/FilterByCountOptimizerStrategy.java b/gremlin-core/src/main/java/com/tinkerpop/gremlin/process/graph/traversal/strategy/FilterByCountOptimizerStrategy.java
deleted file mode 100644
index 293c6cc..0000000
--- a/gremlin-core/src/main/java/com/tinkerpop/gremlin/process/graph/traversal/strategy/FilterByCountOptimizerStrategy.java
+++ /dev/null
@@ -1,101 +0,0 @@
-/*
- * 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 com.tinkerpop.gremlin.process.graph.traversal.strategy;
-
-import com.tinkerpop.gremlin.process.Step;
-import com.tinkerpop.gremlin.process.Traversal;
-import com.tinkerpop.gremlin.process.TraversalEngine;
-import com.tinkerpop.gremlin.process.graph.traversal.step.filter.IsStep;
-import com.tinkerpop.gremlin.process.graph.traversal.step.filter.RangeStep;
-import com.tinkerpop.gremlin.process.graph.traversal.step.map.CountStep;
-import com.tinkerpop.gremlin.process.traversal.util.TraversalHelper;
-import com.tinkerpop.gremlin.structure.Compare;
-
-import java.util.Collection;
-import java.util.Iterator;
-import java.util.function.BiPredicate;
-
-/**
- * @author Daniel Kuppitz (http://gremlin.guru)
- */
-public class FilterByCountOptimizerStrategy extends AbstractTraversalStrategy {
-
- private static final FilterByCountOptimizerStrategy INSTANCE = new FilterByCountOptimizerStrategy();
-
- private FilterByCountOptimizerStrategy() {
- }
-
- @Override
- public void apply(final Traversal.Admin<?, ?> traversal, final TraversalEngine engine) {
- final int size = traversal.getSteps().size();
- Step prev = null;
- for (int i = 0; i < size; i++) {
- final Step curr = traversal.getSteps().get(i);
- if (curr instanceof CountStep && i < size - 1) {
- final Step next = traversal.getSteps().get(i + 1);
- if (next instanceof IsStep && !(prev instanceof RangeStep)) { // if a RangeStep was provided, assume that the user knows what he's doing
- final IsStep isStep = (IsStep) next;
- final Object value = isStep.getValue();
- final BiPredicate predicate = isStep.getPredicate();
- if (value instanceof Number) {
- final long highRangeOffset;
- final boolean replaceIsStep;
- if (predicate.equals(Compare.eq) || predicate.equals(Compare.lte) || predicate.equals(Compare.neq)) {
- highRangeOffset = 1L;
- replaceIsStep = false;
- } else if (predicate.equals(Compare.lt)) {
- highRangeOffset = 0L;
- replaceIsStep = false;
- } else if (predicate.equals(Compare.gt)) {
- highRangeOffset = 1L;
- replaceIsStep = true;
- } else if (predicate.equals(Compare.gte)) {
- highRangeOffset = 0L;
- replaceIsStep = true;
- } else continue;
-
- final long highRange = ((Number) value).longValue() + highRangeOffset;
- TraversalHelper.insertBeforeStep(new RangeStep<>(traversal, 0L, highRange), curr, traversal);
- if (replaceIsStep) {
- TraversalHelper.replaceStep(isStep, new IsStep<>(traversal, Compare.eq, highRange), traversal);
- }
- }
- if (value instanceof Collection && (predicate.equals(Compare.inside) || predicate.equals(Compare.outside))) {
- final Iterator iterator = ((Collection) value).iterator();
- if (iterator.hasNext()) iterator.next();
- else continue;
- if (iterator.hasNext()) {
- final Object high = iterator.next();
- if (high instanceof Number && !iterator.hasNext()) {
- final long highRangeOffset = predicate.equals(Compare.inside) ? 0L : 1L;
- final long highRange = ((Number) high).longValue() + highRangeOffset;
- TraversalHelper.insertBeforeStep(new RangeStep<>(traversal, 0L, highRange), curr, traversal);
- }
- }
- }
- }
- }
- prev = curr;
- }
- }
-
- public static FilterByCountOptimizerStrategy instance() {
- return INSTANCE;
- }
-}
http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/blob/a71fdbd1/gremlin-core/src/main/java/com/tinkerpop/gremlin/process/graph/traversal/strategy/RangeByIsCountStrategy.java
----------------------------------------------------------------------
diff --git a/gremlin-core/src/main/java/com/tinkerpop/gremlin/process/graph/traversal/strategy/RangeByIsCountStrategy.java b/gremlin-core/src/main/java/com/tinkerpop/gremlin/process/graph/traversal/strategy/RangeByIsCountStrategy.java
new file mode 100644
index 0000000..181d6ab
--- /dev/null
+++ b/gremlin-core/src/main/java/com/tinkerpop/gremlin/process/graph/traversal/strategy/RangeByIsCountStrategy.java
@@ -0,0 +1,89 @@
+/*
+ * 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 com.tinkerpop.gremlin.process.graph.traversal.strategy;
+
+import com.tinkerpop.gremlin.process.Step;
+import com.tinkerpop.gremlin.process.Traversal;
+import com.tinkerpop.gremlin.process.TraversalEngine;
+import com.tinkerpop.gremlin.process.TraversalStrategy;
+import com.tinkerpop.gremlin.process.graph.traversal.step.filter.IsStep;
+import com.tinkerpop.gremlin.process.graph.traversal.step.filter.RangeStep;
+import com.tinkerpop.gremlin.process.graph.traversal.step.map.CountStep;
+import com.tinkerpop.gremlin.process.traversal.util.TraversalHelper;
+import com.tinkerpop.gremlin.structure.Compare;
+
+import java.util.Collection;
+import java.util.EnumSet;
+import java.util.Iterator;
+import java.util.Set;
+import java.util.function.BiPredicate;
+
+/**
+ * @author Daniel Kuppitz (http://gremlin.guru)
+ */
+public class RangeByIsCountStrategy extends AbstractTraversalStrategy implements TraversalStrategy {
+
+ private static final Set<Compare> RANGE_PREDICATES = EnumSet.of(Compare.inside, Compare.outside);
+ private static final Set<Compare> INCREASED_OFFSET_PREDICATES =
+ EnumSet.of(Compare.eq, Compare.neq, Compare.lte, Compare.gt, Compare.outside);
+
+ private static final RangeByIsCountStrategy INSTANCE = new RangeByIsCountStrategy();
+
+ private RangeByIsCountStrategy() {
+ }
+
+ @Override
+ public void apply(final Traversal.Admin<?, ?> traversal, final TraversalEngine engine) {
+ final int size = traversal.getSteps().size();
+ Step prev = null;
+ for (int i = 0; i < size; i++) {
+ final Step curr = traversal.getSteps().get(i);
+ if (curr instanceof CountStep && i < size - 1) {
+ final Step next = traversal.getSteps().get(i + 1);
+ if (next instanceof IsStep && !(prev instanceof RangeStep)) { // if a RangeStep was provided, assume that the user knows what he's doing
+ final IsStep isStep = (IsStep) next;
+ final Object value = isStep.getValue();
+ final BiPredicate predicate = isStep.getPredicate();
+ final long highRangeOffset = INCREASED_OFFSET_PREDICATES.contains(predicate) ? 1L : 0L;
+ if (value instanceof Number) {
+ final long highRange = ((Number) value).longValue() + highRangeOffset;
+ TraversalHelper.insertBeforeStep(new RangeStep<>(traversal, 0L, highRange), curr, traversal);
+ }
+ if (value instanceof Collection && RANGE_PREDICATES.contains(predicate)) {
+ final Iterator iterator = ((Collection) value).iterator();
+ if (iterator.hasNext()) iterator.next();
+ else continue;
+ if (iterator.hasNext()) {
+ final Object high = iterator.next();
+ if (high instanceof Number && !iterator.hasNext()) {
+ final long highRange = ((Number) high).longValue() + highRangeOffset;
+ TraversalHelper.insertBeforeStep(new RangeStep<>(traversal, 0L, highRange), curr, traversal);
+ }
+ }
+ }
+ }
+ }
+ prev = curr;
+ }
+ }
+
+ public static RangeByIsCountStrategy instance() {
+ return INSTANCE;
+ }
+}
http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/blob/a71fdbd1/gremlin-test/src/main/java/com/tinkerpop/gremlin/process/ProcessComputerSuite.java
----------------------------------------------------------------------
diff --git a/gremlin-test/src/main/java/com/tinkerpop/gremlin/process/ProcessComputerSuite.java b/gremlin-test/src/main/java/com/tinkerpop/gremlin/process/ProcessComputerSuite.java
index 3d81643..667bada 100644
--- a/gremlin-test/src/main/java/com/tinkerpop/gremlin/process/ProcessComputerSuite.java
+++ b/gremlin-test/src/main/java/com/tinkerpop/gremlin/process/ProcessComputerSuite.java
@@ -27,6 +27,7 @@ import com.tinkerpop.gremlin.process.graph.traversal.step.filter.*;
import com.tinkerpop.gremlin.process.graph.traversal.step.map.*;
import com.tinkerpop.gremlin.process.graph.traversal.step.sideEffect.*;
import com.tinkerpop.gremlin.process.graph.traversal.strategy.TraversalVerificationStrategyTest;
+import com.tinkerpop.gremlin.process.graph.traversal.strategy.RangeByIsCountStrategyTest;
import org.junit.runners.model.InitializationError;
import org.junit.runners.model.RunnerBuilder;
@@ -134,7 +135,8 @@ public class ProcessComputerSuite extends AbstractGremlinSuite {
ComputerDataStrategyTest.class,
// strategy
- TraversalVerificationStrategyTest.ComputerTest.class
+ TraversalVerificationStrategyTest.ComputerTest.class,
+ RangeByIsCountStrategyTest.ComputerTest.class
};
/**
@@ -208,7 +210,8 @@ public class ProcessComputerSuite extends AbstractGremlinSuite {
// strategy
ComputerDataStrategyTest.class,
- TraversalVerificationStrategyTest.class
+ TraversalVerificationStrategyTest.class,
+ RangeByIsCountStrategyTest.class
};
/**
http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/blob/a71fdbd1/gremlin-test/src/main/java/com/tinkerpop/gremlin/process/ProcessStandardSuite.java
----------------------------------------------------------------------
diff --git a/gremlin-test/src/main/java/com/tinkerpop/gremlin/process/ProcessStandardSuite.java b/gremlin-test/src/main/java/com/tinkerpop/gremlin/process/ProcessStandardSuite.java
index 96c4d34..6e5536f 100644
--- a/gremlin-test/src/main/java/com/tinkerpop/gremlin/process/ProcessStandardSuite.java
+++ b/gremlin-test/src/main/java/com/tinkerpop/gremlin/process/ProcessStandardSuite.java
@@ -24,6 +24,7 @@ import com.tinkerpop.gremlin.process.graph.traversal.step.filter.*;
import com.tinkerpop.gremlin.process.graph.traversal.step.map.*;
import com.tinkerpop.gremlin.process.graph.traversal.step.sideEffect.*;
import com.tinkerpop.gremlin.process.graph.traversal.step.util.TraversalSideEffectsTest;
+import com.tinkerpop.gremlin.process.graph.traversal.strategy.RangeByIsCountStrategyTest;
import com.tinkerpop.gremlin.process.graph.traversal.strategy.TraversalVerificationStrategyTest;
import com.tinkerpop.gremlin.process.traversal.CoreTraversalTest;
import com.tinkerpop.gremlin.process.util.PathTest;
@@ -47,6 +48,8 @@ import java.util.stream.Stream;
* separate class file):
* <p/>
* <code>
+ *
+ * @author Stephen Mallette (http://stephen.genoprime.com)
* @RunWith(ProcessStandardSuite.class)
* @ProcessStandardSuite.GraphProviderClass(TinkerGraphProcessStandardTest.class) public class TinkerGraphProcessStandardTest implements GraphProvider {
* }
@@ -57,8 +60,6 @@ import java.util.stream.Stream;
* into tests in the suite. The ProcessStandardSuite will utilized
* {@link com.tinkerpop.gremlin.structure.Graph.Features} defined in the suite to determine which tests will be executed.
* <br/>
- *
- * @author Stephen Mallette (http://stephen.genoprime.com)
*/
public class ProcessStandardSuite extends AbstractGremlinSuite {
@@ -131,7 +132,8 @@ public class ProcessStandardSuite extends AbstractGremlinSuite {
PathTest.class,
// strategy
- TraversalVerificationStrategyTest.StandardTest.class
+ TraversalVerificationStrategyTest.StandardTest.class,
+ RangeByIsCountStrategyTest.StandardTest.class
// algorithms
// PageRankVertexProgramTest.class
@@ -207,7 +209,8 @@ public class ProcessStandardSuite extends AbstractGremlinSuite {
// PageRankVertexProgramTest.class
// strategy
- TraversalVerificationStrategyTest.class
+ TraversalVerificationStrategyTest.class,
+ RangeByIsCountStrategyTest.class
};
/**
http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/blob/a71fdbd1/gremlin-test/src/main/java/com/tinkerpop/gremlin/process/graph/traversal/strategy/RangeByIsCountStrategyTest.java
----------------------------------------------------------------------
diff --git a/gremlin-test/src/main/java/com/tinkerpop/gremlin/process/graph/traversal/strategy/RangeByIsCountStrategyTest.java b/gremlin-test/src/main/java/com/tinkerpop/gremlin/process/graph/traversal/strategy/RangeByIsCountStrategyTest.java
new file mode 100644
index 0000000..ea1662d
--- /dev/null
+++ b/gremlin-test/src/main/java/com/tinkerpop/gremlin/process/graph/traversal/strategy/RangeByIsCountStrategyTest.java
@@ -0,0 +1,119 @@
+/*
+ * 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 com.tinkerpop.gremlin.process.graph.traversal.strategy;
+
+import com.tinkerpop.gremlin.LoadGraphWith;
+import com.tinkerpop.gremlin.process.AbstractGremlinProcessTest;
+import com.tinkerpop.gremlin.process.Traversal;
+import com.tinkerpop.gremlin.process.graph.traversal.step.filter.RangeStep;
+import com.tinkerpop.gremlin.process.traversal.util.TraversalHelper;
+import com.tinkerpop.gremlin.structure.Compare;
+import org.junit.Test;
+
+import java.util.Arrays;
+import java.util.concurrent.atomic.AtomicInteger;
+import java.util.function.BiPredicate;
+import java.util.stream.Stream;
+
+import static com.tinkerpop.gremlin.LoadGraphWith.GraphData.MODERN;
+import static org.junit.Assert.assertEquals;
+
+/**
+ * @author Daniel Kuppitz (http://gremlin.guru)
+ */
+public abstract class RangeByIsCountStrategyTest extends AbstractGremlinProcessTest {
+
+ final Traversal generateTraversal(final BiPredicate predicate, final Object value) {
+ return g.V().count().is(predicate, value);
+ }
+
+ public static class StandardTest extends RangeByIsCountStrategyTest {
+
+ private void runTest(final BiPredicate predicate, final Object value, final long expectedHighRange) {
+ final AtomicInteger counter = new AtomicInteger(0);
+ Traversal traversal = generateTraversal(predicate, value);
+ traversal.iterate();
+ TraversalHelper.getStepsOfClass(RangeStep.class, traversal.asAdmin()).stream().forEach(step -> {
+ assertEquals(0, step.getLowRange());
+ assertEquals(expectedHighRange, step.getHighRange());
+ counter.incrementAndGet();
+ });
+ assertEquals(1, counter.get());
+ }
+
+ @Test
+ @LoadGraphWith(MODERN)
+ public void countEqualsNullShouldLimitToOne() {
+ runTest(Compare.eq, 0l, 1l);
+ }
+
+ @Test
+ @LoadGraphWith(MODERN)
+ public void countNotEqualsFourShouldLimitToFive() {
+ runTest(Compare.neq, 4l, 5l);
+ }
+
+ @Test
+ @LoadGraphWith(MODERN)
+ public void countLessThanOrEqualThreeShouldLimitToFour() {
+ runTest(Compare.lte, 3l, 4l);
+ }
+
+ @Test
+ @LoadGraphWith(MODERN)
+ public void countLessThanThreeShouldLimitToThree() {
+ runTest(Compare.lt, 3l, 3l);
+ }
+
+ @Test
+ @LoadGraphWith(MODERN)
+ public void countGreaterThanTwoShouldLimitToThree() {
+ runTest(Compare.gt, 2l, 3l);
+ }
+
+ @Test
+ @LoadGraphWith(MODERN)
+ public void countGreaterThanOrEqualTwoShouldLimitToTwo() {
+ runTest(Compare.gte, 2l, 2l);
+ }
+
+ @Test
+ @LoadGraphWith(MODERN)
+ public void countInsideTwoAndFourShouldLimitToFour() {
+ runTest(Compare.inside, Arrays.asList(2l, 4l), 4l);
+ }
+
+ @Test
+ @LoadGraphWith(MODERN)
+ public void countOutsideTwoAndFourShouldLimitToFive() {
+ runTest(Compare.outside, Arrays.asList(2l, 4l), 5l);
+ }
+ }
+
+ public static class ComputerTest extends RangeByIsCountStrategyTest {
+ @Test
+ @LoadGraphWith(MODERN)
+ public void shouldNotModifyTheTraversal() {
+ final Traversal traversal = generateTraversal(Compare.eq, 0l).submit(g.compute()).iterate();
+ final Stream<RangeStep> rangeSteps = TraversalHelper.getStepsOfClass(RangeStep.class, traversal.asAdmin()).stream();
+ assertEquals(0, rangeSteps.count());
+ }
+ }
+}
http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/blob/a71fdbd1/tinkergraph-gremlin/src/test/java/com/tinkerpop/gremlin/tinkergraph/structure/TinkerGraphTest.java
----------------------------------------------------------------------
diff --git a/tinkergraph-gremlin/src/test/java/com/tinkerpop/gremlin/tinkergraph/structure/TinkerGraphTest.java b/tinkergraph-gremlin/src/test/java/com/tinkerpop/gremlin/tinkergraph/structure/TinkerGraphTest.java
index 9c66e80..2f83bab 100644
--- a/tinkergraph-gremlin/src/test/java/com/tinkerpop/gremlin/tinkergraph/structure/TinkerGraphTest.java
+++ b/tinkergraph-gremlin/src/test/java/com/tinkerpop/gremlin/tinkergraph/structure/TinkerGraphTest.java
@@ -169,6 +169,44 @@ public class TinkerGraphTest {
});
}
+ @Test
+ @Ignore
+ public void testPlayDK() throws Exception {
+
+ Graph g = TinkerFactory.createModern();
+ Traversal t;
+
+ System.out.println("g.V().has(out(\"created\").count().is(0l))");
+ t = g.V().has(out("created").count().is(0l));
+ System.out.println(t.toString());
+ t.forEachRemaining(System.out::println);
+ System.out.println(t.toString() + "\n");
+
+ System.out.println("g.V().has(out(\"created\").count().is(lt, 2l))");
+ t = g.V().has(out("created").count().is(Compare.lt, 2l));
+ System.out.println(t.toString());
+ t.forEachRemaining(System.out::println);
+ System.out.println(t.toString() + "\n");
+
+ System.out.println("g.V().has(out(\"created\").count().is(gt, 1l))");
+ t = g.V().has(out("created").count().is(Compare.gt, 1l));
+ System.out.println(t.toString());
+ t.forEachRemaining(System.out::println);
+ System.out.println(t.toString() + "\n");
+
+ System.out.println("g.V().has(out(\"created\").count().is(inside, [1l,4l]))");
+ t = g.V().has(out("created").count().is(Compare.inside, Arrays.asList(1l, 4l)));
+ System.out.println(t.toString());
+ t.forEachRemaining(System.out::println);
+ System.out.println(t.toString() + "\n");
+
+ System.out.println("g.V().has(out(\"created\").count().is(outside, [1l,4l]))");
+ t = g.V().has(out("created").count().is(Compare.outside, Arrays.asList(1l, 4l)));
+ System.out.println(t.toString());
+ t.forEachRemaining(System.out::println);
+ System.out.println(t.toString() + "\n");
+ }
+
/**
* No assertions. Just write out the graph for convenience.
*/
[5/5] incubator-tinkerpop git commit: included ComputerTest for
RangeByIsCountStrategy
Posted by ok...@apache.org.
included ComputerTest for RangeByIsCountStrategy
Project: http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/commit/c2553ebe
Tree: http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/tree/c2553ebe
Diff: http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/diff/c2553ebe
Branch: refs/heads/master
Commit: c2553ebea5a4c2bff725531a3123bb0b084e34d0
Parents: 6086a59
Author: Daniel Kuppitz <da...@hotmail.com>
Authored: Wed Feb 11 03:41:15 2015 +0100
Committer: Daniel Kuppitz <da...@hotmail.com>
Committed: Wed Feb 11 03:41:15 2015 +0100
----------------------------------------------------------------------
.../graph/traversal/strategy/RangeByIsCountStrategyTest.java | 1 -
1 file changed, 1 deletion(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/blob/c2553ebe/gremlin-test/src/main/java/com/tinkerpop/gremlin/process/graph/traversal/strategy/RangeByIsCountStrategyTest.java
----------------------------------------------------------------------
diff --git a/gremlin-test/src/main/java/com/tinkerpop/gremlin/process/graph/traversal/strategy/RangeByIsCountStrategyTest.java b/gremlin-test/src/main/java/com/tinkerpop/gremlin/process/graph/traversal/strategy/RangeByIsCountStrategyTest.java
index d840fa7..b506167 100644
--- a/gremlin-test/src/main/java/com/tinkerpop/gremlin/process/graph/traversal/strategy/RangeByIsCountStrategyTest.java
+++ b/gremlin-test/src/main/java/com/tinkerpop/gremlin/process/graph/traversal/strategy/RangeByIsCountStrategyTest.java
@@ -108,7 +108,6 @@ public abstract class RangeByIsCountStrategyTest extends AbstractGremlinProcessT
public static class ComputerTest extends RangeByIsCountStrategyTest {
@Test
- @Ignore // TODO: include when #558 is solved
@LoadGraphWith(MODERN)
public void nestedCountEqualsNullShouldLimitToOne() {
final AtomicInteger counter = new AtomicInteger(0);