This is an automated email from the ASF dual-hosted git repository.

colegreer pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/tinkerpop.git

commit 32a7fa51a1b7291729799a39cff9a1bc3d7cb89d
Merge: e3e5c97a44 35a1eac8bc
Author: Cole-Greer <[email protected]>
AuthorDate: Mon May 5 16:55:07 2025 -0700

    Merge branch '3.8-dev'

 CHANGELOG.asciidoc                                 |  1 +
 .../grammar/DefaultGremlinBaseVisitor.java         | 12 +++--
 .../language/grammar/GenericLiteralVisitor.java    | 18 ++++++++
 .../translator/AnonymizedTranslatorVisitor.java    |  3 ++
 .../translator/DotNetTranslateVisitor.java         | 12 +++++
 .../language/translator/GoTranslateVisitor.java    | 12 +++++
 .../translator/JavascriptTranslateVisitor.java     | 10 +++++
 .../translator/PythonTranslateVisitor.java         | 12 +++++
 .../language/translator/TranslateVisitor.java      |  6 +++
 .../language/translator/GremlinTranslatorTest.java | 18 ++++++++
 .../Gherkin/CommonSteps.cs                         | 10 +++++
 .../Gremlin.Net.IntegrationTest/Gherkin/Gremlin.cs | 17 +++++++
 gremlin-go/build/generate.groovy                   |  1 +
 gremlin-go/driver/cucumber/cucumberSteps_test.go   | 52 +++++++++++++---------
 gremlin-go/driver/cucumber/gremlin.go              | 18 ++++++++
 gremlin-javascript/build/generate.groovy           |  1 +
 .../test/cucumber/feature-steps.js                 |  5 +++
 .../gremlin-javascript/test/cucumber/gremlin.js    |  3 ++
 gremlin-language/src/main/antlr4/Gremlin.g4        | 14 ++++++
 gremlin-python/build/generate.groovy               |  1 +
 .../src/main/python/radish/feature_steps.py        |  4 ++
 gremlin-python/src/main/python/radish/gremlin.py   |  3 ++
 .../gremlin/server/GremlinDriverIntegrateTest.java | 20 +++++++++
 .../tinkerpop/gremlin/features/StepDefinition.java |  4 +-
 .../gremlin/test/features/sideEffect/Uuid.feature  | 41 +++++++++++++++++
 25 files changed, 273 insertions(+), 25 deletions(-)

diff --cc gremlin-dotnet/test/Gremlin.Net.IntegrationTest/Gherkin/Gremlin.cs
index 384dbf3ff9,1b6de4dddd..690f2750fc
--- a/gremlin-dotnet/test/Gremlin.Net.IntegrationTest/Gherkin/Gremlin.cs
+++ b/gremlin-dotnet/test/Gremlin.Net.IntegrationTest/Gherkin/Gremlin.cs
@@@ -1688,6 -1673,20 +1688,23 @@@ namespace Gremlin.Net.IntegrationTest.G
                 {"g_withSideEffectXa_setX_V_both_name_storeXaX_capXaX", new 
List<Func<GraphTraversalSource, IDictionary<string, object>, ITraversal>> 
{(g,p) =>g.WithSideEffect("a", 
p["xx1"]).V().Both().Values<object>("name").Store("a").Cap<object>("a")}}, 
                 {"g_withSideEffectXa_set_inlineX_V_both_name_storeXaX_capXaX", 
new List<Func<GraphTraversalSource, IDictionary<string, object>, ITraversal>> 
{(g,p) =>g.WithSideEffect("a", new HashSet<object> { "alice" 
}).V().Both().Values<object>("name").Store("a").Cap<object>("a")}}, 
                 
{"g_V_storeXaX_byXoutEXcreatedX_countX_out_out_storeXaX_byXinEXcreatedX_weight_sumX",
 new List<Func<GraphTraversalSource, IDictionary<string, object>, ITraversal>> 
{(g,p) 
=>g.V().Store("a").By(__.OutE("created").Count()).Out().Out().Store("a").By(__.InE("created").Values<object>("weight").Sum<object>()).Cap<object>("a")}},
 
++<<<<<<< HEAD
++=======
+                {"g_VX1X_outEXknowsX_subgraphXsgX_name_capXsgX", new 
List<Func<GraphTraversalSource, IDictionary<string, object>, ITraversal>> 
{(g,p) 
=>g.V(p["vid1"]).OutE("knows").Subgraph("sg").Values<object>("name").Cap<object>("sg")}},
 
+                
{"g_V_repeatXbothEXcreatedX_subgraphXsgX_outVX_timesX5X_name_dedup_capXsgX", 
new List<Func<GraphTraversalSource, IDictionary<string, object>, ITraversal>> 
{(g,p) 
=>g.V().Repeat(__.BothE("created").Subgraph("sg").OutV()).Times(5).Values<object>("name").Dedup().Cap<object>("sg")}},
 
+                {"g_V_outEXnoexistX_subgraphXsgXcapXsgX", new 
List<Func<GraphTraversalSource, IDictionary<string, object>, ITraversal>> 
{(g,p) =>g.V().OutE("noexist").Subgraph("sg").Cap<object>("sg")}}, 
+                {"g_VX1X_out_out_tree_byXnameX", new 
List<Func<GraphTraversalSource, IDictionary<string, object>, ITraversal>> 
{(g,p) =>g.V(p["vid1"]).Out().Out().Tree<object>().By("name")}}, 
+                {"g_VX1X_out_out_tree", new List<Func<GraphTraversalSource, 
IDictionary<string, object>, ITraversal>> {(g,p) 
=>g.V(p["vid1"]).Out().Out().Tree<object>()}}, 
+                {"g_V_out_tree_byXageX", new List<Func<GraphTraversalSource, 
IDictionary<string, object>, ITraversal>> {(g,p) 
=>g.V().Out().Tree<object>().By("age")}}, 
+                {"g_VX1X_out_out_treeXaX_byXnameX_both_both_capXaX", new 
List<Func<GraphTraversalSource, IDictionary<string, object>, ITraversal>> 
{(g,p) 
=>g.V(p["vid1"]).Out().Out().Tree("a").By("name").Both().Both().Cap<object>("a")}},
 
+                {"g_VX1X_out_out_treeXaX_both_both_capXaX", new 
List<Func<GraphTraversalSource, IDictionary<string, object>, ITraversal>> 
{(g,p) =>g.V(p["vid1"]).Out().Out().Tree("a").Both().Both().Cap<object>("a")}}, 
+                {"g_VX1X_out_out_tree_byXlabelX", new 
List<Func<GraphTraversalSource, IDictionary<string, object>, ITraversal>> 
{(g,p) =>g.V(p["vid1"]).Out().Out().Tree<object>().By(T.Label)}}, 
+                {"g_VX1X_out_out_treeXaX_byXlabelX_both_both_capXaX", new 
List<Func<GraphTraversalSource, IDictionary<string, object>, ITraversal>> 
{(g,p) 
=>g.V(p["vid1"]).Out().Out().Tree("a").By(T.Label).Both().Both().Cap<object>("a")}},
 
+                {"g_VX1X_out_out_out_tree", new 
List<Func<GraphTraversalSource, IDictionary<string, object>, ITraversal>> 
{(g,p) =>g.V().Out().Out().Out().Tree<object>()}}, 
+                {"g_VX1X_outE_inV_bothE_otherV_tree", new 
List<Func<GraphTraversalSource, IDictionary<string, object>, ITraversal>> 
{(g,p) =>g.V(p["vid1"]).OutE().InV().BothE().OtherV().Tree<object>()}}, 
+                {"g_VX1X_outE_inV_bothE_otherV_tree_byXnameX_byXlabelX", new 
List<Func<GraphTraversalSource, IDictionary<string, object>, ITraversal>> 
{(g,p) 
=>g.V(p["vid1"]).OutE().InV().BothE().OtherV().Tree<object>().By("name").By(T.Label)}},
 
+                {"g_injectXUUIDX", new List<Func<GraphTraversalSource, 
IDictionary<string, object>, ITraversal>> {(g,p) 
=>g.Inject<object>(Guid.Parse("f47af10b-58cc-4372-a567-0f02b2f3d479"))}}, 
++>>>>>>> 3.8-dev
              };
  
          public static ITraversal UseTraversal(string scenarioName, 
GraphTraversalSource g, IDictionary<string, object> parameters)
diff --cc gremlin-go/driver/cucumber/gremlin.go
index d7ef1358d2,d232db2a9e..934010d1da
--- a/gremlin-go/driver/cucumber/gremlin.go
+++ b/gremlin-go/driver/cucumber/gremlin.go
@@@ -1661,6 -1643,20 +1662,23 @@@ var translationMap = map[string][]func(
      "g_withSideEffectXa_setX_V_both_name_storeXaX_capXaX": {func(g 
*gremlingo.GraphTraversalSource, p map[string]interface{}) 
*gremlingo.GraphTraversal {return g.WithSideEffect("a", 
p["xx1"]).V().Both().Values("name").Store("a").Cap("a")}}, 
      "g_withSideEffectXa_set_inlineX_V_both_name_storeXaX_capXaX": {func(g 
*gremlingo.GraphTraversalSource, p map[string]interface{}) 
*gremlingo.GraphTraversal {return g.WithSideEffect("a", 
gremlingo.NewSimpleSet("alice")).V().Both().Values("name").Store("a").Cap("a")}},
 
      
"g_V_storeXaX_byXoutEXcreatedX_countX_out_out_storeXaX_byXinEXcreatedX_weight_sumX":
 {func(g *gremlingo.GraphTraversalSource, p map[string]interface{}) 
*gremlingo.GraphTraversal {return 
g.V().Store("a").By(gremlingo.T__.OutE("created").Count()).Out().Out().Store("a").By(gremlingo.T__.InE("created").Values("weight").Sum()).Cap("a")}},
 
++<<<<<<< HEAD
++=======
+     "g_VX1X_outEXknowsX_subgraphXsgX_name_capXsgX": {func(g 
*gremlingo.GraphTraversalSource, p map[string]interface{}) 
*gremlingo.GraphTraversal {return 
g.V(p["vid1"]).OutE("knows").Subgraph("sg").Values("name").Cap("sg")}}, 
+     
"g_V_repeatXbothEXcreatedX_subgraphXsgX_outVX_timesX5X_name_dedup_capXsgX": 
{func(g *gremlingo.GraphTraversalSource, p map[string]interface{}) 
*gremlingo.GraphTraversal {return 
g.V().Repeat(gremlingo.T__.BothE("created").Subgraph("sg").OutV()).Times(5).Values("name").Dedup().Cap("sg")}},
 
+     "g_V_outEXnoexistX_subgraphXsgXcapXsgX": {func(g 
*gremlingo.GraphTraversalSource, p map[string]interface{}) 
*gremlingo.GraphTraversal {return 
g.V().OutE("noexist").Subgraph("sg").Cap("sg")}}, 
+     "g_VX1X_out_out_tree_byXnameX": {func(g *gremlingo.GraphTraversalSource, 
p map[string]interface{}) *gremlingo.GraphTraversal {return 
g.V(p["vid1"]).Out().Out().Tree().By("name")}}, 
+     "g_VX1X_out_out_tree": {func(g *gremlingo.GraphTraversalSource, p 
map[string]interface{}) *gremlingo.GraphTraversal {return 
g.V(p["vid1"]).Out().Out().Tree()}}, 
+     "g_V_out_tree_byXageX": {func(g *gremlingo.GraphTraversalSource, p 
map[string]interface{}) *gremlingo.GraphTraversal {return 
g.V().Out().Tree().By("age")}}, 
+     "g_VX1X_out_out_treeXaX_byXnameX_both_both_capXaX": {func(g 
*gremlingo.GraphTraversalSource, p map[string]interface{}) 
*gremlingo.GraphTraversal {return 
g.V(p["vid1"]).Out().Out().Tree("a").By("name").Both().Both().Cap("a")}}, 
+     "g_VX1X_out_out_treeXaX_both_both_capXaX": {func(g 
*gremlingo.GraphTraversalSource, p map[string]interface{}) 
*gremlingo.GraphTraversal {return 
g.V(p["vid1"]).Out().Out().Tree("a").Both().Both().Cap("a")}}, 
+     "g_VX1X_out_out_tree_byXlabelX": {func(g *gremlingo.GraphTraversalSource, 
p map[string]interface{}) *gremlingo.GraphTraversal {return 
g.V(p["vid1"]).Out().Out().Tree().By(gremlingo.T.Label)}}, 
+     "g_VX1X_out_out_treeXaX_byXlabelX_both_both_capXaX": {func(g 
*gremlingo.GraphTraversalSource, p map[string]interface{}) 
*gremlingo.GraphTraversal {return 
g.V(p["vid1"]).Out().Out().Tree("a").By(gremlingo.T.Label).Both().Both().Cap("a")}},
 
+     "g_VX1X_out_out_out_tree": {func(g *gremlingo.GraphTraversalSource, p 
map[string]interface{}) *gremlingo.GraphTraversal {return 
g.V().Out().Out().Out().Tree()}}, 
+     "g_VX1X_outE_inV_bothE_otherV_tree": {func(g 
*gremlingo.GraphTraversalSource, p map[string]interface{}) 
*gremlingo.GraphTraversal {return 
g.V(p["vid1"]).OutE().InV().BothE().OtherV().Tree()}}, 
+     "g_VX1X_outE_inV_bothE_otherV_tree_byXnameX_byXlabelX": {func(g 
*gremlingo.GraphTraversalSource, p map[string]interface{}) 
*gremlingo.GraphTraversal {return 
g.V(p["vid1"]).OutE().InV().BothE().OtherV().Tree().By("name").By(gremlingo.T.Label)}},
 
+     "g_injectXUUIDX": {func(g *gremlingo.GraphTraversalSource, p 
map[string]interface{}) *gremlingo.GraphTraversal {return 
g.Inject(uuid.MustParse("f47af10b-58cc-4372-a567-0f02b2f3d479"))}}, 
++>>>>>>> 3.8-dev
  }
  
     func GetTraversal(scenarioName string, g *gremlingo.GraphTraversalSource, 
parameters map[string]interface{}) (*gremlingo.GraphTraversal, error) {
diff --cc gremlin-javascript/build/generate.groovy
index 2ee326bd3c,9d04bc3e1b..8e7872a74c
--- a/gremlin-javascript/build/generate.groovy
+++ b/gremlin-javascript/build/generate.groovy
@@@ -54,9 -54,10 +54,10 @@@ radishGremlinFile.withWriter('UTF-8') 
      
writer.writeLine("//********************************************************************************\n\n")
  
      writer.writeLine(
 -                    'const uuid = require(\'uuid\');\n' +
 -                    'const graphTraversalModule = 
require(\'../../lib/process/graph-traversal\');\n' +
 -                    'const traversalModule = 
require(\'../../lib/process/traversal\');\n' +
 -                    'const { TraversalStrategies, VertexProgramStrategy, 
OptionsStrategy, PartitionStrategy, \n' +
 +                    'import * as graphTraversalModule from 
\'../../lib/process/graph-traversal.js\';\n' +
 +                    'import * as traversalModule from 
\'../../lib/process/traversal.js\';\n' +
++                    'import * as uuid from \'uuid\';\n' +
 +                    'import { TraversalStrategies, VertexProgramStrategy, 
OptionsStrategy, PartitionStrategy, \n' +
                      '        ReadOnlyStrategy, GraphFilterStrategy, 
SeedStrategy, SubgraphStrategy, ProductiveByStrategy, \n' +
                      '        LambdaRestrictionStrategy, 
StandardVerificationStrategy, VertexProgramRestrictionStrategy, \n' +
                      '        ComputerVerificationStrategy, 
MessagePassingReductionStrategy, ProfileStrategy, InlineFilterStrategy, \n' +
diff --cc 
gremlin-javascript/src/main/javascript/gremlin-javascript/test/cucumber/gremlin.js
index c762148a6b,d2f89c8696..7cdea9ec3c
--- 
a/gremlin-javascript/src/main/javascript/gremlin-javascript/test/cucumber/gremlin.js
+++ 
b/gremlin-javascript/src/main/javascript/gremlin-javascript/test/cucumber/gremlin.js
@@@ -24,9 -24,9 +24,10 @@@
  
//********************************************************************************
  
  
 -const graphTraversalModule = require('../../lib/process/graph-traversal');
 -const traversalModule = require('../../lib/process/traversal');
 -const { TraversalStrategies, VertexProgramStrategy, OptionsStrategy, 
PartitionStrategy, 
 +import * as graphTraversalModule from '../../lib/process/graph-traversal.js';
 +import * as traversalModule from '../../lib/process/traversal.js';
++import * as uuid from 'uuid';
 +import { TraversalStrategies, VertexProgramStrategy, OptionsStrategy, 
PartitionStrategy, 
          ReadOnlyStrategy, GraphFilterStrategy, SeedStrategy, 
SubgraphStrategy, ProductiveByStrategy, 
          LambdaRestrictionStrategy, StandardVerificationStrategy, 
VertexProgramRestrictionStrategy, 
          ComputerVerificationStrategy, MessagePassingReductionStrategy, 
ProfileStrategy, InlineFilterStrategy, 
@@@ -1752,6 -1685,7 +1753,8 @@@ const gremlins = 
      g_VX1X_out_out_out_tree: [function({g}) { return 
g.V().out().out().out().tree() }], 
      g_VX1X_outE_inV_bothE_otherV_tree: [function({g, vid1}) { return 
g.V(vid1).outE().inV().bothE().otherV().tree() }], 
      g_VX1X_outE_inV_bothE_otherV_tree_byXnameX_byXlabelX: [function({g, 
vid1}) { return 
g.V(vid1).outE().inV().bothE().otherV().tree().by("name").by(T.label) }], 
 -    g_injectXUUIDX: [function({g}) { return 
g.inject("f47af10b-58cc-4372-a567-0f02b2f3d479") }], 
++    g_injectXUUIDX47af10b_58cc_4372_a567_0f02b2f3d479XX: [function({g}) { 
return g.inject("f47af10b-58cc-4372-a567-0f02b2f3d479") }], 
++    g_injectXUUIDXXX: [function({g}) { return g.inject(uuid.v4()) }], 
  }
  
 -exports.gremlin = gremlins
 +export const gremlin = gremlins
diff --cc gremlin-python/src/main/python/radish/gremlin.py
index 10ad03b3e4,078afdcfee..97ab39d040
--- a/gremlin-python/src/main/python/radish/gremlin.py
+++ b/gremlin-python/src/main/python/radish/gremlin.py
@@@ -1725,4 -1659,5 +1726,6 @@@ world.gremlins = 
      'g_VX1X_out_out_out_tree': [(lambda g:g.V().out().out().out().tree())], 
      'g_VX1X_outE_inV_bothE_otherV_tree': [(lambda g, 
vid1=None:g.V(vid1).out_e().in_v().both_e().other_v().tree())], 
      'g_VX1X_outE_inV_bothE_otherV_tree_byXnameX_byXlabelX': [(lambda g, 
vid1=None:g.V(vid1).out_e().in_v().both_e().other_v().tree().by('name').by(T.label))],
 
 -    'g_injectXUUIDX': [(lambda 
g:g.inject(uuid.UUID('f47af10b-58cc-4372-a567-0f02b2f3d479')))], 
++    'g_injectXUUIDX47af10b_58cc_4372_a567_0f02b2f3d479XX': [(lambda 
g:g.inject(uuid.UUID('f47af10b-58cc-4372-a567-0f02b2f3d479')))], 
++    'g_injectXUUIDXXX': [(lambda g:g.inject(uuid.uuid4()))], 
  }
diff --cc 
gremlin-server/src/test/java/org/apache/tinkerpop/gremlin/server/GremlinDriverIntegrateTest.java
index 63b1e3e6d5,6dc2e4fdb8..d7f7bc5192
--- 
a/gremlin-server/src/test/java/org/apache/tinkerpop/gremlin/server/GremlinDriverIntegrateTest.java
+++ 
b/gremlin-server/src/test/java/org/apache/tinkerpop/gremlin/server/GremlinDriverIntegrateTest.java
@@@ -1245,4 -1898,23 +1246,23 @@@ public class GremlinDriverIntegrateTes
      public void shouldFailOnInitiallyDeadHostForClusterClient() throws 
Exception {
          testShouldFailOnInitiallyDeadHost(true);
      }
+ 
+     @Test
+     public void shouldFailOnInitiallyDeadHostForSessionClient() throws 
Exception {
+         testShouldFailOnInitiallyDeadHost(false);
+     }
+ 
+     @Test
+     public void shouldReturnUuid() throws Exception {
 -        final Cluster cluster = 
TestClientFactory.build().serializer(Serializers.GRAPHSON_V3).create();
++        final Cluster cluster = TestClientFactory.build().create();
+         try {
+             final Client client = cluster.connect().alias("g");
+             List<Result> returnedList = client.submit("g.inject(UUID())", 
RequestOptions.build().language("gremlin-lang").create()).all().get();
+             assertEquals(1, returnedList.size());
+             Object value = returnedList.get(0).getObject();
+             assertTrue(value instanceof UUID);
+         } finally {
+             cluster.close();
+         }
+     }
  }
diff --cc 
gremlin-test/src/main/java/org/apache/tinkerpop/gremlin/features/StepDefinition.java
index f4770ea5e8,275166e06d..d4203c8923
--- 
a/gremlin-test/src/main/java/org/apache/tinkerpop/gremlin/features/StepDefinition.java
+++ 
b/gremlin-test/src/main/java/org/apache/tinkerpop/gremlin/features/StepDefinition.java
@@@ -83,22 -92,8 +83,23 @@@ import java.util.regex.Matcher
  import java.util.regex.Pattern;
  import java.util.stream.Collectors;
  import java.util.stream.Stream;
+ import java.util.UUID;
  
 +import static org.apache.commons.text.StringEscapeUtils.escapeJava;
 +import static org.apache.tinkerpop.gremlin.LoadGraphWith.GraphData;
 +import static org.apache.tinkerpop.gremlin.process.traversal.P.eq;
 +import static org.hamcrest.MatcherAssert.assertThat;
 +import static org.hamcrest.core.IsEqual.equalTo;
 +import static org.hamcrest.core.Every.everyItem;
 +import static org.hamcrest.core.IsInstanceOf.instanceOf;
 +import static org.hamcrest.core.StringContains.containsStringIgnoringCase;
 +import static org.hamcrest.core.StringEndsWith.endsWithIgnoringCase;
 +import static org.hamcrest.core.StringStartsWith.startsWithIgnoringCase;
 +import static org.hamcrest.number.IsCloseTo.closeTo;
 +import static org.junit.Assert.assertEquals;
 +import static org.junit.Assert.assertNotNull;
 +import static org.junit.Assert.fail;
 +
  @ScenarioScoped
  public final class StepDefinition {
  

Reply via email to