[
https://issues.apache.org/jira/browse/TINKERPOP-2128?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=17791623#comment-17791623
]
ASF GitHub Bot commented on TINKERPOP-2128:
-------------------------------------------
spmallette commented on code in PR #2367:
URL: https://github.com/apache/tinkerpop/pull/2367#discussion_r1410644880
##########
docs/src/reference/the-traversal.asciidoc:
##########
@@ -5097,6 +5097,17 @@ new transaction immediately following the `commit()`
that raises the events. The
may also not behave as "snapshots" at the time of their creation as they are
"live" references to actual database
elements.
+=== ExplainStrategy
Review Comment:
this change seems to create a new and additional way to do explain in Java
where only this new one works in non-JVM languages? there's always going to be
little differences among the various languages but this one seems really
fundamental. everyone knows the `explain()` and I don't think there should be
another way to do it.
I see the complexity of the `explain()` signature in trying to make this
change - it returns `TraversalExplanation` rather than `Traversal` and is
effectively a form of terminal step.
I don't know if this makes this change much more elegant, but couldn't you
remove the user need to know about `ExplainStrategy` if `Traversal.explain()`
added it and then self-iterated to return the `TraversalExplanation`?
In Java, I suppose you would self-iterate a clone so that you could still do:
```
gremlin> t = g.V().out();[]
gremlin> t.explain()
==>Traversal Explanation
==========================================================================================
Original Traversal [GraphStep(vertex,[]),
VertexStep(OUT,vertex)]
ConnectiveStrategy [D] [GraphStep(vertex,[]),
VertexStep(OUT,vertex)]
...
Final Traversal [TinkerGraphStep(vertex,[]),
VertexStep(OUT,vertex)]
gremlin> t
==>v[3]
==>v[2]
==>v[4]
==>v[5]
==>v[3]
==>v[3]
```
On the idea of a completely different approach, I can't help wondering if
"explain" isn't a form of `GraphOp`, like transactions are (i.e. a special form
of `Bytecode` that trigger a particular command on the server). Did you
consider that?
> Allow explain() to work in a remote fashion
> -------------------------------------------
>
> Key: TINKERPOP-2128
> URL: https://issues.apache.org/jira/browse/TINKERPOP-2128
> Project: TinkerPop
> Issue Type: Improvement
> Components: process
> Affects Versions: 3.4.0
> Reporter: Alan Boudreault
> Priority: Critical
>
> {{g.V().explain()}} doesn´t really work in any scenario where the traversal
> is being executed remotely. the {{explain()}} applies locally in java so you
> really just get this:
> {code}
> gremlin> g = traversal().withRemote('conf/remote-graph.properties')
> ==>graphtraversalsource[emptygraph[empty], standard]
> gremlin> g.V().out().explain()
> ==>Traversal Explanation
> ============================================================================================
> Original Traversal [GraphStep(vertex,[]), VertexStep(OUT,vertex)]
> RemoteStrategy [D]
> [RemoteStep(DriverServerConnection-localhost/127.0.0.1:8182 [graph=g])]
> Final Traversal
> [RemoteStep(DriverServerConnection-localhost/127.0.0.1:8182 [graph=g])]
> {code}
--
This message was sent by Atlassian Jira
(v8.20.10#820010)