You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@tinkerpop.apache.org by sp...@apache.org on 2021/09/15 13:03:57 UTC
[tinkerpop] branch master updated (3cb89c2 -> e92250c)
This is an automated email from the ASF dual-hosted git repository.
spmallette pushed a change to branch master
in repository https://gitbox.apache.org/repos/asf/tinkerpop.git.
from 3cb89c2 Merge branch '3.5-dev'
new c629a7e Added ConnectedComponent tokens given to with() to the grammar CTR
new d8a41bc Fixed bug in DotNetTranslator around ambiguous has() calls CTR
new 730f70c Preferred withEmbedded() in generate scripts CTR
new e92250c Merge branch '3.5-dev'
The 4 revisions listed above as "new" are entirely new to this
repository and will be described in separate emails. The revisions
listed as "add" were already present in the repository and have only
been added to this reference.
Summary of changes:
CHANGELOG.asciidoc | 2 ++
.../grammar/GraphTraversalSourceVisitor.java | 14 +++++++--
.../language/grammar/GremlinAntlrToJava.java | 35 ++++++++++++++++++++++
.../language/grammar/GremlinBaseVisitor.java | 25 ++++++++++++++++
.../grammar/GremlinStringConstantsVisitor.java | 21 +++++++++++++
.../language/grammar/TraversalMethodVisitor.java | 23 ++++++++++++--
.../traversal/translator/DotNetTranslator.java | 12 +++++++-
.../traversal/translator/DotNetTranslatorTest.java | 8 +++++
gremlin-dotnet/build/generate.groovy | 2 +-
gremlin-javascript/build/generate.groovy | 2 +-
gremlin-language/src/main/antlr4/Gremlin.g4 | 26 ++++++++++++++--
.../language/grammar/ReferenceGrammarTest.java | 1 -
gremlin-python/build/generate.groovy | 2 +-
13 files changed, 160 insertions(+), 13 deletions(-)
[tinkerpop] 03/04: Preferred withEmbedded() in generate scripts CTR
Posted by sp...@apache.org.
This is an automated email from the ASF dual-hosted git repository.
spmallette pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/tinkerpop.git
commit 730f70c665a64fa182d9d4ea3b539fdfa2037da1
Author: Stephen Mallette <st...@amazon.com>
AuthorDate: Wed Sep 15 08:47:48 2021 -0400
Preferred withEmbedded() in generate scripts CTR
---
gremlin-dotnet/build/generate.groovy | 2 +-
gremlin-javascript/build/generate.groovy | 2 +-
gremlin-python/build/generate.groovy | 2 +-
3 files changed, 3 insertions(+), 3 deletions(-)
diff --git a/gremlin-dotnet/build/generate.groovy b/gremlin-dotnet/build/generate.groovy
index 5fa64fa..4d6de0e 100644
--- a/gremlin-dotnet/build/generate.groovy
+++ b/gremlin-dotnet/build/generate.groovy
@@ -42,7 +42,7 @@ gremlinGroovyScriptEngine = new GremlinGroovyScriptEngine(new GroovyCustomizer()
}
})
translator = DotNetTranslator.of('g')
-g = traversal().withGraph(EmptyGraph.instance())
+g = traversal().withEmbedded(EmptyGraph.instance())
bindings = new SimpleBindings()
bindings.put('g', g)
diff --git a/gremlin-javascript/build/generate.groovy b/gremlin-javascript/build/generate.groovy
index c82b14d..09bd9e7 100644
--- a/gremlin-javascript/build/generate.groovy
+++ b/gremlin-javascript/build/generate.groovy
@@ -42,7 +42,7 @@ gremlinGroovyScriptEngine = new GremlinGroovyScriptEngine(new GroovyCustomizer()
}
})
translator = JavascriptTranslator.of('g')
-g = traversal().withGraph(EmptyGraph.instance())
+g = traversal().withEmbedded(EmptyGraph.instance())
bindings = new SimpleBindings()
bindings.put('g', g)
diff --git a/gremlin-python/build/generate.groovy b/gremlin-python/build/generate.groovy
index bac3d1b..701d47b 100644
--- a/gremlin-python/build/generate.groovy
+++ b/gremlin-python/build/generate.groovy
@@ -42,7 +42,7 @@ gremlinGroovyScriptEngine = new GremlinGroovyScriptEngine(new GroovyCustomizer()
}
})
translator = PythonTranslator.of('g')
-g = traversal().withGraph(EmptyGraph.instance())
+g = traversal().withEmbedded(EmptyGraph.instance())
bindings = new SimpleBindings()
bindings.put('g', g)
[tinkerpop] 01/04: Added ConnectedComponent tokens given to with()
to the grammar CTR
Posted by sp...@apache.org.
This is an automated email from the ASF dual-hosted git repository.
spmallette pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/tinkerpop.git
commit c629a7e8d2c99716ba1f0d64e0c064e37e51582d
Author: Stephen Mallette <st...@amazon.com>
AuthorDate: Wed Sep 15 07:48:55 2021 -0400
Added ConnectedComponent tokens given to with() to the grammar CTR
---
CHANGELOG.asciidoc | 1 +
.../grammar/GraphTraversalSourceVisitor.java | 14 +++++++--
.../language/grammar/GremlinAntlrToJava.java | 35 ++++++++++++++++++++++
.../language/grammar/GremlinBaseVisitor.java | 25 ++++++++++++++++
.../grammar/GremlinStringConstantsVisitor.java | 21 +++++++++++++
.../language/grammar/TraversalMethodVisitor.java | 23 ++++++++++++--
gremlin-language/src/main/antlr4/Gremlin.g4 | 26 ++++++++++++++--
.../language/grammar/ReferenceGrammarTest.java | 1 -
8 files changed, 137 insertions(+), 9 deletions(-)
diff --git a/CHANGELOG.asciidoc b/CHANGELOG.asciidoc
index 46fa43b..c25f494 100644
--- a/CHANGELOG.asciidoc
+++ b/CHANGELOG.asciidoc
@@ -25,6 +25,7 @@ image::https://raw.githubusercontent.com/apache/tinkerpop/master/docs/static/ima
* Added support for `with()` constant options to `io()`.
* Fixed bug in the processing of the `io()` step when constructing a `Traversal` from the grammar.
+* Added the `ConnectedComponent` tokens required to properly process the `with()` of the `connectedComponent()` step.
* Fixed bug where `RepeatUnrollStrategy`, `InlineFilterStrategy` and `MessagePassingReductionStrategy` were all being applied more than necessary.
* Ensured `PathRetractionStrategy` is applied after `InlineFilterStrategy` which prevents an error in traverser mapping in certain conditions.
* Deprecated `JsonBuilder` serialization for GraphSON and Gryo.
diff --git a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/language/grammar/GraphTraversalSourceVisitor.java b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/language/grammar/GraphTraversalSourceVisitor.java
index 6d44337..bf30941 100644
--- a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/language/grammar/GraphTraversalSourceVisitor.java
+++ b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/language/grammar/GraphTraversalSourceVisitor.java
@@ -29,14 +29,24 @@ public class GraphTraversalSourceVisitor extends GremlinBaseVisitor<GraphTravers
private final Graph graph;
private final GremlinAntlrToJava antlr;
private final String traversalSourceName;
+ private final GraphTraversalSource g;
+ /**
+ * Constructs the visitor and if the {@link GremlinAntlrToJava} has a {@link GraphTraversalSource} assigned to it,
+ * the visitor will prefer that "g" rather than creating a new one from the associated {@link Graph} instance.
+ */
public GraphTraversalSourceVisitor(final GremlinAntlrToJava antlr) {
this(TRAVERSAL_ROOT, antlr);
}
+ /**
+ * Same as {@link #GraphTraversalSourceVisitor(GremlinAntlrToJava)} but allows the traversal source name to be
+ * configured to something other than "g".
+ */
public GraphTraversalSourceVisitor(final String traversalSourceName, final GremlinAntlrToJava antlr) {
this.graph = antlr.graph;
this.antlr = antlr;
+ this.g = antlr.g;
this.traversalSourceName = traversalSourceName;
}
@@ -47,13 +57,13 @@ public class GraphTraversalSourceVisitor extends GremlinBaseVisitor<GraphTravers
public GraphTraversalSource visitTraversalSource(final GremlinParser.TraversalSourceContext ctx) {
if (ctx.getChildCount() == 1) {
// handle source method only
- return graph.traversal();
+ return null == g ? graph.traversal() : g;
} else {
final int childIndexOfSelfMethod = 2;
GraphTraversalSource source;
if (ctx.getChild(0).getText().equals(traversalSourceName)) {
// handle single traversal source
- source = graph.traversal();
+ source = null == g ? graph.traversal() : g;
} else {
// handle chained self method
final int childIndexOfTraversalSource = 0;
diff --git a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/language/grammar/GremlinAntlrToJava.java b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/language/grammar/GremlinAntlrToJava.java
index cb3afff..a06d5e7 100644
--- a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/language/grammar/GremlinAntlrToJava.java
+++ b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/language/grammar/GremlinAntlrToJava.java
@@ -44,6 +44,11 @@ public class GremlinAntlrToJava extends GremlinBaseVisitor<Object> {
final Graph graph;
/**
+ * The "g" from which to start the traversal.
+ */
+ final GraphTraversalSource g;
+
+ /**
* A {@link GremlinBaseVisitor} that processes {@link TraversalSource} methods.
*/
final GremlinBaseVisitor<GraphTraversalSource> gvisitor;
@@ -84,6 +89,14 @@ public class GremlinAntlrToJava extends GremlinBaseVisitor<Object> {
}
/**
+ * Constructs a new instance that is bound to the specified {@link GraphTraversalSource} and thus spawns the
+ * {@link Traversal} from this "g" rather than from a fresh one constructed from the {@link Graph} instance.
+ */
+ public GremlinAntlrToJava(final GraphTraversalSource g) {
+ this(g, __::start);
+ }
+
+ /**
* Constructs a new instance that is bound to the specified {@link Graph} instance with an override to using
* {@link __} for constructing anonymous {@link Traversal} instances. Assumes that "g" is the name of the
* {@link GraphTraversalSource}.
@@ -93,6 +106,14 @@ public class GremlinAntlrToJava extends GremlinBaseVisitor<Object> {
}
/**
+ * Constructs a new instance that is bound to the specified {@link GraphTraversalSource} and thus spawns the
+ * {@link Traversal} from this "g" rather than from a fresh one constructed from the {@link Graph} instance.
+ */
+ protected GremlinAntlrToJava(final GraphTraversalSource g, final Supplier<GraphTraversal<?,?>> createAnonymous) {
+ this(GraphTraversalSourceVisitor.TRAVERSAL_ROOT, g.getGraph(), createAnonymous, g);
+ }
+
+ /**
* Constructs a new instance that is bound to the specified {@link Graph} instance with an override to using
* {@link __} for constructing anonymous {@link Traversal} instances.
*
@@ -100,6 +121,20 @@ public class GremlinAntlrToJava extends GremlinBaseVisitor<Object> {
*/
protected GremlinAntlrToJava(final String traversalSourceName, final Graph graph,
final Supplier<GraphTraversal<?,?>> createAnonymous) {
+ this(traversalSourceName, graph, createAnonymous, null);
+ }
+
+ /**
+ * Constructs a new instance that is bound to the specified {@link Graph} instance with an override to using
+ * {@link __} for constructing anonymous {@link Traversal} instances. If the {@link GraphTraversalSource} is
+ * provided then the {@link Traversal} will spawn from it as opposed to a fresh one from the {@link Graph} instance.
+ *
+ * @param traversalSourceName The name of the traversal source which will be "g" if not specified.
+ */
+ protected GremlinAntlrToJava(final String traversalSourceName, final Graph graph,
+ final Supplier<GraphTraversal<?,?>> createAnonymous,
+ final GraphTraversalSource g) {
+ this.g = g;
this.graph = graph;
this.gvisitor = new GraphTraversalSourceVisitor(
null == traversalSourceName ? GraphTraversalSourceVisitor.TRAVERSAL_ROOT : traversalSourceName,this);
diff --git a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/language/grammar/GremlinBaseVisitor.java b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/language/grammar/GremlinBaseVisitor.java
index ac55b96..caa0a8a 100644
--- a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/language/grammar/GremlinBaseVisitor.java
+++ b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/language/grammar/GremlinBaseVisitor.java
@@ -1453,6 +1453,31 @@ public class GremlinBaseVisitor<T> extends AbstractParseTreeVisitor<T> implement
notImplemented(ctx); return null;
}
+ @Override
+ public T visitConnectedComponentConstants(final GremlinParser.ConnectedComponentConstantsContext ctx) {
+ notImplemented(ctx); return null;
+ }
+
+ @Override
+ public T visitGremlinStringConstants_connectedComponentStringConstants_component(final GremlinParser.GremlinStringConstants_connectedComponentStringConstants_componentContext ctx) {
+ notImplemented(ctx); return null;
+ }
+
+ @Override
+ public T visitGremlinStringConstants_connectedComponentStringConstants_edges(final GremlinParser.GremlinStringConstants_connectedComponentStringConstants_edgesContext ctx) {
+ notImplemented(ctx); return null;
+ }
+
+ @Override
+ public T visitGremlinStringConstants_connectedComponentStringConstants_propertyName(GremlinParser.GremlinStringConstants_connectedComponentStringConstants_propertyNameContext ctx) {
+ return null;
+ }
+
+ @Override
+ public T visitConnectedComponentStringConstant(final GremlinParser.ConnectedComponentStringConstantContext ctx) {
+ notImplemented(ctx); return null;
+ }
+
/**
* {@inheritDoc}
*/
diff --git a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/language/grammar/GremlinStringConstantsVisitor.java b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/language/grammar/GremlinStringConstantsVisitor.java
index fee33d4..eec0bdf 100644
--- a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/language/grammar/GremlinStringConstantsVisitor.java
+++ b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/language/grammar/GremlinStringConstantsVisitor.java
@@ -18,6 +18,7 @@
*/
package org.apache.tinkerpop.gremlin.language.grammar;
+import org.apache.tinkerpop.gremlin.process.computer.traversal.step.map.ConnectedComponent;
import org.apache.tinkerpop.gremlin.process.computer.traversal.step.map.PageRank;
import org.apache.tinkerpop.gremlin.process.computer.traversal.step.map.PeerPressure;
import org.apache.tinkerpop.gremlin.process.computer.traversal.step.map.ShortestPath;
@@ -47,6 +48,11 @@ public class GremlinStringConstantsVisitor extends GremlinBaseVisitor<Object> {
}
@Override
+ public Object visitConnectedComponentStringConstant(final GremlinParser.ConnectedComponentStringConstantContext ctx) {
+ return visitChildren(ctx);
+ }
+
+ @Override
public Object visitPageRankStringConstants(final GremlinParser.PageRankStringConstantsContext ctx) {
return visitChildren(ctx);
}
@@ -72,6 +78,21 @@ public class GremlinStringConstantsVisitor extends GremlinBaseVisitor<Object> {
}
@Override
+ public Object visitGremlinStringConstants_connectedComponentStringConstants_edges(final GremlinParser.GremlinStringConstants_connectedComponentStringConstants_edgesContext ctx) {
+ return ConnectedComponent.edges;
+ }
+
+ @Override
+ public Object visitGremlinStringConstants_connectedComponentStringConstants_component(final GremlinParser.GremlinStringConstants_connectedComponentStringConstants_componentContext ctx) {
+ return ConnectedComponent.component;
+ }
+
+ @Override
+ public Object visitGremlinStringConstants_connectedComponentStringConstants_propertyName(final GremlinParser.GremlinStringConstants_connectedComponentStringConstants_propertyNameContext ctx) {
+ return ConnectedComponent.propertyName;
+ }
+
+ @Override
public Object visitGremlinStringConstants_pageRankStringConstants_edges(final GremlinParser.GremlinStringConstants_pageRankStringConstants_edgesContext ctx) {
return PageRank.edges;
}
diff --git a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/language/grammar/TraversalMethodVisitor.java b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/language/grammar/TraversalMethodVisitor.java
index 9b67447..67258ce 100644
--- a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/language/grammar/TraversalMethodVisitor.java
+++ b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/language/grammar/TraversalMethodVisitor.java
@@ -940,7 +940,7 @@ public class TraversalMethodVisitor extends TraversalRootVisitor<GraphTraversal>
*/
@Override
public GraphTraversal visitTraversalMethod_option_Object_Traversal(final GremlinParser.TraversalMethod_option_Object_TraversalContext ctx) {
- return graphTraversal.option(GenericLiteralVisitor.getInstance().visitGenericLiteral(ctx.genericLiteral()),
+ return graphTraversal.option(new GenericLiteralVisitor(antlr).visitGenericLiteral(ctx.genericLiteral()),
antlr.tvisitor.visitNestedTraversal(ctx.nestedTraversal()));
}
@@ -1017,6 +1017,11 @@ public class TraversalMethodVisitor extends TraversalRootVisitor<GraphTraversal>
return graphTraversal.outV();
}
+ @Override
+ public Traversal visitTraversalMethod_connectedComponent(final GremlinParser.TraversalMethod_connectedComponentContext ctx) {
+ return graphTraversal.connectedComponent();
+ }
+
/**
* {@inheritDoc}
*/
@@ -1118,8 +1123,8 @@ public class TraversalMethodVisitor extends TraversalRootVisitor<GraphTraversal>
*/
@Override
public GraphTraversal visitTraversalMethod_property_Object_Object_Object(final GremlinParser.TraversalMethod_property_Object_Object_ObjectContext ctx) {
- return graphTraversal.property(GenericLiteralVisitor.getInstance().visitGenericLiteral(ctx.genericLiteral(0)),
- GenericLiteralVisitor.getInstance().visitGenericLiteral(ctx.genericLiteral(1)),
+ return graphTraversal.property(new GenericLiteralVisitor(antlr).visitGenericLiteral(ctx.genericLiteral(0)),
+ new GenericLiteralVisitor(antlr).visitGenericLiteral(ctx.genericLiteral(1)),
GenericLiteralVisitor.getGenericLiteralList(ctx.genericLiteralList()));
}
@@ -1499,11 +1504,23 @@ public class TraversalMethodVisitor extends TraversalRootVisitor<GraphTraversal>
return this.graphTraversal.where(antlr.tvisitor.visitNestedTraversal(ctx.nestedTraversal()));
}
+ /**
+ * {@inheritDoc}
+ */
@Override
public GraphTraversal visitTraversalMethod_math(final GremlinParser.TraversalMethod_mathContext ctx) {
return graphTraversal.math(GenericLiteralVisitor.getStringLiteral(ctx.stringLiteral()));
}
+ /**
+ * {@inheritDoc}
+ */
+ @Override
+ public Traversal visitTraversalMethod_option_Predicate_Traversal(final GremlinParser.TraversalMethod_option_Predicate_TraversalContext ctx) {
+ return graphTraversal.option(TraversalPredicateVisitor.getInstance().visitTraversalPredicate(ctx.traversalPredicate()),
+ antlr.tvisitor.visitNestedTraversal(ctx.nestedTraversal()));
+ }
+
public GraphTraversal[] getNestedTraversalList(final GremlinParser.NestedTraversalListContext ctx) {
return ctx.nestedTraversalExpr().nestedTraversal()
.stream()
diff --git a/gremlin-language/src/main/antlr4/Gremlin.g4 b/gremlin-language/src/main/antlr4/Gremlin.g4
index f3f9a15..206f341 100644
--- a/gremlin-language/src/main/antlr4/Gremlin.g4
+++ b/gremlin-language/src/main/antlr4/Gremlin.g4
@@ -736,9 +736,6 @@ traversalMethod_write
: 'write' LPAREN RPAREN
;
-
-
-
/*********************************************
ARGUMENT AND TERMINAL RULES
**********************************************/
@@ -1041,11 +1038,18 @@ traversalSelfMethod_none
gremlinStringConstants
: withOptionsStringConstants
| shortestPathStringConstants
+ | connectedComponentConstants
| pageRankStringConstants
| peerPressureStringConstants
| ioOptionsStringConstants
;
+connectedComponentConstants
+ : gremlinStringConstants_connectedComponentStringConstants_component
+ | gremlinStringConstants_connectedComponentStringConstants_edges
+ | gremlinStringConstants_connectedComponentStringConstants_propertyName
+ ;
+
pageRankStringConstants
: gremlinStringConstants_pageRankStringConstants_edges
| gremlinStringConstants_pageRankStringConstants_times
@@ -1087,6 +1091,18 @@ ioOptionsStringConstants
| gremlinStringConstants_ioOptionsStringConstants_graphml
;
+gremlinStringConstants_connectedComponentStringConstants_component
+ : connectedComponentStringConstant DOT 'component'
+ ;
+
+gremlinStringConstants_connectedComponentStringConstants_edges
+ : connectedComponentStringConstant DOT 'edges'
+ ;
+
+gremlinStringConstants_connectedComponentStringConstants_propertyName
+ : connectedComponentStringConstant DOT 'propertyName'
+ ;
+
gremlinStringConstants_pageRankStringConstants_edges
: pageRankStringConstant DOT 'edges'
;
@@ -1191,6 +1207,10 @@ gremlinStringConstants_ioOptionsStringConstants_graphml
: ioOptionsStringConstant DOT 'graphml'
;
+connectedComponentStringConstant
+ : 'ConnectedComponent'
+ ;
+
pageRankStringConstant
: 'PageRank'
;
diff --git a/gremlin-language/src/test/java/org/apache/tinkerpop/gremlin/language/grammar/ReferenceGrammarTest.java b/gremlin-language/src/test/java/org/apache/tinkerpop/gremlin/language/grammar/ReferenceGrammarTest.java
index 2246fd3..e980519 100644
--- a/gremlin-language/src/test/java/org/apache/tinkerpop/gremlin/language/grammar/ReferenceGrammarTest.java
+++ b/gremlin-language/src/test/java/org/apache/tinkerpop/gremlin/language/grammar/ReferenceGrammarTest.java
@@ -64,7 +64,6 @@ public class ReferenceGrammarTest extends AbstractGrammarTest {
assumeThat("Vertex instances are not supported", vertexPattern.matcher(query).matches(), is(false));
assumeThat("Edge instances are not supported", edgePattern.matcher(query).matches(), is(false));
assumeThat("fill() terminator is not supported", query.contains("fill("), is(false));
- assumeThat("connectedComponent() is not fully supported - needs tokens", query.contains("connectedComponent("), is(false));
assumeThat("withoutStrategies() is not supported", query.contains("withoutStrategies("), is(false));
assumeThat("program() is not supported", query.contains("program("), is(false));
[tinkerpop] 04/04: Merge branch '3.5-dev'
Posted by sp...@apache.org.
This is an automated email from the ASF dual-hosted git repository.
spmallette pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/tinkerpop.git
commit e92250cf094b4e625e392bd69e805aad09156d0a
Merge: 3cb89c2 730f70c
Author: Stephen Mallette <st...@amazon.com>
AuthorDate: Wed Sep 15 08:48:26 2021 -0400
Merge branch '3.5-dev'
CHANGELOG.asciidoc | 2 ++
.../grammar/GraphTraversalSourceVisitor.java | 14 +++++++--
.../language/grammar/GremlinAntlrToJava.java | 35 ++++++++++++++++++++++
.../language/grammar/GremlinBaseVisitor.java | 25 ++++++++++++++++
.../grammar/GremlinStringConstantsVisitor.java | 21 +++++++++++++
.../language/grammar/TraversalMethodVisitor.java | 23 ++++++++++++--
.../traversal/translator/DotNetTranslator.java | 12 +++++++-
.../traversal/translator/DotNetTranslatorTest.java | 8 +++++
gremlin-dotnet/build/generate.groovy | 2 +-
gremlin-javascript/build/generate.groovy | 2 +-
gremlin-language/src/main/antlr4/Gremlin.g4 | 26 ++++++++++++++--
.../language/grammar/ReferenceGrammarTest.java | 1 -
gremlin-python/build/generate.groovy | 2 +-
13 files changed, 160 insertions(+), 13 deletions(-)
[tinkerpop] 02/04: Fixed bug in DotNetTranslator around ambiguous
has() calls CTR
Posted by sp...@apache.org.
This is an automated email from the ASF dual-hosted git repository.
spmallette pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/tinkerpop.git
commit d8a41bc3b36d8f75644384ff3de9a94c672d9753
Author: Stephen Mallette <st...@amazon.com>
AuthorDate: Wed Sep 15 07:55:46 2021 -0400
Fixed bug in DotNetTranslator around ambiguous has() calls CTR
---
CHANGELOG.asciidoc | 1 +
.../process/traversal/translator/DotNetTranslator.java | 12 +++++++++++-
.../process/traversal/translator/DotNetTranslatorTest.java | 8 ++++++++
3 files changed, 20 insertions(+), 1 deletion(-)
diff --git a/CHANGELOG.asciidoc b/CHANGELOG.asciidoc
index c25f494..4f4eff4 100644
--- a/CHANGELOG.asciidoc
+++ b/CHANGELOG.asciidoc
@@ -26,6 +26,7 @@ image::https://raw.githubusercontent.com/apache/tinkerpop/master/docs/static/ima
* Added support for `with()` constant options to `io()`.
* Fixed bug in the processing of the `io()` step when constructing a `Traversal` from the grammar.
* Added the `ConnectedComponent` tokens required to properly process the `with()` of the `connectedComponent()` step.
+* Fixed `DotNetTranslator` bugs where translations produced Gremlin that failed due to ambiguous step calls to `has()`.
* Fixed bug where `RepeatUnrollStrategy`, `InlineFilterStrategy` and `MessagePassingReductionStrategy` were all being applied more than necessary.
* Ensured `PathRetractionStrategy` is applied after `InlineFilterStrategy` which prevents an error in traverser mapping in certain conditions.
* Deprecated `JsonBuilder` serialization for GraphSON and Gryo.
diff --git a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/translator/DotNetTranslator.java b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/translator/DotNetTranslator.java
index 65d4259..0e6ff8c 100644
--- a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/translator/DotNetTranslator.java
+++ b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/translator/DotNetTranslator.java
@@ -357,7 +357,17 @@ public final class DotNetTranslator implements Translator.ScriptTranslator {
} else if (methodName.equals(GraphTraversal.Symbols.hasValue)) {
script.append("(object) ");
} else if (methodName.equals(GraphTraversal.Symbols.has)) {
- if (instArgs[0] instanceof T && idx > 0) script.append("(object) ");
+ if (instArgs.length == 2) {
+ if ((instArgs[0] instanceof T || instArgs[0] instanceof String) && idx == 1) {
+ script.append("(object) ");
+ }
+ } else if (instArgs.length == 3) {
+ if ((instArgs[0] instanceof T || instArgs[0] instanceof String) && idx == 1) {
+ script.append("(string) ");
+ } else if ((instArgs[0] instanceof T || instArgs[0] instanceof String) && idx == 2) {
+ script.append("(object) ");
+ }
+ }
}
}
convertToScript(instArg);
diff --git a/gremlin-core/src/test/java/org/apache/tinkerpop/gremlin/process/traversal/translator/DotNetTranslatorTest.java b/gremlin-core/src/test/java/org/apache/tinkerpop/gremlin/process/traversal/translator/DotNetTranslatorTest.java
index 1b0fd71..8d61454 100644
--- a/gremlin-core/src/test/java/org/apache/tinkerpop/gremlin/process/traversal/translator/DotNetTranslatorTest.java
+++ b/gremlin-core/src/test/java/org/apache/tinkerpop/gremlin/process/traversal/translator/DotNetTranslatorTest.java
@@ -180,6 +180,14 @@ public class DotNetTranslatorTest {
}
@Test
+ public void shouldTranslateHasNull() {
+ String script = translator.translate(g.V().has("k", (Object) null).asAdmin().getBytecode()).getScript();
+ assertEquals("g.V().Has(\"k\",(object) null)", script);
+ script = translator.translate(g.V().has("l", "k", (Object) null).asAdmin().getBytecode()).getScript();
+ assertEquals("g.V().Has(\"l\",\"k\",(object) null)", script);
+ }
+
+ @Test
public void shouldEscapeStrings() {
final String script = translator.translate(g.addV("customer")
.property("customer_id", 501L)