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


The following commit(s) were added to refs/heads/master by this push:
     new 7294ae70d3 CTR Fix UUID arg handling in GremlinLang
7294ae70d3 is described below

commit 7294ae70d381232e09b27b9023816e2ae98b6df7
Author: Cole-Greer <cole.gr...@improving.com>
AuthorDate: Wed Sep 10 15:47:04 2025 -0700

    CTR Fix UUID arg handling in GremlinLang
---
 .../gremlin/language/translator/GroovyTranslateVisitor.java  | 12 ++++++++++++
 .../gremlin/language/translator/JavaTranslateVisitor.java    | 12 ++++++++++++
 .../tinkerpop/gremlin/process/traversal/GremlinLang.java     |  5 +++++
 .../gremlin/language/translator/GremlinTranslatorTest.java   |  8 ++++----
 .../tinkerpop/gremlin/process/traversal/GremlinLangTest.java |  2 ++
 .../javascript/gremlin-javascript/test/cucumber/gremlin.js   |  4 ++--
 6 files changed, 37 insertions(+), 6 deletions(-)

diff --git 
a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/language/translator/GroovyTranslateVisitor.java
 
b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/language/translator/GroovyTranslateVisitor.java
index cf3aafd5e2..e2bb9df27e 100644
--- 
a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/language/translator/GroovyTranslateVisitor.java
+++ 
b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/language/translator/GroovyTranslateVisitor.java
@@ -128,6 +128,18 @@ public class GroovyTranslateVisitor extends 
TranslateVisitor {
         return null;
     }
 
+    @Override
+    public Void visitUuidLiteral(final GremlinParser.UuidLiteralContext ctx) {
+        if (ctx.stringLiteral() == null) {
+            sb.append("UUID.randomUUID()");
+            return null;
+        }
+        sb.append("UUID.fromString(");
+        sb.append(ctx.stringLiteral().getText());
+        sb.append(")");
+        return null;
+    }
+
     @Override
     public Void visitNullLiteral(final GremlinParser.NullLiteralContext ctx) {
         if (ctx.getParent() instanceof 
GremlinParser.GenericMapNullableArgumentContext) {
diff --git 
a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/language/translator/JavaTranslateVisitor.java
 
b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/language/translator/JavaTranslateVisitor.java
index 55a20298d4..d798afbacd 100644
--- 
a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/language/translator/JavaTranslateVisitor.java
+++ 
b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/language/translator/JavaTranslateVisitor.java
@@ -246,6 +246,18 @@ public class JavaTranslateVisitor extends 
AbstractTranslateVisitor {
         return null;
     }
 
+    @Override
+    public Void visitUuidLiteral(final GremlinParser.UuidLiteralContext ctx) {
+        if (ctx.stringLiteral() == null) {
+            sb.append("UUID.randomUUID()");
+            return null;
+        }
+        sb.append("UUID.fromString(");
+        sb.append(ctx.stringLiteral().getText());
+        sb.append(")");
+        return null;
+    }
+
     @Override
     public Void visitGenericRangeLiteral(final 
GremlinParser.GenericRangeLiteralContext ctx) {
         throw new TranslatorException("Java does not support range literals");
diff --git 
a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/GremlinLang.java
 
b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/GremlinLang.java
index 3ec2494766..9eb81c1192 100644
--- 
a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/GremlinLang.java
+++ 
b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/GremlinLang.java
@@ -46,6 +46,7 @@ import java.util.List;
 import java.util.Map;
 import java.util.Objects;
 import java.util.Set;
+import java.util.UUID;
 import java.util.concurrent.atomic.AtomicInteger;
 
 import static org.apache.tinkerpop.gremlin.util.DatetimeHelper.format;
@@ -138,6 +139,10 @@ public class GremlinLang implements Cloneable, 
Serializable {
         if (arg instanceof OffsetDateTime)
             return String.format("datetime(\"%s\")", format(((OffsetDateTime) 
arg).toInstant()));
 
+        if (arg instanceof UUID) {
+            return String.format("UUID(\"%s\")", arg);
+        }
+
         if (arg instanceof Enum) {
             // special handling for enums with additional interfaces
             if (arg instanceof T)
diff --git 
a/gremlin-core/src/test/java/org/apache/tinkerpop/gremlin/language/translator/GremlinTranslatorTest.java
 
b/gremlin-core/src/test/java/org/apache/tinkerpop/gremlin/language/translator/GremlinTranslatorTest.java
index 57c1050cf4..0a0c896535 100644
--- 
a/gremlin-core/src/test/java/org/apache/tinkerpop/gremlin/language/translator/GremlinTranslatorTest.java
+++ 
b/gremlin-core/src/test/java/org/apache/tinkerpop/gremlin/language/translator/GremlinTranslatorTest.java
@@ -157,8 +157,8 @@ public class GremlinTranslatorTest {
                             "g.inject(string0)",
                             
"g.Inject<object>(Guid.Parse(\"f47af10b-58cc-4372-a567-0f02b2f3d479\"))",
                             
"g.Inject(uuid.MustParse(\"f47af10b-58cc-4372-a567-0f02b2f3d479\"))",
-                            null,
-                            null,
+                            
"g.inject(UUID.fromString(\"f47af10b-58cc-4372-a567-0f02b2f3d479\"))",
+                            
"g.inject(UUID.fromString(\"f47af10b-58cc-4372-a567-0f02b2f3d479\"))",
                             
"g.inject(\"f47af10b-58cc-4372-a567-0f02b2f3d479\")",
                             
"g.inject(uuid.UUID('f47af10b-58cc-4372-a567-0f02b2f3d479'))"},
                     {"g.inject(UUID())",
@@ -166,8 +166,8 @@ public class GremlinTranslatorTest {
                             "g.inject(string0)",
                             "g.Inject<object>(Guid.NewGuid())",
                             "g.Inject(uuid.New())",
-                            null,
-                            null,
+                            "g.inject(UUID.randomUUID())",
+                            "g.inject(UUID.randomUUID())",
                             "g.inject(uuid.v4())",
                             "g.inject(uuid.uuid4())"},
                     {"g.with(\"x\n\\\"yz\")",
diff --git 
a/gremlin-core/src/test/java/org/apache/tinkerpop/gremlin/process/traversal/GremlinLangTest.java
 
b/gremlin-core/src/test/java/org/apache/tinkerpop/gremlin/process/traversal/GremlinLangTest.java
index a6a6636d9f..09a8a21101 100644
--- 
a/gremlin-core/src/test/java/org/apache/tinkerpop/gremlin/process/traversal/GremlinLangTest.java
+++ 
b/gremlin-core/src/test/java/org/apache/tinkerpop/gremlin/process/traversal/GremlinLangTest.java
@@ -41,6 +41,7 @@ import java.util.Arrays;
 import java.util.Collections;
 import java.util.HashMap;
 import java.util.HashSet;
+import java.util.UUID;
 
 import static 
org.apache.tinkerpop.gremlin.process.traversal.AnonymousTraversalSource.traversal;
 import static org.apache.tinkerpop.gremlin.process.traversal.Scope.local;
@@ -88,6 +89,7 @@ public class GremlinLangTest {
                 {g.inject(asMap("age", VertexProperty.Cardinality.list(33))),
                         "g.inject([\"age\":Cardinality.list(33)])"},
                 {g.inject(new HashMap<>()), "g.inject([:])"},
+                
{g.inject(UUID.fromString("bfa9bbe8-c3a3-4017-acc3-cd02dda55e3e")), 
"g.inject(UUID(\"bfa9bbe8-c3a3-4017-acc3-cd02dda55e3e\"))"},
                 {g.V(1).out("knows").values("name"), 
"g.V(1).out(\"knows\").values(\"name\")"},
                 {g.V().has(T.label, "person"), 
"g.V().has(T.label,\"person\")"},
                 {g.addE("knows").from(new DetachedVertex(1, "test1", 
Collections.emptyList())).to(new DetachedVertex(6, "test2", 
Collections.emptyList())),
diff --git 
a/gremlin-javascript/src/main/javascript/gremlin-javascript/test/cucumber/gremlin.js
 
b/gremlin-javascript/src/main/javascript/gremlin-javascript/test/cucumber/gremlin.js
index 0d0c25ea21..44f0e3c5c2 100644
--- 
a/gremlin-javascript/src/main/javascript/gremlin-javascript/test/cucumber/gremlin.js
+++ 
b/gremlin-javascript/src/main/javascript/gremlin-javascript/test/cucumber/gremlin.js
@@ -1221,8 +1221,8 @@ const gremlins = {
     g_mergeVXname_aliceX_optionXonCreate_age_setX81XX: [function({g}) { return 
g.mergeV(new Map([["name", "alice"], [T.label, 
"person"]])).option(Merge.onCreate, new Map([["age", 
CardinalityValue.set(81)]])) }, function({g}) { return g.V().has("person", 
"name", "alice").has("age", 81) }, function({g}) { return g.V().has("person", 
"name", "alice").has("age") }, function({g}) { return g.V().has("person", 
"name", "alice").properties("age") }], 
     g_mergeVXname_aliceX_optionXonCreate_age_singleX81X_age_81_setX: 
[function({g}) { return g.mergeV(new Map([["name", "alice"], [T.label, 
"person"]])).option(Merge.onCreate, new Map([["age", 81]]), Cardinality.set) }, 
function({g}) { return g.V().has("person", "name", "alice").has("age", 81) }, 
function({g}) { return g.V().has("person", "name", "alice").has("age") }, 
function({g}) { return g.V().has("person", "name", "alice").properties("age") 
}], 
     g_mergeV_hidden_label_key_onMatch_matched_prohibited: [function({g, xx1}) 
{ return g.mergeV(new Map([])).option(Merge.onMatch, xx1) }], 
-    
g_injectXlist1_list2_list3X_fold_asXmX_mergeVXselectXmX_limitXlocal_1X_unfoldX_optionXonCreate_selectXmX_rangeXlocal_1_2X_unfoldX_optionXonMatch_selectXmX_tailXlocalX_unfoldX_to_match:
 [function({g}) { return g.addV("person").property("name", 
"marko").property("age", 29) }, function({g}) { return g.inject(new 
Map([[T.label, "person"], ["name", "marko"]]), new Map([[T.label, "person"], 
["name", "marko"]]), new Map([["created", 
"N"]])).fold().as("m").mergeV(__.select("m").limit(Scope.l [...]
-    
g_injectXlist1_list2_list3X_fold_asXmX_mergeVXselectXmX_limitXlocal_1X_unfoldX_optionXonCreate_selectXmX_rangeXlocal_1_2X_unfoldX_optionXonMatch_selectXmX_tailXlocalX_unfoldX_to_create:
 [function({g}) { return g.addV("person").property("name", 
"marko").property("age", 29) }, function({g}) { return g.inject(new 
Map([[T.label, "person"], ["name", "stephen"]]), new Map([[T.label, "person"], 
["name", "stephen"]]), new Map([["created", 
"N"]])).fold().as("m").mergeV(__.select("m").limit(Sc [...]
+    
g_injectXlist1_list2_list3X_fold_asXmX_mergeVXselectXmX_limitXlocal_1X_unfoldX_optionXonCreate_selectXmX_rangeXlocal_1_2X_unfoldX_optionXonMatch_selectXmX_tailXlocalX_unfoldX_to_match:
 [function({g, xx1, xx2}) { return g.addV("person").property("name", 
"marko").property("age", 29) }, function({g, xx1, xx2}) { return g.inject(xx1, 
xx1, xx2).fold().as("m").mergeV(__.select("m").limit(Scope.local, 
1).unfold()).option(Merge.onCreate, __.select("m").range(Scope.local, 1, 
2).unfold()).opti [...]
+    
g_injectXlist1_list2_list3X_fold_asXmX_mergeVXselectXmX_limitXlocal_1X_unfoldX_optionXonCreate_selectXmX_rangeXlocal_1_2X_unfoldX_optionXonMatch_selectXmX_tailXlocalX_unfoldX_to_create:
 [function({g, xx1, xx2}) { return g.addV("person").property("name", 
"marko").property("age", 29) }, function({g, xx1, xx2}) { return g.inject(xx1, 
xx1, xx2).fold().as("m").mergeV(__.select("m").limit(Scope.local, 
1).unfold()).option(Merge.onCreate, __.select("m").range(Scope.local, 1, 
2).unfold()).opt [...]
     g_mergeVXlabel_person_name_marko_age_29X_optionXonMatch_age_nullX_allowed: 
[function({g, xx1, xx2}) { return g.addV("person").property("name", 
"marko").property("age", 29) }, function({g, xx1, xx2}) { return 
g.mergeV(xx1).option(Merge.onMatch, xx2) }, function({g, xx1, xx2}) { return 
g.V() }, function({g, xx1, xx2}) { return g.V().has("person", "name", 
"marko").has("age", null) }], 
     g_mergeVXlabel_person_name_marko_age_29X_optionXonMatch_age_nullX: 
[function({g, xx1, xx2}) { return g.addV("person").property("name", 
"marko").property("age", 29) }, function({g, xx1, xx2}) { return 
g.mergeV(xx1).option(Merge.onMatch, xx2) }, function({g, xx1, xx2}) { return 
g.V() }, function({g, xx1, xx2}) { return g.V().has("person", "name", 
"marko").has("age") }], 
     g_V_age_min: [function({g}) { return g.V().values("age").min() }], 

Reply via email to