Marko A. Rodriguez created TINKERPOP-1502:
---------------------------------------------

             Summary: Chained has()-steps should simply left-append 
HasContainers in Gremlin-Java.
                 Key: TINKERPOP-1502
                 URL: https://issues.apache.org/jira/browse/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:

{code}
public GraphTraversal has(whateves) {
  if(this.getEndStep() instanceof HasStep)
    this.getEndSte().addHasContainer(new HasContainer(whateves))
  else
    this.addStep(new HasStep(new HasContainer(whateves)));
  this.bytecode.addStep("has",whateves);
  return this;
}
{code}

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
(v6.3.4#6332)

Reply via email to