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 14:39:56 UTC
[1/2] incubator-tinkerpop git commit: added support for
Contains.within and Contains.without in RangeByIsCountStrategy
Repository: incubator-tinkerpop
Updated Branches:
refs/heads/master c5b16591b -> e82de9f9e
added support for Contains.within and Contains.without in RangeByIsCountStrategy
Fixes tinkerpop/tinkerpop3#559
Project: http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/commit/5617c2b8
Tree: http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/tree/5617c2b8
Diff: http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/diff/5617c2b8
Branch: refs/heads/master
Commit: 5617c2b88d0f122d7d14f419477074faaf21f850
Parents: 75c7ee0
Author: Daniel Kuppitz <da...@hotmail.com>
Authored: Wed Feb 11 13:46:58 2015 +0100
Committer: Daniel Kuppitz <da...@hotmail.com>
Committed: Wed Feb 11 13:46:58 2015 +0100
----------------------------------------------------------------------
.../strategy/RangeByIsCountStrategy.java | 32 ++++++++++----------
.../strategy/RangeByIsCountStrategyTest.java | 14 ++++++++-
2 files changed, 29 insertions(+), 17 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/blob/5617c2b8/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
index 92744c9..f820d78 100644
--- 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
@@ -27,11 +27,9 @@ 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 com.tinkerpop.gremlin.structure.Contains;
-import java.util.Collection;
-import java.util.EnumSet;
-import java.util.Iterator;
-import java.util.Set;
+import java.util.*;
import java.util.function.BiPredicate;
/**
@@ -39,9 +37,14 @@ import java.util.function.BiPredicate;
*/
public final 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 Map<BiPredicate, Long> RANGE_PREDICATES = new HashMap<BiPredicate, Long>() {{
+ put(Compare.inside, 0L);
+ put(Compare.outside, 1L);
+ put(Contains.within, 1L);
+ put(Contains.without, 0L);
+ }};
+ private static final Set<Compare> INCREASED_OFFSET_SCALAR_PREDICATES =
+ EnumSet.of(Compare.eq, Compare.neq, Compare.lte, Compare.gt);
private static final RangeByIsCountStrategy INSTANCE = new RangeByIsCountStrategy();
@@ -60,18 +63,15 @@ public final class RangeByIsCountStrategy extends AbstractTraversalStrategy impl
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 highRangeOffset = INCREASED_OFFSET_SCALAR_PREDICATES.contains(predicate) ? 1L : 0L;
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()) {
+ } else {
+ final Long highRangeOffset = RANGE_PREDICATES.get(predicate);
+ if (value instanceof Collection && highRangeOffset != null) {
+ final Object high = Collections.max((Collection) value);
+ if (high instanceof Number) {
final long highRange = ((Number) high).longValue() + highRangeOffset;
TraversalHelper.insertBeforeStep(new RangeStep<>(traversal, 0L, highRange), curr, traversal);
}
http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/blob/5617c2b8/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 b506167..066865d 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
@@ -28,7 +28,7 @@ import com.tinkerpop.gremlin.process.graph.traversal.step.filter.HasTraversalSte
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 com.tinkerpop.gremlin.structure.Contains;
import org.junit.Test;
import java.util.Arrays;
@@ -104,6 +104,18 @@ public abstract class RangeByIsCountStrategyTest extends AbstractGremlinProcessT
public void countOutsideTwoAndFourShouldLimitToFive() {
runTest(Compare.outside, Arrays.asList(2l, 4l), 5l);
}
+
+ @Test
+ @LoadGraphWith(MODERN)
+ public void countWithinTwoSixFourShouldLimitToSeven() {
+ runTest(Contains.within, Arrays.asList(2l, 6l, 4l), 7l);
+ }
+
+ @Test
+ @LoadGraphWith(MODERN)
+ public void countWithoutTwoSixFourShouldLimitToSix() {
+ runTest(Contains.without, Arrays.asList(2l, 6l, 4l), 6l);
+ }
}
public static class ComputerTest extends RangeByIsCountStrategyTest {
[2/2] incubator-tinkerpop git commit: Merge branch
'optimize-count-filter' of https://github.com/dkuppitz/incubator-tinkerpop
Posted by ok...@apache.org.
Merge branch 'optimize-count-filter' of https://github.com/dkuppitz/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/e82de9f9
Tree: http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/tree/e82de9f9
Diff: http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/diff/e82de9f9
Branch: refs/heads/master
Commit: e82de9f9e9aea99cd57db470d8782fd085fdb49f
Parents: c5b1659 5617c2b
Author: Marko A. Rodriguez <ok...@gmail.com>
Authored: Wed Feb 11 06:39:41 2015 -0700
Committer: Marko A. Rodriguez <ok...@gmail.com>
Committed: Wed Feb 11 06:39:41 2015 -0700
----------------------------------------------------------------------
.../strategy/RangeByIsCountStrategy.java | 32 ++++++++++----------
.../strategy/RangeByIsCountStrategyTest.java | 14 ++++++++-
2 files changed, 29 insertions(+), 17 deletions(-)
----------------------------------------------------------------------