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