This is an automated email from the ASF dual-hosted git repository.

dkuppitz pushed a commit to branch TINKERPOP-2124
in repository https://gitbox.apache.org/repos/asf/tinkerpop.git

commit eb87f727341c4c8aa618f9dfbbdf4a45ea2eff25
Author: Daniel Kuppitz <[email protected]>
AuthorDate: Wed Jan 2 15:01:31 2019 -0700

    TINKERPOP-2124 Fixed and/or folding in `InlineFilterStrategy`.
---
 CHANGELOG.asciidoc                                                | 1 +
 .../traversal/strategy/optimization/InlineFilterStrategy.java     | 8 ++++++--
 .../traversal/strategy/optimization/InlineFilterStrategyTest.java | 1 +
 3 files changed, 8 insertions(+), 2 deletions(-)

diff --git a/CHANGELOG.asciidoc b/CHANGELOG.asciidoc
index a49a9b2..057b46d 100644
--- a/CHANGELOG.asciidoc
+++ b/CHANGELOG.asciidoc
@@ -25,6 +25,7 @@ 
image::https://raw.githubusercontent.com/apache/tinkerpop/master/docs/static/ima
 
 This release also includes changes from <<release-3-2-11, 3.2.11>>.
 
+* Fixed and/or folding in `InlineFilterStrategy`.
 * Fixed configuration and serialization of `SubgraphStrategy` which was 
missing the `checkAdjacentVertices` flag.
 * Captured `TraversalInterruptionException` and converted to 
`TimeoutException` for `GremlinExecutor`.
 * Fixed a bug in `CoalesceStep` which squared the bulk if the step followed a 
`Barrier` step.
diff --git 
a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/strategy/optimization/InlineFilterStrategy.java
 
b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/strategy/optimization/InlineFilterStrategy.java
index 17d1032..e2f154e 100644
--- 
a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/strategy/optimization/InlineFilterStrategy.java
+++ 
b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/strategy/optimization/InlineFilterStrategy.java
@@ -195,6 +195,7 @@ public final class InlineFilterStrategy extends 
AbstractTraversalStrategy<Traver
             InlineFilterStrategy.instance().apply(childTraversal); // todo: 
this may be a bad idea, but I can't seem to find a test case to break it
             for (final Step<?, ?> childStep : childTraversal.getSteps()) {
                 if (childStep instanceof HasStep) {
+                    P p = null;
                     for (final HasContainer hasContainer : ((HasStep<?>) 
childStep).getHasContainers()) {
                         if (null == key)
                             key = hasContainer.getKey();
@@ -202,9 +203,12 @@ public final class InlineFilterStrategy extends 
AbstractTraversalStrategy<Traver
                             process = false;
                             break;
                         }
-                        predicate = null == predicate ?
+                        p = null == p ?
                                 hasContainer.getPredicate() :
-                                predicate.or(hasContainer.getPredicate());
+                                p.and(hasContainer.getPredicate());
+                    }
+                    if (process) {
+                        predicate = null == predicate ? p : predicate.or(p);
                     }
                     labels.addAll(childStep.getLabels());
                 } else {
diff --git 
a/gremlin-core/src/test/java/org/apache/tinkerpop/gremlin/process/traversal/strategy/optimization/InlineFilterStrategyTest.java
 
b/gremlin-core/src/test/java/org/apache/tinkerpop/gremlin/process/traversal/strategy/optimization/InlineFilterStrategyTest.java
index 924182b..6fffef0 100644
--- 
a/gremlin-core/src/test/java/org/apache/tinkerpop/gremlin/process/traversal/strategy/optimization/InlineFilterStrategyTest.java
+++ 
b/gremlin-core/src/test/java/org/apache/tinkerpop/gremlin/process/traversal/strategy/optimization/InlineFilterStrategyTest.java
@@ -95,6 +95,7 @@ public class InlineFilterStrategyTest {
                 {or(has("name", "marko"), filter(has("name", "bob"))), 
has("name", eq("marko").or(eq("bob")))},
                 {or(has("name", "marko"), filter(or(filter(has("name", 
"bob")), has("name", "stephen")))), has("name", 
eq("marko").or(eq("bob").or(eq("stephen"))))},
                 {or(has("name", "marko").as("a"), filter(or(filter(has("name", 
"bob")).as("b"), has("name", "stephen").as("c")))), has("name", 
eq("marko").or(eq("bob").or(eq("stephen")))).as("a", "b", "c")},
+                {or(and(has("age",gt(20)), has("age",lt(30))), 
and(has("age",gt(35)), has("age",lt(40)))), has("age", 
gt(20).and(lt(30)).or(gt(35).and(lt(40))))},
                 //
                 {and(has("age", gt(10)), filter(has("age", 22))), 
addHas(__.start(), "age", gt(10), "age", eq(22))},
                 {and(has("age", gt(10)).as("a"), filter(has("age", 
22).as("b")).as("c")).as("d"), addHas(__.start(), "age", gt(10), "age", 
eq(22)).as("a", "b", "c", "d")},

Reply via email to