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 2020/08/20 11:29:52 UTC

[tinkerpop] branch TINKERPOP-2403 created (now 59e88f1)

This is an automated email from the ASF dual-hosted git repository.

spmallette pushed a change to branch TINKERPOP-2403
in repository https://gitbox.apache.org/repos/asf/tinkerpop.git.


      at 59e88f1  TINKERPOP-2403 Fixed bug in child tranversal translation for js

This branch includes the following new commits:

     new 59e88f1  TINKERPOP-2403 Fixed bug in child tranversal translation for js

The 1 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.



[tinkerpop] 01/01: TINKERPOP-2403 Fixed bug in child tranversal translation for js

Posted by sp...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

spmallette pushed a commit to branch TINKERPOP-2403
in repository https://gitbox.apache.org/repos/asf/tinkerpop.git

commit 59e88f1dd28b5b35ddae72633d1025df3b451f06
Author: Stephen Mallette <sp...@genoprime.com>
AuthorDate: Thu Aug 20 07:29:13 2020 -0400

    TINKERPOP-2403 Fixed bug in child tranversal translation for js
---
 CHANGELOG.asciidoc                                       |  2 +-
 .../gremlin-javascript/lib/process/translator.js         | 12 ++++++++----
 .../gremlin-javascript/test/unit/translator-test.js      | 16 ++++++++++++++++
 3 files changed, 25 insertions(+), 5 deletions(-)

diff --git a/CHANGELOG.asciidoc b/CHANGELOG.asciidoc
index 5bdaaaf..9d86765 100644
--- a/CHANGELOG.asciidoc
+++ b/CHANGELOG.asciidoc
@@ -23,7 +23,7 @@ image::https://raw.githubusercontent.com/apache/tinkerpop/master/docs/static/ima
 [[release-3-4-9]]
 === TinkerPop 3.4.9 (Release Date: NOT OFFICIALLY RELEASED YET)
 
-
+* Fixed bug in Javascript `Translator` that wasn't handling child traversals well.
 
 [[release-3-4-8]]
 === TinkerPop 3.4.8 (Release Date: August 3, 2020)
diff --git a/gremlin-javascript/src/main/javascript/gremlin-javascript/lib/process/translator.js b/gremlin-javascript/src/main/javascript/gremlin-javascript/lib/process/translator.js
index 32c58d7..c59a513 100644
--- a/gremlin-javascript/src/main/javascript/gremlin-javascript/lib/process/translator.js
+++ b/gremlin-javascript/src/main/javascript/gremlin-javascript/lib/process/translator.js
@@ -18,6 +18,8 @@
  */
 'use strict';
 
+const Traversal = require('./traversal').Traversal;
+
 /**
  * Class to translate glv bytecode steps into executable Gremlin-Groovy script
  */
@@ -43,8 +45,8 @@ class Translator {
    * @param {Object} bytecode The bytecode object containing step instructions.
    * @returns {string} Gremlin-Groovy script
    */
-  translate(bytecode) {
-    let script = this._traversalSource;
+  translate(bytecode, child = false) {
+    let script = child ? "__" : this._traversalSource;
     let instructions = bytecode.stepInstructions;
 
     // build the script from the glv instructions.
@@ -59,8 +61,10 @@ class Translator {
           }
 
           if (Object(params[k]) === params[k]) {
-            if (params[k].toString() === '[object Object]') {
-              Object.keys(params[k]).forEach(function(key, index) {
+            if (params[k] instanceof Traversal) {
+              script += this.translate(params[k].getBytecode(), true);
+            } else if (params[k].toString() === '[object Object]') {
+              Object.keys(params[k]).forEach(function (key, index) {
                 if (index > 0) script += ', ';
                 script += '(\'' + key + '\', ';
                 if (params[k][key] instanceof String || typeof params[k][key] === 'string') {
diff --git a/gremlin-javascript/src/main/javascript/gremlin-javascript/test/unit/translator-test.js b/gremlin-javascript/src/main/javascript/gremlin-javascript/test/unit/translator-test.js
index f8d4396..91c903e 100644
--- a/gremlin-javascript/src/main/javascript/gremlin-javascript/test/unit/translator-test.js
+++ b/gremlin-javascript/src/main/javascript/gremlin-javascript/test/unit/translator-test.js
@@ -26,6 +26,8 @@ const t = require('../../lib/process/traversal');
 const TraversalStrategies = require('../../lib/process/traversal-strategy').TraversalStrategies;
 const Bytecode = require('../../lib/process/bytecode');
 const Translator = require('../../lib/process/translator');
+const graphTraversalModule = require('../../lib/process/graph-traversal');
+const __ = graphTraversalModule.statics;
 
 describe('Translator', function () {
 
@@ -64,5 +66,19 @@ describe('Translator', function () {
       assert.ok(script);
       assert.strictEqual(script, 'g.V().hasLabel(\'person\').has(\'age\', gt(30))');
     });
+
+    it('should produce valid script representation from bytecode glv steps with child', function () {
+      const g = new graph.Graph().traversal();
+      const script = new Translator('g').translate(g.V().filter(__.outE('created')).getBytecode());
+      assert.ok(script);
+      assert.strictEqual(script, 'g.V().filter(__.outE(\'created\'))');
+    });
+
+    it('should produce valid script representation from bytecode glv steps with embedded child', function () {
+      const g = new graph.Graph().traversal();
+      const script = new Translator('g').translate(g.V().filter(__.outE('created').filter(__.has('weight'))).getBytecode());
+      assert.ok(script);
+      assert.strictEqual(script, 'g.V().filter(__.outE(\'created\').filter(__.has(\'weight\')))');
+    });
   });
 });