Don't over-optimize in `RangeByIsCountStrategy` if `count()` or `is()` is 
labeled.


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

Branch: refs/heads/TINKERPOP-1063
Commit: d55897afcd3833d9161d0871ad46cc21cf3db7ce
Parents: 51f55df
Author: Daniel Kuppitz <daniel_kupp...@hotmail.com>
Authored: Thu May 26 11:13:17 2016 +0200
Committer: Daniel Kuppitz <daniel_kupp...@hotmail.com>
Committed: Fri May 27 13:25:37 2016 +0200

----------------------------------------------------------------------
 .../traversal/strategy/optimization/RangeByIsCountStrategy.java | 5 +++--
 .../strategy/optimization/RangeByIsCountStrategyTest.java       | 2 ++
 2 files changed, 5 insertions(+), 2 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/d55897af/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/strategy/optimization/RangeByIsCountStrategy.java
----------------------------------------------------------------------
diff --git 
a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/strategy/optimization/RangeByIsCountStrategy.java
 
b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/strategy/optimization/RangeByIsCountStrategy.java
index efa79e6..2994085 100644
--- 
a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/strategy/optimization/RangeByIsCountStrategy.java
+++ 
b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/strategy/optimization/RangeByIsCountStrategy.java
@@ -90,8 +90,9 @@ public final class RangeByIsCountStrategy extends 
AbstractTraversalStrategy<Trav
                             final boolean update = highRange == null || 
highRangeCandidate > highRange;
                             if (update) {
                                 highRange = highRangeCandidate;
-                                useNotStep = (highRange <= 1L && 
predicate.equals(Compare.lt)) ||
-                                        (highRange == 1L && 
(predicate.equals(Compare.eq) || predicate.equals(Compare.lte)));
+                                useNotStep = curr.getLabels().isEmpty() && 
next.getLabels().isEmpty()
+                                        && ((highRange <= 1L && 
predicate.equals(Compare.lt))
+                                        || (highRange == 1L && 
(predicate.equals(Compare.eq) || predicate.equals(Compare.lte))));
                             }
                         } else {
                             final Long highRangeOffset = 
RANGE_PREDICATES.get(predicate);

http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/d55897af/gremlin-core/src/test/java/org/apache/tinkerpop/gremlin/process/traversal/strategy/optimization/RangeByIsCountStrategyTest.java
----------------------------------------------------------------------
diff --git 
a/gremlin-core/src/test/java/org/apache/tinkerpop/gremlin/process/traversal/strategy/optimization/RangeByIsCountStrategyTest.java
 
b/gremlin-core/src/test/java/org/apache/tinkerpop/gremlin/process/traversal/strategy/optimization/RangeByIsCountStrategyTest.java
index b6d0e27..f07c267 100644
--- 
a/gremlin-core/src/test/java/org/apache/tinkerpop/gremlin/process/traversal/strategy/optimization/RangeByIsCountStrategyTest.java
+++ 
b/gremlin-core/src/test/java/org/apache/tinkerpop/gremlin/process/traversal/strategy/optimization/RangeByIsCountStrategyTest.java
@@ -127,6 +127,8 @@ public class RangeByIsCountStrategyTest {
                     {__.out().count().is(0), __.not(__.out())},
                     {__.out().count().is(lt(1)), __.not(__.out())},
                     {__.out().count().is(lte(0)), __.not(__.out())},
+                    {__.out().count().is(0).as("a"), 
__.out().limit(1).count().is(0).as("a")},
+                    {__.out().count().as("a").is(0), 
__.out().limit(1).count().as("a").is(0)},
                     {__.out().count().is(neq(4)), 
__.out().limit(5).count().is(neq(4))},
                     {__.out().count().is(lte(3)), 
__.out().limit(4).count().is(lte(3))},
                     {__.out().count().is(lt(3)), 
__.out().limit(3).count().is(lt(3))},

Reply via email to