You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@tinkerpop.apache.org by ok...@apache.org on 2017/10/19 17:35:56 UTC

[2/2] tinkerpop git commit: fixed an old hack in GroovyTranslator and PythonTranslator that makes it possible to translate Elements to their detached form. Added an InjectTest that demonstrates proper functioning for the respective XXXTranslators.

fixed an old hack in GroovyTranslator and PythonTranslator that makes it possible to translate Elements to their detached form. Added an InjectTest that demonstrates proper functioning for the respective XXXTranslators.


Project: http://git-wip-us.apache.org/repos/asf/tinkerpop/repo
Commit: http://git-wip-us.apache.org/repos/asf/tinkerpop/commit/ff49cbea
Tree: http://git-wip-us.apache.org/repos/asf/tinkerpop/tree/ff49cbea
Diff: http://git-wip-us.apache.org/repos/asf/tinkerpop/diff/ff49cbea

Branch: refs/heads/tp32
Commit: ff49cbea3d388592f911323ff2fd9144c2665aa6
Parents: 79b621c
Author: Marko A. Rodriguez <ok...@gmail.com>
Authored: Thu Oct 19 10:26:39 2017 -0600
Committer: Marko A. Rodriguez <ok...@gmail.com>
Committed: Thu Oct 19 10:26:39 2017 -0600

----------------------------------------------------------------------
 CHANGELOG.asciidoc                              |  1 +
 .../step/sideEffect/GroovyInjectTest.groovy     |  5 ++++
 .../gremlin/groovy/jsr223/GroovyTranslator.java | 31 ++++++++++++++++++--
 .../gremlin/python/jsr223/PythonTranslator.java | 22 ++++++++++++--
 .../traversal/step/sideEffect/InjectTest.java   | 16 +++++++++-
 5 files changed, 68 insertions(+), 7 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/ff49cbea/CHANGELOG.asciidoc
----------------------------------------------------------------------
diff --git a/CHANGELOG.asciidoc b/CHANGELOG.asciidoc
index 778660e..07f1d69 100644
--- a/CHANGELOG.asciidoc
+++ b/CHANGELOG.asciidoc
@@ -23,6 +23,7 @@ image::https://raw.githubusercontent.com/apache/tinkerpop/master/docs/static/ima
 [[release-3-2-7]]
 === TinkerPop 3.2.7 (Release Date: NOT OFFICIALLY RELEASED YET)
 
+* Fixed an old hack in `GroovyTranslator` and `PythonTranslator` where `Elements` were being mapped to their id only.
 * Fixed an "attachement"-bug in `InjectStep` with a solution generalized to `StartStep`.
 * Truncate the script in error logs and error return messages for "Method code too large" errors in Gremlin Server.
 * Fixed a bug in `LambdaRestrictionStrategy` where it was too eager to consider a step as being a lambda step.

http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/ff49cbea/gremlin-groovy-test/src/main/groovy/org/apache/tinkerpop/gremlin/process/traversal/step/sideEffect/GroovyInjectTest.groovy
----------------------------------------------------------------------
diff --git a/gremlin-groovy-test/src/main/groovy/org/apache/tinkerpop/gremlin/process/traversal/step/sideEffect/GroovyInjectTest.groovy b/gremlin-groovy-test/src/main/groovy/org/apache/tinkerpop/gremlin/process/traversal/step/sideEffect/GroovyInjectTest.groovy
index fb8efb2..06b79a2 100644
--- a/gremlin-groovy-test/src/main/groovy/org/apache/tinkerpop/gremlin/process/traversal/step/sideEffect/GroovyInjectTest.groovy
+++ b/gremlin-groovy-test/src/main/groovy/org/apache/tinkerpop/gremlin/process/traversal/step/sideEffect/GroovyInjectTest.groovy
@@ -38,5 +38,10 @@ public abstract class GroovyInjectTest {
         public Traversal<Vertex, Path> get_g_VX1X_out_name_injectXdanielX_asXaX_mapXlengthX_path(final Object v1Id) {
             new ScriptTraversal<>(g, "gremlin-groovy", "g.V(v1Id).out().name.inject('daniel').as('a').map { it.length() }.path", "v1Id", v1Id);
         }
+
+        @Override
+        public Traversal<Vertex, String> get_g_VX1X_injectXg_VX4XX_out_name(final Object v1Id, final Object v4Id) {
+            new ScriptTraversal<>(g, "gremlin-groovy", "g.V(v1Id).inject(g.V(v4Id).next()).out.name", "v1Id", v1Id, "v4Id", v4Id)
+        }
     }
 }

http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/ff49cbea/gremlin-groovy/src/main/java/org/apache/tinkerpop/gremlin/groovy/jsr223/GroovyTranslator.java
----------------------------------------------------------------------
diff --git a/gremlin-groovy/src/main/java/org/apache/tinkerpop/gremlin/groovy/jsr223/GroovyTranslator.java b/gremlin-groovy/src/main/java/org/apache/tinkerpop/gremlin/groovy/jsr223/GroovyTranslator.java
index 85490ae..b6410ec 100644
--- a/gremlin-groovy/src/main/java/org/apache/tinkerpop/gremlin/groovy/jsr223/GroovyTranslator.java
+++ b/gremlin-groovy/src/main/java/org/apache/tinkerpop/gremlin/groovy/jsr223/GroovyTranslator.java
@@ -31,7 +31,9 @@ import org.apache.tinkerpop.gremlin.process.traversal.step.TraversalOptionParent
 import org.apache.tinkerpop.gremlin.process.traversal.strategy.TraversalStrategyProxy;
 import org.apache.tinkerpop.gremlin.process.traversal.util.ConnectiveP;
 import org.apache.tinkerpop.gremlin.process.traversal.util.OrP;
+import org.apache.tinkerpop.gremlin.structure.Edge;
 import org.apache.tinkerpop.gremlin.structure.Element;
+import org.apache.tinkerpop.gremlin.structure.Vertex;
 import org.apache.tinkerpop.gremlin.structure.VertexProperty;
 import org.apache.tinkerpop.gremlin.structure.util.StringFactory;
 import org.apache.tinkerpop.gremlin.util.function.Lambda;
@@ -157,9 +159,32 @@ public final class GroovyTranslator implements Translator.ScriptTranslator {
             return "TraversalOptionParent.Pick." + object.toString();
         else if (object instanceof Enum)
             return ((Enum) object).getDeclaringClass().getSimpleName() + "." + object.toString();
-        else if (object instanceof Element)
-            return convertToString(((Element) object).id()); // hack
-        else if (object instanceof Lambda) {
+        else if (object instanceof Element) {
+            if (object instanceof Vertex) {
+                final Vertex vertex = (Vertex) object;
+                return "new org.apache.tinkerpop.gremlin.structure.util.detached.DetachedVertex(" +
+                        convertToString(vertex.id()) + "," +
+                        convertToString(vertex.label()) + ", Collections.emptyMap())";
+            } else if (object instanceof Edge) {
+                final Edge edge = (Edge) object;
+                return "new org.apache.tinkerpop.gremlin.structure.util.detached.DetachedEdge(" +
+                        convertToString(edge.id()) + "," +
+                        convertToString(edge.label()) + "," +
+                        "Collections.emptyMap()," +
+                        convertToString(edge.outVertex().id()) + "," +
+                        convertToString(edge.outVertex().label()) + "," +
+                        convertToString(edge.inVertex().id()) + "," +
+                        convertToString(edge.inVertex().label()) + ")";
+            } else {// VertexProperty
+                final VertexProperty vertexProperty = (VertexProperty) object;
+                return "new org.apache.tinkerpop.gremlin.structure.util.detached.DetachedVertexProperty(" +
+                        convertToString(vertexProperty.id()) + "," +
+                        convertToString(vertexProperty.label()) + "," +
+                        convertToString(vertexProperty.value()) + "," +
+                        "Collections.emptyMap()," +
+                        convertToString(vertexProperty.element()) + ")";
+            }
+        } else if (object instanceof Lambda) {
             final String lambdaString = ((Lambda) object).getLambdaScript().trim();
             return lambdaString.startsWith("{") ? lambdaString : "{" + lambdaString + "}";
         } else if (object instanceof TraversalStrategyProxy) {

http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/ff49cbea/gremlin-python/src/main/java/org/apache/tinkerpop/gremlin/python/jsr223/PythonTranslator.java
----------------------------------------------------------------------
diff --git a/gremlin-python/src/main/java/org/apache/tinkerpop/gremlin/python/jsr223/PythonTranslator.java b/gremlin-python/src/main/java/org/apache/tinkerpop/gremlin/python/jsr223/PythonTranslator.java
index 0739c92..a5bfd25 100644
--- a/gremlin-python/src/main/java/org/apache/tinkerpop/gremlin/python/jsr223/PythonTranslator.java
+++ b/gremlin-python/src/main/java/org/apache/tinkerpop/gremlin/python/jsr223/PythonTranslator.java
@@ -33,8 +33,10 @@ import org.apache.tinkerpop.gremlin.process.traversal.step.TraversalOptionParent
 import org.apache.tinkerpop.gremlin.process.traversal.strategy.TraversalStrategyProxy;
 import org.apache.tinkerpop.gremlin.process.traversal.util.ConnectiveP;
 import org.apache.tinkerpop.gremlin.process.traversal.util.OrP;
+import org.apache.tinkerpop.gremlin.structure.Edge;
 import org.apache.tinkerpop.gremlin.structure.Element;
 import org.apache.tinkerpop.gremlin.structure.T;
+import org.apache.tinkerpop.gremlin.structure.Vertex;
 import org.apache.tinkerpop.gremlin.structure.VertexProperty;
 import org.apache.tinkerpop.gremlin.structure.util.StringFactory;
 import org.apache.tinkerpop.gremlin.util.function.Lambda;
@@ -190,9 +192,23 @@ public class PythonTranslator implements Translator.ScriptTranslator {
             return convertStatic(((Enum) object).getDeclaringClass().getSimpleName() + ".") + SymbolHelper.toPython(object.toString());
         else if (object instanceof P)
             return convertPToString((P) object, new StringBuilder()).toString();
-        else if (object instanceof Element)
-            return convertToString(((Element) object).id()); // hack
-        else if (object instanceof Lambda)
+        else if (object instanceof Element) {
+            if (object instanceof Vertex) {
+                final Vertex vertex = (Vertex) object;
+                return "Vertex(" + convertToString(vertex.id()) + "," + convertToString(vertex.label()) + ")";
+            } else if (object instanceof Edge) {
+                final Edge edge = (Edge) object;
+                return "Edge(" + convertToString(edge.id()) + ", " +
+                        "Vertex(" + convertToString(edge.outVertex().id()) + ")," +
+                        convertToString(edge.label()) +
+                        ",Vertex(" + convertToString(edge.inVertex().id()) + "))";
+            } else { // VertexProperty
+                final VertexProperty vertexProperty = (VertexProperty) object;
+                return "VertexProperty(" + convertToString(vertexProperty.id()) + "," +
+                        convertToString(vertexProperty.label()) + "," +
+                        convertToString(vertexProperty.value()) + ")";
+            }
+        } else if (object instanceof Lambda)
             return convertLambdaToString((Lambda) object);
         else
             return null == object ? "None" : object.toString();

http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/ff49cbea/gremlin-test/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/sideEffect/InjectTest.java
----------------------------------------------------------------------
diff --git a/gremlin-test/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/sideEffect/InjectTest.java b/gremlin-test/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/sideEffect/InjectTest.java
index 44eadb6..d3fc1ed 100644
--- a/gremlin-test/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/sideEffect/InjectTest.java
+++ b/gremlin-test/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/sideEffect/InjectTest.java
@@ -23,7 +23,6 @@ import org.apache.tinkerpop.gremlin.process.AbstractGremlinProcessTest;
 import org.apache.tinkerpop.gremlin.process.GremlinProcessRunner;
 import org.apache.tinkerpop.gremlin.process.traversal.Path;
 import org.apache.tinkerpop.gremlin.process.traversal.Traversal;
-import org.apache.tinkerpop.gremlin.process.traversal.dsl.graph.__;
 import org.apache.tinkerpop.gremlin.process.traversal.step.util.MapHelper;
 import org.apache.tinkerpop.gremlin.structure.Vertex;
 import org.junit.Test;
@@ -47,6 +46,8 @@ public abstract class InjectTest extends AbstractGremlinProcessTest {
 
     public abstract Traversal<Vertex, Path> get_g_VX1X_out_name_injectXdanielX_asXaX_mapXlengthX_path(final Object v1Id);
 
+    public abstract Traversal<Vertex, String> get_g_VX1X_injectXg_VX4XX_out_name(final Object v1Id, final Object v4Id);
+
     @Test
     @LoadGraphWith(MODERN)
     public void g_VX1X_out_injectXv2X_name() {
@@ -83,6 +84,14 @@ public abstract class InjectTest extends AbstractGremlinProcessTest {
         assertEquals(4, counter);
     }
 
+    @Test
+    @LoadGraphWith(MODERN)
+    public void g_VX1X_injectXg_VX4XX_out_name() {
+        final Traversal<Vertex, String> traversal = get_g_VX1X_injectXg_VX4XX_out_name(convertToVertexId("marko"), convertToVertexId("josh"));
+        printTraversalForm(traversal);
+        checkResults(Arrays.asList("ripple", "lop", "lop", "vadas", "josh"), traversal);
+    }
+
     public static class Traversals extends InjectTest {
 
         @Override
@@ -94,5 +103,10 @@ public abstract class InjectTest extends AbstractGremlinProcessTest {
         public Traversal<Vertex, Path> get_g_VX1X_out_name_injectXdanielX_asXaX_mapXlengthX_path(final Object v1Id) {
             return g.V(v1Id).out().<String>values("name").inject("daniel").as("a").map(t -> t.get().length()).path();
         }
+
+        @Override
+        public Traversal<Vertex, String> get_g_VX1X_injectXg_VX4XX_out_name(final Object v1Id, final Object v4Id) {
+            return g.V(v1Id).inject(g.V(v4Id).next()).out().values("name");
+        }
     }
 }