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/tp31
Commit: 9c56fa3a93ff1979373c681337c335de396ad916
Parents: 9079366
Author: Marko A. Rodriguez <okramma...@gmail.com>
Authored: Thu Jun 2 13:57:47 2016 -0600
Committer: Marko A. Rodriguez <okramma...@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");
+        }
     }
 }

Reply via email to