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