[ https://issues.apache.org/jira/browse/TINKERPOP-1502?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]
Marko A. Rodriguez closed TINKERPOP-1502. ----------------------------------------- Resolution: Fixed Assignee: Marko A. Rodriguez Fix Version/s: 3.2.4 > 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 > Assignee: Marko A. Rodriguez > Fix For: 3.2.4 > > > 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)