This is an automated email from the ASF dual-hosted git repository.
spmallette pushed a commit to branch TINKERPOP-2605
in repository https://gitbox.apache.org/repos/asf/tinkerpop.git
The following commit(s) were added to refs/heads/TINKERPOP-2605 by this push:
new 9d120d1 TINKERPOP-2605 Added test for where() evaluated null equality
9d120d1 is described below
commit 9d120d17f204171aed6695b14545e343765f9adb
Author: Stephen Mallette <[email protected]>
AuthorDate: Wed Aug 25 12:10:47 2021 -0400
TINKERPOP-2605 Added test for where() evaluated null equality
---
.../test/Gremlin.Net.IntegrationTest/Gherkin/Gremlin.cs | 1 +
.../gremlin-javascript/test/cucumber/gremlin.js | 1 +
gremlin-python/src/main/python/radish/gremlin.py | 1 +
gremlin-test/features/filter/Where.feature | 15 +++++++++++++++
.../gremlin/process/traversal/step/filter/WhereTest.java | 15 +++++++++++++++
5 files changed, 33 insertions(+)
diff --git a/gremlin-dotnet/test/Gremlin.Net.IntegrationTest/Gherkin/Gremlin.cs
b/gremlin-dotnet/test/Gremlin.Net.IntegrationTest/Gherkin/Gremlin.cs
index 6bc762c..a3966da 100644
--- a/gremlin-dotnet/test/Gremlin.Net.IntegrationTest/Gherkin/Gremlin.cs
+++ b/gremlin-dotnet/test/Gremlin.Net.IntegrationTest/Gherkin/Gremlin.cs
@@ -307,6 +307,7 @@ namespace Gremlin.Net.IntegrationTest.Gherkin
{"g_V_asXaX_outEXcreatedX_asXbX_inV_asXcX_whereXa_gtXbX_orXeqXbXXX_byXageX_byXweightX_byXweightX_selectXa_cX_byXnameX",
new List<Func<GraphTraversalSource, IDictionary<string, object>, ITraversal>>
{(g,p)
=>g.V().As("a").OutE("created").As("b").InV().As("c").Where("a",P.Gt("b").Or(P.Eq("b"))).By("age").By("weight").By("weight").Select<object>("a","c").By("name")}},
{"g_V_asXaX_outEXcreatedX_asXbX_inV_asXcX_inXcreatedX_asXdX_whereXa_ltXbX_orXgtXcXX_andXneqXdXXX_byXageX_byXweightX_byXinXcreatedX_valuesXageX_minX_selectXa_c_dX",
new List<Func<GraphTraversalSource, IDictionary<string, object>, ITraversal>>
{(g,p)
=>g.V().As("a").OutE("created").As("b").InV().As("c").In("created").As("d").Where("a",P.Lt("b").Or(P.Gt("c")).And(P.Neq("d"))).By("age").By("weight").By(__.In("created").Values<object>("age").Min<object>()).Select<object>("a","c
[...]
{"g_VX1X_asXaX_out_hasXageX_whereXgtXaXX_byXageX_name", new
List<Func<GraphTraversalSource, IDictionary<string, object>, ITraversal>>
{(g,p)
=>g.V(p["vid1"]).As("a").Out().Has("age").Where(P.Gt("a")).By("age").Values<object>("name")}},
+ {"g_VX3X_asXaX_in_out_asXbX_whereXa_eqXbXX_byXageX_name", new
List<Func<GraphTraversalSource, IDictionary<string, object>, ITraversal>>
{(g,p)
=>g.V(p["vid3"]).As("a").In().Out().As("b").Where("a",P.Eq("b")).By("age").Values<object>("name")}},
{"g_VX1X_asXaX_outXcreatedX_addEXcreatedByX_toXaX", new
List<Func<GraphTraversalSource, IDictionary<string, object>, ITraversal>>
{(g,p)
=>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
[...]
{"g_VX1X_asXaX_outXcreatedX_addEXcreatedByX_toXaX_propertyXweight_2X", new
List<Func<GraphTraversalSource, IDictionary<string, object>, ITraversal>>
{(g,p)
=>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","j
[...]
{"g_V_outE_propertyXweight_nullX", new
List<Func<GraphTraversalSource, IDictionary<string, object>, ITraversal>>
{(g,p)
=>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").
[...]
diff --git
a/gremlin-javascript/src/main/javascript/gremlin-javascript/test/cucumber/gremlin.js
b/gremlin-javascript/src/main/javascript/gremlin-javascript/test/cucumber/gremlin.js
index a82873b..d0aa270 100644
---
a/gremlin-javascript/src/main/javascript/gremlin-javascript/test/cucumber/gremlin.js
+++
b/gremlin-javascript/src/main/javascript/gremlin-javascript/test/cucumber/gremlin.js
@@ -296,6 +296,7 @@ const gremlins = {
g_V_asXaX_outEXcreatedX_asXbX_inV_asXcX_whereXa_gtXbX_orXeqXbXXX_byXageX_byXweightX_byXweightX_selectXa_cX_byXnameX:
[function({g}) { return
g.V().as("a").outE("created").as("b").inV().as("c").where("a",P.gt("b").or(P.eq("b"))).by("age").by("weight").by("weight").select("a","c").by("name")
}],
g_V_asXaX_outEXcreatedX_asXbX_inV_asXcX_inXcreatedX_asXdX_whereXa_ltXbX_orXgtXcXX_andXneqXdXXX_byXageX_byXweightX_byXinXcreatedX_valuesXageX_minX_selectXa_c_dX:
[function({g}) { return
g.V().as("a").outE("created").as("b").inV().as("c").in_("created").as("d").where("a",P.lt("b").or(P.gt("c")).and(P.neq("d"))).by("age").by("weight").by(__.in_("created").values("age").min()).select("a","c","d").by("name")
}],
g_VX1X_asXaX_out_hasXageX_whereXgtXaXX_byXageX_name: [function({g, vid1})
{ return
g.V(vid1).as("a").out().has("age").where(P.gt("a")).by("age").values("name")
}],
+ g_VX3X_asXaX_in_out_asXbX_whereXa_eqXbXX_byXageX_name: [function({g,
vid3}) { return
g.V(vid3).as("a").in_().out().as("b").where("a",P.eq("b")).by("age").values("name")
}],
g_VX1X_asXaX_outXcreatedX_addEXcreatedByX_toXaX: [function({g, vid1}) {
return
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","rip
[...]
g_VX1X_asXaX_outXcreatedX_addEXcreatedByX_toXaX_propertyXweight_2X:
[function({g, vid1}) { return
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).p
[...]
g_V_outE_propertyXweight_nullX: [function({g}) { return
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","
[...]
diff --git a/gremlin-python/src/main/python/radish/gremlin.py
b/gremlin-python/src/main/python/radish/gremlin.py
index 8b4100c..317a387 100644
--- a/gremlin-python/src/main/python/radish/gremlin.py
+++ b/gremlin-python/src/main/python/radish/gremlin.py
@@ -281,6 +281,7 @@ world.gremlins = {
'g_V_asXaX_outEXcreatedX_asXbX_inV_asXcX_whereXa_gtXbX_orXeqXbXXX_byXageX_byXweightX_byXweightX_selectXa_cX_byXnameX':
[(lambda
g:g.V().as_('a').outE('created').as_('b').inV().as_('c').where('a',P.gt('b').or_(P.eq('b'))).by('age').by('weight').by('weight').select('a','c').by('name'))],
'g_V_asXaX_outEXcreatedX_asXbX_inV_asXcX_inXcreatedX_asXdX_whereXa_ltXbX_orXgtXcXX_andXneqXdXXX_byXageX_byXweightX_byXinXcreatedX_valuesXageX_minX_selectXa_c_dX':
[(lambda
g:g.V().as_('a').outE('created').as_('b').inV().as_('c').in_('created').as_('d').where('a',P.lt('b').or_(P.gt('c')).and_(P.neq('d'))).by('age').by('weight').by(__.in_('created').age.min()).select('a','c','d').by('name'))],
'g_VX1X_asXaX_out_hasXageX_whereXgtXaXX_byXageX_name': [(lambda g,
vid1=None:g.V(vid1).as_('a').out().has('age').where(P.gt('a')).by('age').name)],
+ 'g_VX3X_asXaX_in_out_asXbX_whereXa_eqXbXX_byXageX_name': [(lambda g,
vid3=None:g.V(vid3).as_('a').in_().out().as_('b').where('a',P.eq('b')).by('age').name)],
'g_VX1X_asXaX_outXcreatedX_addEXcreatedByX_toXaX': [(lambda g,
vid1=None: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','rippl
[...]
'g_VX1X_asXaX_outXcreatedX_addEXcreatedByX_toXaX_propertyXweight_2X':
[(lambda g,
vid1=None: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).pro
[...]
'g_V_outE_propertyXweight_nullX': [(lambda
g: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').
[...]
diff --git a/gremlin-test/features/filter/Where.feature
b/gremlin-test/features/filter/Where.feature
index 374c63c..f4e8f9b 100644
--- a/gremlin-test/features/filter/Where.feature
+++ b/gremlin-test/features/filter/Where.feature
@@ -324,3 +324,18 @@ Feature: Step - where()
| result |
| josh |
+ # comparison of null "age" values in where()
+ Scenario: g_VX3X_asXaX_in_out_asXbX_whereXa_eqXbXX_byXageX_name
+ Given the modern graph
+ And using the parameter vid3 defined as "v[lop].id"
+ And the traversal of
+ """
+ g.V(vid3).as("a").in().out().as("b").where("a",
P.eq("b")).by("age").values("name")
+ """
+ When iterated to list
+ Then the result should be unordered
+ | result |
+ | lop |
+ | lop |
+ | lop |
+ | ripple |
\ No newline at end of file
diff --git
a/gremlin-test/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/filter/WhereTest.java
b/gremlin-test/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/filter/WhereTest.java
index 337d627..dd02b59 100644
---
a/gremlin-test/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/filter/WhereTest.java
+++
b/gremlin-test/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/filter/WhereTest.java
@@ -123,6 +123,8 @@ public abstract class WhereTest extends
AbstractGremlinProcessTest {
public abstract Traversal<Vertex, String>
get_g_VX1X_asXaX_out_hasXageX_whereXgtXaXX_byXageX_name(final Object v1Id);
+ public abstract Traversal<Vertex, String>
get_g_VX3X_asXaX_in_out_asXbX_whereXa_eqXbXX_byXageX_name(final Object v3Id);
+
@Test
@LoadGraphWith(MODERN)
public void
g_V_hasXageX_asXaX_out_in_hasXageX_asXbX_selectXa_bX_whereXa_eqXbXX() {
@@ -406,6 +408,14 @@ public abstract class WhereTest extends
AbstractGremlinProcessTest {
assertFalse(traversal.hasNext());
}
+ @Test
+ @LoadGraphWith(MODERN)
+ public void g_VX3X_asXaX_in_out_asXbX_whereXa_eqXbXX_byXageX_name() {
+ final Traversal<Vertex, String> traversal =
get_g_VX3X_asXaX_in_out_asXbX_whereXa_eqXbXX_byXageX_name(convertToVertexId(graph,
"lop"));
+ printTraversalForm(traversal);
+ checkResults(Arrays.asList("lop", "lop", "lop", "ripple"), traversal);
+ }
+
public static class Traversals extends WhereTest {
@@ -535,5 +545,10 @@ public abstract class WhereTest extends
AbstractGremlinProcessTest {
public Traversal<Vertex, String>
get_g_VX1X_asXaX_out_hasXageX_whereXgtXaXX_byXageX_name(final Object v1Id) {
return
g.V(v1Id).as("a").out().has("age").where(gt("a")).by("age").values("name");
}
+
+ @Override
+ public Traversal<Vertex, String>
get_g_VX3X_asXaX_in_out_asXbX_whereXa_eqXbXX_byXageX_name(final Object v3Id) {
+ return g.V(v3Id).as("a").in().out().as("b").where("a",
eq("b")).by("age").values("name");
+ }
}
}
\ No newline at end of file