[ 
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)

Reply via email to