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/06/12 12:15:34 UTC

[tinkerpop] branch TINKERPOP-2383 created (now ba44f73)

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

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


      at ba44f73  TINKERPOP-2383 Fixed bug in has(T,Traversal)

This branch includes the following new commits:

     new ba44f73  TINKERPOP-2383 Fixed bug in has(T,Traversal)

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-2383 Fixed bug in has(T,Traversal)

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

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

commit ba44f730a61f3dce383b78d91dfba51152dbeda2
Author: Stephen Mallette <sp...@genoprime.com>
AuthorDate: Fri Jun 12 08:13:40 2020 -0400

    TINKERPOP-2383 Fixed bug in has(T,Traversal)
    
    That has() was using PropertiesStep, but properties() doesn't process T values.
---
 CHANGELOG.asciidoc                                  |  2 +-
 .../process/traversal/dsl/graph/GraphTraversal.java | 21 ++++++++++++++++-----
 gremlin-test/features/filter/Has.feature            | 12 ++++++++++++
 .../process/traversal/step/filter/HasTest.java      | 19 +++++++++++++++++++
 4 files changed, 48 insertions(+), 6 deletions(-)

diff --git a/CHANGELOG.asciidoc b/CHANGELOG.asciidoc
index e2ddd29..c0631f5 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-8]]
 === TinkerPop 3.4.8 (Release Date: NOT OFFICIALLY RELEASED YET)
 
-
+* Fixed bug in `has(T,Traversal)` where results were not being returned.
 
 [[release-3-4-7]]
 === TinkerPop 3.4.7 (Release Date: June 1, 2020)
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 9b3a2b2..482a9ac 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
@@ -1431,7 +1431,8 @@ public interface GraphTraversal<S, E> extends Traversal<S, E> {
     }
 
     /**
-     * Filters vertices, edges and vertex properties based on their properties.
+     * Filters vertices, edges and vertex properties based on their value of {@link T} where only {@link T#id} and
+     * {@link T#label} are supported.
      *
      * @param accessor          the {@link T} accessor of the property to filter on
      * @param propertyTraversal the traversal to filter the accessor value by
@@ -1441,13 +1442,23 @@ public interface GraphTraversal<S, E> extends Traversal<S, E> {
      */
     public default GraphTraversal<S, E> has(final T accessor, final Traversal<?, ?> propertyTraversal) {
         this.asAdmin().getBytecode().addStep(Symbols.has, accessor, propertyTraversal);
-        return this.asAdmin().addStep(
-                new TraversalFilterStep<>(this.asAdmin(), propertyTraversal.asAdmin().addStep(0,
-                        new PropertiesStep(propertyTraversal.asAdmin(), PropertyType.VALUE, accessor.getAccessor()))));
+        switch (accessor) {
+            case id:
+                return this.asAdmin().addStep(
+                        new TraversalFilterStep<>(this.asAdmin(), propertyTraversal.asAdmin().addStep(0,
+                                new IdStep<>(propertyTraversal.asAdmin()))));
+            case label:
+                return this.asAdmin().addStep(
+                        new TraversalFilterStep<>(this.asAdmin(), propertyTraversal.asAdmin().addStep(0,
+                                new LabelStep<>(propertyTraversal.asAdmin()))));
+            default:
+                throw new IllegalArgumentException("has(T,Traversal) can only take id or label as its argument");
+        }
+
     }
 
     /**
-     * Filters vertices, edges and vertex properties based on their properties.
+     * Filters vertices, edges and vertex properties based on the value of the specified property key.
      *
      * @param propertyKey       the key of the property to filter on
      * @param propertyTraversal the traversal to filter the property value by
diff --git a/gremlin-test/features/filter/Has.feature b/gremlin-test/features/filter/Has.feature
index ade3265..513f882 100644
--- a/gremlin-test/features/filter/Has.feature
+++ b/gremlin-test/features/filter/Has.feature
@@ -117,6 +117,18 @@ Feature: Step - has()
       | v[josh] |
       | v[peter] |
 
+  Scenario: g_V_hasXlabel_isXsoftwareXX
+    Given the modern graph
+    And the traversal of
+      """
+      g.V().has(T.label, __.is('software'))
+      """
+    When iterated to list
+    Then the result should be unordered
+      | result |
+      | v[lop] |
+      | v[ripple] |
+
   Scenario: g_VX1X_hasXage_gt_30X
     Given the modern graph
     And using the parameter v1Id defined as "v[marko].id"
diff --git a/gremlin-test/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/filter/HasTest.java b/gremlin-test/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/filter/HasTest.java
index 32ccb75..94c831a 100644
--- a/gremlin-test/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/filter/HasTest.java
+++ b/gremlin-test/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/filter/HasTest.java
@@ -81,6 +81,8 @@ public abstract class HasTest extends AbstractGremlinProcessTest {
 
     public abstract Traversal<Vertex, Vertex> get_g_V_hasXage_isXgt_30XX();
 
+    public abstract Traversal<Vertex, Vertex> get_g_V_hasXlabel_isXsoftwareXX();
+
     public abstract Traversal<Edge, Edge> get_g_EX7X_hasLabelXknowsX(final Object e7Id);
 
     public abstract Traversal<Edge, Edge> get_g_E_hasLabelXknowsX();
@@ -234,6 +236,18 @@ public abstract class HasTest extends AbstractGremlinProcessTest {
 
     @Test
     @LoadGraphWith(MODERN)
+    public void g_V_hasXlabel_isXsoftwareXX() {
+        final Traversal<Vertex, Vertex> traversal = get_g_V_hasXlabel_isXsoftwareXX();
+        printTraversalForm(traversal);
+        final List<Vertex> list = traversal.toList();
+        assertEquals(2, list.size());
+        for (final Element v : list) {
+            assertEquals("software", v.label());
+        }
+    }
+
+    @Test
+    @LoadGraphWith(MODERN)
     public void g_VX1X_hasXage_gt_30X() {
         final Traversal<Vertex, Vertex> traversalMarko = get_g_VX1X_hasXage_gt_30X(convertToVertexId("marko"));
         printTraversalForm(traversalMarko);
@@ -759,6 +773,11 @@ public abstract class HasTest extends AbstractGremlinProcessTest {
         }
 
         @Override
+        public Traversal<Vertex, Vertex> get_g_V_hasXlabel_isXsoftwareXX() {
+            return g.V().has(T.label, __.is("software"));
+        }
+
+        @Override
         public Traversal<Edge, Edge> get_g_EX7X_hasLabelXknowsX(final Object e7Id) {
             return g.E(e7Id).hasLabel("knows");
         }