tinkerpop-commits mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From dkupp...@apache.org
Subject [16/16] tinkerpop git commit: Fixed a bug in `RangeByIsCountStrategy`.
Date Fri, 11 Aug 2017 13:39:19 GMT
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/628d7082
Tree: http://git-wip-us.apache.org/repos/asf/tinkerpop/tree/628d7082
Diff: http://git-wip-us.apache.org/repos/asf/tinkerpop/diff/628d7082

Branch: refs/heads/TINKERPOP-1742
Commit: 628d708264428f920a7be9064fd5a21539539911
Parents: e96ed0c
Author: Daniel Kuppitz <daniel_kuppitz@hotmail.com>
Authored: Tue Aug 8 08:23:06 2017 -0700
Committer: Daniel Kuppitz <daniel_kuppitz@hotmail.com>
Committed: Fri Aug 11 06:32:17 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/628d7082/CHANGELOG.asciidoc
----------------------------------------------------------------------
diff --git a/CHANGELOG.asciidoc b/CHANGELOG.asciidoc
index 5809c26..85ce5c6 100644
--- a/CHANGELOG.asciidoc
+++ b/CHANGELOG.asciidoc
@@ -30,6 +30,7 @@ This release also includes changes from <<release-3-1-8, 3.1.8>>.
 
 * Registered `HashMap$TreeNode` to Gryo.
 * Fixed a lambda-leak in `SackValueStep` where `BiFunction` must be tested for true lambda
status.
+* 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/628d7082/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/628d7082/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()))},
         });
     }
 


Mime
View raw message