This is an automated email from the ASF dual-hosted git repository.
valentyn pushed a commit to branch master-http
in repository https://gitbox.apache.org/repos/asf/tinkerpop.git
The following commit(s) were added to refs/heads/master-http by this push:
new b974c9bd01 Added Set handling to GremlinLang (#2705)
b974c9bd01 is described below
commit b974c9bd0189a00f809f921b13445f2a5bfff1e7
Author: Valentyn Kahamlyk <[email protected]>
AuthorDate: Fri Aug 2 15:04:52 2024 -0700
Added Set handling to GremlinLang (#2705)
---
.../language/translator/GroovyTranslateVisitor.java | 13 +++++++++++++
.../gremlin/process/traversal/GremlinLang.java | 17 +++++++++++++++--
.../language/translator/GremlinTranslatorTest.java | 2 +-
.../gremlin/process/traversal/GremlinLangTest.java | 2 +-
4 files changed, 30 insertions(+), 4 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 31891041de..7e5d82f638 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
@@ -140,6 +140,19 @@ public class GroovyTranslateVisitor extends
TranslateVisitor {
return null;
}
+ @Override
+ public Void visitGenericLiteralSet(GremlinParser.GenericLiteralSetContext
ctx) {
+ sb.append("[");
+ for (int i = 0; i < ctx.genericLiteral().size(); i++) {
+ final GremlinParser.GenericLiteralContext genericLiteralContext =
ctx.genericLiteral(i);
+ visit(genericLiteralContext);
+ if (i < ctx.genericLiteral().size() - 1)
+ sb.append(", ");
+ }
+ sb.append("] as Set");
+ return null;
+ }
+
@Override
public Void visitTraversalSourceSpawnMethod_inject(final
GremlinParser.TraversalSourceSpawnMethod_injectContext ctx) {
return handleInject(ctx);
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 b98fe2fa97..1b50dee8c7 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
@@ -192,9 +192,8 @@ public class GremlinLang implements Cloneable, Serializable
{
return asString((Map) arg);
}
- // todo: add set handling here when will be implemented in Grammar
if (arg instanceof Set) {
- return asParameter(arg);
+ return asString((Set) arg);
}
// handle all iterables in similar way
@@ -228,6 +227,20 @@ public class GremlinLang implements Cloneable,
Serializable {
return sb.append("]").toString();
}
+ private String asString(final Set<?> set) {
+ final StringBuilder sb = new StringBuilder().append("{");
+
+ final Iterator itty = asIterator(set);
+
+ while (itty.hasNext()) {
+ sb.append(argAsString(itty.next()));
+ if (itty.hasNext())
+ sb.append(",");
+ }
+
+ return sb.append("}").toString();
+ }
+
// borrowed from Groovy translator
private String asString(final P<?> p) {
final StringBuilder sb = new StringBuilder();
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 f3518f1bc9..b16fbf057d 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
@@ -516,7 +516,7 @@ public class GremlinTranslatorTest {
"g.with(string0, set0)",
"g.With(\"x\", new HashSet<object> { 1, \"x\" })",
"g.With(\"x\", gremlingo.NewSimpleSet(1, \"x\"))",
- null,
+ "g.with('x', [1, 'x'] as Set)",
"g.with(\"x\", new HashSet<Object>() {{ add(1);
add(\"x\"); }})",
"g.with_(\"x\", new Set([1, \"x\"]))",
"g.with_('x', {1, 'x'})"},
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 a16051bdc9..47318fafc3 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
@@ -122,7 +122,7 @@ public class GremlinLangTest {
"g.withStrategies(new
SubgraphStrategy(checkAdjacentVertices:true,vertices:__.has(\"name\",P.within([\"josh\",\"lop\",\"ripple\"])))).V()"},
{g.inject(Parameter.var("x", "x")).V(Parameter.var("ids", new
int[]{1, 2, 3})), "g.inject(x).V(ids)"},
{newG().inject(Parameter.value("test1"),
Parameter.value("test2")), "g.inject(_0,_1)"},
- {newG().inject(new HashSet<>(Arrays.asList(1, 2))),
"g.inject(_0)"},
+ {newG().inject(new HashSet<>(Arrays.asList(1, 2))),
"g.inject({1,2})"},
});
}