This is an automated email from the ASF dual-hosted git repository. xiazcy pushed a commit to branch steps-taking-traversal-poc in repository https://gitbox.apache.org/repos/asf/tinkerpop.git
commit 0c2a39dc17a1d5695aeada74e7d870b3613b5e50 Author: Yang Xia <[email protected]> AuthorDate: Wed Jun 3 10:25:25 2026 -0700 update within() to take first result --- .../tinkerpop/gremlin/process/traversal/P.java | 60 ++++----- .../gremlin/process/traversal/PTraversalTest.java | 14 ++- .../Gremlin.Net.IntegrationTest/Gherkin/Gremlin.cs | 14 +-- gremlin-go/driver/cucumber/gremlin.go | 14 +-- .../gremlin-javascript/test/cucumber/gremlin.js | 14 +-- .../src/main/python/tests/feature/gremlin.py | 14 +-- .../gremlin/language/translator/translations.json | 140 ++++++++++----------- .../test/features/filter/HasTraversal.feature | 14 +-- .../test/features/filter/IsTraversal.feature | 2 +- .../test/features/filter/WhereTraversal.feature | 2 +- 10 files changed, 147 insertions(+), 141 deletions(-) diff --git a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/P.java b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/P.java index 80779cd56a..72cd3bcc5d 100644 --- a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/P.java +++ b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/P.java @@ -321,13 +321,14 @@ public class P<V> implements Predicate<V>, Serializable, Cloneable { * Resolves the child traversal against the given traverser, replacing the traversal value with the * resolved literal(s) for this test cycle. If no traversal is present, this method returns immediately. * - * <p>For collection predicates ({@link Contains}), all results are collected into the literals - * collection. For all other predicates ({@link Compare}, {@link Text}, etc.), the traversal must - * produce exactly one result or an {@link IllegalArgumentException} is thrown.</p> + * <p>For all predicates, only the first result from the child traversal is used, + * consistent with {@code by(traversal)} semantics. For collection predicates + * ({@link Contains#within}, {@link Contains#without}), the first result should be a + * {@link Collection} (e.g., produced by {@code fold()}).</p> * * <p>When multiple traversals are present (via {@link #traversalValues}), each traversal is evaluated - * independently and results are unioned into a single collection. This is only valid for collection - * predicates ({@link Contains#within}, {@link Contains#without}).</p> + * independently, the first result from each is taken, and results are combined into a single collection. + * This is only valid for collection predicates ({@link Contains#within}, {@link Contains#without}).</p> */ @SuppressWarnings("unchecked") public void resolve(final Traverser.Admin<?> traverser) { @@ -348,28 +349,24 @@ public class P<V> implements Predicate<V>, Serializable, Cloneable { this.isCollection = false; try { - if (this.biPredicate instanceof Contains) { - // Collection predicates (within, without) need all results - final List<Object> results = new ArrayList<>(); - while (trav.hasNext()) { - results.add(trav.next()); - } - this.resolvedEmpty = results.isEmpty(); - if (!results.isEmpty()) { - this.literals = (Collection<V>) (Collection<?>) results; - this.isCollection = true; - } else { - this.literals = Collections.emptyList(); - } + // All predicates take only the first result — consistent with by(traversal). + // For within/without, the first result should be a Collection (e.g., from fold()). + if (!trav.hasNext()) { + this.resolvedEmpty = true; + this.literals = Collections.emptyList(); } else { - // Single-value predicates (Compare, Text, etc.) only need the first result. - // Stop immediately — consistent with by(traversal) and has(key, traversal). - if (!trav.hasNext()) { - this.resolvedEmpty = true; - this.literals = Collections.emptyList(); + this.resolvedEmpty = false; + final Object firstResult = trav.next(); + if (this.biPredicate instanceof Contains && firstResult instanceof Collection) { + // The traversal produced a Collection as its first result — use it directly + this.literals = (Collection<V>) firstResult; + this.isCollection = true; + } else if (this.biPredicate instanceof Contains) { + // Single non-Collection value for within/without — wrap in a singleton list + this.literals = Collections.singletonList((V) firstResult); + this.isCollection = true; } else { - this.resolvedEmpty = false; - this.literals = Collections.singleton((V) trav.next()); + this.literals = Collections.singleton((V) firstResult); } } } finally { @@ -378,7 +375,7 @@ public class P<V> implements Predicate<V>, Serializable, Cloneable { } /** - * Resolves multiple child traversals, unioning their results into a single collection. + * Resolves multiple child traversals, taking the first result from each and combining into a collection. * Only valid for collection predicates ({@link Contains}). */ @SuppressWarnings("unchecked") @@ -394,8 +391,15 @@ public class P<V> implements Predicate<V>, Serializable, Cloneable { trav.addStart(split); try { - while (trav.hasNext()) { - allResults.add(trav.next()); + // Take only the first result from each traversal — consistent with by(traversal). + // If the first result is a Collection (from fold()), unpack it into the results. + if (trav.hasNext()) { + final Object firstResult = trav.next(); + if (firstResult instanceof Collection) { + allResults.addAll((Collection<?>) firstResult); + } else { + allResults.add(firstResult); + } } } finally { CloseableIterator.closeIterator(trav); diff --git a/gremlin-core/src/test/java/org/apache/tinkerpop/gremlin/process/traversal/PTraversalTest.java b/gremlin-core/src/test/java/org/apache/tinkerpop/gremlin/process/traversal/PTraversalTest.java index 40200c8eaa..010965c3f9 100644 --- a/gremlin-core/src/test/java/org/apache/tinkerpop/gremlin/process/traversal/PTraversalTest.java +++ b/gremlin-core/src/test/java/org/apache/tinkerpop/gremlin/process/traversal/PTraversalTest.java @@ -163,7 +163,8 @@ public class PTraversalTest { @SuppressWarnings("unchecked") @Test public void shouldAcceptMultipleResultsForWithin() { - final P<Object> p = P.within(__.inject(1, 2, 3).asAdmin()); + // within(traversal) takes first result only. Use fold() to get a collection. + final P<Object> p = P.within(__.inject(1, 2, 3).fold().asAdmin()); p.resolve(createTraverser("start")); // After resolve, the predicate should have the collection value and be testable assertThat(p.test(1), is(true)); @@ -175,7 +176,8 @@ public class PTraversalTest { @SuppressWarnings("unchecked") @Test public void shouldAcceptMultipleResultsForWithout() { - final P<Object> p = P.without(__.inject(1, 2, 3).asAdmin()); + // without(traversal) takes first result only. Use fold() to get a collection. + final P<Object> p = P.without(__.inject(1, 2, 3).fold().asAdmin()); p.resolve(createTraverser("start")); // After resolve, without should exclude the resolved values assertThat(p.test(1), is(false)); @@ -303,8 +305,8 @@ public class PTraversalTest { @SuppressWarnings("unchecked") @Test public void shouldResolveMultipleTraversalsWithMultipleResultsEach() { - // within(__.inject(1,2), __.inject(3,4)) should union: [1, 2, 3, 4] - final P<Object> p = P.within(__.inject(1, 2).asAdmin(), __.inject(3, 4).asAdmin()); + // within(__.inject(1,2).fold(), __.inject(3,4).fold()) — each fold() produces a list, unpacked into union + final P<Object> p = P.within(__.inject(1, 2).fold().asAdmin(), __.inject(3, 4).fold().asAdmin()); p.resolve(createTraverser("start")); assertThat(p.test(1), is(true)); assertThat(p.test(2), is(true)); @@ -316,9 +318,9 @@ public class PTraversalTest { @SuppressWarnings("unchecked") @Test public void shouldHandleEmptyResultFromOneTraversal() { - // within(__.inject(1,2), __.limit(0)) where second produces nothing + // within(__.inject(1,2).fold(), __.limit(0)) where second produces nothing // Should still match on results from first traversal - final P<Object> p = P.within(__.inject(1, 2).asAdmin(), __.limit(0).asAdmin()); + final P<Object> p = P.within(__.inject(1, 2).fold().asAdmin(), __.limit(0).asAdmin()); p.resolve(createTraverser("start")); assertThat(p.isResolvedEmpty(), is(false)); assertThat(p.test(1), is(true)); diff --git a/gremlin-dotnet/test/Gremlin.Net.IntegrationTest/Gherkin/Gremlin.cs b/gremlin-dotnet/test/Gremlin.Net.IntegrationTest/Gherkin/Gremlin.cs index fe1b5a8e16..db55facbe6 100644 --- a/gremlin-dotnet/test/Gremlin.Net.IntegrationTest/Gherkin/Gremlin.cs +++ b/gremlin-dotnet/test/Gremlin.Net.IntegrationTest/Gherkin/Gremlin.cs @@ -563,14 +563,14 @@ namespace Gremlin.Net.IntegrationTest.Gherkin {"g_V_hasXage_eqXVXvid1X_valuesXnonexistentXXX", new List<Func<GraphTraversalSource, IDictionary<string, object>, ITraversal>> {(g,p) =>g.V().Has("age", P.Eq(__.V(p["vid1"]).Values<object>("nonexistent")))}}, {"g_V_hasXlabel_VXvid1X_labelXX", new List<Func<GraphTraversalSource, IDictionary<string, object>, ITraversal>> {(g,p) =>g.V().Has(T.Label, __.V(p["vid1"]).Label())}}, {"g_V_hasXperson_name_VXvid1X_valuesXnameXX_age", new List<Func<GraphTraversalSource, IDictionary<string, object>, ITraversal>> {(g,p) =>g.V().Has("person", "name", __.V(p["vid1"]).Values<object>("name")).Values<object>("age")}}, - {"g_V_hasXname_withinXVXvid1X_outXknowsX_valuesXnameX_constantXpeterXXX", new List<Func<GraphTraversalSource, IDictionary<string, object>, ITraversal>> {(g,p) =>g.V().Has("name", P.Within(__.V(p["vid1"]).Out("knows").Values<object>("name"), __.Constant<object>("peter")))}}, + {"g_V_hasXname_withinXVXvid1X_outXknowsX_valuesXnameX_constantXpeterXXX", new List<Func<GraphTraversalSource, IDictionary<string, object>, ITraversal>> {(g,p) =>g.V().Has("name", P.Within(__.V(p["vid1"]).Out("knows").Values<object>("name").Fold(), __.Constant<object>("peter")))}}, {"g_V_hasXname_withinXVXvid1X_valuesXnonexistentX_constantXmarkoXXX", new List<Func<GraphTraversalSource, IDictionary<string, object>, ITraversal>> {(g,p) =>g.V().Has("name", P.Within(__.V(p["vid1"]).Values<object>("nonexistent"), __.Constant<object>("marko")))}}, {"g_V_hasXname_withinXVXvid1X_valuesXnonexistentX_VXvid1X_valuesXnonexistentXXX", new List<Func<GraphTraversalSource, IDictionary<string, object>, ITraversal>> {(g,p) =>g.V().Has("name", P.Within(__.V(p["vid1"]).Values<object>("nonexistent"), __.V(p["vid1"]).Values<object>("nonexistent")))}}, {"g_V_hasXname_withoutXVXvid1X_valuesXnameX_VXvid2X_valuesXnameX_VXvid3X_valuesXnameXXX", new List<Func<GraphTraversalSource, IDictionary<string, object>, ITraversal>> {(g,p) =>g.V().Has("name", P.Without(__.V(p["vid1"]).Values<object>("name"), __.V(p["vid2"]).Values<object>("name"), __.V(p["vid3"]).Values<object>("name")))}}, - {"g_V_hasXname_withinXVXvid1X_outXknowsX_valuesXnameX_VXvid3X_outXcreatedX_valuesXnameXXX", new List<Func<GraphTraversalSource, IDictionary<string, object>, ITraversal>> {(g,p) =>g.V().Has("name", P.Within(__.V(p["vid1"]).Out("knows").Values<object>("name"), __.V(p["vid3"]).Out("created").Values<object>("name")))}}, - {"g_V_hasLabelXsoftwareX_hasXname_withoutXVXvid1X_outXcreatedX_valuesXnameX_VXvid3X_outXcreatedX_valuesXnameXXX", new List<Func<GraphTraversalSource, IDictionary<string, object>, ITraversal>> {(g,p) =>g.V().HasLabel("software").Has("name", P.Without(__.V(p["vid1"]).Out("created").Values<object>("name"), __.V(p["vid3"]).Out("created").Values<object>("name")))}}, - {"g_V_hasLabelXpersonX_valuesXageX_isXwithinXVXvid1X_valuesXageX_V_hasXname_lopX_inXcreatedX_valuesXageXXX", new List<Func<GraphTraversalSource, IDictionary<string, object>, ITraversal>> {(g,p) =>g.V().HasLabel("person").Values<object>("age").Is(P.Within(__.V(p["vid1"]).Values<object>("age"), __.V().Has("name", "lop").In("created").Values<object>("age")))}}, - {"g_VXvid1X_outEXknowsX_filterXinV_hasXname_withinXV_hasXname_lopX_inXcreatedX_valuesXnameX_V_hasXname_rippleX_inXcreatedX_valuesXnameXXXX", new List<Func<GraphTraversalSource, IDictionary<string, object>, ITraversal>> {(g,p) =>g.V(p["vid1"]).OutE("knows").Filter(__.InV().Has("name", P.Within(__.V().Has("name", "lop").In("created").Values<object>("name"), __.V().Has("name", "ripple").In("created").Values<object>("name"))))}}, + {"g_V_hasXname_withinXVXvid1X_outXknowsX_valuesXnameX_VXvid3X_outXcreatedX_valuesXnameXXX", new List<Func<GraphTraversalSource, IDictionary<string, object>, ITraversal>> {(g,p) =>g.V().Has("name", P.Within(__.V(p["vid1"]).Out("knows").Values<object>("name").Fold(), __.V(p["vid3"]).Out("created").Values<object>("name").Fold()))}}, + {"g_V_hasLabelXsoftwareX_hasXname_withoutXVXvid1X_outXcreatedX_valuesXnameX_VXvid3X_outXcreatedX_valuesXnameXXX", new List<Func<GraphTraversalSource, IDictionary<string, object>, ITraversal>> {(g,p) =>g.V().HasLabel("software").Has("name", P.Without(__.V(p["vid1"]).Out("created").Values<object>("name").Fold(), __.V(p["vid3"]).Out("created").Values<object>("name").Fold()))}}, + {"g_V_hasLabelXpersonX_valuesXageX_isXwithinXVXvid1X_valuesXageX_V_hasXname_lopX_inXcreatedX_valuesXageXXX", new List<Func<GraphTraversalSource, IDictionary<string, object>, ITraversal>> {(g,p) =>g.V().HasLabel("person").Values<object>("age").Is(P.Within(__.V(p["vid1"]).Values<object>("age").Fold(), __.V().Has("name", "lop").In("created").Values<object>("age").Fold()))}}, + {"g_VXvid1X_outEXknowsX_filterXinV_hasXname_withinXV_hasXname_lopX_inXcreatedX_valuesXnameX_V_hasXname_rippleX_inXcreatedX_valuesXnameXXXX", new List<Func<GraphTraversalSource, IDictionary<string, object>, ITraversal>> {(g,p) =>g.V(p["vid1"]).OutE("knows").Filter(__.InV().Has("name", P.Within(__.V().Has("name", "lop").In("created").Values<object>("name").Fold(), __.V().Has("name", "ripple").In("created").Values<object>("name").Fold())))}}, {"g_V_properties_hasValueXnullX", new List<Func<GraphTraversalSource, IDictionary<string, object>, ITraversal>> {(g,p) =>g.V().Properties<object>().HasValue((object) null)}}, {"g_V_properties_hasValueXnull_nullX", new List<Func<GraphTraversalSource, IDictionary<string, object>, ITraversal>> {(g,p) =>g.V().Properties<object>().HasValue(null, null)}}, {"g_V_properties_hasValueXnull_joshX_value", new List<Func<GraphTraversalSource, IDictionary<string, object>, ITraversal>> {(g,p) =>g.V().Properties<object>().HasValue(null, "josh").Value<object>()}}, @@ -587,7 +587,7 @@ namespace Gremlin.Net.IntegrationTest.Gherkin {"g_V_valuesXageX_isXgtXVXvid1X_valuesXageXXX", new List<Func<GraphTraversalSource, IDictionary<string, object>, ITraversal>> {(g,p) =>g.V().Values<object>("age").Is(P.Gt(__.V(p["vid1"]).Values<object>("age")))}}, {"g_V_valuesXageX_isXltXVXvid3X_valuesXageXXX", new List<Func<GraphTraversalSource, IDictionary<string, object>, ITraversal>> {(g,p) =>g.V().Values<object>("age").Is(P.Lt(__.V(p["vid3"]).Values<object>("age")))}}, {"g_V_valuesXageX_isXneqXVXvid4X_valuesXageXXX", new List<Func<GraphTraversalSource, IDictionary<string, object>, ITraversal>> {(g,p) =>g.V().Values<object>("age").Is(P.Neq(__.V(p["vid4"]).Values<object>("age")))}}, - {"g_V_valuesXageX_isXwithinXVXvid1X_outXknowsX_valuesXageXXX", new List<Func<GraphTraversalSource, IDictionary<string, object>, ITraversal>> {(g,p) =>g.V().Values<object>("age").Is(P.Within(__.V(p["vid1"]).Out("knows").Values<object>("age")))}}, + {"g_V_valuesXageX_isXwithinXVXvid1X_outXknowsX_valuesXageXXX", new List<Func<GraphTraversalSource, IDictionary<string, object>, ITraversal>> {(g,p) =>g.V().Values<object>("age").Is(P.Within(__.V(p["vid1"]).Out("knows").Values<object>("age").Fold()))}}, {"g_V_valuesXageX_isXVXvid1X_valuesXnonexistentXX", new List<Func<GraphTraversalSource, IDictionary<string, object>, ITraversal>> {(g,p) =>g.V().Values<object>("age").Is(__.V(p["vid1"]).Values<object>("nonexistent"))}}, {"g_V_hasLabelXpersonX_valuesXageX_chooseXgtXVXvid1X_valuesXageXX_olderX", new List<Func<GraphTraversalSource, IDictionary<string, object>, ITraversal>> {(g,p) =>g.V().HasLabel("person").Values<object>("age").Choose<object>(P.Gt(__.V(p["vid1"]).Values<object>("age")), __.Constant<object>("older than marko"), __.Constant<object>("not older"))}}, {"g_V_hasLabelXpersonX_valuesXageX_chooseXgteXmeanAgeX_aboveX", new List<Func<GraphTraversalSource, IDictionary<string, object>, ITraversal>> {(g,p) =>g.V().HasLabel("person").Values<object>("age").Choose<object>(P.Gte(__.V().HasLabel("person").Values<object>("age").Mean<object>()), __.Constant<object>("above average"), __.Constant<object>("below average"))}}, @@ -777,7 +777,7 @@ namespace Gremlin.Net.IntegrationTest.Gherkin {"g_V_valuesXageX_whereXgtXVXvid1X_valuesXageXXX", new List<Func<GraphTraversalSource, IDictionary<string, object>, ITraversal>> {(g,p) =>g.V().Values<object>("age").Where(P.Gt(__.V(p["vid1"]).Values<object>("age")))}}, {"g_V_valuesXageX_whereXltXVXvid3X_valuesXageXXX", new List<Func<GraphTraversalSource, IDictionary<string, object>, ITraversal>> {(g,p) =>g.V().Values<object>("age").Where(P.Lt(__.V(p["vid3"]).Values<object>("age")))}}, {"g_V_valuesXageX_whereXeqXVXvid1X_valuesXageXXX", new List<Func<GraphTraversalSource, IDictionary<string, object>, ITraversal>> {(g,p) =>g.V().Values<object>("age").Where(P.Eq(__.V(p["vid1"]).Values<object>("age")))}}, - {"g_V_valuesXageX_whereXwithinXVXvid1X_outXknowsX_valuesXageXXX", new List<Func<GraphTraversalSource, IDictionary<string, object>, ITraversal>> {(g,p) =>g.V().Values<object>("age").Where(P.Within(__.V(p["vid1"]).Out("knows").Values<object>("age")))}}, + {"g_V_valuesXageX_whereXwithinXVXvid1X_outXknowsX_valuesXageXXX", new List<Func<GraphTraversalSource, IDictionary<string, object>, ITraversal>> {(g,p) =>g.V().Values<object>("age").Where(P.Within(__.V(p["vid1"]).Out("knows").Values<object>("age").Fold()))}}, {"g_V_valuesXnameX_whereXneqXVXvid1X_valuesXnameXXX", new List<Func<GraphTraversalSource, IDictionary<string, object>, ITraversal>> {(g,p) =>g.V().Values<object>("name").Where(P.Neq(__.V(p["vid1"]).Values<object>("name")))}}, {"g_V_valuesXageX_whereXeqXV9999_valuesXageXXX", new List<Func<GraphTraversalSource, IDictionary<string, object>, ITraversal>> {(g,p) =>g.V().Values<object>("age").Where(P.Eq(__.V(9999).Values<object>("age")))}}, {"g_V_whereXgtXVXvid1X_valuesXageXXX_byXageX_valuesXnameX", new List<Func<GraphTraversalSource, IDictionary<string, object>, ITraversal>> {(g,p) =>g.V().Where(P.Gt(__.V(p["vid1"]).Values<object>("age"))).By("age").Values<object>("name")}}, diff --git a/gremlin-go/driver/cucumber/gremlin.go b/gremlin-go/driver/cucumber/gremlin.go index 708a0efab3..2930ab9dc2 100644 --- a/gremlin-go/driver/cucumber/gremlin.go +++ b/gremlin-go/driver/cucumber/gremlin.go @@ -533,14 +533,14 @@ var translationMap = map[string][]func(g *gremlingo.GraphTraversalSource, p map[ "g_V_hasXage_eqXVXvid1X_valuesXnonexistentXXX": {func(g *gremlingo.GraphTraversalSource, p map[string]interface{}) *gremlingo.GraphTraversal {return g.V().Has("age", gremlingo.P.Eq(gremlingo.T__.V(p["vid1"]).Values("nonexistent")))}}, "g_V_hasXlabel_VXvid1X_labelXX": {func(g *gremlingo.GraphTraversalSource, p map[string]interface{}) *gremlingo.GraphTraversal {return g.V().Has(gremlingo.T.Label, gremlingo.T__.V(p["vid1"]).Label())}}, "g_V_hasXperson_name_VXvid1X_valuesXnameXX_age": {func(g *gremlingo.GraphTraversalSource, p map[string]interface{}) *gremlingo.GraphTraversal {return g.V().Has("person", "name", gremlingo.T__.V(p["vid1"]).Values("name")).Values("age")}}, - "g_V_hasXname_withinXVXvid1X_outXknowsX_valuesXnameX_constantXpeterXXX": {func(g *gremlingo.GraphTraversalSource, p map[string]interface{}) *gremlingo.GraphTraversal {return g.V().Has("name", gremlingo.P.Within(gremlingo.T__.V(p["vid1"]).Out("knows").Values("name"), gremlingo.T__.Constant("peter")))}}, + "g_V_hasXname_withinXVXvid1X_outXknowsX_valuesXnameX_constantXpeterXXX": {func(g *gremlingo.GraphTraversalSource, p map[string]interface{}) *gremlingo.GraphTraversal {return g.V().Has("name", gremlingo.P.Within(gremlingo.T__.V(p["vid1"]).Out("knows").Values("name").Fold(), gremlingo.T__.Constant("peter")))}}, "g_V_hasXname_withinXVXvid1X_valuesXnonexistentX_constantXmarkoXXX": {func(g *gremlingo.GraphTraversalSource, p map[string]interface{}) *gremlingo.GraphTraversal {return g.V().Has("name", gremlingo.P.Within(gremlingo.T__.V(p["vid1"]).Values("nonexistent"), gremlingo.T__.Constant("marko")))}}, "g_V_hasXname_withinXVXvid1X_valuesXnonexistentX_VXvid1X_valuesXnonexistentXXX": {func(g *gremlingo.GraphTraversalSource, p map[string]interface{}) *gremlingo.GraphTraversal {return g.V().Has("name", gremlingo.P.Within(gremlingo.T__.V(p["vid1"]).Values("nonexistent"), gremlingo.T__.V(p["vid1"]).Values("nonexistent")))}}, "g_V_hasXname_withoutXVXvid1X_valuesXnameX_VXvid2X_valuesXnameX_VXvid3X_valuesXnameXXX": {func(g *gremlingo.GraphTraversalSource, p map[string]interface{}) *gremlingo.GraphTraversal {return g.V().Has("name", gremlingo.P.Without(gremlingo.T__.V(p["vid1"]).Values("name"), gremlingo.T__.V(p["vid2"]).Values("name"), gremlingo.T__.V(p["vid3"]).Values("name")))}}, - "g_V_hasXname_withinXVXvid1X_outXknowsX_valuesXnameX_VXvid3X_outXcreatedX_valuesXnameXXX": {func(g *gremlingo.GraphTraversalSource, p map[string]interface{}) *gremlingo.GraphTraversal {return g.V().Has("name", gremlingo.P.Within(gremlingo.T__.V(p["vid1"]).Out("knows").Values("name"), gremlingo.T__.V(p["vid3"]).Out("created").Values("name")))}}, - "g_V_hasLabelXsoftwareX_hasXname_withoutXVXvid1X_outXcreatedX_valuesXnameX_VXvid3X_outXcreatedX_valuesXnameXXX": {func(g *gremlingo.GraphTraversalSource, p map[string]interface{}) *gremlingo.GraphTraversal {return g.V().HasLabel("software").Has("name", gremlingo.P.Without(gremlingo.T__.V(p["vid1"]).Out("created").Values("name"), gremlingo.T__.V(p["vid3"]).Out("created").Values("name")))}}, - "g_V_hasLabelXpersonX_valuesXageX_isXwithinXVXvid1X_valuesXageX_V_hasXname_lopX_inXcreatedX_valuesXageXXX": {func(g *gremlingo.GraphTraversalSource, p map[string]interface{}) *gremlingo.GraphTraversal {return g.V().HasLabel("person").Values("age").Is(gremlingo.P.Within(gremlingo.T__.V(p["vid1"]).Values("age"), gremlingo.T__.V().Has("name", "lop").In("created").Values("age")))}}, - "g_VXvid1X_outEXknowsX_filterXinV_hasXname_withinXV_hasXname_lopX_inXcreatedX_valuesXnameX_V_hasXname_rippleX_inXcreatedX_valuesXnameXXXX": {func(g *gremlingo.GraphTraversalSource, p map[string]interface{}) *gremlingo.GraphTraversal {return g.V(p["vid1"]).OutE("knows").Filter(gremlingo.T__.InV().Has("name", gremlingo.P.Within(gremlingo.T__.V().Has("name", "lop").In("created").Values("name"), gremlingo.T__.V().Has("name", "ripple").In("created").Values("name"))))}}, + "g_V_hasXname_withinXVXvid1X_outXknowsX_valuesXnameX_VXvid3X_outXcreatedX_valuesXnameXXX": {func(g *gremlingo.GraphTraversalSource, p map[string]interface{}) *gremlingo.GraphTraversal {return g.V().Has("name", gremlingo.P.Within(gremlingo.T__.V(p["vid1"]).Out("knows").Values("name").Fold(), gremlingo.T__.V(p["vid3"]).Out("created").Values("name").Fold()))}}, + "g_V_hasLabelXsoftwareX_hasXname_withoutXVXvid1X_outXcreatedX_valuesXnameX_VXvid3X_outXcreatedX_valuesXnameXXX": {func(g *gremlingo.GraphTraversalSource, p map[string]interface{}) *gremlingo.GraphTraversal {return g.V().HasLabel("software").Has("name", gremlingo.P.Without(gremlingo.T__.V(p["vid1"]).Out("created").Values("name").Fold(), gremlingo.T__.V(p["vid3"]).Out("created").Values("name").Fold()))}}, + "g_V_hasLabelXpersonX_valuesXageX_isXwithinXVXvid1X_valuesXageX_V_hasXname_lopX_inXcreatedX_valuesXageXXX": {func(g *gremlingo.GraphTraversalSource, p map[string]interface{}) *gremlingo.GraphTraversal {return g.V().HasLabel("person").Values("age").Is(gremlingo.P.Within(gremlingo.T__.V(p["vid1"]).Values("age").Fold(), gremlingo.T__.V().Has("name", "lop").In("created").Values("age").Fold()))}}, + "g_VXvid1X_outEXknowsX_filterXinV_hasXname_withinXV_hasXname_lopX_inXcreatedX_valuesXnameX_V_hasXname_rippleX_inXcreatedX_valuesXnameXXXX": {func(g *gremlingo.GraphTraversalSource, p map[string]interface{}) *gremlingo.GraphTraversal {return g.V(p["vid1"]).OutE("knows").Filter(gremlingo.T__.InV().Has("name", gremlingo.P.Within(gremlingo.T__.V().Has("name", "lop").In("created").Values("name").Fold(), gremlingo.T__.V().Has("name", "ripple").In("created").Values("name").Fold())))}}, "g_V_properties_hasValueXnullX": {func(g *gremlingo.GraphTraversalSource, p map[string]interface{}) *gremlingo.GraphTraversal {return g.V().Properties().HasValue(nil)}}, "g_V_properties_hasValueXnull_nullX": {func(g *gremlingo.GraphTraversalSource, p map[string]interface{}) *gremlingo.GraphTraversal {return g.V().Properties().HasValue(nil, nil)}}, "g_V_properties_hasValueXnull_joshX_value": {func(g *gremlingo.GraphTraversalSource, p map[string]interface{}) *gremlingo.GraphTraversal {return g.V().Properties().HasValue(nil, "josh").Value()}}, @@ -557,7 +557,7 @@ var translationMap = map[string][]func(g *gremlingo.GraphTraversalSource, p map[ "g_V_valuesXageX_isXgtXVXvid1X_valuesXageXXX": {func(g *gremlingo.GraphTraversalSource, p map[string]interface{}) *gremlingo.GraphTraversal {return g.V().Values("age").Is(gremlingo.P.Gt(gremlingo.T__.V(p["vid1"]).Values("age")))}}, "g_V_valuesXageX_isXltXVXvid3X_valuesXageXXX": {func(g *gremlingo.GraphTraversalSource, p map[string]interface{}) *gremlingo.GraphTraversal {return g.V().Values("age").Is(gremlingo.P.Lt(gremlingo.T__.V(p["vid3"]).Values("age")))}}, "g_V_valuesXageX_isXneqXVXvid4X_valuesXageXXX": {func(g *gremlingo.GraphTraversalSource, p map[string]interface{}) *gremlingo.GraphTraversal {return g.V().Values("age").Is(gremlingo.P.Neq(gremlingo.T__.V(p["vid4"]).Values("age")))}}, - "g_V_valuesXageX_isXwithinXVXvid1X_outXknowsX_valuesXageXXX": {func(g *gremlingo.GraphTraversalSource, p map[string]interface{}) *gremlingo.GraphTraversal {return g.V().Values("age").Is(gremlingo.P.Within(gremlingo.T__.V(p["vid1"]).Out("knows").Values("age")))}}, + "g_V_valuesXageX_isXwithinXVXvid1X_outXknowsX_valuesXageXXX": {func(g *gremlingo.GraphTraversalSource, p map[string]interface{}) *gremlingo.GraphTraversal {return g.V().Values("age").Is(gremlingo.P.Within(gremlingo.T__.V(p["vid1"]).Out("knows").Values("age").Fold()))}}, "g_V_valuesXageX_isXVXvid1X_valuesXnonexistentXX": {func(g *gremlingo.GraphTraversalSource, p map[string]interface{}) *gremlingo.GraphTraversal {return g.V().Values("age").Is(gremlingo.T__.V(p["vid1"]).Values("nonexistent"))}}, "g_V_hasLabelXpersonX_valuesXageX_chooseXgtXVXvid1X_valuesXageXX_olderX": {func(g *gremlingo.GraphTraversalSource, p map[string]interface{}) *gremlingo.GraphTraversal {return g.V().HasLabel("person").Values("age").Choose(gremlingo.P.Gt(gremlingo.T__.V(p["vid1"]).Values("age")), gremlingo.T__.Constant("older than marko"), gremlingo.T__.Constant("not older"))}}, "g_V_hasLabelXpersonX_valuesXageX_chooseXgteXmeanAgeX_aboveX": {func(g *gremlingo.GraphTraversalSource, p map[string]interface{}) *gremlingo.GraphTraversal {return g.V().HasLabel("person").Values("age").Choose(gremlingo.P.Gte(gremlingo.T__.V().HasLabel("person").Values("age").Mean()), gremlingo.T__.Constant("above average"), gremlingo.T__.Constant("below average"))}}, @@ -747,7 +747,7 @@ var translationMap = map[string][]func(g *gremlingo.GraphTraversalSource, p map[ "g_V_valuesXageX_whereXgtXVXvid1X_valuesXageXXX": {func(g *gremlingo.GraphTraversalSource, p map[string]interface{}) *gremlingo.GraphTraversal {return g.V().Values("age").Where(gremlingo.P.Gt(gremlingo.T__.V(p["vid1"]).Values("age")))}}, "g_V_valuesXageX_whereXltXVXvid3X_valuesXageXXX": {func(g *gremlingo.GraphTraversalSource, p map[string]interface{}) *gremlingo.GraphTraversal {return g.V().Values("age").Where(gremlingo.P.Lt(gremlingo.T__.V(p["vid3"]).Values("age")))}}, "g_V_valuesXageX_whereXeqXVXvid1X_valuesXageXXX": {func(g *gremlingo.GraphTraversalSource, p map[string]interface{}) *gremlingo.GraphTraversal {return g.V().Values("age").Where(gremlingo.P.Eq(gremlingo.T__.V(p["vid1"]).Values("age")))}}, - "g_V_valuesXageX_whereXwithinXVXvid1X_outXknowsX_valuesXageXXX": {func(g *gremlingo.GraphTraversalSource, p map[string]interface{}) *gremlingo.GraphTraversal {return g.V().Values("age").Where(gremlingo.P.Within(gremlingo.T__.V(p["vid1"]).Out("knows").Values("age")))}}, + "g_V_valuesXageX_whereXwithinXVXvid1X_outXknowsX_valuesXageXXX": {func(g *gremlingo.GraphTraversalSource, p map[string]interface{}) *gremlingo.GraphTraversal {return g.V().Values("age").Where(gremlingo.P.Within(gremlingo.T__.V(p["vid1"]).Out("knows").Values("age").Fold()))}}, "g_V_valuesXnameX_whereXneqXVXvid1X_valuesXnameXXX": {func(g *gremlingo.GraphTraversalSource, p map[string]interface{}) *gremlingo.GraphTraversal {return g.V().Values("name").Where(gremlingo.P.Neq(gremlingo.T__.V(p["vid1"]).Values("name")))}}, "g_V_valuesXageX_whereXeqXV9999_valuesXageXXX": {func(g *gremlingo.GraphTraversalSource, p map[string]interface{}) *gremlingo.GraphTraversal {return g.V().Values("age").Where(gremlingo.P.Eq(gremlingo.T__.V(9999).Values("age")))}}, "g_V_whereXgtXVXvid1X_valuesXageXXX_byXageX_valuesXnameX": {func(g *gremlingo.GraphTraversalSource, p map[string]interface{}) *gremlingo.GraphTraversal {return g.V().Where(gremlingo.P.Gt(gremlingo.T__.V(p["vid1"]).Values("age"))).By("age").Values("name")}}, diff --git a/gremlin-js/gremlin-javascript/test/cucumber/gremlin.js b/gremlin-js/gremlin-javascript/test/cucumber/gremlin.js index 216589eff4..96107777f0 100644 --- a/gremlin-js/gremlin-javascript/test/cucumber/gremlin.js +++ b/gremlin-js/gremlin-javascript/test/cucumber/gremlin.js @@ -564,14 +564,14 @@ const gremlins = { g_V_hasXage_eqXVXvid1X_valuesXnonexistentXXX: [function({g, vid1}) { return g.V().has("age", P.eq(__.V(vid1).values("nonexistent"))) }], g_V_hasXlabel_VXvid1X_labelXX: [function({g, vid1}) { return g.V().has(T.label, __.V(vid1).label()) }], g_V_hasXperson_name_VXvid1X_valuesXnameXX_age: [function({g, vid1}) { return g.V().has("person", "name", __.V(vid1).values("name")).values("age") }], - g_V_hasXname_withinXVXvid1X_outXknowsX_valuesXnameX_constantXpeterXXX: [function({g, vid1}) { return g.V().has("name", P.within(__.V(vid1).out("knows").values("name"), __.constant("peter"))) }], + g_V_hasXname_withinXVXvid1X_outXknowsX_valuesXnameX_constantXpeterXXX: [function({g, vid1}) { return g.V().has("name", P.within(__.V(vid1).out("knows").values("name").fold(), __.constant("peter"))) }], g_V_hasXname_withinXVXvid1X_valuesXnonexistentX_constantXmarkoXXX: [function({g, vid1}) { return g.V().has("name", P.within(__.V(vid1).values("nonexistent"), __.constant("marko"))) }], g_V_hasXname_withinXVXvid1X_valuesXnonexistentX_VXvid1X_valuesXnonexistentXXX: [function({g, vid1}) { return g.V().has("name", P.within(__.V(vid1).values("nonexistent"), __.V(vid1).values("nonexistent"))) }], g_V_hasXname_withoutXVXvid1X_valuesXnameX_VXvid2X_valuesXnameX_VXvid3X_valuesXnameXXX: [function({g, vid3, vid2, vid1}) { return g.V().has("name", P.without(__.V(vid1).values("name"), __.V(vid2).values("name"), __.V(vid3).values("name"))) }], - g_V_hasXname_withinXVXvid1X_outXknowsX_valuesXnameX_VXvid3X_outXcreatedX_valuesXnameXXX: [function({g, vid3, vid1}) { return g.V().has("name", P.within(__.V(vid1).out("knows").values("name"), __.V(vid3).out("created").values("name"))) }], - g_V_hasLabelXsoftwareX_hasXname_withoutXVXvid1X_outXcreatedX_valuesXnameX_VXvid3X_outXcreatedX_valuesXnameXXX: [function({g, vid3, vid1}) { return g.V().hasLabel("software").has("name", P.without(__.V(vid1).out("created").values("name"), __.V(vid3).out("created").values("name"))) }], - g_V_hasLabelXpersonX_valuesXageX_isXwithinXVXvid1X_valuesXageX_V_hasXname_lopX_inXcreatedX_valuesXageXXX: [function({g, vid1}) { return g.V().hasLabel("person").values("age").is(P.within(__.V(vid1).values("age"), __.V().has("name", "lop").in_("created").values("age"))) }], - g_VXvid1X_outEXknowsX_filterXinV_hasXname_withinXV_hasXname_lopX_inXcreatedX_valuesXnameX_V_hasXname_rippleX_inXcreatedX_valuesXnameXXXX: [function({g, vid1}) { return g.V(vid1).outE("knows").filter(__.inV().has("name", P.within(__.V().has("name", "lop").in_("created").values("name"), __.V().has("name", "ripple").in_("created").values("name")))) }], + g_V_hasXname_withinXVXvid1X_outXknowsX_valuesXnameX_VXvid3X_outXcreatedX_valuesXnameXXX: [function({g, vid3, vid1}) { return g.V().has("name", P.within(__.V(vid1).out("knows").values("name").fold(), __.V(vid3).out("created").values("name").fold())) }], + g_V_hasLabelXsoftwareX_hasXname_withoutXVXvid1X_outXcreatedX_valuesXnameX_VXvid3X_outXcreatedX_valuesXnameXXX: [function({g, vid3, vid1}) { return g.V().hasLabel("software").has("name", P.without(__.V(vid1).out("created").values("name").fold(), __.V(vid3).out("created").values("name").fold())) }], + g_V_hasLabelXpersonX_valuesXageX_isXwithinXVXvid1X_valuesXageX_V_hasXname_lopX_inXcreatedX_valuesXageXXX: [function({g, vid1}) { return g.V().hasLabel("person").values("age").is(P.within(__.V(vid1).values("age").fold(), __.V().has("name", "lop").in_("created").values("age").fold())) }], + g_VXvid1X_outEXknowsX_filterXinV_hasXname_withinXV_hasXname_lopX_inXcreatedX_valuesXnameX_V_hasXname_rippleX_inXcreatedX_valuesXnameXXXX: [function({g, vid1}) { return g.V(vid1).outE("knows").filter(__.inV().has("name", P.within(__.V().has("name", "lop").in_("created").values("name").fold(), __.V().has("name", "ripple").in_("created").values("name").fold()))) }], g_V_properties_hasValueXnullX: [function({g}) { return g.V().properties().hasValue(null) }], g_V_properties_hasValueXnull_nullX: [function({g}) { return g.V().properties().hasValue(null, null) }], g_V_properties_hasValueXnull_joshX_value: [function({g}) { return g.V().properties().hasValue(null, "josh").value() }], @@ -588,7 +588,7 @@ const gremlins = { g_V_valuesXageX_isXgtXVXvid1X_valuesXageXXX: [function({g, vid1}) { return g.V().values("age").is(P.gt(__.V(vid1).values("age"))) }], g_V_valuesXageX_isXltXVXvid3X_valuesXageXXX: [function({g, vid3}) { return g.V().values("age").is(P.lt(__.V(vid3).values("age"))) }], g_V_valuesXageX_isXneqXVXvid4X_valuesXageXXX: [function({g, vid4}) { return g.V().values("age").is(P.neq(__.V(vid4).values("age"))) }], - g_V_valuesXageX_isXwithinXVXvid1X_outXknowsX_valuesXageXXX: [function({g, vid1}) { return g.V().values("age").is(P.within(__.V(vid1).out("knows").values("age"))) }], + g_V_valuesXageX_isXwithinXVXvid1X_outXknowsX_valuesXageXXX: [function({g, vid1}) { return g.V().values("age").is(P.within(__.V(vid1).out("knows").values("age").fold())) }], g_V_valuesXageX_isXVXvid1X_valuesXnonexistentXX: [function({g, vid1}) { return g.V().values("age").is(__.V(vid1).values("nonexistent")) }], g_V_hasLabelXpersonX_valuesXageX_chooseXgtXVXvid1X_valuesXageXX_olderX: [function({g, vid1}) { return g.V().hasLabel("person").values("age").choose(P.gt(__.V(vid1).values("age")), __.constant("older than marko"), __.constant("not older")) }], g_V_hasLabelXpersonX_valuesXageX_chooseXgteXmeanAgeX_aboveX: [function({g}) { return g.V().hasLabel("person").values("age").choose(P.gte(__.V().hasLabel("person").values("age").mean()), __.constant("above average"), __.constant("below average")) }], @@ -778,7 +778,7 @@ const gremlins = { g_V_valuesXageX_whereXgtXVXvid1X_valuesXageXXX: [function({g, vid1}) { return g.V().values("age").where(P.gt(__.V(vid1).values("age"))) }], g_V_valuesXageX_whereXltXVXvid3X_valuesXageXXX: [function({g, vid3}) { return g.V().values("age").where(P.lt(__.V(vid3).values("age"))) }], g_V_valuesXageX_whereXeqXVXvid1X_valuesXageXXX: [function({g, vid1}) { return g.V().values("age").where(P.eq(__.V(vid1).values("age"))) }], - g_V_valuesXageX_whereXwithinXVXvid1X_outXknowsX_valuesXageXXX: [function({g, vid1}) { return g.V().values("age").where(P.within(__.V(vid1).out("knows").values("age"))) }], + g_V_valuesXageX_whereXwithinXVXvid1X_outXknowsX_valuesXageXXX: [function({g, vid1}) { return g.V().values("age").where(P.within(__.V(vid1).out("knows").values("age").fold())) }], g_V_valuesXnameX_whereXneqXVXvid1X_valuesXnameXXX: [function({g, vid1}) { return g.V().values("name").where(P.neq(__.V(vid1).values("name"))) }], g_V_valuesXageX_whereXeqXV9999_valuesXageXXX: [function({g}) { return g.V().values("age").where(P.eq(__.V(9999).values("age"))) }], g_V_whereXgtXVXvid1X_valuesXageXXX_byXageX_valuesXnameX: [function({g, vid1}) { return g.V().where(P.gt(__.V(vid1).values("age"))).by("age").values("name") }], diff --git a/gremlin-python/src/main/python/tests/feature/gremlin.py b/gremlin-python/src/main/python/tests/feature/gremlin.py index 7e43e4c884..5116b38e24 100644 --- a/gremlin-python/src/main/python/tests/feature/gremlin.py +++ b/gremlin-python/src/main/python/tests/feature/gremlin.py @@ -538,14 +538,14 @@ world.gremlins = { 'g_V_hasXage_eqXVXvid1X_valuesXnonexistentXXX': [(lambda g, vid1=None:g.V().has('age', P.eq(__.V(vid1).values('nonexistent'))))], 'g_V_hasXlabel_VXvid1X_labelXX': [(lambda g, vid1=None:g.V().has(T.label, __.V(vid1).label()))], 'g_V_hasXperson_name_VXvid1X_valuesXnameXX_age': [(lambda g, vid1=None:g.V().has('person', 'name', __.V(vid1).values('name')).values('age'))], - 'g_V_hasXname_withinXVXvid1X_outXknowsX_valuesXnameX_constantXpeterXXX': [(lambda g, vid1=None:g.V().has('name', P.within(__.V(vid1).out('knows').values('name'), __.constant('peter'))))], + 'g_V_hasXname_withinXVXvid1X_outXknowsX_valuesXnameX_constantXpeterXXX': [(lambda g, vid1=None:g.V().has('name', P.within(__.V(vid1).out('knows').values('name').fold(), __.constant('peter'))))], 'g_V_hasXname_withinXVXvid1X_valuesXnonexistentX_constantXmarkoXXX': [(lambda g, vid1=None:g.V().has('name', P.within(__.V(vid1).values('nonexistent'), __.constant('marko'))))], 'g_V_hasXname_withinXVXvid1X_valuesXnonexistentX_VXvid1X_valuesXnonexistentXXX': [(lambda g, vid1=None:g.V().has('name', P.within(__.V(vid1).values('nonexistent'), __.V(vid1).values('nonexistent'))))], 'g_V_hasXname_withoutXVXvid1X_valuesXnameX_VXvid2X_valuesXnameX_VXvid3X_valuesXnameXXX': [(lambda g, vid3=None,vid2=None,vid1=None:g.V().has('name', P.without(__.V(vid1).values('name'), __.V(vid2).values('name'), __.V(vid3).values('name'))))], - 'g_V_hasXname_withinXVXvid1X_outXknowsX_valuesXnameX_VXvid3X_outXcreatedX_valuesXnameXXX': [(lambda g, vid3=None,vid1=None:g.V().has('name', P.within(__.V(vid1).out('knows').values('name'), __.V(vid3).out('created').values('name'))))], - 'g_V_hasLabelXsoftwareX_hasXname_withoutXVXvid1X_outXcreatedX_valuesXnameX_VXvid3X_outXcreatedX_valuesXnameXXX': [(lambda g, vid3=None,vid1=None:g.V().has_label('software').has('name', P.without(__.V(vid1).out('created').values('name'), __.V(vid3).out('created').values('name'))))], - 'g_V_hasLabelXpersonX_valuesXageX_isXwithinXVXvid1X_valuesXageX_V_hasXname_lopX_inXcreatedX_valuesXageXXX': [(lambda g, vid1=None:g.V().has_label('person').values('age').is_(P.within(__.V(vid1).values('age'), __.V().has('name', 'lop').in_('created').values('age'))))], - 'g_VXvid1X_outEXknowsX_filterXinV_hasXname_withinXV_hasXname_lopX_inXcreatedX_valuesXnameX_V_hasXname_rippleX_inXcreatedX_valuesXnameXXXX': [(lambda g, vid1=None:g.V(vid1).out_e('knows').filter_(__.in_v().has('name', P.within(__.V().has('name', 'lop').in_('created').values('name'), __.V().has('name', 'ripple').in_('created').values('name')))))], + 'g_V_hasXname_withinXVXvid1X_outXknowsX_valuesXnameX_VXvid3X_outXcreatedX_valuesXnameXXX': [(lambda g, vid3=None,vid1=None:g.V().has('name', P.within(__.V(vid1).out('knows').values('name').fold(), __.V(vid3).out('created').values('name').fold())))], + 'g_V_hasLabelXsoftwareX_hasXname_withoutXVXvid1X_outXcreatedX_valuesXnameX_VXvid3X_outXcreatedX_valuesXnameXXX': [(lambda g, vid3=None,vid1=None:g.V().has_label('software').has('name', P.without(__.V(vid1).out('created').values('name').fold(), __.V(vid3).out('created').values('name').fold())))], + 'g_V_hasLabelXpersonX_valuesXageX_isXwithinXVXvid1X_valuesXageX_V_hasXname_lopX_inXcreatedX_valuesXageXXX': [(lambda g, vid1=None:g.V().has_label('person').values('age').is_(P.within(__.V(vid1).values('age').fold(), __.V().has('name', 'lop').in_('created').values('age').fold())))], + 'g_VXvid1X_outEXknowsX_filterXinV_hasXname_withinXV_hasXname_lopX_inXcreatedX_valuesXnameX_V_hasXname_rippleX_inXcreatedX_valuesXnameXXXX': [(lambda g, vid1=None:g.V(vid1).out_e('knows').filter_(__.in_v().has('name', P.within(__.V().has('name', 'lop').in_('created').values('name').fold(), __.V().has('name', 'ripple').in_('created').values('name').fold()))))], 'g_V_properties_hasValueXnullX': [(lambda g:g.V().properties().has_value(None))], 'g_V_properties_hasValueXnull_nullX': [(lambda g:g.V().properties().has_value(None, None))], 'g_V_properties_hasValueXnull_joshX_value': [(lambda g:g.V().properties().has_value(None, 'josh').value())], @@ -562,7 +562,7 @@ world.gremlins = { 'g_V_valuesXageX_isXgtXVXvid1X_valuesXageXXX': [(lambda g, vid1=None:g.V().values('age').is_(P.gt(__.V(vid1).values('age'))))], 'g_V_valuesXageX_isXltXVXvid3X_valuesXageXXX': [(lambda g, vid3=None:g.V().values('age').is_(P.lt(__.V(vid3).values('age'))))], 'g_V_valuesXageX_isXneqXVXvid4X_valuesXageXXX': [(lambda g, vid4=None:g.V().values('age').is_(P.neq(__.V(vid4).values('age'))))], - 'g_V_valuesXageX_isXwithinXVXvid1X_outXknowsX_valuesXageXXX': [(lambda g, vid1=None:g.V().values('age').is_(P.within(__.V(vid1).out('knows').values('age'))))], + 'g_V_valuesXageX_isXwithinXVXvid1X_outXknowsX_valuesXageXXX': [(lambda g, vid1=None:g.V().values('age').is_(P.within(__.V(vid1).out('knows').values('age').fold())))], 'g_V_valuesXageX_isXVXvid1X_valuesXnonexistentXX': [(lambda g, vid1=None:g.V().values('age').is_(__.V(vid1).values('nonexistent')))], 'g_V_hasLabelXpersonX_valuesXageX_chooseXgtXVXvid1X_valuesXageXX_olderX': [(lambda g, vid1=None:g.V().has_label('person').values('age').choose(P.gt(__.V(vid1).values('age')), __.constant('older than marko'), __.constant('not older')))], 'g_V_hasLabelXpersonX_valuesXageX_chooseXgteXmeanAgeX_aboveX': [(lambda g:g.V().has_label('person').values('age').choose(P.gte(__.V().has_label('person').values('age').mean()), __.constant('above average'), __.constant('below average')))], @@ -752,7 +752,7 @@ world.gremlins = { 'g_V_valuesXageX_whereXgtXVXvid1X_valuesXageXXX': [(lambda g, vid1=None:g.V().values('age').where(P.gt(__.V(vid1).values('age'))))], 'g_V_valuesXageX_whereXltXVXvid3X_valuesXageXXX': [(lambda g, vid3=None:g.V().values('age').where(P.lt(__.V(vid3).values('age'))))], 'g_V_valuesXageX_whereXeqXVXvid1X_valuesXageXXX': [(lambda g, vid1=None:g.V().values('age').where(P.eq(__.V(vid1).values('age'))))], - 'g_V_valuesXageX_whereXwithinXVXvid1X_outXknowsX_valuesXageXXX': [(lambda g, vid1=None:g.V().values('age').where(P.within(__.V(vid1).out('knows').values('age'))))], + 'g_V_valuesXageX_whereXwithinXVXvid1X_outXknowsX_valuesXageXXX': [(lambda g, vid1=None:g.V().values('age').where(P.within(__.V(vid1).out('knows').values('age').fold())))], 'g_V_valuesXnameX_whereXneqXVXvid1X_valuesXnameXXX': [(lambda g, vid1=None:g.V().values('name').where(P.neq(__.V(vid1).values('name'))))], 'g_V_valuesXageX_whereXeqXV9999_valuesXageXXX': [(lambda g:g.V().values('age').where(P.eq(__.V(9999).values('age'))))], 'g_V_whereXgtXVXvid1X_valuesXageXXX_byXageX_valuesXnameX': [(lambda g, vid1=None:g.V().where(P.gt(__.V(vid1).values('age'))).by('age').values('name'))], diff --git a/gremlin-test/src/main/resources/org/apache/tinkerpop/gremlin/language/translator/translations.json b/gremlin-test/src/main/resources/org/apache/tinkerpop/gremlin/language/translator/translations.json index e19bb62f0a..6f24c64eae 100644 --- a/gremlin-test/src/main/resources/org/apache/tinkerpop/gremlin/language/translator/translations.json +++ b/gremlin-test/src/main/resources/org/apache/tinkerpop/gremlin/language/translator/translations.json @@ -9793,16 +9793,16 @@ "scenario": "g_V_hasXname_withinXVXvid1X_outXknowsX_valuesXnameX_constantXpeterXXX", "traversals": [ { - "original": "g.V().has(\"name\", P.within(__.V(vid1).out(\"knows\").values(\"name\"), __.constant(\"peter\")))", - "language": "g.V().has(\"name\", P.within(__.V(vid1).out(\"knows\").values(\"name\"), __.constant(\"peter\")))", - "canonical": "g.V().has(\"name\", P.within(__.V(vid1).out(\"knows\").values(\"name\"), __.constant(\"peter\")))", - "anonymized": "g.V().has(string0, P.within(__.V(vid1).out(string1).values(string0), __.constant(string2)))", - "dotnet": "g.V().Has(\"name\", P.Within(__.V(vid1).Out(\"knows\").Values<object>(\"name\"), __.Constant<object>(\"peter\")))", - "go": "g.V().Has(\"name\", gremlingo.P.Within(gremlingo.T__.V(vid1).Out(\"knows\").Values(\"name\"), gremlingo.T__.Constant(\"peter\")))", - "groovy": "g.V().has(\"name\", P.within(__.V(vid1).out(\"knows\").values(\"name\"), __.constant(\"peter\")))", - "java": "g.V().has(\"name\", P.within(__.V(vid1).out(\"knows\").values(\"name\"), __.constant(\"peter\")))", - "javascript": "g.V().has(\"name\", P.within(__.V(vid1).out(\"knows\").values(\"name\"), __.constant(\"peter\")))", - "python": "g.V().has('name', P.within(__.V(vid1).out('knows').values('name'), __.constant('peter')))" + "original": "g.V().has(\"name\", P.within(__.V(vid1).out(\"knows\").values(\"name\").fold(), __.constant(\"peter\")))", + "language": "g.V().has(\"name\", P.within(__.V(vid1).out(\"knows\").values(\"name\").fold(), __.constant(\"peter\")))", + "canonical": "g.V().has(\"name\", P.within(__.V(vid1).out(\"knows\").values(\"name\").fold(), __.constant(\"peter\")))", + "anonymized": "g.V().has(string0, P.within(__.V(vid1).out(string1).values(string0).fold(), __.constant(string2)))", + "dotnet": "g.V().Has(\"name\", P.Within(__.V(vid1).Out(\"knows\").Values<object>(\"name\").Fold(), __.Constant<object>(\"peter\")))", + "go": "g.V().Has(\"name\", gremlingo.P.Within(gremlingo.T__.V(vid1).Out(\"knows\").Values(\"name\").Fold(), gremlingo.T__.Constant(\"peter\")))", + "groovy": "g.V().has(\"name\", P.within(__.V(vid1).out(\"knows\").values(\"name\").fold(), __.constant(\"peter\")))", + "java": "g.V().has(\"name\", P.within(__.V(vid1).out(\"knows\").values(\"name\").fold(), __.constant(\"peter\")))", + "javascript": "g.V().has(\"name\", P.within(__.V(vid1).out(\"knows\").values(\"name\").fold(), __.constant(\"peter\")))", + "python": "g.V().has('name', P.within(__.V(vid1).out('knows').values('name').fold(), __.constant('peter')))" } ] }, @@ -9861,16 +9861,16 @@ "scenario": "g_V_hasXname_withinXVXvid1X_outXknowsX_valuesXnameX_VXvid3X_outXcreatedX_valuesXnameXXX", "traversals": [ { - "original": "g.V().has(\"name\", P.within(__.V(vid1).out(\"knows\").values(\"name\"), __.V(vid3).out(\"created\").values(\"name\")))", - "language": "g.V().has(\"name\", P.within(__.V(vid1).out(\"knows\").values(\"name\"), __.V(vid3).out(\"created\").values(\"name\")))", - "canonical": "g.V().has(\"name\", P.within(__.V(vid1).out(\"knows\").values(\"name\"), __.V(vid3).out(\"created\").values(\"name\")))", - "anonymized": "g.V().has(string0, P.within(__.V(vid1).out(string1).values(string0), __.V(vid3).out(string2).values(string0)))", - "dotnet": "g.V().Has(\"name\", P.Within(__.V(vid1).Out(\"knows\").Values<object>(\"name\"), __.V(vid3).Out(\"created\").Values<object>(\"name\")))", - "go": "g.V().Has(\"name\", gremlingo.P.Within(gremlingo.T__.V(vid1).Out(\"knows\").Values(\"name\"), gremlingo.T__.V(vid3).Out(\"created\").Values(\"name\")))", - "groovy": "g.V().has(\"name\", P.within(__.V(vid1).out(\"knows\").values(\"name\"), __.V(vid3).out(\"created\").values(\"name\")))", - "java": "g.V().has(\"name\", P.within(__.V(vid1).out(\"knows\").values(\"name\"), __.V(vid3).out(\"created\").values(\"name\")))", - "javascript": "g.V().has(\"name\", P.within(__.V(vid1).out(\"knows\").values(\"name\"), __.V(vid3).out(\"created\").values(\"name\")))", - "python": "g.V().has('name', P.within(__.V(vid1).out('knows').values('name'), __.V(vid3).out('created').values('name')))" + "original": "g.V().has(\"name\", P.within(__.V(vid1).out(\"knows\").values(\"name\").fold(), __.V(vid3).out(\"created\").values(\"name\").fold()))", + "language": "g.V().has(\"name\", P.within(__.V(vid1).out(\"knows\").values(\"name\").fold(), __.V(vid3).out(\"created\").values(\"name\").fold()))", + "canonical": "g.V().has(\"name\", P.within(__.V(vid1).out(\"knows\").values(\"name\").fold(), __.V(vid3).out(\"created\").values(\"name\").fold()))", + "anonymized": "g.V().has(string0, P.within(__.V(vid1).out(string1).values(string0).fold(), __.V(vid3).out(string2).values(string0).fold()))", + "dotnet": "g.V().Has(\"name\", P.Within(__.V(vid1).Out(\"knows\").Values<object>(\"name\").Fold(), __.V(vid3).Out(\"created\").Values<object>(\"name\").Fold()))", + "go": "g.V().Has(\"name\", gremlingo.P.Within(gremlingo.T__.V(vid1).Out(\"knows\").Values(\"name\").Fold(), gremlingo.T__.V(vid3).Out(\"created\").Values(\"name\").Fold()))", + "groovy": "g.V().has(\"name\", P.within(__.V(vid1).out(\"knows\").values(\"name\").fold(), __.V(vid3).out(\"created\").values(\"name\").fold()))", + "java": "g.V().has(\"name\", P.within(__.V(vid1).out(\"knows\").values(\"name\").fold(), __.V(vid3).out(\"created\").values(\"name\").fold()))", + "javascript": "g.V().has(\"name\", P.within(__.V(vid1).out(\"knows\").values(\"name\").fold(), __.V(vid3).out(\"created\").values(\"name\").fold()))", + "python": "g.V().has('name', P.within(__.V(vid1).out('knows').values('name').fold(), __.V(vid3).out('created').values('name').fold()))" } ] }, @@ -9878,16 +9878,16 @@ "scenario": "g_V_hasLabelXsoftwareX_hasXname_withoutXVXvid1X_outXcreatedX_valuesXnameX_VXvid3X_outXcreatedX_valuesXnameXXX", "traversals": [ { - "original": "g.V().hasLabel(\"software\").has(\"name\", P.without(__.V(vid1).out(\"created\").values(\"name\"), __.V(vid3).out(\"created\").values(\"name\")))", - "language": "g.V().hasLabel(\"software\").has(\"name\", P.without(__.V(vid1).out(\"created\").values(\"name\"), __.V(vid3).out(\"created\").values(\"name\")))", - "canonical": "g.V().hasLabel(\"software\").has(\"name\", P.without(__.V(vid1).out(\"created\").values(\"name\"), __.V(vid3).out(\"created\").values(\"name\")))", - "anonymized": "g.V().hasLabel(string0).has(string1, P.without(__.V(vid1).out(string2).values(string1), __.V(vid3).out(string2).values(string1)))", - "dotnet": "g.V().HasLabel(\"software\").Has(\"name\", P.Without(__.V(vid1).Out(\"created\").Values<object>(\"name\"), __.V(vid3).Out(\"created\").Values<object>(\"name\")))", - "go": "g.V().HasLabel(\"software\").Has(\"name\", gremlingo.P.Without(gremlingo.T__.V(vid1).Out(\"created\").Values(\"name\"), gremlingo.T__.V(vid3).Out(\"created\").Values(\"name\")))", - "groovy": "g.V().hasLabel(\"software\").has(\"name\", P.without(__.V(vid1).out(\"created\").values(\"name\"), __.V(vid3).out(\"created\").values(\"name\")))", - "java": "g.V().hasLabel(\"software\").has(\"name\", P.without(__.V(vid1).out(\"created\").values(\"name\"), __.V(vid3).out(\"created\").values(\"name\")))", - "javascript": "g.V().hasLabel(\"software\").has(\"name\", P.without(__.V(vid1).out(\"created\").values(\"name\"), __.V(vid3).out(\"created\").values(\"name\")))", - "python": "g.V().has_label('software').has('name', P.without(__.V(vid1).out('created').values('name'), __.V(vid3).out('created').values('name')))" + "original": "g.V().hasLabel(\"software\").has(\"name\", P.without(__.V(vid1).out(\"created\").values(\"name\").fold(), __.V(vid3).out(\"created\").values(\"name\").fold()))", + "language": "g.V().hasLabel(\"software\").has(\"name\", P.without(__.V(vid1).out(\"created\").values(\"name\").fold(), __.V(vid3).out(\"created\").values(\"name\").fold()))", + "canonical": "g.V().hasLabel(\"software\").has(\"name\", P.without(__.V(vid1).out(\"created\").values(\"name\").fold(), __.V(vid3).out(\"created\").values(\"name\").fold()))", + "anonymized": "g.V().hasLabel(string0).has(string1, P.without(__.V(vid1).out(string2).values(string1).fold(), __.V(vid3).out(string2).values(string1).fold()))", + "dotnet": "g.V().HasLabel(\"software\").Has(\"name\", P.Without(__.V(vid1).Out(\"created\").Values<object>(\"name\").Fold(), __.V(vid3).Out(\"created\").Values<object>(\"name\").Fold()))", + "go": "g.V().HasLabel(\"software\").Has(\"name\", gremlingo.P.Without(gremlingo.T__.V(vid1).Out(\"created\").Values(\"name\").Fold(), gremlingo.T__.V(vid3).Out(\"created\").Values(\"name\").Fold()))", + "groovy": "g.V().hasLabel(\"software\").has(\"name\", P.without(__.V(vid1).out(\"created\").values(\"name\").fold(), __.V(vid3).out(\"created\").values(\"name\").fold()))", + "java": "g.V().hasLabel(\"software\").has(\"name\", P.without(__.V(vid1).out(\"created\").values(\"name\").fold(), __.V(vid3).out(\"created\").values(\"name\").fold()))", + "javascript": "g.V().hasLabel(\"software\").has(\"name\", P.without(__.V(vid1).out(\"created\").values(\"name\").fold(), __.V(vid3).out(\"created\").values(\"name\").fold()))", + "python": "g.V().has_label('software').has('name', P.without(__.V(vid1).out('created').values('name').fold(), __.V(vid3).out('created').values('name').fold()))" } ] }, @@ -9895,16 +9895,16 @@ "scenario": "g_V_hasLabelXpersonX_valuesXageX_isXwithinXVXvid1X_valuesXageX_V_hasXname_lopX_inXcreatedX_valuesXageXXX", "traversals": [ { - "original": "g.V().hasLabel(\"person\").values(\"age\").is(P.within(__.V(vid1).values(\"age\"), __.V().has(\"name\",\"lop\").in(\"created\").values(\"age\")))", - "language": "g.V().hasLabel(\"person\").values(\"age\").is(P.within(__.V(vid1).values(\"age\"), __.V().has(\"name\", \"lop\").in(\"created\").values(\"age\")))", - "canonical": "g.V().hasLabel(\"person\").values(\"age\").is(P.within(__.V(vid1).values(\"age\"), __.V().has(\"name\", \"lop\").in(\"created\").values(\"age\")))", - "anonymized": "g.V().hasLabel(string0).values(string1).is(P.within(__.V(vid1).values(string1), __.V().has(string2, string3).in(string4).values(string1)))", - "dotnet": "g.V().HasLabel(\"person\").Values<object>(\"age\").Is(P.Within(__.V(vid1).Values<object>(\"age\"), __.V().Has(\"name\", \"lop\").In(\"created\").Values<object>(\"age\")))", - "go": "g.V().HasLabel(\"person\").Values(\"age\").Is(gremlingo.P.Within(gremlingo.T__.V(vid1).Values(\"age\"), gremlingo.T__.V().Has(\"name\", \"lop\").In(\"created\").Values(\"age\")))", - "groovy": "g.V().hasLabel(\"person\").values(\"age\").is(P.within(__.V(vid1).values(\"age\"), __.V().has(\"name\", \"lop\").in(\"created\").values(\"age\")))", - "java": "g.V().hasLabel(\"person\").values(\"age\").is(P.within(__.V(vid1).values(\"age\"), __.V().has(\"name\", \"lop\").in(\"created\").values(\"age\")))", - "javascript": "g.V().hasLabel(\"person\").values(\"age\").is(P.within(__.V(vid1).values(\"age\"), __.V().has(\"name\", \"lop\").in_(\"created\").values(\"age\")))", - "python": "g.V().has_label('person').values('age').is_(P.within(__.V(vid1).values('age'), __.V().has('name', 'lop').in_('created').values('age')))" + "original": "g.V().hasLabel(\"person\").values(\"age\").is(P.within(__.V(vid1).values(\"age\").fold(), __.V().has(\"name\",\"lop\").in(\"created\").values(\"age\").fold()))", + "language": "g.V().hasLabel(\"person\").values(\"age\").is(P.within(__.V(vid1).values(\"age\").fold(), __.V().has(\"name\", \"lop\").in(\"created\").values(\"age\").fold()))", + "canonical": "g.V().hasLabel(\"person\").values(\"age\").is(P.within(__.V(vid1).values(\"age\").fold(), __.V().has(\"name\", \"lop\").in(\"created\").values(\"age\").fold()))", + "anonymized": "g.V().hasLabel(string0).values(string1).is(P.within(__.V(vid1).values(string1).fold(), __.V().has(string2, string3).in(string4).values(string1).fold()))", + "dotnet": "g.V().HasLabel(\"person\").Values<object>(\"age\").Is(P.Within(__.V(vid1).Values<object>(\"age\").Fold(), __.V().Has(\"name\", \"lop\").In(\"created\").Values<object>(\"age\").Fold()))", + "go": "g.V().HasLabel(\"person\").Values(\"age\").Is(gremlingo.P.Within(gremlingo.T__.V(vid1).Values(\"age\").Fold(), gremlingo.T__.V().Has(\"name\", \"lop\").In(\"created\").Values(\"age\").Fold()))", + "groovy": "g.V().hasLabel(\"person\").values(\"age\").is(P.within(__.V(vid1).values(\"age\").fold(), __.V().has(\"name\", \"lop\").in(\"created\").values(\"age\").fold()))", + "java": "g.V().hasLabel(\"person\").values(\"age\").is(P.within(__.V(vid1).values(\"age\").fold(), __.V().has(\"name\", \"lop\").in(\"created\").values(\"age\").fold()))", + "javascript": "g.V().hasLabel(\"person\").values(\"age\").is(P.within(__.V(vid1).values(\"age\").fold(), __.V().has(\"name\", \"lop\").in_(\"created\").values(\"age\").fold()))", + "python": "g.V().has_label('person').values('age').is_(P.within(__.V(vid1).values('age').fold(), __.V().has('name', 'lop').in_('created').values('age').fold()))" } ] }, @@ -9912,16 +9912,16 @@ "scenario": "g_VXvid1X_outEXknowsX_filterXinV_hasXname_withinXV_hasXname_lopX_inXcreatedX_valuesXnameX_V_hasXname_rippleX_inXcreatedX_valuesXnameXXXX", "traversals": [ { - "original": "g.V(vid1).outE(\"knows\").filter(__.inV().has(\"name\", P.within(__.V().has(\"name\",\"lop\").in(\"created\").values(\"name\"), __.V().has(\"name\",\"ripple\").in(\"created\").values(\"name\"))))", - "language": "g.V(vid1).outE(\"knows\").filter(__.inV().has(\"name\", P.within(__.V().has(\"name\", \"lop\").in(\"created\").values(\"name\"), __.V().has(\"name\", \"ripple\").in(\"created\").values(\"name\"))))", - "canonical": "g.V(vid1).outE(\"knows\").filter(__.inV().has(\"name\", P.within(__.V().has(\"name\", \"lop\").in(\"created\").values(\"name\"), __.V().has(\"name\", \"ripple\").in(\"created\").values(\"name\"))))", - "anonymized": "g.V(vid1).outE(string0).filter(__.inV().has(string1, P.within(__.V().has(string1, string2).in(string3).values(string1), __.V().has(string1, string4).in(string3).values(string1))))", - "dotnet": "g.V(vid1).OutE(\"knows\").Filter(__.InV().Has(\"name\", P.Within(__.V().Has(\"name\", \"lop\").In(\"created\").Values<object>(\"name\"), __.V().Has(\"name\", \"ripple\").In(\"created\").Values<object>(\"name\"))))", - "go": "g.V(vid1).OutE(\"knows\").Filter(gremlingo.T__.InV().Has(\"name\", gremlingo.P.Within(gremlingo.T__.V().Has(\"name\", \"lop\").In(\"created\").Values(\"name\"), gremlingo.T__.V().Has(\"name\", \"ripple\").In(\"created\").Values(\"name\"))))", - "groovy": "g.V(vid1).outE(\"knows\").filter(__.inV().has(\"name\", P.within(__.V().has(\"name\", \"lop\").in(\"created\").values(\"name\"), __.V().has(\"name\", \"ripple\").in(\"created\").values(\"name\"))))", - "java": "g.V(vid1).outE(\"knows\").filter(__.inV().has(\"name\", P.within(__.V().has(\"name\", \"lop\").in(\"created\").values(\"name\"), __.V().has(\"name\", \"ripple\").in(\"created\").values(\"name\"))))", - "javascript": "g.V(vid1).outE(\"knows\").filter(__.inV().has(\"name\", P.within(__.V().has(\"name\", \"lop\").in_(\"created\").values(\"name\"), __.V().has(\"name\", \"ripple\").in_(\"created\").values(\"name\"))))", - "python": "g.V(vid1).out_e('knows').filter_(__.in_v().has('name', P.within(__.V().has('name', 'lop').in_('created').values('name'), __.V().has('name', 'ripple').in_('created').values('name'))))" + "original": "g.V(vid1).outE(\"knows\").filter(__.inV().has(\"name\", P.within(__.V().has(\"name\",\"lop\").in(\"created\").values(\"name\").fold(), __.V().has(\"name\",\"ripple\").in(\"created\").values(\"name\").fold())))", + "language": "g.V(vid1).outE(\"knows\").filter(__.inV().has(\"name\", P.within(__.V().has(\"name\", \"lop\").in(\"created\").values(\"name\").fold(), __.V().has(\"name\", \"ripple\").in(\"created\").values(\"name\").fold())))", + "canonical": "g.V(vid1).outE(\"knows\").filter(__.inV().has(\"name\", P.within(__.V().has(\"name\", \"lop\").in(\"created\").values(\"name\").fold(), __.V().has(\"name\", \"ripple\").in(\"created\").values(\"name\").fold())))", + "anonymized": "g.V(vid1).outE(string0).filter(__.inV().has(string1, P.within(__.V().has(string1, string2).in(string3).values(string1).fold(), __.V().has(string1, string4).in(string3).values(string1).fold())))", + "dotnet": "g.V(vid1).OutE(\"knows\").Filter(__.InV().Has(\"name\", P.Within(__.V().Has(\"name\", \"lop\").In(\"created\").Values<object>(\"name\").Fold(), __.V().Has(\"name\", \"ripple\").In(\"created\").Values<object>(\"name\").Fold())))", + "go": "g.V(vid1).OutE(\"knows\").Filter(gremlingo.T__.InV().Has(\"name\", gremlingo.P.Within(gremlingo.T__.V().Has(\"name\", \"lop\").In(\"created\").Values(\"name\").Fold(), gremlingo.T__.V().Has(\"name\", \"ripple\").In(\"created\").Values(\"name\").Fold())))", + "groovy": "g.V(vid1).outE(\"knows\").filter(__.inV().has(\"name\", P.within(__.V().has(\"name\", \"lop\").in(\"created\").values(\"name\").fold(), __.V().has(\"name\", \"ripple\").in(\"created\").values(\"name\").fold())))", + "java": "g.V(vid1).outE(\"knows\").filter(__.inV().has(\"name\", P.within(__.V().has(\"name\", \"lop\").in(\"created\").values(\"name\").fold(), __.V().has(\"name\", \"ripple\").in(\"created\").values(\"name\").fold())))", + "javascript": "g.V(vid1).outE(\"knows\").filter(__.inV().has(\"name\", P.within(__.V().has(\"name\", \"lop\").in_(\"created\").values(\"name\").fold(), __.V().has(\"name\", \"ripple\").in_(\"created\").values(\"name\").fold())))", + "python": "g.V(vid1).out_e('knows').filter_(__.in_v().has('name', P.within(__.V().has('name', 'lop').in_('created').values('name').fold(), __.V().has('name', 'ripple').in_('created').values('name').fold())))" } ] }, @@ -10201,16 +10201,16 @@ "scenario": "g_V_valuesXageX_isXwithinXVXvid1X_outXknowsX_valuesXageXXX", "traversals": [ { - "original": "g.V().values(\"age\").is(P.within(__.V(vid1).out(\"knows\").values(\"age\")))", - "language": "g.V().values(\"age\").is(P.within(__.V(vid1).out(\"knows\").values(\"age\")))", - "canonical": "g.V().values(\"age\").is(P.within(__.V(vid1).out(\"knows\").values(\"age\")))", - "anonymized": "g.V().values(string0).is(P.within(__.V(vid1).out(string1).values(string0)))", - "dotnet": "g.V().Values<object>(\"age\").Is(P.Within(__.V(vid1).Out(\"knows\").Values<object>(\"age\")))", - "go": "g.V().Values(\"age\").Is(gremlingo.P.Within(gremlingo.T__.V(vid1).Out(\"knows\").Values(\"age\")))", - "groovy": "g.V().values(\"age\").is(P.within(__.V(vid1).out(\"knows\").values(\"age\")))", - "java": "g.V().values(\"age\").is(P.within(__.V(vid1).out(\"knows\").values(\"age\")))", - "javascript": "g.V().values(\"age\").is(P.within(__.V(vid1).out(\"knows\").values(\"age\")))", - "python": "g.V().values('age').is_(P.within(__.V(vid1).out('knows').values('age')))" + "original": "g.V().values(\"age\").is(P.within(__.V(vid1).out(\"knows\").values(\"age\").fold()))", + "language": "g.V().values(\"age\").is(P.within(__.V(vid1).out(\"knows\").values(\"age\").fold()))", + "canonical": "g.V().values(\"age\").is(P.within(__.V(vid1).out(\"knows\").values(\"age\").fold()))", + "anonymized": "g.V().values(string0).is(P.within(__.V(vid1).out(string1).values(string0).fold()))", + "dotnet": "g.V().Values<object>(\"age\").Is(P.Within(__.V(vid1).Out(\"knows\").Values<object>(\"age\").Fold()))", + "go": "g.V().Values(\"age\").Is(gremlingo.P.Within(gremlingo.T__.V(vid1).Out(\"knows\").Values(\"age\").Fold()))", + "groovy": "g.V().values(\"age\").is(P.within(__.V(vid1).out(\"knows\").values(\"age\").fold()))", + "java": "g.V().values(\"age\").is(P.within(__.V(vid1).out(\"knows\").values(\"age\").fold()))", + "javascript": "g.V().values(\"age\").is(P.within(__.V(vid1).out(\"knows\").values(\"age\").fold()))", + "python": "g.V().values('age').is_(P.within(__.V(vid1).out('knows').values('age').fold()))" } ] }, @@ -13431,16 +13431,16 @@ "scenario": "g_V_valuesXageX_whereXwithinXVXvid1X_outXknowsX_valuesXageXXX", "traversals": [ { - "original": "g.V().values(\"age\").where(P.within(__.V(vid1).out(\"knows\").values(\"age\")))", - "language": "g.V().values(\"age\").where(P.within(__.V(vid1).out(\"knows\").values(\"age\")))", - "canonical": "g.V().values(\"age\").where(P.within(__.V(vid1).out(\"knows\").values(\"age\")))", - "anonymized": "g.V().values(string0).where(P.within(__.V(vid1).out(string1).values(string0)))", - "dotnet": "g.V().Values<object>(\"age\").Where(P.Within(__.V(vid1).Out(\"knows\").Values<object>(\"age\")))", - "go": "g.V().Values(\"age\").Where(gremlingo.P.Within(gremlingo.T__.V(vid1).Out(\"knows\").Values(\"age\")))", - "groovy": "g.V().values(\"age\").where(P.within(__.V(vid1).out(\"knows\").values(\"age\")))", - "java": "g.V().values(\"age\").where(P.within(__.V(vid1).out(\"knows\").values(\"age\")))", - "javascript": "g.V().values(\"age\").where(P.within(__.V(vid1).out(\"knows\").values(\"age\")))", - "python": "g.V().values('age').where(P.within(__.V(vid1).out('knows').values('age')))" + "original": "g.V().values(\"age\").where(P.within(__.V(vid1).out(\"knows\").values(\"age\").fold()))", + "language": "g.V().values(\"age\").where(P.within(__.V(vid1).out(\"knows\").values(\"age\").fold()))", + "canonical": "g.V().values(\"age\").where(P.within(__.V(vid1).out(\"knows\").values(\"age\").fold()))", + "anonymized": "g.V().values(string0).where(P.within(__.V(vid1).out(string1).values(string0).fold()))", + "dotnet": "g.V().Values<object>(\"age\").Where(P.Within(__.V(vid1).Out(\"knows\").Values<object>(\"age\").Fold()))", + "go": "g.V().Values(\"age\").Where(gremlingo.P.Within(gremlingo.T__.V(vid1).Out(\"knows\").Values(\"age\").Fold()))", + "groovy": "g.V().values(\"age\").where(P.within(__.V(vid1).out(\"knows\").values(\"age\").fold()))", + "java": "g.V().values(\"age\").where(P.within(__.V(vid1).out(\"knows\").values(\"age\").fold()))", + "javascript": "g.V().values(\"age\").where(P.within(__.V(vid1).out(\"knows\").values(\"age\").fold()))", + "python": "g.V().values('age').where(P.within(__.V(vid1).out('knows').values('age').fold()))" } ] }, diff --git a/gremlin-test/src/main/resources/org/apache/tinkerpop/gremlin/test/features/filter/HasTraversal.feature b/gremlin-test/src/main/resources/org/apache/tinkerpop/gremlin/test/features/filter/HasTraversal.feature index 8479eeac33..d9e521c21c 100644 --- a/gremlin-test/src/main/resources/org/apache/tinkerpop/gremlin/test/features/filter/HasTraversal.feature +++ b/gremlin-test/src/main/resources/org/apache/tinkerpop/gremlin/test/features/filter/HasTraversal.feature @@ -204,14 +204,14 @@ Feature: Step - has() with traversal arguments | result | | d[29].i | - # Multi-traversal within() where one traversal produces multiple results + # Multi-traversal within() where one traversal produces multiple results — use fold() to collect @GraphComputerVerificationMidVNotSupported Scenario: g_V_hasXname_withinXVXvid1X_outXknowsX_valuesXnameX_constantXpeterXXX Given the modern graph And using the parameter vid1 defined as "v[marko].id" And the traversal of """ - g.V().has("name", P.within(__.V(vid1).out("knows").values("name"), __.constant("peter"))) + g.V().has("name", P.within(__.V(vid1).out("knows").values("name").fold(), __.constant("peter"))) """ When iterated to list Then the result should be unordered @@ -272,7 +272,7 @@ Feature: Step - has() with traversal arguments And using the parameter vid3 defined as "v[josh].id" And the traversal of """ - g.V().has("name", P.within(__.V(vid1).out("knows").values("name"), __.V(vid3).out("created").values("name"))) + g.V().has("name", P.within(__.V(vid1).out("knows").values("name").fold(), __.V(vid3).out("created").values("name").fold())) """ When iterated to list Then the result should be unordered @@ -290,19 +290,19 @@ Feature: Step - has() with traversal arguments And using the parameter vid3 defined as "v[josh].id" And the traversal of """ - g.V().hasLabel("software").has("name", P.without(__.V(vid1).out("created").values("name"), __.V(vid3).out("created").values("name"))) + g.V().hasLabel("software").has("name", P.without(__.V(vid1).out("created").values("name").fold(), __.V(vid3).out("created").values("name").fold())) """ When iterated to list Then the result should be empty - # Multi-traversal within() with is() — cross-label dynamic filtering + # Multi-traversal within() with is() — cross-label dynamic filtering, use fold() for multi-result @GraphComputerVerificationMidVNotSupported Scenario: g_V_hasLabelXpersonX_valuesXageX_isXwithinXVXvid1X_valuesXageX_V_hasXname_lopX_inXcreatedX_valuesXageXXX Given the modern graph And using the parameter vid1 defined as "v[marko].id" And the traversal of """ - g.V().hasLabel("person").values("age").is(P.within(__.V(vid1).values("age"), __.V().has("name","lop").in("created").values("age"))) + g.V().hasLabel("person").values("age").is(P.within(__.V(vid1).values("age").fold(), __.V().has("name","lop").in("created").values("age").fold())) """ When iterated to list Then the result should be unordered @@ -318,7 +318,7 @@ Feature: Step - has() with traversal arguments And using the parameter vid1 defined as "v[marko].id" And the traversal of """ - g.V(vid1).outE("knows").filter(__.inV().has("name", P.within(__.V().has("name","lop").in("created").values("name"), __.V().has("name","ripple").in("created").values("name")))) + g.V(vid1).outE("knows").filter(__.inV().has("name", P.within(__.V().has("name","lop").in("created").values("name").fold(), __.V().has("name","ripple").in("created").values("name").fold()))) """ When iterated to list Then the result should be unordered diff --git a/gremlin-test/src/main/resources/org/apache/tinkerpop/gremlin/test/features/filter/IsTraversal.feature b/gremlin-test/src/main/resources/org/apache/tinkerpop/gremlin/test/features/filter/IsTraversal.feature index 42b1eb898b..4a70f2ba24 100644 --- a/gremlin-test/src/main/resources/org/apache/tinkerpop/gremlin/test/features/filter/IsTraversal.feature +++ b/gremlin-test/src/main/resources/org/apache/tinkerpop/gremlin/test/features/filter/IsTraversal.feature @@ -93,7 +93,7 @@ Feature: Step - is() with traversal-bearing predicates And using the parameter vid1 defined as "v[marko].id" And the traversal of """ - g.V().values("age").is(P.within(__.V(vid1).out("knows").values("age"))) + g.V().values("age").is(P.within(__.V(vid1).out("knows").values("age").fold())) """ When iterated to list Then the result should be unordered diff --git a/gremlin-test/src/main/resources/org/apache/tinkerpop/gremlin/test/features/filter/WhereTraversal.feature b/gremlin-test/src/main/resources/org/apache/tinkerpop/gremlin/test/features/filter/WhereTraversal.feature index cf9628883a..abc91bbea6 100644 --- a/gremlin-test/src/main/resources/org/apache/tinkerpop/gremlin/test/features/filter/WhereTraversal.feature +++ b/gremlin-test/src/main/resources/org/apache/tinkerpop/gremlin/test/features/filter/WhereTraversal.feature @@ -69,7 +69,7 @@ Feature: Step - where(P) with traversal-bearing predicates And using the parameter vid1 defined as "v[marko].id" And the traversal of """ - g.V().values("age").where(P.within(__.V(vid1).out("knows").values("age"))) + g.V().values("age").where(P.within(__.V(vid1).out("knows").values("age").fold())) """ When iterated to list Then the result should be unordered
