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 2015/05/06 13:21:40 UTC

[1/2] incubator-tinkerpop git commit: Fixed bug in HasContainer that wasn't handling within properly for ids.

Repository: incubator-tinkerpop
Updated Branches:
  refs/heads/master 9521f6bc4 -> d11c78c79


Fixed bug in HasContainer that wasn't handling within properly for ids.

The issue was related to simple toString of the comparing values.  If that value was a Collection of ids then the toString on the collection would meet equals properly.


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

Branch: refs/heads/master
Commit: 4c841536dc2c262c982c18aa9ec2cc81e5ea63bb
Parents: 9830cd5
Author: Stephen Mallette <sp...@genoprime.com>
Authored: Wed May 6 07:20:04 2015 -0400
Committer: Stephen Mallette <sp...@genoprime.com>
Committed: Wed May 6 07:20:04 2015 -0400

----------------------------------------------------------------------
 .../traversal/step/util/HasContainer.java       | 16 ++++++++-
 .../traversal/step/filter/GroovyHasTest.groovy  | 10 ++++++
 .../process/traversal/step/filter/HasTest.java  | 38 ++++++++++++++++++--
 3 files changed, 60 insertions(+), 4 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/blob/4c841536/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/util/HasContainer.java
----------------------------------------------------------------------
diff --git a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/util/HasContainer.java b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/util/HasContainer.java
index 014f21f..2393254 100644
--- a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/util/HasContainer.java
+++ b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/util/HasContainer.java
@@ -27,9 +27,11 @@ import org.apache.tinkerpop.gremlin.structure.Vertex;
 import org.apache.tinkerpop.gremlin.structure.VertexProperty;
 
 import java.io.Serializable;
+import java.util.Collection;
 import java.util.Iterator;
 import java.util.List;
 import java.util.function.BiPredicate;
+import java.util.stream.Collectors;
 
 /**
  * @author Marko A. Rodriguez (http://markorodriguez.com)
@@ -39,11 +41,20 @@ public final class HasContainer implements Serializable {
     public String key;
     public BiPredicate predicate;
     public Object value;
+    private Collection<String> valuesToStringed;
 
     public HasContainer(final String key, final BiPredicate predicate, final Object value) {
         this.key = key;
         this.predicate = predicate;
         this.value = value;
+
+        // if the key being evaluated is id then the has() test can evaluate as a toString() representation of the
+        // identifier.  this could be done in the test() method but it seems cheaper to do the conversion once in
+        // the constructor.  to avoid losing the original value, the string version of the collection is maintained
+        // separately
+        if (this.key.equals(T.id.getAccessor()) && value instanceof Collection)
+            valuesToStringed = ((Collection<Object>) value).stream().map(Object::toString).collect(Collectors.toList());
+
         if (null == this.value && !(this.predicate instanceof Contains)) {
             throw new IllegalArgumentException("For determining the existence of a property, use the Contains predicate with null-value");
         }
@@ -54,7 +65,10 @@ public final class HasContainer implements Serializable {
             // it is OK to evaluate equality of ids via toString() now given that the toString() the test suite
             // enforces the value of id().toString() to be a first class representation of the identifier
             if (this.key.equals(T.id.getAccessor()))
-                return this.predicate.test(element.id().toString(), this.value.toString());
+                if (value instanceof Collection)
+                    return this.predicate.test(element.id().toString(), valuesToStringed);
+                else
+                    return this.predicate.test(element.id().toString(), this.value.toString());
             else if (this.key.equals(T.label.getAccessor()))
                 return this.predicate.test(element.label(), this.value);
             else if (element instanceof VertexProperty && this.key.equals(T.value.getAccessor()))

http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/blob/4c841536/gremlin-groovy-test/src/main/groovy/org/apache/tinkerpop/gremlin/process/traversal/step/filter/GroovyHasTest.groovy
----------------------------------------------------------------------
diff --git a/gremlin-groovy-test/src/main/groovy/org/apache/tinkerpop/gremlin/process/traversal/step/filter/GroovyHasTest.groovy b/gremlin-groovy-test/src/main/groovy/org/apache/tinkerpop/gremlin/process/traversal/step/filter/GroovyHasTest.groovy
index e270c65..3295d70 100644
--- a/gremlin-groovy-test/src/main/groovy/org/apache/tinkerpop/gremlin/process/traversal/step/filter/GroovyHasTest.groovy
+++ b/gremlin-groovy-test/src/main/groovy/org/apache/tinkerpop/gremlin/process/traversal/step/filter/GroovyHasTest.groovy
@@ -84,6 +84,11 @@ public abstract class GroovyHasTest {
         }
 
         @Override
+        public Traversal<Vertex, Vertex> get_g_VX1X_out_hasIdX2_3X(final Object v1Id, final Object v2Id, final Object v3Id) {
+            g.V(v1Id).out.hasId(v2Id, v3Id)
+        }
+
+        @Override
         public Traversal<Vertex, Vertex> get_g_V_hasXage_gt_30X() {
             g.V.has('age', gt(30))
         }
@@ -167,6 +172,11 @@ public abstract class GroovyHasTest {
         }
 
         @Override
+        public Traversal<Vertex, Vertex> get_g_VX1X_out_hasIdX2_3X(final Object v1Id, final Object v2Id, final Object v3Id) {
+            ComputerTestHelper.compute(" g.V(v1Id).out.hasId(v2Id, v3Id)", g, "v1Id", v1Id, "v2Id", v2Id, "v3Id", v3Id);
+        }
+
+        @Override
         public Traversal<Vertex, Vertex> get_g_V_hasXage_gt_30X() {
             ComputerTestHelper.compute("g.V.has('age', gt(30))", g);
         }

http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/blob/4c841536/gremlin-test/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/filter/HasTest.java
----------------------------------------------------------------------
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 34d1f80..6cd2d96 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
@@ -25,10 +25,10 @@ import org.apache.tinkerpop.gremlin.structure.T;
 import org.apache.tinkerpop.gremlin.process.traversal.Traversal;
 import org.apache.tinkerpop.gremlin.process.traversal.TraversalEngine;
 import org.apache.tinkerpop.gremlin.process.UseEngine;
-import org.apache.tinkerpop.gremlin.structure.Compare;
 import org.apache.tinkerpop.gremlin.structure.Edge;
 import org.apache.tinkerpop.gremlin.structure.Element;
 import org.apache.tinkerpop.gremlin.structure.Vertex;
+import org.hamcrest.CoreMatchers;
 import org.junit.Test;
 
 import java.util.Arrays;
@@ -38,7 +38,6 @@ import static org.apache.tinkerpop.gremlin.LoadGraphWith.GraphData.CREW;
 import static org.apache.tinkerpop.gremlin.LoadGraphWith.GraphData.MODERN;
 import static org.apache.tinkerpop.gremlin.process.traversal.dsl.graph.__.*;
 import static org.junit.Assert.*;
-import static org.junit.Assume.assumeTrue;
 
 /**
  * @author Marko A. Rodriguez (http://markorodriguez.com)
@@ -62,6 +61,8 @@ public abstract class HasTest extends AbstractGremlinProcessTest {
 
     public abstract Traversal<Vertex, Vertex> get_g_VX1X_out_hasIdX2X(final Object v1Id, final Object v2Id);
 
+    public abstract Traversal<Vertex, Vertex> get_g_VX1X_out_hasIdX2_3X(final Object v1Id, final Object v2Id, final Object v3Id);
+
     public abstract Traversal<Vertex, Vertex> get_g_V_hasXage_gt_30X();
 
     public abstract Traversal<Edge, Edge> get_g_EX7X_hasLabelXknowsX(final Object e7Id);
@@ -165,7 +166,7 @@ public abstract class HasTest extends AbstractGremlinProcessTest {
         assert_g_VX1X_out_hasXid_2X(traversal);
     }
 
-    private void assert_g_VX1X_out_hasXid_2X(Traversal<Vertex, Vertex> traversal) {
+    private void assert_g_VX1X_out_hasXid_2X(final Traversal<Vertex, Vertex> traversal) {
         printTraversalForm(traversal);
         assertTrue(traversal.hasNext());
         assertEquals(convertToVertexId("vadas"), traversal.next().id());
@@ -173,6 +174,32 @@ public abstract class HasTest extends AbstractGremlinProcessTest {
 
     @Test
     @LoadGraphWith(MODERN)
+    public void g_VX1X_out_hasXid_2_3X() {
+        final Object id2 = convertToVertexId("vadas");
+        final Object id3 = convertToVertexId("lop");
+        final Traversal<Vertex, Vertex> traversal = get_g_VX1X_out_hasIdX2_3X(convertToVertexId("marko"), id2, id3);
+        assert_g_VX1X_out_hasXid_2_3X(id2, id3, traversal);
+    }
+
+    @Test
+    @LoadGraphWith(MODERN)
+    public void g_VX1X_out_hasXid_2AsString_3AsStringX() {
+        final Object id2 = convertToVertexId("vadas");
+        final Object id3 = convertToVertexId("lop");
+        final Traversal<Vertex, Vertex> traversal = get_g_VX1X_out_hasIdX2_3X(convertToVertexId("marko"), id2.toString(), id3.toString());
+        assert_g_VX1X_out_hasXid_2_3X(id2, id3, traversal);
+    }
+
+    protected void assert_g_VX1X_out_hasXid_2_3X(Object id2, Object id3, Traversal<Vertex, Vertex> traversal) {
+        printTraversalForm(traversal);
+        assertTrue(traversal.hasNext());
+        assertThat(traversal.next().id(), CoreMatchers.anyOf(CoreMatchers.is(id2), CoreMatchers.is(id3)));
+        assertThat(traversal.next().id(), CoreMatchers.anyOf(CoreMatchers.is(id2), CoreMatchers.is(id3)));
+        assertFalse(traversal.hasNext());
+    }
+
+    @Test
+    @LoadGraphWith(MODERN)
     public void g_V_hasXblahX() {
         //assumeTrue(graphMeetsTestRequirements());
         final Traversal<Vertex, Vertex> traversal = get_g_V_hasXblahX();
@@ -332,6 +359,11 @@ public abstract class HasTest extends AbstractGremlinProcessTest {
         }
 
         @Override
+        public Traversal<Vertex, Vertex> get_g_VX1X_out_hasIdX2_3X(final Object v1Id, final Object v2Id, final Object v3Id) {
+            return g.V(v1Id).out().hasId(v2Id, v3Id);
+        }
+
+        @Override
         public Traversal<Vertex, Vertex> get_g_V_hasXage_gt_30X() {
             return g.V().has("age", P.gt(30));
         }


[2/2] incubator-tinkerpop git commit: Merge remote-tracking branch 'origin/master'

Posted by sp...@apache.org.
Merge remote-tracking branch 'origin/master'


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

Branch: refs/heads/master
Commit: d11c78c793728f0dbe967dc66117d379f99e5a8d
Parents: 4c84153 9521f6b
Author: Stephen Mallette <sp...@genoprime.com>
Authored: Wed May 6 07:21:32 2015 -0400
Committer: Stephen Mallette <sp...@genoprime.com>
Committed: Wed May 6 07:21:32 2015 -0400

----------------------------------------------------------------------
 .../optimization/AdjacentToIncidentStrategy.java        | 12 +++++++-----
 .../optimization/AdjacentToIncidentStrategyTest.java    |  4 +++-
 2 files changed, 10 insertions(+), 6 deletions(-)
----------------------------------------------------------------------