You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@tinkerpop.apache.org by fl...@apache.org on 2018/05/11 14:05:47 UTC
[20/50] tinkerpop git commit: TINKERPOP-1947 Fixed path history
problem with mutations
TINKERPOP-1947 Fixed path history problem with mutations
When a key of a mutation was a traversal it was not being integrated to the parent traversal and tracked in the Parameters.
Project: http://git-wip-us.apache.org/repos/asf/tinkerpop/repo
Commit: http://git-wip-us.apache.org/repos/asf/tinkerpop/commit/8fbfab79
Tree: http://git-wip-us.apache.org/repos/asf/tinkerpop/tree/8fbfab79
Diff: http://git-wip-us.apache.org/repos/asf/tinkerpop/diff/8fbfab79
Branch: refs/heads/TINKERPOP-1836
Commit: 8fbfab7947d3cf547f7c27025be6876c5d86a1a4
Parents: b99c56a
Author: Stephen Mallette <sp...@genoprime.com>
Authored: Thu Apr 19 14:25:33 2018 -0400
Committer: Stephen Mallette <sp...@genoprime.com>
Committed: Thu Apr 19 14:25:33 2018 -0400
----------------------------------------------------------------------
CHANGELOG.asciidoc | 1 +
.../process/traversal/step/util/Parameters.java | 30 +++++++++++---------
.../step/map/GroovyAddVertexTest.groovy | 5 ++++
gremlin-test/features/map/AddVertex.feature | 27 ++++++++++++++++++
.../traversal/step/map/AddVertexTest.java | 20 +++++++++++--
5 files changed, 68 insertions(+), 15 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/8fbfab79/CHANGELOG.asciidoc
----------------------------------------------------------------------
diff --git a/CHANGELOG.asciidoc b/CHANGELOG.asciidoc
index 0f3a71a..6f7baa5 100644
--- a/CHANGELOG.asciidoc
+++ b/CHANGELOG.asciidoc
@@ -23,6 +23,7 @@ image::https://raw.githubusercontent.com/apache/tinkerpop/master/docs/static/ima
[[release-3-2-9]]
=== TinkerPop 3.2.9 (Release Date: NOT OFFICIALLY RELEASED YET)
+* Fixed bug where path history was not being preserved for keys in mutations.
* Bumped to httpclient 4.5.5.
[[release-3-2-8]]
http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/8fbfab79/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/util/Parameters.java
----------------------------------------------------------------------
diff --git a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/util/Parameters.java b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/util/Parameters.java
index 7fae30a..d368322 100644
--- a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/util/Parameters.java
+++ b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/util/Parameters.java
@@ -174,26 +174,30 @@ public final class Parameters implements Cloneable, Serializable {
if (keyValues.length % 2 != 0)
throw Element.Exceptions.providedKeyValuesMustBeAMultipleOfTwo();
- for (int i = 0; i < keyValues.length; i = i + 2) {
- if (!(keyValues[i] instanceof String) && !(keyValues[i] instanceof T) && !(keyValues[i] instanceof Traversal))
+ for (int ix = 0; ix < keyValues.length; ix = ix + 2) {
+ if (!(keyValues[ix] instanceof String) && !(keyValues[ix] instanceof T) && !(keyValues[ix] instanceof Traversal))
throw new IllegalArgumentException("The provided key/value array must have a String, T, or Traversal on even array indices");
- if (keyValues[i + 1] != null) {
- // track the list of traversals that are present so that elsewhere in Parameters there is no need
- // to iterate all values to not find any. also grab available labels in traversal values
- if (keyValues[i + 1] instanceof Traversal.Admin) {
- final Traversal.Admin t = (Traversal.Admin) keyValues[i + 1];
- addTraversal(t);
- if (parent != null) parent.integrateChild(t);
+ if (keyValues[ix + 1] != null) {
+
+ // check both key and value for traversal instances. track the list of traversals that are present so
+ // that elsewhere in Parameters there is no need to iterate all values to not find any. also grab
+ // available labels in traversal values
+ for (int iy = 0; iy < 2; iy++) {
+ if (keyValues[ix + iy] instanceof Traversal.Admin) {
+ final Traversal.Admin t = (Traversal.Admin) keyValues[ix + iy];
+ addTraversal(t);
+ if (parent != null) parent.integrateChild(t);
+ }
}
- List<Object> values = this.parameters.get(keyValues[i]);
+ List<Object> values = this.parameters.get(keyValues[ix]);
if (null == values) {
values = new ArrayList<>();
- values.add(keyValues[i + 1]);
- this.parameters.put(keyValues[i], values);
+ values.add(keyValues[ix + 1]);
+ this.parameters.put(keyValues[ix], values);
} else {
- values.add(keyValues[i + 1]);
+ values.add(keyValues[ix + 1]);
}
}
}
http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/8fbfab79/gremlin-groovy-test/src/main/groovy/org/apache/tinkerpop/gremlin/process/traversal/step/map/GroovyAddVertexTest.groovy
----------------------------------------------------------------------
diff --git a/gremlin-groovy-test/src/main/groovy/org/apache/tinkerpop/gremlin/process/traversal/step/map/GroovyAddVertexTest.groovy b/gremlin-groovy-test/src/main/groovy/org/apache/tinkerpop/gremlin/process/traversal/step/map/GroovyAddVertexTest.groovy
index 1956a7e..b9d753b 100644
--- a/gremlin-groovy-test/src/main/groovy/org/apache/tinkerpop/gremlin/process/traversal/step/map/GroovyAddVertexTest.groovy
+++ b/gremlin-groovy-test/src/main/groovy/org/apache/tinkerpop/gremlin/process/traversal/step/map/GroovyAddVertexTest.groovy
@@ -81,6 +81,11 @@ public abstract class GroovyAddVertexTest {
new ScriptTraversal<>(g, "gremlin-groovy", "g.withSideEffect('a', 'marko').addV().property('name', select('a')).name")
}
+ @Override
+ public Traversal<Vertex, String> get_g_withSideEffectXa_nameX_addV_propertyXselectXaX_markoX_name() {
+ new ScriptTraversal<>(g, "gremlin-groovy", "g.withSideEffect('a', 'name').addV().property(select('a'), 'marko').name")
+ }
+
///////// DEPRECATED BELOW
@Override
http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/8fbfab79/gremlin-test/features/map/AddVertex.feature
----------------------------------------------------------------------
diff --git a/gremlin-test/features/map/AddVertex.feature b/gremlin-test/features/map/AddVertex.feature
index 2813733..996521b 100644
--- a/gremlin-test/features/map/AddVertex.feature
+++ b/gremlin-test/features/map/AddVertex.feature
@@ -308,3 +308,30 @@ Feature: Step - addV()
| result |
| m[{"temp": ["test"], "name": ["lop"]}] |
| m[{"temp": ["test"], "name": ["ripple"]}] |
+
+ Scenario: g_withSideEffectXa_nameX_addV_propertyXselectXaX_markoX_name
+ Given the empty graph
+ And the graph initializer of
+ """
+ g.addV("person").property(T.id, 1).property("name", "marko").property("age", 29).as("marko").
+ addV("person").property(T.id, 2).property("name", "vadas").property("age", 27).as("vadas").
+ addV("software").property(T.id, 3).property("name", "lop").property("lang", "java").as("lop").
+ addV("person").property(T.id, 4).property("name","josh").property("age", 32).as("josh").
+ addV("software").property(T.id, 5).property("name", "ripple").property("lang", "java").as("ripple").
+ addV("person").property(T.id, 6).property("name", "peter").property("age", 35).as('peter').
+ addE("knows").from("marko").to("vadas").property(T.id, 7).property("weight", 0.5).
+ addE("knows").from("marko").to("josh").property(T.id, 8).property("weight", 1.0).
+ addE("created").from("marko").to("lop").property(T.id, 9).property("weight", 0.4).
+ addE("created").from("josh").to("ripple").property(T.id, 10).property("weight", 1.0).
+ addE("created").from("josh").to("lop").property(T.id, 11).property("weight", 0.4).
+ addE("created").from("peter").to("lop").property(T.id, 12).property("weight", 0.2)
+ """
+ And the traversal of
+ """
+ g.withSideEffect("a", "name").addV().property(__.select("a"), "marko").values("name")
+ """
+ When iterated to list
+ Then the result should be unordered
+ | result |
+ | marko |
+ And the graph should return 2 for count of "g.V().has(\"name\",\"marko\")"
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/8fbfab79/gremlin-test/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/map/AddVertexTest.java
----------------------------------------------------------------------
diff --git a/gremlin-test/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/map/AddVertexTest.java b/gremlin-test/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/map/AddVertexTest.java
index d44b439..7cf5e6a 100644
--- a/gremlin-test/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/map/AddVertexTest.java
+++ b/gremlin-test/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/map/AddVertexTest.java
@@ -38,10 +38,8 @@ import java.util.Map;
import static org.apache.tinkerpop.gremlin.LoadGraphWith.GraphData.MODERN;
import static org.apache.tinkerpop.gremlin.process.traversal.dsl.graph.__.select;
-import static org.hamcrest.Matchers.containsInAnyOrder;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertFalse;
-import static org.junit.Assert.assertThat;
import static org.junit.Assert.assertTrue;
/**
@@ -70,6 +68,8 @@ public abstract class AddVertexTest extends AbstractGremlinTest {
public abstract Traversal<Vertex, String> get_g_withSideEffectXa_markoX_addV_propertyXname_selectXaXX_name();
+ public abstract Traversal<Vertex, String> get_g_withSideEffectXa_nameX_addV_propertyXselectXaX_markoX_name();
+
// 3.0.0 DEPRECATIONS
@Deprecated
public abstract Traversal<Vertex, Vertex> get_g_V_addVXlabel_animal_age_0X();
@@ -296,6 +296,17 @@ public abstract class AddVertexTest extends AbstractGremlinTest {
assertFalse(traversal.hasNext());
}
+ @Test
+ @LoadGraphWith(MODERN)
+ @FeatureRequirement(featureClass = Graph.Features.VertexFeatures.class, feature = Graph.Features.VertexFeatures.FEATURE_ADD_VERTICES)
+ @FeatureRequirement(featureClass = Graph.Features.VertexFeatures.class, feature = Graph.Features.VertexFeatures.FEATURE_ADD_PROPERTY)
+ public void g_withSideEffectXa_nameX_addV_propertyXselectXaX_markoX_name() {
+ final Traversal<Vertex, String> traversal = get_g_withSideEffectXa_nameX_addV_propertyXselectXaX_markoX_name();
+ printTraversalForm(traversal);
+ assertEquals("marko", traversal.next());
+ assertFalse(traversal.hasNext());
+ }
+
public static class Traversals extends AddVertexTest {
@@ -358,5 +369,10 @@ public abstract class AddVertexTest extends AbstractGremlinTest {
public Traversal<Vertex, String> get_g_withSideEffectXa_markoX_addV_propertyXname_selectXaXX_name() {
return g.withSideEffect("a", "marko").addV().property("name", select("a")).values("name");
}
+
+ @Override
+ public Traversal<Vertex, String> get_g_withSideEffectXa_nameX_addV_propertyXselectXaX_markoX_name() {
+ return g.withSideEffect("a", "name").addV().property(select("a"),"marko").values("name");
+ }
}
}
\ No newline at end of file