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 2018/05/12 01:14:30 UTC
[7/7] tinkerpop git commit: TINKERPOP-1958 Fixed a bug in
TinkerGraphCountStrategy
TINKERPOP-1958 Fixed a bug in TinkerGraphCountStrategy
The strategy did not consider, that certain map steps may not emit an element.
Project: http://git-wip-us.apache.org/repos/asf/tinkerpop/repo
Commit: http://git-wip-us.apache.org/repos/asf/tinkerpop/commit/da5b7da2
Tree: http://git-wip-us.apache.org/repos/asf/tinkerpop/tree/da5b7da2
Diff: http://git-wip-us.apache.org/repos/asf/tinkerpop/diff/da5b7da2
Branch: refs/heads/TINKERPOP-1958
Commit: da5b7da2c4dd7202b69f2a211542e9aa711fd2d8
Parents: 288b455
Author: Daniel Kuppitz <da...@hotmail.com>
Authored: Wed May 9 07:53:24 2018 -0700
Committer: Daniel Kuppitz <da...@hotmail.com>
Committed: Fri May 11 18:14:16 2018 -0700
----------------------------------------------------------------------
CHANGELOG.asciidoc | 1 +
.../traversal/step/map/GroovySelectTest.groovy | 5 ++++
gremlin-test/features/map/Select.feature | 22 ++++++++++++++++-
.../process/traversal/step/map/SelectTest.java | 15 ++++++++++++
.../optimization/TinkerGraphCountStrategy.java | 2 +-
.../TinkerGraphCountStrategyTest.java | 25 ++++++++++++--------
6 files changed, 58 insertions(+), 12 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/da5b7da2/CHANGELOG.asciidoc
----------------------------------------------------------------------
diff --git a/CHANGELOG.asciidoc b/CHANGELOG.asciidoc
index 41d83c4..71eb8fe 100644
--- a/CHANGELOG.asciidoc
+++ b/CHANGELOG.asciidoc
@@ -27,6 +27,7 @@ image::https://raw.githubusercontent.com/apache/tinkerpop/master/docs/static/ima
[[release-3-2-9]]
=== TinkerPop 3.2.9 (Release Date: May 8, 2018)
+* Fixed a bug in `TinkerGraphCountStrategy`, which didn't consider that certain map steps may not emit an element.
* Fixed bug where path history was not being preserved for keys in mutations.
* Bumped to httpclient 4.5.5.
* Bumped to Groovy 2.4.15 - fixes bug with `Lambda` construction.
http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/da5b7da2/gremlin-groovy-test/src/main/groovy/org/apache/tinkerpop/gremlin/process/traversal/step/map/GroovySelectTest.groovy
----------------------------------------------------------------------
diff --git a/gremlin-groovy-test/src/main/groovy/org/apache/tinkerpop/gremlin/process/traversal/step/map/GroovySelectTest.groovy b/gremlin-groovy-test/src/main/groovy/org/apache/tinkerpop/gremlin/process/traversal/step/map/GroovySelectTest.groovy
index 89fc691..104322d 100644
--- a/gremlin-groovy-test/src/main/groovy/org/apache/tinkerpop/gremlin/process/traversal/step/map/GroovySelectTest.groovy
+++ b/gremlin-groovy-test/src/main/groovy/org/apache/tinkerpop/gremlin/process/traversal/step/map/GroovySelectTest.groovy
@@ -104,6 +104,11 @@ public abstract class GroovySelectTest {
new ScriptTraversal<>(g, "gremlin-groovy", "g.V.choose(__.outE().count().is(0L), __.as('a'), __.as('b')).choose(select('a'),select('a'),select('b'))")
}
+ @Override
+ public Traversal<Vertex, Long> get_g_V_selectXaX_count() {
+ new ScriptTraversal<>(g, "gremlin-groovy", "g.V.select('a').count")
+ }
+
// below are original back()-tests
@Override
http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/da5b7da2/gremlin-test/features/map/Select.feature
----------------------------------------------------------------------
diff --git a/gremlin-test/features/map/Select.feature b/gremlin-test/features/map/Select.feature
index 35d9322..1e45a0e 100644
--- a/gremlin-test/features/map/Select.feature
+++ b/gremlin-test/features/map/Select.feature
@@ -514,4 +514,24 @@ Feature: Step - select()
Then the result should be unordered
| result |
| d[2].l |
- | d[2].l |
\ No newline at end of file
+ | d[2].l |
+
+ Scenario: g_V_selectXaX
+ Given the modern graph
+ And the traversal of
+ """
+ g.V().select("a")
+ """
+ When iterated to list
+ Then the result should be empty
+
+ Scenario: g_V_selectXaX_count
+ Given the modern graph
+ And the traversal of
+ """
+ g.V().select("a").count()
+ """
+ When iterated to list
+ Then the result should be unordered
+ | result |
+ | d[0].l |
http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/da5b7da2/gremlin-test/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/map/SelectTest.java
----------------------------------------------------------------------
diff --git a/gremlin-test/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/map/SelectTest.java b/gremlin-test/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/map/SelectTest.java
index c0486d0..3d778e4 100644
--- a/gremlin-test/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/map/SelectTest.java
+++ b/gremlin-test/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/map/SelectTest.java
@@ -83,6 +83,8 @@ public abstract class SelectTest extends AbstractGremlinProcessTest {
public abstract Traversal<Vertex, Vertex> get_g_V_chooseXoutE_count_isX0X__asXaX__asXbXX_chooseXselectXaX__selectXaX__selectXbXX();
+ public abstract Traversal<Vertex, Long> get_g_V_selectXaX_count();
+
// below are original back()-tests
public abstract Traversal<Vertex, Vertex> get_g_VX1X_asXhereX_out_selectXhereX(final Object v1Id);
@@ -344,6 +346,14 @@ public abstract class SelectTest extends AbstractGremlinProcessTest {
assertEquals(3, xCounter);
}
+ @Test
+ @LoadGraphWith(MODERN)
+ public void g_V_selectXaX_count() {
+ final Traversal<Vertex, Long> traversal = get_g_V_selectXaX_count();
+ printTraversalForm(traversal);
+ assertEquals(0L, traversal.next().longValue());
+ }
+
// below are original back()-tests
@Test
@@ -725,6 +735,11 @@ public abstract class SelectTest extends AbstractGremlinProcessTest {
return g.V().choose(__.outE().count().is(0L), __.as("a"), __.as("b")).choose(__.select("a"), __.select("a"), __.select("b"));
}
+ @Override
+ public Traversal<Vertex, Long> get_g_V_selectXaX_count() {
+ return g.V().select("a").count();
+ }
+
// below are original back()-tests
@Override
http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/da5b7da2/tinkergraph-gremlin/src/main/java/org/apache/tinkerpop/gremlin/tinkergraph/process/traversal/strategy/optimization/TinkerGraphCountStrategy.java
----------------------------------------------------------------------
diff --git a/tinkergraph-gremlin/src/main/java/org/apache/tinkerpop/gremlin/tinkergraph/process/traversal/strategy/optimization/TinkerGraphCountStrategy.java b/tinkergraph-gremlin/src/main/java/org/apache/tinkerpop/gremlin/tinkergraph/process/traversal/strategy/optimization/TinkerGraphCountStrategy.java
index 50e5c18..55e6b55 100644
--- a/tinkergraph-gremlin/src/main/java/org/apache/tinkerpop/gremlin/tinkergraph/process/traversal/strategy/optimization/TinkerGraphCountStrategy.java
+++ b/tinkergraph-gremlin/src/main/java/org/apache/tinkerpop/gremlin/tinkergraph/process/traversal/strategy/optimization/TinkerGraphCountStrategy.java
@@ -71,7 +71,7 @@ public final class TinkerGraphCountStrategy extends AbstractTraversalStrategy<Tr
return;
for (int i = 1; i < steps.size() - 1; i++) {
final Step current = steps.get(i);
- if (!(current instanceof MapStep ||
+ if (!(//current instanceof MapStep || // MapSteps will not necessarily emit an element as demonstrated in https://issues.apache.org/jira/browse/TINKERPOP-1958
current instanceof IdentityStep ||
current instanceof NoOpBarrierStep ||
current instanceof CollectingBarrierStep) ||
http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/da5b7da2/tinkergraph-gremlin/src/test/java/org/apache/tinkerpop/gremlin/tinkergraph/process/traversal/strategy/optimization/TinkerGraphCountStrategyTest.java
----------------------------------------------------------------------
diff --git a/tinkergraph-gremlin/src/test/java/org/apache/tinkerpop/gremlin/tinkergraph/process/traversal/strategy/optimization/TinkerGraphCountStrategyTest.java b/tinkergraph-gremlin/src/test/java/org/apache/tinkerpop/gremlin/tinkergraph/process/traversal/strategy/optimization/TinkerGraphCountStrategyTest.java
index 0db378b..ec9bd93 100644
--- a/tinkergraph-gremlin/src/test/java/org/apache/tinkerpop/gremlin/tinkergraph/process/traversal/strategy/optimization/TinkerGraphCountStrategyTest.java
+++ b/tinkergraph-gremlin/src/test/java/org/apache/tinkerpop/gremlin/tinkergraph/process/traversal/strategy/optimization/TinkerGraphCountStrategyTest.java
@@ -64,6 +64,11 @@ public class TinkerGraphCountStrategyTest {
for (final TraversalStrategy strategy : this.otherStrategies) {
strategies.addStrategies(strategy);
}
+ if (this.optimized == null) {
+ this.optimized = this.original.asAdmin().clone();
+ this.optimized.asAdmin().setStrategies(strategies);
+ this.optimized.asAdmin().applyStrategies();
+ }
this.original.asAdmin().setStrategies(strategies);
this.original.asAdmin().applyStrategies();
assertEquals(this.optimized, this.original);
@@ -81,17 +86,17 @@ public class TinkerGraphCountStrategyTest {
{__.V().count(), countStep(Vertex.class), TraversalStrategies.GlobalCache.getStrategies(TinkerGraph.class).toList()},
{__.V().as("a").count(), countStep(Vertex.class), TraversalStrategies.GlobalCache.getStrategies(TinkerGraph.class).toList()},
{__.V().count().as("a"), countStep(Vertex.class), TraversalStrategies.GlobalCache.getStrategies(TinkerGraph.class).toList()},
- {__.V().map(out()).count().as("a"), countStep(Vertex.class), TraversalStrategies.GlobalCache.getStrategies(TinkerGraph.class).toList()},
- {__.V().map(out()).identity().count().as("a"), countStep(Vertex.class), TraversalStrategies.GlobalCache.getStrategies(TinkerGraph.class).toList()},
- {__.V().map(out().groupCount()).identity().count().as("a"), countStep(Vertex.class), TraversalStrategies.GlobalCache.getStrategies(TinkerGraph.class).toList()},
- {__.V().label().map(s -> s.get().length()).count(), countStep(Vertex.class), TraversalStrategies.GlobalCache.getStrategies(TinkerGraph.class).toList()},
- {__.V().as("a").map(select("a")).count(), countStep(Vertex.class),TraversalStrategies.GlobalCache.getStrategies(TinkerGraph.class).toList()},
+ {__.V().map(out()).count().as("a"), null, TraversalStrategies.GlobalCache.getStrategies(TinkerGraph.class).toList()},
+ {__.V().map(out()).identity().count().as("a"), null, TraversalStrategies.GlobalCache.getStrategies(TinkerGraph.class).toList()},
+ {__.V().map(out().groupCount()).identity().count().as("a"), null, TraversalStrategies.GlobalCache.getStrategies(TinkerGraph.class).toList()},
+ {__.V().label().map(s -> s.get().length()).count(), null, TraversalStrategies.GlobalCache.getStrategies(TinkerGraph.class).toList()},
+ {__.V().as("a").map(select("a")).count(), null, TraversalStrategies.GlobalCache.getStrategies(TinkerGraph.class).toList()},
//
- {__.V(), __.V(), Collections.emptyList()},
- {__.V().out().count(), __.V().out().count(), Collections.emptyList()},
- {__.V(1).count(), __.V(1).count(), Collections.emptyList()},
- {__.count(), __.count(), Collections.emptyList()},
- {__.V().map(out().groupCount("m")).identity().count().as("a"), __.V().map(out().groupCount("m")).identity().count().as("a"), Collections.emptyList()},
+ {__.V(), null, Collections.emptyList()},
+ {__.V().out().count(), null, Collections.emptyList()},
+ {__.V(1).count(), null, Collections.emptyList()},
+ {__.count(), null, Collections.emptyList()},
+ {__.V().map(out().groupCount("m")).identity().count().as("a"), null, Collections.emptyList()},
});
}
}