Hi,

I don't quite understand what you are trying to accomplish (attention span of a 
tootsie fly), but here are some notes:

        1. Look at AbstractStep.prepareTraveserForNextStep()
        2. B_O_…Traverser specify the requirements that the Traverser satisfies:
                B_O_P_S_SE_SL_Traverser = 
Bulk+Object+Path+Sack+SideEffect+SingleLoop. In other words, a very meaty 
traverser, indeed.

What do you want "// What to do?" to do?

Marko.

http://markorodriguez.com

On Jul 1, 2015, at 11:32 AM, pieter-gmail <[email protected]> wrote:

> Hi,
> 
> I am trying to optimize queries with 'as' in it.
> 
> Currently I can optimize consecutive VertexStep and EdgeVertexStep
> (without labels) by combining them into one step.
> 
> Now I am trying to achieve the same but with 'as' in the traversal.
> 
> e.g.
> 
> 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");
> Edge e1 = a1.addEdge("outB", b1);
> Edge e2 = a1.addEdge("outB", b2);
> 
> g.tx().commit();
> 
> GraphTraversal<Vertex, Map<String, Element>> traversal = g.traversal()
>        .V(a1)
>        .outE("outB")
>        .as("e")
>        .inV()
>        .as("B")
>        .select("e", "B");
> 
> I combine all consecutive VertexStep, EdgeVertexStep into one step,
> execute one query and with the result I can construct the labeled edge
> ("e") and vertices ("B").
> 
> So far in the combined step I have all the information, but alas what now?
> 
> public class SqlgVertexStepCompiled<S extends SqlgElement, E extends
> SqlgElement> extends FlatMapStep<S, E> {
> 
> ...
> 
> @Override
> protected Traverser<E> processNextStart() {
>    while (true) {
>        if (this.iterator.hasNext()) {
>            Pair<E, Map<String, Object>> next = this.iterator.next();
>            E e = next.getLeft();
>            Map<String, Object> labeledObjects = next.getRight();
>            for (String label : labeledObjects.keySet()) {
>                //What to do
>                this.head.path().extend(labeledObjects.get(label), label);
>            }
>            return this.head.split(e, this);
>        } else {
>            this.head = this.starts.next();
>            this.iterator = this.flatMapCustom(this.head);
>        }
>    }
> }
> 
> ...
> 
> Any pointers?
> 
> btw, what does all those strange traverser names mean,
> B_O_P_S_SE_SL_Traverser...
> 
> Thanks
> Pieter

Reply via email to