You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@tinkerpop.apache.org by dk...@apache.org on 2016/05/26 13:16:31 UTC
[1/2] incubator-tinkerpop git commit: Covered a lot more query
pattens in `RangeByIsCountStrategy`.
Repository: incubator-tinkerpop
Updated Branches:
refs/heads/TINKERPOP-1312 e242b4409 -> ef26ba308
Covered a lot more query pattens in `RangeByIsCountStrategy`.
Project: http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/commit/7acedb85
Tree: http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/tree/7acedb85
Diff: http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/diff/7acedb85
Branch: refs/heads/TINKERPOP-1312
Commit: 7acedb85fdd5e2a3db5b3c152eb24a5b536f6a09
Parents: e242b44
Author: Daniel Kuppitz <da...@hotmail.com>
Authored: Thu May 26 14:58:12 2016 +0200
Committer: Daniel Kuppitz <da...@hotmail.com>
Committed: Thu May 26 14:58:12 2016 +0200
----------------------------------------------------------------------
.../optimization/RangeByIsCountStrategy.java | 17 ++++++++++++++---
.../optimization/RangeByIsCountStrategyTest.java | 16 ++++++++++++----
2 files changed, 26 insertions(+), 7 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/blob/7acedb85/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 2994085..09aa730 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
@@ -25,10 +25,13 @@ import org.apache.tinkerpop.gremlin.process.traversal.Step;
import org.apache.tinkerpop.gremlin.process.traversal.Traversal;
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.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.map.CountGlobalStep;
+import org.apache.tinkerpop.gremlin.process.traversal.step.sideEffect.SideEffectStep;
+import org.apache.tinkerpop.gremlin.process.traversal.step.util.EmptyStep;
import org.apache.tinkerpop.gremlin.process.traversal.strategy.AbstractTraversalStrategy;
import org.apache.tinkerpop.gremlin.process.traversal.util.ConnectiveP;
import org.apache.tinkerpop.gremlin.process.traversal.util.TraversalHelper;
@@ -70,6 +73,7 @@ public final class RangeByIsCountStrategy extends AbstractTraversalStrategy<Trav
@Override
public void apply(final Traversal.Admin<?, ?> traversal) {
+ final TraversalParent parent = traversal.getParent();
int size = traversal.getSteps().size();
Step prev = null;
for (int i = 0; i < size; i++) {
@@ -89,8 +93,11 @@ public final class RangeByIsCountStrategy extends AbstractTraversalStrategy<Trav
final Long highRangeCandidate = ((Number) value).longValue() + highRangeOffset;
final boolean update = highRange == null || highRangeCandidate > highRange;
if (update) {
+ final boolean isNested = !(parent instanceof EmptyStep);
highRange = highRangeCandidate;
useNotStep = curr.getLabels().isEmpty() && next.getLabels().isEmpty()
+ && (!isNested || parent instanceof SideEffectStep)
+ && next.getNextStep() instanceof EmptyStep
&& ((highRange <= 1L && predicate.equals(Compare.lt))
|| (highRange == 1L && (predicate.equals(Compare.eq) || predicate.equals(Compare.lte))));
}
@@ -111,9 +118,13 @@ public final class RangeByIsCountStrategy extends AbstractTraversalStrategy<Trav
traversal.asAdmin().removeStep(next); // IsStep
traversal.asAdmin().removeStep(curr); // CountStep
size -= 2;
- final Traversal.Admin inner = __.start().asAdmin();
- TraversalHelper.insertAfterStep(prev, inner.getStartStep(), inner);
- TraversalHelper.replaceStep(prev, new NotStep<>(traversal, inner), traversal);
+ if (prev != null) {
+ final Traversal.Admin inner = __.start().asAdmin();
+ TraversalHelper.insertAfterStep(prev, inner.getStartStep(), inner);
+ TraversalHelper.replaceStep(prev, new NotStep<>(traversal, inner), traversal);
+ } else {
+ traversal.asAdmin().addStep(new NotStep<>(traversal, __.identity()));
+ }
} else {
TraversalHelper.insertBeforeStep(new RangeGlobalStep<>(traversal, 0L, highRange), curr, traversal);
}
http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/blob/7acedb85/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 f07c267..e62c3a6 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
@@ -124,10 +124,12 @@ public class RangeByIsCountStrategyTest {
static Iterable<Object[]> generateTestParameters() {
return Arrays.asList(new Traversal[][]{
+ {__.count().is(0), __.not(__.identity())},
+ {__.count().is(1), __.limit(2).count().is(1)},
{__.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")},
+ {__.outE().count().is(lt(1)), __.not(__.outE())},
+ {__.both().count().is(lte(0)), __.not(__.both())},
+ {__.store("x").count().is(0).as("a"), __.store("x").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))},
@@ -137,7 +139,13 @@ public class RangeByIsCountStrategyTest {
{__.out().count().is(inside(2, 4)), __.out().limit(4).count().is(inside(2, 4))},
{__.out().count().is(outside(2, 4)), __.out().limit(5).count().is(outside(2, 4))},
{__.out().count().is(within(2, 6, 4)), __.out().limit(7).count().is(within(2, 6, 4))},
- {__.out().count().is(without(2, 6, 4)), __.out().limit(6).count().is(without(2, 6, 4))}});
+ {__.out().count().is(without(2, 6, 4)), __.out().limit(6).count().is(without(2, 6, 4))},
+ {__.map(__.count().is(0)), __.map(__.count().limit(1).is(0))},
+ {__.flatMap(__.count().is(0)), __.flatMap(__.count().limit(1).is(0))},
+ {__.sideEffect(__.count().is(0)), __.sideEffect(__.not(__.identity()))},
+ {__.branch(__.count().is(0)), __.branch(__.count().limit(1).is(0))},
+ {__.count().is(0).store("x"), __.limit(1).count().is(0).store("x")},
+ });
}
}
}
[2/2] incubator-tinkerpop git commit: Special
`RangeByIsCountStrategy` handling for `repeat()`'s `emit()` and `until()`.
Posted by dk...@apache.org.
Special `RangeByIsCountStrategy` handling for `repeat()`'s `emit()` and `until()`.
Project: http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/commit/ef26ba30
Tree: http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/tree/ef26ba30
Diff: http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/diff/ef26ba30
Branch: refs/heads/TINKERPOP-1312
Commit: ef26ba308700a4916fa1a03d49a3e7641396dd1f
Parents: 7acedb8
Author: Daniel Kuppitz <da...@hotmail.com>
Authored: Thu May 26 15:14:48 2016 +0200
Committer: Daniel Kuppitz <da...@hotmail.com>
Committed: Thu May 26 15:14:48 2016 +0200
----------------------------------------------------------------------
.../optimization/RangeByIsCountStrategy.java | 16 ++++++++++++++--
.../optimization/RangeByIsCountStrategyTest.java | 2 ++
2 files changed, 16 insertions(+), 2 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/blob/ef26ba30/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 09aa730..835a8f9 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
@@ -26,6 +26,7 @@ import org.apache.tinkerpop.gremlin.process.traversal.Traversal;
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.IsStep;
import org.apache.tinkerpop.gremlin.process.traversal.step.filter.NotStep;
import org.apache.tinkerpop.gremlin.process.traversal.step.filter.RangeGlobalStep;
@@ -41,6 +42,7 @@ import java.util.Collections;
import java.util.EnumSet;
import java.util.HashMap;
import java.util.Map;
+import java.util.Objects;
import java.util.Set;
import java.util.function.BiPredicate;
@@ -94,9 +96,19 @@ public final class RangeByIsCountStrategy extends AbstractTraversalStrategy<Trav
final boolean update = highRange == null || highRangeCandidate > highRange;
if (update) {
final boolean isNested = !(parent instanceof EmptyStep);
+ if (isNested) {
+ if (parent instanceof RepeatStep) {
+ final RepeatStep repeatStep = (RepeatStep) parent;
+ useNotStep = Objects.equals(traversal, repeatStep.getUntilTraversal())
+ || Objects.equals(traversal, repeatStep.getEmitTraversal());
+ } else {
+ useNotStep = parent instanceof SideEffectStep;
+ }
+ } else {
+ useNotStep = true;
+ }
highRange = highRangeCandidate;
- useNotStep = curr.getLabels().isEmpty() && next.getLabels().isEmpty()
- && (!isNested || parent instanceof SideEffectStep)
+ useNotStep &= curr.getLabels().isEmpty() && next.getLabels().isEmpty()
&& next.getNextStep() instanceof EmptyStep
&& ((highRange <= 1L && predicate.equals(Compare.lt))
|| (highRange == 1L && (predicate.equals(Compare.eq) || predicate.equals(Compare.lte))));
http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/blob/ef26ba30/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 e62c3a6..820d4cc 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
@@ -145,6 +145,8 @@ public class RangeByIsCountStrategyTest {
{__.sideEffect(__.count().is(0)), __.sideEffect(__.not(__.identity()))},
{__.branch(__.count().is(0)), __.branch(__.count().limit(1).is(0))},
{__.count().is(0).store("x"), __.limit(1).count().is(0).store("x")},
+ {__.repeat(__.out()).until(__.outE().count().is(0)), __.repeat(__.out()).until(__.not(__.outE()))},
+ {__.repeat(__.out()).emit(__.outE().count().is(0)), __.repeat(__.out()).emit(__.not(__.outE()))},
});
}
}