You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@tinkerpop.apache.org by "Marko A. Rodriguez (JIRA)" <ji...@apache.org> on 2016/10/13 11:49:20 UTC

[jira] [Created] (TINKERPOP-1502) Chained has()-steps should simply left-append HasContainers in Gremlin-Java.

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)