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")},
