Marko A. Rodriguez created TINKERPOP-1502:

             Summary: Chained has()-steps should simply left-append 
HasContainers in Gremlin-Java.
                 Key: TINKERPOP-1502
             Project: TinkerPop
          Issue Type: Improvement
          Components: process
    Affects Versions: 3.2.2
            Reporter: Marko A. Rodriguez

In Gremlin-Java, {{g.V().has(a).has(b).has(c).out()}} is originally represented 
as {{[GraphStep,HasStep(a),HasStep(b),HasStep(c),VertexStep]}}. Ultimately, 
{{InlineFilterStrategy}} or most provider strategies will turn such 
{{HasStep}}-chains into {{[GraphStep,HasStep(a,b,c),VertexStep]}}. That is, 
strategies fold {{has()}}-steps "left" and delete "right" {{has()}}-steps and 
left propagates their labels (i.e. clock cycles). I think that 
{{GraphTraversal}} should simply do this:

public GraphTraversal has(whateves) {
  if(this.getEndStep() instanceof HasStep)
    this.getEndSte().addHasContainer(new HasContainer(whateves))
    this.addStep(new HasStep(new HasContainer(whateves)));
  return this;

In essence, a "write time" optimization can be done. Given that chains of 
{{has()}}'s is super common, this can save significant clock-cycles in the long 
run of a production application.

This message was sent by Atlassian JIRA

Reply via email to