Repository: tinkerpop Updated Branches: refs/heads/TINKERPOP-1742 af856fdab -> ba6e8e0c0 (forced update)
Fixed a bug in `RangeByIsCountStrategy`. Project: http://git-wip-us.apache.org/repos/asf/tinkerpop/repo Commit: http://git-wip-us.apache.org/repos/asf/tinkerpop/commit/ba6e8e0c Tree: http://git-wip-us.apache.org/repos/asf/tinkerpop/tree/ba6e8e0c Diff: http://git-wip-us.apache.org/repos/asf/tinkerpop/diff/ba6e8e0c Branch: refs/heads/TINKERPOP-1742 Commit: ba6e8e0c0bbfd172444ab3864e07534f0c694f7a Parents: 1e46fc4 Author: Daniel Kuppitz <daniel_kupp...@hotmail.com> Authored: Tue Aug 8 08:23:06 2017 -0700 Committer: Daniel Kuppitz <daniel_kupp...@hotmail.com> Committed: Wed Aug 9 10:53:44 2017 -0700 ---------------------------------------------------------------------- CHANGELOG.asciidoc | 1 + .../strategy/optimization/RangeByIsCountStrategy.java | 8 +++----- .../strategy/optimization/RangeByIsCountStrategyTest.java | 4 ++++ 3 files changed, 8 insertions(+), 5 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/ba6e8e0c/CHANGELOG.asciidoc ---------------------------------------------------------------------- diff --git a/CHANGELOG.asciidoc b/CHANGELOG.asciidoc index 803f3b2..f74473b 100644 --- a/CHANGELOG.asciidoc +++ b/CHANGELOG.asciidoc @@ -28,6 +28,7 @@ TinkerPop 3.2.6 (Release Date: NOT OFFICIALLY RELEASED YET) This release also includes changes from <<release-3-1-8, 3.1.8>>. +* Fixed a bug in `RangeByIsCountStrategy` that broke any `ConnectiveStep` that included a child traversal with an optimizable pattern. * Allowed access to `InjectStep.injections` for `TraversalStrategy` analysis. * Exceptions that occur during result iteration in Gremlin Server will now return `SCRIPT_EVALUATION_EXCEPTION` rather than `SERVER_ERROR`. * `AddEdgeStep` attaches detached vertices prior to edge creation. http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/ba6e8e0c/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 b0cdb39..85e5753 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 @@ -27,10 +27,7 @@ import org.apache.tinkerpop.gremlin.process.traversal.TraversalStrategy; import org.apache.tinkerpop.gremlin.process.traversal.dsl.graph.__; import org.apache.tinkerpop.gremlin.process.traversal.step.TraversalParent; import org.apache.tinkerpop.gremlin.process.traversal.step.branch.RepeatStep; -import org.apache.tinkerpop.gremlin.process.traversal.step.filter.FilterStep; -import org.apache.tinkerpop.gremlin.process.traversal.step.filter.IsStep; -import org.apache.tinkerpop.gremlin.process.traversal.step.filter.NotStep; -import org.apache.tinkerpop.gremlin.process.traversal.step.filter.RangeGlobalStep; +import org.apache.tinkerpop.gremlin.process.traversal.step.filter.*; import org.apache.tinkerpop.gremlin.process.traversal.step.map.CountGlobalStep; import org.apache.tinkerpop.gremlin.process.traversal.step.map.GraphStep; import org.apache.tinkerpop.gremlin.process.traversal.step.map.MatchStep; @@ -138,7 +135,8 @@ public final class RangeByIsCountStrategy extends AbstractTraversalStrategy<Trav traversal.asAdmin().removeStep(curr); // CountStep size -= 2; if (!dismissCountIs) { - if (traversal.getParent() instanceof FilterStep) { + final TraversalParent p; + if ((p = traversal.getParent()) instanceof FilterStep && !(p instanceof ConnectiveStep)) { final Step<?, ?> filterStep = parent.asStep(); final Traversal.Admin parentTraversal = filterStep.getTraversal(); final Step notStep = new NotStep<>(parentTraversal, http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/ba6e8e0c/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 9f3b97d..8767989 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 @@ -95,6 +95,10 @@ public class RangeByIsCountStrategyTest { {__.filter(__.bothE().count().is(gte(1))), __.filter(__.bothE())}, {__.filter(__.bothE().count().is(gt(1))), __.filter(__.bothE().limit(2).count().is(gt(1)))}, {__.filter(__.bothE().count().is(gte(2))), __.filter(__.bothE().limit(2).count().is(gte(2)))}, + {__.and(__.out().count().is(0), __.in().count().is(0)), __.and(__.not(__.out()), __.not(__.in()))}, + {__.and(__.out().count().is(0), __.in().count().is(1)), __.and(__.not(__.out()), __.in().limit(2).count().is(1))}, + {__.and(__.out().count().is(1), __.in().count().is(0)), __.and(__.out().limit(2).count().is(1), __.not(__.in()))}, + {__.or(__.out().count().is(0), __.in().count().is(0)), __.or(__.not(__.out()), __.not(__.in()))}, }); }