Hi,
The following query no longer works on 3.2.4
@Test
public void testOptionalWithOrderBy() {
final TinkerGraph g = TinkerGraph.open();
Vertex a1 = g.addVertex(T.label, "A", "name", "a1");
Vertex b1 = g.addVertex(T.label, "B", "name", "b1");
Vertex b2 = g.addVertex(T.label, "B", "name", "b2");
Vertex b3 = g.addVertex(T.label, "B", "name", "b3");
Vertex c1 = g.addVertex(T.label, "C", "name", "c1");
Vertex c2 = g.addVertex(T.label, "C", "name", "c2");
Vertex c3 = g.addVertex(T.label, "C", "name", "c3");
a1.addEdge("ab", b1, "order", 3);
a1.addEdge("ab", b2, "order", 2);
a1.addEdge("ab", b3, "order", 1);
b1.addEdge("bc", c1, "order", 3);
b1.addEdge("bc", c2, "order", 2);
b1.addEdge("bc", c3, "order", 1);
GraphTraversal<Vertex, Vertex> traversal = g.traversal().V(a1.id())
.optional(
__.outE("ab").as("ab").otherV().as("vb")
.optional(
__.outE("bc").as("bc").otherV().as("vc")
)
)
.order().by(__.select("ab").by("order"),
Order.incr).by(__.select("bc").by("order"), Order.incr);
while (traversal.hasNext()) {
System.out.println(traversal.next().<String>value("name"));
}
}
On 3.2.3 it returns
b3
b2
c3
c2
c1
On 3.2.4 it throws the following exception,
java.lang.IllegalArgumentException: The provided traverser does not map
to a value: v[6]->[SelectOneStep(bc,value(order))]
at
org.apache.tinkerpop.gremlin.process.traversal.util.TraversalUtil.apply(TraversalUtil.java:45)
at
org.apache.tinkerpop.gremlin.process.traversal.step.map.OrderGlobalStep.createProjectedTraverser(OrderGlobalStep.java:155)
at
org.apache.tinkerpop.gremlin.process.traversal.step.map.OrderGlobalStep.processAllStarts(OrderGlobalStep.java:74)
at
org.apache.tinkerpop.gremlin.process.traversal.step.util.CollectingBarrierStep.processNextStart(CollectingBarrierStep.java:108)
at
org.apache.tinkerpop.gremlin.process.traversal.step.util.AbstractStep.hasNext(AbstractStep.java:143)
at
org.apache.tinkerpop.gremlin.process.traversal.util.DefaultTraversal.hasNext(DefaultTraversal.java:184)
Has the semantics changed or is it a bug?
Thanks
Pieter