This is an automated email from the ASF dual-hosted git repository.
colegreer pushed a commit to branch 3.8-dev
in repository https://gitbox.apache.org/repos/asf/tinkerpop.git
The following commit(s) were added to refs/heads/3.8-dev by this push:
new 0b2e77e7f3 Remove GenericArgument from from() and to() (#3252)
0b2e77e7f3 is described below
commit 0b2e77e7f3cb893466722ddd86e75c4e5e1d38eb
Author: Cole Greer <[email protected]>
AuthorDate: Tue Oct 28 21:48:46 2025 -0700
Remove GenericArgument from from() and to() (#3252)
from() and to() will now only accept Strings (alias for __.select()) and
Traversals. If users wish to pass a vertex id, they may embed it in __.V() or
__.constant().
The primary motivation here is to ensure consistent behaviour accross
providers regardless of if their id types are numerics, strings, or other.
This change is a followup to an unintended consequence stemming from
https://github.com/apache/tinkerpop/pull/3133. The issue with directly allowing
ID's to be passed into from/to, it creates a weird asymmetry for graphs which
use Strings as their ids. For example g.addE().from(1).to(2) would work fine
and create an edge from V[1] to V[2], however if the graph used String ids, the
equivalent traversal (g.addE().from("a").to("b")) does not work, as the Strings
are interpreted as path l [...]
---------
Co-authored-by: andreachild <[email protected]>
---
docs/src/dev/provider/gremlin-semantics.asciidoc | 6 +++
docs/src/reference/the-traversal.asciidoc | 2 +
docs/src/upgrade/release-3.8.x.asciidoc | 37 +++++++++--------
.../grammar/DefaultGremlinBaseVisitor.java | 8 ----
.../language/grammar/TraversalMethodVisitor.java | 16 --------
.../traversal/dsl/graph/GraphTraversal.java | 48 ++++------------------
.../map/AbstractAddElementStepPlaceholder.java | 1 -
.../traversal/step/TraversalParentTest.java | 20 ++-------
.../traversal/step/map/AddEdgeStartStepTest.java | 9 ++--
.../traversal/step/map/AddEdgeStepTest.java | 8 ++--
.../Gremlin.Net.IntegrationTest/Gherkin/Gremlin.cs | 6 +--
gremlin-go/driver/cucumber/gremlin.go | 6 +--
.../gremlin-javascript/test/cucumber/gremlin.js | 6 +--
gremlin-language/src/main/antlr4/Gremlin.g4 | 2 -
gremlin-python/src/main/python/radish/gremlin.py | 6 +--
.../gremlin/test/features/map/AddEdge.feature | 10 ++---
.../TinkerGraphGremlinLangScriptEngineTest.java | 28 ++++++-------
17 files changed, 79 insertions(+), 140 deletions(-)
diff --git a/docs/src/dev/provider/gremlin-semantics.asciidoc
b/docs/src/dev/provider/gremlin-semantics.asciidoc
index 12bcf64107..4695fcbf94 100644
--- a/docs/src/dev/provider/gremlin-semantics.asciidoc
+++ b/docs/src/dev/provider/gremlin-semantics.asciidoc
@@ -535,6 +535,12 @@ The `addE()` step can be used as both a start step and a
mid-traversal step. Whe
and `to()` must be specified. When used as a mid-traversal step, the current
traverser becomes the source vertex and
only `to()` needs to be specified.
+The gremlin-lang grammar only permits `Traversal` and `String` (alias for
`__.select(String)`) arguments in `from()` and
+`to()`. The `Traversal` must either produce a `Vertex` which is attachable to
the graph, or it must produce the id of an
+existing `Vertex` in the graph. `GraphTraversal` implementations in GLVs may
optionally support `from(Vertex)` and
+`to(Vertex)` as syntactic sugar. If translating to gremlin-lang scripts, these
sugared modulators must be converted to
+`from(__.V(vertex.id()))` or `from(__.constant(vertex.id()))` (and equivalents
for `to()`).
+
*Exceptions*
* If the edge label is null, an `IllegalArgumentException` will be thrown.
diff --git a/docs/src/reference/the-traversal.asciidoc
b/docs/src/reference/the-traversal.asciidoc
index d563c38b3d..dc32bc791b 100644
--- a/docs/src/reference/the-traversal.asciidoc
+++ b/docs/src/reference/the-traversal.asciidoc
@@ -553,6 +553,7 @@ vMarko = g.V().has('name','marko').next()
vPeter = g.V().has('name','peter').next()
g.V(vMarko).addE('knows').to(vPeter) <6>
g.addE('knows').from(vMarko).to(vPeter) <7>
+g.addE('knows').from(__.V(1)).to(__.constant(6)) <8>
----
<1> Add a co-developer edge with a year-property between marko and his
collaborators.
@@ -563,6 +564,7 @@ g.addE('knows').from(vMarko).to(vPeter) <7>
supports user provided ids.
<6> Add an edge between marko and peter given the directed (detached) vertex
references.
<7> Add an edge between marko and peter given the directed (detached) vertex
references.
+<8> Use child traversals producing either a vertex, or vertex id to add an
edge between marko and peter.
*Additional References*
diff --git a/docs/src/upgrade/release-3.8.x.asciidoc
b/docs/src/upgrade/release-3.8.x.asciidoc
index b1dbae99b4..9f254b581d 100644
--- a/docs/src/upgrade/release-3.8.x.asciidoc
+++ b/docs/src/upgrade/release-3.8.x.asciidoc
@@ -737,41 +737,44 @@ after construction. All usages of `P.getOriginalValue()`
should be replaced with
A number of changes have been introduced to the Gremlin grammar to help make
it be more consistent and easier to use.
-*Removed Vertex References for Grammar*
+*Removed StructureVertex from Grammar*
The grammar allowed the construction of a `Vertex` by way of syntax like `new
Vertex(1,'person')` (or with similar
arguments to `ReferenceVertex`). This syntax has been removed as it served
little purpose within the grammar as it
merely adds more characters to wrap around the identifier, which could simply
be used by itself.
The `V()` step, as well as the `from()` and `to()` modulators used with
`addE()`, previously accepted `Vertex` as
-arguments in the grammar. In its place, the `from()` and `to()` modulators can
now directly accept a vertex id in place
-of a `Vertex` when used with `addE()` (`V()` has always accepted ids in
addition to vertices). When using these steps in
-`gremlin-lang` scripts, the vertex id must be used directly.
+arguments in the grammar. The `V()` step has always accepted vertex ids as
arguments, and continues to do so. The
+`from()` and `to()` modulators for `addE()` continue to accept `String`
arguments (which are a shorthand for
+`__.select(String)`), as well as `Traversal` arguments. As always, these
`Traversal` arguments may produce `Vertex`
+objects (such as `__.V(1)`) to directly bind to from/to. Newly added in 3.8.0,
the `Traversal` may also produce the id
+of a vertex present in the graph (such as `__.constant(1)`), which will then
bind to from/to.
-This change has no effect on the `GraphTraversal` API, nor on `gremlin-groovy`
scripts. Vertices can continue to be used
-directly in those contexts.
+When using these steps in `gremlin-lang` scripts, a `Traversal` or `String`
argument must be used directly. This change
+has no effect on the `GraphTraversal` API, nor on `gremlin-groovy` scripts.
Vertices can continue to be used directly in
+those contexts.
[source,text]
----
-// 3.7.3
+// 3.7.4
gremlin> v1 = g.V(1).next()
==>v[1]
-gremlin> v2 = g.V(2).next()
-==>v[2]
-gremlin> script = String.format("g.V(new Vertex(%s)).outE().where(inV().is(new
Vertex(%s)))", v1.id(), v2.id())
-==>g.V(new Vertex(1)).outE().where(inV().is(new Vertex(2)))
+gremlin> v6 = g.V(6).next()
+==>v[6]
+gremlin> script = String.format("g.addE('knows').from(new Vertex(%s)).to(new
ReferenceVertex(%s))", v1.id(), v6.id())
+==>g.addE('knows').from(new Vertex(1)).to(new ReferenceVertex(6))
gremlin> client.submit(script).all().get().get(0).getEdge()
-==>e[7][1-knows->2]
+==>e[0][1-knows->6]
// 3.8.0
gremlin> v1 = g.V(1).next()
==>v[1]
-gremlin> v2 = g.V(2).next()
-==>v[2]
-gremlin> script = String.format("g.V(%s).outE().where(inV().id().is(%s))",
v1.id(), v2.id())
-==>g.V(1).outE().where(inV().id().is(2))
+gremlin> v6 = g.V(6).next()
+==>v[6]
+gremlin> script =
String.format("g.addE('knows').from(__.V(%s)).to(__.constant(%s))", v1.id(),
v6.id())
+==>g.addE('knows').from(__.V(1)).to(__.constant(6))
gremlin> client.submit(script).all().get().get(0).getEdge()
-==>e[7][1-knows->2]
+==>e[0][1-knows->6]
----
*`new` keyword is now optional*
diff --git
a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/language/grammar/DefaultGremlinBaseVisitor.java
b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/language/grammar/DefaultGremlinBaseVisitor.java
index 8227c1830b..923edda0fb 100644
---
a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/language/grammar/DefaultGremlinBaseVisitor.java
+++
b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/language/grammar/DefaultGremlinBaseVisitor.java
@@ -403,10 +403,6 @@ public class DefaultGremlinBaseVisitor<T> extends
AbstractParseTreeVisitor<T> im
* {@inheritDoc}
*/
@Override public T visitTraversalMethod_from_String(final
GremlinParser.TraversalMethod_from_StringContext ctx) { notImplemented(ctx);
return null; }
- /**
- * {@inheritDoc}
- */
- @Override public T visitTraversalMethod_from_GenricArgument(final
GremlinParser.TraversalMethod_from_GenricArgumentContext ctx) { return null; }
/**
* {@inheritDoc}
*/
@@ -839,10 +835,6 @@ public class DefaultGremlinBaseVisitor<T> extends
AbstractParseTreeVisitor<T> im
* {@inheritDoc}
*/
@Override public T visitTraversalMethod_to_String(final
GremlinParser.TraversalMethod_to_StringContext ctx) { notImplemented(ctx);
return null; }
- /**
- * {@inheritDoc}
- */
- @Override public T visitTraversalMethod_to_GenricArgument(final
GremlinParser.TraversalMethod_to_GenricArgumentContext ctx) {
notImplemented(ctx); return null; }
/**
* {@inheritDoc}
*/
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 0b038cfd8b..2393b0b487 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
@@ -1865,22 +1865,6 @@ public class TraversalMethodVisitor extends
TraversalRootVisitor<GraphTraversal>
antlr.tvisitor.visitNestedTraversal(ctx.nestedTraversal()));
}
- /**
- * {@inheritDoc}
- */
- @Override
- public GraphTraversal visitTraversalMethod_from_GenricArgument(final
GremlinParser.TraversalMethod_from_GenricArgumentContext ctx) {
- return
graphTraversal.from(antlr.argumentVisitor.visitGenericArgument(ctx.genericArgument()));
- }
-
- /**
- * {@inheritDoc}
- */
- @Override
- public Traversal visitTraversalMethod_to_GenricArgument(final
GremlinParser.TraversalMethod_to_GenricArgumentContext ctx) {
- return
graphTraversal.to(antlr.argumentVisitor.visitGenericArgument(ctx.genericArgument()));
- }
-
/**
* {@inheritDoc}
*/
diff --git
a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/dsl/graph/GraphTraversal.java
b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/dsl/graph/GraphTraversal.java
index 53af3f463a..4ef2d82e24 100644
---
a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/dsl/graph/GraphTraversal.java
+++
b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/dsl/graph/GraphTraversal.java
@@ -1603,14 +1603,14 @@ public interface GraphTraversal<S, E> extends
Traversal<S, E> {
* @see <a
href="http://tinkerpop.apache.org/docs/${project.version}/reference/#addedge-step"
target="_blank">Reference Documentation - From Step</a>
* @since 3.8.0
*/
- public default GraphTraversal<S, E> from(final GValue<Vertex> fromVertex) {
+ public default GraphTraversal<S, E> from(final GValue<?> fromVertex) {
final Step<?,?> prev = this.asAdmin().getEndStep();
if (!(prev instanceof FromToModulating))
throw new IllegalArgumentException(String.format(
"The from() step cannot follow %s",
prev.getClass().getSimpleName()));
this.asAdmin().getBytecode().addStep(Symbols.from, fromVertex);
- ((FromToModulating) prev).addFrom(new GValueConstantTraversal<S,
Vertex>(fromVertex));
+ ((FromToModulating) prev).addFrom(new
GValueConstantTraversal<>(fromVertex));
return this;
}
@@ -1662,14 +1662,14 @@ public interface GraphTraversal<S, E> extends
Traversal<S, E> {
* @see <a
href="http://tinkerpop.apache.org/docs/${project.version}/reference/#addedge-step"
target="_blank">Reference Documentation - From Step</a>
* @since 3.8.0
*/
- public default GraphTraversal<S, E> to(final GValue<Vertex> toVertex) {
+ public default GraphTraversal<S, E> to(final GValue<?> toVertex) {
final Step<?,?> prev = this.asAdmin().getEndStep();
if (!(prev instanceof FromToModulating))
throw new IllegalArgumentException(String.format(
"The to() step cannot follow %s",
prev.getClass().getSimpleName()));
this.asAdmin().getBytecode().addStep(Symbols.to, toVertex);
- ((FromToModulating) prev).addTo(new GValueConstantTraversal<S,
Vertex>(toVertex));
+ ((FromToModulating) prev).addTo(new
GValueConstantTraversal<>(toVertex));
return this;
}
@@ -1682,7 +1682,7 @@ public interface GraphTraversal<S, E> extends
Traversal<S, E> {
* @see <a
href="http://tinkerpop.apache.org/docs/${project.version}/reference/#addedge-step"
target="_blank">Reference Documentation - From Step</a>
* @since 3.1.0-incubating
*/
- public default GraphTraversal<S, E> to(final Traversal<?, Object>
toVertex) {
+ public default GraphTraversal<S, E> to(final Traversal<?, ?> toVertex) {
final Step<?,?> prev = this.asAdmin().getEndStep();
if (!(prev instanceof FromToModulating))
throw new IllegalArgumentException(String.format(
@@ -1702,7 +1702,7 @@ public interface GraphTraversal<S, E> extends
Traversal<S, E> {
* @see <a
href="http://tinkerpop.apache.org/docs/${project.version}/reference/#addedge-step"
target="_blank">Reference Documentation - From Step</a>
* @since 3.1.0-incubating
*/
- public default GraphTraversal<S, E> from(final Traversal<?, Object>
fromVertex) {
+ public default GraphTraversal<S, E> from(final Traversal<?, ?> fromVertex)
{
final Step<?,?> prev = this.asAdmin().getEndStep();
if (!(prev instanceof FromToModulating))
throw new IllegalArgumentException(String.format(
@@ -1722,13 +1722,7 @@ public interface GraphTraversal<S, E> extends
Traversal<S, E> {
* @see <a
href="http://tinkerpop.apache.org/docs/${project.version}/reference/#addedge-step"
target="_blank">Reference Documentation - From Step</a>
* @since 3.3.0
*/
- public default GraphTraversal<S, E> to(final Object toVertex) {
- if (toVertex instanceof String) {
- return this.to((String) toVertex);
- } else if (toVertex instanceof Traversal) {
- this.to((Traversal<?, Object>)toVertex);
- return this;
- }
+ public default GraphTraversal<S, E> to(final Vertex toVertex) {
final Step<?,?> prev = this.asAdmin().getEndStep();
if (!(prev instanceof FromToModulating))
throw new IllegalArgumentException(String.format(
@@ -1741,34 +1735,6 @@ public interface GraphTraversal<S, E> extends
Traversal<S, E> {
return this;
}
- /**
- * When used as a modifier to {@link #addE(String)} this method specifies
the traversal to use for selecting the
- * outgoing vertex of the newly added {@link Edge}.
- *
- * @param fromVertex the vertex for selecting the outgoing vertex
- * @return the traversal with the modified {@link AddEdgeStepContract}
- * @see <a
href="http://tinkerpop.apache.org/docs/${project.version}/reference/#addedge-step"
target="_blank">Reference Documentation - From Step</a>
- * @since 3.3.0
- */
- public default GraphTraversal<S, E> from(final Object fromVertex) {
- if (fromVertex instanceof String) {
- return this.from((String) fromVertex);
- } else if (fromVertex instanceof Traversal) {
- this.from((Traversal<?, Object>)fromVertex);
- return this;
- }
- final Step<?,?> prev = this.asAdmin().getEndStep();
- if (!(prev instanceof FromToModulating))
- throw new IllegalArgumentException(String.format(
- "The from() step cannot follow %s",
prev.getClass().getSimpleName()));
-
- this.asAdmin().getBytecode().addStep(Symbols.from, fromVertex);
- ((FromToModulating) prev).addFrom(fromVertex instanceof GValue ?
- new GValueConstantTraversal<>((GValue<Object>) fromVertex) :
- __.constant(fromVertex).asAdmin());
- return this;
- }
-
/**
* Map the {@link Traverser} to a {@link Double} according to the
mathematical expression provided in the argument.
*
diff --git
a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/map/AbstractAddElementStepPlaceholder.java
b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/map/AbstractAddElementStepPlaceholder.java
index 66a3fca8fe..82e1b39f93 100644
---
a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/map/AbstractAddElementStepPlaceholder.java
+++
b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/map/AbstractAddElementStepPlaceholder.java
@@ -20,7 +20,6 @@ package
org.apache.tinkerpop.gremlin.process.traversal.step.map;
import org.apache.tinkerpop.gremlin.process.traversal.Traversal;
import org.apache.tinkerpop.gremlin.process.traversal.Traverser;
-import org.apache.tinkerpop.gremlin.process.traversal.lambda.ConstantTraversal;
import
org.apache.tinkerpop.gremlin.process.traversal.lambda.GValueConstantTraversal;
import org.apache.tinkerpop.gremlin.process.traversal.step.GValue;
import org.apache.tinkerpop.gremlin.process.traversal.step.GValueHolder;
diff --git
a/gremlin-core/src/test/java/org/apache/tinkerpop/gremlin/process/traversal/step/TraversalParentTest.java
b/gremlin-core/src/test/java/org/apache/tinkerpop/gremlin/process/traversal/step/TraversalParentTest.java
index 1ed4d14bcd..d69eef0029 100644
---
a/gremlin-core/src/test/java/org/apache/tinkerpop/gremlin/process/traversal/step/TraversalParentTest.java
+++
b/gremlin-core/src/test/java/org/apache/tinkerpop/gremlin/process/traversal/step/TraversalParentTest.java
@@ -207,12 +207,6 @@ public class TraversalParentTest {
List.of(__.constant("name"), __.constant("cole")),
null, null
},
- {AddEdgeStepContract.class,
- g.addE("label").from(1).to(2).property("name",
__.constant("cole")),
- List.of(),
- List.of(__.constant("cole"), __.constant(1),
__.constant(2)),
- null, null
- },
{AddEdgeStepContract.class,
g.addE("label").from(__.V(1)).to(__.V(2))
.property("name", __.constant("cole"))
@@ -234,15 +228,9 @@ public class TraversalParentTest {
null, null
},
{AddEdgeStepContract.class,
-
g.addE("label").from(1).to(2).property(__.constant("name"),
__.constant("cole")),
- List.of(),
- List.of(__.constant("name"), __.constant("cole"),
__.constant(1), __.constant(2)),
- null, null
- },
- {AddEdgeStepContract.class,
-
g.inject(1).addE("label").from(1).to(2).property("name", __.constant("cole")),
+
g.addE("label").from(__.V(1)).to(__.V(2)).property(__.constant("name"),
__.constant("cole")),
List.of(),
- List.of(__.constant("cole"), __.constant(1),
__.constant(2)),
+ List.of(__.constant("name"), __.constant("cole"),
__.V(1), __.V(2)),
null, null
},
{AddEdgeStepContract.class,
@@ -258,9 +246,9 @@ public class TraversalParentTest {
null, null
},
{AddEdgeStepContract.class,
-
g.inject(1).addE("label").from(1).to(2).property(__.constant("name"),
__.constant("cole")),
+
g.inject(1).addE("label").from(__.V(1)).to(__.V(2)).property(__.constant("name"),
__.constant("cole")),
List.of(),
- List.of(__.constant("name"), __.constant("cole"),
__.constant(1), __.constant(2)),
+ List.of(__.constant("name"), __.constant("cole"),
__.V(1), __.V(2)),
null, null
},
{CallStepContract.class,
diff --git
a/gremlin-core/src/test/java/org/apache/tinkerpop/gremlin/process/traversal/step/map/AddEdgeStartStepTest.java
b/gremlin-core/src/test/java/org/apache/tinkerpop/gremlin/process/traversal/step/map/AddEdgeStartStepTest.java
index 4fe528b85d..8df6682b5a 100644
---
a/gremlin-core/src/test/java/org/apache/tinkerpop/gremlin/process/traversal/step/map/AddEdgeStartStepTest.java
+++
b/gremlin-core/src/test/java/org/apache/tinkerpop/gremlin/process/traversal/step/map/AddEdgeStartStepTest.java
@@ -29,6 +29,7 @@ import
org.apache.tinkerpop.gremlin.process.traversal.Traversal;
import
org.apache.tinkerpop.gremlin.process.traversal.dsl.graph.DefaultGraphTraversal;
import org.apache.tinkerpop.gremlin.process.traversal.dsl.graph.GraphTraversal;
import
org.apache.tinkerpop.gremlin.process.traversal.dsl.graph.GraphTraversalSource;
+import org.apache.tinkerpop.gremlin.process.traversal.dsl.graph.__;
import org.apache.tinkerpop.gremlin.process.traversal.step.GValue;
import org.apache.tinkerpop.gremlin.process.traversal.step.GValueStepTest;
import org.apache.tinkerpop.gremlin.structure.Edge;
@@ -55,7 +56,7 @@ public class AddEdgeStartStepTest extends GValueStepTest {
g.addE("created").property("a", "b"),
g.addE("knows").property("a", "b").property("c", "e"),
g.addE("knows").property("c", "e"),
- g.addE("knows").from(1).to(2).property("a", "b"),
+ g.addE("knows").from(__.V(1)).to(__.V(2)).property("a", "b"),
g.addE(GValue.of("label", "knows")).property("a", "b"),
g.addE(GValue.of("label", "created")).property("a",
GValue.of("prop", "b")),
g.addE(GValue.of("label", "knows")).property("a",
GValue.of("prop1", "b")).property("c", GValue.of("prop2", "e")),
@@ -211,10 +212,10 @@ public class AddEdgeStartStepTest extends GValueStepTest {
}
@Test
- public void getGValuesNonShouldReturnEmptyCollection() {
+ public void getGValuesNoneShouldReturnEmptyCollection() {
GraphTraversal.Admin<Edge, Edge> traversal = g.addE("likes")
- .from(1)
- .to(2)
+ .from(__.V(1))
+ .to(__.V(2))
.property(T.id, "1234")
.property("rating", "great")
.asAdmin();
diff --git
a/gremlin-core/src/test/java/org/apache/tinkerpop/gremlin/process/traversal/step/map/AddEdgeStepTest.java
b/gremlin-core/src/test/java/org/apache/tinkerpop/gremlin/process/traversal/step/map/AddEdgeStepTest.java
index 0abec8d7fd..76a9e82f47 100644
---
a/gremlin-core/src/test/java/org/apache/tinkerpop/gremlin/process/traversal/step/map/AddEdgeStepTest.java
+++
b/gremlin-core/src/test/java/org/apache/tinkerpop/gremlin/process/traversal/step/map/AddEdgeStepTest.java
@@ -60,7 +60,7 @@ public class AddEdgeStepTest extends GValueStepTest {
__.addE("created").property("a", "b"),
__.addE("knows").property("a", "b").property("c", "e"),
__.addE("knows").property("c", "e"),
- __.addE("knows").from(1).to(2).property("a", "b"),
+ __.addE("knows").from(__.V(1)).to(__.V(2)).property("a", "b"),
__.addE(GValue.of("label", "knows")).property("a", "b"),
__.addE(GValue.of("label", "created")).property("a",
GValue.of("prop", "b")),
__.addE(GValue.of("label", "knows")).property("a",
GValue.of("prop1", "b")).property("c", GValue.of("prop2", "e")),
@@ -304,10 +304,10 @@ public class AddEdgeStepTest extends GValueStepTest {
}
@Test
- public void getGValuesNonShouldReturnEmptyCollection() {
+ public void getGValuesNoneShouldReturnEmptyCollection() {
GraphTraversal.Admin<Object, Edge> traversal = __.addE("likes")
- .from(1)
- .to(2)
+ .from(__.V(1))
+ .to(__.V(2))
.property(T.id, "1234")
.property("rating", "great")
.asAdmin();
diff --git a/gremlin-dotnet/test/Gremlin.Net.IntegrationTest/Gherkin/Gremlin.cs
b/gremlin-dotnet/test/Gremlin.Net.IntegrationTest/Gherkin/Gremlin.cs
index 174c7c385b..abb46e1776 100644
--- a/gremlin-dotnet/test/Gremlin.Net.IntegrationTest/Gherkin/Gremlin.cs
+++ b/gremlin-dotnet/test/Gremlin.Net.IntegrationTest/Gherkin/Gremlin.cs
@@ -879,9 +879,9 @@ namespace Gremlin.Net.IntegrationTest.Gherkin
{"g_addV_asXfirstX_repeatXaddEXnextX_toXaddVX_inVX_timesX5X_addEXnextX_toXselectXfirstXX",
new List<Func<GraphTraversalSource, IDictionary<string, object>, ITraversal>>
{(g,p)
=>g.AddV().As("first").Repeat(__.AddE("next").To(__.AddV()).InV()).Times(5).AddE("next").To(__.Select<object>("first")),
(g,p) =>g.V(), (g,p) =>g.E(), (g,p) =>g.E().HasLabel("next"), (g,p)
=>g.V().Limit<object>(1).BothE(), (g,p) =>g.V().Limit<object>(1).InE(), (g,p)
=>g.V().Limit<object>(1).OutE()}},
{"g_V_hasXname_markoX_asXaX_outEXcreatedX_asXbX_inV_addEXselectXbX_labelX_toXaX",
new List<Func<GraphTraversalSource, IDictionary<string, object>, ITraversal>>
{(g,p) =>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("softwar [...]
{"g_addEXV_outE_label_groupCount_orderXlocalX_byXvalues_descX_selectXkeysX_unfold_limitX1XX_fromXV_hasXname_vadasXX_toXV_hasXname_lopXX",
new List<Func<GraphTraversalSource, IDictionary<string, object>, ITraversal>>
{(g,p) =>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("nam [...]
- {"g_addEXknowsX_fromXaX_toXbX_propertyXweight_0_1X", new
List<Func<GraphTraversalSource, IDictionary<string, object>, ITraversal>>
{(g,p) =>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("software").Property("name", "ripple" [...]
- {"g_addEXknowsvarX_fromXaX_toXbX_propertyXweight_0_1X", new
List<Func<GraphTraversalSource, IDictionary<string, object>, ITraversal>>
{(g,p) =>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("software").Property("name", "ripp [...]
- {"g_VXaX_addEXknowsX_toXbX_propertyXweight_0_1X", new
List<Func<GraphTraversalSource, IDictionary<string, object>, ITraversal>>
{(g,p) =>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("software").Property("name", "ripple").P [...]
+ {"g_addEXknowsX_fromXaX_toXbX_propertyXweight_0_1X", new
List<Func<GraphTraversalSource, IDictionary<string, object>, ITraversal>>
{(g,p) =>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("software").Property("name", "ripple" [...]
+ {"g_addEXknowsvarX_fromXaX_toXbX_propertyXweight_0_1X", new
List<Func<GraphTraversalSource, IDictionary<string, object>, ITraversal>>
{(g,p) =>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("software").Property("name", "ripp [...]
+ {"g_VXaX_addEXknowsX_toXbX_propertyXweight_0_1X", new
List<Func<GraphTraversalSource, IDictionary<string, object>, ITraversal>>
{(g,p) =>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("software").Property("name", "ripple").P [...]
{"g_addEXknowsXpropertyXweight_nullXfromXV_hasXname_markoXX_toXV_hasXname_vadasXX",
new List<Func<GraphTraversalSource, IDictionary<string, object>, ITraversal>>
{(g,p) =>g.AddV("person").Property("name", "marko").Property("age",
29).AddV("person").Property("name", "vadas").Property("age", 27), (g,p)
=>g.AddE("knows").Property("weight", null).From(__.V().Has("name",
"marko")).To(__.V().Has("name", "vadas")), (g,p) =>g.E().Has("knows", "weight",
(object) null)}},
{"g_addEXknowsvarXpropertyXweight_nullXfromXV_hasXname_markoXX_toXV_hasXname_vadasXX",
new List<Func<GraphTraversalSource, IDictionary<string, object>, ITraversal>>
{(g,p) =>g.AddV("person").Property("name", "marko").Property("age",
29).AddV("person").Property("name", "vadas").Property("age", 27), (g,p)
=>g.AddE((string) p["xx1"]).Property("weight", null).From(__.V().Has("name",
"marko")).To(__.V().Has("name", "vadas")), (g,p) =>g.E().Has("knows", "weight",
(object) null)}},
{"g_unionXaddEXknowsvarXpropertyXweight_nullXfromXV_hasXname_markoXX_toXV_hasXname_vadasXXX",
new List<Func<GraphTraversalSource, IDictionary<string, object>, ITraversal>>
{(g,p) =>g.AddV("person").Property("name", "marko").Property("age",
29).AddV("person").Property("name", "vadas").Property("age", 27), (g,p)
=>g.Union<object>(__.AddE((string) p["xx1"]).Property("weight",
1).From(__.V().Has("name", "marko")).To(__.V().Has("name", "vadas"))), (g,p)
=>g.E().Has("knows", "we [...]
diff --git a/gremlin-go/driver/cucumber/gremlin.go
b/gremlin-go/driver/cucumber/gremlin.go
index 2db3eaa111..5f80cdf7bc 100644
--- a/gremlin-go/driver/cucumber/gremlin.go
+++ b/gremlin-go/driver/cucumber/gremlin.go
@@ -849,9 +849,9 @@ var translationMap = map[string][]func(g
*gremlingo.GraphTraversalSource, p map[
"g_addV_asXfirstX_repeatXaddEXnextX_toXaddVX_inVX_timesX5X_addEXnextX_toXselectXfirstXX":
{func(g *gremlingo.GraphTraversalSource, p map[string]interface{})
*gremlingo.GraphTraversal {return
g.AddV().As("first").Repeat(gremlingo.T__.AddE("next").To(gremlingo.T__.AddV()).InV()).Times(5).AddE("next").To(gremlingo.T__.Select("first"))},
func(g *gremlingo.GraphTraversalSource, p map[string]interface{})
*gremlingo.GraphTraversal {return g.V()}, func(g
*gremlingo.GraphTraversalSource, p ma [...]
"g_V_hasXname_markoX_asXaX_outEXcreatedX_asXbX_inV_addEXselectXbX_labelX_toXaX":
{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("softw [...]
"g_addEXV_outE_label_groupCount_orderXlocalX_byXvalues_descX_selectXkeysX_unfold_limitX1XX_fromXV_hasXname_vadasXX_toXV_hasXname_lopXX":
{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("n [...]
- "g_addEXknowsX_fromXaX_toXbX_propertyXweight_0_1X": {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("software").Property("name", "rippl
[...]
- "g_addEXknowsvarX_fromXaX_toXbX_propertyXweight_0_1X": {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("software").Property("name", "ri
[...]
- "g_VXaX_addEXknowsX_toXbX_propertyXweight_0_1X": {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("software").Property("name",
"ripple") [...]
+ "g_addEXknowsX_fromXaX_toXbX_propertyXweight_0_1X": {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("software").Property("name", "rippl
[...]
+ "g_addEXknowsvarX_fromXaX_toXbX_propertyXweight_0_1X": {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("software").Property("name", "ri
[...]
+ "g_VXaX_addEXknowsX_toXbX_propertyXweight_0_1X": {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("software").Property("name",
"ripple") [...]
"g_addEXknowsXpropertyXweight_nullXfromXV_hasXname_markoXX_toXV_hasXname_vadasXX":
{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)}, func(g *gremlingo.GraphTraversalSource, p
map[string]interface{}) *gremlingo.GraphTraversal {return
g.AddE("knows").Property("weight", nil).From(gremlingo.T__.V().Has("name", "ma
[...]
"g_addEXknowsvarXpropertyXweight_nullXfromXV_hasXname_markoXX_toXV_hasXname_vadasXX":
{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)}, func(g *gremlingo.GraphTraversalSource, p
map[string]interface{}) *gremlingo.GraphTraversal {return
g.AddE(p["xx1"]).Property("weight", nil).From(gremlingo.T__.V().Has("name",
[...]
"g_unionXaddEXknowsvarXpropertyXweight_nullXfromXV_hasXname_markoXX_toXV_hasXname_vadasXXX":
{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)}, func(g *gremlingo.GraphTraversalSource, p
map[string]interface{}) *gremlingo.GraphTraversal {return
g.Union(gremlingo.T__.AddE(p["xx1"]).Property("weight", 1).From(grem [...]
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 7412f18ec4..72140c39ef 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
@@ -880,9 +880,9 @@ const gremlins = {
g_addV_asXfirstX_repeatXaddEXnextX_toXaddVX_inVX_timesX5X_addEXnextX_toXselectXfirstXX:
[function({g}) { return
g.addV().as("first").repeat(__.addE("next").to(__.addV()).inV()).times(5).addE("next").to(__.select("first"))
}, function({g}) { return g.V() }, function({g}) { return g.E() },
function({g}) { return g.E().hasLabel("next") }, function({g}) { return
g.V().limit(1).bothE() }, function({g}) { return g.V().limit(1).inE() },
function({g}) { return g.V().limit(1).outE() }],
g_V_hasXname_markoX_asXaX_outEXcreatedX_asXbX_inV_addEXselectXbX_labelX_toXaX:
[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").as("lop").addV("person").property("name",
"josh").property("age", 32).as("josh").addV("software").property("name",
"ripple").property("lang", "java").as("ripple").ad [...]
g_addEXV_outE_label_groupCount_orderXlocalX_byXvalues_descX_selectXkeysX_unfold_limitX1XX_fromXV_hasXname_vadasXX_toXV_hasXname_lopXX:
[function({g, vid2}) { 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("software").property("n [...]
- g_addEXknowsX_fromXaX_toXbX_propertyXweight_0_1X: [function({g, xx1, vid6,
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("software").property("name", "ripple").property("lang",
"java").as("ripple").addV("person").prope [...]
- g_addEXknowsvarX_fromXaX_toXbX_propertyXweight_0_1X: [function({g, xx1,
vid6, xx2, 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("software").property("name",
"ripple").property("lang", "java").as("ripple").addV("person [...]
- g_VXaX_addEXknowsX_toXbX_propertyXweight_0_1X: [function({g, xx1, vid6,
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("software").property("name", "ripple").property("lang",
"java").as("ripple").addV("person").property [...]
+ g_addEXknowsX_fromXaX_toXbX_propertyXweight_0_1X: [function({g, xx1, vid6,
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("software").property("name", "ripple").property("lang",
"java").as("ripple").addV("person").prope [...]
+ g_addEXknowsvarX_fromXaX_toXbX_propertyXweight_0_1X: [function({g, xx1,
vid6, xx2, 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("software").property("name",
"ripple").property("lang", "java").as("ripple").addV("person [...]
+ g_VXaX_addEXknowsX_toXbX_propertyXweight_0_1X: [function({g, xx1, vid6,
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("software").property("name", "ripple").property("lang",
"java").as("ripple").addV("person").property [...]
g_addEXknowsXpropertyXweight_nullXfromXV_hasXname_markoXX_toXV_hasXname_vadasXX:
[function({g}) { return g.addV("person").property("name",
"marko").property("age", 29).addV("person").property("name",
"vadas").property("age", 27) }, function({g}) { return
g.addE("knows").property("weight", null).from_(__.V().has("name",
"marko")).to(__.V().has("name", "vadas")) }, function({g}) { return
g.E().has("knows", "weight", null) }],
g_addEXknowsvarXpropertyXweight_nullXfromXV_hasXname_markoXX_toXV_hasXname_vadasXX:
[function({g, xx1}) { return g.addV("person").property("name",
"marko").property("age", 29).addV("person").property("name",
"vadas").property("age", 27) }, function({g, xx1}) { return
g.addE(xx1).property("weight", null).from_(__.V().has("name",
"marko")).to(__.V().has("name", "vadas")) }, function({g, xx1}) { return
g.E().has("knows", "weight", null) }],
g_unionXaddEXknowsvarXpropertyXweight_nullXfromXV_hasXname_markoXX_toXV_hasXname_vadasXXX:
[function({g, xx1}) { return g.addV("person").property("name",
"marko").property("age", 29).addV("person").property("name",
"vadas").property("age", 27) }, function({g, xx1}) { return
g.union(__.addE(xx1).property("weight", 1).from_(__.V().has("name",
"marko")).to(__.V().has("name", "vadas"))) }, function({g, xx1}) { return
g.E().has("knows", "weight", 1) }],
diff --git a/gremlin-language/src/main/antlr4/Gremlin.g4
b/gremlin-language/src/main/antlr4/Gremlin.g4
index 395eb0b8f4..b11ca3aa3b 100644
--- a/gremlin-language/src/main/antlr4/Gremlin.g4
+++ b/gremlin-language/src/main/antlr4/Gremlin.g4
@@ -530,7 +530,6 @@ traversalMethod_format
traversalMethod_from
: K_FROM LPAREN stringLiteral RPAREN #traversalMethod_from_String
- | K_FROM LPAREN genericArgument RPAREN #traversalMethod_from_GenricArgument
| K_FROM LPAREN nestedTraversal RPAREN #traversalMethod_from_Traversal
;
@@ -881,7 +880,6 @@ traversalMethod_times
traversalMethod_to
: K_TO LPAREN traversalDirection (COMMA stringNullableArgumentVarargs)?
RPAREN #traversalMethod_to_Direction_String
| K_TO LPAREN stringLiteral RPAREN #traversalMethod_to_String
- | K_TO LPAREN genericArgument RPAREN #traversalMethod_to_GenricArgument
| K_TO LPAREN nestedTraversal RPAREN #traversalMethod_to_Traversal
;
diff --git a/gremlin-python/src/main/python/radish/gremlin.py
b/gremlin-python/src/main/python/radish/gremlin.py
index 9e9c26988d..1d4dad5b72 100644
--- a/gremlin-python/src/main/python/radish/gremlin.py
+++ b/gremlin-python/src/main/python/radish/gremlin.py
@@ -852,9 +852,9 @@ world.gremlins = {
'g_addV_asXfirstX_repeatXaddEXnextX_toXaddVX_inVX_timesX5X_addEXnextX_toXselectXfirstXX':
[(lambda
g:g.add_v().as_('first').repeat(__.add_e('next').to(__.add_v()).in_v()).times(5).add_e('next').to(__.select('first'))),
(lambda g:g.V()), (lambda g:g.E()), (lambda g:g.E().has_label('next')),
(lambda g:g.V().limit(1).both_e()), (lambda g:g.V().limit(1).in_e()), (lambda
g:g.V().limit(1).out_e())],
'g_V_hasXname_markoX_asXaX_outEXcreatedX_asXbX_inV_addEXselectXbX_labelX_toXaX':
[(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').as_('lop').add_v('person').property('name',
'josh').property('age', 32).as_('josh').add_v('software').property('name',
'ripple').property('lang', 'java').as_('ripple' [...]
'g_addEXV_outE_label_groupCount_orderXlocalX_byXvalues_descX_selectXkeysX_unfold_limitX1XX_fromXV_hasXname_vadasXX_toXV_hasXname_lopXX':
[(lambda g, vid2=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('software').property [...]
- 'g_addEXknowsX_fromXaX_toXbX_propertyXweight_0_1X': [(lambda g,
xx1=None,vid6=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('software').property('name',
'ripple').property('lang', 'java').as_('ripple').add_v('p [...]
- 'g_addEXknowsvarX_fromXaX_toXbX_propertyXweight_0_1X': [(lambda g,
xx1=None,vid6=None,xx2=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('software').property('name',
'ripple').property('lang', 'java').as_('rippl [...]
- 'g_VXaX_addEXknowsX_toXbX_propertyXweight_0_1X': [(lambda g,
xx1=None,vid6=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('software').property('name',
'ripple').property('lang', 'java').as_('ripple').add_v('pers [...]
+ 'g_addEXknowsX_fromXaX_toXbX_propertyXweight_0_1X': [(lambda g,
xx1=None,vid6=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('software').property('name',
'ripple').property('lang', 'java').as_('ripple').add_v('p [...]
+ 'g_addEXknowsvarX_fromXaX_toXbX_propertyXweight_0_1X': [(lambda g,
xx1=None,vid6=None,xx2=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('software').property('name',
'ripple').property('lang', 'java').as_('rippl [...]
+ 'g_VXaX_addEXknowsX_toXbX_propertyXweight_0_1X': [(lambda g,
xx1=None,vid6=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('software').property('name',
'ripple').property('lang', 'java').as_('ripple').add_v('pers [...]
'g_addEXknowsXpropertyXweight_nullXfromXV_hasXname_markoXX_toXV_hasXname_vadasXX':
[(lambda g:g.add_v('person').property('name', 'marko').property('age',
29).add_v('person').property('name', 'vadas').property('age', 27)), (lambda
g:g.add_e('knows').property('weight', None).from_(__.V().has('name',
'marko')).to(__.V().has('name', 'vadas'))), (lambda g:g.E().has('knows',
'weight', None))],
'g_addEXknowsvarXpropertyXweight_nullXfromXV_hasXname_markoXX_toXV_hasXname_vadasXX':
[(lambda g, xx1=None:g.add_v('person').property('name',
'marko').property('age', 29).add_v('person').property('name',
'vadas').property('age', 27)), (lambda g,
xx1=None:g.add_e(xx1).property('weight', None).from_(__.V().has('name',
'marko')).to(__.V().has('name', 'vadas'))), (lambda g,
xx1=None:g.E().has('knows', 'weight', None))],
'g_unionXaddEXknowsvarXpropertyXweight_nullXfromXV_hasXname_markoXX_toXV_hasXname_vadasXXX':
[(lambda g, xx1=None:g.add_v('person').property('name',
'marko').property('age', 29).add_v('person').property('name',
'vadas').property('age', 27)), (lambda g,
xx1=None:g.union(__.add_e(xx1).property('weight', 1).from_(__.V().has('name',
'marko')).to(__.V().has('name', 'vadas')))), (lambda g,
xx1=None:g.E().has('knows', 'weight', 1))],
diff --git
a/gremlin-test/src/main/resources/org/apache/tinkerpop/gremlin/test/features/map/AddEdge.feature
b/gremlin-test/src/main/resources/org/apache/tinkerpop/gremlin/test/features/map/AddEdge.feature
index aa04e6a6b8..aa07d72dcc 100644
---
a/gremlin-test/src/main/resources/org/apache/tinkerpop/gremlin/test/features/map/AddEdge.feature
+++
b/gremlin-test/src/main/resources/org/apache/tinkerpop/gremlin/test/features/map/AddEdge.feature
@@ -359,7 +359,7 @@ Feature: Step - addE()
And the graph should return 1 for count of "g.V(vid2).outE(\"created\")"
And the graph should return 1 for count of
"g.V(vid2).out(\"created\").has(\"name\",\"lop\")"
- Scenario: g_addEXknowsX_fromXaX_toXbX_propertyXweight_0_1X
+ Scenario: g_addEXknowsX_fromXVXvid1XX_toXVXvid6XX_propertyXweight_0_1X
Given the empty graph
And the graph initializer of
"""
@@ -381,7 +381,7 @@ Feature: Step - addE()
And using the parameter xx1 defined as "d[0.1].d"
And the traversal of
"""
- g.addE("knows").from(vid1).to(vid6).property("weight", xx1)
+ g.addE("knows").from(V(vid1)).to(V(vid6)).property("weight", xx1)
"""
When iterated to list
Then the result should have a count of 1
@@ -389,7 +389,7 @@ Feature: Step - addE()
And the graph should return 3 for count of "g.V(vid1).outE(\"knows\")"
And the graph should return 1 for count of
"g.V(vid1).out(\"knows\").has(\"name\",\"peter\")"
- Scenario: g_addEXknowsvarX_fromXaX_toXbX_propertyXweight_0_1X
+ Scenario: g_addEXknowsvarX_fromXVXvid1XX_toXVXvid6XX_propertyXweight_0_1X
Given the empty graph
And the graph initializer of
"""
@@ -412,7 +412,7 @@ Feature: Step - addE()
And using the parameter xx2 defined as "d[0.1].d"
And the traversal of
"""
- g.addE(xx1).from(vid1).to(vid6).property("weight", xx2)
+ g.addE(xx1).from(V(vid1)).to(V(vid6)).property("weight", xx2)
"""
When iterated to list
Then the result should have a count of 1
@@ -442,7 +442,7 @@ Feature: Step - addE()
And using the parameter xx1 defined as "d[0.1].d"
And the traversal of
"""
- g.V(vid1).addE("knows").to(vid6).property("weight", xx1)
+ g.V(vid1).addE("knows").to(V(vid6)).property("weight", xx1)
"""
When iterated to list
Then the result should have a count of 1
diff --git
a/tinkergraph-gremlin/src/test/java/org/apache/tinkerpop/gremlin/tinkergraph/jsr223/TinkerGraphGremlinLangScriptEngineTest.java
b/tinkergraph-gremlin/src/test/java/org/apache/tinkerpop/gremlin/tinkergraph/jsr223/TinkerGraphGremlinLangScriptEngineTest.java
index 858d0aa6ed..47a422bf68 100644
---
a/tinkergraph-gremlin/src/test/java/org/apache/tinkerpop/gremlin/tinkergraph/jsr223/TinkerGraphGremlinLangScriptEngineTest.java
+++
b/tinkergraph-gremlin/src/test/java/org/apache/tinkerpop/gremlin/tinkergraph/jsr223/TinkerGraphGremlinLangScriptEngineTest.java
@@ -278,45 +278,45 @@ public class TinkerGraphGremlinLangScriptEngineTest {
TinkerFactory.createModern()
},
{
- "g.addE(\"knows\").from(v1).to(v2).project(\"from\",
\"to\").by(outV()).by(inV())",
+
"g.addE(\"knows\").from(V(vid1)).to(V(vid2)).project(\"from\",
\"to\").by(outV()).by(inV())",
Arrays.asList(
- Pair.of(createBindings("v1", V_MARKO, "v2", V_PETER),
Arrays.asList(
+ Pair.of(createBindings("vid1", V_MARKO.id(), "vid2",
V_PETER.id()), Arrays.asList(
Map.of("from", V_MARKO, "to", V_PETER)
)),
- Pair.of(createBindings("v1", V_JOSH, "v2", V_MARKO),
Arrays.asList(
+ Pair.of(createBindings("vid1", V_JOSH.id(), "vid2",
V_MARKO.id()), Arrays.asList(
Map.of("from", V_JOSH, "to", V_MARKO)
)),
- Pair.of(createBindings("v1", V_PETER, "v2", V_JOSH),
Arrays.asList(
+ Pair.of(createBindings("vid1", V_PETER.id(), "vid2",
V_JOSH.id()), Arrays.asList(
Map.of("from", V_PETER, "to", V_JOSH)
))
),
- TinkerGraph.open()
+ TinkerFactory.createModern()
},
{
- "g.addE(xx1).from(v1).to(v2).property(\"weight\",
xx2).project(\"label\", \"from\", \"to\",
\"weight\").by(label).by(outV()).by(inV()).by(\"weight\")",
+
"g.addE(xx1).from(V(vid1)).to(V(vid2)).property(\"weight\",
xx2).project(\"label\", \"from\", \"to\",
\"weight\").by(label).by(outV()).by(inV()).by(\"weight\")",
Arrays.asList(
- Pair.of(createBindings("xx1", "knows", "v1", V_MARKO,
"v2", V_PETER, "xx2", 0.1d), Arrays.asList(
+ Pair.of(createBindings("xx1", "knows", "vid1", 1,
"vid2", 6, "xx2", 0.1d), Arrays.asList(
Map.of("label", "knows", "from", V_MARKO,
"to", V_PETER, "weight", 0.1d)
)),
- Pair.of(createBindings("xx1", "created", "v1", V_JOSH,
"v2", V_MARKO, "xx2", 0.2d), Arrays.asList(
+ Pair.of(createBindings("xx1", "created", "vid1",
V_JOSH.id(), "vid2", V_MARKO.id(), "xx2", 0.2d), Arrays.asList(
Map.of("label", "created", "from", V_JOSH,
"to", V_MARKO, "weight", 0.2d)
)),
- Pair.of(createBindings("xx1", "knows", "v1", V_PETER,
"v2", V_JOSH, "xx2", 0.3d), Arrays.asList(
+ Pair.of(createBindings("xx1", "knows", "vid1",
V_PETER.id(), "vid2", V_JOSH.id(), "xx2", 0.3d), Arrays.asList(
Map.of("label", "knows", "from", V_PETER,
"to", V_JOSH, "weight", 0.3d)
))
),
- TinkerGraph.open()
+ TinkerFactory.createModern()
},
{
- "g.V(v1).addE(\"knows\").to(v2).project(\"from\",
\"to\").by(outV()).by(inV())",
+ "g.V(v1).addE(\"knows\").to(V(vid2)).project(\"from\",
\"to\").by(outV()).by(inV())",
Arrays.asList(
- Pair.of(createBindings("v1", V_MARKO, "v2",
V_PETER), Arrays.asList(
+ Pair.of(createBindings("v1", V_MARKO, "vid2",
V_PETER.id()), Arrays.asList(
Map.of("from", V_MARKO, "to", V_PETER)
)),
- Pair.of(createBindings("v1", V_JOSH, "v2",
V_MARKO), Arrays.asList(
+ Pair.of(createBindings("v1", V_JOSH, "vid2",
V_MARKO.id()), Arrays.asList(
Map.of("from", V_JOSH, "to", V_MARKO)
)),
- Pair.of(createBindings("v1", V_PETER, "v2",
V_JOSH), Arrays.asList(
+ Pair.of(createBindings("v1", V_PETER, "vid2",
V_JOSH.id()), Arrays.asList(
Map.of("from", V_PETER, "to", V_JOSH)
))
),