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 2016/06/02 20:05:34 UTC

[14/15] incubator-tinkerpop git commit: MatchStep should be treated like RepeatStep in TraversalHelper.isLocalStarGraph(). The reason being, you don't know the order of the patterns and thus, if the state changes at least once, then assume it can change

MatchStep should be treated like RepeatStep in TraversalHelper.isLocalStarGraph(). The reason being, you don't know the order of the patterns and thus, if the state changes at least once, then assume it can change given another ordering. Fixed #TINKERPOP-1323. Added a failing test case from the mailing list to verify correct behavior. CTR.


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

Branch: refs/heads/TINKERPOP-1278
Commit: 9c56fa3a93ff1979373c681337c335de396ad916
Parents: 9079366
Author: Marko A. Rodriguez <ok...@gmail.com>
Authored: Thu Jun 2 13:57:47 2016 -0600
Committer: Marko A. Rodriguez <ok...@gmail.com>
Committed: Thu Jun 2 13:57:47 2016 -0600

----------------------------------------------------------------------
 .../process/traversal/util/TraversalHelper.java |  2 +-
 .../step/branch/GroovyLocalTest.groovy          |  8 +++++
 .../traversal/step/branch/LocalTest.java        | 38 +++++++++++++++++---
 3 files changed, 43 insertions(+), 5 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/blob/9c56fa3a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/util/TraversalHelper.java
----------------------------------------------------------------------
diff --git a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/util/TraversalHelper.java b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/util/TraversalHelper.java
index 9a98e54..67e96b7 100644
--- a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/util/TraversalHelper.java
+++ b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/util/TraversalHelper.java
@@ -129,7 +129,7 @@ public final class TraversalHelper {
                     state = 'u';
                 else if (states.contains('e'))
                     state = 'e';
-                if (state != currState && step instanceof RepeatStep)
+                if (state != currState && (step instanceof RepeatStep || step instanceof MatchStep))
                     return 'x';
             }
         }

http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/blob/9c56fa3a/gremlin-groovy-test/src/main/groovy/org/apache/tinkerpop/gremlin/process/traversal/step/branch/GroovyLocalTest.groovy
----------------------------------------------------------------------
diff --git a/gremlin-groovy-test/src/main/groovy/org/apache/tinkerpop/gremlin/process/traversal/step/branch/GroovyLocalTest.groovy b/gremlin-groovy-test/src/main/groovy/org/apache/tinkerpop/gremlin/process/traversal/step/branch/GroovyLocalTest.groovy
index 5e594cb..0e2ef3e 100644
--- a/gremlin-groovy-test/src/main/groovy/org/apache/tinkerpop/gremlin/process/traversal/step/branch/GroovyLocalTest.groovy
+++ b/gremlin-groovy-test/src/main/groovy/org/apache/tinkerpop/gremlin/process/traversal/step/branch/GroovyLocalTest.groovy
@@ -79,5 +79,13 @@ public abstract class GroovyLocalTest {
         public Traversal<Vertex, String> get_g_V_localXinEXknowsX_limitX2XX_outV_name() {
             new ScriptTraversal<>(g, "gremlin-groovy", "g.V().local(__.inE('knows').limit(2).outV).name");
         }
+
+        @Override
+        public Traversal<Vertex, Map<String, String>> get_g_V_localXmatchXproject__created_person__person_name_nameX_selectXname_projectX_by_byXnameX() {
+            new ScriptTraversal<>(g, "gremlin-groovy", """g.V.local(match(
+                    __.as('project').in('created').as('person'),
+                    __.as('person').values('name').as('name'))).
+                     select('name', 'project').by.by('name')""")
+        }
     }
 }

http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/blob/9c56fa3a/gremlin-test/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/branch/LocalTest.java
----------------------------------------------------------------------
diff --git a/gremlin-test/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/branch/LocalTest.java b/gremlin-test/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/branch/LocalTest.java
index f1480fb..c202a9c 100644
--- a/gremlin-test/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/branch/LocalTest.java
+++ b/gremlin-test/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/branch/LocalTest.java
@@ -21,9 +21,10 @@ package org.apache.tinkerpop.gremlin.process.traversal.step.branch;
 import org.apache.tinkerpop.gremlin.LoadGraphWith;
 import org.apache.tinkerpop.gremlin.process.AbstractGremlinProcessTest;
 import org.apache.tinkerpop.gremlin.process.GremlinProcessRunner;
+import org.apache.tinkerpop.gremlin.process.traversal.Order;
 import org.apache.tinkerpop.gremlin.process.traversal.Traversal;
+import org.apache.tinkerpop.gremlin.process.traversal.dsl.graph.__;
 import org.apache.tinkerpop.gremlin.structure.Edge;
-import org.apache.tinkerpop.gremlin.process.traversal.Order;
 import org.apache.tinkerpop.gremlin.structure.T;
 import org.apache.tinkerpop.gremlin.structure.Vertex;
 import org.junit.Test;
@@ -34,8 +35,16 @@ import java.util.Map;
 
 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.apache.tinkerpop.gremlin.process.traversal.dsl.graph.__.as;
+import static org.apache.tinkerpop.gremlin.process.traversal.dsl.graph.__.bothE;
+import static org.apache.tinkerpop.gremlin.process.traversal.dsl.graph.__.inE;
+import static org.apache.tinkerpop.gremlin.process.traversal.dsl.graph.__.out;
+import static org.apache.tinkerpop.gremlin.process.traversal.dsl.graph.__.outE;
+import static org.apache.tinkerpop.gremlin.process.traversal.dsl.graph.__.properties;
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertFalse;
+import static org.junit.Assert.assertTrue;
+import static org.junit.Assert.fail;
 
 
 /**
@@ -64,6 +73,8 @@ public abstract class LocalTest extends AbstractGremlinProcessTest {
 
     public abstract Traversal<Vertex, String> get_g_V_localXinEXknowsX_limitX2XX_outV_name();
 
+    public abstract Traversal<Vertex, Map<String, String>> get_g_V_localXmatchXproject__created_person__person_name_nameX_selectXname_projectX_by_byXnameX();
+
     @Test
     @LoadGraphWith(CREW)
     public void g_V_localXpropertiesXlocationX_order_byXvalueX_limitX2XX_value() {
@@ -197,6 +208,19 @@ public abstract class LocalTest extends AbstractGremlinProcessTest {
         assertEquals(5, counter);
     }
 
+    @Test
+    @LoadGraphWith(MODERN)
+    public void g_V_localXmatchXproject__created_person__person_name_nameX_selectXname_projectX_by_byXnameX() {
+        final Traversal<Vertex, Map<String, String>> traversal = get_g_V_localXmatchXproject__created_person__person_name_nameX_selectXname_projectX_by_byXnameX();
+        printTraversalForm(traversal);
+        checkResults(makeMapList(2,
+                "name", "marko", "project", "lop",
+                "name", "josh", "project", "lop",
+                "name", "peter", "project", "lop",
+                "name", "josh", "project", "ripple"), traversal);
+        assertFalse(traversal.hasNext());
+    }
+
     public static class Traversals extends LocalTest {
 
         @Override
@@ -249,6 +273,12 @@ public abstract class LocalTest extends AbstractGremlinProcessTest {
             return g.V().local(inE("knows").limit(2)).outV().values("name");
         }
 
-
+        @Override
+        public Traversal<Vertex, Map<String, String>> get_g_V_localXmatchXproject__created_person__person_name_nameX_selectXname_projectX_by_byXnameX() {
+            return g.V().local(__.match(
+                    as("project").in("created").as("person"),
+                    as("person").values("name").as("name")))
+                    .<String>select("name", "project").by().by("name");
+        }
     }
 }