[ https://issues.apache.org/jira/browse/TINKERPOP-1502?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=15667570#comment-15667570 ]
ASF GitHub Bot commented on TINKERPOP-1502: ------------------------------------------- Github user okram commented on the issue: https://github.com/apache/tinkerpop/pull/495 What you have in your examples is the "bug" that is fixed in this PR: ``` gremlin> g.V(1).outE('knows').hasLabel('created') gremlin> ``` Likewise: ``` gremlin> g.V(1).outE().hasLabel("knows").hasLabel("created") gremlin> ``` ``` gremlin> g.V(1).outE().hasLabel("knows") ==>e[7][1-knows->2] ==>e[8][1-knows->4] gremlin> g.V(1).outE().hasLabel("knows").explain() ==>Traversal Explanation ============================================================================================================= Original Traversal [GraphStep(vertex,[1]), VertexStep(OUT,edge), HasStep([~label.eq(knows)])] ... InlineFilterStrategy [O] [GraphStep(vertex,[1]), VertexStep(OUT,[knows],edge)] ... Final Traversal [TinkerGraphStep(vertex,[1]), VertexStep(OUT,[knows],edge)] gremlin> ``` > 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)