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 b1b02894f6e6f9af8de70588a2e8f5aee523ddfa Author: Yang Xia <[email protected]> AuthorDate: Wed May 20 10:14:28 2026 -0700 Add support in GLVs for steps taking traversals --- .../translator/DotNetTranslateVisitor.java | 43 +++++++++++++++ .../Process/Traversal/GraphTraversal.cs | 10 ++++ .../Gremlin.Net/Process/Traversal/GremlinLang.cs | 13 ++++- .../src/Gremlin.Net/Process/Traversal/P.cs | 10 ++++ .../src/Gremlin.Net/Process/Traversal/TextP.cs | 30 +++++++++++ .../src/Gremlin.Net/Process/Traversal/__.cs | 9 ++++ .../Gremlin.Net.IntegrationTest/Gherkin/Gremlin.cs | 62 +++++++++++++++------- gremlin-go/driver/cucumber/gremlin.go | 62 +++++++++++++++------- gremlin-go/driver/gremlinlang.go | 19 ++++++- .../language/translator/DotNetTranslateVisitor.ts | 39 ++++++++++++++ .../gremlin-javascript/lib/process/gremlin-lang.ts | 9 +++- .../gremlin-javascript/lib/process/traversal.ts | 6 +++ .../gremlin-javascript/test/cucumber/gremlin.js | 62 +++++++++++++++------- .../python/gremlin_python/process/traversal.py | 27 +++++++--- .../src/main/python/tests/feature/gremlin.py | 62 +++++++++++++++------- .../gremlin/language/translator/translations.json | 10 ++-- 16 files changed, 385 insertions(+), 88 deletions(-) diff --git a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/language/translator/DotNetTranslateVisitor.java b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/language/translator/DotNetTranslateVisitor.java index 11546c6ca2..7ce385c925 100644 --- a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/language/translator/DotNetTranslateVisitor.java +++ b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/language/translator/DotNetTranslateVisitor.java @@ -962,6 +962,49 @@ public class DotNetTranslateVisitor extends AbstractTranslateVisitor { return handleGenerics(ctx); } + @Override + public Void visitTraversalMethod_property_Object(final GremlinParser.TraversalMethod_property_ObjectContext ctx) { + // Property(null) is ambiguous with Property(ITraversal) — cast null to IDictionary to disambiguate + if (ctx.genericMapNullableArgument().genericMapNullableLiteral() != null && + ctx.genericMapNullableArgument().genericMapNullableLiteral().nullLiteral() != null) { + visit(ctx.getChild(0)); + sb.append("("); + sb.append("(IDictionary<object, object>) "); + visit(ctx.genericMapNullableArgument()); + sb.append(")"); + return null; + } + return super.visitTraversalMethod_property_Object(ctx); + } + + @Override + public Void visitTraversalMethod_property_Cardinality_Object(final GremlinParser.TraversalMethod_property_Cardinality_ObjectContext ctx) { + // Property(Cardinality, null) — cast null to IDictionary to disambiguate + if (ctx.genericMapNullableArgument().genericMapNullableLiteral() != null && + ctx.genericMapNullableArgument().genericMapNullableLiteral().nullLiteral() != null) { + visit(ctx.getChild(0)); + sb.append("("); + visit(ctx.traversalCardinality()); + sb.append(", "); + sb.append("(IDictionary<object, object>) "); + visit(ctx.genericMapNullableArgument()); + sb.append(")"); + return null; + } + return super.visitTraversalMethod_property_Cardinality_Object(ctx); + } + + @Override + public Void visitTraversalMethod_property_Traversal(final GremlinParser.TraversalMethod_property_TraversalContext ctx) { + // Property(ITraversal) — cast to ITraversal to disambiguate + visit(ctx.getChild(0)); + sb.append("("); + sb.append("(ITraversal) "); + visit(ctx.nestedTraversal()); + sb.append(")"); + return null; + } + @Override public Void visitTraversalMethod_property_Cardinality_Object_Object_Object(final GremlinParser.TraversalMethod_property_Cardinality_Object_Object_ObjectContext ctx) { if (ctx.genericArgumentVarargs() == null || ctx.genericArgumentVarargs().getChildCount() == 0) { diff --git a/gremlin-dotnet/src/Gremlin.Net/Process/Traversal/GraphTraversal.cs b/gremlin-dotnet/src/Gremlin.Net/Process/Traversal/GraphTraversal.cs index de01df3367..5f5852ec1d 100644 --- a/gremlin-dotnet/src/Gremlin.Net/Process/Traversal/GraphTraversal.cs +++ b/gremlin-dotnet/src/Gremlin.Net/Process/Traversal/GraphTraversal.cs @@ -1825,6 +1825,16 @@ namespace Gremlin.Net.Process.Traversal return Wrap<TStart, TEnd>(this); } + /// <summary> + /// Adds the property step with a map-producing traversal to this <see cref="GraphTraversal{SType, EType}" />. + /// The traversal must produce a Map whose entries become properties on the element. + /// </summary> + public GraphTraversal<TStart, TEnd> Property(ITraversal propertyTraversal) + { + GremlinLang.AddStep("property", propertyTraversal); + return Wrap<TStart, TEnd>(this); + } + /// <summary> /// Adds the propertyMap step to this <see cref="GraphTraversal{SType, EType}" />. diff --git a/gremlin-dotnet/src/Gremlin.Net/Process/Traversal/GremlinLang.cs b/gremlin-dotnet/src/Gremlin.Net/Process/Traversal/GremlinLang.cs index 21115a8f8f..0425f99a29 100644 --- a/gremlin-dotnet/src/Gremlin.Net/Process/Traversal/GremlinLang.cs +++ b/gremlin-dotnet/src/Gremlin.Net/Process/Traversal/GremlinLang.cs @@ -25,6 +25,7 @@ using System; using System.Collections; using System.Collections.Generic; using System.Globalization; +using System.Linq; using System.Numerics; using System.Text; using Gremlin.Net.Process.Traversal.Strategy; @@ -417,11 +418,21 @@ namespace Gremlin.Net.Process.Traversal } else if (p.Value is IList listVal && (p.OperatorName == "within" || p.OperatorName == "without")) { - // within/without with a list value - render as [e1,e2,...] + // within/without with a list value if (listVal.Count == 0) { // empty within() - no brackets } + else if (listVal.Cast<object>().All(v => v is ITraversal)) + { + // All elements are traversals - serialize as comma-separated args (no brackets) + // This matches the server grammar: within(trav1, trav2) via genericArgumentVarargs + for (int i = 0; i < listVal.Count; i++) + { + if (i > 0) sb.Append(','); + sb.Append(ArgAsString(listVal[i])); + } + } else { sb.Append('['); diff --git a/gremlin-dotnet/src/Gremlin.Net/Process/Traversal/P.cs b/gremlin-dotnet/src/Gremlin.Net/Process/Traversal/P.cs index fe33aec3e8..18f827a7ea 100644 --- a/gremlin-dotnet/src/Gremlin.Net/Process/Traversal/P.cs +++ b/gremlin-dotnet/src/Gremlin.Net/Process/Traversal/P.cs @@ -157,12 +157,22 @@ namespace Gremlin.Net.Process.Traversal public static P Within(params object[]? args) { + if (args is { Length: 1 } && args[0] is ITraversal) + return new P("within", args[0]); + // Multiple traversals - store as list preserving ITraversal type for serializer detection + if (args is { Length: > 1 } && args.All(a => a is ITraversal)) + return new P("within", new List<object>(args)); var x = args is { Length: 1 } && args[0] is ICollection collection ? collection : args; return new P("within", ToGenericList(x)); } public static P Without(params object[]? args) { + if (args is { Length: 1 } && args[0] is ITraversal) + return new P("without", args[0]); + // Multiple traversals - store as list preserving ITraversal type for serializer detection + if (args is { Length: > 1 } && args.All(a => a is ITraversal)) + return new P("without", new List<object>(args)); var x = args is { Length: 1 } && args[0] is ICollection collection ? collection : args; return new P("without", ToGenericList(x)); } diff --git a/gremlin-dotnet/src/Gremlin.Net/Process/Traversal/TextP.cs b/gremlin-dotnet/src/Gremlin.Net/Process/Traversal/TextP.cs index cc94f34681..8b0d81e134 100644 --- a/gremlin-dotnet/src/Gremlin.Net/Process/Traversal/TextP.cs +++ b/gremlin-dotnet/src/Gremlin.Net/Process/Traversal/TextP.cs @@ -51,31 +51,61 @@ namespace Gremlin.Net.Process.Traversal return new TextP("containing", value); } + public static P Containing(object value) + { + return new P("containing", value); + } + public static TextP EndingWith(string value) { return new TextP("endingWith", value); } + public static P EndingWith(object value) + { + return new P("endingWith", value); + } + public static TextP NotContaining(string value) { return new TextP("notContaining", value); } + public static P NotContaining(object value) + { + return new P("notContaining", value); + } + public static TextP NotEndingWith(string value) { return new TextP("notEndingWith", value); } + public static P NotEndingWith(object value) + { + return new P("notEndingWith", value); + } + public static TextP NotStartingWith(string value) { return new TextP("notStartingWith", value); } + public static P NotStartingWith(object value) + { + return new P("notStartingWith", value); + } + public static TextP StartingWith(string value) { return new TextP("startingWith", value); } + public static P StartingWith(object value) + { + return new P("startingWith", value); + } + public static TextP Regex(string value) { return new TextP("regex", value); diff --git a/gremlin-dotnet/src/Gremlin.Net/Process/Traversal/__.cs b/gremlin-dotnet/src/Gremlin.Net/Process/Traversal/__.cs index b16732a61b..3ccccdd839 100644 --- a/gremlin-dotnet/src/Gremlin.Net/Process/Traversal/__.cs +++ b/gremlin-dotnet/src/Gremlin.Net/Process/Traversal/__.cs @@ -1256,6 +1256,15 @@ namespace Gremlin.Net.Process.Traversal return new GraphTraversal<object, object>().Property(map); } + /// <summary> + /// Spawns a <see cref="GraphTraversal{SType, EType}" /> and adds the property step with a + /// map-producing traversal to that traversal. + /// </summary> + public static GraphTraversal<object, object> Property(ITraversal propertyTraversal) + { + return new GraphTraversal<object, object>().Property(propertyTraversal); + } + /// <summary> /// Spawns a <see cref="GraphTraversal{SType, EType}" /> and adds the propertyMap step to that traversal. /// </summary> diff --git a/gremlin-dotnet/test/Gremlin.Net.IntegrationTest/Gherkin/Gremlin.cs b/gremlin-dotnet/test/Gremlin.Net.IntegrationTest/Gherkin/Gremlin.cs index 7588da5935..e349b0f622 100644 --- a/gremlin-dotnet/test/Gremlin.Net.IntegrationTest/Gherkin/Gremlin.cs +++ b/gremlin-dotnet/test/Gremlin.Net.IntegrationTest/Gherkin/Gremlin.cs @@ -535,7 +535,6 @@ namespace Gremlin.Net.IntegrationTest.Gherkin {"g_V_hasXname_VXvid1X_valuesXnameXX", new List<Func<GraphTraversalSource, IDictionary<string, object>, ITraversal>> {(g,p) =>g.V().Has("name", __.V(p["vid1"]).Values<object>("name"))}}, {"g_V_hasXname_VXvid1X_outXknowsX_valuesXnameXX", new List<Func<GraphTraversalSource, IDictionary<string, object>, ITraversal>> {(g,p) =>g.V().Has("name", __.V(p["vid1"]).Out("knows").Values<object>("name"))}}, {"g_V_hasXage_VXvid1X_outXknowsX_valuesXageXX", new List<Func<GraphTraversalSource, IDictionary<string, object>, ITraversal>> {(g,p) =>g.V().Has("age", __.V(p["vid1"]).Out("knows").Values<object>("age"))}}, - {"g_V_hasXname_VXvid1X_outXcreatedX_valuesXnameXX", new List<Func<GraphTraversalSource, IDictionary<string, object>, ITraversal>> {(g,p) =>g.V().Has("name", __.V(p["vid1"]).Out("created").Values<object>("name"))}}, {"g_V_hasXname_VXvid1X_valuesXnonexistentXX", new List<Func<GraphTraversalSource, IDictionary<string, object>, ITraversal>> {(g,p) =>g.V().Has("name", __.V(p["vid1"]).Values<object>("nonexistent"))}}, {"g_V_hasXname_notXidentityXX", new List<Func<GraphTraversalSource, IDictionary<string, object>, ITraversal>> {(g,p) =>g.V().Has("name", __.Not(__.Identity()))}}, {"g_V_hasXage_gtXVXvid1X_valuesXageXXX", new List<Func<GraphTraversalSource, IDictionary<string, object>, ITraversal>> {(g,p) =>g.V().Has("age", P.Gt(__.V(p["vid1"]).Values<object>("age")))}}, @@ -547,6 +546,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_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_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>()}}, @@ -558,6 +565,26 @@ namespace Gremlin.Net.IntegrationTest.Gherkin {"g_V_valuesXageX_isXgte_29vaarX_isXlt_34varX", new List<Func<GraphTraversalSource, IDictionary<string, object>, ITraversal>> {(g,p) =>g.V().Values<object>("age").Is(P.Gte(p["xx1"])).Is(P.Lt(p["xx2"]))}}, {"g_V_whereXinXcreatedX_count_isX1XX_valuesXnameX", new List<Func<GraphTraversalSource, IDictionary<string, object>, ITraversal>> {(g,p) =>g.V().Where(__.In("created").Count().Is(1)).Values<object>("name")}}, {"g_V_whereXinXcreatedX_count_isXgte_2XX_valuesXnameX", new List<Func<GraphTraversalSource, IDictionary<string, object>, ITraversal>> {(g,p) =>g.V().Where(__.In("created").Count().Is(P.Gte(2))).Values<object>("name")}}, + {"g_V_valuesXageX_isXVXvid1X_valuesXageXX", new List<Func<GraphTraversalSource, IDictionary<string, object>, ITraversal>> {(g,p) =>g.V().Values<object>("age").Is(__.V(p["vid1"]).Values<object>("age"))}}, + {"g_V_valuesXnameX_isXVXvid1X_valuesXnameXX", new List<Func<GraphTraversalSource, IDictionary<string, object>, ITraversal>> {(g,p) =>g.V().Values<object>("name").Is(__.V(p["vid1"]).Values<object>("name"))}}, + {"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_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"))}}, + {"g_VXvid1X_outXknowsX_valuesXageX_fold_allXgteXVXvid2X_valuesXageXXX", new List<Func<GraphTraversalSource, IDictionary<string, object>, ITraversal>> {(g,p) =>g.V(p["vid1"]).Out("knows").Values<object>("age").Fold().All(P.Gte(__.V(p["vid2"]).Values<object>("age")))}}, + {"g_VXvid1X_outXknowsX_valuesXageX_fold_allXgtXVXvid2X_valuesXageXXX", new List<Func<GraphTraversalSource, IDictionary<string, object>, ITraversal>> {(g,p) =>g.V(p["vid1"]).Out("knows").Values<object>("age").Fold().All(P.Gt(__.V(p["vid2"]).Values<object>("age")))}}, + {"g_VXvid1X_outXknowsX_valuesXageX_fold_anyXeqXVXvid3X_valuesXageXXX", new List<Func<GraphTraversalSource, IDictionary<string, object>, ITraversal>> {(g,p) =>g.V(p["vid1"]).Out("knows").Values<object>("age").Fold().Any(P.Eq(__.V(p["vid3"]).Values<object>("age")))}}, + {"g_VXvid1X_outXknowsX_valuesXageX_fold_noneXeqXVXvid4X_valuesXageXXX", new List<Func<GraphTraversalSource, IDictionary<string, object>, ITraversal>> {(g,p) =>g.V(p["vid1"]).Out("knows").Values<object>("age").Fold().None(P.Eq(__.V(p["vid4"]).Values<object>("age")))}}, + {"g_VXvid1X_outXknowsX_valuesXageX_fold_noneXeqXVXvid3X_valuesXageXXX", new List<Func<GraphTraversalSource, IDictionary<string, object>, ITraversal>> {(g,p) =>g.V(p["vid1"]).Out("knows").Values<object>("age").Fold().None(P.Eq(__.V(p["vid3"]).Values<object>("age")))}}, + {"g_injectXnullX_isXeqXV9999_valuesXnameXXX", new List<Func<GraphTraversalSource, IDictionary<string, object>, ITraversal>> {(g,p) =>g.Inject<object>(null).Is(P.Eq(__.V(9999).Values<object>("name")))}}, + {"g_injectXmarkoX_isXV9999_valuesXnameXX", new List<Func<GraphTraversalSource, IDictionary<string, object>, ITraversal>> {(g,p) =>g.Inject<object>("marko").Is(__.V(9999).Values<object>("name"))}}, + {"g_injectXmarkoX_chooseXeqXV9999_valuesXnameXX_matched_unmatchedX", new List<Func<GraphTraversalSource, IDictionary<string, object>, ITraversal>> {(g,p) =>g.Inject<object>("marko").Choose<object>(P.Eq(__.V(9999).Values<object>("name")), __.Constant<object>("matched"), __.Constant<object>("unmatched"))}}, + {"g_injectXlistX_noneXeqXV9999_valuesXnameXXX", new List<Func<GraphTraversalSource, IDictionary<string, object>, ITraversal>> {(g,p) =>g.Inject<object>(new List<object> { "marko", "josh" }).None(P.Eq(__.V(9999).Values<object>("name")))}}, + {"g_V_hasXname_eqXV9999_valuesXnameXXX", new List<Func<GraphTraversalSource, IDictionary<string, object>, ITraversal>> {(g,p) =>g.V().Has("name", P.Eq(__.V(9999).Values<object>("name")))}}, + {"g_V_valuesXageX_isXwithoutXVXvid1X_valuesXageX_VXvid2X_valuesXageXXX", new List<Func<GraphTraversalSource, IDictionary<string, object>, ITraversal>> {(g,p) =>g.V().Values<object>("age").Is(P.Without(__.V(p["vid1"]).Values<object>("age"), __.V(p["vid2"]).Values<object>("age")))}}, {"g_V_valuesXageX_noneXgtX32XX", new List<Func<GraphTraversalSource, IDictionary<string, object>, ITraversal>> {(g,p) =>g.V().Values<object>("age").None(P.Gt(32))}}, {"g_V_valuesXageX_whereXisXP_gtX33XXX_fold_noneXlteX33XX", new List<Func<GraphTraversalSource, IDictionary<string, object>, ITraversal>> {(g,p) =>g.V().Values<object>("age").Where(__.Is(P.Gt(33))).Fold().None(P.Lte(33))}}, {"g_V_valuesXageX_order_byXdescX_fold_noneXltX10XX", new List<Func<GraphTraversalSource, IDictionary<string, object>, ITraversal>> {(g,p) =>g.V().Values<object>("age").Order().By(Order.Desc).Fold().None(P.Lt(10))}}, @@ -1794,14 +1821,14 @@ namespace Gremlin.Net.IntegrationTest.Gherkin {"g_V_localXoutE_foldX_unfold", new List<Func<GraphTraversalSource, IDictionary<string, object>, ITraversal>> {(g,p) =>g.V().Local<object>(__.OutE().Fold()).Unfold<object>()}}, {"g_V_valueMap_unfold_mapXselectXkeysXX", new List<Func<GraphTraversalSource, IDictionary<string, object>, ITraversal>> {(g,p) =>g.V().ValueMap<object, object>().Unfold<object>().Map<object>(__.Select<object>(Column.Keys))}}, {"g_VX1X_repeatXboth_simplePathX_untilXhasIdX6XX_path_byXnameX_unfold", new List<Func<GraphTraversalSource, IDictionary<string, object>, ITraversal>> {(g,p) =>g.V(p["vid1"]).Repeat(__.Both().SimplePath()).Until(__.HasId(p["vid6"])).Path().By("name").Unfold<object>()}}, - {"g_VXvid1X_outXcreatedX_asXsoftwareX_V_hasXname_selectXsoftwareX_valuesXnameXX_inXcreatedX_name", new List<Func<GraphTraversalSource, IDictionary<string, object>, ITraversal>> {(g,p) =>g.V(p["vid1"]).Out("created").As("sw").V().Has("name", __.Select<object>("sw").Values<object>("name")).In("created").Values<object>("name")}}, + {"g_VXvid1X_id_VXidentityX_name", new List<Func<GraphTraversalSource, IDictionary<string, object>, ITraversal>> {(g,p) =>g.V(p["vid1"]).Id().V(__.Identity()).Values<object>("name")}}, + {"g_VXvid1_vid2X_id_VXidentityX_name", new List<Func<GraphTraversalSource, IDictionary<string, object>, ITraversal>> {(g,p) =>g.V(p["vid1"], p["vid2"]).Id().V(__.Identity()).Values<object>("name")}}, + {"g_VXvid1X_id_asXbookmarkX_V_hasXname_joshX_VXselectXbookmarkXX_name", new List<Func<GraphTraversalSource, IDictionary<string, object>, ITraversal>> {(g,p) =>g.V(p["vid1"]).Id().As("bookmark").V().Has("name", "josh").V(__.Select<object>("bookmark")).Values<object>("name")}}, {"g_VXvid1X_VXoutXknowsX_idX_name", new List<Func<GraphTraversalSource, IDictionary<string, object>, ITraversal>> {(g,p) =>g.V(p["vid1"]).V(__.Out("knows").Id()).Values<object>("name")}}, - {"g_VXvid1X_VXoutXknowsX_hasXname_joshX_idX_valuesXageX", new List<Func<GraphTraversalSource, IDictionary<string, object>, ITraversal>> {(g,p) =>g.V(p["vid1"]).V(__.Out("knows").Has("name", "josh").Id()).Values<object>("age")}}, - {"g_VXvid1X_VXoutXknowsX_outXknowsX_idX_name", new List<Func<GraphTraversalSource, IDictionary<string, object>, ITraversal>> {(g,p) =>g.V(p["vid1"]).V(__.Out("knows").Out("knows").Id()).Values<object>("name")}}, - {"g_VXvid1X_VXoutXcreatedX_idX_valuesXlangX", new List<Func<GraphTraversalSource, IDictionary<string, object>, ITraversal>> {(g,p) =>g.V(p["vid1"]).V(__.Out("created").Id()).Values<object>("lang")}}, {"g_VXvid1X_EXoutE_idX", new List<Func<GraphTraversalSource, IDictionary<string, object>, ITraversal>> {(g,p) =>g.V(p["vid1"]).E(__.OutE().Id())}}, - {"g_VXvid1X_EXoutEXknowsX_hasXweight_05X_idX", new List<Func<GraphTraversalSource, IDictionary<string, object>, ITraversal>> {(g,p) =>g.V(p["vid1"]).E(__.OutE("knows").Has("weight", 0.5d).Id())}}, - {"g_VXvid1X_EXoutXknowsX_outXknowsX_outE_idX", new List<Func<GraphTraversalSource, IDictionary<string, object>, ITraversal>> {(g,p) =>g.V(p["vid1"]).E(__.Out("knows").Out("knows").OutE().Id())}}, + {"g_injectX9999X_VXidentityX", new List<Func<GraphTraversalSource, IDictionary<string, object>, ITraversal>> {(g,p) =>g.Inject<object>(9999).V(__.Identity())}}, + {"g_VXvid1X_outEXknowsX_hasXinV_name_vadasX_id_EXidentityX", new List<Func<GraphTraversalSource, IDictionary<string, object>, ITraversal>> {(g,p) =>g.V(p["vid1"]).OutE("knows").Filter(__.InV().Has("name", "vadas")).Id().E(__.Identity())}}, + {"g_injectX9999X_EXidentityX", new List<Func<GraphTraversalSource, IDictionary<string, object>, ITraversal>> {(g,p) =>g.Inject<object>(9999).E(__.Identity())}}, {"g_VXVXvid1X_idX_name", new List<Func<GraphTraversalSource, IDictionary<string, object>, ITraversal>> {(g,p) =>g.V(__.V(p["vid1"]).Id()).Values<object>("name")}}, {"g_EXVXvid1X_outE_idX", new List<Func<GraphTraversalSource, IDictionary<string, object>, ITraversal>> {(g,p) =>g.E(__.V(p["vid1"]).OutE().Id())}}, {"g_V_valueMap", new List<Func<GraphTraversalSource, IDictionary<string, object>, ITraversal>> {(g,p) =>g.V().ValueMap<object, object>()}}, @@ -2125,17 +2152,16 @@ namespace Gremlin.Net.IntegrationTest.Gherkin {"g_injectX1_3_100_300X_list", new List<Func<GraphTraversalSource, IDictionary<string, object>, ITraversal>> {(g,p) =>g.Inject<object>(new List<object> { 1, 3, 100, 300 })}}, {"g_injectX1_3_100_300X_set", new List<Func<GraphTraversalSource, IDictionary<string, object>, ITraversal>> {(g,p) =>g.Inject<object>(new HashSet<object> { 1, 3, 100, 300 })}}, {"g_injectX1_1X_set", new List<Func<GraphTraversalSource, IDictionary<string, object>, ITraversal>> {(g,p) =>g.Inject<object>(new HashSet<object> { 1, 1 })}}, - {"g_VXvid2X_propertyXalias_VXvid1X_valuesXnameXX", new List<Func<GraphTraversalSource, IDictionary<string, object>, ITraversal>> {(g,p) =>g.V(p["vid2"]).Property("alias", __.V(p["vid1"]).Values<object>("name")), (g,p) =>g.V().Has("alias", "marko")}}, - {"g_VXvid1X_propertyXcreatorCount_VXvid1X_inXcreatedX_countX", new List<Func<GraphTraversalSource, IDictionary<string, object>, ITraversal>> {(g,p) =>g.V(p["vid1"]).Property("creatorCount", __.V(p["vid1"]).In("created").Count()), (g,p) =>g.V().Has("creatorCount", 3l)}}, - {"g_VXvid1X_propertyXknownCount_outXknowsX_countX", new List<Func<GraphTraversalSource, IDictionary<string, object>, ITraversal>> {(g,p) =>g.V(p["vid1"]).Property("knownCount", __.Out("knows").Count()), (g,p) =>g.V().Has("knownCount", 2l)}}, - {"g_VXvid1X_propertyXcreator_inXcreatedX_valuesXnameXX", new List<Func<GraphTraversalSource, IDictionary<string, object>, ITraversal>> {(g,p) =>g.V(p["vid1"]).Property("creator", __.In("created").Values<object>("name")), (g,p) =>g.V().Has("creator")}}, - {"g_VXvid2X_propertyXVXvid1X_projectXfriendCount_softwareCreatedXX", new List<Func<GraphTraversalSource, IDictionary<string, object>, ITraversal>> {(g,p) =>g.V(p["vid2"]).Property(__.V(p["vid1"]).Project<object>("friendCount", "softwareCreated").By(__.Out("knows").Count()).By(__.Out("created").Values<object>("name"))), (g,p) =>g.V().Has("friendCount", 2l), (g,p) =>g.V().Has("softwareCreated", "lop")}}, - {"g_VXvid2X_propertyXVXvid1X_projectXoriginalName_originalLabelX_byXnameX_byXlabelXX", new List<Func<GraphTraversalSource, IDictionary<string, object>, ITraversal>> {(g,p) =>g.V(p["vid2"]).Property(__.V(p["vid1"]).Project<object>("originalName", "originalLabel").By(__.Values<object>("name")).By(__.Label())), (g,p) =>g.V(p["vid2"]).Has("originalName", "marko"), (g,p) =>g.V(p["vid2"]).Has("originalLabel", "person")}}, - {"g_VXvid1X_propertyXlist_friends_outXknowsX_valuesXnameXX", new List<Func<GraphTraversalSource, IDictionary<string, object>, ITraversal>> {(g,p) =>g.V(p["vid1"]).Property(Cardinality.List, "friends", __.Out("knows").Values<object>("name")), (g,p) =>g.V(p["vid1"]).Properties<object>("friends")}}, - {"g_VXvid1X_propertyXlist_creators_inXcreatedX_valuesXnameXX", new List<Func<GraphTraversalSource, IDictionary<string, object>, ITraversal>> {(g,p) =>g.V(p["vid1"]).Property(Cardinality.List, "creators", __.In("created").Values<object>("name")), (g,p) =>g.V(p["vid1"]).Properties<object>("creators")}}, - {"g_VXvid1X_propertyXset_langs_outXcreatedX_valuesXlangXX", new List<Func<GraphTraversalSource, IDictionary<string, object>, ITraversal>> {(g,p) =>g.V(p["vid1"]).Property(Cardinality.Set, "langs", __.Out("created").Values<object>("lang")), (g,p) =>g.V(p["vid1"]).Properties<object>("langs")}}, - {"g_VXvid1X_propertyXsingle_friend_outXknowsX_valuesXnameXX", new List<Func<GraphTraversalSource, IDictionary<string, object>, ITraversal>> {(g,p) =>g.V(p["vid1"]).Property(Cardinality.Single, "friend", __.Out("knows").Values<object>("name"))}}, - {"g_VXvid1X_propertyXVXvid1X_groupX_byXidX_byXvaluesXnameXXX", new List<Func<GraphTraversalSource, IDictionary<string, object>, ITraversal>> {(g,p) =>g.V(p["vid1"]).Property(__.V(p["vid1"]).Group<object, object>().By(__.Id()).By(__.Values<object>("name")))}}, + {"g_VXvid2X_propertyXalias_VXvid1X_valuesXnameXX", new List<Func<GraphTraversalSource, IDictionary<string, object>, ITraversal>> {(g,p) =>g.AddV((string) "person").Property("name", "marko").Property("age", 29).AddV((string) "person").Property("name", "vadas").Property("age", 27).AddV((string) "software").Property("name", "lop").Property("lang", "java").AddV((string) "person").Property("name", "josh").Property("age", 32).AddV((string) "person").Property("name", "peter").Pro [...] + {"g_VXvid1X_propertyXcreatorCount_VXvid1X_inXcreatedX_countX", new List<Func<GraphTraversalSource, IDictionary<string, object>, ITraversal>> {(g,p) =>g.AddV((string) "person").Property("name", "marko").Property("age", 29).As("marko").AddV((string) "person").Property("name", "vadas").Property("age", 27).AddV((string) "software").Property("name", "lop").Property("lang", "java").As("lop").AddV((string) "person").Property("name", "josh").Property("age", 32).As("josh").AddV((st [...] + {"g_VXvid1X_propertyXknownCount_outXknowsX_countX", new List<Func<GraphTraversalSource, IDictionary<string, object>, ITraversal>> {(g,p) =>g.AddV((string) "person").Property("name", "marko").Property("age", 29).As("marko").AddV((string) "person").Property("name", "vadas").Property("age", 27).As("vadas").AddV((string) "software").Property("name", "lop").Property("lang", "java").AddV((string) "person").Property("name", "josh").Property("age", 32).As("josh").AddV((string) "pe [...] + {"g_VXvid1X_propertyXcreator_inXcreatedX_valuesXnameXX", new List<Func<GraphTraversalSource, IDictionary<string, object>, ITraversal>> {(g,p) =>g.AddV((string) "person").Property("name", "marko").Property("age", 29).As("marko").AddV((string) "person").Property("name", "vadas").Property("age", 27).AddV((string) "software").Property("name", "lop").Property("lang", "java").As("lop").AddV((string) "person").Property("name", "josh").Property("age", 32).As("josh").AddV((string) [...] + {"g_VXvid2X_propertyXVXvid1X_projectXfriendCount_softwareCreatedXX", new List<Func<GraphTraversalSource, IDictionary<string, object>, ITraversal>> {(g,p) =>g.AddV((string) "person").Property("name", "marko").Property("age", 29).As("marko").AddV((string) "person").Property("name", "vadas").Property("age", 27).As("vadas").AddV((string) "software").Property("name", "lop").Property("lang", "java").As("lop").AddV((string) "person").Property("name", "josh").Property("age", 32).A [...] + {"g_VXvid2X_propertyXVXvid1X_projectXoriginalName_originalLabelX_byXnameX_byXlabelXX", new List<Func<GraphTraversalSource, IDictionary<string, object>, ITraversal>> {(g,p) =>g.AddV((string) "person").Property("name", "marko").Property("age", 29).As("marko").AddV((string) "person").Property("name", "vadas").Property("age", 27).AddV((string) "software").Property("name", "lop").Property("lang", "java").As("lop").AddV((string) "person").Property("name", "josh").Property("age", [...] + {"g_VXvid1X_propertyXlist_friends_outXknowsX_valuesXnameXX", new List<Func<GraphTraversalSource, IDictionary<string, object>, ITraversal>> {(g,p) =>g.AddV((string) "person").Property("name", "marko").Property("age", 29).As("marko").AddV((string) "person").Property("name", "vadas").Property("age", 27).As("vadas").AddV((string) "software").Property("name", "lop").Property("lang", "java").AddV((string) "person").Property("name", "josh").Property("age", 32).As("josh").AddV((st [...] + {"g_VXvid1X_propertyXset_langs_outXcreatedX_valuesXlangXX", new List<Func<GraphTraversalSource, IDictionary<string, object>, ITraversal>> {(g,p) =>g.AddV((string) "person").Property("name", "marko").Property("age", 29).AddV((string) "person").Property("name", "vadas").Property("age", 27).AddV((string) "software").Property("name", "lop").Property("lang", "java").As("lop").AddV((string) "person").Property("name", "josh").Property("age", 32).As("josh").AddV((string) "person") [...] + {"g_VXvid1X_propertyXsingle_friend_outXknowsX_valuesXnameXX", new List<Func<GraphTraversalSource, IDictionary<string, object>, ITraversal>> {(g,p) =>g.AddV((string) "person").Property("name", "marko").Property("age", 29).As("marko").AddV((string) "person").Property("name", "vadas").Property("age", 27).As("vadas").AddV((string) "software").Property("name", "lop").Property("lang", "java").AddV((string) "person").Property("name", "josh").Property("age", 32).As("josh").AddV((s [...] + {"g_VXvid1X_propertyXVXvid1X_groupX_byXidX_byXvaluesXnameXXX", new List<Func<GraphTraversalSource, IDictionary<string, object>, ITraversal>> {(g,p) =>g.AddV((string) "person").Property("name", "marko").Property("age", 29), (g,p) =>g.V(p["vid1"]).Property((ITraversal) __.V(p["vid1"]).Group<object, object>().By(__.Id()).By(__.Values<object>("name")))}}, {"g_io_readXkryoX", new List<Func<GraphTraversalSource, IDictionary<string, object>, ITraversal>> {(g,p) =>g.Io<object>("data/tinkerpop-modern.kryo").Read(), (g,p) =>g.V(), (g,p) =>g.E()}}, {"g_io_read_withXreader_gryoX", new List<Func<GraphTraversalSource, IDictionary<string, object>, ITraversal>> {(g,p) =>g.Io<object>("data/tinkerpop-modern.kryo").With(IO.Reader, IO.Gryo).Read(), (g,p) =>g.V(), (g,p) =>g.E()}}, {"g_io_readXgraphsonX", new List<Func<GraphTraversalSource, IDictionary<string, object>, ITraversal>> {(g,p) =>g.Io<object>("data/tinkerpop-modern.json").Read(), (g,p) =>g.V(), (g,p) =>g.E()}}, diff --git a/gremlin-go/driver/cucumber/gremlin.go b/gremlin-go/driver/cucumber/gremlin.go index 72df59267e..1ff3d19a48 100644 --- a/gremlin-go/driver/cucumber/gremlin.go +++ b/gremlin-go/driver/cucumber/gremlin.go @@ -505,7 +505,6 @@ var translationMap = map[string][]func(g *gremlingo.GraphTraversalSource, p map[ "g_V_hasXname_VXvid1X_valuesXnameXX": {func(g *gremlingo.GraphTraversalSource, p map[string]interface{}) *gremlingo.GraphTraversal {return g.V().Has("name", gremlingo.T__.V(p["vid1"]).Values("name"))}}, "g_V_hasXname_VXvid1X_outXknowsX_valuesXnameXX": {func(g *gremlingo.GraphTraversalSource, p map[string]interface{}) *gremlingo.GraphTraversal {return g.V().Has("name", gremlingo.T__.V(p["vid1"]).Out("knows").Values("name"))}}, "g_V_hasXage_VXvid1X_outXknowsX_valuesXageXX": {func(g *gremlingo.GraphTraversalSource, p map[string]interface{}) *gremlingo.GraphTraversal {return g.V().Has("age", gremlingo.T__.V(p["vid1"]).Out("knows").Values("age"))}}, - "g_V_hasXname_VXvid1X_outXcreatedX_valuesXnameXX": {func(g *gremlingo.GraphTraversalSource, p map[string]interface{}) *gremlingo.GraphTraversal {return g.V().Has("name", gremlingo.T__.V(p["vid1"]).Out("created").Values("name"))}}, "g_V_hasXname_VXvid1X_valuesXnonexistentXX": {func(g *gremlingo.GraphTraversalSource, p map[string]interface{}) *gremlingo.GraphTraversal {return g.V().Has("name", gremlingo.T__.V(p["vid1"]).Values("nonexistent"))}}, "g_V_hasXname_notXidentityXX": {func(g *gremlingo.GraphTraversalSource, p map[string]interface{}) *gremlingo.GraphTraversal {return g.V().Has("name", gremlingo.T__.Not(gremlingo.T__.Identity()))}}, "g_V_hasXage_gtXVXvid1X_valuesXageXXX": {func(g *gremlingo.GraphTraversalSource, p map[string]interface{}) *gremlingo.GraphTraversal {return g.V().Has("age", gremlingo.P.Gt(gremlingo.T__.V(p["vid1"]).Values("age")))}}, @@ -517,6 +516,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_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_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()}}, @@ -528,6 +535,26 @@ var translationMap = map[string][]func(g *gremlingo.GraphTraversalSource, p map[ "g_V_valuesXageX_isXgte_29vaarX_isXlt_34varX": {func(g *gremlingo.GraphTraversalSource, p map[string]interface{}) *gremlingo.GraphTraversal {return g.V().Values("age").Is(gremlingo.P.Gte(p["xx1"])).Is(gremlingo.P.Lt(p["xx2"]))}}, "g_V_whereXinXcreatedX_count_isX1XX_valuesXnameX": {func(g *gremlingo.GraphTraversalSource, p map[string]interface{}) *gremlingo.GraphTraversal {return g.V().Where(gremlingo.T__.In("created").Count().Is(1)).Values("name")}}, "g_V_whereXinXcreatedX_count_isXgte_2XX_valuesXnameX": {func(g *gremlingo.GraphTraversalSource, p map[string]interface{}) *gremlingo.GraphTraversal {return g.V().Where(gremlingo.T__.In("created").Count().Is(gremlingo.P.Gte(2))).Values("name")}}, + "g_V_valuesXageX_isXVXvid1X_valuesXageXX": {func(g *gremlingo.GraphTraversalSource, p map[string]interface{}) *gremlingo.GraphTraversal {return g.V().Values("age").Is(gremlingo.T__.V(p["vid1"]).Values("age"))}}, + "g_V_valuesXnameX_isXVXvid1X_valuesXnameXX": {func(g *gremlingo.GraphTraversalSource, p map[string]interface{}) *gremlingo.GraphTraversal {return g.V().Values("name").Is(gremlingo.T__.V(p["vid1"]).Values("name"))}}, + "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_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"))}}, + "g_VXvid1X_outXknowsX_valuesXageX_fold_allXgteXVXvid2X_valuesXageXXX": {func(g *gremlingo.GraphTraversalSource, p map[string]interface{}) *gremlingo.GraphTraversal {return g.V(p["vid1"]).Out("knows").Values("age").Fold().All(gremlingo.P.Gte(gremlingo.T__.V(p["vid2"]).Values("age")))}}, + "g_VXvid1X_outXknowsX_valuesXageX_fold_allXgtXVXvid2X_valuesXageXXX": {func(g *gremlingo.GraphTraversalSource, p map[string]interface{}) *gremlingo.GraphTraversal {return g.V(p["vid1"]).Out("knows").Values("age").Fold().All(gremlingo.P.Gt(gremlingo.T__.V(p["vid2"]).Values("age")))}}, + "g_VXvid1X_outXknowsX_valuesXageX_fold_anyXeqXVXvid3X_valuesXageXXX": {func(g *gremlingo.GraphTraversalSource, p map[string]interface{}) *gremlingo.GraphTraversal {return g.V(p["vid1"]).Out("knows").Values("age").Fold().Any(gremlingo.P.Eq(gremlingo.T__.V(p["vid3"]).Values("age")))}}, + "g_VXvid1X_outXknowsX_valuesXageX_fold_noneXeqXVXvid4X_valuesXageXXX": {func(g *gremlingo.GraphTraversalSource, p map[string]interface{}) *gremlingo.GraphTraversal {return g.V(p["vid1"]).Out("knows").Values("age").Fold().None(gremlingo.P.Eq(gremlingo.T__.V(p["vid4"]).Values("age")))}}, + "g_VXvid1X_outXknowsX_valuesXageX_fold_noneXeqXVXvid3X_valuesXageXXX": {func(g *gremlingo.GraphTraversalSource, p map[string]interface{}) *gremlingo.GraphTraversal {return g.V(p["vid1"]).Out("knows").Values("age").Fold().None(gremlingo.P.Eq(gremlingo.T__.V(p["vid3"]).Values("age")))}}, + "g_injectXnullX_isXeqXV9999_valuesXnameXXX": {func(g *gremlingo.GraphTraversalSource, p map[string]interface{}) *gremlingo.GraphTraversal {return g.Inject(nil).Is(gremlingo.P.Eq(gremlingo.T__.V(9999).Values("name")))}}, + "g_injectXmarkoX_isXV9999_valuesXnameXX": {func(g *gremlingo.GraphTraversalSource, p map[string]interface{}) *gremlingo.GraphTraversal {return g.Inject("marko").Is(gremlingo.T__.V(9999).Values("name"))}}, + "g_injectXmarkoX_chooseXeqXV9999_valuesXnameXX_matched_unmatchedX": {func(g *gremlingo.GraphTraversalSource, p map[string]interface{}) *gremlingo.GraphTraversal {return g.Inject("marko").Choose(gremlingo.P.Eq(gremlingo.T__.V(9999).Values("name")), gremlingo.T__.Constant("matched"), gremlingo.T__.Constant("unmatched"))}}, + "g_injectXlistX_noneXeqXV9999_valuesXnameXXX": {func(g *gremlingo.GraphTraversalSource, p map[string]interface{}) *gremlingo.GraphTraversal {return g.Inject([]interface{}{"marko", "josh"}).None(gremlingo.P.Eq(gremlingo.T__.V(9999).Values("name")))}}, + "g_V_hasXname_eqXV9999_valuesXnameXXX": {func(g *gremlingo.GraphTraversalSource, p map[string]interface{}) *gremlingo.GraphTraversal {return g.V().Has("name", gremlingo.P.Eq(gremlingo.T__.V(9999).Values("name")))}}, + "g_V_valuesXageX_isXwithoutXVXvid1X_valuesXageX_VXvid2X_valuesXageXXX": {func(g *gremlingo.GraphTraversalSource, p map[string]interface{}) *gremlingo.GraphTraversal {return g.V().Values("age").Is(gremlingo.P.Without(gremlingo.T__.V(p["vid1"]).Values("age"), gremlingo.T__.V(p["vid2"]).Values("age")))}}, "g_V_valuesXageX_noneXgtX32XX": {func(g *gremlingo.GraphTraversalSource, p map[string]interface{}) *gremlingo.GraphTraversal {return g.V().Values("age").None(gremlingo.P.Gt(32))}}, "g_V_valuesXageX_whereXisXP_gtX33XXX_fold_noneXlteX33XX": {func(g *gremlingo.GraphTraversalSource, p map[string]interface{}) *gremlingo.GraphTraversal {return g.V().Values("age").Where(gremlingo.T__.Is(gremlingo.P.Gt(33))).Fold().None(gremlingo.P.Lte(33))}}, "g_V_valuesXageX_order_byXdescX_fold_noneXltX10XX": {func(g *gremlingo.GraphTraversalSource, p map[string]interface{}) *gremlingo.GraphTraversal {return g.V().Values("age").Order().By(gremlingo.Order.Desc).Fold().None(gremlingo.P.Lt(10))}}, @@ -1764,14 +1791,14 @@ var translationMap = map[string][]func(g *gremlingo.GraphTraversalSource, p map[ "g_V_localXoutE_foldX_unfold": {func(g *gremlingo.GraphTraversalSource, p map[string]interface{}) *gremlingo.GraphTraversal {return g.V().Local(gremlingo.T__.OutE().Fold()).Unfold()}}, "g_V_valueMap_unfold_mapXselectXkeysXX": {func(g *gremlingo.GraphTraversalSource, p map[string]interface{}) *gremlingo.GraphTraversal {return g.V().ValueMap().Unfold().Map(gremlingo.T__.Select(gremlingo.Column.Keys))}}, "g_VX1X_repeatXboth_simplePathX_untilXhasIdX6XX_path_byXnameX_unfold": {func(g *gremlingo.GraphTraversalSource, p map[string]interface{}) *gremlingo.GraphTraversal {return g.V(p["vid1"]).Repeat(gremlingo.T__.Both().SimplePath()).Until(gremlingo.T__.HasId(p["vid6"])).Path().By("name").Unfold()}}, - "g_VXvid1X_outXcreatedX_asXsoftwareX_V_hasXname_selectXsoftwareX_valuesXnameXX_inXcreatedX_name": {func(g *gremlingo.GraphTraversalSource, p map[string]interface{}) *gremlingo.GraphTraversal {return g.V(p["vid1"]).Out("created").As("sw").V().Has("name", gremlingo.T__.Select("sw").Values("name")).In("created").Values("name")}}, + "g_VXvid1X_id_VXidentityX_name": {func(g *gremlingo.GraphTraversalSource, p map[string]interface{}) *gremlingo.GraphTraversal {return g.V(p["vid1"]).Id().V(gremlingo.T__.Identity()).Values("name")}}, + "g_VXvid1_vid2X_id_VXidentityX_name": {func(g *gremlingo.GraphTraversalSource, p map[string]interface{}) *gremlingo.GraphTraversal {return g.V(p["vid1"], p["vid2"]).Id().V(gremlingo.T__.Identity()).Values("name")}}, + "g_VXvid1X_id_asXbookmarkX_V_hasXname_joshX_VXselectXbookmarkXX_name": {func(g *gremlingo.GraphTraversalSource, p map[string]interface{}) *gremlingo.GraphTraversal {return g.V(p["vid1"]).Id().As("bookmark").V().Has("name", "josh").V(gremlingo.T__.Select("bookmark")).Values("name")}}, "g_VXvid1X_VXoutXknowsX_idX_name": {func(g *gremlingo.GraphTraversalSource, p map[string]interface{}) *gremlingo.GraphTraversal {return g.V(p["vid1"]).V(gremlingo.T__.Out("knows").Id()).Values("name")}}, - "g_VXvid1X_VXoutXknowsX_hasXname_joshX_idX_valuesXageX": {func(g *gremlingo.GraphTraversalSource, p map[string]interface{}) *gremlingo.GraphTraversal {return g.V(p["vid1"]).V(gremlingo.T__.Out("knows").Has("name", "josh").Id()).Values("age")}}, - "g_VXvid1X_VXoutXknowsX_outXknowsX_idX_name": {func(g *gremlingo.GraphTraversalSource, p map[string]interface{}) *gremlingo.GraphTraversal {return g.V(p["vid1"]).V(gremlingo.T__.Out("knows").Out("knows").Id()).Values("name")}}, - "g_VXvid1X_VXoutXcreatedX_idX_valuesXlangX": {func(g *gremlingo.GraphTraversalSource, p map[string]interface{}) *gremlingo.GraphTraversal {return g.V(p["vid1"]).V(gremlingo.T__.Out("created").Id()).Values("lang")}}, "g_VXvid1X_EXoutE_idX": {func(g *gremlingo.GraphTraversalSource, p map[string]interface{}) *gremlingo.GraphTraversal {return g.V(p["vid1"]).E(gremlingo.T__.OutE().Id())}}, - "g_VXvid1X_EXoutEXknowsX_hasXweight_05X_idX": {func(g *gremlingo.GraphTraversalSource, p map[string]interface{}) *gremlingo.GraphTraversal {return g.V(p["vid1"]).E(gremlingo.T__.OutE("knows").Has("weight", 0.5).Id())}}, - "g_VXvid1X_EXoutXknowsX_outXknowsX_outE_idX": {func(g *gremlingo.GraphTraversalSource, p map[string]interface{}) *gremlingo.GraphTraversal {return g.V(p["vid1"]).E(gremlingo.T__.Out("knows").Out("knows").OutE().Id())}}, + "g_injectX9999X_VXidentityX": {func(g *gremlingo.GraphTraversalSource, p map[string]interface{}) *gremlingo.GraphTraversal {return g.Inject(9999).V(gremlingo.T__.Identity())}}, + "g_VXvid1X_outEXknowsX_hasXinV_name_vadasX_id_EXidentityX": {func(g *gremlingo.GraphTraversalSource, p map[string]interface{}) *gremlingo.GraphTraversal {return g.V(p["vid1"]).OutE("knows").Filter(gremlingo.T__.InV().Has("name", "vadas")).Id().E(gremlingo.T__.Identity())}}, + "g_injectX9999X_EXidentityX": {func(g *gremlingo.GraphTraversalSource, p map[string]interface{}) *gremlingo.GraphTraversal {return g.Inject(9999).E(gremlingo.T__.Identity())}}, "g_VXVXvid1X_idX_name": {func(g *gremlingo.GraphTraversalSource, p map[string]interface{}) *gremlingo.GraphTraversal {return g.V(gremlingo.T__.V(p["vid1"]).Id()).Values("name")}}, "g_EXVXvid1X_outE_idX": {func(g *gremlingo.GraphTraversalSource, p map[string]interface{}) *gremlingo.GraphTraversal {return g.E(gremlingo.T__.V(p["vid1"]).OutE().Id())}}, "g_V_valueMap": {func(g *gremlingo.GraphTraversalSource, p map[string]interface{}) *gremlingo.GraphTraversal {return g.V().ValueMap()}}, @@ -2095,17 +2122,16 @@ var translationMap = map[string][]func(g *gremlingo.GraphTraversalSource, p map[ "g_injectX1_3_100_300X_list": {func(g *gremlingo.GraphTraversalSource, p map[string]interface{}) *gremlingo.GraphTraversal {return g.Inject([]interface{}{1, 3, 100, 300})}}, "g_injectX1_3_100_300X_set": {func(g *gremlingo.GraphTraversalSource, p map[string]interface{}) *gremlingo.GraphTraversal {return g.Inject(gremlingo.NewSimpleSet(1, 3, 100, 300))}}, "g_injectX1_1X_set": {func(g *gremlingo.GraphTraversalSource, p map[string]interface{}) *gremlingo.GraphTraversal {return g.Inject(gremlingo.NewSimpleSet(1, 1))}}, - "g_VXvid2X_propertyXalias_VXvid1X_valuesXnameXX": {func(g *gremlingo.GraphTraversalSource, p map[string]interface{}) *gremlingo.GraphTraversal {return g.V(p["vid2"]).Property("alias", gremlingo.T__.V(p["vid1"]).Values("name"))}, func(g *gremlingo.GraphTraversalSource, p map[string]interface{}) *gremlingo.GraphTraversal {return g.V().Has("alias", "marko")}}, - "g_VXvid1X_propertyXcreatorCount_VXvid1X_inXcreatedX_countX": {func(g *gremlingo.GraphTraversalSource, p map[string]interface{}) *gremlingo.GraphTraversal {return g.V(p["vid1"]).Property("creatorCount", gremlingo.T__.V(p["vid1"]).In("created").Count())}, func(g *gremlingo.GraphTraversalSource, p map[string]interface{}) *gremlingo.GraphTraversal {return g.V().Has("creatorCount", int64(3))}}, - "g_VXvid1X_propertyXknownCount_outXknowsX_countX": {func(g *gremlingo.GraphTraversalSource, p map[string]interface{}) *gremlingo.GraphTraversal {return g.V(p["vid1"]).Property("knownCount", gremlingo.T__.Out("knows").Count())}, func(g *gremlingo.GraphTraversalSource, p map[string]interface{}) *gremlingo.GraphTraversal {return g.V().Has("knownCount", int64(2))}}, - "g_VXvid1X_propertyXcreator_inXcreatedX_valuesXnameXX": {func(g *gremlingo.GraphTraversalSource, p map[string]interface{}) *gremlingo.GraphTraversal {return g.V(p["vid1"]).Property("creator", gremlingo.T__.In("created").Values("name"))}, func(g *gremlingo.GraphTraversalSource, p map[string]interface{}) *gremlingo.GraphTraversal {return g.V().Has("creator")}}, - "g_VXvid2X_propertyXVXvid1X_projectXfriendCount_softwareCreatedXX": {func(g *gremlingo.GraphTraversalSource, p map[string]interface{}) *gremlingo.GraphTraversal {return g.V(p["vid2"]).Property(gremlingo.T__.V(p["vid1"]).Project("friendCount", "softwareCreated").By(gremlingo.T__.Out("knows").Count()).By(gremlingo.T__.Out("created").Values("name")))}, func(g *gremlingo.GraphTraversalSource, p map[string]interface{}) *gremlingo.GraphTraversal {return g.V().Has("friendCount", int64(2))}, [...] - "g_VXvid2X_propertyXVXvid1X_projectXoriginalName_originalLabelX_byXnameX_byXlabelXX": {func(g *gremlingo.GraphTraversalSource, p map[string]interface{}) *gremlingo.GraphTraversal {return g.V(p["vid2"]).Property(gremlingo.T__.V(p["vid1"]).Project("originalName", "originalLabel").By(gremlingo.T__.Values("name")).By(gremlingo.T__.Label()))}, func(g *gremlingo.GraphTraversalSource, p map[string]interface{}) *gremlingo.GraphTraversal {return g.V(p["vid2"]).Has("originalName", "marko")}, f [...] - "g_VXvid1X_propertyXlist_friends_outXknowsX_valuesXnameXX": {func(g *gremlingo.GraphTraversalSource, p map[string]interface{}) *gremlingo.GraphTraversal {return g.V(p["vid1"]).Property(gremlingo.Cardinality.List, "friends", gremlingo.T__.Out("knows").Values("name"))}, func(g *gremlingo.GraphTraversalSource, p map[string]interface{}) *gremlingo.GraphTraversal {return g.V(p["vid1"]).Properties("friends")}}, - "g_VXvid1X_propertyXlist_creators_inXcreatedX_valuesXnameXX": {func(g *gremlingo.GraphTraversalSource, p map[string]interface{}) *gremlingo.GraphTraversal {return g.V(p["vid1"]).Property(gremlingo.Cardinality.List, "creators", gremlingo.T__.In("created").Values("name"))}, func(g *gremlingo.GraphTraversalSource, p map[string]interface{}) *gremlingo.GraphTraversal {return g.V(p["vid1"]).Properties("creators")}}, - "g_VXvid1X_propertyXset_langs_outXcreatedX_valuesXlangXX": {func(g *gremlingo.GraphTraversalSource, p map[string]interface{}) *gremlingo.GraphTraversal {return g.V(p["vid1"]).Property(gremlingo.Cardinality.Set, "langs", gremlingo.T__.Out("created").Values("lang"))}, func(g *gremlingo.GraphTraversalSource, p map[string]interface{}) *gremlingo.GraphTraversal {return g.V(p["vid1"]).Properties("langs")}}, - "g_VXvid1X_propertyXsingle_friend_outXknowsX_valuesXnameXX": {func(g *gremlingo.GraphTraversalSource, p map[string]interface{}) *gremlingo.GraphTraversal {return g.V(p["vid1"]).Property(gremlingo.Cardinality.Single, "friend", gremlingo.T__.Out("knows").Values("name"))}}, - "g_VXvid1X_propertyXVXvid1X_groupX_byXidX_byXvaluesXnameXXX": {func(g *gremlingo.GraphTraversalSource, p map[string]interface{}) *gremlingo.GraphTraversal {return g.V(p["vid1"]).Property(gremlingo.T__.V(p["vid1"]).Group().By(gremlingo.T__.Id()).By(gremlingo.T__.Values("name")))}}, + "g_VXvid2X_propertyXalias_VXvid1X_valuesXnameXX": {func(g *gremlingo.GraphTraversalSource, p map[string]interface{}) *gremlingo.GraphTraversal {return g.AddV("person").Property("name", "marko").Property("age", 29).AddV("person").Property("name", "vadas").Property("age", 27).AddV("software").Property("name", "lop").Property("lang", "java").AddV("person").Property("name", "josh").Property("age", 32).AddV("person").Property("name", "peter").Property("age", 35).AddV("software").Property( [...] + "g_VXvid1X_propertyXcreatorCount_VXvid1X_inXcreatedX_countX": {func(g *gremlingo.GraphTraversalSource, p map[string]interface{}) *gremlingo.GraphTraversal {return g.AddV("person").Property("name", "marko").Property("age", 29).As("marko").AddV("person").Property("name", "vadas").Property("age", 27).AddV("software").Property("name", "lop").Property("lang", "java").As("lop").AddV("person").Property("name", "josh").Property("age", 32).As("josh").AddV("person").Property("name", "peter").P [...] + "g_VXvid1X_propertyXknownCount_outXknowsX_countX": {func(g *gremlingo.GraphTraversalSource, p map[string]interface{}) *gremlingo.GraphTraversal {return g.AddV("person").Property("name", "marko").Property("age", 29).As("marko").AddV("person").Property("name", "vadas").Property("age", 27).As("vadas").AddV("software").Property("name", "lop").Property("lang", "java").AddV("person").Property("name", "josh").Property("age", 32).As("josh").AddV("person").Property("name", "peter").Property(" [...] + "g_VXvid1X_propertyXcreator_inXcreatedX_valuesXnameXX": {func(g *gremlingo.GraphTraversalSource, p map[string]interface{}) *gremlingo.GraphTraversal {return g.AddV("person").Property("name", "marko").Property("age", 29).As("marko").AddV("person").Property("name", "vadas").Property("age", 27).AddV("software").Property("name", "lop").Property("lang", "java").As("lop").AddV("person").Property("name", "josh").Property("age", 32).As("josh").AddV("person").Property("name", "peter").Propert [...] + "g_VXvid2X_propertyXVXvid1X_projectXfriendCount_softwareCreatedXX": {func(g *gremlingo.GraphTraversalSource, p map[string]interface{}) *gremlingo.GraphTraversal {return g.AddV("person").Property("name", "marko").Property("age", 29).As("marko").AddV("person").Property("name", "vadas").Property("age", 27).As("vadas").AddV("software").Property("name", "lop").Property("lang", "java").As("lop").AddV("person").Property("name", "josh").Property("age", 32).As("josh").AddV("person").Property( [...] + "g_VXvid2X_propertyXVXvid1X_projectXoriginalName_originalLabelX_byXnameX_byXlabelXX": {func(g *gremlingo.GraphTraversalSource, p map[string]interface{}) *gremlingo.GraphTraversal {return g.AddV("person").Property("name", "marko").Property("age", 29).As("marko").AddV("person").Property("name", "vadas").Property("age", 27).AddV("software").Property("name", "lop").Property("lang", "java").As("lop").AddV("person").Property("name", "josh").Property("age", 32).AddV("person").Property("name [...] + "g_VXvid1X_propertyXlist_friends_outXknowsX_valuesXnameXX": {func(g *gremlingo.GraphTraversalSource, p map[string]interface{}) *gremlingo.GraphTraversal {return g.AddV("person").Property("name", "marko").Property("age", 29).As("marko").AddV("person").Property("name", "vadas").Property("age", 27).As("vadas").AddV("software").Property("name", "lop").Property("lang", "java").AddV("person").Property("name", "josh").Property("age", 32).As("josh").AddV("person").Property("name", "peter").P [...] + "g_VXvid1X_propertyXset_langs_outXcreatedX_valuesXlangXX": {func(g *gremlingo.GraphTraversalSource, p map[string]interface{}) *gremlingo.GraphTraversal {return g.AddV("person").Property("name", "marko").Property("age", 29).AddV("person").Property("name", "vadas").Property("age", 27).AddV("software").Property("name", "lop").Property("lang", "java").As("lop").AddV("person").Property("name", "josh").Property("age", 32).As("josh").AddV("person").Property("name", "peter").Property("age", [...] + "g_VXvid1X_propertyXsingle_friend_outXknowsX_valuesXnameXX": {func(g *gremlingo.GraphTraversalSource, p map[string]interface{}) *gremlingo.GraphTraversal {return g.AddV("person").Property("name", "marko").Property("age", 29).As("marko").AddV("person").Property("name", "vadas").Property("age", 27).As("vadas").AddV("software").Property("name", "lop").Property("lang", "java").AddV("person").Property("name", "josh").Property("age", 32).As("josh").AddV("person").Property("name", "peter"). [...] + "g_VXvid1X_propertyXVXvid1X_groupX_byXidX_byXvaluesXnameXXX": {func(g *gremlingo.GraphTraversalSource, p map[string]interface{}) *gremlingo.GraphTraversal {return g.AddV("person").Property("name", "marko").Property("age", 29)}, func(g *gremlingo.GraphTraversalSource, p map[string]interface{}) *gremlingo.GraphTraversal {return g.V(p["vid1"]).Property(gremlingo.T__.V(p["vid1"]).Group().By(gremlingo.T__.Id()).By(gremlingo.T__.Values("name")))}}, "g_io_readXkryoX": {func(g *gremlingo.GraphTraversalSource, p map[string]interface{}) *gremlingo.GraphTraversal {return g.Io("data/tinkerpop-modern.kryo").Read()}, func(g *gremlingo.GraphTraversalSource, p map[string]interface{}) *gremlingo.GraphTraversal {return g.V()}, func(g *gremlingo.GraphTraversalSource, p map[string]interface{}) *gremlingo.GraphTraversal {return g.E()}}, "g_io_read_withXreader_gryoX": {func(g *gremlingo.GraphTraversalSource, p map[string]interface{}) *gremlingo.GraphTraversal {return g.Io("data/tinkerpop-modern.kryo").With(gremlingo.IO.Reader, gremlingo.IO.Gryo).Read()}, func(g *gremlingo.GraphTraversalSource, p map[string]interface{}) *gremlingo.GraphTraversal {return g.V()}, func(g *gremlingo.GraphTraversalSource, p map[string]interface{}) *gremlingo.GraphTraversal {return g.E()}}, "g_io_readXgraphsonX": {func(g *gremlingo.GraphTraversalSource, p map[string]interface{}) *gremlingo.GraphTraversal {return g.Io("data/tinkerpop-modern.json").Read()}, func(g *gremlingo.GraphTraversalSource, p map[string]interface{}) *gremlingo.GraphTraversal {return g.V()}, func(g *gremlingo.GraphTraversalSource, p map[string]interface{}) *gremlingo.GraphTraversal {return g.E()}}, diff --git a/gremlin-go/driver/gremlinlang.go b/gremlin-go/driver/gremlinlang.go index 2625cb10e6..15ffd27a25 100644 --- a/gremlin-go/driver/gremlinlang.go +++ b/gremlin-go/driver/gremlinlang.go @@ -412,7 +412,22 @@ func (gl *GremlinLang) translatePValue(operator string, values []interface{}) (s sb := strings.Builder{} sb.WriteString(operator + "(") - if len(values) > 1 && operator != "between" && operator != "inside" { + // Check if all values are traversals — if so, serialize as comma-separated args (no brackets) + // This matches the server grammar: within(trav1, trav2) via genericArgumentVarargs + allTraversals := len(values) > 1 + if allTraversals { + for _, v := range values { + switch v.(type) { + case *Traversal, Traversal, *GraphTraversal, GraphTraversal: + // ok, it's a traversal + default: + allTraversals = false + break + } + } + } + + if len(values) > 1 && !allTraversals && operator != "between" && operator != "inside" { sb.WriteString("[") } @@ -427,7 +442,7 @@ func (gl *GremlinLang) translatePValue(operator string, values []interface{}) (s } } - if len(values) > 1 && operator != "between" && operator != "inside" { + if len(values) > 1 && !allTraversals && operator != "between" && operator != "inside" { sb.WriteString("]") } sb.WriteString(")") diff --git a/gremlin-js/gremlin-javascript/lib/language/translator/DotNetTranslateVisitor.ts b/gremlin-js/gremlin-javascript/lib/language/translator/DotNetTranslateVisitor.ts index 8cb11b125b..bfbd22c722 100644 --- a/gremlin-js/gremlin-javascript/lib/language/translator/DotNetTranslateVisitor.ts +++ b/gremlin-js/gremlin-javascript/lib/language/translator/DotNetTranslateVisitor.ts @@ -834,6 +834,45 @@ export default class DotNetTranslateVisitor extends TranslateVisitor { // ─── property ──────────────────────────────────────────────────────────── + visitTraversalMethod_property_Object(ctx: any): void { + // Property(null) is ambiguous with Property(ITraversal) — cast null to IDictionary to disambiguate + if (ctx.genericMapNullableArgument().genericMapNullableLiteral() != null && + ctx.genericMapNullableArgument().genericMapNullableLiteral().nullLiteral() != null) { + this.visit(ctx.getChild(0)); + this.sb.push('('); + this.sb.push('(IDictionary<object, object>) '); + this.visit(ctx.genericMapNullableArgument()); + this.sb.push(')'); + return; + } + this.visitChildren(ctx); + } + + visitTraversalMethod_property_Cardinality_Object(ctx: any): void { + // Property(Cardinality, null) — cast null to IDictionary to disambiguate + if (ctx.genericMapNullableArgument().genericMapNullableLiteral() != null && + ctx.genericMapNullableArgument().genericMapNullableLiteral().nullLiteral() != null) { + this.visit(ctx.getChild(0)); + this.sb.push('('); + this.visit(ctx.traversalCardinality()); + this.sb.push(', '); + this.sb.push('(IDictionary<object, object>) '); + this.visit(ctx.genericMapNullableArgument()); + this.sb.push(')'); + return; + } + this.visitChildren(ctx); + } + + visitTraversalMethod_property_Traversal(ctx: any): void { + // Property(ITraversal) — cast to ITraversal to disambiguate + this.visit(ctx.getChild(0)); + this.sb.push('('); + this.sb.push('(ITraversal) '); + this.visit(ctx.nestedTraversal()); + this.sb.push(')'); + } + visitTraversalMethod_property_Cardinality_Object_Object_Object(ctx: any): void { if (ctx.genericArgumentVarargs() == null || ctx.genericArgumentVarargs().getChildCount() === 0) { this.sb.push(capitalize(ctx.getChild(0).getText())); diff --git a/gremlin-js/gremlin-javascript/lib/process/gremlin-lang.ts b/gremlin-js/gremlin-javascript/lib/process/gremlin-lang.ts index 2a07ad8dec..55a43fa812 100644 --- a/gremlin-js/gremlin-javascript/lib/process/gremlin-lang.ts +++ b/gremlin-js/gremlin-javascript/lib/process/gremlin-lang.ts @@ -55,7 +55,14 @@ export default class GremlinLang { let result = p.operator + '('; if (Array.isArray(p.value)) { - result += '[' + p.value.map(v => this._argAsString(v)).join(',') + ']'; + // If all elements are traversals, serialize as comma-separated args (no brackets) + // This matches the server grammar: within(trav1, trav2) via genericArgumentVarargs + const allTraversals = p.value.length > 0 && p.value.every((v: any) => v != null && typeof v.getGremlinLang === 'function'); + if (allTraversals) { + result += p.value.map((v: any) => this._argAsString(v)).join(','); + } else { + result += '[' + p.value.map((v: any) => this._argAsString(v)).join(',') + ']'; + } } else { result += this._argAsString(p.value); if (p.other !== undefined && p.other !== null) { diff --git a/gremlin-js/gremlin-javascript/lib/process/traversal.ts b/gremlin-js/gremlin-javascript/lib/process/traversal.ts index 12404b80b3..ff9932e46e 100644 --- a/gremlin-js/gremlin-javascript/lib/process/traversal.ts +++ b/gremlin-js/gremlin-javascript/lib/process/traversal.ts @@ -347,6 +347,9 @@ export class P<T1 = any, T2 = any> { if (args.length === 1 && Array.isArray(args[0])) { return new P('within', args[0], null); } + if (args.length === 1 && args[0] != null && typeof args[0].getGremlinLang === 'function') { + return new P('within', args[0], null); + } return new P('within', args, null); } @@ -354,6 +357,9 @@ export class P<T1 = any, T2 = any> { if (args.length === 1 && Array.isArray(args[0])) { return new P('without', args[0], null); } + if (args.length === 1 && args[0] != null && typeof args[0].getGremlinLang === 'function') { + return new P('without', args[0], null); + } return new P('without', args, null); } diff --git a/gremlin-js/gremlin-javascript/test/cucumber/gremlin.js b/gremlin-js/gremlin-javascript/test/cucumber/gremlin.js index 1247cbe825..3dc2da180a 100644 --- a/gremlin-js/gremlin-javascript/test/cucumber/gremlin.js +++ b/gremlin-js/gremlin-javascript/test/cucumber/gremlin.js @@ -536,7 +536,6 @@ const gremlins = { g_V_hasXname_VXvid1X_valuesXnameXX: [function({g, vid1}) { return g.V().has("name", __.V(vid1).values("name")) }], g_V_hasXname_VXvid1X_outXknowsX_valuesXnameXX: [function({g, vid1}) { return g.V().has("name", __.V(vid1).out("knows").values("name")) }], g_V_hasXage_VXvid1X_outXknowsX_valuesXageXX: [function({g, vid1}) { return g.V().has("age", __.V(vid1).out("knows").values("age")) }], - g_V_hasXname_VXvid1X_outXcreatedX_valuesXnameXX: [function({g, vid1}) { return g.V().has("name", __.V(vid1).out("created").values("name")) }], g_V_hasXname_VXvid1X_valuesXnonexistentXX: [function({g, vid1}) { return g.V().has("name", __.V(vid1).values("nonexistent")) }], g_V_hasXname_notXidentityXX: [function({g}) { return g.V().has("name", __.not(__.identity())) }], g_V_hasXage_gtXVXvid1X_valuesXageXXX: [function({g, vid1}) { return g.V().has("age", P.gt(__.V(vid1).values("age"))) }], @@ -548,6 +547,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_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_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() }], @@ -559,6 +566,26 @@ const gremlins = { g_V_valuesXageX_isXgte_29vaarX_isXlt_34varX: [function({g, xx1, xx2}) { return g.V().values("age").is(P.gte(xx1)).is(P.lt(xx2)) }], g_V_whereXinXcreatedX_count_isX1XX_valuesXnameX: [function({g}) { return g.V().where(__.in_("created").count().is(1)).values("name") }], g_V_whereXinXcreatedX_count_isXgte_2XX_valuesXnameX: [function({g}) { return g.V().where(__.in_("created").count().is(P.gte(2))).values("name") }], + g_V_valuesXageX_isXVXvid1X_valuesXageXX: [function({g, vid1}) { return g.V().values("age").is(__.V(vid1).values("age")) }], + g_V_valuesXnameX_isXVXvid1X_valuesXnameXX: [function({g, vid1}) { return g.V().values("name").is(__.V(vid1).values("name")) }], + 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_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")) }], + g_VXvid1X_outXknowsX_valuesXageX_fold_allXgteXVXvid2X_valuesXageXXX: [function({g, vid2, vid1}) { return g.V(vid1).out("knows").values("age").fold().all(P.gte(__.V(vid2).values("age"))) }], + g_VXvid1X_outXknowsX_valuesXageX_fold_allXgtXVXvid2X_valuesXageXXX: [function({g, vid2, vid1}) { return g.V(vid1).out("knows").values("age").fold().all(P.gt(__.V(vid2).values("age"))) }], + g_VXvid1X_outXknowsX_valuesXageX_fold_anyXeqXVXvid3X_valuesXageXXX: [function({g, vid3, vid1}) { return g.V(vid1).out("knows").values("age").fold().any(P.eq(__.V(vid3).values("age"))) }], + g_VXvid1X_outXknowsX_valuesXageX_fold_noneXeqXVXvid4X_valuesXageXXX: [function({g, vid4, vid1}) { return g.V(vid1).out("knows").values("age").fold().none(P.eq(__.V(vid4).values("age"))) }], + g_VXvid1X_outXknowsX_valuesXageX_fold_noneXeqXVXvid3X_valuesXageXXX: [function({g, vid3, vid1}) { return g.V(vid1).out("knows").values("age").fold().none(P.eq(__.V(vid3).values("age"))) }], + g_injectXnullX_isXeqXV9999_valuesXnameXXX: [function({g}) { return g.inject(null).is(P.eq(__.V(9999).values("name"))) }], + g_injectXmarkoX_isXV9999_valuesXnameXX: [function({g}) { return g.inject("marko").is(__.V(9999).values("name")) }], + g_injectXmarkoX_chooseXeqXV9999_valuesXnameXX_matched_unmatchedX: [function({g}) { return g.inject("marko").choose(P.eq(__.V(9999).values("name")), __.constant("matched"), __.constant("unmatched")) }], + g_injectXlistX_noneXeqXV9999_valuesXnameXXX: [function({g}) { return g.inject(["marko", "josh"]).none(P.eq(__.V(9999).values("name"))) }], + g_V_hasXname_eqXV9999_valuesXnameXXX: [function({g}) { return g.V().has("name", P.eq(__.V(9999).values("name"))) }], + g_V_valuesXageX_isXwithoutXVXvid1X_valuesXageX_VXvid2X_valuesXageXXX: [function({g, vid2, vid1}) { return g.V().values("age").is(P.without(__.V(vid1).values("age"), __.V(vid2).values("age"))) }], g_V_valuesXageX_noneXgtX32XX: [function({g}) { return g.V().values("age").none(P.gt(32)) }], g_V_valuesXageX_whereXisXP_gtX33XXX_fold_noneXlteX33XX: [function({g}) { return g.V().values("age").where(__.is(P.gt(33))).fold().none(P.lte(33)) }], g_V_valuesXageX_order_byXdescX_fold_noneXltX10XX: [function({g}) { return g.V().values("age").order().by(Order.desc).fold().none(P.lt(10)) }], @@ -1795,14 +1822,14 @@ const gremlins = { g_V_localXoutE_foldX_unfold: [function({g}) { return g.V().local(__.outE().fold()).unfold() }], g_V_valueMap_unfold_mapXselectXkeysXX: [function({g}) { return g.V().valueMap().unfold().map(__.select(Column.keys)) }], g_VX1X_repeatXboth_simplePathX_untilXhasIdX6XX_path_byXnameX_unfold: [function({g, vid6, vid1}) { return g.V(vid1).repeat(__.both().simplePath()).until(__.hasId(vid6)).path().by("name").unfold() }], - g_VXvid1X_outXcreatedX_asXsoftwareX_V_hasXname_selectXsoftwareX_valuesXnameXX_inXcreatedX_name: [function({g, vid1}) { return g.V(vid1).out("created").as("sw").V().has("name", __.select("sw").values("name")).in_("created").values("name") }], + g_VXvid1X_id_VXidentityX_name: [function({g, vid1}) { return g.V(vid1).id().V(__.identity()).values("name") }], + g_VXvid1_vid2X_id_VXidentityX_name: [function({g, vid2, vid1}) { return g.V(vid1, vid2).id().V(__.identity()).values("name") }], + g_VXvid1X_id_asXbookmarkX_V_hasXname_joshX_VXselectXbookmarkXX_name: [function({g, vid1}) { return g.V(vid1).id().as("bookmark").V().has("name", "josh").V(__.select("bookmark")).values("name") }], g_VXvid1X_VXoutXknowsX_idX_name: [function({g, vid1}) { return g.V(vid1).V(__.out("knows").id()).values("name") }], - g_VXvid1X_VXoutXknowsX_hasXname_joshX_idX_valuesXageX: [function({g, vid1}) { return g.V(vid1).V(__.out("knows").has("name", "josh").id()).values("age") }], - g_VXvid1X_VXoutXknowsX_outXknowsX_idX_name: [function({g, vid1}) { return g.V(vid1).V(__.out("knows").out("knows").id()).values("name") }], - g_VXvid1X_VXoutXcreatedX_idX_valuesXlangX: [function({g, vid1}) { return g.V(vid1).V(__.out("created").id()).values("lang") }], g_VXvid1X_EXoutE_idX: [function({g, vid1}) { return g.V(vid1).E(__.outE().id()) }], - g_VXvid1X_EXoutEXknowsX_hasXweight_05X_idX: [function({g, vid1}) { return g.V(vid1).E(__.outE("knows").has("weight", 0.5).id()) }], - g_VXvid1X_EXoutXknowsX_outXknowsX_outE_idX: [function({g, vid1}) { return g.V(vid1).E(__.out("knows").out("knows").outE().id()) }], + g_injectX9999X_VXidentityX: [function({g}) { return g.inject(9999).V(__.identity()) }], + g_VXvid1X_outEXknowsX_hasXinV_name_vadasX_id_EXidentityX: [function({g, vid1}) { return g.V(vid1).outE("knows").filter(__.inV().has("name", "vadas")).id().E(__.identity()) }], + g_injectX9999X_EXidentityX: [function({g}) { return g.inject(9999).E(__.identity()) }], g_VXVXvid1X_idX_name: [function({g, vid1}) { return g.V(__.V(vid1).id()).values("name") }], g_EXVXvid1X_outE_idX: [function({g, vid1}) { return g.E(__.V(vid1).outE().id()) }], g_V_valueMap: [function({g}) { return g.V().valueMap() }], @@ -2126,17 +2153,16 @@ const gremlins = { g_injectX1_3_100_300X_list: [function({g}) { return g.inject([1, 3, 100, 300]) }], g_injectX1_3_100_300X_set: [function({g}) { return g.inject(new Set([1, 3, 100, 300])) }], g_injectX1_1X_set: [function({g}) { return g.inject(new Set([1, 1])) }], - g_VXvid2X_propertyXalias_VXvid1X_valuesXnameXX: [function({g, vid2, vid1}) { return g.V(vid2).property("alias", __.V(vid1).values("name")) }, function({g, vid2, vid1}) { return g.V().has("alias", "marko") }], - g_VXvid1X_propertyXcreatorCount_VXvid1X_inXcreatedX_countX: [function({g, vid1}) { return g.V(vid1).property("creatorCount", __.V(vid1).in_("created").count()) }, function({g, vid1}) { return g.V().has("creatorCount", 3) }], - g_VXvid1X_propertyXknownCount_outXknowsX_countX: [function({g, vid1}) { return g.V(vid1).property("knownCount", __.out("knows").count()) }, function({g, vid1}) { return g.V().has("knownCount", 2) }], - g_VXvid1X_propertyXcreator_inXcreatedX_valuesXnameXX: [function({g, vid1}) { return g.V(vid1).property("creator", __.in_("created").values("name")) }, function({g, vid1}) { return g.V().has("creator") }], - g_VXvid2X_propertyXVXvid1X_projectXfriendCount_softwareCreatedXX: [function({g, vid2, vid1}) { return g.V(vid2).property(__.V(vid1).project("friendCount", "softwareCreated").by(__.out("knows").count()).by(__.out("created").values("name"))) }, function({g, vid2, vid1}) { return g.V().has("friendCount", 2) }, function({g, vid2, vid1}) { return g.V().has("softwareCreated", "lop") }], - g_VXvid2X_propertyXVXvid1X_projectXoriginalName_originalLabelX_byXnameX_byXlabelXX: [function({g, vid2, vid1}) { return g.V(vid2).property(__.V(vid1).project("originalName", "originalLabel").by(__.values("name")).by(__.label())) }, function({g, vid2, vid1}) { return g.V(vid2).has("originalName", "marko") }, function({g, vid2, vid1}) { return g.V(vid2).has("originalLabel", "person") }], - g_VXvid1X_propertyXlist_friends_outXknowsX_valuesXnameXX: [function({g, vid1}) { return g.V(vid1).property(Cardinality.list, "friends", __.out("knows").values("name")) }, function({g, vid1}) { return g.V(vid1).properties("friends") }], - g_VXvid1X_propertyXlist_creators_inXcreatedX_valuesXnameXX: [function({g, vid1}) { return g.V(vid1).property(Cardinality.list, "creators", __.in_("created").values("name")) }, function({g, vid1}) { return g.V(vid1).properties("creators") }], - g_VXvid1X_propertyXset_langs_outXcreatedX_valuesXlangXX: [function({g, vid1}) { return g.V(vid1).property(Cardinality.set, "langs", __.out("created").values("lang")) }, function({g, vid1}) { return g.V(vid1).properties("langs") }], - g_VXvid1X_propertyXsingle_friend_outXknowsX_valuesXnameXX: [function({g, vid1}) { return g.V(vid1).property(Cardinality.single, "friend", __.out("knows").values("name")) }], - g_VXvid1X_propertyXVXvid1X_groupX_byXidX_byXvaluesXnameXXX: [function({g, vid1}) { return g.V(vid1).property(__.V(vid1).group().by(__.id()).by(__.values("name"))) }], + g_VXvid2X_propertyXalias_VXvid1X_valuesXnameXX: [function({g, vid2, vid1}) { return g.addV("person").property("name", "marko").property("age", 29).addV("person").property("name", "vadas").property("age", 27).addV("software").property("name", "lop").property("lang", "java").addV("person").property("name", "josh").property("age", 32).addV("person").property("name", "peter").property("age", 35).addV("software").property("name", "ripple").property("lang", "java") }, function({g, vid2, vi [...] + g_VXvid1X_propertyXcreatorCount_VXvid1X_inXcreatedX_countX: [function({g, vid1}) { return g.addV("person").property("name", "marko").property("age", 29).as("marko").addV("person").property("name", "vadas").property("age", 27).addV("software").property("name", "lop").property("lang", "java").as("lop").addV("person").property("name", "josh").property("age", 32).as("josh").addV("person").property("name", "peter").property("age", 35).as("peter").addV("software").property("name", "ripple" [...] + g_VXvid1X_propertyXknownCount_outXknowsX_countX: [function({g, vid1}) { return g.addV("person").property("name", "marko").property("age", 29).as("marko").addV("person").property("name", "vadas").property("age", 27).as("vadas").addV("software").property("name", "lop").property("lang", "java").addV("person").property("name", "josh").property("age", 32).as("josh").addV("person").property("name", "peter").property("age", 35).addV("software").property("name", "ripple").property("lang", "j [...] + g_VXvid1X_propertyXcreator_inXcreatedX_valuesXnameXX: [function({g, vid1}) { return g.addV("person").property("name", "marko").property("age", 29).as("marko").addV("person").property("name", "vadas").property("age", 27).addV("software").property("name", "lop").property("lang", "java").as("lop").addV("person").property("name", "josh").property("age", 32).as("josh").addV("person").property("name", "peter").property("age", 35).as("peter").addV("software").property("name", "ripple").prop [...] + g_VXvid2X_propertyXVXvid1X_projectXfriendCount_softwareCreatedXX: [function({g, vid2, vid1}) { return g.addV("person").property("name", "marko").property("age", 29).as("marko").addV("person").property("name", "vadas").property("age", 27).as("vadas").addV("software").property("name", "lop").property("lang", "java").as("lop").addV("person").property("name", "josh").property("age", 32).as("josh").addV("person").property("name", "peter").property("age", 35).as("peter").addV("software").p [...] + g_VXvid2X_propertyXVXvid1X_projectXoriginalName_originalLabelX_byXnameX_byXlabelXX: [function({g, vid2, vid1}) { return g.addV("person").property("name", "marko").property("age", 29).as("marko").addV("person").property("name", "vadas").property("age", 27).addV("software").property("name", "lop").property("lang", "java").as("lop").addV("person").property("name", "josh").property("age", 32).addV("person").property("name", "peter").property("age", 35).addV("software").property("name", " [...] + g_VXvid1X_propertyXlist_friends_outXknowsX_valuesXnameXX: [function({g, vid1}) { return g.addV("person").property("name", "marko").property("age", 29).as("marko").addV("person").property("name", "vadas").property("age", 27).as("vadas").addV("software").property("name", "lop").property("lang", "java").addV("person").property("name", "josh").property("age", 32).as("josh").addV("person").property("name", "peter").property("age", 35).addV("software").property("name", "ripple").property(" [...] + g_VXvid1X_propertyXset_langs_outXcreatedX_valuesXlangXX: [function({g, vid1}) { return g.addV("person").property("name", "marko").property("age", 29).addV("person").property("name", "vadas").property("age", 27).addV("software").property("name", "lop").property("lang", "java").as("lop").addV("person").property("name", "josh").property("age", 32).as("josh").addV("person").property("name", "peter").property("age", 35).addV("software").property("name", "ripple").property("lang", "java"). [...] + g_VXvid1X_propertyXsingle_friend_outXknowsX_valuesXnameXX: [function({g, vid1}) { return g.addV("person").property("name", "marko").property("age", 29).as("marko").addV("person").property("name", "vadas").property("age", 27).as("vadas").addV("software").property("name", "lop").property("lang", "java").addV("person").property("name", "josh").property("age", 32).as("josh").addV("person").property("name", "peter").property("age", 35).addV("software").property("name", "ripple").property( [...] + g_VXvid1X_propertyXVXvid1X_groupX_byXidX_byXvaluesXnameXXX: [function({g, vid1}) { return g.addV("person").property("name", "marko").property("age", 29) }, function({g, vid1}) { return g.V(vid1).property(__.V(vid1).group().by(__.id()).by(__.values("name"))) }], g_io_readXkryoX: [function({g}) { return g.io("data/tinkerpop-modern.kryo").read() }, function({g}) { return g.V() }, function({g}) { return g.E() }], g_io_read_withXreader_gryoX: [function({g}) { return g.io("data/tinkerpop-modern.kryo").with_(IO.reader, IO.gryo).read() }, function({g}) { return g.V() }, function({g}) { return g.E() }], g_io_readXgraphsonX: [function({g}) { return g.io("data/tinkerpop-modern.json").read() }, function({g}) { return g.V() }, function({g}) { return g.E() }], diff --git a/gremlin-python/src/main/python/gremlin_python/process/traversal.py b/gremlin-python/src/main/python/gremlin_python/process/traversal.py index 76c91822e7..894684f098 100644 --- a/gremlin-python/src/main/python/gremlin_python/process/traversal.py +++ b/gremlin-python/src/main/python/gremlin_python/process/traversal.py @@ -359,6 +359,8 @@ class P(object): return P("within", args[0]) elif len(args) == 1 and type(args[0]) == set: return P("within", list(args[0])) + elif len(args) == 1 and isinstance(args[0], Traversal): + return P("within", args[0]) else: return P("within", list(args)) @@ -368,6 +370,8 @@ class P(object): return P("without", args[0]) elif len(args) == 1 and type(args[0]) == set: return P("without", list(args[0])) + elif len(args) == 1 and isinstance(args[0], Traversal): + return P("without", args[0]) else: return P("without", list(args)) @@ -964,13 +968,22 @@ class GremlinLang(object): c = 0 res = [str(p).split('(')[0] + '('] if isinstance(p.value, list): - res.append('[') - for v in p.value: - if c > 0: - res.append(',') - res.append(self._arg_as_string(v)) - c += 1 - res.append(']') + # If all elements are Traversals, serialize as comma-separated args (no brackets) + # This matches the server grammar: within(trav1, trav2) via genericArgumentVarargs + if len(p.value) > 0 and all(isinstance(v, Traversal) for v in p.value): + for v in p.value: + if c > 0: + res.append(',') + res.append(self._arg_as_string(v)) + c += 1 + else: + res.append('[') + for v in p.value: + if c > 0: + res.append(',') + res.append(self._arg_as_string(v)) + c += 1 + res.append(']') else: res.append(self._arg_as_string(p.value)) if p.other is not None: diff --git a/gremlin-python/src/main/python/tests/feature/gremlin.py b/gremlin-python/src/main/python/tests/feature/gremlin.py index 5d33607174..c5b2e09b1e 100644 --- a/gremlin-python/src/main/python/tests/feature/gremlin.py +++ b/gremlin-python/src/main/python/tests/feature/gremlin.py @@ -510,7 +510,6 @@ world.gremlins = { 'g_V_hasXname_VXvid1X_valuesXnameXX': [(lambda g, vid1=None:g.V().has('name', __.V(vid1).values('name')))], 'g_V_hasXname_VXvid1X_outXknowsX_valuesXnameXX': [(lambda g, vid1=None:g.V().has('name', __.V(vid1).out('knows').values('name')))], 'g_V_hasXage_VXvid1X_outXknowsX_valuesXageXX': [(lambda g, vid1=None:g.V().has('age', __.V(vid1).out('knows').values('age')))], - 'g_V_hasXname_VXvid1X_outXcreatedX_valuesXnameXX': [(lambda g, vid1=None:g.V().has('name', __.V(vid1).out('created').values('name')))], 'g_V_hasXname_VXvid1X_valuesXnonexistentXX': [(lambda g, vid1=None:g.V().has('name', __.V(vid1).values('nonexistent')))], 'g_V_hasXname_notXidentityXX': [(lambda g:g.V().has('name', __.not_(__.identity())))], 'g_V_hasXage_gtXVXvid1X_valuesXageXXX': [(lambda g, vid1=None:g.V().has('age', P.gt(__.V(vid1).values('age'))))], @@ -522,6 +521,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_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_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())], @@ -533,6 +540,26 @@ world.gremlins = { 'g_V_valuesXageX_isXgte_29vaarX_isXlt_34varX': [(lambda g, xx1=None,xx2=None:g.V().values('age').is_(P.gte(xx1)).is_(P.lt(xx2)))], 'g_V_whereXinXcreatedX_count_isX1XX_valuesXnameX': [(lambda g:g.V().where(__.in_('created').count().is_(1)).values('name'))], 'g_V_whereXinXcreatedX_count_isXgte_2XX_valuesXnameX': [(lambda g:g.V().where(__.in_('created').count().is_(P.gte(2))).values('name'))], + 'g_V_valuesXageX_isXVXvid1X_valuesXageXX': [(lambda g, vid1=None:g.V().values('age').is_(__.V(vid1).values('age')))], + 'g_V_valuesXnameX_isXVXvid1X_valuesXnameXX': [(lambda g, vid1=None:g.V().values('name').is_(__.V(vid1).values('name')))], + '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_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')))], + 'g_VXvid1X_outXknowsX_valuesXageX_fold_allXgteXVXvid2X_valuesXageXXX': [(lambda g, vid2=None,vid1=None:g.V(vid1).out('knows').values('age').fold().all_(P.gte(__.V(vid2).values('age'))))], + 'g_VXvid1X_outXknowsX_valuesXageX_fold_allXgtXVXvid2X_valuesXageXXX': [(lambda g, vid2=None,vid1=None:g.V(vid1).out('knows').values('age').fold().all_(P.gt(__.V(vid2).values('age'))))], + 'g_VXvid1X_outXknowsX_valuesXageX_fold_anyXeqXVXvid3X_valuesXageXXX': [(lambda g, vid3=None,vid1=None:g.V(vid1).out('knows').values('age').fold().any_(P.eq(__.V(vid3).values('age'))))], + 'g_VXvid1X_outXknowsX_valuesXageX_fold_noneXeqXVXvid4X_valuesXageXXX': [(lambda g, vid4=None,vid1=None:g.V(vid1).out('knows').values('age').fold().none(P.eq(__.V(vid4).values('age'))))], + 'g_VXvid1X_outXknowsX_valuesXageX_fold_noneXeqXVXvid3X_valuesXageXXX': [(lambda g, vid3=None,vid1=None:g.V(vid1).out('knows').values('age').fold().none(P.eq(__.V(vid3).values('age'))))], + 'g_injectXnullX_isXeqXV9999_valuesXnameXXX': [(lambda g:g.inject(None).is_(P.eq(__.V(9999).values('name'))))], + 'g_injectXmarkoX_isXV9999_valuesXnameXX': [(lambda g:g.inject('marko').is_(__.V(9999).values('name')))], + 'g_injectXmarkoX_chooseXeqXV9999_valuesXnameXX_matched_unmatchedX': [(lambda g:g.inject('marko').choose(P.eq(__.V(9999).values('name')), __.constant('matched'), __.constant('unmatched')))], + 'g_injectXlistX_noneXeqXV9999_valuesXnameXXX': [(lambda g:g.inject(['marko', 'josh']).none(P.eq(__.V(9999).values('name'))))], + 'g_V_hasXname_eqXV9999_valuesXnameXXX': [(lambda g:g.V().has('name', P.eq(__.V(9999).values('name'))))], + 'g_V_valuesXageX_isXwithoutXVXvid1X_valuesXageX_VXvid2X_valuesXageXXX': [(lambda g, vid2=None,vid1=None:g.V().values('age').is_(P.without(__.V(vid1).values('age'), __.V(vid2).values('age'))))], 'g_V_valuesXageX_noneXgtX32XX': [(lambda g:g.V().values('age').none(P.gt(32)))], 'g_V_valuesXageX_whereXisXP_gtX33XXX_fold_noneXlteX33XX': [(lambda g:g.V().values('age').where(__.is_(P.gt(33))).fold().none(P.lte(33)))], 'g_V_valuesXageX_order_byXdescX_fold_noneXltX10XX': [(lambda g:g.V().values('age').order().by(Order.desc).fold().none(P.lt(10)))], @@ -1769,14 +1796,14 @@ world.gremlins = { 'g_V_localXoutE_foldX_unfold': [(lambda g:g.V().local(__.out_e().fold()).unfold())], 'g_V_valueMap_unfold_mapXselectXkeysXX': [(lambda g:g.V().value_map().unfold().map(__.select(Column.keys)))], 'g_VX1X_repeatXboth_simplePathX_untilXhasIdX6XX_path_byXnameX_unfold': [(lambda g, vid6=None,vid1=None:g.V(vid1).repeat(__.both().simple_path()).until(__.has_id(vid6)).path().by('name').unfold())], - 'g_VXvid1X_outXcreatedX_asXsoftwareX_V_hasXname_selectXsoftwareX_valuesXnameXX_inXcreatedX_name': [(lambda g, vid1=None:g.V(vid1).out('created').as_('sw').V().has('name', __.select('sw').values('name')).in_('created').values('name'))], + 'g_VXvid1X_id_VXidentityX_name': [(lambda g, vid1=None:g.V(vid1).id_().V(__.identity()).values('name'))], + 'g_VXvid1_vid2X_id_VXidentityX_name': [(lambda g, vid2=None,vid1=None:g.V(vid1, vid2).id_().V(__.identity()).values('name'))], + 'g_VXvid1X_id_asXbookmarkX_V_hasXname_joshX_VXselectXbookmarkXX_name': [(lambda g, vid1=None:g.V(vid1).id_().as_('bookmark').V().has('name', 'josh').V(__.select('bookmark')).values('name'))], 'g_VXvid1X_VXoutXknowsX_idX_name': [(lambda g, vid1=None:g.V(vid1).V(__.out('knows').id_()).values('name'))], - 'g_VXvid1X_VXoutXknowsX_hasXname_joshX_idX_valuesXageX': [(lambda g, vid1=None:g.V(vid1).V(__.out('knows').has('name', 'josh').id_()).values('age'))], - 'g_VXvid1X_VXoutXknowsX_outXknowsX_idX_name': [(lambda g, vid1=None:g.V(vid1).V(__.out('knows').out('knows').id_()).values('name'))], - 'g_VXvid1X_VXoutXcreatedX_idX_valuesXlangX': [(lambda g, vid1=None:g.V(vid1).V(__.out('created').id_()).values('lang'))], 'g_VXvid1X_EXoutE_idX': [(lambda g, vid1=None:g.V(vid1).E(__.out_e().id_()))], - 'g_VXvid1X_EXoutEXknowsX_hasXweight_05X_idX': [(lambda g, vid1=None:g.V(vid1).E(__.out_e('knows').has('weight', 0.5).id_()))], - 'g_VXvid1X_EXoutXknowsX_outXknowsX_outE_idX': [(lambda g, vid1=None:g.V(vid1).E(__.out('knows').out('knows').out_e().id_()))], + 'g_injectX9999X_VXidentityX': [(lambda g:g.inject(9999).V(__.identity()))], + 'g_VXvid1X_outEXknowsX_hasXinV_name_vadasX_id_EXidentityX': [(lambda g, vid1=None:g.V(vid1).out_e('knows').filter_(__.in_v().has('name', 'vadas')).id_().E(__.identity()))], + 'g_injectX9999X_EXidentityX': [(lambda g:g.inject(9999).E(__.identity()))], 'g_VXVXvid1X_idX_name': [(lambda g, vid1=None:g.V(__.V(vid1).id_()).values('name'))], 'g_EXVXvid1X_outE_idX': [(lambda g, vid1=None:g.E(__.V(vid1).out_e().id_()))], 'g_V_valueMap': [(lambda g:g.V().value_map())], @@ -2100,17 +2127,16 @@ world.gremlins = { 'g_injectX1_3_100_300X_list': [(lambda g:g.inject([1, 3, 100, 300]))], 'g_injectX1_3_100_300X_set': [(lambda g:g.inject({1, 3, 100, 300}))], 'g_injectX1_1X_set': [(lambda g:g.inject({1, 1}))], - 'g_VXvid2X_propertyXalias_VXvid1X_valuesXnameXX': [(lambda g, vid2=None,vid1=None:g.V(vid2).property('alias', __.V(vid1).values('name'))), (lambda g, vid2=None,vid1=None:g.V().has('alias', 'marko'))], - 'g_VXvid1X_propertyXcreatorCount_VXvid1X_inXcreatedX_countX': [(lambda g, vid1=None:g.V(vid1).property('creatorCount', __.V(vid1).in_('created').count())), (lambda g, vid1=None:g.V().has('creatorCount', long(3)))], - 'g_VXvid1X_propertyXknownCount_outXknowsX_countX': [(lambda g, vid1=None:g.V(vid1).property('knownCount', __.out('knows').count())), (lambda g, vid1=None:g.V().has('knownCount', long(2)))], - 'g_VXvid1X_propertyXcreator_inXcreatedX_valuesXnameXX': [(lambda g, vid1=None:g.V(vid1).property('creator', __.in_('created').values('name'))), (lambda g, vid1=None:g.V().has('creator'))], - 'g_VXvid2X_propertyXVXvid1X_projectXfriendCount_softwareCreatedXX': [(lambda g, vid2=None,vid1=None:g.V(vid2).property(__.V(vid1).project('friendCount', 'softwareCreated').by(__.out('knows').count()).by(__.out('created').values('name')))), (lambda g, vid2=None,vid1=None:g.V().has('friendCount', long(2))), (lambda g, vid2=None,vid1=None:g.V().has('softwareCreated', 'lop'))], - 'g_VXvid2X_propertyXVXvid1X_projectXoriginalName_originalLabelX_byXnameX_byXlabelXX': [(lambda g, vid2=None,vid1=None:g.V(vid2).property(__.V(vid1).project('originalName', 'originalLabel').by(__.values('name')).by(__.label()))), (lambda g, vid2=None,vid1=None:g.V(vid2).has('originalName', 'marko')), (lambda g, vid2=None,vid1=None:g.V(vid2).has('originalLabel', 'person'))], - 'g_VXvid1X_propertyXlist_friends_outXknowsX_valuesXnameXX': [(lambda g, vid1=None:g.V(vid1).property(Cardinality.list_, 'friends', __.out('knows').values('name'))), (lambda g, vid1=None:g.V(vid1).properties('friends'))], - 'g_VXvid1X_propertyXlist_creators_inXcreatedX_valuesXnameXX': [(lambda g, vid1=None:g.V(vid1).property(Cardinality.list_, 'creators', __.in_('created').values('name'))), (lambda g, vid1=None:g.V(vid1).properties('creators'))], - 'g_VXvid1X_propertyXset_langs_outXcreatedX_valuesXlangXX': [(lambda g, vid1=None:g.V(vid1).property(Cardinality.set_, 'langs', __.out('created').values('lang'))), (lambda g, vid1=None:g.V(vid1).properties('langs'))], - 'g_VXvid1X_propertyXsingle_friend_outXknowsX_valuesXnameXX': [(lambda g, vid1=None:g.V(vid1).property(Cardinality.single, 'friend', __.out('knows').values('name')))], - 'g_VXvid1X_propertyXVXvid1X_groupX_byXidX_byXvaluesXnameXXX': [(lambda g, vid1=None:g.V(vid1).property(__.V(vid1).group().by(__.id_()).by(__.values('name'))))], + 'g_VXvid2X_propertyXalias_VXvid1X_valuesXnameXX': [(lambda g, vid2=None,vid1=None:g.add_v('person').property('name', 'marko').property('age', 29).add_v('person').property('name', 'vadas').property('age', 27).add_v('software').property('name', 'lop').property('lang', 'java').add_v('person').property('name', 'josh').property('age', 32).add_v('person').property('name', 'peter').property('age', 35).add_v('software').property('name', 'ripple').property('lang', 'java')), (lambda g, vid2=No [...] + 'g_VXvid1X_propertyXcreatorCount_VXvid1X_inXcreatedX_countX': [(lambda g, vid1=None:g.add_v('person').property('name', 'marko').property('age', 29).as_('marko').add_v('person').property('name', 'vadas').property('age', 27).add_v('software').property('name', 'lop').property('lang', 'java').as_('lop').add_v('person').property('name', 'josh').property('age', 32).as_('josh').add_v('person').property('name', 'peter').property('age', 35).as_('peter').add_v('software').property('name', 'rip [...] + 'g_VXvid1X_propertyXknownCount_outXknowsX_countX': [(lambda g, vid1=None:g.add_v('person').property('name', 'marko').property('age', 29).as_('marko').add_v('person').property('name', 'vadas').property('age', 27).as_('vadas').add_v('software').property('name', 'lop').property('lang', 'java').add_v('person').property('name', 'josh').property('age', 32).as_('josh').add_v('person').property('name', 'peter').property('age', 35).add_v('software').property('name', 'ripple').property('lang', [...] + 'g_VXvid1X_propertyXcreator_inXcreatedX_valuesXnameXX': [(lambda g, vid1=None:g.add_v('person').property('name', 'marko').property('age', 29).as_('marko').add_v('person').property('name', 'vadas').property('age', 27).add_v('software').property('name', 'lop').property('lang', 'java').as_('lop').add_v('person').property('name', 'josh').property('age', 32).as_('josh').add_v('person').property('name', 'peter').property('age', 35).as_('peter').add_v('software').property('name', 'ripple'). [...] + 'g_VXvid2X_propertyXVXvid1X_projectXfriendCount_softwareCreatedXX': [(lambda g, vid2=None,vid1=None:g.add_v('person').property('name', 'marko').property('age', 29).as_('marko').add_v('person').property('name', 'vadas').property('age', 27).as_('vadas').add_v('software').property('name', 'lop').property('lang', 'java').as_('lop').add_v('person').property('name', 'josh').property('age', 32).as_('josh').add_v('person').property('name', 'peter').property('age', 35).as_('peter').add_v('sof [...] + 'g_VXvid2X_propertyXVXvid1X_projectXoriginalName_originalLabelX_byXnameX_byXlabelXX': [(lambda g, vid2=None,vid1=None:g.add_v('person').property('name', 'marko').property('age', 29).as_('marko').add_v('person').property('name', 'vadas').property('age', 27).add_v('software').property('name', 'lop').property('lang', 'java').as_('lop').add_v('person').property('name', 'josh').property('age', 32).add_v('person').property('name', 'peter').property('age', 35).add_v('software').property('na [...] + 'g_VXvid1X_propertyXlist_friends_outXknowsX_valuesXnameXX': [(lambda g, vid1=None:g.add_v('person').property('name', 'marko').property('age', 29).as_('marko').add_v('person').property('name', 'vadas').property('age', 27).as_('vadas').add_v('software').property('name', 'lop').property('lang', 'java').add_v('person').property('name', 'josh').property('age', 32).as_('josh').add_v('person').property('name', 'peter').property('age', 35).add_v('software').property('name', 'ripple').propert [...] + 'g_VXvid1X_propertyXset_langs_outXcreatedX_valuesXlangXX': [(lambda g, vid1=None:g.add_v('person').property('name', 'marko').property('age', 29).add_v('person').property('name', 'vadas').property('age', 27).add_v('software').property('name', 'lop').property('lang', 'java').as_('lop').add_v('person').property('name', 'josh').property('age', 32).as_('josh').add_v('person').property('name', 'peter').property('age', 35).add_v('software').property('name', 'ripple').property('lang', 'java' [...] + 'g_VXvid1X_propertyXsingle_friend_outXknowsX_valuesXnameXX': [(lambda g, vid1=None:g.add_v('person').property('name', 'marko').property('age', 29).as_('marko').add_v('person').property('name', 'vadas').property('age', 27).as_('vadas').add_v('software').property('name', 'lop').property('lang', 'java').add_v('person').property('name', 'josh').property('age', 32).as_('josh').add_v('person').property('name', 'peter').property('age', 35).add_v('software').property('name', 'ripple').proper [...] + 'g_VXvid1X_propertyXVXvid1X_groupX_byXidX_byXvaluesXnameXXX': [(lambda g, vid1=None:g.add_v('person').property('name', 'marko').property('age', 29)), (lambda g, vid1=None:g.V(vid1).property(__.V(vid1).group().by(__.id_()).by(__.values('name'))))], 'g_io_readXkryoX': [(lambda g:g.io('data/tinkerpop-modern.kryo').read()), (lambda g:g.V()), (lambda g:g.E())], 'g_io_read_withXreader_gryoX': [(lambda g:g.io('data/tinkerpop-modern.kryo').with_(IO.reader, IO.gryo).read()), (lambda g:g.V()), (lambda g:g.E())], 'g_io_readXgraphsonX': [(lambda g:g.io('data/tinkerpop-modern.json').read()), (lambda g:g.V()), (lambda g:g.E())], 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 856a610026..b19cdfa20f 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 @@ -19698,7 +19698,7 @@ "language": "g.addV(\"person\").property(null)", "canonical": "g.addV(\"person\").property(null)", "anonymized": "g.addV(string0).property(map0)", - "dotnet": "g.AddV((string) \"person\").Property(null)", + "dotnet": "g.AddV((string) \"person\").Property((IDictionary<object, object>) null)", "go": "g.AddV(\"person\").Property(nil)", "groovy": "g.addV(\"person\").property(null)", "java": "g.addV(\"person\").property(null)", @@ -19756,7 +19756,7 @@ "language": "g.addV(\"foo\").property(Cardinality.set, null)", "canonical": "g.addV(\"foo\").property(Cardinality.set, null)", "anonymized": "g.addV(string0).property(Cardinality.set, map0)", - "dotnet": "g.AddV((string) \"foo\").Property(Cardinality.Set, null)", + "dotnet": "g.AddV((string) \"foo\").Property(Cardinality.Set, (IDictionary<object, object>) null)", "go": "g.AddV(\"foo\").Property(gremlingo.Cardinality.Set, nil)", "groovy": "g.addV(\"foo\").property(Cardinality.set, null)", "java": "g.addV(\"foo\").property(Cardinality.set, null)", @@ -43982,7 +43982,7 @@ "language": "g.V(vid2).property(__.V(vid1).project(\"friendCount\", \"softwareCreated\").by(__.out(\"knows\").count()).by(__.out(\"created\").values(\"name\")))", "canonical": "g.V(vid2).property(__.V(vid1).project(\"friendCount\", \"softwareCreated\").by(__.out(\"knows\").count()).by(__.out(\"created\").values(\"name\")))", "anonymized": "g.V(vid2).property(__.V(vid1).project(string0, string1).by(__.out(string2).count()).by(__.out(string3).values(string4)))", - "dotnet": "g.V(vid2).Property(__.V(vid1).Project<object>(\"friendCount\", \"softwareCreated\").By(__.Out(\"knows\").Count()).By(__.Out(\"created\").Values<object>(\"name\")))", + "dotnet": "g.V(vid2).Property((ITraversal) __.V(vid1).Project<object>(\"friendCount\", \"softwareCreated\").By(__.Out(\"knows\").Count()).By(__.Out(\"created\").Values<object>(\"name\")))", "go": "g.V(vid2).Property(gremlingo.T__.V(vid1).Project(\"friendCount\", \"softwareCreated\").By(gremlingo.T__.Out(\"knows\").Count()).By(gremlingo.T__.Out(\"created\").Values(\"name\")))", "groovy": "g.V(vid2).property(__.V(vid1).project(\"friendCount\", \"softwareCreated\").by(__.out(\"knows\").count()).by(__.out(\"created\").values(\"name\")))", "java": "g.V(vid2).property(__.V(vid1).project(\"friendCount\", \"softwareCreated\").by(__.out(\"knows\").count()).by(__.out(\"created\").values(\"name\")))", @@ -44035,7 +44035,7 @@ "language": "g.V(vid2).property(__.V(vid1).project(\"originalName\", \"originalLabel\").by(__.values(\"name\")).by(__.label()))", "canonical": "g.V(vid2).property(__.V(vid1).project(\"originalName\", \"originalLabel\").by(__.values(\"name\")).by(__.label()))", "anonymized": "g.V(vid2).property(__.V(vid1).project(string0, string1).by(__.values(string2)).by(__.label()))", - "dotnet": "g.V(vid2).Property(__.V(vid1).Project<object>(\"originalName\", \"originalLabel\").By(__.Values<object>(\"name\")).By(__.Label()))", + "dotnet": "g.V(vid2).Property((ITraversal) __.V(vid1).Project<object>(\"originalName\", \"originalLabel\").By(__.Values<object>(\"name\")).By(__.Label()))", "go": "g.V(vid2).Property(gremlingo.T__.V(vid1).Project(\"originalName\", \"originalLabel\").By(gremlingo.T__.Values(\"name\")).By(gremlingo.T__.Label()))", "groovy": "g.V(vid2).property(__.V(vid1).project(\"originalName\", \"originalLabel\").by(__.values(\"name\")).by(__.label()))", "java": "g.V(vid2).property(__.V(vid1).project(\"originalName\", \"originalLabel\").by(__.values(\"name\")).by(__.label()))", @@ -44199,7 +44199,7 @@ "language": "g.V(vid1).property(__.V(vid1).group().by(__.id()).by(__.values(\"name\")))", "canonical": "g.V(vid1).property(__.V(vid1).group().by(__.id()).by(__.values(\"name\")))", "anonymized": "g.V(vid1).property(__.V(vid1).group().by(__.id()).by(__.values(string0)))", - "dotnet": "g.V(vid1).Property(__.V(vid1).Group<object, object>().By(__.Id()).By(__.Values<object>(\"name\")))", + "dotnet": "g.V(vid1).Property((ITraversal) __.V(vid1).Group<object, object>().By(__.Id()).By(__.Values<object>(\"name\")))", "go": "g.V(vid1).Property(gremlingo.T__.V(vid1).Group().By(gremlingo.T__.Id()).By(gremlingo.T__.Values(\"name\")))", "groovy": "g.V(vid1).property(__.V(vid1).group().by(__.id()).by(__.values(\"name\")))", "java": "g.V(vid1).property(__.V(vid1).group().by(__.id()).by(__.values(\"name\")))",
