Don't over-optimize in `RangeByIsCountStrategy` if `count()` or `is()` is labeled.
Project: http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/repo Commit: http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/commit/d55897af Tree: http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/tree/d55897af Diff: http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/diff/d55897af Branch: refs/heads/master 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/incubator-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/incubator-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))},