[ 
https://issues.apache.org/jira/browse/TINKERPOP-1332?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=15331744#comment-15331744
 ] 

ASF GitHub Bot commented on TINKERPOP-1332:
-------------------------------------------

GitHub user okram opened a pull request:

    https://github.com/apache/tinkerpop/pull/337

    TINKERPOP-1332: Improve .explain() Dialogue

    https://issues.apache.org/jira/browse/TINKERPOP-1332
    
    `TraversalExplanation.toString()` now supports word wrapping and 
`GraphFilter` information.
    
    *First, here is word wrap in action*:
    
    ```
    gremlin> g.V().out().out().out().out().count().explain()
    ==>Traversal Explanation
    
=======================================================================================================================================
    Original Traversal                 [GraphStep(vertex,[]), 
VertexStep(OUT,vertex), VertexStep(OUT,vertex), VertexStep(OUT,vertex),
                                          VertexStep(OUT,vertex), 
CountGlobalStep]
    
    ConnectiveStrategy           [D]   [GraphStep(vertex,[]), 
VertexStep(OUT,vertex), VertexStep(OUT,vertex), VertexStep(OUT,vertex),
                                          VertexStep(OUT,vertex), 
CountGlobalStep]
    RangeByIsCountStrategy       [O]   [GraphStep(vertex,[]), 
VertexStep(OUT,vertex), VertexStep(OUT,vertex), VertexStep(OUT,vertex),
                                          VertexStep(OUT,vertex), 
CountGlobalStep]
    IdentityRemovalStrategy      [O]   [GraphStep(vertex,[]), 
VertexStep(OUT,vertex), VertexStep(OUT,vertex), VertexStep(OUT,vertex),
                                          VertexStep(OUT,vertex), 
CountGlobalStep]
    IncidentToAdjacentStrategy   [O]   [GraphStep(vertex,[]), 
VertexStep(OUT,vertex), VertexStep(OUT,vertex), VertexStep(OUT,vertex),
                                          VertexStep(OUT,vertex), 
CountGlobalStep]
    AdjacentToIncidentStrategy   [O]   [GraphStep(vertex,[]), 
VertexStep(OUT,vertex), VertexStep(OUT,vertex), VertexStep(OUT,vertex),
                                          VertexStep(OUT,edge), CountGlobalStep]
    FilterRankingStrategy        [O]   [GraphStep(vertex,[]), 
VertexStep(OUT,vertex), VertexStep(OUT,vertex), VertexStep(OUT,vertex),
                                          VertexStep(OUT,edge), CountGlobalStep]
    MatchPredicateStrategy       [O]   [GraphStep(vertex,[]), 
VertexStep(OUT,vertex), VertexStep(OUT,vertex), VertexStep(OUT,vertex),
                                          VertexStep(OUT,edge), CountGlobalStep]
    TinkerGraphStepStrategy      [P]   [TinkerGraphStep(vertex,[]), 
VertexStep(OUT,vertex), VertexStep(OUT,vertex), VertexStep(OUT,vertex),
                                          VertexStep(OUT,edge), CountGlobalStep]
    ProfileStrategy              [F]   [TinkerGraphStep(vertex,[]), 
VertexStep(OUT,vertex), VertexStep(OUT,vertex), VertexStep(OUT,vertex),
                                          VertexStep(OUT,edge), CountGlobalStep]
    StandardVerificationStrategy [V]   [TinkerGraphStep(vertex,[]), 
VertexStep(OUT,vertex), VertexStep(OUT,vertex), VertexStep(OUT,vertex),
                                          VertexStep(OUT,edge), CountGlobalStep]
    
    Final Traversal                    [TinkerGraphStep(vertex,[]), 
VertexStep(OUT,vertex), VertexStep(OUT,vertex), VertexStep(OUT,vertex),
                                          VertexStep(OUT,edge), CountGlobalStep]
    gremlin>
    ```
    
    *Second, here is GraphFilter information in action.*
    
    ```
    gremlin> g = TinkerFactory.createModern().traversal().withComputer()
    ==>graphtraversalsource[tinkergraph[vertices:6 edges:6], graphcomputer]
    gremlin> g = g.withStrategies(GraphFilterStrategy.instance())
    ==>graphtraversalsource[tinkergraph[vertices:6 edges:6], graphcomputer]
    gremlin> g.V().out().out().out().out().count().explain()
    ==>Traversal Explanation
    
==========================================================================================================================================
    Original Traversal                 [GraphStep(vertex,[]), 
VertexStep(OUT,vertex), VertexStep(OUT,vertex), VertexStep(OUT,vertex),
                                          VertexStep(OUT,vertex), 
CountGlobalStep]
    
    VertexProgramStrategy        [D]   
[TraversalVertexProgramStep([GraphStep(vertex,[]), VertexStep(OUT,vertex), 
VertexStep(OUT,vertex),
                                          VertexStep(OUT,vertex), 
VertexStep(OUT,vertex), CountGlobalStep],graphfilter[none]),
                                          ComputerResultStep]
    ConnectiveStrategy           [D]   
[TraversalVertexProgramStep([GraphStep(vertex,[]), VertexStep(OUT,vertex), 
VertexStep(OUT,vertex),
                                          VertexStep(OUT,vertex), 
VertexStep(OUT,vertex), CountGlobalStep],graphfilter[none]),
                                          ComputerResultStep]
    RangeByIsCountStrategy       [O]   
[TraversalVertexProgramStep([GraphStep(vertex,[]), VertexStep(OUT,vertex), 
VertexStep(OUT,vertex),
                                          VertexStep(OUT,vertex), 
VertexStep(OUT,vertex), CountGlobalStep],graphfilter[none]),
                                          ComputerResultStep]
    IdentityRemovalStrategy      [O]   
[TraversalVertexProgramStep([GraphStep(vertex,[]), VertexStep(OUT,vertex), 
VertexStep(OUT,vertex),
                                          VertexStep(OUT,vertex), 
VertexStep(OUT,vertex), CountGlobalStep],graphfilter[none]),
                                          ComputerResultStep]
    IncidentToAdjacentStrategy   [O]   
[TraversalVertexProgramStep([GraphStep(vertex,[]), VertexStep(OUT,vertex), 
VertexStep(OUT,vertex),
                                          VertexStep(OUT,vertex), 
VertexStep(OUT,vertex), CountGlobalStep],graphfilter[none]),
                                          ComputerResultStep]
    AdjacentToIncidentStrategy   [O]   
[TraversalVertexProgramStep([GraphStep(vertex,[]), VertexStep(OUT,vertex), 
VertexStep(OUT,vertex),
                                          VertexStep(OUT,vertex), 
VertexStep(OUT,edge), CountGlobalStep],graphfilter[none]),
                                          ComputerResultStep]
    FilterRankingStrategy        [O]   
[TraversalVertexProgramStep([GraphStep(vertex,[]), VertexStep(OUT,vertex), 
VertexStep(OUT,vertex),
                                          VertexStep(OUT,vertex), 
VertexStep(OUT,edge), CountGlobalStep],graphfilter[none]),
                                          ComputerResultStep]
    MatchPredicateStrategy       [O]   
[TraversalVertexProgramStep([GraphStep(vertex,[]), VertexStep(OUT,vertex), 
VertexStep(OUT,vertex),
                                          VertexStep(OUT,vertex), 
VertexStep(OUT,edge), CountGlobalStep],graphfilter[none]),
                                          ComputerResultStep]
    OrderLimitStrategy           [O]   
[TraversalVertexProgramStep([GraphStep(vertex,[]), VertexStep(OUT,vertex), 
VertexStep(OUT,vertex),
                                          VertexStep(OUT,vertex), 
VertexStep(OUT,edge), CountGlobalStep],graphfilter[none]),
                                          ComputerResultStep]
    PathProcessorStrategy        [O]   
[TraversalVertexProgramStep([GraphStep(vertex,[]), VertexStep(OUT,vertex), 
VertexStep(OUT,vertex),
                                          VertexStep(OUT,vertex), 
VertexStep(OUT,edge), CountGlobalStep],graphfilter[none]),
                                          ComputerResultStep]
    GraphFilterStrategy          [O]   
[TraversalVertexProgramStep([GraphStep(vertex,[]), VertexStep(OUT,vertex), 
VertexStep(OUT,vertex),
                                          VertexStep(OUT,vertex), 
VertexStep(OUT,edge), CountGlobalStep],graphfilter[[VertexStep(OUT,edge)]]),
                                          ComputerResultStep]
    TinkerGraphStepStrategy      [P]   
[TraversalVertexProgramStep([GraphStep(vertex,[]), VertexStep(OUT,vertex), 
VertexStep(OUT,vertex),
                                          VertexStep(OUT,vertex), 
VertexStep(OUT,edge), CountGlobalStep],graphfilter[[VertexStep(OUT,edge)]]),
                                          ComputerResultStep]
    ProfileStrategy              [F]   
[TraversalVertexProgramStep([GraphStep(vertex,[]), VertexStep(OUT,vertex), 
VertexStep(OUT,vertex),
                                          VertexStep(OUT,vertex), 
VertexStep(OUT,edge), CountGlobalStep],graphfilter[[VertexStep(OUT,edge)]]),
                                          ComputerResultStep]
    ComputerVerificationStrategy [V]   
[TraversalVertexProgramStep([GraphStep(vertex,[]), VertexStep(OUT,vertex), 
VertexStep(OUT,vertex),
                                          VertexStep(OUT,vertex), 
VertexStep(OUT,edge), CountGlobalStep],graphfilter[[VertexStep(OUT,edge)]]),
                                          ComputerResultStep]
    StandardVerificationStrategy [V]   
[TraversalVertexProgramStep([GraphStep(vertex,[]), VertexStep(OUT,vertex), 
VertexStep(OUT,vertex),
                                          VertexStep(OUT,vertex), 
VertexStep(OUT,edge), CountGlobalStep],graphfilter[[VertexStep(OUT,edge)]]),
                                          ComputerResultStep]
    
    Final Traversal                    
[TraversalVertexProgramStep([GraphStep(vertex,[]), VertexStep(OUT,vertex), 
VertexStep(OUT,vertex),
                                          VertexStep(OUT,vertex), 
VertexStep(OUT,edge), CountGlobalStep],graphfilter[[VertexStep(OUT,edge)]]),
                                          ComputerResultStep]
    gremlin>
    ```
    
    **PLEASE ADVISE**
    
    Note that I have hardcoded the wordwrap amount `final int maxLineLength = 
75;`. It would be nice if this was set to the console window size in some 
way... :/ ... any thoughts on how to make this more dynamic?
    
    **CHANGELOG**
    
    ```
    * `VertexProgramStep.toString()` contains `GraphFilter` information.
    * `TraversalExplanation.toString()` supports word wrapping.
    ```
    
    `mvn clean install` passed.
    
    VOTE +1.
    
    cc/ @rjbriody @RussellSpitzer 

You can merge this pull request into a Git repository by running:

    $ git pull https://github.com/apache/tinkerpop TINKERPOP-1332

Alternatively you can review and apply these changes as the patch at:

    https://github.com/apache/tinkerpop/pull/337.patch

To close this pull request, make a commit to your master/trunk branch
with (at least) the following in the commit message:

    This closes #337
    
----
commit fc62efec4d578b5e767676b04789cf35535f53f0
Author: Marko A. Rodriguez <[email protected]>
Date:   2016-06-15T13:00:44Z

    TraversalExplanation now supports word wrapping and 
VertexProgamStep.toStrings() have GraphFilter information attached.

commit a4771b6c9f8c02a94f4735fea20b82d0ab1e1671
Author: Marko A. Rodriguez <[email protected]>
Date:   2016-06-15T13:07:52Z

    Merge branch 'master' into TINKERPOP-1332

----


> Improve .explain() Dialogue 
> ----------------------------
>
>                 Key: TINKERPOP-1332
>                 URL: https://issues.apache.org/jira/browse/TINKERPOP-1332
>             Project: TinkerPop
>          Issue Type: Improvement
>          Components: process
>    Affects Versions: 3.2.0-incubating
>            Reporter: Russell Alexander Spitzer
>            Assignee: Marko A. Rodriguez
>            Priority: Minor
>
> Currently the output of explain gives you a long list of strategies but no 
> details about their application
> {code}
> ==>Traversal Explanation
> ============================================================================================================================
> Original Traversal                 [GraphStep(vertex,[]), CountGlobalStep]
> HaltedTraverserStrategy      [D]   [GraphStep(vertex,[]), CountGlobalStep]
> ConnectiveStrategy           [D]   [GraphStep(vertex,[]), CountGlobalStep]
> VertexProgramStrategy        [D]   
> [TraversalVertexProgramStep([GraphStep(vertex,[]), CountGlobalStep]), 
> ComputerResultStep]
> OrderLimitStrategy           [O]   
> [TraversalVertexProgramStep([GraphStep(vertex,[]), CountGlobalStep]), 
> ComputerResultStep]
> IdentityRemovalStrategy      [O]   
> [TraversalVertexProgramStep([GraphStep(vertex,[]), CountGlobalStep]), 
> ComputerResultStep]
> FilterRankingStrategy        [O]   
> [TraversalVertexProgramStep([GraphStep(vertex,[]), CountGlobalStep]), 
> ComputerResultStep]
> IncidentToAdjacentStrategy   [O]   
> [TraversalVertexProgramStep([GraphStep(vertex,[]), CountGlobalStep]), 
> ComputerResultStep]
> RangeByIsCountStrategy       [O]   
> [TraversalVertexProgramStep([GraphStep(vertex,[]), CountGlobalStep]), 
> ComputerResultStep]
> AdjacentToIncidentStrategy   [O]   
> [TraversalVertexProgramStep([GraphStep(vertex,[]), CountGlobalStep]), 
> ComputerResultStep]
> MatchPredicateStrategy       [O]   
> [TraversalVertexProgramStep([GraphStep(vertex,[]), CountGlobalStep]), 
> ComputerResultStep]
> GraphFilterStrategy          [O]   
> [TraversalVertexProgramStep([GraphStep(vertex,[]), CountGlobalStep]), 
> ComputerResultStep]
> PathProcessorStrategy        [O]   
> [TraversalVertexProgramStep([GraphStep(vertex,[]), CountGlobalStep]), 
> ComputerResultStep]
> SparkInterceptorStrategy     [P]   
> [TraversalVertexProgramStep([GraphStep(vertex,[]), CountGlobalStep]), 
> ComputerResultStep]
> SparkSingleIterationStrategy [P]   
> [TraversalVertexProgramStep([GraphStep(vertex,[]), CountGlobalStep]), 
> ComputerResultStep]
> ProfileStrategy              [F]   
> [TraversalVertexProgramStep([GraphStep(vertex,[]), CountGlobalStep]), 
> ComputerResultStep]
> LambdaRestrictionStrategy    [V]   
> [TraversalVertexProgramStep([GraphStep(vertex,[]), CountGlobalStep]), 
> ComputerResultStep]
> ComputerVerificationStrategy [V]   
> [TraversalVertexProgramStep([GraphStep(vertex,[]), CountGlobalStep]), 
> ComputerResultStep]
> StandardVerificationStrategy [V]   
> [TraversalVertexProgramStep([GraphStep(vertex,[]), CountGlobalStep]), 
> ComputerResultStep]
> Final Traversal                    
> [TraversalVertexProgramStep([GraphStep(vertex,[]), CountGlobalStep]), 
> ComputerResultStep]
> {code}
> It would be helpful if filter strategies for example would list the filters 
> used.



--
This message was sent by Atlassian JIRA
(v6.3.4#6332)

Reply via email to