This is an automated email from the ASF dual-hosted git repository.
dkuppitz pushed a commit to branch TINKERPOP-2059
in repository https://gitbox.apache.org/repos/asf/tinkerpop.git
The following commit(s) were added to refs/heads/TINKERPOP-2059 by this push:
new e3c2e29 Added changes suggested by @spmallette.
e3c2e29 is described below
commit e3c2e295cdbb7e4713f5a764f26eaedd6be12e06
Author: Daniel Kuppitz <[email protected]>
AuthorDate: Mon Nov 5 16:23:49 2018 -0700
Added changes suggested by @spmallette.
---
docs/src/upgrade/release-3.4.x.asciidoc | 6 +++
.../traversal/dsl/graph/GraphTraversal.java | 2 +
.../gremlin/process/traversal/dsl/graph/__.java | 2 +
.../traversal/step/map/PropertyMapStepTest.java | 4 ++
gremlin-test/features/map/AddVertex.feature | 25 ++++++++++++
gremlin-test/features/map/ValueMap.feature | 45 ++++++++++++++++++++++
.../process/traversal/step/map/AddVertexTest.java | 22 +++++++++++
7 files changed, 106 insertions(+)
diff --git a/docs/src/upgrade/release-3.4.x.asciidoc
b/docs/src/upgrade/release-3.4.x.asciidoc
index 3d38ae3..618a96b 100644
--- a/docs/src/upgrade/release-3.4.x.asciidoc
+++ b/docs/src/upgrade/release-3.4.x.asciidoc
@@ -93,6 +93,12 @@ gremlin>
g.V().has("person","name","marko").properties("location").valueMap().wi
==>[value:santa fe,startTime:2005]
```
+As shown above, the support of the `with()` modulator for `valueMap()` makes
the `valueMap(boolean)` overload superfluous, hence this overload is now
deprecated. This is a breaking API change, since
+`valueMap()` will now always yield instances of type `Map<Object, Object>`.
Prior this change only the `valueMap(boolean)` overload yielded `Map<Object,
Object>` objects, `valueMap()` without the
+boolean parameter used to yield instances of type `Map<String, Object>`.
+
+See: link:https://issues.apache.org/jira/browse/TINKERPOP-2059[TINKERPOP-2059]
+
==== Changed number comparison behavior of within()/without() predicates
In previous versions `within()` and `without()` performed strict number
comparisons; that means these predicates did not only compare number values,
but also the time. This was inconsistent with
diff --git
a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/dsl/graph/GraphTraversal.java
b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/dsl/graph/GraphTraversal.java
index fc24459..1ef0be7 100644
---
a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/dsl/graph/GraphTraversal.java
+++
b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/dsl/graph/GraphTraversal.java
@@ -575,6 +575,8 @@ public interface GraphTraversal<S, E> extends Traversal<S,
E> {
* @return the traversal with an appended {@link PropertyMapStep}.
* @see <a
href="http://tinkerpop.apache.org/docs/${project.version}/reference/#valuemap-step"
target="_blank">Reference Documentation - ValueMap Step</a>
* @since 3.0.0-incubating
+ * @deprecated As of release 3.4.0, deprecated in favor of {@link
GraphTraversal#valueMap(String...)} in conjunction with
+ * {@link GraphTraversal#with(String, Object)}.
*/
@Deprecated
public default <E2> GraphTraversal<S, Map<Object, E2>> valueMap(final
boolean includeTokens, final String... propertyKeys) {
diff --git
a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/dsl/graph/__.java
b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/dsl/graph/__.java
index 4361f29..c0f9cad 100644
---
a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/dsl/graph/__.java
+++
b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/dsl/graph/__.java
@@ -262,6 +262,8 @@ public class __ {
/**
* @see GraphTraversal#valueMap(boolean, String...)
+ * @deprecated As of release 3.4.0, deprecated in favor of {@link
__#valueMap(String...)} in conjunction with
+ * {@link GraphTraversal#with(String, Object)}.
*/
@Deprecated
public static <A extends Element, B> GraphTraversal<A, Map<Object, B>>
valueMap(final boolean includeTokens, final String... propertyKeys) {
diff --git
a/gremlin-core/src/test/java/org/apache/tinkerpop/gremlin/process/traversal/step/map/PropertyMapStepTest.java
b/gremlin-core/src/test/java/org/apache/tinkerpop/gremlin/process/traversal/step/map/PropertyMapStepTest.java
index c46950e..bdfeadd 100644
---
a/gremlin-core/src/test/java/org/apache/tinkerpop/gremlin/process/traversal/step/map/PropertyMapStepTest.java
+++
b/gremlin-core/src/test/java/org/apache/tinkerpop/gremlin/process/traversal/step/map/PropertyMapStepTest.java
@@ -38,6 +38,10 @@ public class PropertyMapStepTest extends StepTest {
__.valueMap("name"),
__.valueMap("age"),
__.valueMap("name", "age"),
+ __.valueMap(true),
+ __.valueMap(true, "name"),
+ __.valueMap(true, "age"),
+ __.valueMap(true, "name", "age"),
__.valueMap().with(WithOptions.tokens),
__.valueMap("name").with(WithOptions.tokens),
__.valueMap("age").with(WithOptions.tokens),
diff --git a/gremlin-test/features/map/AddVertex.feature
b/gremlin-test/features/map/AddVertex.feature
index a60fefb..1bb3ce1 100644
--- a/gremlin-test/features/map/AddVertex.feature
+++ b/gremlin-test/features/map/AddVertex.feature
@@ -336,6 +336,31 @@ Feature: Step - addV()
| marko |
And the graph should return 2 for count of "g.V().has(\"name\",\"marko\")"
+ Scenario:
g_V_asXaX_hasXname_markoX_outXcreatedX_asXbX_addVXselectXaX_labelX_propertyXtest_selectXbX_labelX_valueMapXtrueX
+ 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.V().as("a").has("name",
"marko").out("created").as("b").addV(__.select("a").label()).property("test",
__.select("b").label()).valueMap(true)
+ """
+ When iterated to list
+ Then the result should have a count of 1
+ And the graph should return 1 for count of
"g.V().has(\"person\",\"test\",\"software\")"
+
Scenario:
g_V_asXaX_hasXname_markoX_outXcreatedX_asXbX_addVXselectXaX_labelX_propertyXtest_selectXbX_labelX_valueMap_withXtokensX
Given the empty graph
And the graph initializer of
diff --git a/gremlin-test/features/map/ValueMap.feature
b/gremlin-test/features/map/ValueMap.feature
index e8880f8..82aaffd 100644
--- a/gremlin-test/features/map/ValueMap.feature
+++ b/gremlin-test/features/map/ValueMap.feature
@@ -33,6 +33,22 @@ Feature: Step - valueMap()
| m[{"name": ["lop"], "lang": ["java"]}] |
| m[{"name": ["ripple"], "lang": ["java"]}] |
+ Scenario: g_V_valueMapXtrueX
+ Given the modern graph
+ And the traversal of
+ """
+ g.V().valueMap(true)
+ """
+ When iterated to list
+ Then the result should be unordered
+ | result |
+ | m[{"t[id]": "v[marko].id", "t[label]": "person", "name": ["marko"],
"age": [29]}] |
+ | m[{"t[id]": "v[josh].id", "t[label]": "person", "name": ["josh"],
"age": [32]}] |
+ | m[{"t[id]": "v[peter].id", "t[label]": "person", "name": ["peter"],
"age": [35]}] |
+ | m[{"t[id]": "v[vadas].id", "t[label]": "person", "name": ["vadas"],
"age": [27]}] |
+ | m[{"t[id]": "v[lop].id", "t[label]": "software", "name": ["lop"],
"lang": ["java"]}] |
+ | m[{"t[id]": "v[ripple].id", "t[label]": "software", "name":
["ripple"], "lang": ["java"]}] |
+
Scenario: g_V_valueMap_withXtokensX
Given the modern graph
And the traversal of
@@ -65,6 +81,22 @@ Feature: Step - valueMap()
| m[{"name": ["lop"]}] |
| m[{"name": ["ripple"]}] |
+ Scenario: g_V_valueMapXtrue_name_ageX
+ Given the modern graph
+ And the traversal of
+ """
+ g.V().valueMap(true, "name", "age")
+ """
+ When iterated to list
+ Then the result should be unordered
+ | result |
+ | m[{"t[id]": "v[marko].id", "t[label]": "person", "name": ["marko"],
"age": [29]}] |
+ | m[{"t[id]": "v[josh].id", "t[label]": "person", "name": ["josh"],
"age": [32]}] |
+ | m[{"t[id]": "v[peter].id", "t[label]": "person", "name": ["peter"],
"age": [35]}] |
+ | m[{"t[id]": "v[vadas].id", "t[label]": "person", "name": ["vadas"],
"age": [27]}] |
+ | m[{"t[id]": "v[lop].id", "t[label]": "software", "name": ["lop"]}] |
+ | m[{"t[id]": "v[ripple].id", "t[label]": "software", "name":
["ripple"]}] |
+
Scenario: g_V_valueMapXname_ageX_withXtokensX
Given the modern graph
And the traversal of
@@ -109,6 +141,19 @@ Feature: Step - valueMap()
| result |
| m[{"name": ["lop"], "lang": ["java"]}] |
+ Scenario: g_V_hasLabelXpersonX_filterXoutEXcreatedXX_valueMapXtrueX
+ Given the modern graph
+ And the traversal of
+ """
+ g.V().hasLabel("person").filter(__.outE("created")).valueMap(true)
+ """
+ When iterated to list
+ Then the result should be unordered
+ | result |
+ | m[{"name": ["marko"], "age": [29], "t[label]":"person",
"t[id]":"v[marko].id"}] |
+ | m[{"name": ["josh"], "age": [32], "t[label]":"person",
"t[id]":"v[josh].id"}] |
+ | m[{"name": ["peter"], "age": [35], "t[label]":"person",
"t[id]":"v[peter].id"}] |
+
Scenario: g_V_hasLabelXpersonX_filterXoutEXcreatedXX_valueMap_withXtokensX
Given the modern graph
And the traversal of
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 21fbb8c..858f979 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
@@ -74,6 +74,8 @@ public abstract class AddVertexTest extends
AbstractGremlinTest {
public abstract Traversal<Vertex, String>
get_g_withSideEffectXa_nameX_addV_propertyXselectXaX_markoX_name();
+ public abstract Traversal<Vertex, Map<Object, Object>>
get_g_V_asXaX_hasXname_markoX_outXcreatedX_asXbX_addVXselectXaX_labelX_propertyXtest_selectXbX_labelX_valueMapXtrueX();
+
public abstract Traversal<Vertex, Map<Object, Object>>
get_g_V_asXaX_hasXname_markoX_outXcreatedX_asXbX_addVXselectXaX_labelX_propertyXtest_selectXbX_labelX_valueMap_withXtokensX();
@Test
@@ -286,6 +288,21 @@ public abstract class AddVertexTest extends
AbstractGremlinTest {
@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_V_asXaX_hasXname_markoX_outXcreatedX_asXbX_addVXselectXaX_labelX_propertyXtest_selectXbX_labelX_valueMapXtrueX()
{
+ final Traversal<Vertex, Map<Object,Object>> traversal =
get_g_V_asXaX_hasXname_markoX_outXcreatedX_asXbX_addVXselectXaX_labelX_propertyXtest_selectXbX_labelX_valueMapXtrueX();
+ printTraversalForm(traversal);
+ final Map<Object,Object> map = traversal.next();
+ assertFalse(traversal.hasNext());
+ assertEquals("person",map.get(T.label));
+ assertEquals("software",((List)map.get("test")).get(0));
+ assertEquals(1, ((List)map.get("test")).size());
+ assertEquals(3, map.size());
+ }
+
+ @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_V_asXaX_hasXname_markoX_outXcreatedX_asXbX_addVXselectXaX_labelX_propertyXtest_selectXbX_labelX_valueMap_withXtokensX()
{
final Traversal<Vertex, Map<Object,Object>> traversal =
get_g_V_asXaX_hasXname_markoX_outXcreatedX_asXbX_addVXselectXaX_labelX_propertyXtest_selectXbX_labelX_valueMap_withXtokensX();
printTraversalForm(traversal);
@@ -360,6 +377,11 @@ public abstract class AddVertexTest extends
AbstractGremlinTest {
}
@Override
+ public Traversal<Vertex, Map<Object, Object>>
get_g_V_asXaX_hasXname_markoX_outXcreatedX_asXbX_addVXselectXaX_labelX_propertyXtest_selectXbX_labelX_valueMapXtrueX()
{
+ return g.V().as("a").has("name",
"marko").out("created").as("b").addV(select("a").label()).property("test",
select("b").label()).valueMap(true);
+ }
+
+ @Override
public Traversal<Vertex, Map<Object, Object>>
get_g_V_asXaX_hasXname_markoX_outXcreatedX_asXbX_addVXselectXaX_labelX_propertyXtest_selectXbX_labelX_valueMap_withXtokensX()
{
return g.V().as("a").has("name",
"marko").out("created").as("b").addV(select("a").label()).property("test",
select("b").label()).valueMap().with(WithOptions.tokens);
}